diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..333be00 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,55 @@ +# Copyright 2023 Zander Brown +# +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library. If not, see . + +image: fedora:latest + +doc: + only: + refs: + - tags + variables: + MESON_ARGS: >- + -Ddocs=true + -Dgtk4=true + -Dvapi=false + before_script: + - dnf -y install fribidi-devel g++ git glib2-devel gnutls-devel + gobject-introspection-devel gperf gtk3-devel gtk4-devel + libicu-devel meson pango-devel pcre2-devel python3-jinja2 + python3-packaging python3-pygments python3-toml python3-typogrify + systemd-devel lz4-devel gi-docgen + script: + - meson --prefix=/app ${MESON_ARGS} _build + - ninja -C _build + - mkdir _doc + - cp .gitlab-ci/docs.html _doc/index.html + - mv _build/doc/reference/vte-2.91/ _doc/gtk3 + - mv _build/doc/reference/vte-2.91-gtk4/ _doc/gtk4 + artifacts: + expose_as: 'Browse documentation' + paths: + - _doc/index.html + - _doc + +pages: + needs: ['doc'] + only: + refs: + - tags + script: + - cp -r _doc public + artifacts: + paths: + - public diff --git a/.gitlab-ci/docs.html b/.gitlab-ci/docs.html new file mode 100644 index 0000000..ab0dc7c --- /dev/null +++ b/.gitlab-ci/docs.html @@ -0,0 +1,79 @@ + + + + + + + + Vte Docs + + + + +

Vte Documentation

+ Gtk 3 + Gtk 4 + + + \ No newline at end of file diff --git a/COPYING.GPL3 b/COPYING.GPL3 index 24afbe2..25f026d 100644 --- a/COPYING.GPL3 +++ b/COPYING.GPL3 @@ -646,7 +646,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -665,7 +665,7 @@ might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -. +. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you diff --git a/COPYING.LGPL2 b/COPYING.LGPL2 deleted file mode 100644 index 4362b49..0000000 --- a/COPYING.LGPL2 +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/COPYING.XTERM b/COPYING.XTERM new file mode 100644 index 0000000..c34c621 --- /dev/null +++ b/COPYING.XTERM @@ -0,0 +1,30 @@ +Parts of code copied from xterm, under this licence: + +Copyright 2013-2019,2020 by Ross Combs +Copyright 2013-2019,2020 by Thomas E. Dickey + + All Rights Reserved + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name(s) of the above copyright +holders shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..78c6a68 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,77784 @@ +commit 3c29bfef30c34afec4982ba5ec37f944cfacbba2 (HEAD, tag: 0.76.0) +Author: Christian Persch +Date: 2024-03-15 22:20:18 +0100 + + build: Version 0.76.0 + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d09a78964cec7368217acbd35389d7acc1350f64 +Author: Christian Persch +Date: 2024-03-15 22:20:18 +0100 + + build: Bump gtk4 req version + + (cherry picked from commit 8e9524712866d93339c3cc87d2854ba3a7633dd0) + + meson.build | 6 +++--- + src/app/app.cc | 2 +- + src/widget.cc | 2 +- + 3 files changed, 5 insertions(+), 5 deletions(-) + +commit 73fb0460fdda1280345659c86f11109583680ac9 +Author: Carlos Garnacho +Date: 2024-03-13 21:36:39 +0100 + + widget: Activate OSK on button release + + Currently, make it mutually exclusive with having started a selection, + other heuristics might be added here (e.g. making it also mutually exclusive + with unselecting text, or not issuing the call for cases where text input + is known to be ignored. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2630 + (cherry picked from commit f3cc41dcbc4e6967155790e3bbd597042ee5af76) + + src/vte.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 2fd91e541cf0db93e20e437a01ecf1f8273a5b65 +Author: Carlos Garnacho +Date: 2024-03-13 21:36:39 +0100 + + widget: Add im_activate_osk() method + + This method makes the GtkIMContext request an OSK to be activated. + Currently supported on the Wayland platform. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2630 + (cherry picked from commit 4c21cff3a72a946cbd39fae15acc4515484c4ea6) + + src/widget.cc | 8 ++++++++ + src/widget.hh | 1 + + 2 files changed, 9 insertions(+) + +commit 4d9b6be5898c0fe3019d34f55710efb1b60afe7b +Author: Egmont Koblinger +Date: 2024-03-12 23:12:44 +0100 + + gtk3: draw: minifont: Don't do minifont caching + + On gtk3, painting from the minifont cache seems to be slower than + painting the glyph in the first place, so don't use a cache. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2757 + + (cherry picked from commit 1109aad798c47b30c7af04c1771983d3f48f5b7d) + + src/minifont.cc | 30 +++++++++++++++++++++++------- + 1 file changed, 23 insertions(+), 7 deletions(-) + +commit 3166f8b4aca05e5100990a52a0ddd27a4a71884b +Author: Christian Persch +Date: 2024-03-02 21:15:06 +0100 + + build: Post release version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit acad28244fc5015fd547983037ed3029c624a5b3 (tag: 0.75.92) +Author: Christian Hergert +Date: 2024-03-02 21:03:55 +0100 + + fonts: Allow unknown coverage to silently pass through + + https://gitlab.gnome.org/GNOME/vte/-/issues/2747 + (cherry picked from commit a9104708265d49cd0bcacfb6e3dd7dfddc27dbb1) + + src/drawing-cairo.cc | 1 - + src/drawing-gsk.cc | 3 ++- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit ae78b60049aed5a82858effc2027e9d2b707fd4e +Author: Christian Persch +Date: 2024-03-02 19:07:25 +0100 + + widget: Fix end alignment + + This fixes a regression from commit + 5a242c232bec00a905176f26a30630ff66606a95. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2752 + + src/vteinternal.hh | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 4f6ea6d22125909ef2881cbe1ee1cdda3967400f +Author: Christian Persch +Date: 2024-03-02 19:07:25 +0100 + + app: Rework argument parsing + + ... and add loading/saving options from/to a key file. + + src/app/app.cc | 1004 ++++++++++++++++++++++++++++++++++++++++++++---------- + src/glib-glue.hh | 1 + + 2 files changed, 816 insertions(+), 189 deletions(-) + +commit fb9693eca240f7892b584ae6f33f7bc389fa9533 +Author: Egmont Koblinger +Date: 2024-02-28 09:21:06 +0100 + + widget: gtk4: Fix the look of outline block cursor in the first column + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2749 + + (cherry picked from commit bcf9db0d628478c7870ed1c84c1c454a9120594f) + + src/vte.cc | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +commit 9d0ed85d89d4b3b476e57536e6219a9a2d7f6de4 +Author: Christian Hergert +Date: 2024-02-27 11:58:02 -0800 + + ringview: inline get_bidirow() + + This is called frequently during Terminal::draw() and reduces overhead + there on release builds a decent amount. I didn't quanitfy exactly without + bidi patches applied, but it approaches double digits. + + src/ringview.cc | 10 ---------- + src/ringview.hh | 9 ++++++++- + 2 files changed, 8 insertions(+), 11 deletions(-) + +commit 529c4b2e6121187fea6779f73552dbf11c3d524b +Author: Christian Hergert +Date: 2024-02-27 11:15:51 -0800 + + bidi: inline log2vis() and vis2log() + + These are called frequently during drawing. Inlining the fast path is + extremely useful here to keep that overhead low. + + Hoist it into the caller for roughly a 4.5% reduction in drawing time + using scrolling a large file in vim as the test case. + + src/bidi.cc | 24 ------------------------ + src/bidi.hh | 22 ++++++++++++++++++++-- + 2 files changed, 20 insertions(+), 26 deletions(-) + +commit 74d223ae10564d1d5b6cde67e28a001edcb583d1 +Author: Christian Hergert +Date: 2024-02-27 10:07:40 -0800 + + terminal: inline hot path of cell_is_selected_log() + + This function appears to be called a lot, especially during high scrolling + scenarios (such as ctrl+f/ctrl+b in vim). There is a typical fast path + which is that ring is updated and there is no selection. Hoist that into + the callers and leave the selection case behind a function call. + + This shaves about 1.5% of application samples off time spent in + Terminal::draw(). + + src/vte.cc | 2 +- + src/vteinternal.hh | 20 ++++++++++++++++++-- + 2 files changed, 19 insertions(+), 3 deletions(-) + +commit 169b83d3a31c5a43a9d0f8ea178d0db8335036bc +Author: Christian Hergert +Date: 2024-02-27 10:13:13 -0800 + + terminal: annotate unlikely paths in determine_colors() + + This gets called extremly often so ensuring that we keep the common path + tight is important. This is good for about 2% of application samples + in the case of scrolling with ctrl+f/ctrl+b in vim. + + src/vte.cc | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit c33b94d17d3c80b8bd4b05f0f2e2e26bc0948b1c +Author: Christian Hergert +Date: 2024-02-27 10:33:03 -0800 + + terminal: remove determine_colors() invisible check + + This is called very frequently. + + The invisible check, which should be unnecessary, is about 2.8% of + application samples in a tight scrolling loop with vim doing + ctrl+f/ctrl+b. + + src/vte.cc | 9 --------- + 1 file changed, 9 deletions(-) + +commit b3f8c243a16c611ef644f6339cf191d6eab07908 +Author: Egmont Koblinger +Date: 2024-02-24 18:56:41 +0100 + + Revert "widget: Limit select-all to the writable region not including the scrollback" + + This reverts commit caf8a6a7a17a3f70fa5fc611c71ffb27a5cfee75. + + Also bump GLib requirement to include their fix, and add an API comment + discouraging the use of large scrollback sizes. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2504 + + (cherry picked from commit 4637dd9729fbf9001154a1d962746227860ffb4b) + + meson.build | 8 ++++---- + src/vte.cc | 9 +++------ + src/vtegtk.cc | 3 +++ + 3 files changed, 10 insertions(+), 10 deletions(-) + +commit cedcd4537c200af3960b83d6902c9c629f777dd1 +Author: Marko Mäkelä +Date: 2024-02-24 15:37:59 +0100 + + vte.sh: Avoid warning if shell is configured with 'set -u' + + Followup of commit e148105691926cbd4861e7dc26dec194f59c7f14. + + Bug-Debian: https://bugs.debian.org/1063941 + + (cherry picked from commit 2010409c9f708f840fb5b30b3cb6ef5628765ec4) + + src/vte.sh.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit cf7984d3be7b4902769ad8566f44e1487ad84d7f +Author: Christian Persch +Date: 2024-02-22 21:54:49 +0100 + + widget: Set scroll-on-insert to false by default + + https://gitlab.gnome.org/GNOME/vte/-/issues/2743 + (cherry picked from commit e55af605d1139d86b388ccfb4eefafe879952fa0) + (cherry picked from commit b6d52dc3bab5bab9c902abedeff62eda16238d1e) + + src/vtegtk.cc | 2 +- + src/vteinternal.hh | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 6581fea7a4450a724ec3a4bc4859156722d1df1d +Author: Christian Hergert +Date: 2024-02-21 14:26:07 -0800 + + scheduler: add 10hz fallback scheduler + + If we fail to get updates from the window manager and/or compositor, then + fallback to a 10hz scheduler that will ensure we still make progress on + incoming PTY data. + + This fixes a situation where the GdkFrameClock will not advance while the + window is hidden in GNOME Shell using Super+H. + + src/meson.build | 2 + + src/scheduler.cc | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/scheduler.h | 31 +++++++++++ + src/vte.cc | 24 +++----- + src/vteinternal.hh | 2 +- + 5 files changed, 201 insertions(+), 16 deletions(-) + +commit 7329a0c9fcb32ace5c274c6a884ba69448b541c9 +Author: Christian Persch +Date: 2024-02-12 22:20:41 +0100 + + widget: Try to fix a build failure on 32-bit archs + + https://gitlab.gnome.org/GNOME/vte/-/issues/2722 + + (cherry picked from commit e7e8a8c7ade54ca89ed38a18729aab891fb96f92) + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ceaf69ac5486ae9cee6a67aa863946149c459275 +Author: Egmont Koblinger +Date: 2024-02-19 09:40:25 +0100 + + ring: Only occasionally advance the stream tails + + This results in a slight performance improvement. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2715 + + (cherry picked from commit c2343bf3854d1f4f35e4afe2de397151dafc0747) + + src/ring.cc | 15 +++++++++------ + 1 file changed, 9 insertions(+), 6 deletions(-) + +commit 07ca9e0da93ab69fdc9b9eb284afa163ee59fa74 +Author: Egmont Koblinger +Date: 2024-02-19 09:38:31 +0100 + + lib: Batch handling of single-width characters + + Runs of single-width printable characters are handled in a special + code path for increased performance. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2693 + + (cherry picked from commit 77a8f94acb85d03ebf03f58e03069357f3c2072a) + + src/chunk.hh | 3 ++ + src/vte.cc | 88 +++++++++++++++++++++++++++++++++++++++++------------- + src/vteinternal.hh | 4 +-- + 3 files changed, 73 insertions(+), 22 deletions(-) + +commit 10931c693a8278969c28f7235cceaa150df7da82 +Author: Egmont Koblinger +Date: 2024-02-19 09:38:26 +0100 + + lib: Remember the Terminal in ProcessingContext + + https://gitlab.gnome.org/GNOME/vte/-/issues/2693 + + (cherry picked from commit c89a24786586ab2aa23752558a0f147c98cee5d2) + + src/vte.cc | 43 +++++++++++++++++++++++-------------------- + 1 file changed, 23 insertions(+), 20 deletions(-) + +commit c8dab1a4be20759eb3cd67c5dcf51820f57784dd +Author: Egmont Koblinger +Date: 2024-02-19 09:11:40 +0100 + + widget: Faster rewrapping on resize + + Introduce a special fast code path for paragraphs that will fit in a + single line at the new window size. This speeds up the rewrapping of + such paragraphs by about 5-10x. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2657 + + (cherry picked from commit ffab62df110097185b14b061c0858a3552c08b61) + + src/ring.cc | 24 +++++++++++++++++++++--- + src/ring.hh | 7 ++++--- + 2 files changed, 25 insertions(+), 6 deletions(-) + +commit 0614aeb9d09c8f501292e81182dad2c8316d4e80 +Author: Egmont Koblinger +Date: 2024-02-19 09:02:06 +0100 + + widget: gtk4: Fix double and triple click handling + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2648 + + (cherry picked from commit ab6dcbc16e7a3d4a2c7a554131ea202b0b7e9c96) + + src/vte.cc | 20 ++++++++++++++++---- + 1 file changed, 16 insertions(+), 4 deletions(-) + +commit b29a3a263444ba6caea973870538735789706d77 +Author: Egmont Koblinger +Date: 2024-02-19 09:02:02 +0100 + + widget: Bit of cleanup around the previous fix + + (cherry picked from commit d9f753e1cbfbc0ad9cec3503e7fff34d91a538b2) + + src/vte.cc | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +commit 9006628253b8bda37d526b5faa615a29d8594e19 +Author: Egmont Koblinger +Date: 2024-02-19 09:01:36 +0100 + + widget: Make backwards search find wrapped words + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/104 + + (cherry picked from commit 08a78ced0f94ffdffe476f47dd61d2ec5d841a95) + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 14725febff3ca731a8b49b29b9bbaad58a90f31e +Author: Egmont Koblinger +Date: 2024-02-19 08:42:26 +0100 + + Revert "build: Remove extra debug compile option" + + This reverts commit 8d5697550f1460480792763767bd638e07a4a624 + and renames the option from debugg to dbg. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2696 + + (cherry picked from commit 019551eabf18510964bf4542ac70112a5f3281c2) + + meson.build | 2 +- + meson_options.txt | 5 +++-- + 2 files changed, 4 insertions(+), 3 deletions(-) + +commit 0f5bbb762f2fafc49787093a9974cd38e53c5529 +Author: Samuel Thibault +Date: 2024-01-04 11:49:56 +0100 + + widget: a11y: Add missing text changes on scrolling with modifications + + When vte_terminal_accessible_text_scrolled gets called, the terminal + might have not only scrolled, but also changed. We thus have to check + whether the remaining text really is exactly the same as expected. + + We here support simple diff for the common case: an ample head and/or tail + content is the same. This allows to emit only the modification, which is + usually relatively small. + + Fixes: https://gitlab.gnome.org/GNOME/vte/issues/88 + + src/vteaccess.cc | 267 ++++++++++++++++++++++++++++++++++++++++++++----------- + 1 file changed, 214 insertions(+), 53 deletions(-) + +commit b94a8fb5091d014891fa67776bb693e3edbc1760 +Author: Christian Persch +Date: 2024-02-11 15:26:32 +0100 + + widget: Add type annotation to setup-context-menu signal + + gobject-introspection seems to have a problem with custom pointer + types (G_DEFINE_POINTER_TYPE), leading to this warning when building + vte's GIR: + + :: Warning: Vte: (Signal)setup-context-menu: argument context: Unresolved type: 'VteEventContext' + + Adding the explicit type annotation to the parameter in the signal's + docs comment appears to fix this problem. + + (cherry picked from commit c7225d241f713e898fbf840835f719f42a5dd748) + + src/vtegtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e02eed7b389249a7208876f510eefd7103e92421 +Author: Christian Persch +Date: 2024-02-11 13:20:24 +0100 + + build: Post release version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4ebb548e28db550257d67e5fa329b80de4d7c10e (tag: 0.75.91) +Author: Christian Persch +Date: 2024-02-11 13:18:36 +0100 + + Revert "lib: Add a simple UUID class" + + This reverts commit 68d4539c6ebe9547abb19385bd6e8bfbca843f6e. + + src/cxx-utils.hh | 29 ----- + src/fwd.hh | 2 - + src/glib-glue.hh | 1 - + src/meson.build | 25 +--- + src/uuid-test.cc | 166 ------------------------ + src/uuid.cc | 214 ------------------------------- + src/uuid.hh | 211 ------------------------------ + src/vte-glue.hh | 1 - + src/vte/meson.build | 1 - + src/vte/vte.h | 1 - + src/vte/vteenums.h | 18 --- + src/vte/vteuuid.h | 77 ----------- + src/vteuuid.cc | 339 ------------------------------------------------- + src/vteuuidinternal.hh | 30 ----- + 14 files changed, 1 insertion(+), 1114 deletions(-) + +commit 2ce1d8e9de688f7c9e7d26647494ed259d209026 +Author: Christian Persch +Date: 2024-02-11 13:18:29 +0100 + + Revert "lib: Add some colour helper classes" + + This reverts commit b8f31a0459d45f03183af067cb0fc7847b2a8b84. + + src/color-names-tests.hh | 853 --------------------------- + src/color-names.hh | 1443 ---------------------------------------------- + src/color-parser.cc | 477 --------------- + src/color-parser.hh | 54 -- + src/color-test.cc | 217 ------- + src/color.hh | 181 ------ + src/meson.build | 21 - + 7 files changed, 3246 deletions(-) + +commit db7726eacea84e1f397829c1dc75dd1a66191ec3 +Author: Christian Persch +Date: 2024-02-11 12:25:52 +0100 + + build: Post release version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d81534141c572ec1f317aaef37ee25a912178603 (tag: 0.75.90) +Author: Egmont Koblinger +Date: 2024-02-10 23:09:53 +0100 + + vte.sh: Consistent indentation + + (cherry picked from commit 9e8824480ef51374bf9b42ad8ee59f64d50456b1) + + src/vte.sh.in | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit ba7a6e904235e50cd2c98109d7cff50902d42531 +Author: Egmont Koblinger +Date: 2024-02-10 23:09:50 +0100 + + vte.sh: Set up bash and zsh for OSC 133 shell integration + + https://gitlab.gnome.org/GNOME/vte/-/issues/2681 + + (cherry picked from commit 4d4e4807e1205ea10bca821af30caa0ec70325db) + + src/vte.sh.in | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 53 insertions(+) + +commit e1d5418e0cdabccb39b743415b4bb18593935f8c +Author: Egmont Koblinger +Date: 2024-02-10 23:09:47 +0100 + + emulation: Support conditional new paragraph + + Add OSC 133 L escape sequence to maybe move down the cursor to ensure + it's at the beginning of a paragraph. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2681 + + (cherry picked from commit 3dce4fa8eb14b658fe3122311915bbc9f6e18502) + + src/vteseq.cc | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit 6e8a2adb3fe721e30872f7120b1f13387f3db13b +Author: Egmont Koblinger +Date: 2024-02-10 23:09:44 +0100 + + emulation: Track shell integration escape sequences + + Track OSC 133 A (prompt), B (command), C (output) escape sequences. + Add methods to scroll to previous/next prompt. + Hook these up to Shift+Ctrl+Left/Right keypresses. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2681 + + (cherry picked from commit 7808c6d2fca8b189e305c049ca82f1450adf5db1) + + src/attr.hh | 19 +++++++++++++++++ + src/cell.hh | 1 + + src/parser-osc.hh | 2 +- + src/ring.cc | 45 ++++++++++++++++++++++++++++++++++++++++ + src/ring.hh | 1 + + src/vte.cc | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- + src/vteinternal.hh | 7 ++++++- + src/vteseq.cc | 24 ++++++++++++++++++++- + 8 files changed, 155 insertions(+), 5 deletions(-) + +commit 0534ec3ca3b55576e3775bd35a292a1ec4ea90f3 +Author: Egmont Koblinger +Date: 2024-02-10 23:09:38 +0100 + + lib: Remove pointless "maybe" in some method names + + (cherry picked from commit aad9e79d8f7006f986b03c2a0de473a29526491d) + + src/vte.cc | 18 +++++++++--------- + src/vteinternal.hh | 4 ++-- + 2 files changed, 11 insertions(+), 11 deletions(-) + +commit 8c0c6c5fbae68e1760dde001ee4f3b26016a7ebe +Author: Christian Persch +Date: 2024-02-10 19:07:02 +0100 + + build: Version 0.75.90 + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e264c6ed36c1a5ada131d5ee781645fff4ce9e78 +Author: Christian Persch +Date: 2024-02-10 19:07:02 +0100 + + all: Remove SIXEL support from stable branch + + The SIXEL support is not in a releasable state with + important and fundamental problems still unsolved. + + (cherry picked from commit d578bd30b18a0d040305f356a3327fbd011e5451) + (cherry picked from commit ba1e05c9ad34d0e48a823ad5a67b96baa166de24) + (cherry picked from commit 6d80d3bca78397b2073f61e7954f3ceb45a8cb37) + (cherry picked from commit d90b9d1139c3ce413670f34588506741673919bb) + (cherry picked from commit 59d1403c455801dbbb64dadb55478bb0e5e96966) + (cherry picked from commit e0720853f59ebf54e022b4cd164de2d9b8a21fc1) + + meson.build | 2 - + meson_options.txt | 7 - + src/app/app.cc | 6 - + src/debug.cc | 1 - + src/debug.h | 1 - + src/fwd.hh | 8 - + src/image.cc | 68 --- + src/image.hh | 102 ---- + src/meson.build | 56 -- + src/parser-cat.cc | 327 ----------- + src/parser-seq.py | 2 +- + src/pty.cc | 4 - + src/ring.cc | 225 +------ + src/ring.hh | 46 -- + src/sixel-context.cc | 516 ---------------- + src/sixel-context.hh | 662 --------------------- + src/sixel-fuzzer.cc | 763 ------------------------ + src/sixel-parser.hh | 669 --------------------- + src/sixel-test.cc | 1597 -------------------------------------------------- + src/vte.cc | 187 +----- + src/vtedefines.hh | 6 - + src/vtegtk.cc | 26 +- + src/vteinternal.hh | 38 -- + src/vteseq.cc | 224 +------ + src/widget.hh | 3 - + 25 files changed, 18 insertions(+), 5528 deletions(-) + +commit 0d56a309f55063a94c73b9f584d4d9b0fec92b8f +Author: Christian Persch +Date: 2024-02-10 19:07:02 +0100 + + widget: Remove termprops from stable branch + + This reverts commit 713dafdacc4c5264376a539e562f2b3cf0e162be. + This reverts commit 6e68f077dc315eb02628c59569c4ebfdcdffc7f8. + This reverts commit 90904e30eb3af45a546cce6847c520320f5571c5. + This reverts commit 130adb28c82b33335a7bcd2b90e08e5104f11dec. + This reverts commit 50d9b3b6ca3a8529ff4c33da609617f4211348c5. + This reverts commit 03356b77ba7ffc7b098cc876c5e1306f83a759fb. + This reverts commit 20cd61065c33fadfa29d81b23ca60887bb87b873. + This reverts commit 01ca39e2b6523b246e6a2ea251ffbe9698bba29e. + This reverts commit 1ce1cccd0557e60db4a3ef6825fa91026439cae0. + This reverts commit 90543ab2a3de9635993950d8afb231fcb11bb915. + + src/app/app.cc | 51 -- + src/color-parser.hh | 14 - + src/color.hh | 14 +- + src/fwd.hh | 7 - + src/marshal.list | 1 - + src/meson.build | 19 +- + src/parser-osc.hh | 1 - + src/parser.hh | 12 - + src/termprops-test.cc | 352 ---------- + src/termprops.hh | 462 ------------- + src/vte.cc | 25 +- + src/vte/vteenums.h | 45 +- + src/vte/vteglobals.h | 34 - + src/vte/vteterminal.h | 137 +--- + src/vtedefines.hh | 2 - + src/vtegtk.cc | 1746 +------------------------------------------------ + src/vtegtk.hh | 2 - + src/vteinternal.hh | 61 +- + src/vteseq.cc | 107 --- + src/widget.cc | 13 - + src/widget.hh | 32 - + 21 files changed, 16 insertions(+), 3121 deletions(-) + +commit 713dafdacc4c5264376a539e562f2b3cf0e162be +Author: Christian Persch +Date: 2024-02-08 21:55:53 +0100 + + widget: termprops: Reset termprops on terminal reset + + When resetting the terminal (RIS, DECSTR, or DECSR) we need to also + reset all the termprops, and emit the change notification. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2732 + + src/vte.cc | 3 +++ + src/vtegtk.cc | 3 +-- + src/vteinternal.hh | 9 +++++++++ + 3 files changed, 13 insertions(+), 2 deletions(-) + +commit 6e68f077dc315eb02628c59569c4ebfdcdffc7f8 +Author: Christian Persch +Date: 2024-02-08 21:55:53 +0100 + + widget: termprops: Rewrite termprop documentation + + Clarify the purpose of each property type, and the exact syntax + of the OSC sequence to set termprops. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2732 + + src/vtegtk.cc | 252 ++++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 164 insertions(+), 88 deletions(-) + +commit 90904e30eb3af45a546cce6847c520320f5571c5 +Author: Christian Persch +Date: 2024-02-07 19:28:03 +0100 + + widget: termprops: Unify int types + + There really is no need for separate 16- and 64-bit integers. + Remove the 16-bit ones and only support 64-bit ones, as the + getters already do. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2732 + + src/app/app.cc | 14 +++------ + src/termprops-test.cc | 76 +++++++++++++-------------------------------- + src/termprops.hh | 19 ++++-------- + src/vte/vteenums.h | 12 +++----- + src/vtegtk.cc | 85 +++++++++++++++------------------------------------ + 5 files changed, 60 insertions(+), 146 deletions(-) + +commit 38cb502fc34fd9ad2281c29fc58e8676ae1772d5 +Author: Egmont Koblinger +Date: 2024-02-07 14:19:19 +0100 + + widget: Fix HTML CSS property "text-decoration-style: solid" + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bec7e6a27204a577425e5c29586a8ac618d6fa1d +Author: Egmont Koblinger +Date: 2024-02-06 13:41:09 +0100 + + widget,emulation: Add support for dotted and dashed underlines + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2639 + + src/attr.hh | 4 ++-- + src/vte.cc | 41 +++++++++++++++++++++++++++++++++++++---- + src/vteseq.cc | 2 +- + 3 files changed, 40 insertions(+), 7 deletions(-) + +commit 130adb28c82b33335a7bcd2b90e08e5104f11dec +Author: Christian Persch +Date: 2024-02-06 22:32:39 +0100 + + widget: termprops: Relax boolean value parsing + + Allow True/False and TRUE/FALSE also. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2732#note_1999752 + + src/termprops-test.cc | 12 +++++++++--- + src/termprops.hh | 10 ++++++++-- + src/vtegtk.cc | 3 ++- + 3 files changed, 19 insertions(+), 6 deletions(-) + +commit 50d9b3b6ca3a8529ff4c33da609617f4211348c5 +Author: Christian Persch +Date: 2024-02-05 23:04:55 +0100 + + widget: termprops: String value parsing fixes + + Fix parsing to reject an unescaped semicolon. + + Also, there is no need to escape the colon (':') in string values, so + drop the need to escape it. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2732 + + src/termprops-test.cc | 7 ++++--- + src/termprops.hh | 9 ++++----- + 2 files changed, 8 insertions(+), 8 deletions(-) + +commit 03356b77ba7ffc7b098cc876c5e1306f83a759fb +Author: Christian Persch +Date: 2024-02-05 23:04:55 +0100 + + widget: termprops: Add some more tests + + Check that the string value of a STRING termprop admits the + characters ! and = which are used in the termprop set-statement + to delimit the key from the value/to end the value. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2732 + + src/termprops-test.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 20cd61065c33fadfa29d81b23ca60887bb87b873 +Author: Christian Persch +Date: 2024-02-05 23:04:55 +0100 + + widget: termprops: Allow true/false for BOOL termprops + + https://gitlab.gnome.org/GNOME/vte/-/issues/2732 + + src/termprops-test.cc | 12 ++++++++++-- + src/termprops.hh | 4 ++-- + src/vtegtk.cc | 2 +- + 3 files changed, 13 insertions(+), 5 deletions(-) + +commit 01ca39e2b6523b246e6a2ea251ffbe9698bba29e +Author: Christian Persch +Date: 2024-02-05 23:04:55 +0100 + + widget: termprops: Add DOUBLE type + + https://gitlab.gnome.org/GNOME/vte/-/issues/2732 + + src/termprops-test.cc | 29 +++++++++++++++ + src/termprops.hh | 25 +++++++++++++ + src/vte/vteenums.h | 2 ++ + src/vte/vteterminal.h | 22 ++++++++---- + src/vtegtk.cc | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 171 insertions(+), 6 deletions(-) + +commit 01c5418b17b1b636de4f887f4aa3d494d12cbe78 +Author: Christian Persch +Date: 2024-02-05 18:30:52 +0100 + + emulation: Allow default parameter value for XTVERSION + + There is a discrepance between the xterm documentation and the actual + xterm behaviour in that the documentation does not mention that the + sequence admits a default value of 0 (to report the xterm name and + version), while the code does allos the user of a default param. + + Make vte follow the xterm code. + + https://gitlab.gnome.org/GNOME/vte/-/issues/235 + + src/vteseq.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 33e8896684e43f49b05899641d9607ff30ffe71f +Author: Christian Persch +Date: 2024-02-04 10:14:35 +0100 + + emulation: Support XTVERSION sequence + + https://gitlab.gnome.org/GNOME/vte/-/issues/235 + + src/parser-reply.hh | 1 + + src/parser-seq.py | 2 ++ + src/vteseq.cc | 32 ++++++++++++++++++++++++++++++-- + 3 files changed, 33 insertions(+), 2 deletions(-) + +commit b443ed1c8f5f5396e4bb6c037d1608fa65d51369 +Author: Christian Persch +Date: 2024-02-03 21:45:15 +0100 + + emulation: Reply to DECRQPSR and DECRQTSR + + These will need to be implemented, but for now at least reply + with an error report so that clients listening for a reponse + do get one. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2616 + + src/parser-reply.hh | 2 +- + src/parser-seq.py | 10 +++++++--- + src/vteseq.cc | 52 +++++++++++++++++++++++++++++----------------------- + 3 files changed, 37 insertions(+), 27 deletions(-) + +commit fe5b4c4ca43d78fa7cda012691a2837ba99a38f2 +Author: Christian Persch +Date: 2024-02-03 21:10:25 +0100 + + emulation: More accurate DA1 and DA2 replies + + When not in test mode, reply with a more honest level 1 response, since + vte doesn't implement most of the things a higher level mandates. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2724 + + src/vteseq.cc | 33 +++++++++++++++++++++++++-------- + 1 file changed, 25 insertions(+), 8 deletions(-) + +commit 1ce1cccd0557e60db4a3ef6825fa91026439cae0 +Author: Christian Persch +Date: 2024-02-02 23:21:52 +0100 + + build: Work around clang being clang + + src/color.hh | 14 +++++++------- + src/vtegtk.cc | 4 ++-- + 2 files changed, 9 insertions(+), 9 deletions(-) + +commit 8d5697550f1460480792763767bd638e07a4a624 +Author: Christian Persch +Date: 2024-02-02 23:21:52 +0100 + + build: Remove extra debug compile option + + Just enable debug when one of the debug buildtypes are specified. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2696 + + meson.build | 2 +- + meson_options.txt | 3 +-- + 2 files changed, 2 insertions(+), 3 deletions(-) + +commit 5a242c232bec00a905176f26a30630ff66606a95 +Author: Christian Persch +Date: 2024-02-02 23:21:52 +0100 + + widget: Renumber VterAlign enum + + src/vte/vteenums.h | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit db722504dd53c54189665970119d83fc72bd2e17 +Author: Christian Persch +Date: 2024-02-02 23:21:52 +0100 + + emulation: Also reply to DECRQSS on XTERM_MODKEYS + + ... since xterm 389 does too. + + src/vteseq.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 8fc2717717ed70e0a979422f6307fab9aaad04d5 +Author: Christian Hergert +Date: 2024-01-30 20:11:35 -0800 + + Revert "widget: Update function docs" + + This reverts commit 5f82f91b941b7c1f27c837d26441a4d5f16d619f. + + src/vtegtk.cc | 14 ++++++-------- + 1 file changed, 6 insertions(+), 8 deletions(-) + +commit dc8c4ee2b4d1b704f7d5e0b002d4b62f4918a39f +Author: Christian Hergert +Date: 2024-01-30 20:07:02 -0800 + + Revert "fonts: use CAIRO_HINT_STYLE_NONE on GTK 4" + + This reverts commit 74fe87b68da9e0a1d3cf26ebf079f4bb366e7c24. + + This causes some issues with rendering so we're going to have to + find another way to deal with fractional scaling. + + src/fonts-pangocairo.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit 5f82f91b941b7c1f27c837d26441a4d5f16d619f +Author: Christian Hergert +Date: 2024-01-29 22:38:47 +0100 + + widget: Update function docs + + ... to mention that the default font options include + %CAIRO_HINT_STYLE_NONE on GTK 4. + + src/vtegtk.cc | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +commit 76330dd70731ee0a0ecf9e3c267d7d7e6418736d +Author: Christian Persch +Date: 2024-01-29 22:38:47 +0100 + + emulation: Remove xterm alias for DSR_DEC 53 + + ... since xterm removed theirs in version 389. + + src/vteseq.cc | 3 --- + 1 file changed, 3 deletions(-) + +commit 74fe87b68da9e0a1d3cf26ebf079f4bb366e7c24 +Author: Christian Hergert +Date: 2024-01-29 10:53:22 -0800 + + fonts: use CAIRO_HINT_STYLE_NONE on GTK 4 + + This fixes an issue when fractional scaling is used that a portion of a + hinted glyph could fall outside the ink rect due to pixel grid shifting. + This is more apparent with the Vulkan/NGL GPU renderers in GTK now that + they are aware of the fractional scaling API of Wayland. Without this + you risk a small amount of unintended clipping. See GNOME/gtk#6367. + + See the following link for additional details. However, in the case here + with fractional scaling, disabling hint-metrics is not an option because + it will result in the same output as hint-metrics: on with + hint-style: slight. + + https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/6823#note_1989289 + + Fixes #2736 + + src/fonts-pangocairo.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 90543ab2a3de9635993950d8afb231fcb11bb915 +Author: Christian Persch +Date: 2024-01-28 20:40:30 +0100 + + widget: Add terminal properties + + https://gitlab.gnome.org/GNOME/vte/-/issues/2125 + + src/app/app.cc | 57 ++ + src/color-parser.hh | 14 + + src/fwd.hh | 7 + + src/marshal.list | 1 + + src/meson.build | 19 +- + src/parser-osc.hh | 1 + + src/parser.hh | 12 + + src/termprops-test.cc | 336 +++++++++++ + src/termprops.hh | 439 ++++++++++++++ + src/vte.cc | 22 +- + src/vte/vteenums.h | 47 +- + src/vte/vteglobals.h | 34 ++ + src/vte/vteterminal.h | 127 +++- + src/vtedefines.hh | 2 + + src/vtegtk.cc | 1608 ++++++++++++++++++++++++++++++++++++++++++++++++- + src/vtegtk.hh | 2 + + src/vteinternal.hh | 52 +- + src/vteseq.cc | 107 ++++ + src/widget.cc | 13 + + src/widget.hh | 32 + + 20 files changed, 2923 insertions(+), 9 deletions(-) + +commit b8f31a0459d45f03183af067cb0fc7847b2a8b84 +Author: Christian Persch +Date: 2024-01-28 20:40:30 +0100 + + lib: Add some colour helper classes + + src/color-names-tests.hh | 853 +++++++++++++++++++++++++++ + src/color-names.hh | 1443 ++++++++++++++++++++++++++++++++++++++++++++++ + src/color-parser.cc | 477 +++++++++++++++ + src/color-parser.hh | 54 ++ + src/color-test.cc | 217 +++++++ + src/color.hh | 181 ++++++ + src/meson.build | 21 + + 7 files changed, 3246 insertions(+) + +commit 68d4539c6ebe9547abb19385bd6e8bfbca843f6e +Author: Christian Persch +Date: 2024-01-28 20:40:30 +0100 + + lib: Add a simple UUID class + + Imported from https://bugzilla.gnome.org/show_bug.cgi?id=639078 + + src/cxx-utils.hh | 29 +++++ + src/fwd.hh | 2 + + src/glib-glue.hh | 1 + + src/meson.build | 25 +++- + src/uuid-test.cc | 166 ++++++++++++++++++++++++ + src/uuid.cc | 214 +++++++++++++++++++++++++++++++ + src/uuid.hh | 211 ++++++++++++++++++++++++++++++ + src/vte-glue.hh | 1 + + src/vte/meson.build | 1 + + src/vte/vte.h | 1 + + src/vte/vteenums.h | 18 +++ + src/vte/vteuuid.h | 77 +++++++++++ + src/vteuuid.cc | 339 +++++++++++++++++++++++++++++++++++++++++++++++++ + src/vteuuidinternal.hh | 30 +++++ + 14 files changed, 1114 insertions(+), 1 deletion(-) + +commit 76f16adfa2ab731cc8f8042a487a6b61263d0404 +Author: Zander Brown +Date: 2024-01-27 20:04:02 +0000 + + widget: Don't throw warnings for our own header + + Fix: https://gitlab.gnome.org/GNOME/vte/-/issues/2731 + + src/vte/vtedeprecated.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 5388832e54d85a91dffcc436dfdf386bac6b839d +Author: Christian Hergert +Date: 2024-01-26 09:44:54 -0800 + + gsk: fix rectangle drawing using border nodes + + in GSK, border nodes draw _inside_ the bounding box. So we don't need to + do the same sort of Cairo'ism for half-line boundaries. + + This fixes that which also happens to fix the non-focused window cursor + rendering too thick with the newer GTK NGL renderer that landed on main. + + Fixes #2730 + + src/drawing-gsk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ca4fb88362aa0a295928b7d46ec5aaca7092268c +Author: Christian Persch +Date: 2024-01-22 22:41:45 +0100 + + widget: Fix context menu event check + + Prevent the context menu being shown erroneously. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2728 + + src/vte.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit bfd656e49e9151207d7291d60dfefacff52e73f0 +Author: Christian Hergert +Date: 2024-01-19 10:45:36 -0800 + + widget: notify of style change upon css_changed + + The org.gnome.desktop.interface text-scaling-factor setting used by + the "Large Text" option in control-center applies to the gtk-xft-dpi which + in turn effects the CSS machinery. + + We must notify of a style change so that the PangoContext used by our + PangoLayout to measure and cache PangoFont will take the new scaling + factor into account. + + This makes GTK 4 act the same as GTK 3 did (and still does) when the + setting changes. + + src/widget.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 9d2167b977133080cacc1c3ed029ad1962a2ceb5 +Author: Christian Persch +Date: 2024-01-06 20:18:09 +0100 + + docs: Install lz4-devel + + .gitlab-ci.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9eb4c6e63a285ffdbabdf02b4426b859cf52e707 +Author: Christian Persch +Date: 2024-01-06 19:47:24 +0100 + + build: Post release version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit de5df02c42eb5de98f92f5cb4520fc963a54ab51 (tag: 0.75.0) +Author: Christian Persch +Date: 2023-12-31 14:25:16 +0100 + + regex: Add out param for error location to the _full() APIs + + src/regex.cc | 4 ++++ + src/regex.hh | 1 + + src/vte/vteregex.h | 2 ++ + src/vteregex.cc | 27 ++++++++++++++++++++------- + 4 files changed, 27 insertions(+), 7 deletions(-) + +commit 4530d385191562d84f60066e168631fc1f45f3cc +Author: Egmont Koblinger +Date: 2023-12-02 17:28:16 +0100 + + widget: Don't update the ringview before scrolling in history + + ... or synthesizing "alternate screen scroll" keypresses, it's just not + needed in these cases. + + Improves https://gitlab.gnome.org/GNOME/vte/-/issues/2705 + + src/vte.cc | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 9a42ae3d5ddc57c5807c823aa131e071924d0736 +Author: Christian Persch +Date: 2023-12-28 23:06:32 +0100 + + regex: Add API to set extra PCRE2 compile flags + + src/pcre2-glue.hh | 1 + + src/regex.cc | 9 ++++- + src/regex.hh | 1 + + src/vte/vteregex.h | 14 +++++++ + src/vteregex.cc | 106 +++++++++++++++++++++++++++++++++++++++++++++-------- + 5 files changed, 115 insertions(+), 16 deletions(-) + +commit 1860b4876f4943fcf2d7e67537c5b0cc6f974b2b +Author: Egmont Koblinger +Date: 2023-12-24 21:48:13 +0100 + + widget: Scroll to the bottom on preedit + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2682 + + src/vte.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 4f54a76a647144a71ba5712934b5e0d812311482 +Author: Christian Persch +Date: 2023-12-24 11:26:09 +0100 + + widget: Deprecate old get-text APIs + + Deprecate the old vte_terminal_get_text*() APIs that take a + VteSelelectionFunc, and deprecate that as well. + + src/vte/vtedeprecated.h | 21 +++++++++++++++++++++ + src/vte/vteterminal.h | 25 ------------------------- + src/vtegtk.cc | 10 ++++++++-- + 3 files changed, 29 insertions(+), 27 deletions(-) + +commit 1ce1b836c0c002e0f841fc6cc3ea27337de8b319 +Author: Aleksandr Mezin +Date: 2023-12-24 11:26:09 +0100 + + widget: Add bindable replacement API to get the displayed text + + vte_terminal_get_text() isn't bindable in some languages because they + cannot pass the now-required nullptr for the attributes GArray. Add + a replacement in the style of the other already-existing APIs which + take a VteFormat also. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2710 + + src/vte/vteterminal.h | 5 +++++ + src/vtegtk.cc | 56 +++++++++++++++++++++++++++++++++++++++++---------- + 2 files changed, 50 insertions(+), 11 deletions(-) + +commit a5f11c41aa6c3e521d18cd99e093ebe5915cab71 +Author: Christian Persch +Date: 2023-12-23 22:58:41 +0100 + + widget: gtk4: Delay unsetting the context menu to idle + + The closed signal on the popover comes before the action callback for + the chosen action is dispatched, and unsetting the menu makes the + action fail to resolve. Hack around this design flaw by delaying the + unsetting to an idle handler. + + Remove the notify::visible handler since it runs just after the closed + signal anyway. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2716 + + src/widget.cc | 56 ++++++++++++++++++++++++++++++++++++++++++++------------ + src/widget.hh | 8 ++++++++ + 2 files changed, 52 insertions(+), 12 deletions(-) + +commit 39aa242388e73bd294b8489ce80428b6485f0bb3 +Author: Christian Persch +Date: 2023-12-22 19:15:09 +0100 + + widget: Work around kinetic scrolling when changing the adjustment + + There is no API to stop a kinetic scroll in GtkScrolledWindow when the + adjustment value is changed. Work around that by disabling kinetic + scrolling before changing the value, and re-enabling it afterwards. + + src/widget.cc | 42 +++++++++++++++++++++++++++++++++++++----- + src/widget.hh | 1 + + 2 files changed, 38 insertions(+), 5 deletions(-) + +commit ca746e5ebcd82187185709f33f3b46ea30e9f8c9 +Author: Christian Persch +Date: 2023-12-22 19:15:09 +0100 + + app: Add more scrolling options + + src/app/app.cc | 26 +++++++++++++++++++++++--- + 1 file changed, 23 insertions(+), 3 deletions(-) + +commit a1054ae189b5f946b65e1a9a186747bd0e92f6c5 +Author: Christian Persch +Date: 2023-12-22 19:15:09 +0100 + + widget: Add scroll-on-insert property + + Add setting to scroll to the bottom when text is inserted, e.g. by a + paste. + + src/app/app.cc | 1 + + src/vte.cc | 17 ++++++++++++ + src/vte/vteterminal.h | 6 ++++- + src/vtegtk.cc | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vtegtk.hh | 1 + + src/vteinternal.hh | 2 ++ + 6 files changed, 100 insertions(+), 1 deletion(-) + +commit 3a7c705f5f09d6dbd03bcd1abbd2744ab92eafcd +Author: Christian Persch +Date: 2023-12-14 17:57:04 +0100 + + bidi: Use malloced workspace area + + src/bidi.cc | 33 ++++++++++----------- + src/bidi.hh | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- + 2 files changed, 114 insertions(+), 18 deletions(-) + +commit 413b3ba3558463379d67ad92c264b6f8c556d9c9 +Author: Egmont Koblinger +Date: 2023-12-12 22:49:03 +0100 + + widget: Fix initial cursor blink state + + Fixes https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/8021 + + src/vteinternal.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9493d50a4ed8415eaa88bc87d4b2b9c28598ee1f +Author: Christian Persch +Date: 2023-12-12 00:17:59 +0100 + + widget: Fix selected text API with block selection mode + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2712 + + src/vtegtk.cc | 119 ++++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 78 insertions(+), 41 deletions(-) + +commit 6bda91c6e5c68683410b9ab2bf6f11c81b4c0c03 +Author: Christian Persch +Date: 2023-12-12 00:17:59 +0100 + + draw: Remove unused alpha param from drawing methods + + src/drawing-cairo.cc | 43 +++++++++++++++++++++++++++++++------------ + src/drawing-cairo.hh | 11 +++++++---- + src/drawing-context.cc | 32 +++++++++++++------------------- + src/drawing-context.hh | 34 ++++++++++++++++++++++------------ + src/drawing-gsk.cc | 35 ++++++++++++++++++++++++++--------- + src/drawing-gsk.hh | 11 +++++++---- + src/vte.cc | 46 ++++++++++++++++++++++------------------------ + 7 files changed, 128 insertions(+), 84 deletions(-) + +commit e98c1354d14879fc9d45e16815ac0c6d298ea506 +Author: Christian Persch +Date: 2023-12-12 00:17:59 +0100 + + widget: Add class vfunc for setup-context-menu signal + + For consistency with the other signals. + + src/vte/vteterminal.h | 17 ++++++++++------- + src/vtegtk.cc | 3 ++- + 2 files changed, 12 insertions(+), 8 deletions(-) + +commit a9cbd3948b3ecc75a8d725d5ed788b528b1f6f35 +Author: Christian Hergert +Date: 2023-11-06 10:32:45 -0800 + + vte: avoid creating rect/region on GTK 4 + + These aren't used when on GTK 4 so just avoid doing that work altogether + on GTK 4. + + src/vte.cc | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +commit adde982bad9306610c568414c3111f98e7636fa1 +Author: Christian Hergert +Date: 2023-12-01 11:08:51 -0800 + + vte: remove extra PTY read from tick callback + + This extra read was causing IO to be consumed from the GtkWidget tick + callback. We don't want that because it creates a priority inversion where + high-producing clients can take higher priority over slower producing + clients. + + Fixes #2698 + + src/vte.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit 7cd21873572c66b5a9d69178c8e0a0231d307569 +Author: Christian Hergert +Date: 2023-11-28 13:56:28 -0800 + + vte: emit adjustment changed in tick callback + + We want this to run every frame that we process new data so that the + layout phase of the frame clock will update the scroll position. + + src/vte.cc | 7 +++---- + src/vteinternal.hh | 2 +- + 2 files changed, 4 insertions(+), 5 deletions(-) + +commit c17d9c6b4571be0ab55c3818d9125233553bb7ee +Author: Christian Hergert +Date: 2023-11-30 12:24:29 -0800 + + Reapply "vte: drive updates from GdkFrameClock" + + This reverts commit 727f8c1034176b70871ba2eedca306a15caea191. + + The scrollback corruption was unrelated and fixed in + 27bde60e8aef578c3a87f239c7cf70dc8fbed8df. + + src/vte.cc | 353 ++++++----------------------------------------------- + src/vtedefines.hh | 3 - + src/vteinternal.hh | 10 +- + 3 files changed, 40 insertions(+), 326 deletions(-) + +commit 140c77ec045d062ae53e6966e4a640ac488c9bc1 +Author: Christian Persch +Date: 2023-11-30 18:36:15 +0100 + + widget: gtk4: Add long press touch gesture + + ... and show the context menu when it's triggered. + + This is necessary to fully port gnome-console to the new context menu + APIs. + + src/widget.cc | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- + src/widget.hh | 18 ++++++++++++++++ + 2 files changed, 82 insertions(+), 2 deletions(-) + +commit d1f94244bcc8bae7474d875dd12e7bb416017238 +Author: Egmont Koblinger +Date: 2023-11-27 09:32:35 +0100 + + lib: Inline the Unicode character width database + + This is faster than invoking the GLib methods. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2655 + + src/meson.build | 18 + + src/unicode-width-generate.py | 133 + + src/unicode-width-test.cc | 94 + + src/unicode-width.hh | 11589 ++++++++++++++++++++++++++++++++++++++++ + src/vte.cc | 21 +- + 5 files changed, 11836 insertions(+), 19 deletions(-) + +commit 76c1f7a27b53d51a65d1246f8e0436bff92b0af2 +Author: Egmont Koblinger +Date: 2023-11-28 21:06:24 +0100 + + ring: Fix error handling in the rewrapping code + + https://gitlab.gnome.org/GNOME/vte/-/issues/2699 + + src/ring.cc | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit e8b244ca982a86bddcd4f1da6cadf3d7cb6398be +Author: Egmont Koblinger +Date: 2023-11-28 16:17:49 +0100 + + stream: Add debug assertions verifying the snake's integrity + + https://gitlab.gnome.org/GNOME/vte/-/issues/2699 + + src/vtestream-file.h | 48 +++++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 47 insertions(+), 1 deletion(-) + +commit 27bde60e8aef578c3a87f239c7cf70dc8fbed8df +Author: Egmont Koblinger +Date: 2023-11-28 11:36:52 +0100 + + stream: Fix a rare corruption when advancing the tail + + When the snake's tail advances by multiple blocks at once, through + a state chance, then the snake entered an inconsistent state, + subsequently causing scrollback data corruptions or even a crash. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2699 + + src/vtestream-file.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 47ac92b5810162dd9e014e5e60eaf108654c731e +Author: Andre Klapper +Date: 2023-11-28 12:21:03 +0100 + + DOAP: Replace defunct mailing list with Discourse support forum + + vte.doap | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 727f8c1034176b70871ba2eedca306a15caea191 +Author: Christian Persch +Date: 2023-11-26 21:09:04 +0100 + + Revert "vte: drive updates from GdkFrameClock" + + This reverts commit 4903c11ffcc6919f844304897dc3b9f9e9f67854. + + This causes display corruption and occasional crashes. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2699 + + src/vte.cc | 359 +++++++++++++++++++++++++++++++++++++++++++++++------ + src/vtedefines.hh | 3 + + src/vteinternal.hh | 10 +- + 3 files changed, 329 insertions(+), 43 deletions(-) + +commit 964c27337cf6d0eaaf8c4020b51ce33a1a7cd9bf +Author: Christian Persch +Date: 2023-11-24 21:27:14 +0100 + + widget: Add context menu support + + Add a setup-context-menu signal emitted when a context menu can be + shown, and context-menu-model and context-menu properties to provide + the actual menu. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2530 + https://gitlab.gnome.org/GNOME/vte/-/issues/2593 + + src/app/app.cc | 115 ++++++++++---------- + src/refptr.hh | 7 ++ + src/vte.cc | 113 ++++++++++++++++---- + src/vte/vteterminal.h | 35 +++++++ + src/vtegtk.cc | 283 ++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vtegtk.hh | 3 + + src/vteinternal.hh | 1 + + src/widget.cc | 269 ++++++++++++++++++++++++++++++++++++++++++++++- + src/widget.hh | 129 ++++++++++++++++++++++- + 9 files changed, 864 insertions(+), 91 deletions(-) + +commit 11241641d2ad0c9132e44fb14e7ac2e9cb09f378 +Author: Christian Persch +Date: 2023-11-24 21:27:14 +0100 + + draw: Add some constexpr to Rectangle methods + + src/drawing-context.hh | 23 ++++++++++++++--------- + 1 file changed, 14 insertions(+), 9 deletions(-) + +commit 159ea140580954281924370cef0f08266155290d +Author: Christian Persch +Date: 2023-11-24 21:27:14 +0100 + + widget: Improve yalign docs + + https://gitlab.gnome.org/GNOME/vte/-/issues/2610 + + src/vtegtk.cc | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit b98b1d40f82df10b6e2079e97a5e5e26b3417b85 +Author: Egmont Koblinger +Date: 2023-11-22 10:01:23 +0100 + + build: Suppress a warning about an unused variable in non-debug mode + + src/vteaccess.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 7c033ed658e1c3d955334b42aa81187f6b589272 +Author: Egmont Koblinger +Date: 2023-11-19 15:40:42 +0100 + + lib: Do not initialize cells before inserting characters + + This brings a small speedup. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2695 + + src/vte.cc | 6 ++++-- + src/vterowdata.cc | 12 ++++++++++++ + src/vterowdata.hh | 1 + + 3 files changed, 17 insertions(+), 2 deletions(-) + +commit de78d7274bd2127cd574d033a04c298bd1ea7432 +Author: Egmont Koblinger +Date: 2023-11-19 10:40:09 +0100 + + lib: Fix lines unwrapping too far + + This bug was introduced in the previous commit. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2694 + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 831fb03c95d7008e50461a1f86ced251f32abe1a +Author: Egmont Koblinger +Date: 2023-11-18 20:46:17 +0100 + + lib: Speed up inserting runs of ASCII characters + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2692 + + src/vte.cc | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++- + src/vteinternal.hh | 2 + + 2 files changed, 112 insertions(+), 2 deletions(-) + +commit 90bdd5bb36f82c948e4a6053fbdfb7383f8eec8c +Author: Egmont Koblinger +Date: 2023-11-16 18:20:54 +0100 + + lib: Simplify invalidation bounding box tracking + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2691 + + src/vte.cc | 24 +----------------------- + src/vteinternal.hh | 1 - + 2 files changed, 1 insertion(+), 24 deletions(-) + +commit 6d646c483b53912c2cbc8092664fb5ad716c4ea9 +Author: Egmont Koblinger +Date: 2023-11-17 21:32:33 +0100 + + emulation: Fix cursor position after an escape sequence initiated resize + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2258 + + src/vte.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 6b947f6e13def60ed5a9cf98a11d3b1621acf447 +Author: Christian Persch +Date: 2023-11-17 21:17:50 +0100 + + lib: Remove unnecessary "struct"s + + Rename vte_scrolling_region to vte::scrolling_region. + + src/vte.cc | 10 +++++----- + src/vteinternal.hh | 34 +++++++++++++++++++++------------- + src/vteseq.cc | 12 ++++++------ + 3 files changed, 32 insertions(+), 24 deletions(-) + +commit 3ca3d87c8f7f472db797fd118adb34efe70247b7 +Author: Egmont Koblinger +Date: 2023-11-06 14:42:52 +0100 + + emulation: Save/restore along with the cursor whether wrapping will occur + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2673 + + src/vte.cc | 2 ++ + src/vteinternal.hh | 1 + + src/vteseq.cc | 1 - + 3 files changed, 3 insertions(+), 1 deletion(-) + +commit 0be325dc217c80f61a291d15a9fd07fa68460492 +Author: Egmont Koblinger +Date: 2023-10-27 10:47:02 +0200 + + emulation: Make ED 2 and EL 2 clear the pending wrap flag + + src/vteseq.cc | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit 276fd3a314046833f0fb866c582721b82ee17f98 +Author: Egmont Koblinger +Date: 2023-10-26 12:33:30 +0200 + + emulation: Make DA1 report horizontal scrolling support + + Together with the dozen previous commits, this one + fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2526 + + src/vteseq.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 8417e805ecf8f49af51371e7f7aa30a2c4fd9f89 +Author: Egmont Koblinger +Date: 2023-10-26 08:09:09 +0200 + + emulation: Fix ECH not to expand the row beyond the terminal's width + + src/vteseq.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 05b09b8bb7b01faea9ebe5aa5744c5fd2bfe1183 +Author: Egmont Koblinger +Date: 2023-10-25 11:43:58 +0200 + + emulation: Make DECCOLM and DECALN reset the scrolling region + + Also make a window size change and DECALN reset origin mode. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2668 + + src/vte.cc | 1 + + src/vteseq.cc | 5 ++++- + 2 files changed, 5 insertions(+), 1 deletion(-) + +commit 67d0791fdf08bb4427edf9f4382b3492eff1a7e0 +Author: Egmont Koblinger +Date: 2023-10-19 21:58:17 +0200 + + emulation: Adjust Cursor Position Report (CPR) for left and right margins + + src/vteseq.cc | 60 +++++++++++++++++++++++++++++++++-------------------------- + 1 file changed, 34 insertions(+), 26 deletions(-) + +commit fb230c35c7348093d58428d8a85ef6596b31847a +Author: Egmont Koblinger +Date: 2023-10-18 15:14:42 +0200 + + emulation: Implement Forward Index (DECFI) and Back Index (DECBI) + + src/parser-seq.py | 4 ++-- + src/vteseq.cc | 16 ++++++++++++---- + 2 files changed, 14 insertions(+), 6 deletions(-) + +commit d3525dc17e9161d1ac2efce2a5c2bb4b9ea86287 +Author: Egmont Koblinger +Date: 2023-10-18 12:24:41 +0200 + + emulation: Implement Insert Column (DECIC) and Delete Columnn (DECDC) + + src/parser-seq.py | 4 ++-- + src/vteseq.cc | 41 +++++++++++++++++++++++++++++++++++++---- + 2 files changed, 39 insertions(+), 6 deletions(-) + +commit b1e9c7c68219286ce3b4f12f204a15134d70f3ac +Author: Egmont Koblinger +Date: 2023-10-25 12:25:19 +0200 + + emulation: Adjust IRM mode for left and right margins + + src/vte.cc | 25 +++++++++++++------------ + src/vteinternal.hh | 1 - + src/vteseq.cc | 6 +++--- + 3 files changed, 16 insertions(+), 16 deletions(-) + +commit 9c0827025f617db5eb573d38ca68f297e157bd54 +Author: Egmont Koblinger +Date: 2023-10-18 15:09:52 +0200 + + emulation: Adjust Insert Character (ICH) and Delete Character (DCH) + + ... for left and right margins. + + Also modify ICH to insert empty cells rather than spaces. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2676 + + src/vteinternal.hh | 2 -- + src/vteseq.cc | 95 ++++++++++++++++++------------------------------------ + 2 files changed, 32 insertions(+), 65 deletions(-) + +commit a65c04af90dc77ca39663a8eb6ccdec2feb4a0f4 +Author: Egmont Koblinger +Date: 2023-10-18 11:23:53 +0200 + + emulation: Implement Scroll Left (SL) and Scroll Right (SR) + + src/parser-seq.py | 4 +- + src/vte.cc | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 6 ++ + src/vteseq.cc | 34 ++++++++++-- + 4 files changed, 198 insertions(+), 6 deletions(-) + +commit f1b3b1a97e82dd25cc848a89bc2599236e076fab +Author: Egmont Koblinger +Date: 2023-11-06 13:51:57 +0100 + + emulation: Minor cleanup at smart tab handling + + src/vteseq.cc | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +commit 467ce417b9c566182759cd688ff32f987632c2bf +Author: Egmont Koblinger +Date: 2023-10-18 09:41:47 +0200 + + emulation: Adjust cursor moving operations to respect left and right margins + + Also fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2675 + + src/tabstops-test.cc | 18 +++-- + src/tabstops.hh | 8 +- + src/vte.cc | 2 +- + src/vteinternal.hh | 3 +- + src/vteseq.cc | 208 ++++++++++++++++++++++++++++++++++----------------- + 5 files changed, 160 insertions(+), 79 deletions(-) + +commit da9afaac723928ca2f6ca59e58a4cb88a61e6439 +Author: Egmont Koblinger +Date: 2023-10-29 18:25:49 +0100 + + emulation: Shuffle a few methods to a more logical order + + src/vteinternal.hh | 6 ++-- + src/vteseq.cc | 88 +++++++++++++++++++++++++++--------------------------- + 2 files changed, 48 insertions(+), 46 deletions(-) + +commit 7868486c4634bfb6ee099879796dc90c1eb41e27 +Author: Egmont Koblinger +Date: 2023-10-15 15:07:17 +0200 + + emulation: Adjust vertical scrolling to respect left and right margins + + src/vte.cc | 190 +++++++++++++++++++++++++++++++++++++++++------------ + src/vteinternal.hh | 8 ++- + src/vteseq.cc | 26 +++++--- + 3 files changed, 171 insertions(+), 53 deletions(-) + +commit 928a0d5a540a4fc14d19e6db4585f27e4b4b37ca +Author: Egmont Koblinger +Date: 2023-11-06 13:56:14 +0100 + + doc: Add scrolling-region.txt + + doc/scrolling-region.txt | 183 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 183 insertions(+) + +commit a519857ddb27f8654b92762e6466dba000a9643e +Author: Egmont Koblinger +Date: 2023-10-26 12:14:54 +0200 + + emulation: Adjust cursor tracking and autowrapping for the right margin + + With right margin support, we can no longer rely on the cursor being off + to the right to denote that the next character will wrap. An additional + boolean is required to distinguish this from the cursor being explicitly + moved to just beyond the right margin. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2677 + + src/vte.cc | 27 +++++++++++++++++---- + src/vteinternal.hh | 23 ++++++++++++++---- + src/vteseq.cc | 70 +++++++++++++++++++++++++++++++++--------------------- + 3 files changed, 84 insertions(+), 36 deletions(-) + +commit ac1c5e2eae3ad43ed58f82a6b26011d951b823de +Author: Egmont Koblinger +Date: 2023-10-25 12:26:30 +0200 + + emulation: Execute SCORC even when DECLRMM is enabled + + src/vteseq.cc | 3 --- + 1 file changed, 3 deletions(-) + +commit a7918a3e930db9afb2c9a362fd80453a883ae120 +Author: Egmont Koblinger +Date: 2023-10-13 12:12:57 +0200 + + emulation: Track DECSLRM left and right margins + + First step towards fixing https://gitlab.gnome.org/GNOME/vte/-/issues/2526 + + src/modes.py | 2 +- + src/parser-reply.hh | 3 ++- + src/vteseq.cc | 40 +++++++++++++++++++++++++++++++++------- + 3 files changed, 36 insertions(+), 9 deletions(-) + +commit 0a49d0f722614f7d985362bd6e54206d7dd7f9ef +Author: Egmont Koblinger +Date: 2023-10-29 20:17:50 +0100 + + emulation: Fix the behavior if invalid scrolling region is requested + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2666 + + src/vteseq.cc | 30 ++++++++++-------------------- + 1 file changed, 10 insertions(+), 20 deletions(-) + +commit 306e74d9d197d63a1ed45edae653a162881bd24d +Author: Egmont Koblinger +Date: 2023-10-16 15:27:35 +0200 + + emulation: Scroll Up (SU) and Delete Line (DL) push to the scrollback + + ... if the scrolling region includes the top row. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2663 + + src/vte.cc | 210 ++++++++++++++++++++++++++++++++++++++--------------- + src/vteinternal.hh | 10 ++- + src/vteseq.cc | 194 +++++++++---------------------------------------- + 3 files changed, 191 insertions(+), 223 deletions(-) + +commit fd4d59ccff6051d7ae443dfc806590ff29ad2323 +Author: Egmont Koblinger +Date: 2023-10-16 14:55:47 +0200 + + emulation: Disregard bce in the scrolling region + + ... if scrolling occurs due to autowrapping and the scrolling region + starts at row 2 or below. + + This was an oversight in commit a26a60b8e564968b61716f0d2e52e17cd9362413. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2663#note_1866082 + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5d4301d8d1087b7a09dd2e81803a8ea09107bfc7 +Author: Egmont Koblinger +Date: 2023-10-15 17:00:20 +0200 + + emulation: Extend vte_scrolling_region to track all four margins + + ... and provide convenience methods, too. + + Also, fix reporting the scrolling region if it's at its defaults. + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2669 + + src/vte.cc | 29 ++++++-------- + src/vteinternal.hh | 31 ++++++++++++++- + src/vteseq.cc | 111 ++++++++++++++++------------------------------------- + 3 files changed, 75 insertions(+), 96 deletions(-) + +commit cda3ca1b77575c0ee086b1a09fc840969b0145ec +Author: Egmont Koblinger +Date: 2023-10-15 15:53:26 +0200 + + emulation: Rename start/end margins to top/bottom + + src/vte.cc | 38 +++++------ + src/vteinternal.hh | 2 +- + src/vteseq.cc | 192 ++++++++++++++++++++++++++--------------------------- + 3 files changed, 116 insertions(+), 116 deletions(-) + +commit 6a3c0b78d3e5b0c42c52296c09602c2dbba23e91 +Author: Egmont Koblinger +Date: 2023-10-25 13:44:09 +0200 + + emulation: Preserve empty cells as NULs when computing DECRQCRA checksum + + Related to https://gitlab.gnome.org/GNOME/vte/-/issues/24 + + src/vte.cc | 12 ++++++++++-- + src/vtegtk.cc | 3 ++- + src/vteinternal.hh | 1 + + 3 files changed, 13 insertions(+), 3 deletions(-) + +commit 89efc23118e54e6069b7feca38b18d3ccc8b38aa +Author: Egmont Koblinger +Date: 2023-10-25 13:44:09 +0200 + + widget: Remove an unused parameter of get_text() + + src/vte.cc | 18 ++++++------------ + src/vteaccess.cc | 3 +-- + src/vtegtk.cc | 3 +-- + src/vteinternal.hh | 7 ++----- + 4 files changed, 10 insertions(+), 21 deletions(-) + +commit d4efcb454d3096b8f32b9a6fb4507e7fbf404b34 +Author: Christian Persch +Date: 2023-11-15 22:43:43 +0100 + + bindings: vala: Depend on graphene-gobject-1.0 + + ... instead of graphene-1.0. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2650 + + bindings/vala/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8ce544e879449705663ddfa1b0e445d211a01644 +Author: Christian Persch +Date: 2023-11-13 23:25:02 +0100 + + build: Silence deprecation warnings + + These warnings are just an annoyance; silence them via the compiler. + + meson.build | 1 + + 1 file changed, 1 insertion(+) + +commit f6658a23bb8c7126e9e040a49531d6f3ddf1e367 +Author: Christian Hergert +Date: 2023-10-31 11:13:49 -0700 + + drawing-gsk: fix a potential crash with empty runs + + This fixes a crash found while running vtebench on the GSK renderer. + Basically the same sort of thing we do on GTK 3. + + src/drawing-gsk.cc | 3 +++ + src/fonts-pangocairo.cc | 13 ++++++++----- + 2 files changed, 11 insertions(+), 5 deletions(-) + +commit 4903c11ffcc6919f844304897dc3b9f9e9f67854 +Author: Christian Hergert +Date: 2023-10-30 21:08:05 +0100 + + vte: drive updates from GdkFrameClock + + Instead of using timeouts to drive updates to the display we can use the + frame clock tick callback to drive those updates. This allows achieving + frame rates closer aligned to the monitors vblank timing. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2678 + + src/vte.cc | 353 ++++++----------------------------------------------- + src/vtedefines.hh | 3 - + src/vteinternal.hh | 10 +- + 3 files changed, 40 insertions(+), 326 deletions(-) + +commit a42afc1c502bd940eaacdd558701fd8403230777 +Author: Luis Javier Merino Morán +Date: 2023-10-30 21:08:05 +0100 + + emulation: Also use invisible bit for DECRQCRA checksum + + https://gitlab.gnome.org/GNOME/vte/-/issues/24 + + src/vte.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit fff3252d5130520818447c3603ffdd1f83d4703c +Author: Luis Javier Merino Morán +Date: 2023-10-29 09:04:04 +0100 + + emulation: Correct DECRQCRA negation + + It should be done before masking; and move that to ::checksum_area(). + + https://gitlab.gnome.org/GNOME/vte/-/issues/24 + + src/vte.cc | 1 + + src/vteseq.cc | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +commit 2273064a86514df1cd0bb863c06cea21e20e624e +Author: Luis Javier Merino Morán +Date: 2023-10-28 22:57:03 +0200 + + emulation: make DECRQCRA behave as VT520 + + Support attributes (bold, blink, reverse and underline), and return + complemented value. + + https://gitlab.gnome.org/GNOME/vte/-/issues/24 + + src/vte.cc | 20 ++++++++++++++++++-- + src/vteseq.cc | 2 +- + 2 files changed, 19 insertions(+), 3 deletions(-) + +commit e75a634da0eece2f45b3c412beac74d373fa2d11 +Author: Christian Persch +Date: 2023-10-28 22:57:03 +0200 + + parser: modes: Additions from recent xterm + + src/modes.py | 3 +++ + 1 file changed, 3 insertions(+) + +commit 0539290d083eb00b4de7676264caffa229ef748f +Author: Luis Javier Merino Morán +Date: 2023-10-21 09:59:28 +0200 + + build: Fix compile in debug mode + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2679 + + src/vte.cc | 4 +++- + src/vteaccess.cc | 2 +- + 2 files changed, 4 insertions(+), 2 deletions(-) + +commit cbf6c2345321989bd76cc216e3dc6eaf65e2e0d0 +Author: Christian Hergert +Date: 2023-10-18 14:18:03 -0700 + + debug: use vte_assert_cmp* functions + + We have vte_assert_cmp*() functions now which can be compiled out of + release builds (unlike g_assert_cmp*() functions. Use them everywhere + except for the unit tests. + + src/parser-glue.hh | 10 +++++----- + src/parser.hh | 2 +- + src/ring.cc | 32 ++++++++++++++++---------------- + src/ringview.cc | 14 +++++++------- + src/sixel-parser.hh | 2 +- + src/tabstops.hh | 6 ++++-- + src/vte.cc | 22 +++++++++++----------- + src/vteseq.cc | 2 +- + src/vteunistr.cc | 4 +++- + 9 files changed, 49 insertions(+), 45 deletions(-) + +commit baa0ae137bec6463b2a75c955da5f3f754a1109c +Author: Christian Hergert +Date: 2023-10-17 13:35:45 -0700 + + bidi: reuse char and index arrays across runs + + This allows reusing our allocations for state across runs of the + BidiRunner::explicit_line_shape() and BidiRunner::implicit_paragraph(). + Doing so can yield more than 4% reduction in CPU usage spent on allocation + tracking. + + src/bidi.cc | 85 ++++++++++++++++++++++++++++++++----------------------------- + src/bidi.hh | 28 +++++++++++++++----- + 2 files changed, 66 insertions(+), 47 deletions(-) + +commit bd2bca2aacb7d8676627b753d69e8091692c5343 +Author: Christian Hergert +Date: 2023-10-17 12:46:24 -0700 + + terminal: require caller to allocate GString for get_text() + + This pushes the allocation of the GString for Terminal::get_text() and + associated functions to the caller. In doing so, this allows reuse of + m_match_content. Since a maximized window can easily contain a page or + more of data, avoiding the power-of-two growth and GString maybe_expand() + checks here is useful. It combines well with the previous commit which + allows for reuse of the m_match_attributes array for the same reason. + + You'll mostly see this behavior when the mouse is sitting over the + terminal widget and there are a lot of updates to the screen. + + src/vte.cc | 135 +++++++++++++++++++++++++++++------------------------ + src/vteaccess.cc | 9 ++-- + src/vtegtk.cc | 25 +++++----- + src/vteinternal.hh | 30 ++++++------ + 4 files changed, 109 insertions(+), 90 deletions(-) + +commit 3f9dd9d93327e0dc060fce2cdf9810e90701ded5 +Author: Christian Hergert +Date: 2023-10-16 21:35:51 -0700 + + vteinternal: use specialized array for char attributes + + When the mouse pointer is within the widget we do a lot of of querying for + the text (each changing frame) due to match_hilite_update(). This spends + a few percent simply doing GArray sizing calculations. + + This patch does like we've done elsewhere and saves a bit over 3% CPU when + running btop at 10hz w/ the mouse pointer within the widget. + + src/vte.cc | 144 ++++++++++++++++++++++------------------------------- + src/vteaccess.cc | 85 +++++++++++-------------------- + src/vtegtk.cc | 27 +++++----- + src/vteinternal.hh | 22 +++++--- + 4 files changed, 117 insertions(+), 161 deletions(-) + +commit be4f205ea65dafda1308d8a408bafc91a5989033 +Author: Christian Persch +Date: 2023-10-18 22:11:24 +0200 + + draw: minifont: Only pad character where necessary + + So far only the diagonal line characters (U+2571..3) need to draw + slightly outside their cell, so only enlarge the character surface for + them and keep all other characters at the exact cell size. + + src/minifont.cc | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +commit a47e6a3e1847fc1d46f063d6866f48a30682953c +Author: Christian Persch +Date: 2023-10-18 22:11:24 +0200 + + draw: minifont: Fix drawing of diagonals + + U+2571, U+2572, and U+2573 must connect diagonally, so they draw + slightly outside their cell. The constant padding of 2px either side + was not enough to accomodate light_line_width/2 overdrawing, so make the + padding per-character overridable. + + src/minifont.cc | 70 ++++++++++++++++++++++++++++++++++++--------------------- + src/minifont.hh | 14 ++++++++---- + 2 files changed, 54 insertions(+), 30 deletions(-) + +commit c99989d7d72019f3f5411cce9db97088728895c7 +Author: Christian Persch +Date: 2023-10-18 22:11:24 +0200 + + draw: Style fixes + + src/drawing-cairo.hh | 78 +++++++++++++++++++++++---------------------- + src/drawing-context.hh | 8 +++-- + src/drawing-gsk.hh | 86 +++++++++++++++++++++++++++----------------------- + 3 files changed, 94 insertions(+), 78 deletions(-) + +commit 80b99caf47e1bed50f2dc7c1b347d9faa7c1daf2 +Author: Christian Persch +Date: 2023-10-18 22:11:24 +0200 + + draw: Include drawing-context.hh not drawing-cairo.hh + + src/drawing-context.cc | 2 +- + src/minifont.cc | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 5ed604a300e419ec9d27c854e5d64b243bae05d2 +Author: Christian Persch +Date: 2023-10-18 22:11:24 +0200 + + draw: Use a named constant + + ... not simply a number. Makes it a bit easier to see what's going on. + + src/drawing-context.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit c557b2300c835f0d22b6647c9155efdf101d0c2e +Author: Christian Hergert +Date: 2023-10-18 22:11:24 +0200 + + draw: implement native GTK 4 drawing + + This abstracts DrawingContext into an abstract base class with two + implementations: DrawingCairo and DrawingGsk. The DrawingCairo version + is only compiled on GTK 3 and keeps the design largely the same as it was + before, using one large Cairo context. The DrawingGsk attempts to provide + the same feature set but uses native GtkSnapshot and GskRenderNode + features. + + Minifont has been changed to be more performance friendly in GTK 4. Cairo + surfaces are maintained in a sized cache based on size and character. They + are drawn onto the canvas with as a mask for color which is slightly + different on GTK 3 to how they were drawn before. On GTK 4 they are also + drawn as a mask for color. A new fast path has been added to the GTK 4 + renderer to improve performance with this pattern. It, fundamentally, is + the same pattern GTK uses internally for it's glyph cache. + + For GTK 4, only the PangoGlyphString coverage is used. This allows the + creation of GskTextNode directly from the built strings. + + There are possibilities to improve performance further by caching the + container GskRenderNode for each row and re-using them frame to frame. + However, GTK will determine the appropriate damage region for the frame + regardless. + + A new Rectangle struct has been added to allow calling code to create the + rectangle in the best format used by the underlying rendering technology + without further conversions. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2553 + + src/drawing-cairo.cc | 629 ++++++++++------------------------- + src/drawing-cairo.hh | 194 +++-------- + src/drawing-context.cc | 350 ++++++++++++++++++++ + src/drawing-context.hh | 335 +++++++++++++++++++ + src/drawing-gsk.cc | 268 +++++++++++++++ + src/drawing-gsk.hh | 116 +++++++ + src/fonts-pangocairo.cc | 22 ++ + src/fonts-pangocairo.hh | 28 +- + src/fwd.hh | 1 + + src/meson.build | 18 +- + src/minifont.cc | 845 ++++++++++++++++++++++++++++++------------------ + src/minifont.hh | 34 +- + src/vte.cc | 132 ++++---- + src/vteinternal.hh | 15 +- + src/widget.hh | 2 + + 15 files changed, 1981 insertions(+), 1008 deletions(-) + +commit f83883d4d3f2cbf73516e073a61d715a5d2aadd2 +Author: Christian Persch +Date: 2023-10-16 21:14:05 +0200 + + draw:minifont: Add comment to the LR and RL hatching patterns + + ... explaining their differences in light of issue#2672. + + src/minifont.cc | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit a097c83b14344c3061723ff5a7313a4d7f9d79ee +Author: Efstathios Iosifidis +Date: 2023-10-16 18:09:04 +0000 + + Update Greek translation + + (cherry picked from commit eee37c871173d04387cd0004dde7f8676f390f62) + + po/el.po | 65 ++++++++++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 45 insertions(+), 20 deletions(-) + +commit 2796b4641a377b11254b97c4f0a3b349c6333337 +Author: Christian Hergert +Date: 2023-10-14 23:24:43 +0200 + + minifont: remove unused attr parameter + + src/drawing-cairo.cc | 1 - + src/minifont.cc | 1 - + src/minifont.hh | 1 - + 3 files changed, 3 deletions(-) + +commit 24af21dbe8555bd7fc8cc0e6212c95982371305d +Author: Christian Hergert +Date: 2023-10-14 23:24:43 +0200 + + vtetypes: add GdkRGBA conversion utility + + src/vtetypes.hh | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 05812adc66d947f477a551e31de00fb1276e72dc +Author: Christian Hergert +Date: 2023-10-14 23:24:43 +0200 + + app: avoid using Cairo fallback nodes on GTK 4 + + We don't want to create a fallback (Cairo) node unless necessary. + + src/app/app.cc | 34 +++++++++++++++------------------- + 1 file changed, 15 insertions(+), 19 deletions(-) + +commit bd5af21e48ebff893a47bbd24fb1c31b04dca225 +Author: Christian Hergert +Date: 2023-10-14 23:24:43 +0200 + + build: bump GTK requirement to 4.12 + + To better implement native drawing for GTK 4, 4.12 is needed. It provides + GDK_MEMORY_A8 which can be used with mask nodes (added in 4.10) for + colorizing a texture using the textures alpha channel plus the color rgb + values. + + meson.build | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 2dd6e93b83a4da2169bfa64d10d6dc5e76b3cf5b +Author: Christian Persch +Date: 2023-10-10 22:26:03 +0200 + + draw: minifont: Fix lr/rl hatching pattern to tile seamlessly + + The characters U+1FB98 UPPER LEFT TO LOWER RIGHT FILL and + U+1FB99 UPPER RIGHT TO LOWER LEFT FILL when put together vertically or + horizontally were not tiling seamlessly at all sizes. To fix this, the + latter's hatching pattern needs to be shifted up (or left) by one pixel. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2672 + + src/minifont.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4cd5c1283f6e38b6c5feb96c23d912656191fe31 +Author: Christian Hergert +Date: 2023-10-03 15:19:34 -0700 + + vte: batch printable character insertion + + If we have a printable character that was just inserted, follow-up and + try to insert more that are simple in nature and do not require + re-entering either the UTF-8 decoder or vte::parser::Parser. + + src/vte.cc | 15 +++++++++++++-- + 1 file changed, 13 insertions(+), 2 deletions(-) + +commit 8a25ad887ed895523ef603270ad64c890f1dbf36 +Author: Christian Hergert +Date: 2023-10-02 17:22:23 -0700 + + parser: move vte_parser_t into vte::parser::Parser + + This is just the first step towards being able to inline the very hot + paths from vte.cc through the Parser structure. Currently everything is + inlined but my guess is that we'll want to be selective about that and + make some things not inline and other things hoisted through an inline + function. + + Performance is roughly the same as before, except that I notice ever so + slightly more frames are rendered with this version when using the GTK 3 + implementation. + + src/parser-glue.hh | 475 +---------------- + src/parser-test.cc | 1 + + src/parser.cc | 1287 +++------------------------------------------- + src/parser.hh | 1382 +++++++++++++++++++++++++++++++++++++++++++++++++- + src/sixel-context.hh | 1 - + 5 files changed, 1436 insertions(+), 1710 deletions(-) + +commit 83d05504cc9aeb4cd89a5717a803295dad8942de +Author: Christian Hergert +Date: 2023-10-04 16:21:40 -0700 + + rowdata: use std::fill_n() + + Surprisingly, this is a couple percent speedup on a tight-loop test which + cats a very large file to stdout. + + src/vterowdata.cc | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +commit 662f708738e894021bbf5634a427d193828baf09 +Author: Christian Persch +Date: 2023-10-05 20:01:36 +0200 + + build: Fix the build with sixel enabled + + Fixes a regression from commit 2d7788157b8788786feba57cb3e8de31629ff3b5. + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8569f39e24125d52694ae02dd8aadd540f82db10 +Author: Christian Hergert +Date: 2023-09-27 14:27:42 -0700 + + ring, fonts: use g_string_truncate() to reset string + + g_string_truncate() can be hoisted into the caller unlike + g_string_set_size(). This will compile into what is basically just + buffer->str[0] = 0, buffer->len = 0; + + src/fonts-pangocairo.cc | 2 +- + src/ring.cc | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit fdb3468a7c7f063689c88ae91a6c8c570117a15f +Author: Christian Hergert +Date: 2023-10-03 13:08:32 -0700 + + build: compile out assertions and cast-checks + + In production builds, many GNOME libraries compile out both assertions and + cast checks. These often have significant overhead in tight loops which + we don't need in production releases but are critical during the + development phase to avoid shipping obvious bugs. + + This does the same for libvte libraries. + + Production builds are anything not starting with 'debug' in the profile. + That includes "plain" as well as "release" as distributions almost always + use "plain" with their custom compiler flags. + + Testing with an extremely large file cat to vte-2.91 this yields an 8% + improvement compared to the previous commit. + + meson.build | 6 +++++- + src/attr.hh | 4 +++- + src/bidi.cc | 20 ++++++++++---------- + src/debug.h | 14 ++++++++++++++ + src/meson.build | 4 ++-- + src/parser-glue.hh | 11 ++++++----- + 6 files changed, 40 insertions(+), 19 deletions(-) + +commit 2d7788157b8788786feba57cb3e8de31629ff3b5 +Author: Christian Hergert +Date: 2023-09-29 18:32:04 -0700 + + ring: remove VteRing C wrapper for vte::base::Ring + + Part of transitioning to vte::base::Ring was a intermediate _vte_ring_*() + wrapper API. This C API was preventing the compiler from inlining various + API that was desired to be inlined. + + This removes the C wrapper and updates all of the callers to use the + appropriate vte::base::Ring() methods instead. + + Additionally, functions which were intended to be inlined have been + inlined and do indeed remove some of the Ring overhead in profiles. + + src/ring.hh | 31 -------- + src/ringview.cc | 2 +- + src/vte.cc | 217 ++++++++++++++++++----------------------------------- + src/vteinternal.hh | 66 +++++++++++++--- + src/vteseq.cc | 34 ++++----- + 5 files changed, 149 insertions(+), 201 deletions(-) + +commit e9eeb34dab232c05850136405faaf536f172c674 +Author: Christian Hergert +Date: 2023-09-29 15:13:22 -0700 + + ring: inline vte::base::Ring::index_writable() + + This function gets called a lot from various places, and previously was + done through a C wrapper. It is a good candidate for inling, but cannot + do that while the C wrapper is in use. + + So both make it inlined and remove the C wrapper since it was likely just + there for transition purposes anyway. + + src/ring.cc | 7 ------- + src/ring.hh | 8 ++++++-- + src/vte.cc | 8 ++++---- + src/vteseq.cc | 14 +++++++------- + 4 files changed, 17 insertions(+), 20 deletions(-) + +commit 2ce13eb1b2f9b0069b395f3b9b8acc94459c7683 +Author: Christian Hergert +Date: 2023-09-29 15:02:25 -0700 + + ring: inline vte::base::Ring::ensure_writable() + + This function is called extremely often but almost never (only once in + my local testing) goes past the likely branch. Perfect candidate for + hosting into the inline and to avoid function call/return. + + src/ring.cc | 13 ------------- + src/ring.hh | 9 ++++++++- + 2 files changed, 8 insertions(+), 14 deletions(-) + +commit 41c062960a4da20e1b7591f9a0265f67f53f95d7 +Author: Christian Hergert +Date: 2023-09-28 13:43:37 -0700 + + unistr: fix typo in gtk-doc + + src/vteunistr.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 17541a35eeaec1c21594bcf3df635e755ed05b8d +Author: Christian Persch +Date: 2023-09-29 22:18:16 +0200 + + utf8: Add some more tests + + Test the decoder on invalid 5- and 6-byte old-style-UTF-8 sequences. + + src/utf8-test.cc | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit 46f0143a668bec298bbff8b9d4ee9f0042f65f88 +Author: Christian Hergert +Date: 2023-09-28 15:47:49 -0700 + + unistr: inline unichar into GString as UTF-8 + + This code path is *extremely* hot. This patch brings over the UTF-8 + conversion and uses g_string_append_len() which is now inlined by GLib + to allow for simply memcpy()'s the utf8 bytes into the destination string. + + The cost of calling g_string_append_unichar() is extremely high. It + currently is treated the same as a g_string_insert_unichar() at the end + which does not allow for the same level of optimization as a dedicated + code path for append(). + + Additionally, UTF-8 conversion does some of the same checks which the + calling code would have already done. Some of that may be able to be + shared when inlined into the caller. + + Even with other string related patches applied, this is good for a couple + more percent of CPU cost savings. + + src/vteunistr.h | 53 +++++++++++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 47 insertions(+), 6 deletions(-) + +commit dbcc9dfae1903644262eacb9457ec4a5c90c619c +Author: Christian Hergert +Date: 2023-09-28 15:10:03 -0700 + + unichar: hoist common unichar width into caller + + The most common case we run into here is the < 0x80 which will always be + a cell width of 1. The compiler does not seem to be inlining even + portions of _vte_unichar_width() naturally, so force it with a macro to + hoist just the common hot path into the caller. + + This is good for about 1% of savings similar to the previous inlines. + + src/vte.cc | 14 +++++++++++--- + 1 file changed, 11 insertions(+), 3 deletions(-) + +commit 6365311d158fad42d54bf3bb5d8fc3d72a97e75d +Author: Christian Hergert +Date: 2023-09-28 19:06:36 -0700 + + stream: switch compression from zlib to LZ4 + + Before this patch, vte::ring::Ring::freeze_row() was dominated by the cost + of writing compressed/encrypted data to the underlying file. That simply + disappears when using LZ4 compression instead. + + Fixes #2419 + + meson.build | 4 +++- + src/meson.build | 4 ++-- + src/vtestream-file.h | 22 ++++++++-------------- + 3 files changed, 13 insertions(+), 17 deletions(-) + +commit 342a0e3592c03a1be05515b9146842bab740e1d3 +Author: Christian Hergert +Date: 2023-09-28 14:22:56 -0700 + + unistr: hoist _vte_unistr_strlen() into caller + + For the common case (a gunistr which is exactly 1 character long), we can + host the check into the caller for as much as a 3.5% savings when comparing + vte::base::Ring::freeze_one_row() in a tight loop. + + src/vteunistr.cc | 4 ++-- + src/vteunistr.h | 2 ++ + 2 files changed, 4 insertions(+), 2 deletions(-) + +commit 01ea98eddc8dafb185072bff104d874ed58e8784 +Author: Christian Hergert +Date: 2023-09-28 14:03:32 -0700 + + unistr: hoist g_string_append_unichar() into caller + + We avoid an extra function call/return for every character by hoisting the + g_string_append_unichar() into the caller for the common path. + + It may make sense to also hoist g_string_append_unichar() into at least + the g_string_append_c() case which has an inlined version too, or just + inline the entire utf-8 encode. + + This saves a bit more than 2.5% of overhead when comparing run to run + vte::base::Ring::freeze_one_row() in a tight loop. + + src/vteunistr.cc | 6 ++---- + src/vteunistr.h | 9 +++++++++ + 2 files changed, 11 insertions(+), 4 deletions(-) + +commit e429d16060a485d3abe60c9bb4a60a37faa0f37e +Author: Christian Hergert +Date: 2023-09-26 14:53:22 -0700 + + bidi: add VteBidiIndexes array using GdkArrayImpl + + This does the same thing to FriBidiStrIndex that we have for FriBidiChar + which is to "flatten" the acess to the array along with a number of other + features allowing the compiler to do what it does best instead of going + through a generic-sized array structure like GArray. + + src/bidi.cc | 34 ++++++++++++++++++++-------------- + src/bidiarrays.hh | 11 ++++++++++- + 2 files changed, 30 insertions(+), 15 deletions(-) + +commit 1a8d53e99d51ab0c8f70782e76ffe073a2bf00bc +Author: Christian Hergert +Date: 2023-09-26 11:34:28 -0700 + + bidi: add VteBidiChars array of gunichar + + This removes the use of GArray for vteunistr building using the recent + import GdkArrayImpl. This removes a bunch of overhead in + g_array_maybe_expand() when building performing Bidi runs. + + src/bidi.cc | 50 +++++++++++++++++++++++++++----------------------- + src/bidiarrays.hh | 25 +++++++++++++++++++++++++ + src/vteunistr.cc | 18 ++++++++++-------- + src/vteunistr.h | 6 ++++-- + 4 files changed, 66 insertions(+), 33 deletions(-) + +commit 02afa1919da6c489c71480d3f394ebb297e58646 +Author: Christian Hergert +Date: 2023-09-26 11:33:21 -0700 + + import GdkArrayImpl for fast arrays + + This comes from significant array optimization in GDK over the past few + years. It allows us to have arrays inline with pre-allocated space as well + as avoiding an extra pointer chase in tight loops. Combined with knowing + the exact element sizes and alignment at compile time various memmove() + and memcpy() operations may be elided. + + src/gdkarrayimpl.c | 322 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 322 insertions(+) + +commit 01c76e12b6e488af0c83df9b704d6c6056733b83 +Author: Christian Hergert +Date: 2023-09-26 09:59:37 -0700 + + build-aux: add flatpak manifest for testing from Builder + + This allows selecting either the gtk3 or gtk4 profile from Builder's + "Active Configuration" menu. Clicking Run will build/run the specific + app (vte-2.91 or vte-2.91-gtk4) which simplifies first time contributions. + + These files are contributed under either GPLv3+ or LGPLv3+ to match + VTE itself. + + build-aux/org.gnome.vte.gtk3.json | 31 +++++++++++++++++++++++++++++++ + build-aux/org.gnome.vte.gtk4.json | 31 +++++++++++++++++++++++++++++++ + 2 files changed, 62 insertions(+) + +commit 9a89de7683fc2842610b07fcf0845714da88bf7e +Author: Christian Persch +Date: 2023-09-20 23:08:13 +0200 + + ci: Only upload docs for tags + + .gitlab-ci.yml | 3 +++ + 1 file changed, 3 insertions(+) + +commit 50671fb77b51c3efd4d1ceaf49721319ab247ae6 +Author: Christian Persch +Date: 2023-09-20 21:28:10 +0200 + + Revert "widget: a11y: Add missing text changes on scrolling with modifications" + + This reverts commit 036d337cb84c3ff3e62c688f3f0a2a2056eb15ca. + + src/vteaccess.cc | 159 +++++++++++-------------------------------------------- + 1 file changed, 30 insertions(+), 129 deletions(-) + +commit b8e13a6b80965f9a7aecae026ab1460e92e78568 +Author: Christian Persch +Date: 2023-09-20 21:28:10 +0200 + + Revert "widget: a11y: Optimize text changes on scrolling with modifications" + + This reverts commit 0b63a182e14ec8014e5e18510484569806d61230. + + src/vteaccess.cc | 216 ++++++++++++++++++++++++------------------------------- + 1 file changed, 94 insertions(+), 122 deletions(-) + +commit 6552c7d9f866d13d3308dc5bc91d360f5a63ae3b +Author: JCWasmx86 +Date: 2023-09-20 21:28:10 +0200 + + widget: VteTerminalSpawnAsyncCallback's error is nullable + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2647 + + src/vtegtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0b63a182e14ec8014e5e18510484569806d61230 +Author: Samuel Thibault +Date: 2023-09-11 02:03:26 +0200 + + widget: a11y: Optimize text changes on scrolling with modifications + + In 036d337cb84c ("widget: a11y: Add missing text changes on scrolling + with modifications") we fixed text updates for the scroll+modification + case by updating the whole terminal. Updating the whole terminal however + makes Orca very talkative. + + This adds support for simple diff support for the common case: an ample head + and/or tail content is the same. This allows to emit only the modification, + which is usually relatively small. + + Fixes #88 + + src/vteaccess.cc | 216 +++++++++++++++++++++++++++++++------------------------ + 1 file changed, 122 insertions(+), 94 deletions(-) + +commit 5b198b4458b71629c02be154f18f09877dbb02fc +Author: Christian Persch +Date: 2023-09-12 23:06:08 +0200 + + widget: Fix conditional + + Fixes a regression from commit fb3220bee959d37f58daf702165f142ef9fab9f4. + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a1f82f92e39cd04d4428ea6f4820b908dc6fb808 +Author: Christian Persch +Date: 2023-09-12 23:06:08 +0200 + + widget: Fix conditional + + Fixes a regression from commit fb3220bee959d37f58daf702165f142ef9fab9f4, + which led to incorrect rendering with background transparency. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2646 + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 7ab9ea28df7e63c7ae1644d6f73195a97b99620c +Author: Christian Persch +Date: 2023-09-03 22:15:35 +0200 + + app: Correct option value description + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2645 + + src/app/app.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2c063deaa49f82f581855fed400897355da240f4 +Author: Christian Persch +Date: 2023-09-02 15:20:21 +0200 + + Revert "widget: Do not count event as handled in more situations" + + This reverts commit 37455029c841826bac8fa52e99055c7af6d43633. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2643 + + src/vte.cc | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +commit 50b5fa0bbaadc54b63fa83a090a9fc56ddfb139f +Author: Christian Persch +Date: 2023-09-02 15:19:00 +0200 + + test: Add SGR 4:4 and 4:5 underlines to test script + + perf/sgr-test.sh | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit e70bc5c012e29e59f17545efc57ac16e8ffa78c2 +Author: Christian Persch +Date: 2023-09-02 15:19:00 +0200 + + emulation: Ignore unknown SGR underline subparams + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2640 + + src/parser-glue.hh | 1 + + src/vteseq.cc | 11 ++++++++--- + 2 files changed, 9 insertions(+), 3 deletions(-) + +commit 2066534d2ddda567e6cb1a81580ec7eb454dc7b1 +Author: Christian Persch +Date: 2023-08-09 21:28:27 +0200 + + widget: Correct "Since:" annotations + + src/vte/vteenums.h | 2 +- + src/vtegtk.cc | 24 ++++++++++++------------ + 2 files changed, 13 insertions(+), 13 deletions(-) + +commit af411bcda0f4ab7cda9942c2224e7482eb4accd6 +Author: Christian Persch +Date: 2023-08-09 21:28:27 +0200 + + lib: Fix preallocated size + + src/pastify.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f179048efb4d95109c33398809ea807aa5ac8706 +Author: Christian Persch +Date: 2023-08-04 21:26:13 +0200 + + build: Post branch version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9423831f79935828ce62365d4b6b93ff2758e15e +Author: Zander Brown +Date: 2023-08-04 21:10:39 +0200 + + docs: Publish as gitlab pages + + Changes to developer.gnome.org means online documentation is no longer + automatically generated from tarballs, so instead create the docs from + CI when making a tag. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2545 + + .gitlab-ci.yml | 52 ++++++++++++++++++++++++++++++++++ + .gitlab-ci/docs.html | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 131 insertions(+) + +commit 829a2c6aa9f43dba2d58cb0046980d1f235e3587 +Author: Christian Persch +Date: 2023-08-04 21:10:39 +0200 + + Revert "widget: Modernise HTML output" + + This reverts commit edddaaea9d35011ed1c74a7caf75fe639ebddaa7. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2625 + + src/vte.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 1bcf4bca8e5ba72b49ef2b756ea33b32adf5c28c +Author: Egmont Koblinger +Date: 2023-08-04 21:10:39 +0200 + + pty: Fix exit delay in presence of a grandchild process + + When we notice that the child has quit, keep processing incoming data only as + long as there's data immediately available, and only up to a certain amount + which is presumably larger than the kernel's tty buffer size. + + This should be a more robust solution than the timeout-based one it replaces, + in order to consume all the data produced by the immediate child and then to + emit the child-exited signal without further delay. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2627 + + src/vte.cc | 117 ++++++++++++++++++++++++++--------------------------- + src/vteinternal.hh | 8 +--- + 2 files changed, 59 insertions(+), 66 deletions(-) + +commit 036d337cb84c3ff3e62c688f3f0a2a2056eb15ca +Author: Samuel Thibault +Date: 2023-08-04 21:10:39 +0200 + + widget: a11y: Add missing text changes on scrolling with modifications + + When vte_terminal_accessible_text_scrolled gets called, the terminal + might have not only scrolled, but also changed. We thus have to check + whether the remaining text really is exactly the same as expected. If + not, revert to updating the whole terminal. + + Fixes: https://gitlab.gnome.org/GNOME/vte/issues/88 + + src/vteaccess.cc | 159 ++++++++++++++++++++++++++++++++++++++++++++----------- + 1 file changed, 129 insertions(+), 30 deletions(-) + +commit fb09294b614184dae787098afcca4520bbfe856f +Author: Christian Persch +Date: 2023-08-04 21:10:39 +0200 + + build: Enable gtk4 by default + + meson_options.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 37455029c841826bac8fa52e99055c7af6d43633 +Author: Carlos Garnacho +Date: 2023-08-01 21:23:43 +0200 + + widget: Do not count event as handled in more situations + + In order to play fair with other widgets/gestures along the event + propagation chain, and other external gestures that might be set + on the VTE widget (like the implicit GtkIMContext one for OSK + integration), let the terminal be more selective at letting + input events go through: + + - Feeding mouse events to applications only consumes the event + if something was actually sent. + + - If a button press does not reset or extend the selection, it + will be let through. Further motion may start a selection and + result on a later claiming of input. + + There is however a small behavioral change here, since the + unconsumed button presses being let through will also be more + eagerly attempted to be fed to the running application. + + - Button releases that did not result in an extended selection + will also be let through. This still observes extending the selection + with shift+click instead of dragging + (https://bugzilla.gnome.org/show_bug.cgi?id=683729) + + Altogether, the terminal widget gets better at not claiming input + for itself until something actually happened in it, letting non-effective + clicks go through, and coincidentally letting the implicit GtkIMContext + gesture pick these up. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2630 + + src/vte.cc | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +commit d17120696cbeb50b68f38b7af78ce1a28ed4c7cd +Author: Carlos Garnacho +Date: 2023-08-01 21:23:43 +0200 + + widget: Do not possibly deny early click gesture + + Not claiming right away on button press doesn't mean that the + input from the gesture should be denied. There may be situations + where it only makes sense to claim later on, thus the gesture + should still remain in the initial undecided state. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2630 + + src/widget.cc | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 726c9247142e20dabfbe73be10ac1d004e2e702a +Author: David H. Gutteridge +Date: 2023-07-22 21:55:03 +0200 + + pty: Make netbsd workaround conditional on kernel version + + Only use the workaround of manually applying the cloexec and + nonblocking flags when running on an old kernel not supporting + these flags directly in the posix_openpty() call. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2575 + + src/pty.cc | 24 ++++++++++++++++++++---- + 1 file changed, 20 insertions(+), 4 deletions(-) + +commit 706e1de57c8b3c11f47541beb201770f336c13aa +Author: Christian Persch +Date: 2023-07-14 22:17:21 +0200 + + emulation: Treat unsupported SGR 4:n as no-underline + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2640 + + src/parser-glue.hh | 21 +++++++++++++++++++++ + src/vteseq.cc | 2 +- + 2 files changed, 22 insertions(+), 1 deletion(-) + +commit 461bc3e43c819fa0e3b62d0cf40ef533a69cc7f7 +Author: Egmont Koblinger +Date: 2023-07-13 21:59:29 +0200 + + widget: Invalidate ringview when the invalidating + + When the ringview is not invalidated when the ring has changed leads to + failed assertion aborts when handling events, e.g. vte#2636, vte#2637, + vte#2632, vte#2577. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2636 + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2637 + + src/vte.cc | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit 092d8b8f1d15d3f841f1b93e052a677a73713690 +Author: Christian Persch +Date: 2023-06-19 20:59:01 +0200 + + widget: Fix introspection annotations + + https://gitlab.gnome.org/GNOME/vte/-/issues/2633#note_1772933 + + src/vtegtk.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit dbb5e15ae66b9c4d11d8fed1800224ac46cbd634 +Author: Christian Persch +Date: 2023-06-18 15:14:59 +0200 + + widget: More docs and introspection annotation fixes + + https://gitlab.gnome.org/GNOME/vte/-/issues/2633#note_1771584 + + src/vtegtk.cc | 36 ++++++++++++++---------------------- + 1 file changed, 14 insertions(+), 22 deletions(-) + +commit 22ee87447a1191b4be26bc69a566dd0f068c93ff +Author: Christian Persch +Date: 2023-06-18 00:37:20 +0200 + + widget: Make get_text_range docs more accurate + + Document that passing a non-nullptr selection function will make this + function return nullptr. + + src/vtegtk.cc | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit dce7b5f044b0f9e184f186315c846489a20edf0d +Author: Christian Persch +Date: 2023-06-01 21:30:48 +0200 + + emulation: Fix infinite loop on non-number OSC 104 param + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2631 + + src/vteseq.cc | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 7666d4763be31ceb673136ed09bb6fb7ccdfd48a +Author: Egmont Koblinger +Date: 2023-04-23 21:50:38 +0200 + + draw: Remove need to generate code + + Use user-defined string literals to move the box drawing data into the + source code, instead of having a separate text file that gets turned + into code from a generator. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2628 + + src/box-drawing.hh | 863 ++++++++++++++++++++++++++++++++++++++++++++ + src/box_drawing.txt | 768 --------------------------------------- + src/box_drawing_generate.sh | 69 ---- + src/meson.build | 13 +- + src/minifont.cc | 2 +- + 5 files changed, 865 insertions(+), 850 deletions(-) + +commit a50cfaa7cb76d7486a45869b948cbcb8239d2fba +Author: Christian Persch +Date: 2023-04-13 11:56:32 +0200 + + widget: Fix compilation + + ... somehow the last commit was incompletely committer. + + Fixes: https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/7975 + + src/clipboard-gtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 587873b5cd4cedff259d32e37a37f11562f6dc11 +Author: Christian Persch +Date: 2023-04-11 20:54:44 +0200 + + widget: Fix setting clipboard with html data + + Fixes: https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/7975 + + src/clipboard-gtk.cc | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +commit 19acc51708d9e75ef2b314aa026467570e0bd8ee +Author: Eric Johnson +Date: 2023-04-05 19:06:13 +0200 + + emulation: Fix invalid mouse scroll event on window edge + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2621 + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0cade2cf3713142e0fc606936066b840fc22287c +Author: Christian Persch +Date: 2023-04-05 19:06:13 +0200 + + widget: Fix introspection warnings + + src/vtegtk.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 4da9d055f68f5b5dad9946b289a1836bd7c0fe8d +Author: Christian Persch +Date: 2023-04-05 19:06:13 +0200 + + widget: Fix cursor blink timeout + + Fix s/ms confusion to make the cursor stop blinking correctly. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2622 + + src/vte.cc | 30 ++++++++++++++++-------------- + src/vteinternal.hh | 12 ++++++------ + src/widget.cc | 12 ++++++------ + 3 files changed, 28 insertions(+), 26 deletions(-) + +commit 7fa3e6220de8aad9174e5976d73553a8073c6e4f +Author: Alexander Shopov +Date: 2023-03-31 10:11:16 +0000 + + Update Bulgarian translation + + (cherry picked from commit 307a7363cbee8a84ed569bc07593721f9f7d10ae) + + po/bg.po | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 3c8f66be867aca6656e4109ce880b6ea7431b895 +Author: Christian Persch +Date: 2023-03-10 21:52:41 +0100 + + fonts: Keep the PangoLayout unchanged + + The previous commit still wasn't completely fixing the problem, since + the FontInfo and the UnistrInfo are cached too, and m_layout will be + re-used when creating the next UnistrInfo, but the code in + pango_cairo_show_layout_line() requires the PangoLayout to still have + the same text as when it was created for the UnistrInfo. + + To fix this, adopt the PangoLayout into the PangoLayoutLine cached in + the UnistrInfo, and create a new layout for next use. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2606 + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2620 + + src/fonts-pangocairo.cc | 19 ++++++++++++++++--- + 1 file changed, 16 insertions(+), 3 deletions(-) + +commit 22b3a562d5c95f5911560131c9f6f2df70881e34 +Author: Christian Hergert +Date: 2023-03-09 13:47:23 -0800 + + fonts: keep layout text available for cairo + + When a cairo recording surface is used, it will memcpy() the text and + therefore expects the layout's text to be complete enough to contain each + glyph item's offset from base pointer. + + This keeps that text around long enough to satisfy that requirement. It + will be reset on the next operation/call to get_unistr_info(). + + Fixes #2620 + + src/fonts-pangocairo.cc | 11 +++-------- + 1 file changed, 3 insertions(+), 8 deletions(-) + +commit fb3220bee959d37f58daf702165f142ef9fab9f4 +Author: Christian Persch +Date: 2023-03-08 20:36:48 +0100 + + all: Use defined values for defines + + ... instead of defined/undefined names, so that -Wundef can catch + mistakes. + + meson.build | 16 +++++++------- + src/app/app.cc | 4 ++-- + src/bidi.cc | 14 ++++++------- + src/bidi.hh | 4 ++-- + src/cxx-utils.hh | 2 +- + src/debug.cc | 8 +++---- + src/debug.h | 4 ++-- + src/decoder-cat.cc | 12 +++++------ + src/fonts-pangocairo.cc | 8 +++---- + src/fonts-pangocairo.hh | 2 +- + src/glib-glue.cc | 8 +++---- + src/glib-glue.hh | 8 +++---- + src/keymap.cc | 2 +- + src/missing.cc | 6 +++--- + src/missing.hh | 6 +++--- + src/parser-cat.cc | 38 ++++++++++++++++----------------- + src/pty.cc | 2 +- + src/reflect.c | 4 ++-- + src/ring.cc | 20 +++++++++--------- + src/ring.hh | 6 +++--- + src/sixel-context.cc | 4 ++-- + src/spawn.cc | 6 +++--- + src/vte.cc | 56 ++++++++++++++++++++++++------------------------- + src/vtegtk.cc | 46 +++++++++++++++++++--------------------- + src/vteinternal.hh | 29 +++++++++++++------------ + src/vteseq.cc | 12 +++++------ + src/vtestream-file.h | 16 +++++++------- + src/vtetypes.cc | 10 ++++----- + src/vtetypes.hh | 2 +- + src/widget.cc | 2 +- + 30 files changed, 177 insertions(+), 180 deletions(-) + +commit 75543c3b30dbf696b084e927dabbf52a41d32638 +Author: Christian Persch +Date: 2023-03-08 20:36:47 +0100 + + all: Use __has_include + + ... instead of checking for header presence from meson.build. + + meson.build | 21 --------------------- + src/dumpkeys.c | 7 ++++--- + src/mev.c | 2 +- + src/missing.cc | 3 ++- + src/pty.cc | 9 +++++---- + src/vte.cc | 12 +++++++----- + src/vteaccess.cc | 2 +- + src/vtegtk.cc | 2 +- + src/vteseq.cc | 2 +- + 9 files changed, 22 insertions(+), 38 deletions(-) + +commit bd4f781d168859eb42943a23487422224124467c +Author: Christian Persch +Date: 2023-03-08 20:36:47 +0100 + + fonts: Don't declare this inline + + src/fonts-pangocairo.cc | 2 ++ + src/fonts-pangocairo.hh | 3 --- + 2 files changed, 2 insertions(+), 3 deletions(-) + +commit 9b41cd1014299d01111b64b705f013e28398821a +Author: Khem Raj +Date: 2023-03-02 22:57:00 +0100 + + pty: Do not typecast to GSpawnFlags + + GSpawnFlags is enum with max value 1 << 15 which means it fits into + a short, however here we are oring VTE_SPAWN_* as well which have + higher values (by design). This fixes a compile error on clang 16 + with the -Wenum-constexpr-conversion flag. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2618 + + src/vtepty.cc | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +commit 0677e390b5ddb4b70fe75185cbfe8210ee096a7b +Author: Christian Persch +Date: 2023-02-28 18:34:05 +0100 + + fonts: Remove unnecessary context change call + + Calling pango_context_changed() is not necessary here; all changes + to the context done above this have already done that. + + src/fonts-pangocairo.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit 241df48d93dbefc1559a6a4e7cea8e60735661d8 +Author: Calvin Walton +Date: 2023-02-28 18:34:05 +0100 + + widget: Add API to override font options + + https://gitlab.gnome.org/GNOME/vte/-/issues/2573 + + meson.build | 18 ++++++----- + src/drawing-cairo.cc | 9 +++--- + src/drawing-cairo.hh | 1 + + src/fonts-pangocairo.cc | 58 +++++++++++++++++++++++------------ + src/fonts-pangocairo.hh | 8 +++-- + src/meson.build | 2 ++ + src/vte.cc | 18 +++++++++++ + src/vte/vteterminal.h | 7 +++++ + src/vtegtk.cc | 81 ++++++++++++++++++++++++++++++++++++++++++++++++- + src/vtegtk.hh | 1 + + src/vteinternal.hh | 3 ++ + 11 files changed, 172 insertions(+), 34 deletions(-) + +commit c8baa84d8cdfe9be774e8dbf62426348025df699 +Author: Christian Persch +Date: 2023-02-28 18:34:05 +0100 + + widget: Fix a deprecation warning + + meson.build | 2 +- + src/clipboard-gtk.cc | 2 ++ + 2 files changed, 3 insertions(+), 1 deletion(-) + +commit e343088f9d02be69c2ff377566b942553e6e21fd +Author: Calvin Walton +Date: 2023-02-28 18:34:05 +0100 + + widget: gtk4: Hint and quantize font metrics + + With gtk4, the font metrics are unhinted by default. This causes + problems when measuring the font, since the width or height may + have fractional pixel values that get rounded up - resulting in + vte using integer cell sizes that are larger than would be + appropriate for the font - the usual side-effect is that horizontal + letter spacing looks too wide. + + To fix this, set the cairo font option to hint vertical metrics, + which will result in the glyph ascent and descent values both being + integers. + + Also make pango round glyph positions, so that the horizontal advance + of the glyphs will be integers appropirate for a renderer that doesn't + do sub-pixel glyph positioning. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2573 + + src/cairo-glue.hh | 1 + + src/fonts-pangocairo.cc | 40 ++++++++++++++++++++++++++++++++-------- + 2 files changed, 33 insertions(+), 8 deletions(-) + +commit e8dcb5e0187f10dce9bdc67af66cff31f8dc630b +Author: Christian Persch +Date: 2023-02-24 18:54:12 +0100 + + widget: Fix introspection API + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2617 + + src/vtegtk.cc | 1 + + 1 file changed, 1 insertion(+) + +commit b92e9dc90841b6401707143122d05c9088720b5c +Author: Sabri Ünal +Date: 2023-02-22 11:51:27 +0000 + + Update Turkish translation + + po/tr.po | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +commit abb7afd06c64769ff8754d2d82edd660cee16c64 +Author: Christian Persch +Date: 2023-02-11 19:10:09 +0100 + + build: More detailed version info + + meson.build | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit dcfc0ec44df3084987a6faa0fdc03e6de717c682 +Author: Christian Persch +Date: 2023-02-11 19:00:05 +0100 + + widget: Ensure the ringview is updated before converting coordinates + + When checking event coordinates, make sure the ringview is updated + first, before converting the coordinates to grid coordinates. + + This should fix the top crash on retrace.fedora.org for all vte-based + terminals (gnome-terminal, gnome-console, etc.). + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2577 + + src/vte.cc | 70 +++++++++++++++++++++++++++++++++++++++++++++++--------------- + 1 file changed, 53 insertions(+), 17 deletions(-) + +commit 39ae174a159a5c50f250ad7547b056ea0a49859a +Author: Christian Persch +Date: 2023-02-03 21:52:20 +0100 + + widget: Update some Since annotations + + src/vtegtk.cc | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +commit aa7689792918a9d4054e367139d166b146a5bd22 +Author: Christian Persch +Date: 2023-02-03 21:45:46 +0100 + + build: Post branch version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1d1896427fb28b0aa32f5dd401f2a86e97452cf1 +Author: Christian Persch +Date: 2023-01-21 10:24:38 +0100 + + widget: gtk4: Translate control+key events when using multiple layouts + + Same as for gtk3. + + https://gitlab.gnome.org/GNOME/gtk/-/issues/5384 + + src/widget.cc | 31 ++++++++++++++++++++++++++++--- + 1 file changed, 28 insertions(+), 3 deletions(-) + +commit 015ca4d2fdc57b625add7b23b0afa7193adc45a9 +Author: Martin Kühl +Date: 2022-12-30 20:07:49 +0100 + + widget: Use correct end row for getting the selected text + + The range is end-exclusive, so use end_row() instead of last_row(). + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2584 + + src/vtegtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2ee2495486e3266ab0037daad0b1cf220bd254b0 +Author: Christian Persch +Date: 2022-12-20 22:11:56 +0100 + + widget: Add API to get text as HTML + + Based on a patch by Lex Bailey . + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2589 + + src/glib-glue.hh | 16 ++++++ + src/vte/vteterminal.h | 17 +++++- + src/vtegtk.cc | 147 ++++++++++++++++++++++++++++++++++++++++++-------- + 3 files changed, 156 insertions(+), 24 deletions(-) + +commit 8d74fb84e2031a5f3373ef07f7862b0e49966a87 +Author: Christian Persch +Date: 2022-12-20 22:11:56 +0100 + + parser: Add more OSC codes + + src/parser-osc.hh | 2 ++ + 1 file changed, 2 insertions(+) + +commit a36843510ae24b4687840efd4f03afa6bac0bafe +Author: Christian Persch +Date: 2022-12-20 22:11:56 +0100 + + widget: clipboard: Add missing else + + src/clipboard-gtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bdb309bd0470fd5780039e72868e949291cc2791 +Author: Christian Persch +Date: 2022-12-20 22:11:55 +0100 + + parser: modes: Mark modes that should not be reset by DECSTR + + src/modes.py | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +commit eaf5d30427bfc60f2a5eedd44d97062d57a76042 +Author: Christian Persch +Date: 2022-12-20 22:11:55 +0100 + + parser: Update list of known OSC codes + + ... with new codes from xterm master. + + src/parser-osc.hh | 3 +++ + 1 file changed, 3 insertions(+) + +commit adc5e8fa46cd328354570738aeb3418562b7695e +Author: Christian Persch +Date: 2022-11-29 22:17:36 +0100 + + pty: Remove useless setenv calls + + Spawning will always provide its own envp which will replace the + environment when execve()ing. + + https://gitlab.gnome.org/GNOME/vte/-/issues/271 + + src/pty.cc | 9 --------- + 1 file changed, 9 deletions(-) + +commit c6ad5731719ca21ba2fbe6edc63da47916dc056f +Author: Vasil Pupkin <3abac@3a.by> +Date: 2022-11-27 20:27:12 +0000 + + Update Belarusian translation + + po/be.po | 77 +++++++++++++++++++++++++++------------------------------------- + 1 file changed, 32 insertions(+), 45 deletions(-) + +commit edddaaea9d35011ed1c74a7caf75fe639ebddaa7 +Author: Noa +Date: 2022-11-16 20:39:44 +0100 + + widget: Modernise HTML output + + Use instead of for copy-as-html functionality + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2604 + + src/vte.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 61e705bbd9d92670cca7a8519b62133033791936 +Author: Matthew Rose +Date: 2022-11-16 20:35:22 +0100 + + missing: Add better fdwalk implementation for darawin + + Port of glib!3040 to vte. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2602 + + src/missing.cc | 35 +++++++++++++++++++++++++++++++++++ + 1 file changed, 35 insertions(+) + +commit fc3c7b4358cdfacec0285a84971a27b17b7498b5 +Author: Christian Persch +Date: 2022-11-15 00:31:51 +0100 + + build: Print warning on unstable release + + meson.build | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 862561bcbd1547783aca0c56d799cadc087bb2b5 +Author: Christian Persch +Date: 2022-11-15 00:31:51 +0100 + + build: Add define for openbsd + + meson.build | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 8ef3f6b2f8043d28cbc82520eb094f09333b26ae +Author: Christian Persch +Date: 2022-09-23 16:24:57 +0200 + + build: Add define for darwin + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2592 + + meson.build | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit e0675c6533c23c0bdda6531617428cdfe5979ad9 +Author: Christian Persch +Date: 2022-09-23 16:24:57 +0200 + + build: Fix netbsd define + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c735479b7542b938bfb9709860fff58c5ca9fe6f +Author: Christian Persch +Date: 2022-09-21 22:13:53 +0200 + + app: Disconnect signal handlers on dispose + + Fixes two critical warnings when closing a window with the close button. + + src/app/app.cc | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit 3cffe18b25a4c04e9ee0c7e090f349805d43c680 +Author: Christian Persch +Date: 2022-09-21 22:13:53 +0200 + + lib: Add gresources to vte/gtk4 + + src/meson.build | 13 ++++++++++++- + src/vte-gtk4.gresource.xml | 21 +++++++++++++++++++++ + 2 files changed, 33 insertions(+), 1 deletion(-) + +commit 391cd322f0c176d052da5417d3e372cf861c5b06 +Author: Christian Persch +Date: 2022-09-20 21:39:11 +0200 + + app: Filter unwanted environment variables + + src/app/app.cc | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 83 insertions(+), 2 deletions(-) + +commit 9dbae321af881924b5cae245b3d956497e088437 +Author: Sabri Ünal +Date: 2022-09-18 15:21:38 +0000 + + Update Turkish translation + + po/tr.po | 94 ++++++++-------------------------------------------------------- + 1 file changed, 11 insertions(+), 83 deletions(-) + +commit bcf5c975e76e585dc5f0cf3dbc5e7a057c3af183 +Author: Christian Persch +Date: 2022-09-18 13:02:32 +0200 + + pty: netbsd fix + + On netbsd, posix_openpt() accepts O_NONBLOCK | O_CLOEXEC, but silently + ignores them, so they need to be applied explicitly afterwards. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2575 + + src/pty.cc | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 10f7d7ecf0b9939e264c12c0ec625db66b0d606a +Author: Christian Persch +Date: 2022-09-18 13:02:32 +0200 + + build: Update meson req version + + meson.build | 12 ++++-------- + 1 file changed, 4 insertions(+), 8 deletions(-) + +commit fb604fe287abf64645a83ef27e2c05da14fbbae0 +Author: Christian Persch +Date: 2022-09-05 00:03:52 +0200 + + widget: Fix value type check + + src/clipboard-gtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7bc143b3e540aa1a6a07dbad45d6caf8c0755a7e +Author: Christian Persch +Date: 2022-09-01 18:34:03 +0200 + + widget: Clipboard fixes for gtk4 + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2557 + + src/clipboard-gtk.cc | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +commit e4d500a302db008063f11fd95a984ed28b9d61f3 +Author: Christian Persch +Date: 2022-09-01 18:34:03 +0200 + + widget: Offer text/html also in UTF-8 format + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2527 + + src/clipboard-gtk.cc | 59 +++++++++++++++++++++++++++++++++++----------------- + 1 file changed, 40 insertions(+), 19 deletions(-) + +commit b72b397be45045bc5464ba8ed889f6fb2b39989a +Author: Christian Persch +Date: 2022-09-01 18:34:03 +0200 + + widget: Implement clipboard for gtk4 + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2557 + + src/clipboard-gtk.cc | 536 ++++++++++++++++++++++++++++++++++++++++++++++++--- + src/clipboard-gtk.hh | 15 +- + src/glib-glue.hh | 1 + + src/gtk-glue.hh | 1 + + src/vte.cc | 4 +- + src/widget.cc | 5 +- + src/widget.hh | 3 +- + 7 files changed, 530 insertions(+), 35 deletions(-) + +commit fd6d6226272cda3e8c4d4a58e84c796656264566 +Author: Alexander Mikhaylenko +Date: 2022-09-01 05:13:53 +0400 + + widget: Fix Widget::regex_match_check_at() + + It was calling Terminal::regex_match_check() instead of + Terminal::regex_match_check_at(). + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2578 + + src/widget.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b4abc09b0950e2b1593782116b7fa9fc2e7ffba1 +Author: Christian Persch +Date: 2022-08-19 00:03:13 +0200 + + lib: Fix spawning on netbsd + + Add netbsd to the platforms that can safely use sysconf(3) to close the + file descriptors before exec, since according to netbsd's man:sigaction(2), + sysconf(3) is async-signal-safe. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2574 + + src/missing.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1b750a348afb4085786e86fe80ac73caad1b829a +Author: Christian Persch +Date: 2022-08-16 17:03:33 +0200 + + widget: Use correct view coordinates + + The conversion needs to take the border into account. + + src/vte.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 70366d113516382038c69f863c9915753041e563 +Author: Christian Persch +Date: 2022-08-09 21:08:06 +0200 + + widget: gtk4: Only notify terminal when focused + + https://gitlab.gnome.org/GNOME/vte/-/issues/2555#note_1524795 + + src/widget.cc | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit d7b1da6f8203a732fdc850b991236708adc0d52f +Author: Christian Persch +Date: 2022-08-09 21:08:06 +0200 + + widget: gtk4: Don't grab the focus on focus-in + + https://gitlab.gnome.org/GNOME/vte/-/issues/2555 + + src/vte.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit b51cc92ccae2b37ff6bb0acb8bf0a8dca19b3731 +Author: Christian Persch +Date: 2022-08-05 21:24:01 +0200 + + build: Post branch version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b804dec1990b4c880bb302b2862bf920bc2a11f7 +Author: Christian Persch +Date: 2022-08-05 21:18:25 +0200 + + build: Update gtk3 req version + + Commit 5147453115f46d2dc91b797cd12f2ede220ea100 introduced a dependency + on gtk 3.24, so update the req, min and max versions. + + meson.build | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 20d83ba052c94c0030f2964e1cbad7b012af81a2 +Author: Christian Persch +Date: 2022-08-05 21:11:18 +0200 + + build: Remove gtk4 notice + + While not completely stable yet, it's no longer experimental. + + meson.build | 4 ---- + 1 file changed, 4 deletions(-) + +commit 84e4bccac4563af107a1c0a31fcb509ee4fa7032 +Author: Christian Persch +Date: 2022-08-05 21:04:10 +0200 + + Revert "emulation: Support XTVERSION sequence" + + This reverts commit 0718a9a7f9300b2526eddb0fc74e25eef34795ba. + + Issue #235 shows commiting this was premature and there's more discussion needed. + + src/parser-reply.hh | 1 - + src/parser-seq.py | 2 -- + src/vteseq.cc | 32 ++------------------------------ + 3 files changed, 2 insertions(+), 33 deletions(-) + +commit 6eb98158c704eb9919bc324174c1f1147086f6ac +Author: Christian Persch +Date: 2022-08-05 21:04:10 +0200 + + widget: Correct some Since annotations + + src/vtegtk.cc | 30 +++++++++++++++--------------- + 1 file changed, 15 insertions(+), 15 deletions(-) + +commit 2f255b2045fe5571c80fc9ded70af7f144ac839b +Author: Christian Persch +Date: 2022-08-05 21:04:10 +0200 + + build: Build fix for netbsd + + Define _NETBSD_SOURCE to get all necessary defines exposed, as found + from a patch in netbsd ports. + + meson.build | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +commit a07cfcde3e595084ebc72c96c41857bf05c4c668 +Author: Alexander Mikhaylenko +Date: 2022-08-04 20:04:25 +0400 + + widget: Only avoid reentrant queue_resize() in GTK4 + + Fixes https://gitlab.gnome.org/GNOME/vte/-/issues/2572 + + src/vte.cc | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit 5d732ad6f6f377e31260ae18dbc24d44f3a587e8 +Author: Christian Persch +Date: 2022-08-03 22:58:02 +0200 + + widget: Listen for toplevel focus change + + Update the cursor state when the toplevel focus changes. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2555 + + src/vte.cc | 9 --------- + src/vteinternal.hh | 1 - + src/widget.cc | 5 ++++- + 3 files changed, 4 insertions(+), 11 deletions(-) + +commit d46756b89cfbb61929812ca2bd1d8c13a9504044 +Author: Christian Persch +Date: 2022-08-03 22:58:02 +0200 + + widget: Listen for toplevel focus change + + Need to listen to notify::state on the toplevel the widget is in, so + as to generate the correct focus notifications (DECSET 1004). + + https://gitlab.gnome.org/GNOME/vte/-/issues/2555 + + src/vte.cc | 9 +++++ + src/vteinternal.hh | 1 + + src/widget.cc | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/widget.hh | 12 ++++++ + 4 files changed, 135 insertions(+) + +commit 901558bf471299e483976770e062730f35c13414 +Author: Jeremy Bicha +Date: 2022-07-29 22:23:50 +0200 + + docs: Install toml file to subdir + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2570 + + doc/reference/meson.build | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 08d71a30d4feb8596a9ca3b39ab1c73bc6ecff10 +Author: Alexander Mikhaylenko +Date: 2022-07-27 15:42:47 +0400 + + widget: Don't queue_resize() during allocation + + This is not allowed, and while here it mostly works by accident, it's + possible to break it - for example, if it resizes while unmapped. + + See https://gitlab.gnome.org/GNOME/console/-/merge_requests/102#note_1510384 + + src/vte.cc | 16 ++++++++++------ + src/vtegtk.cc | 2 +- + src/vteinternal.hh | 3 ++- + 3 files changed, 13 insertions(+), 8 deletions(-) + +commit 2d165b61f527472a7a7eccee3e94f8ec96690245 +Author: Alexander Mikhaylenko +Date: 2022-07-25 22:25:08 +0200 + + widget: gtk4: Don't invalidate endlessly + + Have early returns to skip invalidation like in the gtk3 codepath. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2566 + + src/vte.cc | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 6beb9246d84d3161e1ea377417d0a2b9a8fb1e90 +Author: Christian Persch +Date: 2022-07-25 22:25:08 +0200 + + widget: gtk4: Lower the priority of the style provider + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2567 + + src/vtegtk.cc | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +commit 409cc91b95c21f83b1978796495ee8dfcfd42dfd +Author: Christian Persch +Date: 2022-07-24 15:20:18 +0200 + + widget: gtk: Make new API naming self-consistent + + src/vte/vteterminal.h | 8 ++++---- + src/vtegtk.cc | 18 +++++++++--------- + 2 files changed, 13 insertions(+), 13 deletions(-) + +commit 0effa40fd9520e7e9af83d5a26d0d7be58b4094e +Author: Christian Persch +Date: 2022-07-24 14:45:57 +0200 + + widget: gtk4: Add API to check event context + + https://gitlab.gnome.org/GNOME/vte/-/issues/2530 + + src/vte.cc | 33 +++++++++ + src/vte/vteterminal.h | 33 +++++++++ + src/vtegtk.cc | 183 ++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 20 +++--- + src/widget.hh | 27 ++++++++ + 5 files changed, 288 insertions(+), 8 deletions(-) + +commit 011b7acc60b71ea4762544ee72d106c3bccfa131 +Author: Christian Persch +Date: 2022-07-22 21:39:12 +0200 + + widget: gtk4: Make background API available on gtk4 + + https://gitlab.gnome.org/GNOME/vte/-/issues/12#note_1506942 + + src/vte/vteterminal.h | 4 ---- + src/vtegtk.cc | 4 ---- + 2 files changed, 8 deletions(-) + +commit 93e3d17cbb45b636a298d27a9af223a4e405382e +Author: Christian Persch +Date: 2022-07-22 21:39:12 +0200 + + widget: Add format arg to new API to get selected text + + src/vte/vteterminal.h | 3 ++- + src/vtegtk.cc | 12 +++++++++--- + 2 files changed, 11 insertions(+), 4 deletions(-) + +commit 0a663194fc1d4c9f5c2f952f6ccfea8a8a4719f7 +Author: Christian Persch +Date: 2022-07-13 21:14:31 +0200 + + build: Post release version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d4754ba9e4394d4e02af72e548060aadbe431f5b (tag: 0.69.90) +Author: Christian Persch +Date: 2022-07-13 21:10:01 +0200 + + build: Version 0.69.90 + + Release required for gnome 43α. + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3ed53bfaa7344ce5b7727a60a2d33315b15201e5 +Author: Jamie Murphy +Date: 2022-07-03 21:48:03 +0200 + + widget: Add API to get selected text + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2563 + + src/vte/vteterminal.h | 3 +++ + src/vtegtk.cc | 32 ++++++++++++++++++++++++++++++++ + 2 files changed, 35 insertions(+) + +commit 0372107ad01e84912ac6c4806f4b6b1c47d8634b +Author: Christian Persch +Date: 2022-06-25 20:37:29 +0200 + + build: Make sure __BSD_VISIBLE is defined on freebsd + + By not defining any of the other feature macros, it *should* enable all + of them. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2564 + + meson.build | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +commit 9daa0f24da191a52e1344148ac3c0c5dcf20a6b6 +Author: Zurab Kargareteli +Date: 2022-06-25 07:22:11 +0000 + + Update Georgian translation + + po/ka.po | 147 +++++++++++++++++++-------------------------------------------- + 1 file changed, 44 insertions(+), 103 deletions(-) + +commit c033d7583ec6d565e5a4be902cca1e1c882e07a7 +Author: Christian Persch +Date: 2022-06-24 22:11:13 +0200 + + build: Define __BSD_VISIBLE on freebsd + + https://gitlab.gnome.org/GNOME/vte/-/issues/2564#note_1485997 + + meson.build | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +commit bd65f62bb4eb9329b51b4665ab2abefbc4f5ff81 +Author: Christian Persch +Date: 2022-06-24 22:11:13 +0200 + + all: Include directly + + is just a deprecated way to include anyway. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2564 + + meson.build | 1 - + src/dumpkeys.c | 7 +------ + src/mev.c | 5 ----- + src/pty.cc | 5 ----- + src/vte.cc | 5 ++--- + 5 files changed, 3 insertions(+), 20 deletions(-) + +commit 554690e7b3dcbbbf405f7600799da48e920c9024 +Author: Zander Brown +Date: 2022-06-23 21:30:57 +0200 + + glib: glue: Include string + + https://gitlab.gnome.org/GNOME/vte/-/issues/2564 + + src/glib-glue.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 8de26d1ea368d762a30d682da29df28935244cb2 +Author: Zander Brown +Date: 2022-06-22 20:04:47 +0200 + + glib: glue: Include string_view + + https://gitlab.gnome.org/GNOME/vte/-/issues/2564 + + src/glib-glue.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 67755af670ed1e560d34a441ea30eb4446ca3671 +Author: Christian Persch +Date: 2022-06-22 00:20:56 +0200 + + build: Define list of libc feature test macros only once + + meson.build | 26 ++++++++++++++++---------- + 1 file changed, 16 insertions(+), 10 deletions(-) + +commit 0c949a6b9a8874cdafa56f64bd8650d7b9349133 +Author: Christian Persch +Date: 2022-06-21 23:56:22 +0200 + + lib: Fix reserved size calculation + + src/pastify.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1cce95426d442f5af0d7ed684debf9389323591f +Author: Christian Persch +Date: 2022-06-21 23:52:35 +0200 + + build: Bump meson req version to 0.51 + + ... since we already uses feature from that version. + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8b75bf6220ea53d738911090a97125a5671f3de9 +Author: Zander Brown +Date: 2022-06-21 23:52:35 +0200 + + build: Use an explict python interpreter + + Add the python interpreter explicitly to the custom_target's command, + so that it runs them with that python instead of the environment's. + + https://gitlab.gnome.org/GNOME/vte/-/issues/350 + https://gitlab.gnome.org/GNOME/vte/-/issues/2564 + + src/meson.build | 2 ++ + 1 file changed, 2 insertions(+) + +commit 7fb4e9a75d9a521079a55c976ad4d115cd7b03e4 +Author: Christian Persch +Date: 2022-06-21 23:18:55 +0200 + + build: Check for python version + + meson.build | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit 8f53192432560e61b6c0de3692de44c245c40e55 +Author: Christian Persch +Date: 2022-06-21 22:55:21 +0200 + + build: Also set _XOPEN_SOURCE + + This is necessary on e.g. freebsd to use grantpt(). + + https://gitlab.gnome.org/GNOME/vte/-/issues/2564 + + meson.build | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit b51feeca889d4b597e95b21bc77dc078892af11d +Author: Christian Persch +Date: 2022-05-09 20:17:48 +0200 + + widget: gtk4: Simplify invalidation tracking + + We can't invalidate regions of the widget on gtk4 and so always + invalidate everything anyway, so remove the update rect tracking. + + https://gitlab.gnome.org/GNOME/vte/-/issues/2562 + + src/vte.cc | 30 +++++++++++++++++++++++++----- + src/vteinternal.hh | 2 ++ + 2 files changed, 27 insertions(+), 5 deletions(-) + +commit 4628822dbc45be6444fb11719bc955a630f5fbb1 +Author: Christian Persch +Date: 2022-05-03 21:57:58 +0200 + + docs: Port to gi-docgen + + This greatly simplifies building the documentation for both vte/gtk3 and + vte/gtk4. + + doc/reference/vte-gtk3.toml.in | 54 ++++++++++++++++++++++++++++++++++++++ + doc/reference/vte-gtk4.toml.in | 59 ++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 113 insertions(+) + +commit 0f7a2ff5b87a40b28f3c340a40ed9ff7ecad459b +Author: Christian Persch +Date: 2022-05-03 21:57:58 +0200 + + docs: Port to gi-docgen + + This greatly simplifies building the documentation for both vte/gtk3 and + vte/gtk4. + + Makefile.meson | 4 +- + doc/reference/Makefile.docs | 520 ------------------------------------- + doc/reference/gtk3/meson.build | 55 ---- + doc/reference/gtk4/meson.build | 55 ---- + doc/reference/licence.md | 27 ++ + doc/reference/meson.build | 87 ++++++- + doc/reference/vte-docs.xml | 182 ------------- + doc/reference/vte-overrides.txt.in | 0 + doc/reference/vte-sections.txt.in | 281 -------------------- + doc/reference/vte.types.in | 17 -- + meson.build | 4 - + 11 files changed, 106 insertions(+), 1126 deletions(-) + +commit 5147453115f46d2dc91b797cd12f2ede220ea100 +Author: Christian Persch +Date: 2022-05-03 21:03:54 +0200 + + widget: Ignore synthetic scroll events + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2561 + + src/widget.cc | 27 ++++++++++++++++++--------- + src/widget.hh | 2 +- + 2 files changed, 19 insertions(+), 10 deletions(-) + +commit 1398ac862fb10b3cb7cdfc8267be2df5d5f39eb5 +Author: Christian Persch +Date: 2022-04-20 20:26:06 +0200 + + fonts: gtk4: Create a new pango context + + Don't use the widget's pango context, since it may contain weird font + description and attributes. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2558 + + src/fonts-pangocairo.cc | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit 820bb7ba14f996d0f93172ccd37accb48be36054 +Author: Christian Persch +Date: 2022-04-20 20:26:06 +0200 + + fonts: Pass nullptr for language + + No need to re-set the context's language to its current value. + + src/fonts-pangocairo.cc | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +commit 01647f9aa8891cf2ef0b524edb19d8c18730dd98 +Author: Christian Persch +Date: 2022-04-20 20:26:06 +0200 + + fonts: Only set language if different to the current language + + src/fonts-pangocairo.cc | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 17024047b06f72ad6cd431b200bd710d11ffd268 +Author: Christian Persch +Date: 2022-04-18 19:39:01 +0200 + + widget: Fix padding borders + + On gtk3, the padding needs to be added to the widget's size request, and + is inside its allocation, while on gtk4, the padding is outside the + widget's allocation. The inner padding (use to [xy]align and [xy]fill + properties) is always inside the allocation. + + Also fixes event coordinate translation on gtk4 to take the inner border + into account. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2554 + + src/vte.cc | 239 +++++++++++++++++++++++++++++++++++------------------ + src/vteaccess.cc | 4 +- + src/vtegtk.cc | 4 +- + src/vteinternal.hh | 35 +++++--- + src/widget.cc | 54 +++++------- + src/widget.hh | 6 +- + 6 files changed, 207 insertions(+), 135 deletions(-) + +commit 8c4b920cba056d1100a15eae5f4aa02c92452dcb +Author: Christian Persch +Date: 2022-04-18 19:39:01 +0200 + + build: Try to fix pwrite detection on non-glibc systems + + Define _POSIX_C_SOURCE for POSIX 2008. + + meson.build | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit e53cd45100848bfe782dbc5c4bf47ca94c46ec16 +Author: Christian Persch +Date: 2022-04-12 22:02:49 +0200 + + app: Don't override widget's CSS names + + Setting a different CSS name makes the VteTerminal builtin CSS not + apply. + + Related to #2554. + + src/app/app.cc | 5 ----- + 1 file changed, 5 deletions(-) + +commit bbd3f97b7d40988f4a9ed1e4e8723537b3836dd0 +Author: Christian Persch +Date: 2022-04-11 22:47:48 +0200 + + widget: Queue a resize on CSS changes + + Suggested by Christian Hergert in #2554. + + src/widget.cc | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +commit af8f53aae88aa09890d4baed7ed718f81e6489d7 +Author: Christian Persch +Date: 2022-04-11 22:47:48 +0200 + + widget: Remove errneous gtk_widget_allocate call + + This breaks widget positioning, and isn't necessary in any case. Noticed + by Christian Hergert in #2554. + + src/widget.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit 254416436fe346ffc23fb4bb79460f7fdb60171e +Author: Christian Persch +Date: 2022-04-08 21:50:18 +0200 + + bindings: vala: Add vapi for vte/gtk4 + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2546 + + bindings/meson.build | 2 +- + bindings/vala/meson.build | 89 +++++++++++++---------------------------------- + 2 files changed, 26 insertions(+), 65 deletions(-) + +commit 9a3769b22da64a040f8ab306f25cecc3e25e2305 +Author: Christian Persch +Date: 2022-04-08 21:50:18 +0200 + + bindings: vala: Remove the test app + + It only existed anymore to test that comping a vala programme with the + vte vapi works, but it's been broken by vala changes a couple of times, + and also is too much work to port to gtk4. So just remove it. + + bindings/vala/app.gresource.xml | 23 - + bindings/vala/app.ui | 152 ------ + bindings/vala/app.vala | 1099 --------------------------------------- + bindings/vala/config.vapi | 5 - + bindings/vala/search-popover.ui | 249 --------- + 5 files changed, 1528 deletions(-) + +commit 16e65aa7bea7b5781248be6fa904e3ee1077efdc +Author: Christian Persch +Date: 2022-04-08 21:38:50 +0200 + + bindings: gir: Change vte/gtk4 gir nsversion + + The previous scheme of prepending a '4' proved to be problemativ, see + issue 2550. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2550 + + bindings/gir/meson.build | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 6a80bec4bf7a1e52057c03d2c73cce1bf248c6d7 +Author: Christian Persch +Date: 2022-03-03 23:25:51 +0100 + + build: Fix debug build + + Add missing sources for the test. + + src/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b433a647fde406d059e5fbf48ba47b847c136917 +Author: Christian Persch +Date: 2022-03-01 23:08:53 +0100 + + build: Fix debug build + + Add missing sources for the test app. + + src/app/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7a0a7f3c5dd1b9c798bfa0f1f0a13661167f54a3 +Author: Christian Persch +Date: 2022-03-01 21:12:12 +0100 + + lib: Move glib glue code to glib-glue.cc + + src/glib-glue.cc | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/meson.build | 1 + + src/vtegtk.cc | 145 -------------------------------------------- + 3 files changed, 181 insertions(+), 145 deletions(-) + +commit 5770e39b5a908952237bc8288e5342eb08c1d5bb +Author: Christian Persch +Date: 2022-02-28 17:37:43 +0100 + + spawn: Fix build without CLOSE_RANGE_CLOEXEC + + Only call close_range() when CLOSE_RANGE_CLOEXEC is defined. + Fixes the build on non-linux. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2544 + + src/spawn.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit f4b915aea367d407f8ac527e1aed9425b8cea9e2 +Author: Christian Persch +Date: 2022-02-12 19:19:40 +0100 + + build: Post branch version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b70729f508d11abf9a7c2ccb5f1cd675e465f954 +Author: Christian Persch +Date: 2022-02-11 19:03:16 +0100 + + widget: Fix some API version tags + + The alignment API was deferred to 0.70, so correct the Since: tags. + + src/vtegtk.cc | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +commit e03e6ebaf08f9059308088f472a09b96d359a38f +Author: Christian Persch +Date: 2022-02-11 19:03:16 +0100 + + sixel: Remove stray semicolon + + src/sixel-test.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5fa45b4b177989d35fad927e9f8f9d57d4dbba2a +Author: Christian Persch +Date: 2022-02-10 21:07:24 +0100 + + sixel: Fix DECGRI for parameter value 0 + + A DECGRI 0 should be treated like a DECGRI 1, as per DEC documentation. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2543 + + src/sixel-context.hh | 5 ++++- + src/sixel-test.cc | 8 ++++++++ + 2 files changed, 12 insertions(+), 1 deletion(-) + +commit edaca046502c02a4b2e247bebae3f69f3ecb6ebd +Author: Christian Persch +Date: 2022-02-08 20:53:03 +0100 + + build: Change gtk4 GIR version hack + + Seems gjs has a problem with this, so use a diffferent character. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2539 + + bindings/gir/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 467063842ccee1f2917906755103101c476cc982 +Author: Christian Persch +Date: 2022-02-08 20:30:31 +0100 + + widget: Deprecate VteCharAttributes struct + + src/meson.build | 1 - + src/vte/vtedeprecated.h | 12 +++++++++++- + src/vte/vteterminal.h | 9 --------- + src/vtegtk.cc | 6 ++++++ + 4 files changed, 17 insertions(+), 11 deletions(-) + +commit ab85f122db965d56ace54d01fd391300795ee0c0 +Author: Christian Persch +Date: 2022-02-08 20:30:31 +0100 + + widget: Deprecate the attributes out-param for vte_terminal_get_text + + Part of the future fix for issue #2504. + + src/vtegtk.cc | 38 +++++++++++++++++++++++++++++++++----- + 1 file changed, 33 insertions(+), 5 deletions(-) + +commit 1e7be827e0fbfefddc8e785bdaac43dd353134e4 +Author: Christian Persch +Date: 2022-02-08 20:30:31 +0100 + + lib: Remove misplaced inline from function declaration + + src/cxx-utils.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0718a9a7f9300b2526eddb0fc74e25eef34795ba +Author: Christian Persch +Date: 2022-02-03 20:58:11 +0100 + + emulation: Support XTVERSION sequence + + src/parser-reply.hh | 1 + + src/parser-seq.py | 2 ++ + src/vteseq.cc | 32 ++++++++++++++++++++++++++++++-- + 3 files changed, 33 insertions(+), 2 deletions(-) + +commit e78b08c09dc3972ed9415fa5b82d47080a7380ca +Author: Christian Persch +Date: 2022-02-03 20:58:11 +0100 + + parser: Fix comments + + src/parser-charset-tables.hh | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +commit 49a4b4b73b75805ff40ccdab93f098d3e7c8962d +Author: Christian Persch +Date: 2022-02-03 20:58:11 +0100 + + fonts: Fix height check + + src/fonts-pangocairo.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a1fee6a62d87893dceffda5cbce698ebf897a9e7 +Author: Naala Nanba +Date: 2022-02-01 20:46:26 +0000 + + Add Abkhazian translation + + po/LINGUAS | 1 + + po/ab.po | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 59 insertions(+) + +commit a8cd0885e4382f634a3549a417969567d1ca87d1 +Author: Sveinn í Felli +Date: 2022-01-29 11:51:06 +0000 + + Update Icelandic translation + + (cherry picked from commit e217f867ebbd0792051ccb51d7c1cd3a0555ca67) + + po/is.po | 79 +++++++++++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 51 insertions(+), 28 deletions(-) + +commit 009a975e587ce22d76107d3720d60532c2c759d0 +Author: Christian Persch +Date: 2022-01-14 21:20:50 +0100 + + widget: Fix measure baseline to return -1 + + src/widget.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e32dba1d5cf884959af5b2c0691db00c263ea048 +Author: Christian Persch +Date: 2021-12-27 19:24:46 +0100 + + build: Fix check for -fstack-protector* compiler support + + Need to use has_link_argument() on some platforms. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2535 + + meson.build | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 730cca20d69cdd7fc8a67b6f578293b07373cf97 +Author: Christian Persch +Date: 2021-12-22 21:22:35 +0100 + + app: Fix context menu styling + + Somehow with a recent gtk3 version, the context menu inherits the monospace + style of the VteTerminal. + + src/app/app.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit 980b3f4f62051e8acf0a2a2973c861dbf8fff4db +Author: Christian Persch +Date: 2021-12-22 21:22:35 +0100 + + widget: Split alignment and fill properties + + Don't encode fill as a flag within the VteAlign enum. + + https://gitlab.gnome.org/GNOME/vte/-/issues/337 + + doc/reference/vte-sections.txt.in | 4 ++ + src/app/app.cc | 17 ++++- + src/vte.cc | 18 +++-- + src/vte/vteenums.h | 5 -- + src/vte/vteterminal.h | 14 ++++ + src/vtegtk.cc | 142 ++++++++++++++++++++++++++++++++++++-- + src/vtegtk.hh | 2 + + src/vteinternal.hh | 10 +-- + src/widget.cc | 6 +- + src/widget.hh | 28 +++++++- + 10 files changed, 221 insertions(+), 25 deletions(-) + +commit ba78631c2d1293575f9fef3d90989f3bcb97d077 +Author: Rico Tzschichholz +Date: 2021-12-01 08:22:54 +0100 + + vala: Reference of [GtkChild] field is handled by GtkBuilder, type must be unowned + + bindings/vala/app.vala | 36 ++++++++++++++++++------------------ + 1 file changed, 18 insertions(+), 18 deletions(-) + +commit 069b68f393c46ebfc6734708f1446419ceed95da +Author: Rico Tzschichholz +Date: 2021-12-01 08:21:36 +0100 + + vala: Fix accessibility of constant intializer expression + + bindings/vala/app.vala | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit f93a093fb2a4029ea365b24f5105b8f45a14bcd7 +Author: Christian Persch +Date: 2021-11-27 19:45:07 +0100 + + terminal: Make CRLF pastification smarter + + Replace lone LF with CR as previously, but replace a CR LF also + with CR only, not CR CR. + + This may help with https://gitlab.gnome.org/GNOME/gtk/-/issues/2307 . + + src/pastify-test.cc | 5 ++++- + src/pastify.cc | 30 +++++++++++++++++++++--------- + 2 files changed, 25 insertions(+), 10 deletions(-) + +commit 4bbd956a155f133c289e514a8f2e48c435096258 +Author: Christian Persch +Date: 2021-11-27 19:45:07 +0100 + + terminal: Make pastification not replace something with nothing + + Replacing something with nothing may be dangerous in itself. So + instead of omitting the forbidden controls from the pasted string, + replace the controls with their control picture (or U+FFFD for + the C1 controls which have no control pictures in unicode). + + src/pastify-test.cc | 29 +++++++++++-------- + src/pastify.cc | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++- + src/pastify.hh | 3 ++ + 3 files changed, 101 insertions(+), 12 deletions(-) + +commit 7daaabbc6d8c217b01f94e28c43656fad1170391 +Author: Christian Persch +Date: 2021-11-27 19:45:07 +0100 + + terminal: Add tests for text paste transformation + + Move the paste transformation to its own file, and add tests. + + src/meson.build | 20 +++++- + src/pastify-test.cc | 198 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/pastify.cc | 108 ++++++++++++++++++++++++++++ + src/pastify.hh | 30 ++++++++ + src/vte.cc | 63 ++--------------- + src/vteinternal.hh | 2 +- + src/widget.cc | 2 +- + src/widget.hh | 2 +- + 8 files changed, 363 insertions(+), 62 deletions(-) + +commit ffefea92b97afd334b2f09df7a2ef040598de1c8 +Author: Christian Persch +Date: 2021-11-27 19:45:07 +0100 + + parser: Fix some control codes + + NAK and WM had the wrong codes assigned. Since both are NOPs, this + wasn't allowing incorrrect behaviour, but needs to be corrected still. + + src/parser-seq.py | 24 ++++++++++++++++++++++-- + 1 file changed, 22 insertions(+), 2 deletions(-) + +commit 205aecf066326de679138106a004a0e893935a9f +Author: Christian Persch +Date: 2021-11-27 19:45:07 +0100 + + widget: Fix Since version for new API + + src/vte/vteterminal.h | 3 ++- + src/vtegtk.cc | 7 ++++--- + 2 files changed, 6 insertions(+), 4 deletions(-) + +commit b8cbae1a81ad879128e492d524ee55306ecf9168 +Author: Zander Brown +Date: 2021-11-24 12:17:14 +0000 + + widget: add vte_terminal_paste + + Allow providing an explict string to "paste" + + Fix: https://gitlab.gnome.org/GNOME/vte/-/issues/2531 + + doc/reference/vte-sections.txt.in | 1 + + src/vte.cc | 3 +-- + src/vte/vteterminal.h | 2 ++ + src/vtegtk.cc | 25 +++++++++++++++++++++++++ + src/vteinternal.hh | 3 +-- + src/widget.cc | 2 +- + src/widget.hh | 1 + + 7 files changed, 32 insertions(+), 5 deletions(-) + +commit ebecf6ac04488d0d697c255d582ea891c3bf1577 +Author: Christian Persch +Date: 2021-11-07 13:38:23 +0100 + + lib: Check for close_range function and use it when available + + This should enable using close_range also on non-linux platforms that + do have close_range, e.g. freebsd and (soon) hurd. + + Part of https://gitlab.gnome.org/GNOME/vte/-/issues/2528 . + + meson.build | 7 +++++++ + src/missing.cc | 29 +++++++++-------------------- + src/missing.hh | 11 +++++++++++ + src/spawn.cc | 12 ++++++++++++ + 4 files changed, 39 insertions(+), 20 deletions(-) + +commit 86d004afa2bc563977e4ffd9a12181b58b770b0e +Author: Christian Persch +Date: 2021-11-07 13:38:23 +0100 + + build: Rework function checks + + Meson's compiler.has_function() is broken when the function checked for + has multiple overloads, e.g. for strchrnul which has overloads for + char* and const char*. + [https://github.com/mesonbuild/meson/issues/8075]. + + Use compiler.compiles() instead with hand-crafted source that also + checks the function has the correct prototype. + + meson.build | 175 ++++++++++++++++++++++++++++++++++++++++++++++++------------ + 1 file changed, 141 insertions(+), 34 deletions(-) + +commit db3c6253d7fa1645996a2abd9fd55df414ca4c2d +Author: Luis Javier Merino Morán +Date: 2021-11-04 19:25:09 +0100 + + emulation: ECMA modes should not be saved by DECSC + + From esctest: + DECRCTests.test_SaveRestoreCursor_InsertNotAffected + DECSETTiteInhibitTests.test_SaveRestoreCursor_InsertNotAffected + SCORCTests.test_SaveRestoreCursor_InsertNotAffected + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2524 + + src/vte.cc | 4 ---- + src/vteinternal.hh | 1 - + 2 files changed, 5 deletions(-) + +commit c695b5e9f308cbb9e0d8dfcc9af924e177ba2c6d +Author: Luis Javier Merino Morán +Date: 2021-11-04 19:14:58 +0100 + + emulation: use correct range for DECRQCRA + + Apparently at some point ranges where changed from end-inclusive to + end-exclusive, and DECRQCRA was not updated accordingly. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2523 + + src/vteseq.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f52c9c23e1862b67679997f404adcd60ee61bbd0 +Author: Christian Persch +Date: 2021-10-23 20:55:15 +0200 + + widget: Add more precondition checks for vte_pty_spawn_async_with_fds + + src/vtepty.cc | 15 +++++++-------- + 1 file changed, 7 insertions(+), 8 deletions(-) + +commit cc8c374ccb3a22bb55d33154664d2b81feb35a61 +Author: Christian Persch +Date: 2021-10-23 20:55:15 +0200 + + spawn: FD reassignment code tweaks + + Made these while researching whether vte suffers from glib#2503. + + src/spawn.cc | 27 ++++++++++++++++----------- + 1 file changed, 16 insertions(+), 11 deletions(-) + +commit 7d0c6aeaa870b67a3897bd439bb076d5ef376f2d +Author: Christian Persch +Date: 2021-10-23 20:55:15 +0200 + + parser: Recognise more commands + + Add one sequence from mintty. + + src/parser-seq.py | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 51cd95caa2cf63270c51d6df027afe0252487ccd +Author: Christian Persch +Date: 2021-10-23 20:55:15 +0200 + + app: Improve option value description + + src/app/app.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 374e89381bc47f26260597fca67689a29600b8c6 +Author: Christian Persch +Date: 2021-10-23 20:55:15 +0200 + + emulation: Docs improvements + + src/vteseq.cc | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +commit 357f8d066703700df2b4d4b69fd13f7ee5d70745 +Author: Christian Persch +Date: 2021-10-09 20:16:05 +0200 + + fonts: Relax font sanitisation + + Allow specifying a font weight, but cap it so that emboldening it does + not overflow the maximum weight. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/323 + f# bricht den Commit ab. + + src/vte.cc | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 05fb6061fb962fee09085f5d7c9f9fd27202e2c6 +Author: Christian Persch +Date: 2021-10-09 20:16:05 +0200 + + fonts: Improve font bolding + + Embolden the font by adding to its weight, not just overwriting the + weight with PANGO_WEIGHT_BOLD. + + src/drawing-cairo.cc | 8 +++++++- + src/vtedefines.hh | 2 ++ + 2 files changed, 9 insertions(+), 1 deletion(-) + +commit 64b333b11b840d2fad6643516d5b0116ef82dba4 +Author: Christian Persch +Date: 2021-10-08 19:24:57 +0200 + + app: Add option to set initial title + + Based on a patch by Zach DeCook. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2517 + + src/app/app.cc | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +commit 91123bb5201156e3d3adbe24305488f5eea2c8d7 +Author: Christian Persch +Date: 2021-09-27 22:46:47 +0200 + + build: Fix build with kernel headers from linux < 4.13 + + We already support running with a kernel that doesn't support this + ioctl, so let's also support building with one. Add the missing + ioctl definition to missing.hh. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2514 + + src/missing.hh | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit 231dd818fcca839f21a1031497b37b7142a12645 +Author: Yaron Shahrabani +Date: 2021-09-27 08:50:19 +0000 + + Update Hebrew translation + + (cherry picked from commit ca56bac88059a5b3cf3edda5ed58da7449cfa553) + + po/he.po | 81 ++++++++++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 51 insertions(+), 30 deletions(-) + +commit 73a029f06ceb67d3422a1c80a16602ada3ca0009 +Author: Christian Persch +Date: 2021-09-26 19:12:57 +0200 + + lib: ABI repairs + + src/vte/vteterminal.h | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +commit d0bf44719a546dd24b3da08c934d8530ef474acd +Author: Christian Persch +Date: 2021-09-25 10:54:37 +0200 + + parser: modes: Fix DECSDM default value + + src/modes.hh | 1 - + 1 file changed, 1 deletion(-) + +commit 2b0e792eafcb1b4cedaa8d84ef595b8de9d8f4ca +Author: Christian Persch +Date: 2021-09-25 10:50:29 +0200 + + parser: modes: Fix DECSDM default value + + src/modes.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 2e0ae811fdea963ce0709eaedf14b8b7697908f7 +Author: Christian Persch +Date: 2021-09-25 10:50:29 +0200 + + vte.sh: Fix the check for PROMPT_COMMAND when it is unset + + declare "helpfully" outputs on stdout for existing variables, but on stderr + for nonexistent ones. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/37 + + src/vte.sh.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0178c1b0a3d2c162bfddcd161ab55f4ff79b1ab4 +Author: Christian Persch +Date: 2021-08-29 22:24:57 +0200 + + emulation: Fix xterm window size request response + + The parameters were accidentally swapped. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2509 + + src/vteseq.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 5c067c2a64c411ad5c8cf28e9e5f0f58759a1a08 +Author: Christian Persch +Date: 2021-08-29 19:06:46 +0200 + + docs: Add index for API new in 0.68 + + doc/reference/vte-docs.xml | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 9e2df181c8eebd4858f8257695b1b31081c32ed8 +Author: Christian Persch +Date: 2021-08-29 19:06:46 +0200 + + widget: Correct some API Since: versions + + src/vte/vteenums.h | 2 +- + src/vtegtk.cc | 12 ++++++------ + 2 files changed, 7 insertions(+), 7 deletions(-) + +commit 8620b577303e60ef78efd6b66d9c79dcee579e39 +Author: Takao Fujiwara +Date: 2021-08-28 22:12:59 +0200 + + widget: Adjust preedit position to GtkEntry + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/339 + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e67d15735e1410e139f8e1943cc6ca728524c34d +Author: Christian Persch +Date: 2021-08-28 22:00:06 +0200 + + vte.sh: Use PROMPT_COMMAND as an array when possible + + Newer bash versions support PROMPT_COMMAND as an array. In this case, + add only the __vte_osc7 command to the array, instead of overwriting + the PROMPT_COMMAND with __vte_prompt_command. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/37 + + src/vte.sh.in | 31 ++++++++++++++++++++++++------- + 1 file changed, 24 insertions(+), 7 deletions(-) + +commit 6c24f146a0f6a3829e3d36a3c2c3601e638e3a50 +Author: Christian Persch +Date: 2021-08-28 21:18:52 +0200 + + fonts: More metrics sanity checks + + The pango font metrics for some fonts return a height lower than the + height measured from the U+0020..U+007E characters. Using the metrics + in this case may lead to the descenders getting cut off from characters + in the last line, depending on the padding available. + + Change the code to only use the pango metrics when its height is at + least that of the measured characters. + + Fixes: https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/340 + + src/fonts-pangocairo.cc | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +commit f688626f920480d95a7691a49b38eac1873f9849 +Author: Christian Persch +Date: 2021-08-14 23:23:47 +0200 + + build: Post branch version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6460463b258d69ae12e5e9db09e9414403e136b5 +Author: Christian Persch +Date: 2021-08-14 21:45:46 +0200 + + widget: Rework exception handling in non-debug builds + + Always make bad_alloc fatal. + + src/cxx-utils.hh | 2 +- + src/vtegtk.cc | 36 ++++++++++++++++++++++++++++++++++++ + 2 files changed, 37 insertions(+), 1 deletion(-) + +commit 970ea4ec4db308cf498b22c9ac94ae29559d7a11 +Author: Christian Persch +Date: 2021-08-14 21:45:46 +0200 + + emulation: Some more docs + + src/vteseq.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 9c8ba36e8b2744735729f2b2abcb6a66a08705a8 +Author: Christian Persch +Date: 2021-08-14 21:45:46 +0200 + + parser: Recognise more commands + + Add another NOP from WY. + + src/parser-seq.py | 2 ++ + src/vteseq.cc | 48 ++++++++++++++++++++++++++++++++++++++++++------ + 2 files changed, 44 insertions(+), 6 deletions(-) + +commit c17e6d12da00a94c3768be6671182a6a039ec0c0 +Author: Alexander Shopov +Date: 2021-07-04 12:25:07 +0000 + + Update Bulgarian translation + + po/bg.po | 67 ++++++++++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 42 insertions(+), 25 deletions(-) + +commit 196416acdb7b5fbb9b99486b503680797613908f +Author: Alexey Rubtsov +Date: 2021-06-28 13:44:57 +0000 + + Update Russian translation + + po/ru.po | 66 +++++++++++++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 45 insertions(+), 21 deletions(-) + +commit 674f864269d0842376752487f29bfdddc8c7ec9f +Author: Brad Smith +Date: 2021-06-27 12:17:08 +0200 + + build: Fix build on non-linux systems + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2501 + + src/missing.hh | 3 +++ + 1 file changed, 3 insertions(+) + +commit c7be1cc69aab64c5cc255bcdada39baf1dab5ad3 +Author: Christian Persch +Date: 2021-06-21 21:42:56 +0200 + + lib: Fix switching encodings + + When switching encodings, need to also set the current data syntax + to the new data syntax. + + https://bugzilla.redhat.com/show_bug.cgi?id=1974182 + + src/vte.cc | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +commit 9eab17c8bc0f77faf3641e0d50083bb669b5656e +Author: Christian Persch +Date: 2021-05-20 19:39:43 +0200 + + widget: Docs fix + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/357 + + src/vtegtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3c2df74bcb2d33d1c20c6d78e26005eeca788686 +Author: Quentin PAGÈS +Date: 2021-05-13 14:55:23 +0000 + + Update Occitan translation + + (cherry picked from commit 08a3a3c61c96c16cd17bec7526cc531be7b56729) + + po/oc.po | 64 +++++++++++++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 43 insertions(+), 21 deletions(-) + +commit c842a88dbf4b7defa6849f821b0c12bd8eb78883 +Author: Debarshi Ray +Date: 2021-05-12 22:31:55 +0200 + + font: pangocairo: Remove redundant code + + The max_height variable is initialized as 1, and then iteratively + updated to track the maximum height of all the characters from U+0021 + to U+007E. The final value is assined to m_height. Hence m_height can + never be zero. + + In the case of m_ascent, the contents of m_layout don't change between + the two places where it's assigned. Therefore, the second assignment is + redundant. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/355 + + src/fonts-pangocairo.cc | 7 ------- + 1 file changed, 7 deletions(-) + +commit a248b8741a8144287b2d65effd3d859460008971 +Author: Christian Persch +Date: 2021-04-29 21:32:12 +0200 + + lib: Add glue for public types + + src/app/app.cc | 5 +---- + src/app/meson.build | 2 +- + src/meson.build | 6 +++++- + src/vte-glue.hh | 28 ++++++++++++++++++++++++++++ + 4 files changed, 35 insertions(+), 6 deletions(-) + +commit d9fbea1835a71b5d023b7123e285f691faa4faea +Author: Christian Persch +Date: 2021-04-27 22:43:30 +0200 + + build: Fix gtk4-only build + + src/meson.build | 28 +++++++++++++++------------- + 1 file changed, 15 insertions(+), 13 deletions(-) + +commit 984b5cdfd2bc3bc4ff98c4e6fddcff0115839f44 +Author: Pawan Chitrakar +Date: 2021-04-23 16:52:26 +0000 + + Update Nepali translation + + (cherry picked from commit 109a6cf6e05ef55b79f768a30fdf95723ebba0d3) + + po/ne.po | 157 +++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 77 insertions(+), 80 deletions(-) + +commit 94d6a3c10fcaae65b38c17687bc98defb6dfac33 +Author: Joan Bruguera +Date: 2021-04-11 22:58:37 +0200 + + widget: Move clipboard store from finalize to unrealize + + Fixes a regression from commit 0136048d32d29412de3381828bb21f05563c799f. + + Unfortunately, this causes a regression in the following simple case: + * Open two instances of a terminal like xfce4-terminal. + * Go to the first instance, copy some string of text, and close it. + * Go to the second instance and paste it. Due to the regression, it won't work. + + The cause is that Widget::unrealize calls Terminal::widget_clipboard_data_clear, + this will set m_selection_owned[type] = false. Later when Terminal::~Terminal is + run, the piece of code that calls clipboard_set_text will not be run, because it + depends on m_selection_owned[type] being set (but it ran before on 0.62.3). + + This commit moves this last piece of code to Terminal::widget_unrealize, which + is called before setting m_selection_owned[type] = false. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/349 + + src/vte.cc | 38 +++++++++++++++++++------------------- + 1 file changed, 19 insertions(+), 19 deletions(-) + +commit f728689e89ef4f6b83527c9a0d340ee52b7d0cf0 +Author: Christian Persch +Date: 2021-04-03 16:07:50 +0200 + + sixel: Reset repeat counter when receiving the next command + + This was already done when receiving one of the known commands; do the + same when receiving an unimplemented command. + + src/sixel-context.hh | 13 ++++++------- + src/sixel-parser.hh | 9 ++++----- + 2 files changed, 10 insertions(+), 12 deletions(-) + +commit 260416dfc4a93b8e202e09acfcc30e2063d7f37e +Author: Christian Persch +Date: 2021-04-03 16:07:50 +0200 + + sixel: Fix pixel aspect calculation + + src/sixel-context.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 74de8ced35d8ef7c3b0bdc81c90147aa00d30648 +Author: Christian Persch +Date: 2021-04-03 16:07:50 +0200 + + sixel: More constexpr + + src/sixel-context.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit c834c8690d3ecd338b91334702da4c8682634e0d +Author: Christian Persch +Date: 2021-04-03 16:07:50 +0200 + + sixel: Remove obsolete comment + + src/sixel-context.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit f4b99a55962ef80cedd10243867d19f2024d0299 +Author: Christian Persch +Date: 2021-04-03 16:07:50 +0200 + + sixel: Remove ununused tracking of palette modification + + src/sixel-context.hh | 2 -- + 1 file changed, 2 deletions(-) + +commit ac68f31c34ecea9acb77d7d1bd10f5d3792f8565 +Author: Christian Persch +Date: 2021-04-03 16:07:50 +0200 + + parser: Add new OSC command from xterm 367 + + For documentation purposes only; won't implement this in vte. + + src/parser-osc.hh | 1 + + src/vteseq.cc | 1 + + 2 files changed, 2 insertions(+) + +commit ed2ca9ff126aed6ddb9274611415f5a8239fa25f +Author: Christian Persch +Date: 2021-04-03 16:07:50 +0200 + + parser: modes: Small doc addition + + src/modes.py | 1 + + 1 file changed, 1 insertion(+) + +commit 7044294b737b92a4afb15cfeb64ae09053cb85c1 +Author: Christian Persch +Date: 2021-04-03 16:07:50 +0200 + + build: Don't install test app when building as subproject + + src/app/meson.build | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit c65d8d92a6b4be97e4d4224cda10ead5e9f413f7 +Author: Christian Persch +Date: 2021-04-03 12:10:20 +0200 + + build: Mention release tarballs in README + + README.md | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit 42da7ea02322929f4adbb51ed79cda1eebc040b3 +Author: Nathan Follens +Date: 2021-04-01 19:47:29 +0000 + + Update Dutch translation + + (cherry picked from commit b2d98b82d1be140e433b18423e0a95a370218032) + + po/nl.po | 65 +++++++++++++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 44 insertions(+), 21 deletions(-) + +commit c65ad403e522a905d3f3b9d5f46d71ee95bebd4f +Author: Christian Persch +Date: 2021-03-27 13:28:13 +0100 + + widget: gtk4: Set controller names + + src/widget.cc | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit 37cd326d02c6a66c6fbb7beafd50a9ad42c12399 +Author: Christian Persch +Date: 2021-03-27 13:28:13 +0100 + + widget: gtk4: Add click event controller + + src/widget.cc | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/widget.hh | 20 +++++++ + 2 files changed, 204 insertions(+) + +commit 5f1039f1c86676f79642cb576ec6dbb4dcacd47a +Author: Christian Persch +Date: 2021-03-27 13:28:13 +0100 + + widget: gtk4: Add scroll event controller + + src/widget.cc | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/widget.hh | 8 +++++ + 2 files changed, 114 insertions(+) + +commit fcf11ed057f6b4614d47bba84f5424dc392ae680 +Author: Christian Persch +Date: 2021-03-27 13:28:13 +0100 + + widget: gtk4: Add motion event controller + + src/widget.cc | 157 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/widget.hh | 9 ++++ + 2 files changed, 166 insertions(+) + +commit 1e674130bf231208e8f33006b78913095dd7e5a8 +Author: Christian Persch +Date: 2021-03-25 19:26:57 +0100 + + build: Work around a meson bug with dist scripts in subprojects + + https://github.com/mesonbuild/meson/issues/8440 + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/345 + + meson.build | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +commit 21685ded3e4a1dba02822ba248b0445e24a58dab +Author: Christian Persch +Date: 2021-03-24 18:28:48 +0100 + + build: Add missing includes + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/342 + + src/missing.hh | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit a5817b18ec2e770cfea0e51ae3350943c3287956 +Author: Christian Persch +Date: 2021-03-19 22:50:47 +0100 + + build: Add dist script + + Makefile.meson | 8 ++++++++ + meson.build | 6 ++++++ + meson_changelog.sh | 33 +++++++++++++++++++++++++++++++++ + 3 files changed, 47 insertions(+) + +commit 4c85df696c8ee4e858cd0584410b2ddfc98fc4ed +Author: Christian Persch +Date: 2021-03-16 17:55:47 +0100 + + app: gtk4: Disable F10 menubar accel + + src/app/app.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit b333d66879963637099dc0bc5a702f50f34da67e +Author: Christian Persch +Date: 2021-03-16 17:55:47 +0100 + + widget: a11y: Remove assert + + This assert is getting hit more frequently now, e.g. by #340. + Replace it with an if branch. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/340 + + src/vteaccess.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 9a76d6cc6b90dd17f8a3e87777707570053e9461 +Author: Christian Persch +Date: 2021-03-14 12:34:15 +0100 + + widget: Use our own enum for alignment + + doc/reference/vte-sections.txt.in | 3 ++ + src/app/app.cc | 16 +++++------ + src/vte.cc | 14 ++++----- + src/vte/vteenums.h | 24 ++++++++++++++++ + src/vte/vteterminal.h | 8 +++--- + src/vtegtk.cc | 60 ++++++++++++++++++++++++--------------- + src/vteinternal.hh | 11 +++---- + src/widget.hh | 10 +++---- + 8 files changed, 93 insertions(+), 53 deletions(-) + +commit 1b60b4a600dbbec0a056f076f1aae244b1a1109c +Author: Christian Persch +Date: 2021-03-13 22:10:42 +0100 + + build: Suppress undesirable warnings + + meson.build | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 1be3d3d9fa160874ccf162acd1adb88ca8ba05a8 +Author: Christian Persch +Date: 2021-03-13 22:10:42 +0100 + + widget: Add alignment properties + + Add API to set how to distribute extra-grid space allocated to the + widget. Previously, vte always positioned the content at the left and top + of the allocation. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/337 + + doc/reference/vte-sections.txt.in | 4 ++ + src/app/app.cc | 33 +++++++++ + src/vte.cc | 127 ++++++++++++++++++++------------- + src/vte/vteterminal.h | 14 ++++ + src/vtedefines.hh | 3 + + src/vtegtk.cc | 144 +++++++++++++++++++++++++++++++++++++- + src/vtegtk.hh | 2 + + src/vteinternal.hh | 22 ++++-- + src/widget.cc | 8 ++- + src/widget.hh | 28 +++++++- + 10 files changed, 325 insertions(+), 60 deletions(-) + +commit cf4984c4c35b6c15b239fbea5abf3a92271665d2 +Author: Christian Persch +Date: 2021-03-13 22:10:42 +0100 + + widget: Make scroll adjustment range start at 0 always + + https://gitlab.gnome.org/GNOME/vte/-/issues/336 + + src/vte.cc | 29 ++++++++++++++++++----------- + src/vteinternal.hh | 2 +- + src/widget.cc | 21 ++++++++++++--------- + 3 files changed, 31 insertions(+), 21 deletions(-) + +commit 5033f6c57dc14933cf287270e84fb7ccf0bd52c9 +Author: Christian Persch +Date: 2021-03-13 22:10:42 +0100 + + app: Add option to use a GtkScrolledWindow + + ... for testing purposes. + + Note that geometry and sizing don't work when using a GtkScrolledWindow. + + src/app/app.cc | 49 ++++++++++++++++++++++++++++++++++++++++--------- + 1 file changed, 40 insertions(+), 9 deletions(-) + +commit 910bc02329925e6e7aec8ef2d7dbb717cdc9f38c +Author: Christian Persch +Date: 2021-03-13 22:10:42 +0100 + + widget: Add API to make adjustment values pixels + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/335 + + doc/reference/vte-sections.txt.in | 2 + + src/app/app.cc | 4 + + src/vte.cc | 251 ++++++++++---------------------------- + src/vte/vteterminal.h | 6 + + src/vtegtk.cc | 68 +++++++++++ + src/vtegtk.hh | 1 + + src/vteinternal.hh | 32 +++-- + src/vteseq.cc | 3 +- + src/widget.cc | 198 +++++++++++++++++++++++++++++- + src/widget.hh | 28 ++++- + 10 files changed, 385 insertions(+), 208 deletions(-) + +commit c346a0dd6a149f93ffd63bc4b36dbaa34a02bafe +Author: Christian Persch +Date: 2021-03-06 23:08:54 +0100 + + widget: gtk4: Add focus event handling + + Only local focus for now; need to hook up toplevel focus still. + + src/widget.cc | 47 +++++++++++++++++++++++++++++++++++++++++++++++ + src/widget.hh | 2 ++ + 2 files changed, 49 insertions(+) + +commit 80e45218ab4962f1b0e282de91e9814d45eca7e3 +Author: Christian Persch +Date: 2021-03-06 23:08:54 +0100 + + widget: gtk4: Add keyboard input handling + + src/app/search-popover-gtk4.ui | 10 ---- + src/app/window-gtk4.ui | 9 ---- + src/vte.cc | 11 +++++ + src/vteinternal.hh | 3 ++ + src/widget.cc | 106 +++++++++++++++++++++++++++++++++++++++++ + src/widget.hh | 11 +++++ + 6 files changed, 131 insertions(+), 19 deletions(-) + +commit fe407b8dd4145b48302dcc45a86770efec42c29a +Author: Christian Persch +Date: 2021-03-06 11:13:50 +0100 + + lib: Typo fix + + src/cairo-glue.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a96c4b23e015408af5653791a0b45eca4f33e351 +Author: Christian Persch +Date: 2021-03-04 23:05:25 +0100 + + app: Use gboolean for GOptionArg entries of type G_OPTION_ARG_NONE + + src/app/app.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e20739ef0cf88a8bfa31fad0df0c6487b9073f39 +Author: Christian Persch +Date: 2021-03-03 22:07:57 +0100 + + widget: Don't implement GtkScrollableInterface:get_border + + This reverts commit a7b863a6; see + https://gitlab.gnome.org/GNOME/vte/-/issues/336#note_1049578 . + + src/vtegtk.cc | 26 ++------------------------ + 1 file changed, 2 insertions(+), 24 deletions(-) + +commit 78bb1429d4dfd8eeb682a122046245ae5a45a5a1 +Author: Christian Persch +Date: 2021-03-02 20:45:22 +0100 + + build: Whitespace fix + + meson.build | 1 - + 1 file changed, 1 deletion(-) + +commit 082eeb228338d2bdf4516b4099f87897a9476c18 +Author: Jiri Grönroos +Date: 2021-02-27 09:58:26 +0000 + + Update Finnish translation + + (cherry picked from commit 8099c927b710a6259fd968d50bfd389c1f2bc279) + + po/fi.po | 62 +++++++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 43 insertions(+), 19 deletions(-) + +commit 8cff71ef975f5627d1c2201d0ace6d1c08273537 +Author: Christian Persch +Date: 2021-02-24 20:27:47 +0100 + + sixel: Remove pre-C++20 kludge + + src/sixel-context.hh | 15 +-------------- + 1 file changed, 1 insertion(+), 14 deletions(-) + +commit 78b4f955dc4fbef6248b77147ac7e362982d5857 +Author: Christian Persch +Date: 2021-02-24 20:27:47 +0100 + + docs: Small fixes + + src/vtepty.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 99a06254d5137065122124ae74ca9fcb5c2ef56c +Author: Christian Persch +Date: 2021-02-24 20:22:10 +0100 + + build: Don't warn on volatile + + ... which comes in from gobject headers. + + meson.build | 1 + + 1 file changed, 1 insertion(+) + +commit 80f41f34519d3868314b65d36fe9312e61c62ca7 +Author: Christian Persch +Date: 2021-02-24 20:22:10 +0100 + + all: Fix underalignment warnings + + src/bidi.cc | 8 ++++---- + src/missing.cc | 2 +- + src/vterowdata.cc | 2 +- + 3 files changed, 6 insertions(+), 6 deletions(-) + +commit cca1224968245bd772cd3404342e36bbde265458 +Author: Christian Persch +Date: 2021-02-24 20:22:10 +0100 + + build: Don't warn on C99 designated initialisers + + meson.build | 1 + + 1 file changed, 1 insertion(+) + +commit 81ecc59e2da7bb34230d5943a56a81146a254ac1 +Author: Christian Persch +Date: 2021-02-24 20:22:10 +0100 + + lib: Remove unnecessary assertion + + src/keymap.cc | 1 - + 1 file changed, 1 deletion(-) + +commit eec33cce0b9359fddda35703e22bffd1f8f28852 +Author: Christian Persch +Date: 2021-02-24 20:22:10 +0100 + + build: Require a C++20 compiler + + meson.build | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit b49673e67256b7f445bed72d7876394454fbd9e3 +Author: Christian Persch +Date: 2021-02-24 20:22:10 +0100 + + build: Refactor C/C++ standard requirement checks + + meson.build | 70 ++++++++++++++++++++++++++++++++++++++++++++++--------------- + 1 file changed, 53 insertions(+), 17 deletions(-) + +commit 15d67dc21f2e484fe1c400159839fa58b11bf595 +Author: Christian Persch +Date: 2021-02-24 19:46:44 +0100 + + docs: Small docs fixes + + doc/reference/Makefile.docs | 2 ++ + doc/reference/vte-sections.txt.in | 12 +++++++++--- + src/parser.cc | 10 +++++----- + src/ring.hh | 6 ++++-- + src/vte/vteenums.h | 2 ++ + src/vte/vteversion.h.in | 4 ++-- + src/vteaccess.cc | 8 -------- + src/vtegtk.cc | 33 ++++++++++++++++++--------------- + src/vtepty.cc | 11 ++++++----- + src/vteregex.cc | 12 +++++++----- + 10 files changed, 55 insertions(+), 45 deletions(-) + +commit b9687d4b7bf0c581e240ee71baf5166815b960d3 +Author: Christian Persch +Date: 2021-02-24 19:46:44 +0100 + + widget: Deprecate internal signals + + The text-{modified,inserted,deleted,scrolled} signals are already + documented to be internal and possibly not emitted. Deprecate them + and document them as never emitted; and internally just call the + acccessible object directly instead of via the extraneous signal + emission. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/332 + + src/vte.cc | 71 ++----------------------------- + src/vte/vteterminal.h | 5 +++ + src/vteaccess.cc | 67 ++++++++++++++--------------- + src/vteaccess.h | 9 ++++ + src/vtegtk.cc | 115 ++++++++++++++++++++++---------------------------- + src/vtegtk.hh | 4 -- + src/vteinternal.hh | 67 +++++++++++++++++++++++++---- + src/widget.cc | 5 ++- + 8 files changed, 162 insertions(+), 181 deletions(-) + +commit f173e16ec879d285a47abeeb2a83879066e24d8a +Author: Fran Dieguez +Date: 2021-02-24 00:01:34 +0000 + + Update Galician translation + + (cherry picked from commit aa284d83dee66bfa3fd0dbd9c965f24b13185044) + + po/gl.po | 25 ++++++++++++------------- + 1 file changed, 12 insertions(+), 13 deletions(-) + +commit 075d0b37049244429b7d709dc8c21f67023bc048 +Author: Christian Persch +Date: 2021-02-21 20:05:43 +0100 + + all: Initial port for gtk4 + + Add meson changes to build a gtk4 variant of libvte, plus + a gtk4 variant of the test application. + + Make the minimal code changes required to successfully build + and run on gtk4. + + No event handlers yet, and no public API to replace the gtk3 + specific APIs. That will come later. + + This should be good enough to get non-terminal users of libvte + started on porting to gtk4. + + https://gitlab.gnome.org/GNOME/vte/-/issues/12 + + Makefile.meson | 18 +- + bindings/gir/meson.build | 35 +- + bindings/glade/meson.build | 2 +- + doc/reference/Makefile.docs | 518 ++++++++++++++++ + doc/reference/gtk3/meson.build | 55 ++ + doc/reference/gtk4/meson.build | 55 ++ + doc/reference/meson.build | 94 +-- + doc/reference/version.xml.in | 1 - + doc/reference/vte-docs.xml | 16 +- + .../{vte-overrides.txt => vte-overrides.txt.in} | 0 + .../{vte-sections.txt => vte-sections.txt.in} | 12 + + doc/reference/{vte.types => vte.types.in} | 0 + meson.build | 36 +- + po/POTFILES.skip | 6 +- + src/app/app-gtk4.gresource.xml | 24 + + src/app/app.cc | 680 +++++++++++++++++---- + src/app/appmenu-gtk4.ui | 33 + + src/app/meson.build | 33 +- + src/app/search-popover-gtk3.ui | 1 - + src/app/search-popover-gtk4.ui | 169 +++++ + src/app/window-gtk3.ui | 1 - + src/app/window-gtk4.ui | 185 ++++++ + src/cairo-glue.hh | 4 +- + src/clipboard-gtk.cc | 39 +- + src/clipboard-gtk.hh | 4 + + src/debug.h | 6 + + src/fonts-pangocairo.cc | 32 +- + src/fonts-pangocairo.hh | 5 +- + src/graphene-glue.hh | 48 ++ + src/gtk-glue.hh | 6 + + src/keymap.h | 5 + + src/meson.build | 104 +++- + src/vte.cc | 362 +++++++---- + src/vte/meson.build | 107 +++- + src/vte/vte.h | 4 + + src/vte/vtedeprecated.h | 24 +- + src/vte/vtemacros.h | 20 +- + src/vte/vtepty.h | 10 +- + src/vte/vteregex.h | 2 +- + src/vte/vteterminal.h | 41 +- + src/vte/vtetypebuiltins.h | 28 + + src/vteaccess.h | 6 +- + src/vtedefines.hh | 3 + + src/vtegtk.cc | 404 ++++++++++-- + src/vteinternal.hh | 71 ++- + src/vteseq.cc | 5 + + src/widget.cc | 561 +++++++++++++++-- + src/widget.hh | 109 +++- + 48 files changed, 3400 insertions(+), 584 deletions(-) + +commit 94966f638af6999103f89cd8e31b71701cca495b +Author: Christian Persch +Date: 2021-02-21 16:12:34 +0100 + + app: Add debug option to track clipboard targets + + Trying to help track down the clipboard issue in mutter#1469 / + gnome-shell#3052 / mutter#1656. + + src/app/app.cc | 41 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 41 insertions(+) + +commit f233c8e490eacee02a1c3ae14bfcef2f20092983 +Author: Christian Persch +Date: 2021-02-13 22:54:07 +0100 + + build: Post branch version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 249a9c77cc5870f04dc9650dd76c800c368ff03e +Author: Christian Persch +Date: 2021-02-13 21:31:08 +0100 + + lib: Typo fix + + src/vteseq.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 92d51002f0228fe5f9702e6427c19e07385ec0f8 +Author: Christian Persch +Date: 2021-02-13 21:31:08 +0100 + + parser: DECBI is NOP + + src/parser-seq.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 35b0a8dc9776300bd33c8106e500436b6c11fccc +Author: Christian Persch +Date: 2021-02-13 21:31:08 +0100 + + sixel: Add missing ifdef + + src/parser-cat.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 4a9629531ac5ae59fe0c87f46a64788691295ad4 +Author: Christian Persch +Date: 2021-02-13 21:31:08 +0100 + + sixel: Add missing ifdef + + src/vteinternal.hh | 2 ++ + 1 file changed, 2 insertions(+) + +commit 553d220562e17f21c1f4fe77ecca6e2bb9698c3d +Author: Christian Persch +Date: 2021-02-08 22:20:43 +0100 + + font: pangocairo: Use PangoFontMetrics to measure the font + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/163 + + src/fonts-pangocairo.cc | 39 +++++++++++++++++++++++---------------- + 1 file changed, 23 insertions(+), 16 deletions(-) + +commit 9f906c85094cb2dc832f402ae06edccc776899b4 +Author: A S Alam +Date: 2021-02-06 18:14:03 +0000 + + Update Punjabi translation + + po/pa.po | 149 ++++++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 81 insertions(+), 68 deletions(-) + +commit bd53b684f319284321d8fab47f7f2bf01487ec4e +Author: Christian Persch +Date: 2021-02-05 22:43:03 +0100 + + parser: Correct charset designation sequences with final byte 7/14 + + src/parser-charset-tables.hh | 21 ++++++--------------- + src/parser-charset.hh | 1 + + src/parser-test.cc | 4 ++++ + src/parser.cc | 21 +++++++++++++++------ + 4 files changed, 26 insertions(+), 21 deletions(-) + +commit 650567f48f4f4338993206682ea0e9369b1395d7 +Author: Christian Persch +Date: 2021-02-05 22:43:03 +0100 + + lib: Fix indentation + + src/vte/vteterminal.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c21b4223c2a031e281659efcb0c4becb3c15434f +Author: Christian Persch +Date: 2021-02-05 22:43:03 +0100 + + parser: cat: Make linter warn on unsupported RLogin DECSIXEL ID extension + + src/parser-cat.cc | 6 ++++++ + src/vteseq.cc | 2 ++ + 2 files changed, 8 insertions(+) + +commit 144bd35be3640612786bed3b087dfd99309abd02 +Author: Christian Persch +Date: 2021-02-05 00:35:15 +0100 + + sixel: Fix omitted data syntax reset when mismatched controls + + At the end of parsing the sixel data, we always need to + pop_data_syntax(). The code was incorrectly omitting that in + the case of mismatched controls. + + src/vte.cc | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +commit 91d7e0f0b90f9ae3e94a1db6cda6e81ea2ae6431 +Author: Christian Persch +Date: 2021-02-04 19:48:48 +0100 + + lib: Replace deprecated std::is_pod + + ... in preparation of requiring C++20. + + src/ring.hh | 4 ++-- + src/vtetypes.cc | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 9936d4d75b30793ca9f4f1baeda9270fa95562ee +Author: Christian Persch +Date: 2021-02-04 18:40:51 +0100 + + parser: cat: Make linter warn on unsupported RLogin DECGCI extension + + src/parser-cat.cc | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 7619bf481882ec34ddcc1da6dfbb05891fc047ab +Author: Christian Persch +Date: 2021-02-04 18:40:51 +0100 + + keymap: Use int8_t for the length of the short keymap strings + + ... instead of ssize_t. + + src/keymap.cc | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 8d4204f3afb159ac883760350c92c8f4bc4e9836 +Author: Christian Persch +Date: 2021-02-02 20:06:56 +0100 + + Revert "font: pangocairo: Use PangoFontMetrics to measure the font" + + This regresses https://gitlab.gnome.org/GNOME/vte/-/issues/138 . + + Reopens: https://gitlab.gnome.org/GNOME/vte/-/issues/163 + + src/fonts-pangocairo.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 6f860706a907549a74e09e4e047643a44128dbcc +Author: Christian Persch +Date: 2021-02-01 22:04:12 +0100 + + lib: Move missing defs to missing.hh and update + + src/missing.hh | 26 ++++++++++++++++++++++++++ + src/vteutils.cc | 9 ++------- + 2 files changed, 28 insertions(+), 7 deletions(-) + +commit 6ff6542e902a1b7db6eca18cf8bccf24da431679 +Author: Christian Persch +Date: 2021-02-01 22:04:12 +0100 + + spawn: Use close_range to set CLOEXEC on all FDs + + ... when available; otherwise fall back to iterating over /proc/self/fd + as previously. + + src/missing.cc | 36 ++++++++++++++++++++++++++++++++++- + src/missing.hh | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 94 insertions(+), 1 deletion(-) + +commit ce347e7022f0e7422c0a4410d51d7caa534b22ce +Author: Christian Persch +Date: 2021-02-01 21:54:32 +0100 + + font: pangocairo: Use PangoFontMetrics to measure the font + + Based on a patch by Arthur Huillet. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/163 + + src/fonts-pangocairo.cc | 72 ++++++++++++++++++++++++++++++------------------- + src/fonts-pangocairo.hh | 2 +- + src/pango-glue.hh | 4 +++ + 3 files changed, 49 insertions(+), 29 deletions(-) + +commit 38d9339917dbd2f84a57ff1cc2b28deaed3c86e7 +Author: Christian Persch +Date: 2021-01-31 23:10:29 +0100 + + parser: modes: Generate modes-*.hh from script and data + + src/meson.build | 16 +- + src/modes-ecma.hh | 218 --------- + src/modes-private.hh | 881 --------------------------------- + src/modes.hh | 10 +- + src/modes.py | 1335 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 1354 insertions(+), 1106 deletions(-) + +commit eeb80ac1403546034478ce80d6f53cb9c43a735b +Author: Christian Persch +Date: 2021-01-31 23:10:29 +0100 + + emulation: Use the correct enum + + src/vteseq.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 558edad923ab104ec5240dbccbd7442c97621c3e +Author: Christian Persch +Date: 2021-01-31 23:10:29 +0100 + + parser: Add new sequence from xterm 362 + + src/parser-seq.py | 2 ++ + src/vteseq.cc | 28 ++++++++++++++++++++++++++++ + 2 files changed, 30 insertions(+) + +commit b9f06ab451a00c6fc082d3cb17f8c4b1f98d3d66 +Author: Christian Persch +Date: 2021-01-31 23:10:29 +0100 + + modes: Fix typo + + src/modes-private.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5e14529d4219f3792690566ef7ec70febd87e070 +Author: Christian Persch +Date: 2021-01-31 23:10:29 +0100 + + all: Clean up licence headers + + Unify the licence headers so that all same-licensed files use the exact + same text. + + For some time now, libvte has been effectively LGPL3+ due to newer files being + LGPL3+ only while some older files were still nominally LGPL2+ as per their + licence headers. Exercise the "or (at your option) any later version" upgrade + option to henceforth use, modify and distribute all these files under LGPL3+ + only. + + COPYING.GPL3 | 4 +- + COPYING.LGPL2 | 502 ---------------------------------------- + Makefile.meson | 16 +- + bindings/gir/meson.build | 16 +- + bindings/glade/meson.build | 16 +- + bindings/meson.build | 16 +- + bindings/vala/app.gresource.xml | 10 +- + bindings/vala/app.vala | 4 +- + bindings/vala/meson.build | 16 +- + doc/reference/meson.build | 16 +- + doc/reference/vte-docs.xml | 25 +- + meson.build | 16 +- + meson_options.txt | 16 +- + perf/256test.sh | 9 +- + perf/deco.sh | 9 +- + perf/img.sh | 9 +- + perf/printwinsize.py | 20 +- + perf/sgr-test.sh | 9 +- + po/meson.build | 16 +- + src/app/app-gtk3.gresource.xml | 10 +- + src/app/app.cc | 2 +- + src/app/appmenu-gtk3.ui | 2 +- + src/app/meson.build | 16 +- + src/app/search-popover-gtk3.ui | 2 +- + src/app/window-gtk3.ui | 2 +- + src/attr.hh | 16 +- + src/bidi.cc | 17 +- + src/bidi.hh | 17 +- + src/box_drawing_generate.sh | 9 +- + src/buffer.h | 17 +- + src/cairo-glue.hh | 14 +- + src/caps.hh | 17 +- + src/cell.hh | 17 +- + src/chunk.cc | 16 +- + src/chunk.hh | 16 +- + src/clipboard-gtk.cc | 16 +- + src/clipboard-gtk.hh | 16 +- + src/color-triple.hh | 16 +- + src/cxx-utils.hh | 16 +- + src/debug.cc | 17 +- + src/debug.h | 17 +- + src/decoder-cat.cc | 14 +- + src/drawing-cairo.cc | 16 +- + src/drawing-cairo.hh | 16 +- + src/dumpkeys.c | 17 +- + src/fonts-pangocairo.cc | 16 +- + src/fonts-pangocairo.hh | 16 +- + src/fwd.hh | 16 +- + src/glib-glue.hh | 16 +- + src/gobject-glue.hh | 16 +- + src/gtk-glue.hh | 16 +- + src/icu-converter.cc | 16 +- + src/icu-converter.hh | 16 +- + src/icu-decoder.cc | 16 +- + src/icu-decoder.hh | 16 +- + src/icu-glue.cc | 16 +- + src/icu-glue.hh | 16 +- + src/image.cc | 16 +- + src/image.hh | 16 +- + src/keymap.cc | 17 +- + src/keymap.h | 17 +- + src/libc-glue.hh | 16 +- + src/meson.build | 16 +- + src/mev.c | 17 +- + src/minifont.cc | 16 +- + src/minifont.hh | 16 +- + src/missing.cc | 16 +- + src/missing.hh | 16 +- + src/modes-ecma.hh | 16 +- + src/modes-private.hh | 16 +- + src/modes-test.cc | 16 +- + src/modes.hh | 16 +- + src/pango-glue.hh | 14 +- + src/parser-arg.hh | 16 +- + src/parser-cat.cc | 14 +- + src/parser-charset-tables.hh | 16 +- + src/parser-charset.hh | 16 +- + src/parser-decsgr.hh | 18 +- + src/parser-glue.hh | 16 +- + src/parser-osc.hh | 16 +- + src/parser-reply.hh | 16 +- + src/parser-seq.py | 32 +-- + src/parser-sgr.hh | 18 +- + src/parser-string.hh | 16 +- + src/parser-test.cc | 16 +- + src/parser.cc | 14 +- + src/parser.hh | 16 +- + src/pcre2-glue.hh | 16 +- + src/pty.cc | 17 +- + src/pty.hh | 16 +- + src/reaper.cc | 17 +- + src/reaper.hh | 17 +- + src/reflect.c | 17 +- + src/refptr-test.cc | 16 +- + src/refptr.hh | 16 +- + src/regex.cc | 16 +- + src/regex.hh | 16 +- + src/ring.cc | 17 +- + src/ring.hh | 17 +- + src/ringview.cc | 17 +- + src/ringview.hh | 17 +- + src/sixel-context.cc | 14 +- + src/sixel-context.hh | 14 +- + src/sixel-fuzzer.cc | 16 +- + src/sixel-parser.hh | 14 +- + src/sixel-test.cc | 14 +- + src/slowcat.c | 17 +- + src/spawn.cc | 17 +- + src/spawn.hh | 16 +- + src/std-glue.hh | 14 +- + src/systemd.cc | 16 +- + src/systemd.hh | 16 +- + src/tabstops-test.cc | 16 +- + src/tabstops.hh | 16 +- + src/test-vte-urlencode-cwd.sh | 9 +- + src/urlencode.cc | 2 +- + src/utf8-test.cc | 16 +- + src/vte.cc | 17 +- + src/vte.csh.in | 2 +- + src/vte.gresource.xml | 12 +- + src/vte.sh.in | 2 +- + src/vte/meson.build | 16 +- + src/vte/vte.h | 17 +- + src/vte/vtedeprecated.h | 17 +- + src/vte/vteenums.h | 17 +- + src/vte/vteglobals.h | 17 +- + src/vte/vtemacros.h | 17 +- + src/vte/vtepty.h | 17 +- + src/vte/vteregex.h | 16 +- + src/vte/vteterminal.h | 17 +- + src/vte/vteversion.h.in | 17 +- + src/vteaccess.cc | 17 +- + src/vteaccess.h | 17 +- + src/vtedefines.hh | 17 +- + src/vtegtk.cc | 16 +- + src/vtegtk.hh | 16 +- + src/vteinternal.hh | 17 +- + src/vtepty.cc | 17 +- + src/vteptyinternal.hh | 16 +- + src/vteregex.cc | 16 +- + src/vteregexinternal.hh | 16 +- + src/vterowdata.cc | 17 +- + src/vterowdata.hh | 17 +- + src/vteseq.cc | 17 +- + src/vtespawn.cc | 23 +- + src/vtespawn.hh | 20 +- + src/vtestream-base.h | 17 +- + src/vtestream-file.h | 17 +- + src/vtestream.cc | 17 +- + src/vtestream.h | 17 +- + src/vtetypes.cc | 16 +- + src/vtetypes.hh | 16 +- + src/vteunistr.cc | 17 +- + src/vteunistr.h | 17 +- + src/vteutils.cc | 17 +- + src/vteutils.h | 17 +- + src/widget.cc | 16 +- + src/widget.hh | 16 +- + src/xticker.c | 17 +- + 159 files changed, 1180 insertions(+), 1741 deletions(-) + +commit a40bf76e8b6a6222e680cd4793b7042e2b052474 +Author: Christian Persch +Date: 2021-01-31 23:10:29 +0100 + + emulation: Add some research notes + + src/vteseq.cc | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 00f8c64bcc5aac3712f1665940305fd384112602 +Author: Kjartan Maraas +Date: 2021-01-25 14:06:37 +0000 + + Update Norwegian Bokmål translation + + (cherry picked from commit ed3eb69eaab8f1af5868f22a80a98cdb9b6ebf22) + + po/nb.po | 66 ++++++++++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 41 insertions(+), 25 deletions(-) + +commit ec2b76ab7c25ea9257048e6fd2d130e77b7a56cc +Author: Christian Persch +Date: 2021-01-24 20:43:51 +0100 + + widget: Improve font sanitisation + + Clamp the font weight instead of simply unsetting any weight specified. + + https://gitlab.gnome.org/GNOME/vte/-/issues/323 + + src/vte.cc | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 59e11fd751806876dc1a28c9c6d9a17d75db57d2 +Author: Christian Persch +Date: 2021-01-13 19:19:05 +0100 + + widget: Improve font sanitisation + + Allow bold font to be used for normal attr when bold-is-bright is + enabled, and allow weights up to medium for normal attr. + + https://gitlab.gnome.org/GNOME/vte/-/issues/323 + + src/vte.cc | 45 ++++++++++++++++++++++++++++++++++++--------- + src/vtegtk.cc | 2 +- + src/vteinternal.hh | 4 +++- + 3 files changed, 40 insertions(+), 11 deletions(-) + +commit eb12828a97fe33ce24e254c273525bb77095de7f +Author: Christian Persch +Date: 2021-01-13 19:19:05 +0100 + + parser: Remove unused enum + + src/sixel-parser.hh | 9 +-------- + 1 file changed, 1 insertion(+), 8 deletions(-) + +commit 9e1ec4c8fa18028f328f01b325b076b1d4c26c24 +Author: Jordi Mas +Date: 2021-01-06 23:12:56 +0100 + + Update Catalan translation + + po/ca.po | 55 ++----------------------------------------------------- + 1 file changed, 2 insertions(+), 53 deletions(-) + +commit caf8a6a7a17a3f70fa5fc611c71ffb27a5cfee75 +Author: Christian Persch +Date: 2020-12-26 14:01:10 +0100 + + widget: Limit select-all to the writable region not including the scrollback + + Including the scrollback in select-all makes it too easy to select so much + data that putting it on the clipboard either hangs the process for a long time + or causes a crash (gnome-terminal#288). + + Fixes: https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/288 + + src/vte.cc | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +commit d4e0d89c6c782f380abf293a822eb7993d588067 +Author: Christian Persch +Date: 2020-12-24 13:50:18 +0100 + + parser: cat: Make linter warn on unsupported DECSIXEL OR-mode + + src/parser-cat.cc | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 593f41d5c9fa1eb579e4e1222b6d8a0adb0630f0 +Author: Christian Persch +Date: 2020-12-24 13:50:18 +0100 + + sixel: Ignore DECSIXEL sequence when OR-mode is requested + + src/vteseq.cc | 34 ++++++++++++++++++++++++++++------ + 1 file changed, 28 insertions(+), 6 deletions(-) + +commit 69f941dbe2a6df6513ec7f0cce6fbded20257beb +Author: Christian Persch +Date: 2020-12-23 18:53:33 +0100 + + widget: Fix idle child-exited signal after dispose + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/322 + + src/vte.cc | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +commit 8586e4292e76943a100a8039f5ce9e33e5984bb3 +Author: Jim Mason +Date: 2020-12-02 21:22:28 +0100 + + pty: Add support for PTY packet mode on sysv-like systems + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/318 + + meson.build | 1 + + src/pty.cc | 14 ++++++++++--- + src/vte.cc | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 79 insertions(+), 3 deletions(-) + +commit 245eb0f38421137b8b8442dcd30a5d4730ec0816 +Author: Christian Persch +Date: 2020-12-02 16:35:26 +0100 + + app: Fix search next/prev button sensitivity + + src/app/app.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit b7dcab02dc47ab642d930b70ebe84962a390a225 +Author: Christian Persch +Date: 2020-12-02 16:35:26 +0100 + + app: Use smart pointer + + src/app/app.cc | 31 +++++++++++++++++-------------- + 1 file changed, 17 insertions(+), 14 deletions(-) + +commit 43b7e5235b8f6ae924be9c3705e6ab8ab6de73a4 +Author: Christian Persch +Date: 2020-12-02 16:35:26 +0100 + + clipboard: Use smart pointers + + src/clipboard-gtk.cc | 27 +++++++++++++-------------- + 1 file changed, 13 insertions(+), 14 deletions(-) + +commit 7b896c47b85a4919e1466766bf49bd73821d0c0a +Author: Christian Persch +Date: 2020-12-02 16:35:26 +0100 + + widget: Add gtk glue + + src/gtk-glue.hh | 30 ++++++++++++++++++++++++++++++ + src/meson.build | 6 +++++- + 2 files changed, 35 insertions(+), 1 deletion(-) + +commit e70b33b0974156dbf0c000910000daecf04fd86d +Author: Christian Persch +Date: 2020-12-02 16:35:26 +0100 + + widget: Fix clipboard types + + https://gitlab.gnome.org/GNOME/vte/-/issues/316 + + src/widget.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 5dd5823224558ffeb202c7969e03d5766fe3894e +Author: Christian Persch +Date: 2020-12-01 22:05:58 +0100 + + sixel: Fix processing of DECSIXEL sequence when using UTF-8 C1 controls + + The matching-controls check was getting the wrong introducer value. + + src/vteseq.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 90424aff47c0f49452185f419238e902515fe2b6 +Author: Christian Persch +Date: 2020-12-01 22:05:58 +0100 + + sixel: Be extra safe when advancing the scanline position + + src/sixel-context.hh | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit cede6dac6bd281ebcf1e259b25079ceafb39ea0b +Author: Christian Persch +Date: 2020-12-01 22:05:58 +0100 + + ring: Fix image memory leak + + ... and various code correctness and style issues. + + Use unique_ptr instead of naked new/delete, and use a std::multimap for + m_image_by_top_map. + + https://gitlab.gnome.org/GNOME/vte/-/issues/255 + + src/image.hh | 4 +- + src/ring.cc | 177 +++++++++++++++++++++++++++++------------------------------ + src/ring.hh | 52 ++++++++++++------ + src/vte.cc | 8 +-- + 4 files changed, 128 insertions(+), 113 deletions(-) + +commit 5d74cff80f63022a9d39f6dc598013da5a5b1412 +Author: Christian Persch +Date: 2020-11-28 18:05:53 +0100 + + docs: Add index for API new in 0.64 + + doc/reference/vte-docs.xml | 4 ++++ + 1 file changed, 4 insertions(+) + +commit d2d63a3e495f864f78f06d7658282805762cba93 +Author: Christian Persch +Date: 2020-11-28 18:05:53 +0100 + + Revert "docs: Add index for API new in 0.64" + + This reverts commit ebda2490952c2c93e1830b2ae6bd4ef8f4ace1ec. + + doc/reference/vte-docs.xml | 3 --- + 1 file changed, 3 deletions(-) + +commit f3119c2cf0b56d8566c941fce8a510967832564c +Author: Kristjan SCHMIDT +Date: 2020-11-28 16:31:48 +0000 + + Update Esperanto translation + + po/eo.po | 80 +++++++++++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 52 insertions(+), 28 deletions(-) + +commit cb8f16c0bd6bbd8c0675a83541c72014e5464659 +Author: Christian Persch +Date: 2020-11-16 21:34:23 +0100 + + widget: Add API to disable fallback scrolling + + Ordinarily, when the VteTerminal hasn't consumed a scroll event otherwise + (e.g. by sending the event to the application), it falls back to perform + a history scroll. When the terminal is added to a GtkScrolledWindow, this + result in the scrolled window not performing kinetic scrolling. + + This commit adds API (and GObject property) to VteTerminal to disable the + fallback scrolling. + + Based on a patch by Tony Houghton . + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/234 + + doc/reference/vte-sections.txt | 2 ++ + src/app/app.cc | 4 +++ + src/vte.cc | 17 +++++++--- + src/vte/vteterminal.h | 6 ++++ + src/vtegtk.cc | 75 ++++++++++++++++++++++++++++++++++++++++-- + src/vtegtk.hh | 1 + + src/vteinternal.hh | 3 ++ + src/widget.hh | 3 ++ + 8 files changed, 103 insertions(+), 8 deletions(-) + +commit ebda2490952c2c93e1830b2ae6bd4ef8f4ace1ec +Author: Christian Persch +Date: 2020-11-16 21:34:23 +0100 + + docs: Add index for API new in 0.64 + + doc/reference/vte-docs.xml | 3 +++ + 1 file changed, 3 insertions(+) + +commit 770a375f023dd7bcd25a45ca01ff1fdcabf4c5bf +Author: Christian Persch +Date: 2020-11-16 20:38:04 +0100 + + lib: Fix unused variable warning when not using getrlimit + + Mentioned in https://gitlab.gnome.org/GNOME/vte/-/issues/296#note_963045 + + src/missing.cc | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +commit efebf38e278b80ef4670dad87d749898cf244f88 +Author: Matt Rose +Date: 2020-11-16 20:38:04 +0100 + + lib: Use sysconf on macos to get the upper limit of number of FDs + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/296 + + src/missing.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 89e9230dc1a27b89cca16de32e903918a27b8e42 +Author: Christian Persch +Date: 2020-11-16 20:27:48 +0100 + + lib: Drop wrong use of volatile + + src/vtetypebuiltins.cc.template | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit c6124858c2aeea72582964ef8a34210ee0f71f39 +Author: Michael Catanzaro +Date: 2020-11-15 14:43:51 +0000 + + Fix build + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 060344ac2d9e0bb65731a3340615ad4d804da804 +Author: Christian Persch +Date: 2020-11-14 23:01:00 +0100 + + all: Use std::swap + + src/app/app.cc | 6 ++++-- + src/vte.cc | 27 +++++++++++++-------------- + 2 files changed, 17 insertions(+), 16 deletions(-) + +commit ef4e6b2cdc2481f7d1bb9391f4203826f2e27805 +Author: Christian Persch +Date: 2020-11-14 22:50:15 +0100 + + all: Use pragma once + + src/vtetypebuiltins.h.template | 7 ++----- + src/vteutils.h | 9 +-------- + 2 files changed, 3 insertions(+), 13 deletions(-) + +commit ecc6ec0cd563be1b54536e2adca512bd9a692f2a +Author: Christian Persch +Date: 2020-11-14 12:08:21 +0100 + + sixel: Use m_defaults to retrieve the SGR colours + + This takes into account the SGR 7 (reverse) attribute, which + m_color_defaults doesn't carry. + + src/vteseq.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fdf39568ab0ce287a091db090734886560499462 +Author: Christian Persch +Date: 2020-11-14 11:51:17 +0100 + + sixel: Use special coulor registers for default foreground and background + + ... and implement background colour transparency using the second + parameter to DECSIXEL. + + It's not clear from the available documentation of how the 2nd parameter + to DECSIXEL *should* work, but based on discussion in issue #253, this patch + makes vte use the value "1" as meaning uninked pixels should be transparent, + and any other value (including the default) to mean that uninked pixels + should use the current SGR background colour. + + This also fixes an issue where the user-addressable colour register 0 was + being overwritten with the current SGR foreground colour. + + Based on patches by Hans Petter Jansson . + + https://gitlab.gnome.org/GNOME/vte/-/issues/253 + + src/sixel-context.cc | 58 +++++++++++++++++++++++++++------------------------- + src/sixel-context.hh | 13 ++++++------ + src/sixel-test.cc | 24 ++++++++++++++-------- + src/vte.cc | 13 ++++++++++++ + src/vteinternal.hh | 6 ++++++ + src/vteseq.cc | 28 ++++++++++++++++++------- + 6 files changed, 93 insertions(+), 49 deletions(-) + +commit 39749d9ce83e4f6ebb7da7e02a9b494186abe6e1 +Author: Christian Persch +Date: 2020-11-14 11:51:17 +0100 + + Revert "sixel: Use special coulor registers for default foreground and background" + + This reverts commit 65234343b88b12072ff8414ce9a6742ddbade407. + + There is nothing technically wrong with this commit, but it was a heavily amended + commit based on squashing two commits by the Author, and I forgot to change the Author + to myself. The next commit will re-commit this with proper attribution. + + src/sixel-context.cc | 58 +++++++++++++++++++++++++--------------------------- + src/sixel-context.hh | 13 ++++++------ + src/sixel-test.cc | 24 ++++++++-------------- + src/vte.cc | 13 ------------ + src/vteinternal.hh | 6 ------ + src/vteseq.cc | 28 +++++++------------------ + 6 files changed, 49 insertions(+), 93 deletions(-) + +commit 11cb693c816b241e8660885dc48f2f5a1c6047ff +Author: Christian Persch +Date: 2020-11-13 17:53:57 +0100 + + lib: Sanitise the passed-in font description + + Remove weight and style if set, so that SGR attributes can work. + + src/vte.cc | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 79e40dd5387a6a54ce418a082a4ebb6eaf60b20e +Author: Christian Persch +Date: 2020-11-12 22:53:36 +0100 + + app: Fix background image drawing + + Use the option's background alpha value, *not* the value retrieved from + vte_terminal_get_color_background_for_draw() since that is set to zero + in this case. + + Fixes a regression from commit eb85292b3ef44ac95d3863af68b19f6a8d8131e2. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/301 + + src/app/app.cc | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +commit 65234343b88b12072ff8414ce9a6742ddbade407 +Author: Hans Petter Jansson +Date: 2020-11-12 21:37:16 +0100 + + sixel: Use special coulor registers for default foreground and background + + ... and implement background colour transparency using the second + parameter to DECSIXEL. + + https://gitlab.gnome.org/GNOME/vte/-/issues/253 + + src/sixel-context.cc | 58 +++++++++++++++++++++++++++------------------------- + src/sixel-context.hh | 13 ++++++------ + src/sixel-test.cc | 24 ++++++++++++++-------- + src/vte.cc | 13 ++++++++++++ + src/vteinternal.hh | 6 ++++++ + src/vteseq.cc | 28 ++++++++++++++++++------- + 6 files changed, 93 insertions(+), 49 deletions(-) + +commit 24c4be967482aa2c152de7a46be8f6d0498f4b01 +Author: Christian Persch +Date: 2020-11-12 21:37:16 +0100 + + parser: Add some more known sequences + + src/parser-seq.py | 7 +++++++ + src/vteseq.cc | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- + 2 files changed, 58 insertions(+), 2 deletions(-) + +commit 75a5e3304618fa48a8bc88671fbff593b1933f26 +Author: Christian Persch +Date: 2020-11-12 21:37:16 +0100 + + modes: Add some more private modes + + src/modes-private.hh | 4 ++++ + 1 file changed, 4 insertions(+) + +commit f044a720d4ba94806d65fade94dd01fbeea6bd5e +Author: Christian Persch +Date: 2020-11-12 21:37:16 +0100 + + parser: Add some more charsets + + src/parser-charset-tables.hh | 17 +++++++++++++++++ + src/parser-charset.hh | 6 ++++++ + src/parser-test.cc | 8 +++++++- + src/parser.cc | 6 ++++++ + 4 files changed, 36 insertions(+), 1 deletion(-) + +commit 2dbe5d478ccadfe182e29856ebedd0370053173b +Author: Christian Persch +Date: 2020-11-12 21:37:16 +0100 + + lib: Use bitset to store pending change flags + + src/vte.cc | 11 +++++------ + src/vteinternal.hh | 10 +++++++--- + src/vteseq.cc | 10 +++++----- + 3 files changed, 17 insertions(+), 14 deletions(-) + +commit b1af335aaa31333aee2bdf91bb539a974c1739bf +Author: Christian Persch +Date: 2020-11-04 20:26:58 +0100 + + widget: Don't use scroll event's position + + Use the last known mouse position in when sending the mouse coordinates. + + [gtk4 preparation] + + src/vte.cc | 4 +--- + src/widget.cc | 6 ------ + src/widget.hh | 18 +++++++----------- + 3 files changed, 8 insertions(+), 20 deletions(-) + +commit dc829d65834e5b2f85b423aa057441b2122359ce +Author: Christian Persch +Date: 2020-11-04 20:26:58 +0100 + + app: Fix paste action sensitivity + + src/app/app.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 37722d9a7c13f32ed62caa817f7b26413c7c3b8a +Author: Christian Persch +Date: 2020-11-02 23:02:18 +0100 + + widget: Scroll events have no button + + src/widget.cc | 4 ---- + src/widget.hh | 3 +-- + 2 files changed, 1 insertion(+), 6 deletions(-) + +commit 87f70c44341879226443df403ab50b65f89c84ce +Author: Christian Persch +Date: 2020-11-02 22:23:25 +0100 + + widget: Move GdkEvent from EventBase to KeyEvent + + Only the key events handling needs to access the native event anymore. + + [gtk4 preparation] + + src/widget.cc | 6 ++---- + src/widget.hh | 28 +++++++++++----------------- + 2 files changed, 13 insertions(+), 21 deletions(-) + +commit 76400386360dc49ecd00c4af4d7716510c612520 +Author: Hans Petter Jansson +Date: 2020-11-02 21:24:43 +0100 + + sixel: Store device-independent pixel surfaces in Image + + src/image.hh | 2 +- + src/vte.cc | 22 +--------------------- + 2 files changed, 2 insertions(+), 22 deletions(-) + +commit 235f5ce5f89d9ec94a414514a6fb8bfbe2994fd1 +Author: Christian Persch +Date: 2020-11-02 21:22:40 +0100 + + widget: Make scroll event its own class + + [gtk4 preparation] + + src/fwd.hh | 1 + + src/vte.cc | 24 ++------------- + src/vteinternal.hh | 2 +- + src/widget.cc | 34 +++++++++++++++++++++ + src/widget.hh | 90 +++++++++++++++++++++++++++--------------------------- + 5 files changed, 83 insertions(+), 68 deletions(-) + +commit 96616b857010a0825b83aced46bcf45e17099c64 +Author: Christian Persch +Date: 2020-11-01 20:11:37 +0100 + + lib: Use pragma once + + src/vte/vte.h | 7 ++----- + src/vte/vtedeprecated.h | 9 +++------ + src/vte/vteenums.h | 7 ++----- + src/vte/vteglobals.h | 7 ++----- + src/vte/vtemacros.h | 7 ++----- + src/vte/vtepty.h | 7 ++----- + src/vte/vteregex.h | 7 ++----- + src/vte/vteterminal.h | 7 ++----- + src/vte/vteversion.h.in | 7 ++----- + 9 files changed, 19 insertions(+), 46 deletions(-) + +commit 1aab3df07bbedf01cfe38f9da6df48ef7a9d995f +Author: Christian Persch +Date: 2020-11-01 18:06:13 +0100 + + widget: Remove unused event timestamp + + [gtk4 preparation] + + src/widget.cc | 2 -- + src/widget.hh | 16 ++++------------ + 2 files changed, 4 insertions(+), 14 deletions(-) + +commit 01dfedc57d25ceed1c2978a2579ddf4639d46753 +Author: Piotr Drąg +Date: 2020-10-31 11:27:53 +0100 + + Update POTFILES.skip + + po/POTFILES.skip | 3 +++ + 1 file changed, 3 insertions(+) + +commit 499898451d35cd84caa12c795a3108dd7c631025 +Author: Christian Persch +Date: 2020-10-29 20:23:57 +0100 + + widget: Record the press count for button press events + + Replace double/triple click events with a press_count on the generic + button press event. + + [gtk4 preparation] + + src/vte.cc | 16 ++++++++-------- + src/widget.cc | 42 +++++++++++++++++++++++++++++------------- + src/widget.hh | 9 ++++----- + 3 files changed, 41 insertions(+), 26 deletions(-) + +commit d2d7d0e6e9bd92347d5e38e3c25a5979922f2f33 +Author: Christian Persch +Date: 2020-10-25 22:25:30 +0100 + + app: Fork UI files for gtk3 + + Unfortunately, gtk4-build-tool 3to4 doesn't actually produce a working + UI file for gtk4, so it'll be necessary to adjust them by hand. Fork + the UI files so that they have different names for gtk3 (and later gtk4). + + [gtk4 preparation] + + src/app/{app.gresource.xml => app-gtk3.gresource.xml} | 6 +++--- + src/app/{appmenu.ui => appmenu-gtk3.ui} | 0 + src/app/meson.build | 18 +++++++++--------- + src/app/{search-popover.ui => search-popover-gtk3.ui} | 0 + src/app/{window.ui => window-gtk3.ui} | 0 + 5 files changed, 12 insertions(+), 12 deletions(-) + +commit c112ac02caa628e65d3255837db0b5944d26c1b7 +Author: Christian Persch +Date: 2020-10-25 22:25:30 +0100 + + sixel: Fix unused variable warning when not building with sixel enabled + + src/vteseq.cc | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit 4ef278b94b4414a3ddbb31b460daaec9a88075b2 +Author: Christian Persch +Date: 2020-10-25 15:34:55 +0100 + + app: Replace GtkBox with GtkGrid + + [gtk4 preparation] + + src/app/app.cc | 19 +++++++++++-------- + src/app/window.ui | 31 +++++++++++++++++++------------ + 2 files changed, 30 insertions(+), 20 deletions(-) + +commit fdbab4edf9abe815b211a4541425144eb508306d +Author: Christian Persch +Date: 2020-10-24 11:58:57 +0200 + + build: Add config.h as dependency to all sources + + meson.build | 10 ++++++---- + src/app/meson.build | 2 +- + src/meson.build | 46 +++++++++++++++++++++++----------------------- + 3 files changed, 30 insertions(+), 28 deletions(-) + +commit 4b2c688dde8b239ec2af1e7d709893a328737e5f +Author: Christian Persch +Date: 2020-10-23 20:16:55 +0200 + + emulation: sixel: Implement DECSET 1070 + + Private mode 1070 controls whether each SIXEL image gets a freshly initialised + set of colour registers, or if changes from one SIXEL image persist to the next. + + src/modes-private.hh | 13 ++++++++++++- + src/modes.hh | 5 ++++- + src/vte.cc | 10 ++++++++++ + src/vteinternal.hh | 1 + + src/vteseq.cc | 4 +++- + 5 files changed, 30 insertions(+), 3 deletions(-) + +commit d5a6a30166a951740c7a4fd2c07ead3fbbe2e1ec +Author: Christian Persch +Date: 2020-10-23 19:55:05 +0200 + + lib: sixel: Update bbox when inserting an image + + This should fix a problem where sometimes the image wouldn't scroll into view. + + src/vte.cc | 11 ++++++++--- + src/vteinternal.hh | 3 ++- + 2 files changed, 10 insertions(+), 4 deletions(-) + +commit c3d14d92b57adce40e68de668c07541d14287bb7 +Author: Christian Persch +Date: 2020-10-23 19:55:05 +0200 + + lib: Move ProcessingContext up + + ... so that it can be used earlier. + + src/vte.cc | 216 ++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 108 insertions(+), 108 deletions(-) + +commit be953b92769cfeab1fdddc84676f8bb1ae8f57b5 +Author: Christian Persch +Date: 2020-10-23 19:55:05 +0200 + + emulation: Implement XTERM_SMGRAPHICS sequence + + src/parser-reply.hh | 1 + + src/parser-seq.py | 4 +- + src/sixel-context.hh | 4 +- + src/vtedefines.hh | 2 + + src/vteseq.cc | 117 +++++++++++++++++++++++++++++++++++++++++++++++++-- + 5 files changed, 121 insertions(+), 7 deletions(-) + +commit 30d212ff45a801fbfe62ee5d23043df184d737ef +Author: Christian Persch +Date: 2020-10-23 18:00:02 +0200 + + sixel: Remove unnecessary include + + src/sixel-context.hh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit af9ce0acff15a7714adb8abde9c990d9af4d0856 +Author: Christian Persch +Date: 2020-10-22 20:34:52 +0200 + + spawn: Clarify ownership transfer + + Pass unqiue_ptr to ::run_async to make it clear that it + takes ownership of the operation. + + src/spawn.cc | 38 ++++++++++++++++++++------------------ + src/spawn.hh | 16 ++++++++++------ + src/vtepty.cc | 35 ++++++++++++++++++----------------- + 3 files changed, 48 insertions(+), 41 deletions(-) + +commit a1fbb9df57492c4d3c298099f0a242261be7ccc3 +Author: Christian Persch +Date: 2020-10-22 20:34:52 +0200 + + widget: Use safe getter + + src/glib-glue.hh | 2 ++ + src/widget.cc | 16 +++++++--------- + 2 files changed, 9 insertions(+), 9 deletions(-) + +commit 7a484cdec223b4241d7497e08be3cda99480e25a +Author: Christian Persch +Date: 2020-10-22 20:34:52 +0200 + + parser: Update sequences with additions from recent xterm + + src/parser-seq.py | 25 ++++-- + src/vteseq.cc | 245 +++++++++++++++++++++++++++++++++++------------------- + 2 files changed, 181 insertions(+), 89 deletions(-) + +commit acb99154e2dbcf038a03badc9a13e812f2ec52e3 +Author: Christian Persch +Date: 2020-10-22 20:34:52 +0200 + + decoder: cat: Use more smart pointers + + src/decoder-cat.cc | 150 ++++++++++++++++++++++++----------------------------- + 1 file changed, 67 insertions(+), 83 deletions(-) + +commit b5f777b17e5391e7ff4be6442e691f678d5885ac +Author: Christian Persch +Date: 2020-10-22 20:34:52 +0200 + + parser: cat: Use more smart pointers + + src/parser-cat.cc | 80 ++++++++++++++++++++++--------------------------------- + 1 file changed, 32 insertions(+), 48 deletions(-) + +commit 0b7dfe82260bc3455b390ea12db8a7547d07257e +Author: Christian Persch +Date: 2020-10-22 20:34:52 +0200 + + app: Use smart pointers + + src/app/app.cc | 74 +++++++++++++++++++++++++++++--------------------------- + src/glib-glue.hh | 1 + + 2 files changed, 39 insertions(+), 36 deletions(-) + +commit bd5025524bf9ca3490ba3739312618a1f7092766 +Author: Christian Persch +Date: 2020-10-22 20:34:51 +0200 + + lib: Add getter support for smart pointer + + src/std-glue.hh | 43 +++++++++++++++++++++++++++++++++++++++++++ + src/vte.cc | 17 +++++++++-------- + src/widget.cc | 10 +++++----- + 3 files changed, 57 insertions(+), 13 deletions(-) + +commit 095876ffca23d2f389c0a83a552164599c2f6e81 +Author: Christian Persch +Date: 2020-10-22 20:34:51 +0200 + + lib: Simplify smart pointers for glib/pango/pcre types + + src/app/app.cc | 8 ++-- + src/app/meson.build | 2 +- + src/cairo-glue.hh | 9 +++-- + src/cxx-utils.hh | 4 +- + src/drawing-cairo.cc | 27 ++++++------- + src/drawing-cairo.hh | 2 +- + src/glib-glue.hh | 7 ++++ + src/image.hh | 4 +- + src/meson.build | 17 ++++++-- + src/pango-glue.hh | 29 ++++++++++++++ + src/parser-cat.cc | 1 + + src/{vtepcre2.h => pcre2-glue.hh} | 10 +++++ + src/regex.cc | 22 +++++----- + src/regex.hh | 9 ++--- + src/ring.cc | 2 +- + src/ring.hh | 2 +- + src/sixel-context.cc | 12 +++--- + src/sixel-context.hh | 2 +- + src/std-glue.hh | 39 ++++++++++++++++++ + src/systemd.cc | 7 ++-- + src/vte.cc | 84 +++++++++++++++++---------------------- + src/vteinternal.hh | 17 ++++---- + src/vteregex.cc | 5 +-- + src/widget.cc | 2 +- + 24 files changed, 203 insertions(+), 120 deletions(-) + +commit 6557b6eec39cafdb334aa59f59984d99abb946c1 +Author: Hugo Parente Lima +Date: 2020-10-21 11:40:32 +0200 + + lib: Add missing nullable annotation to spawn child setup functions + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/293 + + src/vtegtk.cc | 8 ++++---- + src/vtepty.cc | 8 ++++---- + 2 files changed, 8 insertions(+), 8 deletions(-) + +commit 0afc1c1b9fa739251c04b54f751c0f9f3f762294 +Author: Christian Persch +Date: 2020-10-20 16:46:04 +0200 + + modes: Assign enum values to non-fixed modes first + + This allows all settable modes to have values that fit into the storage, + while fixed modes get assigned enum values after all settable modes. + + Fixes a regression introduced by commit ce715e7b9859f62fc881c2ddd64cab7e3a2fbc7a. + + src/modes.hh | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 528d851085794003b4ca90bf336f1be1156e7a6e +Author: Christian Persch +Date: 2020-10-19 21:56:20 +0200 + + sixel: Pass colour components to Context::prepare + + The Context's colour storage format is internal, so pass the fg and + bg colours components individually. + + src/sixel-context.cc | 13 +++++++++---- + src/sixel-context.hh | 8 ++++++-- + src/sixel-test.cc | 28 +++++++++++++++++++++------- + src/vteseq.cc | 5 ++--- + 4 files changed, 38 insertions(+), 16 deletions(-) + +commit 39f353a9c511d11056cdb4355dc1f719391c1595 +Author: Christian Persch +Date: 2020-10-19 21:14:43 +0200 + + draw: Move drawing images after translating the cairo context + + This avoids having to offset the images manually. + + src/vte.cc | 54 +++++++++++++++++++++++++++--------------------------- + 1 file changed, 27 insertions(+), 27 deletions(-) + +commit 028e7a7780f0ea6b95a3467b89d0bec0910bb9e0 +Author: Christian Persch +Date: 2020-10-19 21:14:43 +0200 + + widget: Use GdkEvent accessor function + + [gtk4 preparation] + + src/widget.hh | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +commit 535d22bb47285a53d22bbf3a3480304f7278ce0b +Author: Christian Persch +Date: 2020-10-19 21:14:43 +0200 + + widget: Remove unused function + + [gtk4 preparation] + + src/vte.cc | 6 +++--- + src/widget.hh | 5 ----- + 2 files changed, 3 insertions(+), 8 deletions(-) + +commit 73d05db64bb271cee1af7f301c19c23ada7e9176 +Author: Christian Persch +Date: 2020-10-19 21:14:43 +0200 + + fonts: Don't use deprecate gdk threads timeout API + + [gtk4 preparation] + + src/fonts-pangocairo.hh | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 0136048d32d29412de3381828bb21f05563c799f +Author: Christian Persch +Date: 2020-10-19 21:14:43 +0200 + + widget: Move clipboard handling to Widget + + Move clipboard handling into its own Clipboard class to make + Terminal independent of the platform's clipboard handling. + + [gtk4 preparation] + + src/clipboard-gtk.cc | 305 +++++++++++++++++++++++++++++++++++++++++++++++++++ + src/clipboard-gtk.hh | 89 +++++++++++++++ + src/fwd.hh | 1 + + src/meson.build | 2 + + src/vte.cc | 230 ++++++++------------------------------ + src/vtegtk.cc | 19 +++- + src/vteinternal.hh | 126 ++------------------- + src/widget.cc | 83 ++++++++++++++ + src/widget.hh | 39 ++++--- + 9 files changed, 580 insertions(+), 314 deletions(-) + +commit be6896d96dc5188fe8d9da80c41f2b04b1ead7ce +Author: Christian Persch +Date: 2020-10-19 21:14:43 +0200 + + widget: Manage the Widget implementation through a shared_ptr + + src/vtegtk.cc | 71 +++++++++++++++++++++++++++++++++++++++++++++-------------- + src/widget.hh | 2 +- + 2 files changed, 56 insertions(+), 17 deletions(-) + +commit eda2c7e8b17101a893938fff9960c99d0800163f +Author: Christian Persch +Date: 2020-10-19 20:19:10 +0200 + + lib: Add missing include + + src/chunk.hh | 1 + + 1 file changed, 1 insertion(+) + +commit 78b80bacae6df2e7f4bedd23c454dffe58eef3af +Author: Christian Persch +Date: 2020-10-19 20:19:10 +0200 + + lib: Add missing include + + std::malloc/free require . + + src/chunk.hh | 1 + + 1 file changed, 1 insertion(+) + +commit b9a3a6561a37aa861b358cc075f65f3214769def +Author: Christian Persch +Date: 2020-10-19 20:19:10 +0200 + + lib: Fix typo in comment + + src/vteseq.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d48a80b8ec417541717f74ae622a78dc1ef068f4 +Author: Rico Tzschichholz +Date: 2020-10-19 20:00:22 +0200 + + parser: Properly refer to python3 + + https://gitlab.gnome.org/GNOME/vte/-/issues/292 + + src/parser-seq.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a9b3bda2bed8713cd8ae503fee5db1d8c9124313 +Author: Christian Persch +Date: 2020-10-19 00:54:13 +0200 + + lib: sixel: Also reset data capacity when dropping the buffer + + src/sixel-context.cc | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +commit cfc406659b0ce45962ca07a86fbf3db956d8007f +Author: Hans Petter Jansson +Date: 2020-10-19 00:16:36 +0200 + + lib: Keep track of unscaled cell size and report window size unscaled + + This allows sixel image dimensions to be consistent when printed at + different zoom levels. + + src/vte.cc | 52 ++++++++++++++++++++++++++++++++++++++++++---------- + src/vtegtk.cc | 4 ++-- + src/vteinternal.hh | 6 +++++- + src/vteseq.cc | 4 ++-- + 4 files changed, 51 insertions(+), 15 deletions(-) + +commit e0ff2c71b71f45c50d8d704f411f2d2f5c18e469 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + lib: Replace SIXEL handling + + Remove the old sixel parser and context, and move over to the new parser + and context. + + https://gitlab.gnome.org/GNOME/vte/-/issues/253 + + src/icu-decoder.hh | 15 ++ + src/image.hh | 2 +- + src/meson.build | 2 - + src/parser-seq.py | 2 +- + src/parser-string.hh | 9 - + src/ring.cc | 16 +- + src/ring.hh | 5 +- + src/sixelparser.cc | 713 --------------------------------------------------- + src/sixelparser.hh | 75 ------ + src/vte.cc | 149 +++++++++-- + src/vteinternal.hh | 35 ++- + src/vteseq.cc | 207 ++++++++------- + 12 files changed, 307 insertions(+), 923 deletions(-) + +commit 93d10c5db61cc286373e7fa75c8856a411f5d469 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + lib: Add new SIXEL context and test + + COPYING.XTERM | 30 +++ + src/fwd.hh | 1 + + src/meson.build | 9 +- + src/sixel-context.cc | 505 ++++++++++++++++++++++++++++++++++++++ + src/sixel-context.hh | 668 +++++++++++++++++++++++++++++++++++++++++++++++++++ + src/sixel-test.cc | 551 ++++++++++++++++++++++++++++++++++++++++++ + 6 files changed, 1762 insertions(+), 2 deletions(-) + +commit d3b562e1156c97199542d3243fc21153546d26d7 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + parser: cat: Plug in new SIXEL parser + + Use the new SIXEL parser to descend into parsing SIXEL data. + Also implement linter support for SIXEL to catch a few common problems. + + src/meson.build | 4 + + src/parser-cat.cc | 567 +++++++++++++++++++++++++++++++++++++++++++++++------- + 2 files changed, 503 insertions(+), 68 deletions(-) + +commit 37d658072e564a37584e1292a1cc3dceebaa9223 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + lib: Add new SIXEL parser and test suite + + src/fwd.hh | 7 + + src/meson.build | 26 +- + src/sixel-parser.hh | 677 ++++++++++++++++++++++++++++++++++ + src/sixel-test.cc | 1016 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 1725 insertions(+), 1 deletion(-) + +commit ce715e7b9859f62fc881c2ddd64cab7e3a2fbc7a +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + modes: Add DECSDM mode + + src/modes-private.hh | 12 +++++------- + src/modes.hh | 1 + + 2 files changed, 6 insertions(+), 7 deletions(-) + +commit 299e2d1d8138b3de264e34d44b44135918fd017a +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + lib: Add infrastructure for data syntax switching + + Add a way for a sequence handler to signal to the processing loop + that it has switched data syntax, and thus the processing loop must return + so the handler for the new data syntax can take over. + + src/meson.build | 1 + + src/parser-glue.hh | 43 +++++++++++++++++- + src/parser-seq.py | 71 +++++++++++++++++++++++++----- + src/parser-test.cc | 10 ++--- + src/parser.cc | 86 +++++++++++++++++++++++++++++++----- + src/parser.hh | 8 ++++ + src/vte.cc | 125 ++++++++++++++++++++++++++++++++++++++--------------- + src/vtedefines.hh | 2 + + src/vteinternal.hh | 42 ++++++++++++++---- + src/vteseq.cc | 2 +- + 10 files changed, 319 insertions(+), 71 deletions(-) + +commit 2b7678b09a1f2e71786a8c0d40ebc1fb70c01ccf +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + parser: Silence missing declaration warning + + src/parser.hh | 3 +++ + 1 file changed, 3 insertions(+) + +commit 2d7be5bdad2b332ae22a41dd83935e0bc53cd509 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + widget: Remove excessive const + + src/widget.hh | 48 ++++++++++++++++++++++++------------------------ + 1 file changed, 24 insertions(+), 24 deletions(-) + +commit 5b84ea7ed76c2631f518747c2fb840de5efa4c74 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + debug: Make 'image' debug flag work + + src/debug.cc | 3 ++- + src/debug.h | 66 ++++++++++++++++++++++++++++++------------------------------ + 2 files changed, 35 insertions(+), 34 deletions(-) + +commit ea72547c12f27f05b0622f510c2d5ac32512bac5 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + emulation: Fix DA1 response with SIXEL disabled + + Omit SIXEL from the DA1 response when SIXEL is enabled at build time + but disabled at runtime. + + src/parser-glue.hh | 27 +++++++++++++++++++++++++-- + src/vteseq.cc | 2 +- + 2 files changed, 26 insertions(+), 3 deletions(-) + +commit 770bdb87311748cb63beb13ebef8dea07551c8a6 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + tests: Rename sixel fuzzer + + src/meson.build | 10 +++++----- + src/{sixel-test.cc => sixel-fuzzer.cc} | 0 + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit 245dab98ce0ad775ba409c98a24916d2a5b450c9 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + parser: cat: Factor processing out into its own function + + This will be used in later commits. + + src/parser-cat.cc | 105 +++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 69 insertions(+), 36 deletions(-) + +commit e19b69998492465fb555753b52ebce0a0e46d0ed +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + parser: Store the string terminator for DCS sequences + + This will be used in a subsequent commit. + + src/parser-cat.cc | 2 +- + src/parser-glue.hh | 10 ++++++++++ + src/parser-test.cc | 10 +++++----- + src/parser.cc | 6 ++++-- + src/parser.hh | 1 + + src/vte.cc | 2 +- + src/vteseq.cc | 2 +- + 7 files changed, 23 insertions(+), 10 deletions(-) + +commit 21817903f532b715d5f68762a5ea3a039cc00422 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + terminal: Prepare for processing only part of a chunk + + Copy the last byte of the preceding chunk (except for EOS chunks) to + the next chunk's dataminusone. This will allow rewinding the stream + during processing by one byte, without keeping the preceding chunk + around. + This is in preparation of upcoming refactoring. + + src/chunk.cc | 8 +-- + src/chunk.hh | 140 +++++++++++++++++++++++++++++++++++++++++++++++------ + src/parser-cat.cc | 19 +++++--- + src/vte.cc | 88 +++++++++++++++++++++------------ + src/vteinternal.hh | 4 +- + 5 files changed, 200 insertions(+), 59 deletions(-) + +commit 012a1fa302bea95a2ad949a5ec79a50e047f61e6 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + terminal: Don't stop processing on EOS chunk + + There may be more chunks after the EOS chunk since the terminal may + already have another PTY and have read data from it. + + src/vte.cc | 4 ---- + 1 file changed, 4 deletions(-) + +commit a8e2451eab9da9f6ad646f970a29c39ac29cd7c9 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + terminal: Reindent + + Remove excessive indentation left over from recent refactoring. + + src/vte.cc | 284 ++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 142 insertions(+), 142 deletions(-) + +commit 8c7ab45ae413249e9017e9744210335788f60cc4 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + terminal: Process one chunk at a time + + Move the common code out of the data syntax specific processing functions, + and call them separately for each chunk. + This is in preparation of upcoming refactoring. + + src/vte.cc | 319 ++++++++++++++++++++--------------------------------- + src/vteinternal.hh | 6 +- + 2 files changed, 121 insertions(+), 204 deletions(-) + +commit a57d145c5a8b2c85e0e661c053fe820c36d1ab10 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + terminal: Create ProcessingContext struct + + Move local variables used in process_incoming_{utf8,pcterm} into a struct. + This is in preparation of upcoming refactoring. + + src/vte.cc | 323 ++++++++++++++++++++++++----------------------------- + src/vteinternal.hh | 2 + + 2 files changed, 147 insertions(+), 178 deletions(-) + +commit 7d181d8404f23925b7cae70b6d080755eeba3d80 +Author: Christian Persch +Date: 2020-10-19 00:16:36 +0200 + + parser: Generate the sequences and command lists with a script + + This is in preparation for further parser changes which + would be hard to do when relying only on the C preprocessor + to transform the sequence and command lists. + + src/meson.build | 24 +- + src/parser-c01.hh | 73 ---- + src/parser-cmd.hh | 336 ---------------- + src/parser-csi.hh | 214 ---------- + src/parser-dcs.hh | 46 --- + src/parser-esc.hh | 70 ---- + src/parser-sci.hh | 20 - + src/parser-seq.py | 1138 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vteseq.cc | 16 +- + 9 files changed, 1171 insertions(+), 766 deletions(-) + +commit f0d1bcd35bda44026afbe160487d4db67440d413 +Author: Christian Persch +Date: 2020-10-19 00:16:35 +0200 + + parser: Sort command list + + src/parser-cmd.hh | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +commit 61e1e59e5b23409fd072dcf1374f0d58e1957b84 +Author: Olivier Fourdan +Date: 2020-10-07 12:00:38 +0200 + + widget: Fix missing include + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/289 + + src/widget.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 8d8243b2e431c58b0dddb2a556fbe0189cb4d830 +Author: Christian Persch +Date: 2020-10-06 20:21:56 +0200 + + widget: Use named cursors by default + + [gtk4 preparation] + + src/vtedefines.hh | 8 ++++---- + src/widget.cc | 6 +++--- + src/widget.hh | 2 +- + 3 files changed, 8 insertions(+), 8 deletions(-) + +commit 6495f3e0c05468f3a85fbceef34ed8122146688c +Author: Christian Persch +Date: 2020-10-06 19:46:17 +0200 + + widget: Simplify mouse event translation + + Just throw on unexpected event type. + + src/widget.cc | 8 ++++---- + src/widget.hh | 30 +++++++++++------------------- + 2 files changed, 15 insertions(+), 23 deletions(-) + +commit 54daba14724d4afde4f00a2f23fe5698f23b663d +Author: Christian Persch +Date: 2020-10-06 19:46:17 +0200 + + widget: Move Event classes to platform + + [gtk4 preparation] + + src/fwd.hh | 3 + + src/vte.cc | 82 +++++++++--------- + src/vteinternal.hh | 249 ++++------------------------------------------------- + src/widget.cc | 46 +++++----- + src/widget.hh | 221 ++++++++++++++++++++++++++++++++++++++++++++++- + 5 files changed, 302 insertions(+), 299 deletions(-) + +commit c168ef7053363887ad3fd44ca92b43a8b964bcb2 +Author: Christian Persch +Date: 2020-10-03 14:52:51 +0200 + + widget: Remove GdkAtom usage where possible + + [gtk4] + + src/cxx-utils.hh | 11 +++++++++ + src/vte.cc | 67 ++++++++++++++++++++++++++---------------------------- + src/vteaccess.cc | 5 ++-- + src/vtegtk.cc | 10 ++++---- + src/vteinternal.hh | 24 ++++++++----------- + src/widget.hh | 9 ++++++-- + 6 files changed, 68 insertions(+), 58 deletions(-) + +commit de1ee80d07ef3d7da138bf7f03395685d7327d97 +Author: Christian Persch +Date: 2020-10-03 11:25:33 +0200 + + widget: Reference terminals while processing + + In some language bindings, the callbacks we emit during processing + may cause their GC to run, which could finalise a VteTerminal, + removing it from g_active_terminals list while we're iterating + over that list. + + https://gitlab.gnome.org/GNOME/vte/-/issues/270 + + src/vte.cc | 31 +++++++++++++++++++++++++++++++ + 1 file changed, 31 insertions(+) + +commit e56d624372e69facd9f601fae339bae1712ac8b1 +Author: Christian Persch +Date: 2020-09-30 21:07:36 +0200 + + pty: Allow null callback for spawn_async + + Continued from https://gitlab.gnome.org/GNOME/vte/-/issues/286 + + src/vtepty.cc | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit fafaa6ff619fd05fc03244fa99619c67cf717e0d +Author: Christian Persch +Date: 2020-09-30 16:52:31 +0200 + + gtk: Allow passing null callback to spawn_async + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/286 + + src/vtegtk.cc | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit 71c03eaa260156a84884643ccbb6861c8fa558a1 +Author: Christian Persch +Date: 2020-09-30 16:52:31 +0200 + + lib: Abort when alloc returns nullptr + + Allocating memory with glib (g_new, etc) will abort the process + when memory allocation fails. Do the same when using the C++ + allocator (operator new, etc) throws bad_alloc. + + src/vtegtk.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 546e51c343a1a773a21f4f03dbc254dcb7b7b73c +Author: Christian Persch +Date: 2020-09-30 16:52:31 +0200 + + spawn: Remove current directory from fallback search PATH + + Via https://gitlab.gnome.org/GNOME/glib/-/issues/2188 + + src/spawn.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e148105691926cbd4861e7dc26dec194f59c7f14 +Author: Marko Mäkelä +Date: 2019-09-27 05:09:05 +0000 + + vte.sh: Avoid warnings if shell is configured with 'set -u' + + Resolves: https://gitlab.gnome.org/GNOME/vte/-/issues/285 + Bug-Debian: https://bugs.debian.org/941247 + + src/vte.sh.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit a7b863a6fcfc7f3bf4f96ce6baffaa240c5830f2 +Author: Christian Persch +Date: 2020-09-24 21:39:43 +0200 + + widget: Implement GtkScrollableInterface::get_border + + https://gitlab.gnome.org/GNOME/vte/-/issues/283 + + src/vtegtk.cc | 26 ++++++++++++++++++++++++-- + src/vteinternal.hh | 1 + + src/widget.hh | 1 + + 3 files changed, 26 insertions(+), 2 deletions(-) + +commit faab185155b5239efa13ca80d4d86b6f43e4e716 +Author: Cheng-Chia Tseng +Date: 2020-09-22 15:13:47 +0000 + + Update Chinese (Taiwan) translation + + (cherry picked from commit 1ff95a09b3d897db85b24a65b235c08477cec22b) + + po/zh_TW.po | 68 ++++++++++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 45 insertions(+), 23 deletions(-) + +commit 667dea443f1c2a68fcf8287fbe5d8ab58c789673 +Author: Dušan Kazik +Date: 2020-09-17 07:38:08 +0000 + + Update Slovak translation + + (cherry picked from commit d95254fd8016878788c71f4c22ba5076bd11d95c) + + po/sk.po | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +commit 88d0b3d7b0bdb238b12608e80c96bffdc00e589f +Author: Christian Persch +Date: 2020-09-13 01:26:17 +0200 + + glade: Set icon prefix + + https://gitlab.gnome.org/GNOME/vte/-/issues/281 + + bindings/glade/vte.xml.in | 1 + + 1 file changed, 1 insertion(+) + +commit 7927c771b9394eaaf88c0b1cd4d10c76086f352a +Author: Aleksandr Mezin +Date: 2020-09-12 21:59:56 +0200 + + build: Restore glade catalogue + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/281 + + .../hicolor_actions_16x16_widget-vte-terminal.png | Bin 0 -> 644 bytes + .../hicolor_actions_22x22_widget-vte-terminal.png | Bin 0 -> 901 bytes + bindings/glade/meson.build | 42 +++++++++++++++++++++ + bindings/glade/vte.xml.in | 17 +++++++++ + bindings/meson.build | 4 ++ + meson.build | 1 + + meson_options.txt | 7 ++++ + 7 files changed, 71 insertions(+) + +commit 51467c90cefc72efe5fbabb4350062f46d5ddf63 +Author: Christian Persch +Date: 2020-09-12 21:24:55 +0200 + + build: Post branch version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e31432b965a789a46a3c5bf19015d99a28f5b370 +Author: Baurzhan Muftakhidinov +Date: 2020-09-12 14:05:51 +0000 + + Update Kazakh translation + + po/kk.po | 62 +++++++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 43 insertions(+), 19 deletions(-) + +commit d59c4ca8a3ef2fd2af48ed0dd5f973adbcbfc57a +Author: Rūdolfs Mazurs +Date: 2020-09-12 13:09:17 +0000 + + Update Latvian translation + + po/lv.po | 65 +++++++++++++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 44 insertions(+), 21 deletions(-) + +commit 5e24d5020451be54bea42f42130b47dff6188e7b +Author: Juliano Camargo +Date: 2020-09-11 23:59:40 +0000 + + Update Portuguese translation + + po/pt.po | 80 +++++++++++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 52 insertions(+), 28 deletions(-) + +commit 721a07084c7e12bd710a273ad5dbcc0836435689 +Author: Milo Casagrande +Date: 2020-09-10 09:27:05 +0000 + + Update Italian translation + + po/it.po | 63 +++++++++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 39 insertions(+), 24 deletions(-) + +commit 4d9149bca396ca83dfb7a8f2e43eccc6c2a49da9 +Author: Tim Sabsch +Date: 2020-09-07 18:37:33 +0000 + + Update German translation + + po/de.po | 67 +++++++++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 47 insertions(+), 20 deletions(-) + +commit 803ddeb015e58fc84402a295d518d86aa20c2099 +Author: Balázs Meskó +Date: 2020-09-06 23:38:46 +0000 + + Update Hungarian translation + + po/hu.po | 72 +++++++++++++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 49 insertions(+), 23 deletions(-) + +commit 10f996016d1ca54c08083f6b92d47ec145902e55 +Author: Thibault Martin +Date: 2020-09-06 08:26:01 +0000 + + Update French translation + + po/fr.po | 71 +++++++++++++++++++++++++++++++++++++++------------------------- + 1 file changed, 43 insertions(+), 28 deletions(-) + +commit 34ba53db6a07268e5d78179f86dc112a87fe9048 +Author: Dušan Kazik +Date: 2020-09-04 08:17:00 +0000 + + Update Slovak translation + + po/sk.po | 46 ++++++++++++++++++++++++++++++++++++++-------- + 1 file changed, 38 insertions(+), 8 deletions(-) + +commit c25ca2d0487249a8b64dfdcda4e7d88179dea75a +Author: Simon McVittie +Date: 2020-09-03 10:13:05 +0100 + + Export vte_pty_spawn_finish again + + This was accidentally unexported in af649664, breaking the ABI. + + Signed-off-by: Simon McVittie + Resolves: https://gitlab.gnome.org/GNOME/vte/-/issues/278 + + src/vte/vtepty.h | 1 + + 1 file changed, 1 insertion(+) + +commit 6ca80dfd7da4cb07ae9940320f003ce7becd4fbc +Author: Марко Костић +Date: 2020-08-31 14:37:24 +0000 + + Update Serbian translation + + po/sr.po | 61 ++++++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 42 insertions(+), 19 deletions(-) + +commit c8c01d3d8e4dc705ffd5c6a92d7ca1889ad841f8 +Author: Changwoo Ryu +Date: 2020-08-30 07:47:07 +0000 + + Update Korean translation + + po/ko.po | 59 +++++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 39 insertions(+), 20 deletions(-) + +commit c95a9d61a545690f3dd457c019b3d76b81af046d +Author: Marek Černocký +Date: 2020-08-25 11:27:06 +0200 + + Updated Czech translation + + po/cs.po | 63 +++++++++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 39 insertions(+), 24 deletions(-) + +commit 121908c1bb7c937b82fca35e6a65f111a48502b4 +Author: Anders Jonsson +Date: 2020-08-24 16:27:30 +0000 + + Update Swedish translation + + po/sv.po | 91 ++++++++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 52 insertions(+), 39 deletions(-) + +commit 54e1dceb147d28f188b90b1e42f5a2bc74821947 +Author: Benno Schulenberg +Date: 2020-08-23 22:10:17 +0200 + + docs: Remove three mistaken little words + + doc/ambiguous.txt | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 2020e23bd752ba8889b13107134eaea3d61b3b39 +Author: Ask Hjorth Larsen +Date: 2020-08-23 20:45:52 +0200 + + Updated Danish translation + + po/da.po | 135 +++++++++++++++++---------------------------------------------- + 1 file changed, 35 insertions(+), 100 deletions(-) + +commit 958e5e1bfb40323e57597394026b1a2e64a27831 +Author: Goran Vidović +Date: 2020-08-23 12:42:49 +0000 + + Update Croatian translation + + po/hr.po | 61 ++++++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 42 insertions(+), 19 deletions(-) + +commit 97d2e87fa196e4023bf658bc56701cac27063434 +Author: Christian Persch +Date: 2020-08-22 20:53:10 +0200 + + all: Fix sixelparser.{hh,cc} licence header + + src/sixelparser.cc | 4 ++-- + src/sixelparser.hh | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 2473ddb9eb312cd646ed7c04d75907957e5eb1cf +Author: Christian Persch +Date: 2020-08-22 20:53:10 +0200 + + pty: Only fill in ws_[xy]pixel when sixel is enabled + + src/pty.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 0596536d213f489ab0dee27bb1377cc2a7ff5c9b +Author: Piotr Drąg +Date: 2020-08-16 12:51:59 +0200 + + Update Polish translation + + po/pl.po | 67 +++++++++++++++++++++++++++++++++++++++------------------------- + 1 file changed, 41 insertions(+), 26 deletions(-) + +commit 12599636842931003c01d07e82496018ac56de1e +Author: Rafael Fontenelle +Date: 2020-08-10 11:58:47 +0000 + + Update Brazilian Portuguese translation + + po/pt_BR.po | 73 +++++++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 49 insertions(+), 24 deletions(-) + +commit d88d8902e65fbfc3aa664589e797aca087f02e7f +Author: Zander Brown +Date: 2020-08-10 11:14:21 +0000 + + Update British English translation + + po/en_GB.po | 65 +++++++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 44 insertions(+), 21 deletions(-) + +commit 1d7cc29255f21c8e3b4f158e6674c5792ad185e1 +Author: Christian Persch +Date: 2020-08-08 21:56:17 +0200 + + build: Post release version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 09e71510d1b7061df177d6e3b531aa5cc86b8d65 (tag: 0.61.90) +Author: Christian Persch +Date: 2020-08-08 21:55:09 +0200 + + widget: Redraw when en/disabling SIXEL + + src/vteinternal.hh | 2 ++ + 1 file changed, 2 insertions(+) + +commit a737e397e391761546dd9356ec99f499ccaa4cf8 +Author: Debarshi Ray +Date: 2020-08-08 21:55:09 +0200 + + widget: Improve legibility by using the appropriate background color + + From GTK 3.24.22 onwards, Adwaita exports a text_view_bg color [1] + that's meant to be used as the background in text views, such as + terminal emulators, where higher contrast helps with legibility. + + [1] https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/2402 + https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/2403 + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/226 + + src/vtegtk.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit f825132b10c89d4512241330ff5fa465d0d82256 +Author: Christian Persch +Date: 2020-08-08 21:55:09 +0200 + + Version 0.61.90 + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e28f1d50c07605bb0deaec70a46f520b621a9bff +Author: Christian Persch +Date: 2020-08-08 21:55:09 +0200 + + widget: Add API to get features as flags + + This will be used in gnome-terminal to hide UI that's not functional + due to VTE being compiled without that feature. + + doc/reference/vte-sections.txt | 2 ++ + src/vte/vteenums.h | 21 ++++++++++++++++++++- + src/vte/vteglobals.h | 4 ++++ + src/vtegtk.cc | 30 ++++++++++++++++++++++++++++++ + 4 files changed, 56 insertions(+), 1 deletion(-) + +commit 9b879a3c326118ec8bd7657a7ac11d78f084e6c0 +Author: Hans Petter Jansson +Date: 2020-08-08 21:55:09 +0200 + + all: Add SIXEL support + + This adds support for SIXEL images to VTE. Based on initial work by + Hayaki Saito , updated and improved by + Hans Petter Jansson + + For now this is off by default; build with -Dsixel=true to enable. + + (This is the contents of the wip/sixels branch, squashed together + into one commit.) + + https://gitlab.gnome.org/GNOME/vte/-/issues/253 + + doc/reference/vte-sections.txt | 2 + + meson.build | 2 + + meson_options.txt | 7 + + src/app/app.cc | 6 + + src/debug.h | 1 + + src/image.cc | 68 ++++ + src/image.hh | 102 ++++++ + src/meson.build | 25 ++ + src/parser-cmd.hh | 2 +- + src/parser-dcs.hh | 2 +- + src/parser-string.hh | 10 + + src/ring.cc | 223 +++++++++++- + src/ring.hh | 28 ++ + src/sixel-test.cc | 763 +++++++++++++++++++++++++++++++++++++++++ + src/sixelparser.cc | 713 ++++++++++++++++++++++++++++++++++++++ + src/sixelparser.hh | 75 ++++ + src/vte.cc | 88 ++++- + src/vte/vteterminal.h | 10 + + src/vtedefines.hh | 2 + + src/vtegtk.cc | 81 +++++ + src/vtegtk.hh | 1 + + src/vteinternal.hh | 19 +- + src/vteseq.cc | 114 +++++- + src/widget.hh | 3 + + 24 files changed, 2323 insertions(+), 24 deletions(-) + +commit acc15425af882bb541bff14557bafbdc77530c7d +Author: Fran Dieguez +Date: 2020-08-04 07:32:18 +0000 + + Update Galician translation + + po/gl.po | 72 ++++++++++++++++++++++++++++++++++++++++++---------------------- + 1 file changed, 48 insertions(+), 24 deletions(-) + +commit 3707633a71dfa91b244528e6cd8ed50eaa0ab327 +Author: Christian Persch +Date: 2020-07-22 19:50:29 +0200 + + pty: Fix typo + + src/pty.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a4e9f0a9d35f6820876d5aab21729232e34253b4 +Author: Christian Persch +Date: 2020-07-18 13:52:55 +0200 + + draw: Fix a thinko + + Don't overwrite constructed data, and don't run the destructor twice. + Regression introduced in commit 9c9d9a44c045b16685061fc0380bcc2d86634011. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/267 + + src/fonts-pangocairo.cc | 8 -------- + 1 file changed, 8 deletions(-) + +commit d552d64c0e218566f076ef2cd47a45275620b576 +Author: Christian Persch +Date: 2020-07-18 13:52:55 +0200 + + app: Add option to load extra CSS from a file + + https://gitlab.gnome.org/GNOME/vte/-/issues/268 + + src/app/app.cc | 28 ++++++++++++++++++++++++++++ + src/app/meson.build | 2 +- + src/meson.build | 7 +++++-- + 3 files changed, 34 insertions(+), 3 deletions(-) + +commit fe95bc7af1b0e70c0fc9254d41ed4f15ea0cfbb9 +Author: Christian Persch +Date: 2020-07-18 13:52:55 +0200 + + app: Add option to disable window decorations + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/268 + + src/app/app.cc | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 79031079146eb82106551f0d92c13dc5d356a1a9 +Author: Christian Persch +Date: 2020-07-18 13:52:55 +0200 + + all: Replace %m with %s and g_strerror() + + For portability, don't use %m in non-linux code. + + Based on a patch by Nia Alarie . + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/261 + + src/app/app.cc | 19 ++++++++++----- + src/app/meson.build | 2 +- + src/decoder-cat.cc | 8 +++++-- + src/meson.build | 4 ++-- + src/parser-cat.cc | 8 +++++-- + src/pty.cc | 69 +++++++++++++++++++++++++++++++++++++---------------- + src/spawn.cc | 18 ++++++++++---- + src/vte.cc | 14 +++++++---- + 8 files changed, 98 insertions(+), 44 deletions(-) + +commit e036d389eb198efa85bf35dd8baa2c47220abb8d +Author: Christian Persch +Date: 2020-07-18 13:52:55 +0200 + + spawn: Error out when it is impossible to close all file descriptors + + When the limit is RLIM_INFINITY, we cannot use the fallback fdwalk + that calls close() on all FDs. Instead of potentially leaking some FDs, + error out. + + src/missing.cc | 24 +++++++++++++++--------- + 1 file changed, 15 insertions(+), 9 deletions(-) + +commit ed78b9e2ec47675a9dccf045caca4d7a0b6c9fe8 +Author: Christian Persch +Date: 2020-07-18 13:52:55 +0200 + + spawn: Async-signal-safety fixes + + Ported from https://gitlab.gnome.org/GNOME/glib/-/issues/2140 + with some adjustments. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/263 + + src/missing.cc | 69 ++++++++++++++++++++++------ + src/spawn.cc | 43 ++++++++++++++++-- + src/spawn.hh | 11 ++--- + src/vtepty.cc | 5 +-- + src/vtespawn.cc | 137 ++++++++++++++++++++++++++++---------------------------- + src/vtespawn.hh | 7 +-- + 6 files changed, 175 insertions(+), 97 deletions(-) + +commit 45de5443b637c81f57360066d84bc0d304868e30 +Author: Christian Persch +Date: 2020-07-18 13:52:55 +0200 + + build: Use -Bsymbolic when available + + meson.build | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit a53fd3199728695c48eb2ea96bb7602c699eb6cc +Author: Aurimas Černius +Date: 2020-07-12 20:43:12 +0300 + + Updated Lithuanian translation + + po/lt.po | 71 ++++++++++++++++++++++++++++++++++++++++++---------------------- + 1 file changed, 47 insertions(+), 24 deletions(-) + +commit 0add69cd3d50af8e1d61fdaa86a72fac2b8df5c4 +Author: Fabio Tomat +Date: 2020-07-11 19:34:33 +0000 + + Update Friulian translation + + po/fur.po | 75 +++++++++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 47 insertions(+), 28 deletions(-) + +commit b0e7b2d55d69f140497a729f0a8e2784bedc651a +Author: Gil Forcada +Date: 2020-07-03 05:33:14 +0000 + + Update Catalan translation + + po/ca.po | 84 +++++++++++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 54 insertions(+), 30 deletions(-) + +commit 9810f06b14ed11b7926c697db1fbdabecfb09194 +Author: Matej Urbančič +Date: 2020-06-22 22:06:37 +0200 + + Updated Slovenian translation + + po/sl.po | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +commit 38f740241a9da929e8a783c07c3f1d3f044ec37a +Author: Zephyr Wang 王滋涵 +Date: 2020-06-17 03:05:55 +0000 + + Update Chinese (China) translation + + po/zh_CN.po | 76 ++++++++++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 50 insertions(+), 26 deletions(-) + +commit 263f7a14d14b091579c8fd15b39f031c8d9afee5 +Author: Kukuh Syafaat +Date: 2020-06-12 08:24:36 +0000 + + Update Indonesian translation + + po/id.po | 70 ++++++++++++++++++++++++++++++++++++++++++---------------------- + 1 file changed, 46 insertions(+), 24 deletions(-) + +commit 2fcd6a98598319e1b0d092d3f44274ccfe5471b5 +Author: sicklylife +Date: 2020-06-10 12:34:17 +0000 + + Update Japanese translation + + po/ja.po | 23 +++++++++++------------ + 1 file changed, 11 insertions(+), 12 deletions(-) + +commit 070ddda450a0aae085640b6a4e43a55ad89b6152 +Author: sicklylife +Date: 2020-06-10 12:18:31 +0000 + + Update Japanese translation + + po/ja.po | 62 ++++++++++++++++++++++++++++++++++++++++++++------------------ + 1 file changed, 44 insertions(+), 18 deletions(-) + +commit b3d5c1f6a4422d4c46ceb6d0379aaeac3a3f8068 +Author: Christian Persch +Date: 2020-06-04 21:54:41 +0200 + + emulation: Fix EL 0 after cursor movement + + Before erasing to the end of the line, need to fill the line + up to the current cursor position. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/260 + + src/vteseq.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0604617936deb66e89f235640e1ed933ef4f3e3d +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + lib: Improve smart pointers + + Save some memory by using an empty deleter class. + + src/cairo-glue.hh | 28 ++++++++++++++++++++++++++++ + src/cxx-utils.hh | 14 ++++++++++++++ + src/drawing-cairo.cc | 9 ++++----- + src/drawing-cairo.hh | 4 +++- + src/glib-glue.hh | 18 ++++-------------- + src/meson.build | 1 + + src/refptr-test.cc | 6 +++--- + src/refptr.hh | 19 +++++++------------ + src/regex.hh | 9 +++++++-- + src/vte.cc | 4 ++-- + src/vteinternal.hh | 6 +++--- + src/widget.cc | 2 +- + 12 files changed, 77 insertions(+), 43 deletions(-) + +commit b0ef50363a1503be16012b02b01a173aa2ee2b07 +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + draw: Use attr in public functions instead of font style + + Move public function to the only file it is used from, and + pass the attr directly to draw_text etc instead of the + bold/italc style. + + src/drawing-cairo.cc | 57 ++++++++++++++++++++++++++-------------------------- + src/drawing-cairo.hh | 17 +++++----------- + src/vte.cc | 13 ++++-------- + 3 files changed, 38 insertions(+), 49 deletions(-) + +commit 39ea41b942f96d9e2e63f5ff8f86ad8b9a52e185 +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + draw: Move remaining class into new file + + src/{vtedraw.cc => drawing-cairo.cc} | 30 ++++++++---------------------- + src/{vtedraw.hh => drawing-cairo.hh} | 18 +++++++++--------- + src/meson.build | 4 ++-- + src/minifont.cc | 2 +- + src/vte.cc | 1 - + src/vteinternal.hh | 4 ++-- + 6 files changed, 22 insertions(+), 37 deletions(-) + +commit 4c58cac26a89a6b3f85b07c8d4c831b003f43a7a +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + draw: Move public define to the only file where it is used + + src/vtedraw.cc | 4 ++++ + src/vtedraw.hh | 4 ---- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit af8058637005e1438ed0029b7328141e5f38a7ea +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + draw: Move public define to the only file where it is used + + src/vte.cc | 2 ++ + src/vtedraw.hh | 2 -- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 507ac2860eb575520ba3628457342161556e4a8b +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + draw: Move custom drawing code into its own class + + src/meson.build | 2 + + src/minifont.cc | 1113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/minifont.hh | 61 +++ + src/vtedraw.cc | 1100 +----------------------------------------------------- + src/vtedraw.hh | 8 + + 5 files changed, 1188 insertions(+), 1096 deletions(-) + +commit 42ea29e93c08266c3b3fd30cc4a838f3970f9892 +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + draw: Move FontInfo to its own file + + src/fonts-pangocairo.cc | 474 ++++++++++++++++++++++++++++++++ + src/fonts-pangocairo.hh | 286 ++++++++++++++++++++ + src/fwd.hh | 7 + + src/meson.build | 2 + + src/vtedraw.cc | 700 +----------------------------------------------- + 5 files changed, 770 insertions(+), 699 deletions(-) + +commit bb6adce89cb82677b85e1f6ceaa5279e5bdc5752 +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + draw: Pass ownership of references through RefPtr + + src/vtedraw.cc | 36 +++++++++++++++++------------------- + 1 file changed, 17 insertions(+), 19 deletions(-) + +commit 9c9d9a44c045b16685061fc0380bcc2d86634011 +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + draw: Move struct unistr_info into FontInfo class + + src/vtedraw.cc | 213 ++++++++++++++++++++++++++++----------------------------- + 1 file changed, 104 insertions(+), 109 deletions(-) + +commit 405d3f78fde37dbcc93beb5ad8bf7454e9e2ad50 +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + draw: Move struct _vte_draw_text_request into DrawingContext + + src/vte.cc | 12 +++++------- + src/vtedraw.cc | 6 +++--- + src/vtedraw.hh | 33 +++++++++++++++++++-------------- + src/vteinternal.hh | 4 ++-- + 4 files changed, 29 insertions(+), 26 deletions(-) + +commit 012131e92b290a6c80becc4fa234570be5592e25 +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + draw: Remove unnecessary out param checks + + We can just always pass the param even if unused, since this + is used only internally and in a few places. + + src/vte.cc | 6 +++--- + src/vtedraw.cc | 26 ++++++++++---------------- + src/vtedraw.hh | 4 ++-- + 3 files changed, 15 insertions(+), 21 deletions(-) + +commit 1c5949c6a04367df2e96d39cfad40f9bbdde8710 +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + draw: Use DrawingContext directly + + ... instead of through the wrapper functions. Remove those. + + src/vte.cc | 60 ++++++++++++------------ + src/vtedraw.hh | 145 --------------------------------------------------------- + 2 files changed, 30 insertions(+), 175 deletions(-) + +commit d9386afe15e8e1df4530f59e6727d37f13d96852 +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + draw: C++ify + + src/vtedraw.cc | 532 ++++++++++++++++++++++++++++----------------------------- + src/vtedraw.hh | 10 +- + 2 files changed, 268 insertions(+), 274 deletions(-) + +commit c1a86839eea2ca95f9cf1cfc3405472609ec5132 +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + draw: C++ify + + src/vte.cc | 25 +-- + src/vtedraw.cc | 462 +++++++++++++++++++++++++---------------------------- + src/vtedraw.hh | 322 +++++++++++++++++++++++++++++-------- + src/vteinternal.hh | 6 +- + 4 files changed, 484 insertions(+), 331 deletions(-) + +commit ba30655e1c632f4b83d97397a85a2ee2a7dd3d98 +Author: Christian Persch +Date: 2020-06-01 22:48:43 +0200 + + all: Remove cruft + + ChangeLog.pre-git | 12065 ---------------------------------------------------- + NEWS | 1244 ------ + 2 files changed, 13309 deletions(-) + +commit 7fa413a5ba5106bd9bf9ea7977fbc80fcea504ab +Author: Matej Urbančič +Date: 2020-06-01 22:14:36 +0200 + + Updated Slovenian translation + + po/sl.po | 85 +++++++++++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 55 insertions(+), 30 deletions(-) + +commit ca4a9c9f064b6403fc356b0ce681ce9bf7856822 +Author: Asier Sarasua Garmendia +Date: 2020-05-30 20:52:55 +0000 + + Update Basque translation + + po/eu.po | 64 +++++++++++++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 43 insertions(+), 21 deletions(-) + +commit 87506bfe60b2fb91e2cd0741e7baf3473e5e71bc +Author: Christian Persch +Date: 2020-05-27 22:43:29 +0200 + + lib: Improve exception error message without debug enabled + + src/vtegtk.cc | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +commit 44547bf2cdd6ac9a2dc6212bb633f41493122426 +Author: Christian Persch +Date: 2020-05-27 22:18:16 +0200 + + lib: Fix the build with debug disabled + + src/vtegtk.cc | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +commit af384940fd393d85682aa1f2fd688d85f76c5ad8 +Author: Hans Petter Jansson +Date: 2020-05-27 21:17:04 +0200 + + pty: Fill in winsize.ws_xpixel and .ws_ypixel for TIOCGWINSZ + + This makes the terminal's pixel size available to clients, which can use + it to estimate the cell size and scale graphics accordingly. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/251 + + perf/printwinsize.py | 26 ++++++++++++++++++++++++++ + src/pty.cc | 8 +++++++- + src/pty.hh | 4 +++- + src/vte.cc | 12 +++++++++++- + src/vtegtk.cc | 8 +++++++- + src/vtepty.cc | 17 ++++++++++++++++- + src/vteptyinternal.hh | 7 +++++++ + 7 files changed, 77 insertions(+), 5 deletions(-) + +commit dc6c348c3a4ef737f4f95cab373c7995a8a37e53 +Author: Christian Persch +Date: 2020-05-27 21:17:04 +0200 + + lib: Ensure no exceptions escape from the C API + + https://gitlab.gnome.org/GNOME/vte/-/issues/185 + + doc/reference/meson.build | 2 +- + src/cxx-utils.hh | 45 ++ + src/debug.cc | 1 + + src/debug.h | 1 + + src/glib-glue.hh | 21 +- + src/gobject-glue.hh | 49 ++ + src/meson.build | 2 + + src/vte.cc | 77 +-- + src/vte/vtedeprecated.h | 47 +- + src/vte/vteglobals.h | 6 +- + src/vte/vtemacros.h | 9 + + src/vte/vtepty.h | 22 +- + src/vte/vteregex.h | 12 +- + src/vte/vteterminal.h | 188 +++---- + src/vte/vteversion.h.in | 6 +- + src/vteaccess.cc | 63 ++- + src/vtegtk.cc | 1292 +++++++++++++++++++++++++++++++++++++-------- + src/vteinternal.hh | 19 +- + src/vtepty.cc | 101 +++- + src/vteptyinternal.hh | 4 +- + src/vteregex.cc | 47 +- + src/widget.cc | 67 ++- + src/widget.hh | 2 +- + 23 files changed, 1604 insertions(+), 479 deletions(-) + +commit 7d97382b11e76dbafc790154c2ca7b39b9af70d8 +Author: Christian Persch +Date: 2020-05-27 21:17:04 +0200 + + build: Drop -fno-exceptions -fno-rtti + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/185 + + meson.build | 2 -- + src/vteinternal.hh | 13 ++++--------- + 2 files changed, 4 insertions(+), 11 deletions(-) + +commit 18912ef4fee8179c9fd2340e8e072f88bc6eda94 +Author: Christian Persch +Date: 2020-05-27 21:17:04 +0200 + + libc: glue: Implement swap for FD + + src/libc-glue.hh | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit e07d8071357fa9efa1e458930376b4df3ad17d79 +Author: Christian Persch +Date: 2020-05-27 21:17:04 +0200 + + libc: glue: Make FD operators noexcept + + src/libc-glue.hh | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 197954648bf6868e63872d9d32339bd985d4a9ef +Author: Christian Persch +Date: 2020-05-27 21:17:04 +0200 + + libc: glue: Make FD self-assignment safe + + src/libc-glue.hh | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit 0e8d1a6fece6356663a3ce2c49c51d4e17be7381 +Author: Christian Persch +Date: 2020-05-27 21:17:04 +0200 + + glib: glue: Mark some methods as noexcept + + src/glib-glue.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit b5304de6824b353a7acd5346a01f11bba3a7a6f4 +Author: Florentina Mușat +Date: 2020-05-22 08:40:10 +0000 + + Update Romanian translation + + po/ro.po | 70 ++++++++++++++++++++++++++++++++++++++++++---------------------- + 1 file changed, 46 insertions(+), 24 deletions(-) + +commit c7d1782bbc63d2104835f4085b2b3187dde1ee02 +Author: Danial Behzadi +Date: 2020-05-13 17:33:49 +0000 + + Update Persian translation + + po/fa.po | 62 +++++++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 43 insertions(+), 19 deletions(-) + +commit 6a9580bab89c8d82d67cff538e1d0c483c6e142f +Author: Egmont Koblinger +Date: 2020-05-13 11:46:48 +0200 + + widget: Fix underlining the space character in a matched regex + + https://gitlab.gnome.org/GNOME/vte/-/issues/248 + + src/vte.cc | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +commit 78031f362af3933a70a40ad9e3ea5cd3ba2df590 +Author: Christian Persch +Date: 2020-05-12 00:22:59 +0200 + + terminal: Adjust variable type + + AFAICT the computation will never exceed the int range, but + simply use auto here to be sure, and remove a FIXME. + + https://gitlab.gnome.org/GNOME/vte/-/issues/244#note_796941 + + src/vte.cc | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit b975ca703559e9ccfad81331bca4534af6d44598 +Author: Ting-Wei Lan +Date: 2020-05-10 21:57:01 +0200 + + pty: Fix opening a PTY on non-linux + + Commit 387b0a4924c895d14c5776093274fecd13c23138 changed the code + from using int to store a file descriptor to using the vte::libc::FD + class, but omitted to change some calls in the non-linux code path + to use .get() when passing the file descriptor to a libc function. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/245 + + src/pty.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit fc0fb8adc246d146de8869da5be334bdc44000aa +Author: Ting-Wei Lan +Date: 2020-05-10 21:57:01 +0200 + + libc: glue: Make FD's operator bool() explicit + + This prevents an accidental implicit conversion from FD to + int with value 0 or 1 instead of using get(). + + src/libc-glue.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 062d504b634dda4627d6fc3e23f450a500ffebdd +Author: Ting-Wei Lan +Date: 2020-05-10 21:57:01 +0200 + + spawn: Ignore EBADF in the fdwalk callback + + The fallback implementation of fdwalk can call the callback with invalid + file descriptors on non-Linux systems because it doesn't know how to get + a list of valid file descriptors. Therefore, we have to ignore bad file + descriptor errors, otherwise the fdwalk call always fail. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/245 + + src/spawn.cc | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +commit 81dca07bc96e199f59dd805c61b7ae53e9775a3d +Author: Christian Persch +Date: 2020-05-10 21:57:01 +0200 + + spawn: Check for explicit systemd requirement + + When built without systemd support, fail only if a systemd scope was + explicitly requested with the VTE_SPAWN_REQUIRE_SYSTEMD_SCOPE flag. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/245 + + src/spawn.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9e6647a1fe53c36e59da0ebd850d81bda332cd37 +Author: Benjamin Berg +Date: 2020-05-05 15:44:33 +0200 + + systemd: Place vte into app.slice rather than apps.slice + + To avoid confusion, we have updated the systemd specification to use + app.slice rather than apps.slice. Update the use here accordingly. + + This change is in no way urgent as other software is not using the + conventions yet. + + See https://github.com/systemd/systemd/pull/15647 + + Closes: #240 + + src/systemd.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d2792596e4aee6d951c0127719144bbfb3345bd1 +Author: Jwtiyar Nariman +Date: 2020-05-04 22:17:23 +0000 + + Add Kurdish Sorani translation + + (cherry picked from commit 7e6442233e24141eb8ce92e96587c2c8df159b98) + + po/LINGUAS | 1 + + po/ckb.po | 43 +++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 44 insertions(+) + +commit 0c95c0c9f376aa0a2b91c516a52181bbc9f372f5 +Author: Christian Persch +Date: 2020-05-03 22:18:11 +0200 + + spawn: Use unique_ptr for child setup data + + src/spawn.hh | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 87943812161c45c1c33967cbfcbed487347b7c0f +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: Make mouse scroll handler return bool + + This will be used in https://gitlab.gnome.org/GNOME/vte/-/issues/234 + + src/vte.cc | 14 ++++++++++---- + src/vteinternal.hh | 2 +- + src/widget.hh | 2 +- + 3 files changed, 12 insertions(+), 6 deletions(-) + +commit 5ccac1ed2876ad85d7845a85c586b607790d75c1 +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: Remove extraneous unmap + + GtkWidget::unrealize already unmaps the widget if mapped, so + there is no need to do this manually again. + + src/vte.cc | 6 ------ + 1 file changed, 6 deletions(-) + +commit e77a894530128cd0c0fcad58a33c6f2b0b0b120f +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: Move retrieving gtk settings to Widget + + src/vte.cc | 10 +++------- + src/widget.cc | 18 ++++++++++++++---- + src/widget.hh | 1 + + 3 files changed, 18 insertions(+), 11 deletions(-) + +commit 4870238eccdc3a0a5e8a9dc3bc94b0dba218b96d +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: Move grab focus method to Widget + + src/vte.cc | 19 +++++++++---------- + src/vteinternal.hh | 2 +- + src/widget.hh | 2 ++ + 3 files changed, 12 insertions(+), 11 deletions(-) + +commit 9f139a093ec7d832a5ebc13ebef6f71d2503b9a6 +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: Move style update handler to Widget + + src/vte.cc | 51 ++++++++++++++++++++++----------------------------- + src/vteinternal.hh | 4 +++- + src/widget.cc | 27 +++++++++++++++++++++++++++ + src/widget.hh | 4 ++-- + 4 files changed, 54 insertions(+), 32 deletions(-) + +commit 84258756968c263068db7f7ec4899fcc6feb9380 +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: Move signal emission to the widget + + src/vte.cc | 6 ------ + src/vtegtk.cc | 4 +++- + 2 files changed, 3 insertions(+), 7 deletions(-) + +commit b898f1da0591ad60db811b68c9e442f4eef55ba6 +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: Continue treating Meta as Alt + + This partially reverts commit 2965a10e63d024a9318976ae2bf81621b31809b1. + The original change is correct, but needs more work, so revert the + parts that are observable by the terminal app/user for now. + The sequences vte sends are those for Alt, not Meta; so rename + all occurrences of 'meta' to alt. + + src/modes-private.hh | 4 ++-- + src/modes-test.cc | 2 +- + src/modes.hh | 2 +- + src/vte.cc | 2 +- + src/widget.cc | 6 ++++++ + 5 files changed, 11 insertions(+), 5 deletions(-) + +commit 58327921370340f4f44afa0c2323c42aa5e33f54 +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: Move keymap translation to Widget + + ... making Terminal now entirely free of use of GdkEvent APIs. + + Part of https://gitlab.gnome.org/GNOME/vte/issues/12 + + src/vte.cc | 33 ++------------------------------- + src/widget.cc | 29 +++++++++++++++++++++++++++++ + src/widget.hh | 2 ++ + 3 files changed, 33 insertions(+), 31 deletions(-) + +commit 56132ed80fcff068769e85888278d4587d26151e +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: Fix debug output to use the event wrapper + + src/vte.cc | 2 +- + src/vteinternal.hh | 5 +++++ + 2 files changed, 6 insertions(+), 1 deletion(-) + +commit b404b62dc32be80dbbfc25606d5e10a170046e5d +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: No need to pass focus events to Terminal + + All the information the Terminal needs is if it's an in or out + event, and that's already encoded in the function name. + + src/vte.cc | 4 ++-- + src/vteinternal.hh | 4 ++-- + src/widget.hh | 4 ++-- + 3 files changed, 6 insertions(+), 6 deletions(-) + +commit 477c45bcbec34841dda0ee63b58aebe37c356b93 +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: Add wrapper class for mouse events + + Extract all information from the GdkEvent{Button,Crossing,Scroll}, + put them into a wrapper class, and pass that down to Terminal, + instead of the native event. + + src/vte.cc | 267 ++++++++++++++++++++++------------------------------- + src/vtegtk.cc | 16 ++-- + src/vteinternal.hh | 234 +++++++++++++++++++++++++++++++++++++--------- + src/widget.cc | 56 +++++++++-- + src/widget.hh | 49 ++++++++-- + 5 files changed, 396 insertions(+), 226 deletions(-) + +commit 940ce2cf377731319662f51af804f65da99f6432 +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: Remove unused function + + src/vte.cc | 13 ------------- + 1 file changed, 13 deletions(-) + +commit 6b773dda1399a66dbdcc94cf7bf7304d1da5c0e2 +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: Focus events have no modifier state + + ... so don't even try to read it. + + src/vte.cc | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +commit 19ea46dadd7898389753241ea2d1b5429bc4bd7d +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + widget: Add wrapper class for key events + + Extract all information from the GdkEventKey, put them into a wrapper class, + and pass that down to Terminal, instead of the native event. + + src/fwd.hh | 6 +++++ + src/vte.cc | 52 +++++++++++++++++++--------------------- + src/vteinternal.hh | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++--- + src/widget.cc | 40 +++++++++++++++++++++++++++++-- + src/widget.hh | 9 ++++--- + 5 files changed, 142 insertions(+), 35 deletions(-) + +commit d63523a26cf68c3b8d5540dd304d1293233d8d3a +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + lib: Meta really is Alt + + The sequences vte sends are those for Alt, not Meta; so rename + all occurrences of 'meta' to alt. + + src/keymap.cc | 42 ++++++++++++++++++++-------------------- + src/keymap.h | 2 +- + src/mev.c | 8 ++++---- + src/modes-private.hh | 4 ++-- + src/modes-test.cc | 2 +- + src/modes.hh | 2 +- + src/vte.cc | 54 ++++++++++++++++++++++++++-------------------------- + 7 files changed, 57 insertions(+), 57 deletions(-) + +commit f69eadf4fa48bbf8b45c36d9a9b71fbf6049557c +Author: Christian Persch +Date: 2020-05-01 23:08:42 +0200 + + parser: Add DECFNK sequence + + src/parser-cmd.hh | 1 + + src/parser-reply.hh | 2 +- + src/vteseq.cc | 11 +++++++++++ + 3 files changed, 13 insertions(+), 1 deletion(-) + +commit 84224f52f726b0062bc2c228d7052faf1c48fa0a +Author: Christian Persch +Date: 2020-05-01 20:34:49 +0200 + + widget: Notify correct property when setting the scroll-on-keystroke + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/238 + + src/vtegtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 216030e3f443c8032c36ac84cb471fbae99b1db6 +Author: Christian Persch +Date: 2020-05-01 20:23:47 +0200 + + spawn: Remove inaccurate comment + + src/spawn.cc | 1 - + 1 file changed, 1 deletion(-) + +commit 0b1708033fbd70913c0938ed6ac05622a6a17ddd +Author: Christian Persch +Date: 2020-05-01 20:03:42 +0200 + + spawn: Fix double-calling of the child setup data destructor + + The problem was that after moving the SpawnContext into the SpawnOperation, + ~SpawnContext of the move source's context called the child setup data destructor + but the data now belongs to the move target. + + Fix this by using a std::shared_ptr. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/237 + + src/spawn.cc | 2 +- + src/spawn.hh | 18 +++++++----------- + 2 files changed, 8 insertions(+), 12 deletions(-) + +commit b1591c62a5018350c7c561bb91ce3733be21b176 +Author: Christian Persch +Date: 2020-05-01 20:03:42 +0200 + + spawn: Use nullptr not NULL + + src/vtepty.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 423c2ff47f44810adcb8fd6591c2bb93e759618f +Author: Christian Persch +Date: 2020-05-01 11:05:04 +0200 + + spawn: Don't change PWD when no cwd is given + + src/spawn.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit bb873963040de80a86b94b8f0c2aec822b82d395 +Author: Christian Persch +Date: 2020-05-01 11:05:04 +0200 + + spawn: Use g_get_environ + + src/spawn.cc | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +commit db0b3d350ebc51355ebaa6c026a16e45fec813fa +Author: Christian Persch +Date: 2020-05-01 10:48:18 +0200 + + glib: glue: Use correct cast + + src/glib-glue.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f35a9e259d93e1c53cdb6f0439873bf3e85ed934 +Author: Christian Persch +Date: 2020-05-01 10:46:43 +0200 + + spawn: Don't try to call null callback + + src/spawn.hh | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit eb8e2ed3923bce8ff5e1fa0d8142bfceb8dc0c70 +Author: Christian Persch +Date: 2020-05-01 10:43:43 +0200 + + spawn: Remove debug leftovers + + src/spawn.hh | 2 -- + 1 file changed, 2 deletions(-) + +commit 52aa14a13fd9fbfdf7c8b50970bc9315c346707d +Author: Christian Persch +Date: 2020-05-01 10:21:16 +0200 + + spawn: Tighten envv precondition check + + src/vtepty.cc | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit 9697d30cead63dfba031d3547140668535395540 +Author: Christian Persch +Date: 2020-05-01 10:21:16 +0200 + + spawn: Add envv precondition check + + Make sure the passed environment contains valid entries in the KEY=VALUE format. + + src/vtegtk.cc | 1 + + src/vtepty.cc | 23 +++++++++++++++++++++++ + src/vteptyinternal.hh | 2 ++ + 3 files changed, 26 insertions(+) + +commit 620923938f6dc82ae06f3c8c5e4d542e283ce183 +Author: Christian Persch +Date: 2020-05-01 10:21:16 +0200 + + widget: Set out param only once + + src/vtegtk.cc | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit 0bc2d7a2c29e5af9751f957c4e49808d47b98c58 +Author: Christian Persch +Date: 2020-04-29 15:01:07 +0200 + + widget: Also set n_matches out param when returning nullptr + + src/vtegtk.cc | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 6ed2ed23e32da468cd94f4f7b4425cdca2fe674f +Author: Christian Persch +Date: 2020-04-29 15:00:17 +0200 + + widget: Also set n_regexes out param on early return + + src/vtegtk.cc | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit eae447e4d22a073bb7cac2ff6937f43747ccbee0 +Author: Christian Persch +Date: 2020-04-29 13:13:40 +0200 + + widget: Fix assertion failure in vte_terminal_event_check_regex_array + + Simply return NULL when n_regexes is 0. + + https://gitlab.gnome.org/GNOME/vte/-/issues/228#note_783787 + + src/vtegtk.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit d4d101d97f0592bf0a1b9b89e4b1cf2c3dc57f9e +Author: Christian Persch +Date: 2020-04-29 00:24:54 +0200 + + widget: Only set out param on success + + src/vtegtk.cc | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +commit 2950eadc52f2648fbf7ee1c39e1c648675f53b29 +Author: Christian Persch +Date: 2020-04-28 23:40:00 +0200 + + widget: Fix some goi annotations + + https://gitlab.gnome.org/GNOME/vte/-/issues/228#note_783408 + + src/vtegtk.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 8ba1ed5c6ece5efae8258723b60bc3b5a24de25f +Author: Christian Persch +Date: 2020-04-28 20:52:35 +0200 + + widget: Add introspectable variant of vte_terminal_event_check_regex_simple + + Based on a patch by Phil Clayton + + Fixes: https://gitlab.gnome.org/GNOME/vte/issues/228 + + doc/reference/vte-sections.txt | 1 + + src/vte/vteterminal.h | 7 ++++++ + src/vtegtk.cc | 49 +++++++++++++++++++++++++++++++++++++++--- + 3 files changed, 54 insertions(+), 3 deletions(-) + +commit 4fd7bd9b2fc07938ffe2840053c4834b5f2bdedb +Author: Christian Persch +Date: 2020-04-28 20:52:35 +0200 + + icu: Add early return for no-change to set_encoding + + Check if the new encoding is the same as the old one, and + return early instead of creating a new converted for the same + charset. This also prevents losing the outgoing queue contents + unnecessarily. + + src/vte.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit aada5503c7d11c4620a27a68f689824fc28f5d58 +Author: Christian Persch +Date: 2020-04-28 20:52:35 +0200 + + spawn: Remove unused member variables + + src/spawn.hh | 2 -- + 1 file changed, 2 deletions(-) + +commit 02e62e293f0a4859326e3274c56db2eae64205c1 +Author: Daniel Mustieles +Date: 2020-04-28 17:54:42 +0200 + + Updated Spanish translation + + po/es.po | 73 +++++++++++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 47 insertions(+), 26 deletions(-) + +commit 464313bb930a6ca3b39a412c5a6e9c020873ce30 +Author: Emin Tufan Çetin +Date: 2020-04-28 12:36:50 +0000 + + Update Turkish translation + + po/tr.po | 72 +++++++++++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 46 insertions(+), 26 deletions(-) + +commit 97839e0f9c9c348dd706a5f694ca3ca62f109458 +Author: Christian Persch +Date: 2020-04-27 22:45:43 +0200 + + spawn: Remove leftover assertions + + src/spawn.cc | 8 -------- + 1 file changed, 8 deletions(-) + +commit b8db038eb9c097f87059c0bfff5fb9a1ff63100b +Author: Yuri Chornoivan +Date: 2020-04-27 20:42:47 +0000 + + Update Ukrainian translation + + po/uk.po | 41 +++++++++++++++++++++++++++++++++++++---- + 1 file changed, 37 insertions(+), 4 deletions(-) + +commit 8aefb5a7d7833dd4a975f7a870283887675ca155 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + lib: Remove unused function + + src/vtespawn.cc | 9 --------- + 1 file changed, 9 deletions(-) + +commit ffedb03dbd0193b19060c4d54125eff0cd7992be +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + app: Use utility function + + src/app/app.cc | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit cf7a90fd03e0f36734a79000456d58421f4e29b8 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + lib: Make argv precondition check tighter + + argv[0] must be non-nullptr too. + + src/app/app.cc | 6 ++++++ + src/vtegtk.cc | 1 + + src/vtepty.cc | 1 + + 3 files changed, 8 insertions(+) + +commit 5454a606442d9da5f3042ce87214abeedb3d969e +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + lib: Move impl for missing libc function to missing.cc + + src/missing.cc | 14 ++++++++++++++ + src/missing.hh | 5 +++++ + src/vtespawn.cc | 5 ++--- + src/vteutils.cc | 13 ------------- + src/vteutils.h | 3 --- + 5 files changed, 21 insertions(+), 19 deletions(-) + +commit 387b0a4924c895d14c5776093274fecd13c23138 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + lib: Remove duplicated code + + src/pty.cc | 29 ++++------------------------- + 1 file changed, 4 insertions(+), 25 deletions(-) + +commit d7a9beeffee2f5177b5fec79cf5cdc8e5bc4f636 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + lib: Move utility function to the file of its only caller + + read_ints is only used in spawn.cc, so move it there. Make a note + that this code is copied from glib. + + po/POTFILES.in | 1 + + src/libc-glue.hh | 57 ++++++++++++++++++----- + src/spawn.cc | 125 ++++++++++++++++++++++++++++++++++++++++++++++++--- + src/vtespawn.cc | 134 ------------------------------------------------------- + src/vtespawn.hh | 8 ---- + 5 files changed, 166 insertions(+), 159 deletions(-) + +commit 69ed779091b4165b8ea3894e4d58b986dde946a5 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + lib: Move fdwalk fallback implementation to its own file + + src/meson.build | 1 + + src/missing.cc | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/missing.hh | 5 ++ + src/spawn.cc | 33 ++++++++++++- + src/spawn.hh | 1 + + src/vtespawn.cc | 139 ---------------------------------------------------- + src/vtespawn.hh | 6 --- + 7 files changed, 186 insertions(+), 147 deletions(-) + +commit af649664497d8e1b0b191705e9f09c019f103d68 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + spawn: Allow passing file descriptors to the child process + + Add vte_pty_spawn_with_fds_async() and vte_terminal_spawn_with_fds_async() + that take an array of file descriptors, and an array of integers specifying + where to assign the file descriptors to in the child process. + + This also fixes the equivalent of gspawn/gsubprocess bug + https://gitlab.gnome.org/GNOME/glib/-/issues/2097 when using + these new functions (e.g. in gnome-terminal). + + doc/reference/vte-sections.txt | 2 + + meson.build | 5 +- + src/app/app.cc | 140 ++++++++++++++++++++++++-- + src/libc-glue.hh | 95 ++++++++++++++++++ + src/pty.cc | 7 +- + src/pty.hh | 2 +- + src/spawn.cc | 221 +++++++++++++++++++++++++++++------------ + src/spawn.hh | 48 ++++++++- + src/vte/vtepty.h | 17 ++++ + src/vte/vteterminal.h | 19 ++++ + src/vtegtk.cc | 123 +++++++++++++++++------ + src/vtepty.cc | 120 +++++++++++++++++----- + src/vteptyinternal.hh | 4 +- + 13 files changed, 665 insertions(+), 138 deletions(-) + +commit fc75bd93068041860276cd8b75d73d2d95dd9667 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + pty: Call grantpt/unlockpt when opening the PTY + + ... instead of in the child after fork. + + This fixes an infrequent deadlock in the NSS code when grantpt + is called in the child while it was in use in another thread in + the parent process. + + Fixes: https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/195 + + src/pty.cc | 34 ++++++++++++++++++++++++---------- + 1 file changed, 24 insertions(+), 10 deletions(-) + +commit 80a583842f9d013f63d80c469c4b7eace2c03414 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + spawn: Rework spawning + + The old spawning code was copied from glib, and used a thread to + make the synchronous variant into an asynchronous one. This had the + problem that fork(3p) was called from the worker thread, not the + calling (main) thread. + + The new code replaces this with a two-stage approach where the + fork takes place on the calling thread, and only the async wait + for the child error is done in a worker thread. + + This also unifies the sync and async spawn variants to use + the exact same code, only called in one or two stages. + + This also removes calls to setenv/unsetenv from the child setup + code, which are not safe to do there. Instead, the environment + is prepared in advance and used via execve(2). + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/118 + + src/app/app.cc | 7 +- + src/glib-glue.hh | 65 ++++++- + src/libc-glue.hh | 13 +- + src/meson.build | 3 + + src/missing.hh | 25 +++ + src/pty.cc | 304 +++---------------------------- + src/pty.hh | 22 +-- + src/refptr.hh | 7 + + src/spawn.cc | 486 ++++++++++++++++++++++++++++++++++++++++++++++++++ + src/spawn.hh | 213 ++++++++++++++++++++++ + src/vte.cc | 4 +- + src/vte/vteterminal.h | 2 +- + src/vtedefines.hh | 4 + + src/vtegtk.cc | 106 +++++------ + src/vtepty.cc | 306 ++++++++++++++----------------- + src/vteptyinternal.hh | 23 +-- + src/vtespawn.cc | 386 ++++++--------------------------------- + src/vtespawn.hh | 32 ++-- + 18 files changed, 1104 insertions(+), 904 deletions(-) + +commit 3911b3ee1a6a00cf78d277812f52df8423bec989 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + docs: Add index for API new in 0.62 + + doc/reference/vte-docs.xml | 4 ++++ + 1 file changed, 4 insertions(+) + +commit ca76aa7678655a0da430a9127a77f7c003bb4a77 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + pty: spawn: Mask vte additions to GSpawnFlags + + src/pty.cc | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) + +commit 02e4d76017e59ef13b3ec0cfc3dc70aa7153c4fb +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + spawn: Use GIOErrorEnum errors to translate errno + + src/vtespawn.cc | 154 ++++++-------------------------------------------------- + 1 file changed, 16 insertions(+), 138 deletions(-) + +commit 7caf60301238a80ce53fc12fff159fbc57bb87df +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + spawn: Remove unnecessary code + + All FDs are CLOEXEC anyway, so there's no need to explicitly close this FD. + + src/vtespawn.cc | 6 ------ + 1 file changed, 6 deletions(-) + +commit f6384bae65e848a8de3167e6f00e083f75aaa3c1 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + spawn: Remove unused parameter and variables + + Vte never uses an intermediate child process. + + src/vtespawn.cc | 17 +++-------------- + 1 file changed, 3 insertions(+), 14 deletions(-) + +commit f0785e0498fe7c7c37416f7d11c2abea5c05edea +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + spawn: Always set FDs CLOEXEC + + src/vtespawn.cc | 26 +++++--------------------- + 1 file changed, 5 insertions(+), 21 deletions(-) + +commit 84d9b5192bb999054e50487ac3b3019068f77371 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + spawn: Remove unused error cases + + src/vtespawn.cc | 19 ------------------- + 1 file changed, 19 deletions(-) + +commit 27766e7f3b10f37e9d15d57bb9cf37e62e87aa34 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + spawn: Remove unused code + + Vte always uses a child setup function, so this code was never executed. + + src/vtespawn.cc | 56 +------------------------------------------------------- + 1 file changed, 1 insertion(+), 55 deletions(-) + +commit 280cf8160122065bd4d82f1828c33c49cfb33485 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + spawn: Remove unused functionality + + Vte always connects stdin, stdout and stderr to the PTY, so + G_SPAWN_STD{OUT,ERR}_TO_DEV_NULL and G_SPAWN_CHILD_INHERITS_STDIN + are not supported. + + src/vtegtk.cc | 10 +++++++++ + src/vtepty.cc | 13 ++++++++++++ + src/vtespawn.cc | 65 +++------------------------------------------------------ + 3 files changed, 26 insertions(+), 62 deletions(-) + +commit f38de6a95228cd250b97610ce5cc4ec99ab91ea8 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + spawn: Whitespace cleanup + + src/vtespawn.cc | 60 ++++++++++++++++++++++++++++----------------------------- + 1 file changed, 30 insertions(+), 30 deletions(-) + +commit 626bebff6dbc641afaf6ede2e1dda2e84f5f0fd0 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + spawn: Remove unused functionality + + src/pty.cc | 38 ++++---- + src/vtespawn.cc | 279 +++++++++++++++----------------------------------------- + src/vtespawn.hh | 14 --- + 3 files changed, 91 insertions(+), 240 deletions(-) + +commit 877d5b298160f02a4caa29b043aa2f24672e8402 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + pty: Don't fail init when passed a cancellable + + src/vtepty.cc | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +commit 12097b6c5135745de8cc756e02cad16f536cb33e +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + pty: Add link to some docs + + src/pty.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit c9dc0863888e536f002059550e205cdc1c03d701 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + pty: Split getting PTY peer FD out of child setup + + It will be needed separately when spawning via the portal. + + src/pty.cc | 190 ++++++++++++++++++++++++++++++++----------------------------- + src/pty.hh | 2 + + 2 files changed, 103 insertions(+), 89 deletions(-) + +commit e3bc90a3d60884e7f230d093bcb60625e0b1dcde +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + lib: Make FD helper class less magic + + Remove operator int() and operator int*(), and add operator bool() + and an explicit get(). + + src/libc-glue.hh | 9 +++++++-- + src/pty.cc | 58 ++++++++++++++++++++++++++++---------------------------- + src/pty.hh | 6 +++--- + 3 files changed, 39 insertions(+), 34 deletions(-) + +commit 328ac0df7f98f51a8251fd88e819160ec362ea91 +Author: Christian Persch +Date: 2020-04-27 20:49:04 +0200 + + lib: Rename some helper classes + + Move smart FD and errno helper classes to its own header, and + rename them. + + src/libc-glue.hh | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/meson.build | 8 +++-- + src/pty.cc | 36 +++++++++---------- + src/pty.hh | 7 ++-- + src/vtepty.cc | 13 +++---- + src/vtetypes.cc | 27 ++------------ + src/vtetypes.hh | 36 ------------------- + 7 files changed, 144 insertions(+), 88 deletions(-) + +commit 344c2e77e9fdbc19f4c213c23b7bf91e93a9f7aa +Author: Christian Persch +Date: 2020-04-25 12:28:14 +0200 + + icu: glue: Set error callback on the from-unicode conversion + + The from-unicode side of the converter is only used on user input + (keyboard, IM, clipboard paste). When it receives input not representable + in the target encoding, it inserts the substitution character of the + target encoding, which in many cases is U+001A. However, when sent to a + PTY, that is interpreted as Ctrl-Z. + + Instead, set the from-unicode converter to error out when encountering + such unrepresentable input. + + Fixes: https://gitlab.gnome.org/GNOME/vte/issues/233 + + src/icu-glue.cc | 27 ++++++++++++++++++++++++++- + 1 file changed, 26 insertions(+), 1 deletion(-) + +commit 19c9401788880debb852bc3a93df1cd99dad5192 +Author: Christian Persch +Date: 2020-04-25 09:29:35 +0200 + + lib: Fix switching between legacy encodings + + Need to switch encoders when changing the encoding between + two legacy encodings. + + Fixes: https://gitlab.gnome.org/GNOME/vte/issues/232 + + src/vte.cc | 31 ++++++++++++++++--------------- + 1 file changed, 16 insertions(+), 15 deletions(-) + +commit 408a041584c5c10a6b8d133495078851d44730e6 +Author: Yuri Chornoivan +Date: 2020-04-25 07:04:31 +0000 + + Update Ukrainian translation + + po/uk.po | 130 ++++++++------------------------------------------------------- + 1 file changed, 16 insertions(+), 114 deletions(-) + +commit 9a21d415720a9c1981c29429e32a6521de056a99 +Author: Christian Persch +Date: 2020-04-23 00:06:04 +0200 + + widget: Set error from vte_terminal_set_encoding when built without ICU + + src/vte.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 262c45090dc5557732337517422f7da9bf9069bb +Author: Christian Persch +Date: 2020-04-22 23:44:54 +0200 + + all: Fix the build without ICU + + src/decoder-cat.cc | 23 +++++++++++++++++++++-- + src/meson.build | 6 +++++- + src/vte.cc | 4 ++++ + 3 files changed, 30 insertions(+), 3 deletions(-) + +commit 276d06cf3238e2de2869493575ad7eb0f323058b +Author: Christian Persch +Date: 2020-04-20 23:19:43 +0200 + + docs: Add index for API new in 0.60 + + doc/reference/vte-docs.xml | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 663983a1d38c782c73bb9af640d6e0beb26e86f6 +Author: Christian Persch +Date: 2020-04-19 20:03:35 +0200 + + glib: glue: Set source names for debug + + https://gitlab.gnome.org/GNOME/vte/-/issues/231 + + src/glib-glue.hh | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +commit a201edeee522d7153ae4a3b7b2ee5e67dfe2eb86 +Author: Christian Persch +Date: 2020-04-09 11:43:19 +0200 + + lib: Fix exception thrown from std::clamp + + Add vte::clamp which doesn't throw when max +Date: 2020-04-02 18:20:44 +0200 + + widget: Improve legibility when using colours from the system theme + + https://gitlab.gnome.org/GNOME/vte/-/issues/225 + + src/vtegtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 42f256b3a04ceb41e4e39c442ffe96a06d417e73 +Author: Christian Persch +Date: 2020-04-02 21:59:50 +0200 + + app: Add options to use theme colours + + src/app/app.cc | 31 +++++++++++++++++++++++++++++-- + 1 file changed, 29 insertions(+), 2 deletions(-) + +commit b9adc08edf2899b7f66fa03a86eb0f208c69a6bd +Author: Christian Persch +Date: 2020-03-29 23:27:57 +0200 + + docs: Add regex flag requirements + + Fixes: https://gitlab.gnome.org/GNOME/vte/issues/223 + + src/vtegtk.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit f0162eaf518ee260d08b7a794ff6f493df356433 +Author: Christian Persch +Date: 2020-03-29 23:27:57 +0200 + + docs: Add regex flag requirements + + Fixes: https://gitlab.gnome.org/GNOME/vte/issues/223 + + src/vtegtk.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 8efe867a817107f92e7b8663ee881bb8e4049e43 +Author: Christian Persch +Date: 2020-03-29 23:27:57 +0200 + + bindings: gir: Add missing file to extract source comments and annotations from + + src/meson.build | 1 + + 1 file changed, 1 insertion(+) + +commit 277ee003066b3993cf6d55a05606009caac69015 +Author: Christian Persch +Date: 2020-03-26 18:18:51 +0100 + + widget: Emit the ::commit signal even when the terminal has no PTY + + Some users drive VteTerminal entirely with vte_terminal_feed/feed_child(), + e.g. qemu, and they rely on the ::commit signal to read the user input. + So for now, restore the signal emission. + + Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/222 + + src/vte.cc | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +commit 12814a1dfd33018268af10d257e96bb78bdcf5b8 +Author: Christian Persch +Date: 2020-03-24 20:22:08 +0100 + + app: Fix --no-pty mode thinko + + src/app/app.cc | 36 ++++++++++++++---------------------- + 1 file changed, 14 insertions(+), 22 deletions(-) + +commit 628273d8a86b3638808303dd4ffa7dc8332917b9 +Author: Christian Persch +Date: 2020-03-24 19:55:09 +0100 + + app: Add mode to test operation without a PTY + + Add --no-pty which together with --no-shell tests the mode where + vte is driven entirely from vte_terminal_feed(). + + src/app/app.cc | 35 +++++++++++++++++++++++++++++++++-- + 1 file changed, 33 insertions(+), 2 deletions(-) + +commit fd91213485aff9304403f34f1bdaf9f67bca646c +Author: Christian Persch +Date: 2020-03-24 19:10:32 +0100 + + app: Add test for vte_terminal_feed_child + + When passed --feed-stdin, read data from stdin and write it to + the terminal with vte_terminal_feed_child(). + + src/app/app.cc | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 79 insertions(+) + +commit 070085ea5d7e7dab48b0b8780add3e782948d025 +Author: Christian Persch +Date: 2020-03-22 23:46:43 +0100 + + build: Keep files list sorted + + src/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e44aac2dc0a545277b2cc206203000f394296bb7 +Author: Christian Persch +Date: 2020-03-22 23:34:40 +0100 + + bindings: gir: Fix VtePty + + The build was missing the annotations for VtePty since it was moved + into a new file. + + https://gitlab.gnome.org/GNOME/vte/issues/221 + + src/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d77d42c6d556a961ad99b682e1b65b5e6aecc979 +Author: Egmont Koblinger +Date: 2020-03-13 16:30:50 +0100 + + vte.csh: Fix the behavior if VTE_VERSION is undefined + + https://gitlab.gnome.org/GNOME/vte/issues/217 + + src/vte.csh.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 288e5f0e303651e9fa9791b9c227895354cae07c +Author: Christian Persch +Date: 2020-02-29 20:42:23 +0100 + + Post branch version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f843b12cf3375876d5b04b4d37da3fb3e5a73e2c (tag: 0.59.92) +Author: Christian Persch +Date: 2020-02-29 20:36:25 +0100 + + Version 0.59.92 + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ff88e5aa067850430f8d222de70b5f8a243b2183 +Author: Jor Teron +Date: 2020-02-23 07:20:51 +0000 + + Update Karbi translation + + po/mjw.po | 30 ++++++++---------------------- + 1 file changed, 8 insertions(+), 22 deletions(-) + +commit bc2ff07dc24ca1f20e7023c21c9f104881785498 +Author: Christian Persch +Date: 2020-02-19 21:41:22 +0100 + + app: Add option to disable scrollbar + + src/app/app.cc | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit 215b0605773d0351b1ae05d32c29dfda09b869eb +Author: Christian Persch +Date: 2020-02-19 21:41:22 +0100 + + lib: Use g_propagate_error here + + src/glib-glue.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b7d8f5ba7f44d11ff7ee2982260431ad7c9b43fe +Author: Zander Brown +Date: 2020-02-19 19:18:33 +0000 + + Update British English translation + + po/en_GB.po | 38 ++++++++++++++++++++------------------ + 1 file changed, 20 insertions(+), 18 deletions(-) + +commit adedb9c5ef222d52c6f66e3140de4d3cd4b7bc3d +Author: Christian Persch +Date: 2020-02-17 20:57:29 +0100 + + emulation: Remove 'separated mosaic' SGR + + This needs to be discussed in terminal-wg before we commit + to the new SGR numbers. + + src/attr.hh | 8 +--- + src/cell.hh | 1 - + src/parser-sgr.hh | 2 - + src/vte.cc | 3 +- + src/vtedraw.cc | 108 ------------------------------------------------------ + src/vteseq.cc | 6 --- + 6 files changed, 2 insertions(+), 126 deletions(-) + +commit e1162ba50d9eced3503c5b7473c1b7ea178fda21 +Author: Christian Persch +Date: 2020-03-10 00:00:00 +0100 + + draw: Enable unicode 13 legacy terminal characters + + Enable custom drawing of new characters U+1FB00..U+1FBBF from the + unicode 13.0 Symbols for Legacy Computing block. + + src/vtedraw.cc | 26 ++------------------------ + 1 file changed, 2 insertions(+), 24 deletions(-) + +commit 34cf6f5717d1404c2d8902cb8710aa5ab78c9950 +Author: Christian Persch +Date: 2020-02-16 12:57:18 +0100 + + draw: Add extra define for separated mosaic drawing + + The new Unicode 13.0 characters will be enabled soon, but the + separated mosaic drawing will need to be proposed to terminal-wg + before we can enable this in a release. + + src/vtedraw.cc | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 81bd158c24ef1d716d3cbf801e72fda2e11b81b4 +Author: Christian Persch +Date: 2020-02-16 12:37:47 +0100 + + build: systemd: Add option to disable systemd support + + meson.build | 5 ++++- + meson_options.txt | 7 +++++++ + src/meson.build | 4 ++-- + src/pty.cc | 11 +++++++---- + src/vtegtk.cc | 8 ++++++++ + 5 files changed, 28 insertions(+), 7 deletions(-) + +commit 83626eb775fe856e1cdbd5c35a58bb30b9ced845 +Author: Christian Persch +Date: 2020-02-15 20:44:13 +0100 + + Post release version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a444c23eca931cadad321eaf06bc9c437ed9cee3 (tag: 0.59.91) +Author: Christian Persch +Date: 2020-02-15 20:39:42 +0100 + + Version 0.59.91 + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 12a54279ce70874d3b50540c1ef64f87e2240b37 +Author: Christian Persch +Date: 2020-02-15 20:38:32 +0100 + + pty: Reduce wait-for-EOS time to 2 seconds + + This should make the delay less noticeable while still allowing to read + all data from the recently exited child process. + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 81c7d901f7b3e9f961cb1113251a46af6d56b783 +Author: Christian Persch +Date: 2020-02-05 18:27:22 +0100 + + build: Fix libsystemd req version + + sd_pid_get_user_slice() was added in 220, so change the minimum dep version to that. + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1ea1c0495dc5b51f5228eecd84d1c3e3aca98613 +Author: Christian Persch +Date: 2020-02-04 18:13:47 +0100 + + systemd: Put child process into the parent's slice + + src/systemd.cc | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +commit 9e8168d9e510388842c09296e5beea0c7ec8bcff +Author: Christian Persch +Date: 2020-02-04 18:13:47 +0100 + + systemd: Install config drop-in for vte-spawn-.scope + + meson.build | 4 ++++ + src/meson.build | 10 ++++++++++ + src/systemd.cc | 1 - + src/vte-spawn-.scope.conf | 6 ++++++ + 4 files changed, 20 insertions(+), 1 deletion(-) + +commit 1d488966c70f97a86962e0f4a470451bf1cd223d +Author: Christian Persch +Date: 2020-02-04 18:13:47 +0100 + + systemd: Add systemd support + + Move newly created child processes into their own systemd user scope. + Apparently this is required so that when the OOM killer catches one + of gnome-terminal-server's child processes, it doesn't also kill + gnome-terminal-server itself and thus all and every terminals in it. + + Fixes: https://gitlab.gnome.org/GNOME/gnome-terminal/issues/206 + https://bugzilla.gnome.org/show_bug.cgi?id=744736 + https://bugzilla.redhat.com/show_bug.cgi?id=1796828 + + doc/reference/vte-sections.txt | 2 + + meson.build | 15 ++++-- + src/app/app.cc | 11 ++++- + src/meson.build | 10 ++++ + src/pty.cc | 61 ++++++++++++++++++------ + src/systemd.cc | 104 +++++++++++++++++++++++++++++++++++++++++ + src/systemd.hh | 33 +++++++++++++ + src/vte/vtepty.h | 4 +- + src/vtegtk.cc | 13 +++++- + src/vtepty.cc | 34 ++++++++++++++ + 10 files changed, 266 insertions(+), 21 deletions(-) + +commit 427eebbf210c0d090abe8f220e4dac7fc1021bb5 +Author: Christian Persch +Date: 2020-02-04 18:13:47 +0100 + + pty: Document VTE_SPAWN_NO_PARENT_ENVV + + doc/reference/vte-sections.txt | 1 + + src/vtepty.cc | 11 +++++++++++ + 2 files changed, 12 insertions(+) + +commit 27804390ee936ae79b973f3128db1d88b137710c +Author: Christian Persch +Date: 2020-02-04 18:13:47 +0100 + + lib: Add smart pointer for g_free()able things + + src/glib-glue.hh | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +commit c4f90c53cb1f2267eb7b7de9dc834ac17720f51b +Author: Christian Persch +Date: 2020-02-01 00:00:00 +0100 + + emulation: Remove support for obsolete charset + + https://bugzilla.gnome.org/show_bug.cgi?id=732586#c5 + + src/vte.cc | 3 --- + src/vteinternal.hh | 3 +-- + src/vteseq.cc | 7 ------- + 3 files changed, 1 insertion(+), 12 deletions(-) + +commit 4e3f29303b6f0234a47b159c932bc075ee4d455e +Author: Umarzuki Bin Mochlis Moktar +Date: 2020-01-27 12:34:24 +0000 + + Update Malay translation + + po/ms.po | 135 +++++++++++++++++++++++++-------------------------------------- + 1 file changed, 53 insertions(+), 82 deletions(-) + +commit 3bd204b9400650ff75197b4a1ab65711a58b5388 +Author: Carlos Santos +Date: 2020-01-22 18:06:28 +0100 + + vte.sh: Add vte.csh, a tcsh counterpart of vte.sh + + Use vte-urlencode-cwd in the precmd alias. This overrides an existing precmd + and can also be overriten, like happens with the PROMPT_COMMAND variable + in vte.sh. + + Fixes: https://gitlab.gnome.org/GNOME/vte/issues/206 + + src/meson.build | 10 ++++++++++ + src/vte.csh.in | 24 ++++++++++++++++++++++++ + 2 files changed, 34 insertions(+) + +commit 115db9c2b4d07ab7bcd98c287c39854649bd2750 +Author: Carlos Santos +Date: 2020-01-22 18:06:28 +0100 + + vte.sh: Use the vte-urlencode utility + + Drop the __vte_urlencode function and use the vte-urlencode-cwd utility, + instead of it, in __vte_osc7. + + Also call __vte_osc7 directly in __vte_prompt_command, instead of in a + subshell, avoiding an extra fork. + + Drop the __vte_urlencode test, since the function does not exist anymore + and vte-urlencode-cwd has its own test. + + https://gitlab.gnome.org/GNOME/vte/issues/206 + + src/meson.build | 32 +++++--------------- + src/test-vte-sh.sh | 75 ----------------------------------------------- + src/{vte.sh => vte.sh.in} | 24 +++------------ + 3 files changed, 11 insertions(+), 120 deletions(-) + +commit f997bcb8a7623b813c00b9e0c15923e7c4ed3360 +Author: Carlos Santos +Date: 2020-01-22 18:06:28 +0100 + + prompt: Add a test for the vte-urlencode-cwd utility + + Copy src/test-vte-sh.sh to src/test-vte-urlencode.sh and adapt it to set + PWD before running vte-urlencode-cwd instead of passing the path as argument + to the __vte_urlencode function. + + https://gitlab.gnome.org/GNOME/vte/issues/206 + + src/meson.build | 12 +++++++ + src/test-vte-urlencode-cwd.sh | 80 +++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 92 insertions(+) + +commit 4c02a3e89eab6da68b63832ef7d6d5c5a2e7654a +Author: Carlos Santos +Date: 2020-01-22 18:06:28 +0100 + + prompt: Add a vte-urlencode-cwd utility + + This will be used by the shell prompt command to url-encode the + current directory (taken from PWD). + + https://gitlab.gnome.org/GNOME/vte/issues/206 + + src/meson.build | 17 +++++++++++++++++ + src/urlencode.cc | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 70 insertions(+) + +commit 8f5724c2d9d6bb00966a705ac7ea535fe8b4bbb4 +Author: Zander Brown +Date: 2020-01-20 21:55:24 +0100 + + widget: Set terminal input purpose + + This enables OSKs to show keys not usually shown, like Control. + + Fixes: https://gitlab.gnome.org/GNOME/vte/issues/212 + + src/widget.cc | 5 +++++ + 1 file changed, 5 insertions(+) + +commit dc9c6614b0bf4b02f810b53880ce139b2bbba0de +Author: Dušan Kazik +Date: 2020-01-20 17:08:30 +0000 + + Update Slovak translation + + po/sk.po | 47 ++++++++++++++++++----------------------------- + 1 file changed, 18 insertions(+), 29 deletions(-) + +commit ca4b833b306eeea94058a19be5e7cdfdf9756966 +Author: Christian Persch +Date: 2019-12-01 23:59:31 +0100 + + lib: Add missing noexcept + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 058adf5f924cce9ee1e6da2d8f3909c441d90ec1 +Author: Christian Persch +Date: 2019-12-01 22:58:51 +0100 + + pty: Fix indefinite wait for EOS after child-exited + + When the child process exits, we wait for EOF on the PTY, so that we + can read and process any data already emitted by the child process but + not read yet at that time. + + However that leads to a problem when the child process created child + processes of its own that inherited the PTY as stdin/out/err, which keeps + the PTY open and thus we get no EOF until all such processes have exited. + + To work around this, install a timeout when the child process exits, and + when the timer times out, fake en EOF. + + https://gitlab.gnome.org/GNOME/vte/issues/204 + + src/glib-glue.hh | 4 ++-- + src/vte.cc | 29 +++++++++++++++++++++++++++++ + src/vteinternal.hh | 4 ++++ + 3 files changed, 35 insertions(+), 2 deletions(-) + +commit fbdaa7c71b0a79bee9a8b638c4b96854be519473 +Author: Christian Persch +Date: 2019-12-01 22:58:51 +0100 + + lib: Use Timer class for mouse autoscroll timer + + src/vte.cc | 45 +++++++++------------------------------------ + src/vteinternal.hh | 8 +++++--- + 2 files changed, 14 insertions(+), 39 deletions(-) + +commit 0746dad188a3c3337dff01474aa586edafcf615c +Author: Christian Persch +Date: 2019-12-01 22:58:51 +0100 + + lib: Use Timer class for text blink timer + + src/vte.cc | 39 +++++++++++++-------------------------- + src/vteinternal.hh | 11 ++++++----- + 2 files changed, 19 insertions(+), 31 deletions(-) + +commit b80417fc07b279ffb1fa8507f65ad8327546854b +Author: Christian Persch +Date: 2019-12-01 22:58:51 +0100 + + lib: Use Timer class for cursor blink timer + + src/vte.cc | 36 ++++++++++-------------------------- + src/vteinternal.hh | 11 +++++++---- + 2 files changed, 17 insertions(+), 30 deletions(-) + +commit 87546597ea47ab952766a099c07de547a95c2d40 +Author: Christian Persch +Date: 2019-12-01 22:58:51 +0100 + + lib: Add convenience class for timeouts + + src/glib-glue.hh | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 125 insertions(+) + +commit f3f7fd4e1b550e22fd6f92d9c5579d23ade81f4c +Author: Christian Persch +Date: 2019-12-01 22:58:51 +0100 + + lib: Add GError convenience class + + src/app/app.cc | 90 ++++++++++++++++++++++++----------------------------- + src/app/meson.build | 2 +- + src/decoder-cat.cc | 8 ++--- + src/glib-glue.hh | 59 +++++++++++++++++++++++++++++++++++ + src/meson.build | 14 ++++++--- + src/parser-cat.cc | 8 ++--- + src/pty.cc | 15 ++++----- + src/vtegtk.cc | 14 +++------ + 8 files changed, 130 insertions(+), 80 deletions(-) + +commit 9a6dded6e975e11877976ca46713644d4e4adaae +Author: Christian Persch +Date: 2019-11-27 19:16:57 +0100 + + regex: Use string_view and optional + + src/regex.cc | 63 +++++++++++++++++++++++++++++---------------------------- + src/regex.hh | 9 +++++---- + src/vteregex.cc | 3 ++- + 3 files changed, 39 insertions(+), 36 deletions(-) + +commit 61e41f1fab719c0d288dc4fe4f43798bd93eb8bd +Author: Christian Persch +Date: 2019-11-27 19:16:57 +0100 + + regex: Use string_view + + src/regex.cc | 8 +++----- + src/regex.hh | 4 ++-- + src/vteregex.cc | 11 ++++++----- + 3 files changed, 11 insertions(+), 12 deletions(-) + +commit c33f440f867d210f03d8378a11c758a406234dd4 +Author: Christian Persch +Date: 2019-11-26 19:24:00 +0100 + + pty: Add debug output for when EOS happens + + src/vte.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit a0bb8222f3a0a29e4f22817bf3d7053d185b7afb +Author: Christian Persch +Date: 2019-11-26 19:24:00 +0100 + + widget: Finish deprecation of GRegex taking APIs + + Using GRegex with vte has been deprecated since version 0.46. + Now remove the internal translation from GRegex to PCRE2, making + making all public API taking GRegex simple no-ops. + + src/app/app.cc | 85 +++++++++++++---------------------------------- + src/regex.cc | 1 - + src/vtegtk.cc | 34 +++---------------- + src/vteregex.cc | 87 ------------------------------------------------- + src/vteregexinternal.hh | 6 ---- + 5 files changed, 27 insertions(+), 186 deletions(-) + +commit 596a581540f0f3789ad526ab075265f8ec35c800 +Author: Christian Persch +Date: 2019-11-26 19:24:00 +0100 + + parser: Small documentation addition + + src/parser.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 26bc760d0944232e2d18640b294edf058c9a936c +Author: Christian Persch +Date: 2019-11-24 19:15:34 +0100 + + emulation: Remove support for window control sequences + + Remove support for raising/lowering, iconify/deiconify and maximise/restore, + and to move the window. + + Remove support for refresh. Vte tracks which areas need to be repainted; so + there is *never* a need for the application to tell vte to repaint everything. + + https://gitlab.gnome.org/GNOME/vte/issues/128 + + src/vte.cc | 3 ++ + src/vtegtk.cc | 32 +++++++++++---- + src/vteinternal.hh | 12 ++---- + src/vteseq.cc | 115 ++++------------------------------------------------- + 4 files changed, 37 insertions(+), 125 deletions(-) + +commit 901c7739362d4b6228897486c127bdbe6ba3a7df +Author: Christian Persch +Date: 2019-11-22 22:35:32 +0100 + + emulation: Report fixed origin for CSI 13 t + + https://gitlab.gnome.org/GNOME/vte/issues/128 + + src/vteseq.cc | 13 ++----------- + 1 file changed, 2 insertions(+), 11 deletions(-) + +commit b1af917ffbccb516e8cdbb4c624c39615444c423 +Author: Christian Persch +Date: 2019-11-21 22:02:51 +0100 + + draw: Fix unused function warning + + src/vtedraw.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit ea96b074c0a599c275ab7bfede5eda7a23b2440d +Author: Christian Persch +Date: 2019-11-21 20:52:27 +0100 + + draw: Use functions instead of macros + + src/vtedraw.cc | 244 +++++++++++++++++++++++++++++++-------------------------- + 1 file changed, 132 insertions(+), 112 deletions(-) + +commit f39fc152929f8f02ddc631c64afc4dfac59f9fe7 +Author: Christian Persch +Date: 2019-11-21 20:52:27 +0100 + + draw: Make some data static and shrink it + + Use int8_t where possible instead of wasting space for a full int. + + src/vtedraw.cc | 46 ++++++++++++++++++++++------------------------ + 1 file changed, 22 insertions(+), 24 deletions(-) + +commit 76571681c1e5f176d694e62b2c38c9f7eba14165 +Author: Christian Persch +Date: 2019-11-21 20:52:27 +0100 + + draw: Narrow the range of characters in the U+1FBxx block + + Don't include unallocated characters, and also exclude the 7-segment + numbers which can be drawn just fine using a font. + + src/vtedraw.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e3718ee42cfca70fe2aeed5aa9eefc1d36aae8f9 +Author: Christian Persch +Date: 2019-11-21 20:52:27 +0100 + + draw: Implement U+1FBAF + + doc/boxes.txt | 5 +++++ + src/vtedraw.cc | 7 +++++++ + 2 files changed, 12 insertions(+) + +commit df35de1bd58ffa81f7d12ae1f801bb578c9dfd72 +Author: Christian Persch +Date: 2019-11-21 20:52:27 +0100 + + draw: Improve diagnoals drawing + + Make the diagonals contiguous by allowing them to slightly extend + outside the cell on the left and right. + + src/vtedraw.cc | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +commit 5a2a631cc10a52bc5df93a54051a10406cf59321 +Author: Christian Persch +Date: 2019-11-21 20:52:27 +0100 + + draw: Make new diagonal characters align better with box drawings + + Make the new diagonal characters align with the horizontal and + vertical box drawing characters, by making them have a square end. + + src/vtedraw.cc | 31 +++++++++++++++++++++---------- + 1 file changed, 21 insertions(+), 10 deletions(-) + +commit e9ba527edf8bd6727ba117834b82c25e57e362b3 +Author: Christian Persch +Date: 2019-11-21 20:52:27 +0100 + + draw: Use binary notation for some constants + + src/vtedraw.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit a782f9663890e12c1643199c4c274394e0da298a +Author: Christian Persch +Date: 2019-11-21 20:52:27 +0100 + + draw: Change checkboard pattern + + Use a checkboard fill pattern, instead of + a fixed 4x4 checkerboard. + + doc/boxes.txt | 11 ++++++----- + src/vtedraw.cc | 30 +++++++++++++++++++----------- + 2 files changed, 25 insertions(+), 16 deletions(-) + +commit 5d15b75141a869c37c9354698152390943d3b5b8 +Author: Christian Persch +Date: 2019-11-21 20:52:27 +0100 + + draw: Implement hatching pattern characters U+1FB98 and U+1FB99 + + doc/boxes.txt | 8 ++++++-- + src/vtedraw.cc | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 65 insertions(+), 2 deletions(-) + +commit 0f87a6a67884e4a5b54838739a4f74e64a49c989 +Author: Christian Persch +Date: 2019-11-21 20:52:27 +0100 + + draw: Implement separated mosaic graphics + + https://gitlab.gnome.org/GNOME/vte/issues/189 + + src/attr.hh | 10 ++++- + src/cell.hh | 3 +- + src/parser-sgr.hh | 2 + + src/vte.cc | 4 +- + src/vtedraw.cc | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- + src/vtedraw.hh | 2 + + src/vteseq.cc | 6 +++ + 7 files changed, 147 insertions(+), 8 deletions(-) + +commit de627cebda608313f2b76d9f616a8c0c25c74554 +Author: Egmont Koblinger +Date: 2019-11-21 20:52:27 +0100 + + draw: Add manual drawing for new legacy terminal unicode characters + + This adds support for the new characters in the U+1FB00 block. + + https://gitlab.gnome.org/GNOME/vte/issues/189 + + doc/boxes.txt | 208 ++++++++++++-- + perf/1fb.sh | 13 + + perf/checkered.sh | 24 ++ + perf/line-drawing-missing.sh | 6 + + src/vtedraw.cc | 655 ++++++++++++++++++++++++++++++++++++++----- + 5 files changed, 821 insertions(+), 85 deletions(-) + +commit def6a1c39389e12e0b7d24e024b8d1b3931f7975 +Author: Christian Persch +Date: 2019-11-21 20:01:30 +0100 + + widget: Add missing (nullable) annotations + + Fixes https://gitlab.gnome.org/GNOME/vte/issues/190 + + src/vtegtk.cc | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +commit 5ad5aea9f9ad3dc0fc3f04b9301c560b9cf86806 +Author: Christian Persch +Date: 2019-11-21 20:01:30 +0100 + + terminal: Don't append data to sealed chunks + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 60c0c3423c43fa1f64d1c50452197db43e51bbe6 +Author: Christian Persch +Date: 2019-11-21 20:01:30 +0100 + + terminal: Use smart pointer + + src/vte.cc | 22 +++++++--------------- + src/vteinternal.hh | 5 +++-- + src/widget.cc | 15 ++++++++------- + 3 files changed, 18 insertions(+), 24 deletions(-) + +commit c78e6d9824b65670126c8431bb08e9e31284ce69 +Author: Christian Persch +Date: 2019-11-21 20:01:30 +0100 + + terminal: Use string_view + + src/vte.cc | 2 +- + src/vteinternal.hh | 2 +- + src/widget.cc | 3 +++ + 3 files changed, 5 insertions(+), 2 deletions(-) + +commit bc680aaa835daed9ed8cc0e4b9f2e1dfa4848afb +Author: Christian Persch +Date: 2019-11-21 20:01:30 +0100 + + terminal: Skip commit signal emission when there are no handlers + + src/vte.cc | 3 +++ + src/widget.cc | 9 +++++++++ + src/widget.hh | 2 ++ + 3 files changed, 14 insertions(+) + +commit 44c6c0610e9305efd04c00ac06de30e5a47b4852 +Author: Christian Persch +Date: 2019-11-21 20:01:30 +0100 + + terminal: Remove some incorrect doc comments + + src/vte.cc | 4 +--- + src/vtegtk.cc | 7 ++----- + 2 files changed, 3 insertions(+), 8 deletions(-) + +commit fcbf3e9640f6aa98473ee0471c13343a9df133da +Author: Christian Persch +Date: 2019-11-21 20:01:30 +0100 + + terminal: Use string_view + + src/icu-converter.cc | 11 ++++----- + src/icu-converter.hh | 3 +-- + src/keymap.cc | 4 +-- + src/keymap.h | 4 +-- + src/vte.cc | 69 +++++++++++++++++----------------------------------- + src/vteinternal.hh | 8 ++---- + 6 files changed, 34 insertions(+), 65 deletions(-) + +commit ea22c881641d3bf99525d0b459c8f18dc5facdae +Author: Christian Persch +Date: 2019-11-21 20:01:30 +0100 + + terminal: Use string_view + + src/vte.cc | 105 +++++++++++++++++++++-------------------------------- + src/vtegtk.cc | 17 +++++++-- + src/vteinternal.hh | 12 +++--- + src/widget.hh | 4 ++ + 4 files changed, 65 insertions(+), 73 deletions(-) + +commit bd108b0845609079961bbd42701518b0b0b8c3ef +Author: Christian Persch +Date: 2019-11-21 20:01:30 +0100 + + terminal: Use string_view + + src/vte.cc | 18 ++++++++++++++---- + src/vteinternal.hh | 3 ++- + src/widget.cc | 3 +++ + 3 files changed, 19 insertions(+), 5 deletions(-) + +commit 4af0f18d5fb35a15c5b7003ccd4b2fcc7a98af53 +Author: Christian Persch +Date: 2019-11-21 20:01:30 +0100 + + terminal: Remove redundant function + + feed_child_using_modes was redundant with send_child since the + removal of SRM mode. + + src/vte.cc | 17 +++-------------- + src/vteinternal.hh | 2 -- + 2 files changed, 3 insertions(+), 16 deletions(-) + +commit e472bb2ad7010c5bf4daa62f81467f193f2a6308 +Author: Christian Persch +Date: 2019-11-19 18:43:17 +0100 + + widget: Emit EOF signal from idle handler + + Fixes a crash in xfce terminal which destroys the terminal from + its EOF signal handler. + + src/vte.cc | 22 +++++++++++++++++++++- + src/vteinternal.hh | 1 + + 2 files changed, 22 insertions(+), 1 deletion(-) + +commit 18d9763db20dbcadd1fd825552ee5655d0f42fa5 +Author: Christian Persch +Date: 2019-11-19 18:30:44 +0100 + + widget: Fix crash using nullptr for word char exceptions + + Constructing a std::string_view with nullptr works here, but it is + undefined behaviour and does crash on other distros. + + src/vte.cc | 7 ++----- + src/vtegtk.cc | 3 ++- + src/vteinternal.hh | 2 +- + src/widget.cc | 8 ++++---- + src/widget.hh | 7 ++++--- + 5 files changed, 13 insertions(+), 14 deletions(-) + +commit 624aadb5793dafe4352aa37405c9e4a67bae6c7c +Author: Egmont Koblinger +Date: 2019-11-19 14:16:31 +0100 + + build: Suppress warnings about ignored returned value + + src/decoder-cat.cc | 3 +++ + src/parser-cat.cc | 3 +++ + 2 files changed, 6 insertions(+) + +commit d6ac3668272a7bdaf65b47243af8ba900231af0b +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Use an enum class for selection type + + src/vte.cc | 20 ++++++++++---------- + src/vteinternal.hh | 18 +++++++++--------- + 2 files changed, 19 insertions(+), 19 deletions(-) + +commit b62c7ffa28288a5311f83b240ff7d0d82297943c +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Move enums used in only one file into it + + src/vteinternal.hh | 27 --------------------------- + src/vteseq.cc | 27 +++++++++++++++++++++++++++ + 2 files changed, 27 insertions(+), 27 deletions(-) + +commit 0a96b927dc1a282175c6b395594c31b642555270 +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Use an enum class for mouse tracking mode + + src/vte.cc | 18 +++++++++--------- + src/vteinternal.hh | 22 +++++++++++----------- + src/vteseq.cc | 14 +++++++------- + 3 files changed, 27 insertions(+), 27 deletions(-) + +commit 61645124479367bcdb38ae00b39ec0956e59de68 +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Remove unused enum + + src/vteinternal.hh | 6 ------ + 1 file changed, 6 deletions(-) + +commit 1b3a87e552a2f44b4b389a40ce1d2948a138cd64 +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Remove double-initialisation + + src/vte.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit b99ba4e12989d492005859a55b804bc2d4242f72 +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Use an enum class for erase bindings + + src/vte.cc | 28 ++++++++++++---------------- + src/vtegtk.cc | 8 ++++---- + src/vteinternal.hh | 19 +++++++++++++++---- + src/widget.hh | 6 ++++++ + 4 files changed, 37 insertions(+), 24 deletions(-) + +commit c07bd83c35df3d10f543756a5a4c6749f959c5d9 +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Store word chars exceptions string in Widget + + src/vte.cc | 61 +++++++++++++++++++----------------------------------- + src/vtegtk.cc | 5 ++--- + src/vteinternal.hh | 9 ++++---- + src/widget.cc | 14 +++++++++++++ + src/widget.hh | 5 +++++ + 5 files changed, 46 insertions(+), 48 deletions(-) + +commit 6a7bd15672fddd32bdbb86146361c33d67ede9bf +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Use an enum class for text blink mode + + src/vte.cc | 13 ++++++------- + src/vtegtk.cc | 4 ++-- + src/vteinternal.hh | 13 +++++++++++-- + src/widget.hh | 3 +++ + 4 files changed, 22 insertions(+), 11 deletions(-) + +commit b7667a5209d3e64ebaedd7db7b8e1bd7e6f99a8f +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Use an enum class for cursor shape + + src/vte.cc | 23 ++++++++++------------- + src/vtegtk.cc | 4 ++-- + src/vteinternal.hh | 14 +++++++++++--- + src/widget.hh | 3 +++ + 4 files changed, 26 insertions(+), 18 deletions(-) + +commit d6e1b8994e9c2ef96d8b27172b8ceb9f5cc22d7a +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Use an enum class for cursor blink mode + + src/vte.cc | 19 ++++++++----------- + src/vtegtk.cc | 4 ++-- + src/vteinternal.hh | 20 ++++++++++++++++---- + src/widget.hh | 3 +++ + 4 files changed, 29 insertions(+), 17 deletions(-) + +commit 872d2b8eb183f2d047755a44bacde2c7e304661d +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Use an enum class for cursor style + + src/vte.cc | 40 ++++++++++++++++++---------------------- + src/vteinternal.hh | 53 ++++++++++++++++++++++++++++------------------------- + src/vteseq.cc | 4 ++-- + 3 files changed, 48 insertions(+), 49 deletions(-) + +commit c744693945814518f2d3b3173e486c03ec106d91 +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Move some initialisations to the class + + ... and use smart pointers. + + src/vte.cc | 40 +++++++++------------------------------- + src/vtegtk.cc | 2 +- + src/vteinternal.hh | 7 +++++-- + 3 files changed, 15 insertions(+), 34 deletions(-) + +commit db8ca71880af64fa0be1eef8d127aa92070a90c3 +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Move some initialisations to the class + + ... and use bool instead of gboolean. + + src/vte.cc | 24 ++++++------------------ + src/vteinternal.hh | 20 ++++++++++---------- + 2 files changed, 16 insertions(+), 28 deletions(-) + +commit 43ae648458b99ac919f41b3504d12a504b027246 +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Move some initialisations to the class + + src/vte.cc | 4 +--- + src/vteinternal.hh | 4 ++-- + 2 files changed, 3 insertions(+), 5 deletions(-) + +commit 7467cba7a396b9105fc441800b86c7b17f3a7405 +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Move some initialisations to the class + + src/vte.cc | 20 +------------------- + src/vtegtk.hh | 2 -- + src/vteinternal.hh | 26 +++++++++++++------------- + 3 files changed, 14 insertions(+), 34 deletions(-) + +commit 5da975a21d4f7866ec7ab38bab17261824869b08 +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + terminal: Move some initialisations to the class + + src/vte.cc | 14 ++------------ + src/vteinternal.hh | 49 ++++++++++++++++++++++++++----------------------- + 2 files changed, 28 insertions(+), 35 deletions(-) + +commit 1aa5dd001b46bdb7e39e4495e2e55a963c21af24 +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + widget: Move some calls to Widget constructor + + src/vte.cc | 6 ------ + src/widget.cc | 6 ++++++ + 2 files changed, 6 insertions(+), 6 deletions(-) + +commit 1bdfc0fa1adf1225152068040c8bde0804297805 +Author: Christian Persch +Date: 2019-11-18 22:42:22 +0100 + + widget: Move scrollable adjustments up to Widget + + Move the unused bits of the GtkScrollable implementation up to Widget, + since they are not used in Terminal, and use smart pointers. + + src/refptr.hh | 9 +++++ + src/vte.cc | 104 +++++++++++++++++++++-------------------------------- + src/vtegtk.cc | 13 ++++--- + src/vteinternal.hh | 10 ++---- + src/vteseq.cc | 2 +- + src/widget.cc | 5 ++- + src/widget.hh | 20 +++++++---- + 7 files changed, 77 insertions(+), 86 deletions(-) + +commit 55e5d53676960feb5dc11400ecdc7c9d7c4ab13e +Author: Christian Persch +Date: 2019-11-17 22:15:38 +0100 + + lib: Add missing files + + src/icu-glue.cc | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/icu-glue.hh | 34 ++++++++++++++++ + 2 files changed, 155 insertions(+) + +commit 7888602c3a980eee093313b2c0f949c756668070 +Author: Christian Persch +Date: 2019-11-17 21:58:09 +0100 + + lib: Rework child exit and EOF handling + + When the child process exits, we used to immediately unset the PTY, + which causes us to miss data written by the child but not yet read + by vte. + + Instead, only store the child exit status, and defer emitting the + 'child-exited' signal until after all the pending data has been read + and processed. + + Similarly, rework how EOF is processed. Instead of immediately + queuing the emission of the 'eof' signal, only take note of the EOF, + and process it after all pending data has processed. There also was + a bug in that we took the first occurence of G_IO_HUP in + Terminal::pty_io_read() to stop reading more data. Instead, only + take a pure G_IO_HUP without G_IO_IN as EOF, or if reading data + from the PTY returns the EIO error. + + This also fixes the bug where a(ny) partial character(s) not yet fully + decoded by the UTF-8 and ICU decoder would not show in the output; this + now correctly flushes the decoder, which inserts either a replacement + character (for the UTF-8 decoder) or the character(s) in the ICU decoder + internal state (most likely also a replacement character). + + https://bugzilla.gnome.org/show_bug.cgi?id=777686 + + src/chunk.hh | 15 ++- + src/vte.cc | 278 ++++++++++++++++++++++++++++++----------------------- + src/vteinternal.hh | 12 ++- + src/widget.cc | 7 ++ + src/widget.hh | 1 + + 5 files changed, 189 insertions(+), 124 deletions(-) + +commit 9e4fbae2cabcd937ac4d1a984ba844d24b44b83f +Author: Christian Persch +Date: 2019-11-17 21:58:09 +0100 + + lib: Use ICU for legacy charset support + + Instead of converting the whole chunk of input from the input + charset to UTF-8 in one go, we need a decoder that consumes the + input one byte at a time. Since the iconv API is not particularly + suited to this (or, really, any) task, switch to using ICU for this. + + Add functions to get the list of supported legacy charsets, and + to check whether a particular string is a supported charset. + + Fixes https://gitlab.gnome.org/GNOME/vte/issues/40 + + doc/reference/vte-sections.txt | 2 + + meson.build | 11 +- + meson_options.txt | 4 +- + src/app/app.cc | 4 +- + src/debug.cc | 1 + + src/debug.h | 1 + + src/decoder-cat.cc | 550 ++++++++++++++++++++++++++++++ + src/icu-converter.cc | 139 ++++++++ + src/icu-converter.hh | 81 +++++ + src/icu-decoder.cc | 151 +++++++++ + src/icu-decoder.hh | 102 ++++++ + src/meson.build | 33 +- + src/parser-cat.cc | 6 +- + src/utf8-test.cc | 8 +- + src/utf8.hh | 7 + + src/vte.cc | 739 ++++++++++++++++++++++------------------- + src/vte/vtedeprecated.h | 8 + + src/vtegtk.cc | 73 +++- + src/vteinternal.hh | 47 ++- + src/widget.hh | 5 +- + 20 files changed, 1593 insertions(+), 379 deletions(-) + +commit 83cbe9998aa1c2babbf32eed0b5fa3909360a83b +Author: Christian Persch +Date: 2019-11-17 21:58:09 +0100 + + widget: Deprecate vte_terminal_feed_child_binary + + doc/reference/vte-sections.txt | 2 +- + src/vte/vtedeprecated.h | 6 ++++++ + src/vte/vteterminal.h | 4 ---- + src/vtegtk.cc | 6 +++++- + 4 files changed, 12 insertions(+), 6 deletions(-) + +commit cdccfe59db102628857086bd3b89de77b6de1d73 +Author: Egmont Koblinger +Date: 2019-11-16 00:35:05 +0100 + + introspection: Fix signedness in vte_terminal_feed_child's annotation + + https://gitlab.gnome.org/GNOME/vte/issues/201 + + src/vtegtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit af2c8bad34a17fcf7c59e2a292fe3ae93c211369 +Author: Egmont Koblinger +Date: 2019-11-14 12:15:35 +0100 + + emulation: Maintain cursor column during screen switch + + https://gitlab.gnome.org/GNOME/vte/issues/198 + + src/vteseq.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit cdeaea32b406fd462c08883e3d4595bdcc645c20 +Author: Egmont Koblinger +Date: 2019-11-14 12:13:15 +0100 + + emulation: Ignore delete/insert line outside the scroll region + + https://gitlab.gnome.org/GNOME/vte/issues/199 + + src/vteseq.cc | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +commit 96dc2ebaf18118bd3ffadd48d54d7ee8bdc5ab54 +Author: Egmont Koblinger +Date: 2019-11-14 12:08:30 +0100 + + emulation: Fix vertical cursor movememnt outside the scroll region + + https://gitlab.gnome.org/GNOME/vte/issues/197 + + src/vteseq.cc | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 623f3c66de097eefef44001a4ff70600c11313f9 +Author: Christian Persch +Date: 2019-11-11 22:10:34 +0100 + + build: Add configure switch to disable a11y code + + meson.build | 3 +++ + meson_options.txt | 7 +++++++ + src/meson.build | 11 +++++++++-- + src/vte.cc | 15 ++++++++++++++- + src/vtegtk.cc | 7 ++++++- + src/vteinternal.hh | 2 ++ + 6 files changed, 41 insertions(+), 4 deletions(-) + +commit 75196cef0150cb46385961a1b1d4ad7fb2e9791a +Author: Christian Persch +Date: 2019-11-06 18:55:37 +0100 + + lib: Typo fix + + src/vteseq.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b55e2423ba4fe3d7d8ce52536eea69dede64a61f +Author: Christian Persch +Date: 2019-11-06 18:55:37 +0100 + + build: Ensure LTO is off + + meson.build | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 07aad3e0d5e75bead37f94964907aee59dc9b12c +Author: Christian Persch +Date: 2019-11-03 22:38:24 +0100 + + pty: Set size on creation + + The size needs to be set before spawning the child process, so that + the child process has the correct size from the start, instead of + starting with a default size and then shortly afterwards receiving a + SIGWINCH signal. + + https://gitlab.gnome.org/GNOME/vte/issues/188#note_635057 + + src/vtegtk.cc | 7 +++++-- + src/vtepty.cc | 6 ++++++ + 2 files changed, 11 insertions(+), 2 deletions(-) + +commit 0b9a3cd2c4d9563b0d2efe8564770e20f8b672e8 +Author: Egmont Koblinger +Date: 2019-10-28 23:50:10 +0100 + + draw: Fix reporting the dimensions of locally drawn graphic characters + + https://gitlab.gnome.org/GNOME/vte/issues/191 + + src/vtedraw.cc | 39 +++++++++++++++++++++++---------------- + 1 file changed, 23 insertions(+), 16 deletions(-) + +commit ff72577bd7d84c30faca3285d7ed4e7f75194f98 +Author: Christian Persch +Date: 2019-10-27 12:23:14 +0100 + + build: Add no-exceptions sanity check + + Some distributions pass -fexceptions in a way that overrides vte's + own -fno-exceptions. This is a hard error; fail the build. + + See https://gitlab.gnome.org/GNOME/gnome-build-meta/issues/207 + + src/vteinternal.hh | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +commit e7f5c4174a760c4270cc4b7962597d0b1ee38e4e +Author: Egmont Koblinger +Date: 2019-10-25 10:34:05 +0200 + + vte.sh: Remove the obsolete __vte_ps1 function + + src/vte.sh | 6 ------ + 1 file changed, 6 deletions(-) + +commit 7d237cb4410f91a3a6c2d352fd36325747d224ba +Author: Danial Behzadi +Date: 2019-10-23 21:59:42 +0000 + + Update Persian translation + + (cherry picked from commit e059cd8855836fad4b593a9d32a4848a44636933) + + po/fa.po | 17 ++++++++--------- + 1 file changed, 8 insertions(+), 9 deletions(-) + +commit f524b6959c760390c0ff5e1d0faef211aa283e26 +Author: Christian Persch +Date: 2019-10-16 12:30:44 +0200 + + test: Add some more explanation to the UTF-8-test.txt file + + perf/UTF-8-test.txt | Bin 22982 -> 23121 bytes + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 416c41be417a051b1d20499754aaa0a827e43b6b +Author: Christian Persch +Date: 2019-10-16 12:23:48 +0200 + + test: Document the changes made to UTF-8-test.txt + + perf/UTF-8-test.txt | Bin 22687 -> 22982 bytes + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 65d86418f3278b583f3f3bbe656e0aeb6114d6f7 +Author: Christian Persch +Date: 2019-10-16 12:23:48 +0200 + + git: Diff *.txt files as text + + This fixes the diff for the perf/UTF-8-test.txt file, which git thinks + is binary because it contains NUL bytes. + + .gitattributes | 1 + + 1 file changed, 1 insertion(+) + +commit 6caae8b8550f1bccae7819216d1f5626dfafb279 +Author: Christian Persch +Date: 2019-10-15 21:39:15 +0200 + + test: Add UTF-8 test + + This is the "UTF-8 decoder capability and stress test" file from + Markus Kuhn, modified to show the right margin correctly for a decoder + conforming to the whatwg Encoding Standard spec (which vte's decoder + does conform to). + + COPYING.CC-BY-4-0 | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + perf/UTF-8-test.txt | Bin 0 -> 22687 bytes + 2 files changed, 154 insertions(+) + +commit 347f7dd9b1c11244156bfb593866306c735cb06a +Author: Christian Persch +Date: 2019-10-13 21:30:49 +0200 + + build: Add option to disable -Bsymbolic-functions + + Fixes: https://gitlab.gnome.org/GNOME/vte/issues/184 + + meson.build | 16 +++++++++++----- + meson_options.txt | 9 +++++++++ + 2 files changed, 20 insertions(+), 5 deletions(-) + +commit d7f46fe0d437eeca9e72e8a65ad4b57fdd413e14 +Author: Christian Persch +Date: 2019-10-12 20:10:55 +0200 + + debug: Handle all enum values in switch + + src/vteseq.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit bc333628a96c706b8a63d76b702566b829ceb5a3 +Author: Christian Persch +Date: 2019-10-12 20:10:55 +0200 + + parser: Make unused command a NOP + + src/parser-csi.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e3e16ca4a69bb18187afec5c5ea1bad8232a1a82 +Author: Christian Persch +Date: 2019-10-12 20:10:55 +0200 + + lib: Remove GIOChannel use + + We only used GIOChannel for the I/O watch, which we can replace + with using g_unix_fd_add_full() directly. + + src/vte.cc | 113 +++++++++++++++++++++-------------------------------- + src/vteinternal.hh | 15 ++++--- + 2 files changed, 51 insertions(+), 77 deletions(-) + +commit 5f846118919e6f357b7b151e0e2878dd1e63b06a +Author: Christian Persch +Date: 2019-10-12 20:10:55 +0200 + + terminal: Remove extraneous fcntl + + The PTY in the Pty object is already in nonblocking mode. + + src/vte.cc | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +commit 9356270ec482a0a3b8ed1cdc9af1902da4968f04 +Author: Christian Persch +Date: 2019-10-12 20:10:55 +0200 + + spawn: Warn if G_SPAWN_LEAVE_DESCRIPTORS_OPEN is passed + + This flag has never been supported by vte, so warn if it is passed. + In future, this may become a g_return_if_fail() precondition. + + src/vtegtk.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 0af1342d81c6ade8bef88de2aaf3e3aa8a06a378 +Author: Christian Persch +Date: 2019-10-12 20:10:55 +0200 + + fixup pty gobject + + src/pty.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b87c6f49ea0dda0c6bc7a274e389597af096718f +Author: Christian Persch +Date: 2019-10-12 20:10:55 +0200 + + build: Remove unncessary feature test + + getpgid() is in POSIX, so just depend on its presence. + + meson.build | 2 -- + src/vte.cc | 3 +-- + src/vtegtk.cc | 3 +-- + 3 files changed, 2 insertions(+), 6 deletions(-) + +commit 22318b29a0a982b313458d75193f6389df3018a5 +Author: Christian Persch +Date: 2019-10-12 20:10:55 +0200 + + build: Remove unnecessary feature test for functions + + We can just depend on these functions. + + meson.build | 2 -- + src/dumpkeys.c | 10 ---------- + src/mev.c | 10 ---------- + src/pty.cc | 2 +- + 4 files changed, 1 insertion(+), 23 deletions(-) + +commit 0c00665c211c6c8cdc4baed27658595b883bed12 +Author: Christian Persch +Date: 2019-10-12 20:10:55 +0200 + + pty: Cleanup session creation + + Remove setpgid() call, since it always fails with EPERM, and doesn't make + sense after setsid() anyway. + + setsid() creates a new session, and loses the controlling TTY. + + Furthermore, setsid() is in POSIX, so we can depend on its presence; remove + the conditional around it. + + Fixes: https://gitlab.gnome.org/GNOME/vte/issues/179 + + meson.build | 2 -- + src/pty.cc | 20 +++++++++++--------- + 2 files changed, 11 insertions(+), 11 deletions(-) + +commit 3b695af9524cc76bdf4ab77ba1e4f0d7963a2852 +Author: Christian Persch +Date: 2019-10-12 20:10:55 +0200 + + pty: Add more error checking + + src/pty.cc | 22 ++++++++++++++++------ + 1 file changed, 16 insertions(+), 6 deletions(-) + +commit 171fd49e24111749c415ec1e92efcd65f08fdcf6 +Author: Christian Persch +Date: 2019-10-12 20:10:55 +0200 + + pty: Start new session before opening the PTY peer + + src/pty.cc | 20 +++++++++++--------- + 1 file changed, 11 insertions(+), 9 deletions(-) + +commit 8c72345d1df56287c8ffaa2186f5913ac587d837 +Author: Christian Persch +Date: 2019-10-12 20:10:55 +0200 + + pty: Separate PTY code from its GObject wrapper + + src/fwd.hh | 28 ++ + src/meson.build | 11 +- + src/pty.cc | 778 +++++++++----------------------------------------- + src/pty.hh | 83 ++++++ + src/vte.cc | 223 +++++---------- + src/vtegtk.cc | 48 +++- + src/vteinternal.hh | 51 ++-- + src/vtepty-private.h | 33 --- + src/vtepty.cc | 722 ++++++++++++++++++++++++++++++++++++++++++++++ + src/vteptyinternal.hh | 35 +++ + src/vtetypes.hh | 19 +- + src/widget.cc | 27 ++ + src/widget.hh | 13 +- + 13 files changed, 1189 insertions(+), 882 deletions(-) + +commit 84bb0d45e0ee62e57e78a1c385dad88c9fbe122d +Author: Christian Persch +Date: 2019-10-11 21:14:31 +0200 + + Post release version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b524886338ff638f3f732ebe548580f51540d483 (tag: 0.59.0) +Author: Egmont Koblinger +Date: 2019-10-11 13:47:56 +0200 + + widget: Deprecate vte_terminal_[sg]et_allow_bold() + + https://bugzilla.gnome.org/show_bug.cgi?id=762247#c36 + + src/vte/vtedeprecated.h | 8 ++++++++ + src/vte/vteterminal.h | 5 ----- + src/vtegtk.cc | 17 ++++++++++------- + 3 files changed, 18 insertions(+), 12 deletions(-) + +commit 7f6e48ce00eb0fd6992966a66df6464e85cfda84 +Author: Egmont Koblinger +Date: 2019-10-11 13:04:41 +0200 + + ring: Tiny code cleanup: maintain GString integrity + + src/ring.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit a6cb948d2c352056b79e04efd372f88f84b8e0a1 +Author: Egmont Koblinger +Date: 2019-10-11 12:47:15 +0200 + + ring: Fix an incorrect assertion + + An assertion in the rewrap code incorrectly assumed that the last line + of the ring is always hard wrapped (i.e. ends in an explicit newline). + Rewrapping when the last line is soft wrapped and the cursor stands here + after the last nonempty cell resulted in a crash. + + https://gitlab.gnome.org/GNOME/vte/issues/181 + + src/ring.cc | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +commit 9dd455a3f80657e17afabdc86c9cef0bb1d0a7e6 +Author: Christian Persch +Date: 2019-10-10 21:25:47 +0200 + + pty: Fix error check for ioctl(TIOCGPTPEER) failure + + While the kernel's own tests say that EINVAL would be returned when the + running kernel doesn't support the ioctl, it appears that actually it + returns ENOTTY. + + Fixes: https://gitlab.gnome.org/GNOME/vte/issues/182 + + src/pty.cc | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +commit c142e30a4f9041d9deec4f8aedbed9eadb924f5e +Author: Ryuta Fujii +Date: 2019-10-08 12:45:10 +0000 + + Update Japanese translation + + po/ja.po | 116 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 53 insertions(+), 63 deletions(-) + +commit e64eff10c34601e22ea626f11af38dfd36b634e2 +Author: Egmont Koblinger +Date: 2019-10-04 09:29:26 +0200 + + build: Avoid a method deprecated in Pango 1.44 + + https://gitlab.gnome.org/GNOME/vte/issues/180 + + src/vtedraw.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 443cfe95a308247c8661b1bea22c1139520faddf +Author: Egmont Koblinger +Date: 2019-10-02 15:56:41 +0200 + + draw: Fix typos + + src/vtedraw.cc | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +commit d37c5a671a442d1371282178e8f477350d968b73 +Author: Christian Persch +Date: 2019-09-30 23:02:06 +0200 + + spawn: Port fdwalk improvements from glib + + https://gitlab.gnome.org/GNOME/vte/issues/171 + + src/vtespawn.cc | 107 ++++++++++++++++++++++++++++++++++++++++++-------------- + 1 file changed, 80 insertions(+), 27 deletions(-) + +commit a506334ea8148faa7e89eb0a582125391409abe9 +Author: Christian Persch +Date: 2019-09-25 12:26:28 +0200 + + build: Fix clang build + + https://gitlab.gnome.org/GNOME/vte/issues/178 + + src/tabstops.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ef0734c1eb775cf98db9a6e8e87700830b1a3890 +Author: Egmont Koblinger +Date: 2019-09-24 13:01:54 +0200 + + emulation: Ensure the cursor remains onscreen when moving down + + Previously the cursor could escape from the onscreen area, resulting in + a crash. This happened when a scrolling area was defined which did not + include the bottom row, the cursor was in the terminal's bottom row and + moved downwards from there. + + https://gitlab.gnome.org/GNOME/vte/issues/176 + + src/vte.cc | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit ac68d4c02e21f5857f68e75bf39f4cfc4c593a52 +Author: Christian Persch +Date: 2019-09-20 21:01:06 +0200 + + build: Fix format warnings test + + meson.build | 26 ++++++++++++++++---------- + 1 file changed, 16 insertions(+), 10 deletions(-) + +commit 90afbfd67e452ed308f8b3dc5ce8210ae70fe9b9 +Author: Christian Persch +Date: 2019-09-19 11:44:05 +0200 + + build: Fix clang build + + https://gitlab.gnome.org/GNOME/vte/issues/174 + + src/vteinternal.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b0ad91c9092f06155b826478b9d2ad475e821405 +Author: Christian Persch +Date: 2019-09-19 11:24:13 +0200 + + build: Print compiler version in configure summary + + meson.build | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 912fffcb3b548dc883d4f9749b33ba87cd1be86b +Author: Christian Persch +Date: 2019-09-18 22:09:02 +0200 + + lib: Rework how vte stores the match and search regexes + + (cherry picked from commit 2d0df88babd1faae09ee6b92fb589427ea12437a) + + src/refptr.hh | 50 ++++++ + src/regex.cc | 3 +- + src/vte.cc | 437 ++++++++++++------------------------------------ + src/vtegtk.cc | 40 ++--- + src/vteinternal.hh | 137 +++++++++++---- + src/vteregex.cc | 23 +-- + src/vteregexinternal.hh | 19 ++- + src/widget.cc | 51 +++++- + src/widget.hh | 19 ++- + 9 files changed, 351 insertions(+), 428 deletions(-) + +commit ae2e8bdf4b6cf9d17b7c60b0752fed311bab1877 +Author: Christian Persch +Date: 2019-09-19 11:18:36 +0200 + + regex: Add missing noexcept + + https://gitlab.gnome.org/GNOME/vte/issues/175 + + src/regex.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6710777ac3172f8e025ac33b1ecb9d8a73bfa3cf +Author: Michael Catanzaro +Date: 2019-09-18 23:33:53 +0000 + + Revert "lib: Rework how vte stores the match and search regexes" + + This reverts commit 2d0df88babd1faae09ee6b92fb589427ea12437a + + src/refptr.hh | 50 ------ + src/regex.cc | 3 +- + src/vte.cc | 431 ++++++++++++++++++++++++++++++++++++------------ + src/vtegtk.cc | 40 +++-- + src/vteinternal.hh | 133 ++++----------- + src/vteregex.cc | 23 ++- + src/vteregexinternal.hh | 19 +-- + src/widget.cc | 51 +----- + src/widget.hh | 19 +-- + 9 files changed, 423 insertions(+), 346 deletions(-) + +commit 2d0df88babd1faae09ee6b92fb589427ea12437a +Author: Christian Persch +Date: 2019-09-18 22:09:02 +0200 + + lib: Rework how vte stores the match and search regexes + + src/refptr.hh | 50 ++++++ + src/regex.cc | 3 +- + src/vte.cc | 431 ++++++++++++------------------------------------ + src/vtegtk.cc | 40 ++--- + src/vteinternal.hh | 133 +++++++++++---- + src/vteregex.cc | 23 +-- + src/vteregexinternal.hh | 19 ++- + src/widget.cc | 51 +++++- + src/widget.hh | 19 ++- + 9 files changed, 346 insertions(+), 423 deletions(-) + +commit 474b63ba88a0f2a83f3fbde44508ec37f5b2934d +Author: Christian Persch +Date: 2019-09-18 22:09:02 +0200 + + regex: Make regex a C++ class + + Make regex a C++ class and the public VteRegex only a wrapper. + + .dir-locals.el | 4 + + src/meson.build | 7 +- + src/regex.cc | 238 ++++++++++++++++++++++++++++++++++++++ + src/regex.hh | 83 ++++++++++++++ + src/vtegtk.cc | 18 +-- + src/vtepcre2.h | 9 +- + src/vteregex.cc | 298 ++++++++---------------------------------------- + src/vteregexinternal.hh | 21 ++-- + 8 files changed, 403 insertions(+), 275 deletions(-) + +commit d3ed7be7ade9d04b85df5af416f80e545228674c +Author: Christian Persch +Date: 2019-09-18 21:26:01 +0200 + + build: Define gtk3 min/max version defines only for gtk3 targets + + ... instead of globally (which will conflict with gtk4 defines in the future). + + meson.build | 12 +++++++----- + src/app/meson.build | 3 ++- + src/meson.build | 10 +++++++--- + 3 files changed, 16 insertions(+), 9 deletions(-) + +commit b588b33b568f7687967e2e512aa65f8375f25163 +Author: Egmont Koblinger +Date: 2019-09-18 15:34:29 +0200 + + build: Silence a warning with debug disabled + + https://gitlab.gnome.org/GNOME/vte/issues/173 + + src/vte.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 9102b9d8ae547bfda9e8d336139b3ed6450b6d2c +Author: Egmont Koblinger +Date: 2019-09-18 14:16:41 +0200 + + build: Bump gtk min-req version to 3.18 + + https://gitlab.gnome.org/GNOME/vte/issues/172 + + meson.build | 2 +- + src/app/app.cc | 5 ++++- + src/reflect.c | 5 +++-- + 3 files changed, 8 insertions(+), 4 deletions(-) + +commit 569620226390668c4e90c4bbd85bc09de755bd87 +Author: Egmont Koblinger +Date: 2019-09-18 14:16:10 +0200 + + build: Bump gtk min-req version to 3.6 + + Also drop gdk_threads_enter/leave() calls. + + https://gitlab.gnome.org/GNOME/vte/issues/172 + + meson.build | 2 +- + src/vte.cc | 55 +------------------------------------------------------ + 2 files changed, 2 insertions(+), 55 deletions(-) + +commit 537fbfa2c197d3273c2630920ed452284f2a8ff5 +Author: Egmont Koblinger +Date: 2019-09-18 14:15:52 +0200 + + build: Bump gtk min-req version to 3.4 + + https://gitlab.gnome.org/GNOME/vte/issues/172 + + meson.build | 2 +- + src/reflect.c | 11 ++++++----- + 2 files changed, 7 insertions(+), 6 deletions(-) + +commit 50974dc57683ac32842882c9fc6b63421092eecb +Author: Egmont Koblinger +Date: 2019-09-18 14:15:20 +0200 + + build: Bump glib min-req version to 2.44 + + https://gitlab.gnome.org/GNOME/vte/issues/172 + + meson.build | 2 +- + src/reaper.cc | 1 - + 2 files changed, 1 insertion(+), 2 deletions(-) + +commit 0a9b4425b2430cc13ecb4f6eb5b89974b48e4547 +Author: Egmont Koblinger +Date: 2019-09-18 14:14:55 +0200 + + build: Enable glib/gtk deprecation warnings + + https://gitlab.gnome.org/GNOME/vte/issues/172 + + meson.build | 18 +++++++++++++++++- + src/app/meson.build | 1 + + src/meson.build | 5 +++-- + 3 files changed, 21 insertions(+), 3 deletions(-) + +commit 8be5ae296c11fbe71682abe46916b7edea557ad9 +Author: Danial Behzadi +Date: 2019-09-14 20:53:04 +0000 + + Update Persian translation + + po/fa.po | 48 ++++++++++++++++++++++-------------------------- + 1 file changed, 22 insertions(+), 26 deletions(-) + +commit 016fd4690b85011b5691ff39ae269ad912a7e69e +Author: Egmont Koblinger +Date: 2019-09-14 22:41:52 +0200 + + widget: Don't scroll to bottom on keystroke in read-only mode + + https://gitlab.gnome.org/GNOME/gnome-terminal/issues/159 + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit bff758d228772c2aac653d0feb9a51cd75ad80dd +Author: Egmont Koblinger +Date: 2019-09-14 22:37:28 +0200 + + emulation: Make DEC alternate charset convert underscore to space + + https://gitlab.gnome.org/GNOME/vte/issues/157 + + src/vte.cc | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit b8113e6dd3b6ae8d202c876b3d408125391cf9cb +Author: Egmont Koblinger +Date: 2019-09-14 22:28:39 +0200 + + emulation: Remove urxvt mouse extension support + + https://gitlab.gnome.org/GNOME/vte/issues/155 + + src/mev.c | 15 +-------------- + src/modes-private.hh | 7 ++----- + src/parser-reply.hh | 1 - + src/vte.cc | 3 --- + src/vteseq.cc | 1 - + 5 files changed, 3 insertions(+), 24 deletions(-) + +commit 3e285bc667a3599056aa567d581b9fba880acae5 +Author: Egmont Koblinger +Date: 2019-09-14 22:28:22 +0200 + + emulation: Remove SRM support + + https://gitlab.gnome.org/GNOME/vte/issues/69 + + src/modes-ecma.hh | 29 ++++++++++++++++------------- + src/modes-test.cc | 12 ++++++------ + src/modes.hh | 3 +-- + src/vte.cc | 26 +++----------------------- + src/vteinternal.hh | 3 +-- + 5 files changed, 27 insertions(+), 46 deletions(-) + +commit bc041e78cd287b75be5b82d1c58364a29986cd44 +Author: Egmont Koblinger +Date: 2019-09-14 21:40:08 +0200 + + build: Require GLib 2.44 and GTK 3.20 + + https://gitlab.gnome.org/GNOME/vte/issues/170 + + meson.build | 6 +++--- + src/app/app.cc | 6 ------ + src/pty.cc | 4 ---- + src/vte/vtepty.h | 2 -- + src/vte/vteregex.h | 2 -- + src/vte/vteterminal.h | 2 -- + src/vtegtk.cc | 14 -------------- + 7 files changed, 3 insertions(+), 33 deletions(-) + +commit 1f049285d7744ddbc492b020cf26b9a1f31a54b6 +Author: Egmont Koblinger +Date: 2019-09-14 21:37:45 +0200 + + build: Require meson 0.50 + + https://gitlab.gnome.org/GNOME/vte/issues/169 + + meson.build | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 22f5fabbd1c3b97000ed6cb4a963d429a2c79bab +Author: Egmont Koblinger +Date: 2019-09-14 21:36:04 +0200 + + build: Use "fallthrough" consistently + + https://gitlab.gnome.org/GNOME/vte/issues/168 + + src/parser-glue.hh | 7 +------ + src/vteseq.cc | 8 ++++---- + 2 files changed, 5 insertions(+), 10 deletions(-) + +commit 80a5ec56edf562727c3008248674bf7b171edb36 +Author: Egmont Koblinger +Date: 2019-09-14 21:34:59 +0200 + + build: Suppress warnings about ignored returned value + + https://gitlab.gnome.org/GNOME/vte/issues/167 + + src/xticker.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit 1acae31e2db94bcd98ebbaeeca6c3dfcda025e63 +Author: Christian Persch +Date: 2019-09-09 21:24:10 +0200 + + build: Don't pass C warning flags to the C++ compiler + + https://gitlab.gnome.org/GNOME/vte/issues/166 + (cherry picked from commit 740b173e06bcd38baeb6fa87232492f9bee76834) + + meson.build | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 53ebaece6fbebdcf259b0faf4569e1571619c284 +Author: Christian Persch +Date: 2019-08-05 20:07:18 +0200 + + Post branch version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit def2f0ee9dfbed821b859c9d59f2bb66ae76dd27 (tag: 0.57.90) +Author: Christian Persch +Date: 2019-08-05 20:06:03 +0200 + + Version 0.57.90 + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1ed32f91aaa0f3446a70ef85f6bbb35a52b0c0ad +Author: Ting-Wei Lan +Date: 2019-07-10 22:49:11 +0800 + + draw: #include for std::max + + https://gitlab.gnome.org/GNOME/vte/issues/150 + + src/vtedraw.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 118ad1caab2256bf731404c467c08b98e14b8ccc +Author: Christian Persch +Date: 2019-08-03 19:01:13 +0200 + + pty: Prefer using TIOCGPTPEER ioctl + + src/pty.cc | 44 ++++++++++++++++++++++++++++++-------------- + 1 file changed, 30 insertions(+), 14 deletions(-) + +commit 6e640d5efd2d9427f6dac3dace60ddca3f8afb0c +Author: Christian Persch +Date: 2019-08-03 19:01:13 +0200 + + pty: Use O_NOCTTY when VTE_PTY_NOCTTY is set + + src/pty.cc | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 2eb1707ca0f0c0b19a1d6d03ca364d183eca2e61 +Author: Jor Teron +Date: 2019-08-01 17:41:00 +0000 + + Add Karbi translation + + po/LINGUAS | 1 + + po/mjw.po | 41 +++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 42 insertions(+) + +commit 68c8e34004c35d1699c500d470fd1afb66d8209d +Author: Asier Sarasua Garmendia +Date: 2019-07-14 17:29:41 +0000 + + Update Basque translation + + po/eu.po | 44 +++++++++++++++++++++----------------------- + 1 file changed, 21 insertions(+), 23 deletions(-) + +commit 0567e31bddeb02c45049aab42d146f90d7f455ca +Author: Egmont Koblinger +Date: 2019-07-08 23:42:44 +0200 + + bidi: Disable Arabic ligatures + + https://gitlab.gnome.org/GNOME/vte/issues/142 + + src/bidi.cc | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit bdf7531b6cbf82caae107a01baf9f2ffb8c3bcb1 +Author: Christian Persch +Date: 2019-06-30 22:20:38 +0200 + + Post release version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f186c89e1dffd4401bbee456135618f5237c6236 (tag: 0.57.3) +Author: Christian Persch +Date: 2019-06-30 22:15:02 +0200 + + Version 0.57.3 + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8aae59d7c8b8e35555a23f5f80620d32acb18494 +Author: Peter Simonyi +Date: 2019-06-30 22:12:54 +0200 + + vte.sh: Remove control chars for window title + + Many of the C0 and C1 control characters other than the expected Esc-\ + or BEL will abort the OSC sequence, and none of them will display + usefully in a window title, so strip them all. + + https://bugzilla.gnome.org/show_bug.cgi?id=743867 + https://gitlab.gnome.org/GNOME/vte/issues/139 + + src/vte.sh | 1 + + 1 file changed, 1 insertion(+) + +commit 9a4090339d12e3cb5f129db303086b8126dbdcd7 +Author: Christian Persch +Date: 2019-06-30 22:10:47 +0200 + + draw: Measure characters individually + + Measure U+0021..U+007E individually instead of all together and then + averaging. For monospace fonts, the results should be the same, but + if the user (by design, or trough mis-configuration) uses a proportional + font, the latter method will greatly underestimate the required width, + leading to unreadable, overlapping characters. + + https://gitlab.gnome.org/GNOME/vte/issues/138 + + src/vte.cc | 1 - + src/vtedraw.cc | 27 ++++++++++++++++++++------- + 2 files changed, 20 insertions(+), 8 deletions(-) + +commit 17cf94a83b1c0da8413501232ca29d3db7a63b70 +Author: Egmont Koblinger +Date: 2019-06-30 15:29:44 +0200 + + widget: Remove line_is_wrappable() + + src/vte.cc | 15 +++------------ + src/vteinternal.hh | 2 -- + 2 files changed, 3 insertions(+), 14 deletions(-) + +commit a2b1bdb850ac15f5e2adbd9082f0fd5ec19eabd9 +Author: Egmont Koblinger +Date: 2019-06-30 15:29:41 +0200 + + perf,bidi: Add BiDi demo and info files + + https://gitlab.gnome.org/GNOME/vte/issues/53 + + perf/bidi-demo.txt | 287 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + perf/bidi.sh | 39 ++++++++ + 2 files changed, 326 insertions(+) + +commit 913e57e77bdd897ede6558ef01d74f96fd425408 +Author: Egmont Koblinger +Date: 2019-06-30 15:29:37 +0200 + + docs,bidi: Clarify the relation between get_text API methods and BiDi + + https://gitlab.gnome.org/GNOME/vte/issues/53 + + src/vte/vteterminal.h | 2 +- + src/vtegtk.cc | 11 +++++++++++ + 2 files changed, 12 insertions(+), 1 deletion(-) + +commit 029103a9a650baa61370495160771ee2e18e7c28 +Author: Egmont Koblinger +Date: 2019-06-30 15:29:33 +0200 + + emulation,bidi: Add keyboard swapping mode + + If the corresponding mode is enabled and the cursor stands within an + RTL paragraph, the Left and Right keys of the keyboard swap their + generated escape sequence. + + https://gitlab.gnome.org/GNOME/vte/issues/53 + + src/vte.cc | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 46 insertions(+) + +commit cb134a60569b8119651718bbf406c05e9918cef5 +Author: Egmont Koblinger +Date: 2019-06-30 15:29:29 +0200 + + widget,bidi: Denote the direction in the I-beam cursor + + Show the direction of the character underneath if the paragraph contains + a character of foreign direction. Currently for I-beam cursor shape only. + + https://gitlab.gnome.org/GNOME/vte/issues/53 + + src/vte.cc | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 6e59b3025daa3f005a87284016de9592b01e91c2 +Author: Egmont Koblinger +Date: 2019-06-30 15:29:23 +0200 + + widget,bidi: Display according to the BiDi mapping + + Display each row according to the BiDi treatment (shuffling, basic Arabic + shaping) it received. + + https://gitlab.gnome.org/GNOME/vte/issues/53 + + src/vte.cc | 318 ++++++++++++++++++++++++++++++++++++++++------------- + src/vtedraw.cc | 6 + + src/vtedraw.hh | 2 + + src/vteinternal.hh | 9 +- + 4 files changed, 256 insertions(+), 79 deletions(-) + +commit 7d3704f1c54e58443624355835f675ec22c6b9d3 +Author: Egmont Koblinger +Date: 2019-06-30 15:29:17 +0200 + + bidi: Find the BiDi mapping for the RingView's contents + + Find the mapping between logical and visual positions for the rows + of the RingView, according to the paragraph's BiDi parameters. + + For implicit paragraphs, the Unicode Bidirectional Algorithm is run + via the FriBidi library. + + Basic Arabic shaping is also performed using presentation form + characters. + + https://gitlab.gnome.org/GNOME/vte/issues/53 + + meson.build | 9 + + meson_options.txt | 7 + + src/bidi.cc | 781 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/bidi.hh | 118 +++++++++ + src/meson.build | 3 + + src/ringview.cc | 88 +++++- + src/ringview.hh | 19 ++ + src/vte.cc | 2 + + src/vtegtk.cc | 6 + + src/vteunistr.cc | 33 +++ + src/vteunistr.h | 23 ++ + 11 files changed, 1084 insertions(+), 5 deletions(-) + +commit 8264e755da196961fc1d5d10a4f199edbed050a6 +Author: Egmont Koblinger +Date: 2019-06-30 15:29:14 +0200 + + bidi: Add API to enable or disable bidirectional text support + + https://gitlab.gnome.org/GNOME/vte/issues/53 + + doc/reference/vte-sections.txt | 4 ++ + src/app/app.cc | 8 +++ + src/vte.cc | 36 ++++++++++++++ + src/vte/vteterminal.h | 13 +++++ + src/vtegtk.cc | 108 +++++++++++++++++++++++++++++++++++++++++ + src/vtegtk.hh | 2 + + src/vteinternal.hh | 4 ++ + 7 files changed, 175 insertions(+) + +commit 59017da98ce05dd4673d915ee4978aee7c155caa +Author: Egmont Koblinger +Date: 2019-06-30 15:29:07 +0200 + + ringview: Add RingView infrastructure + + The RingView extracts the contents of the currently visible area plus + context lines up to the next hard newline (or a safety limit). + + This can be used to perform display related tweaks, such as BiDi. + + https://gitlab.gnome.org/GNOME/vte/issues/53 + + src/debug.cc | 1 + + src/debug.h | 3 +- + src/meson.build | 2 + + src/ringview.cc | 237 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/ringview.hh | 97 ++++++++++++++++++++++ + src/vte.cc | 87 +++++++++++++++++++- + src/vteinternal.hh | 7 ++ + src/vterowdata.cc | 8 ++ + src/vterowdata.hh | 1 + + src/widget.cc | 2 + + 10 files changed, 443 insertions(+), 2 deletions(-) + +commit 3c6505bef69b6e4ee9e92cc8e9b6058109364ba5 +Author: Egmont Koblinger +Date: 2019-06-30 15:29:02 +0200 + + widget: Invalidate the entire paragraph when its contents change + + This will soon be required by RingView and BiDi. + + https://gitlab.gnome.org/GNOME/vte/issues/53 + + src/ring.cc | 21 ++++++++++ + src/ring.hh | 1 + + src/vte.cc | 121 +++++++++++++++++++++++++++++++++++++++++++++-------- + src/vtedefines.hh | 3 ++ + src/vteinternal.hh | 3 ++ + src/vteseq.cc | 44 +++++++++++-------- + 6 files changed, 157 insertions(+), 36 deletions(-) + +commit f48b297427bd2adf02e12b44b7b528ebe15e409a +Author: Egmont Koblinger +Date: 2019-06-30 15:28:57 +0200 + + emulation: Track BiDi parameters + + https://gitlab.gnome.org/GNOME/vte/issues/53 + + src/debug.cc | 1 + + src/debug.h | 1 + + src/modes-ecma.hh | 18 +++++++- + src/modes-private.hh | 25 +++++++++++ + src/modes.hh | 4 +- + src/parser-cmd.hh | 4 +- + src/parser-csi.hh | 4 +- + src/ring.cc | 11 +++-- + src/ring.hh | 9 ++-- + src/vte.cc | 106 ++++++++++++++++++++++++++++++++++++++++++-- + src/vteinternal.hh | 15 +++++++ + src/vterowdata.hh | 3 +- + src/vteseq.cc | 122 ++++++++++++++++++++++++++++++++++++++++++++------- + 13 files changed, 288 insertions(+), 35 deletions(-) + +commit 13ba4605c10a10924d79aae1c0670dd381ed5dac +Author: Egmont Koblinger +Date: 2019-06-30 15:28:54 +0200 + + emulation: Make certain operataions convert line endings to hard newline + + Clearing above the cursor now also turns the line just above the normal + viewport to hard wrapped. (Clearing the entire screen already does this + by appending new lines.) + + Scrolling a region turns all locations where lines are removed or added + to hard wrapped. + + This is done based on the BiDi spec. + + https://gitlab.gnome.org/GNOME/vte/issues/53 + + src/vte.cc | 7 +++++++ + src/vteseq.cc | 34 ++++++++++++++++++++++++++++++++-- + 2 files changed, 39 insertions(+), 2 deletions(-) + +commit 983c1835613db1824ffe7b3df3372b4c8efb29ab +Author: Egmont Koblinger +Date: 2019-06-30 15:28:51 +0200 + + ring: Keep an additional row writable + + This is so that we can set the line ending above the normal terminal area + to hard newline. Useful e.g. when clearing the screen, and required by the + BiDi spec. + + https://gitlab.gnome.org/GNOME/vte/issues/53 + + src/ring.cc | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +commit 616d6a1874f3703ec01420eb40e7d09fdb90993e +Author: Egmont Koblinger +Date: 2019-06-30 15:28:45 +0200 + + widget: Set the soft_wrapped flag via wrapper methods + + This is in preparation for RingView and BiDi where there'll be more to do. + + https://gitlab.gnome.org/GNOME/vte/issues/53 + + src/vte.cc | 32 +++++++++++++++++++++++++++++++- + src/vteinternal.hh | 3 +++ + src/vteseq.cc | 10 +++++----- + 3 files changed, 39 insertions(+), 6 deletions(-) + +commit 92c05284388a569f9b423bc839fca8868d2156af +Author: Egmont Koblinger +Date: 2019-06-29 23:42:39 +0200 + + emulation: Fix background color handling of DCH and ECH + + https://gitlab.gnome.org/GNOME/vte/issues/136 + + src/vte.cc | 3 +-- + src/vteseq.cc | 9 ++++++++- + 2 files changed, 9 insertions(+), 3 deletions(-) + +commit d0f65fb1f982ba0b58d75184ee1e8d03bb9e3d2e +Author: Egmont Koblinger +Date: 2019-06-29 23:39:17 +0200 + + widget: Merge identical m_color_defaults and m_fill_defaults + + https://gitlab.gnome.org/GNOME/vte/issues/136 + + src/vte.cc | 16 +++++++--------- + src/vteinternal.hh | 18 +++++++----------- + src/vteseq.cc | 17 ++++++++--------- + 3 files changed, 22 insertions(+), 29 deletions(-) + +commit 8e46f0f176e63ac20a7e1d49ae166159972d2bab +Author: Christian Persch +Date: 2019-06-28 21:20:05 +0200 + + emulation: Improve docs + + src/vteseq.cc | 19 +++++++++++-------- + 1 file changed, 11 insertions(+), 8 deletions(-) + +commit 83f98691b4b929537a6b33279f2b932de0512a5d +Author: Egmont Koblinger +Date: 2019-06-28 10:19:19 +0200 + + draw: Align the baseline across font styles + + https://gitlab.gnome.org/GNOME/vte/issues/137 + + src/vtedraw.cc | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit aa4e84ca35dbcbd508c829818d59726f48875429 +Author: Egmont Koblinger +Date: 2019-06-06 23:31:07 +0200 + + widget: Deprecate vte_terminal_[sg]et_rewrap_on_resize() + + Rewrapping is planned to be always enabled. + + https://gitlab.gnome.org/GNOME/vte/issues/135 + + doc/reference/vte-sections.txt | 4 ++-- + src/vte/vtedeprecated.h | 8 ++++++++ + src/vte/vteterminal.h | 5 ----- + src/vtegtk.cc | 6 ++++++ + 4 files changed, 16 insertions(+), 7 deletions(-) + +commit afe6f05571c44ef2d75e8f8dba8e2b16344b7e9f +Author: Egmont Koblinger +Date: 2019-06-06 23:04:26 +0200 + + widget: Increase minimum width to 2 cells plus padding + + https://gitlab.gnome.org/GNOME/vte/issues/134 + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ca4eae6ac0f1547ae42b6811035e7d93954d1c37 +Author: Egmont Koblinger +Date: 2019-06-06 10:37:38 +0200 + + widget: Revert to paint unused rows + + They might be selected, and thus have a nondefault background. + + https://gitlab.gnome.org/GNOME/vte/issues/132 + + src/vte.cc | 3 --- + 1 file changed, 3 deletions(-) + +commit 4ae78d048df2354cc5f76e3e740baeccb60a5422 +Author: Egmont Koblinger +Date: 2019-05-31 22:51:02 +0200 + + widget: Clean up invalidating in insert_char() + + src/vte.cc | 16 +++++----------- + 1 file changed, 5 insertions(+), 11 deletions(-) + +commit 5465b748b04b05700863e04ed4b2f8897a22ae21 +Author: Egmont Koblinger +Date: 2019-05-31 22:50:34 +0200 + + widget: Don't clamp before invalidating from process_incoming() + + invalidate_rows() takes care of this. With forthcoming BiDi, we do need + to call invalidate_rows() even if the modified region is offscreen + because it might affect onscreen rows too. + + src/vte.cc | 21 --------------------- + 1 file changed, 21 deletions(-) + +commit 61e7b898e4aca413c6c5112916fd5e4b79da0c25 +Author: Egmont Koblinger +Date: 2019-05-31 22:49:18 +0200 + + widget: Find contiguous LTR and RTL runs of decoration + + This is in preparation for forthcoming BiDi support. + + src/vte.cc | 89 ++++++++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 54 insertions(+), 35 deletions(-) + +commit 3df8e58310044d4a51ad229362c0512661bf8351 +Author: Egmont Koblinger +Date: 2019-05-31 22:48:54 +0200 + + widget: Move out a common condition for painting the background + + src/vte.cc | 25 +++++++++++++------------ + 1 file changed, 13 insertions(+), 12 deletions(-) + +commit dc94f74c766fd445710d54946093040282bd80d3 +Author: Louie Lu +Date: 2019-05-31 20:53:39 +0200 + + all: Add installation & debugging information + + README | 15 --------------- + README.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 61 insertions(+), 15 deletions(-) + +commit e5b017af473503f74724cb3210846575900fa486 +Author: Egmont Koblinger +Date: 2019-05-31 13:22:51 +0200 + + widget: Fix misleading comments in cursor_down() + + src/vte.cc | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +commit 9c657532e6c7871266dbf70b6488a749ac22fc14 +Author: Egmont Koblinger +Date: 2019-05-31 10:30:52 +0200 + + widget: Fix invalidation with scrolling region + + In some special case involving a scrolling region, the wrong part + of the display was invalidated. + + https://gitlab.gnome.org/GNOME/vte/issues/131 + + src/vte.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 4b53da3627efead28ee2034c9ad368e37c378da1 +Author: Christian Persch +Date: 2019-05-30 23:06:56 +0200 + + draw: Optimise invalidation and painting + + Cells may contain content that draws outside the cell area. Limit this + to only allow drawing up to the underline position of the line above, + and the overline position of the line below, by clipping the cairo + context to that area before drawing each line. + + Only paint lines that are in the invalidated region (or which due to + overdrawing may draw into the invalidated region). + + https://gitlab.gnome.org/GNOME/vte/issues/56 + + src/vte.cc | 183 ++++++++++++++++------------------------------------- + src/vtedraw.cc | 16 +++++ + src/vtedraw.hh | 22 +++++++ + src/vteinternal.hh | 19 +++++- + 4 files changed, 109 insertions(+), 131 deletions(-) + +commit 3e435583ab34dd0a5c9dbbb040c09aa8cd33ffdf +Author: Egmont Koblinger +Date: 2019-05-30 15:33:32 +0200 + + widget: Refactor offscreen cursor detection + + https://gitlab.gnome.org/GNOME/vte/issues/75 + + src/vte.cc | 23 ++++++++++++++++++----- + src/vteinternal.hh | 1 + + 2 files changed, 19 insertions(+), 5 deletions(-) + +commit 564ce8222dc44c7caac31d80120202fe1f8f0d20 +Author: Christian Persch +Date: 2019-05-29 22:47:46 +0200 + + widget: Add valist signal marshallers + + src/marshal.list | 2 -- + src/meson.build | 1 + + src/vtegtk.cc | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 94 insertions(+), 2 deletions(-) + +commit 1867af10ea314dc3ab4fb7f7093a8882a2fd3f77 +Author: Egmont Koblinger +Date: 2019-05-06 19:57:35 +0200 + + widget: Avoid double painting of letters + + In some cases a piece of text was overstriked with itself, + resulting in bolder look at antialiased edges. + + https://gitlab.gnome.org/GNOME/vte/issues/4 + + src/vte.cc | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit e8fff1c231910783d61003a36bbf960690f50a11 +Author: Christian Persch +Date: 2019-05-06 19:46:59 +0200 + + app: Plug mem leaks + + src/app/app.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit fc0b0c456b93c97d3a0b2676780c72c7018eaf94 +Author: Christian Persch +Date: 2019-05-01 16:33:07 +0200 + + widget: Throw away remaining incoming data on finalize + + There is no need to process remaining incoming data when + we're just finalizeing the widget. + + https://gitlab.gnome.org/GNOME/vte/issues/122 + + src/vte.cc | 7 ++++--- + src/vteinternal.hh | 3 ++- + 2 files changed, 6 insertions(+), 4 deletions(-) + +commit ba7d6416a4bbfe0b0ca4c53f222b5fabd5bdaa72 +Author: Christian Persch +Date: 2019-04-29 11:09:16 +0200 + + build: Fix build on meson 0.49 + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7df0f9a997a1cdffee31fe4d0d100f294c74abea +Author: Christian Persch +Date: 2019-04-28 15:02:23 +0200 + + build: Do not allow disabling asserts + + meson.build | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit 2395e8f18a7fea559e4c65f27ea26d8fe62c3860 +Author: Christian Persch +Date: 2019-04-28 14:47:57 +0200 + + build: Use our own warning flags + + Use warning_level=0, and use our own list of warnings. + + meson.build | 3 +++ + 1 file changed, 3 insertions(+) + +commit fcff57272ea62c2dbfcfc4594bdd85eff7a0c528 +Author: Christian Persch +Date: 2019-04-28 14:38:47 +0200 + + build: Add debug flags when debug is enabled + + meson.build | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit e6ac72a2f7f67d508cd2fcf863764dc593636850 +Author: Christian Persch +Date: 2019-04-26 16:49:28 +0200 + + build: Increase test timeout + + It appears there are computers even slower than mine out there! + + https://gitlab.gnome.org/GNOME/vte/issues/120 + + src/meson.build | 1 + + 1 file changed, 1 insertion(+) + +commit 3147319e58f20bee8973088c396acc3cd71034b3 +Author: Christian Persch +Date: 2019-04-25 23:53:16 +0200 + + pty: Make vte_pty_child_setup() useful for flatpack + + Add flags to VtePty to skip starting a new session and setting the PTY + as controlling TTY for the child process in vte_pty_child_setup(). This + is used when the process using vte is flatpacked, but wants to run + the child process in the host. + + src/pty.cc | 15 +++++++++------ + src/vte/vteenums.h | 6 ++++++ + 2 files changed, 15 insertions(+), 6 deletions(-) + +commit 4717fd5d9e0faf34786f642f3a8fbf260ab0cbb7 +Author: Christian Persch +Date: 2019-04-25 23:53:16 +0200 + + docs: Add index for API new in 0.58 + + doc/reference/vte-docs.xml | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 35d867918c497df7a15aeb731a88937e28cf899d +Author: Christian Persch +Date: 2019-04-25 23:53:16 +0200 + + docs: Add index for API new in 0.56 + + doc/reference/vte-docs.xml | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 7bd8b721f726e4c45464701497c9d79363492cb8 +Author: Christian Persch +Date: 2019-04-23 22:13:43 +0200 + + Post release version bump + + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8afa5e46905492779027ed2c04e8a63e30cd74df (tag: 0.57.0) +Author: Christian Persch +Date: 2019-04-20 19:41:46 +0200 + + parser: glue: Correct parameter collection + + If the minimum value is greater than the maximum_value (which can happen e.g. + when the minimum is 1 and the maximum is m_column_count - cursor.column), + the parameter collection should return the minimum value, not the maximum value. + + src/parser-glue.hh | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +commit d4da2ac7417c710bc7e9824062ab09d1187e815a +Author: Christian Persch +Date: 2019-04-20 19:41:46 +0200 + + Revert "parser: glue: Use std::clamp" + + This reverts commit 1a84c427cd2ea05939b86eb47c21a437d0ce6d79. + + https://bugzilla.redhat.com/show_bug.cgi?id=1701590 + + src/parser-glue.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit bc983ed04151ed769eb9f1bb5d7f2c782f19112c +Author: Abderrahim Kitouni +Date: 2019-04-17 14:58:18 +0100 + + ring: fix printf format + + G_GSIZE_FORMAT was used for an of type row_t which is a gulong + + This fixes 8289c7269512082cf6a3664a0622d83c37bceff1 + + Fixes https://gitlab.gnome.org/GNOME/vte/issues/113 + + src/ring.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit fdb669439066a2c531f249f0d55d4603ba1a4f24 +Author: Rico Tzschichholz +Date: 2019-04-16 16:34:37 +0200 + + vala: Make binding tests compile without warning + + This is an untidy approach which was accepted to be fine as is. + + Fixes https://gitlab.gnome.org/GNOME/vte/issues/112 + + bindings/vala/app.vala | 94 +++++++++++++++++++++++++------------------------- + 1 file changed, 47 insertions(+), 47 deletions(-) + +commit 15c45ca13f3a3f2e048c392fd7f3bf276b709649 +Author: Christian Persch +Date: 2019-04-15 20:26:19 +0200 + + build: Check gcc version + + Apparently earlier gcc versions claim to support the -std flag for C++17 + but don't actually support C++17 fully. + + Ideally, meson would check that the compiler actually supports the standard, + not just the -std flag, but until then, implement a simple version check + based on https://gcc.gnu.org/projects/cxx-status.html#cxx17 + + https://gitlab.gnome.org/GNOME/vte/issues/110 + + meson.build | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 8289c7269512082cf6a3664a0622d83c37bceff1 +Author: Christian Persch +Date: 2019-04-15 18:44:28 +0200 + + ring: Silence some warnings with debug disabled + + https://bugzilla.gnome.org/show_bug.cgi?id=789778 + + src/ring.cc | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 19a483cd7bd1aa73639a9138ee431dfa2929a9d0 +Author: Christian Persch +Date: 2019-04-15 18:44:28 +0200 + + build: List Wextra warnings + + meson.build | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +commit 59915c1163862b4411acd4e6fbd1c3c3d1673b6a +Author: Christian Persch +Date: 2019-04-15 18:44:28 +0200 + + vala: Make the vala test build without warnings + + Fix the code, and pass --enable-deprecated to silence the deprecation warnings. + The vala test is itself deprecated, so there is no need to keep it current + with gtk deprecations. + + bindings/vala/app.vala | 4 +--- + bindings/vala/meson.build | 4 +++- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit d1e4d6322591421ba9d67b829119809cf94982c0 +Author: Christian Persch +Date: 2019-04-15 18:44:28 +0200 + + gir: Fix introspection annotations + + src/pty.cc | 7 ++++--- + src/vtegtk.cc | 4 ++-- + 2 files changed, 6 insertions(+), 5 deletions(-) + +commit 8cd5eee8cca948aef03cd360c67d933d74538931 +Author: Christian Persch +Date: 2019-04-15 18:44:28 +0200 + + reflect: Fix compiler warnings + + meson.build | 1 - + src/reflect.c | 17 ++++++++--------- + 2 files changed, 8 insertions(+), 10 deletions(-) + +commit 32b2cfd47649c9878f7086ac21ad8841eee43a16 +Author: Christian Persch +Date: 2019-04-15 18:44:27 +0200 + + mev: Fix an implicit fallthrough warning + + src/mev.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1817fb8f8ffbb3f3fce81e448968c9de28287bb1 +Author: Christian Persch +Date: 2019-04-15 18:44:27 +0200 + + build: Ignore everything in the build directory + + That makes 'git status' omit the build dir, in case it is inside the + git checkout. + + meson.build | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit d3d01aa7fd190a80ef9e1c2d5f0531e0168db3dd +Author: Christian Persch +Date: 2019-04-15 10:49:24 +0200 + + build: Add missing file + + https://gitlab.gnome.org/GNOME/vte/issues/78#note_489465 + + bindings/meson.build | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +commit 367f0abc9388eef1dd33221de13fa113c4b0006f +Author: Christian Persch +Date: 2019-04-14 22:36:27 +0200 + + l10n: Add POTFILES.skip back + + l10n.g.o still runs intltool-update -m even on non-intltool modules, + so add the skip file back for now. + + po/POTFILES.skip | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit 7905715638662f02860d1f0ebd079053fb9cca3e +Author: Christian Persch +Date: 2019-04-14 22:28:59 +0200 + + l10n: Re-rename POTFILES to POTFILES.in + + It seems l10n.gnome.org requires that. + + https://gitlab.gnome.org/GNOME/vte/issues/78#note_489302 + + po/{POTFILES => POTFILES.in} | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 69d2fb4c3067d9030072d3a675a9049a274e67e1 +Author: Christian Persch +Date: 2019-04-14 22:23:19 +0200 + + Add barebones README + + README | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +commit 7566ad673a12d26293b0a74dd3cb3e5f3d22ed49 +Author: Christian Persch +Date: 2019-04-14 21:11:43 +0200 + + build: Port to meson build system + + Based on a patch by Iñigo Martínez. + + Drop the glade catalogue, which was unmaintained. + Remove the config.h define for the default terminfo name to use, + and just hardcode it. + + https://gitlab.gnome.org/GNOME/vte/issues/78 + + Makefile.am | 48 - + Makefile.meson | 48 + + autogen.sh | 16 - + bindings/Makefile.am | 13 - + bindings/gir/Makefile.am | 34 - + bindings/gir/meson.build | 38 + + bindings/vala/Makefile.am | 98 --- + bindings/vala/meson.build | 98 +++ + configure.ac | 485 ---------- + doc/Makefile.am | 11 - + doc/reference/Makefile.am | 168 ---- + doc/reference/check-doc-coverage.sh | 50 -- + doc/reference/check-doc-syntax.sh | 12 - + doc/reference/meson.build | 108 +++ + git.mk | 333 ------- + glade/Makefile.am | 43 - + .../hicolor_actions_16x16_widget-vte-terminal.png | Bin 644 -> 0 bytes + .../hicolor_actions_22x22_widget-vte-terminal.png | Bin 901 -> 0 bytes + glade/vte.xml.in.in | 45 - + m4/attributes.m4 | 289 ------ + m4/ax_cxx_compile_stdcxx.m4 | 980 --------------------- + meson.build | 406 +++++++++ + meson_options.txt | 70 ++ + perf/Makefile.am | 16 - + po/{POTFILES.in => POTFILES} | 0 + po/POTFILES.skip | 7 - + po/meson.build | 21 + + src/Makefile.am | 451 ---------- + src/app/Makefile.am | 58 -- + src/app/app.cc | 2 - + src/app/meson.build | 56 ++ + src/meson.build | 475 ++++++++++ + src/pty.cc | 6 +- + src/test-vte-sh.sh | 7 +- + src/{vte.gresource.xml.in => vte.gresource.xml} | 0 + src/vte/meson.build | 70 ++ + src/vtegtk.cc | 2 - + vte.pc.in | 11 - + 38 files changed, 1397 insertions(+), 3178 deletions(-) + +commit 9bdf87c1eb41855c323259c8b4854864bdb1064e +Author: iTakeshi +Date: 2019-04-11 13:47:28 +0200 + + regex: Fix doc comment + + https://gitlab.gnome.org/GNOME/vte/issues/107 + + src/vteregex.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b06dd748b705afb4c1306296f4118c2b63d5da27 +Author: Egmont Koblinger +Date: 2019-04-08 22:58:54 +0200 + + widget: Cancel autoscroll on ending selecting + + https://gitlab.gnome.org/GNOME/vte/issues/105 + (cherry picked from commit 52e546badeedf12dbbd7706042f1d0f3a9e4f0b3) + + src/vte.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 9540448ba80bf7750581a5749fa35c12631b598d +Author: Christian Persch +Date: 2019-03-04 16:40:14 +0100 + + Post branch version bump + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 200fe5db6c3f542493374026f8b37d7a73ec86c3 (tag: 0.55.92) +Author: Christian Persch +Date: 2019-03-04 16:33:59 +0100 + + Version 0.55.92 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d99c19cd6063d71d1debe3d656644f87faa26107 +Author: Christian Persch +Date: 2019-03-04 16:31:30 +0100 + + app: Add fullscreen mode + + ... to test geometry handling on fullscreen/unfullscreen. + + src/app/app.cc | 46 +++++++++++++++++++++++++++++++++++++++++++++- + src/app/window.ui | 6 ++++++ + 2 files changed, 51 insertions(+), 1 deletion(-) + +commit 7b23b8aa338a289eafaf5e27c93ede4355b22af5 +Author: Egmont Koblinger +Date: 2019-03-04 09:56:53 +0100 + + attr: Typo fix + + src/attr.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3ab488b30283bca9f797965a9ff1ace8f56b0d32 +Author: Christian Persch +Date: 2019-03-03 22:15:26 +0100 + + widget: Prevent clipboard callbacks during destruction + + https://gitlab.gnome.org/GNOME/vte/issues/89 + + src/vte.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit 16669671641438f35514082048449231b43c55bb +Author: Марко Костић +Date: 2019-02-28 20:30:38 +0000 + + Update Serbian translation + + po/sr.po | 37 ++++++++++++++++++------------------- + 1 file changed, 18 insertions(+), 19 deletions(-) + +commit 770df2354cd159db37fb40a66e43038dfc97ef09 +Author: Nathan Follens +Date: 2019-02-24 10:27:51 +0000 + + Update Dutch translation + + po/nl.po | 32 +++++++++++++++----------------- + 1 file changed, 15 insertions(+), 17 deletions(-) + +commit 473c4e712881252cc832e31ecf7f2d077f60f70f +Author: Egmont Koblinger +Date: 2019-02-11 22:57:13 +0100 + + emulation: Do not encode keyboard modifiers in X10 mouse mode + + https://gitlab.gnome.org/GNOME/vte/issues/93 + + src/vte.cc | 20 +++++++++++--------- + 1 file changed, 11 insertions(+), 9 deletions(-) + +commit 97dcafab38f209d0ae3529741e346a500a196dee +Author: Christian Persch +Date: 2019-02-04 23:47:41 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6bbff58a518ead0850b4c1e3ef942f2827f92f11 (tag: 0.55.90) +Author: Christian Persch +Date: 2019-02-04 23:40:48 +0100 + + Version 0.55.90 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2bc606c8dc093c93a7909230da7c2235e3bb062f +Author: Egmont Koblinger +Date: 2019-02-04 23:32:55 +0100 + + perf: Add files to EXTRA_DIST + + perf/Makefile.am | 3 +++ + 1 file changed, 3 insertions(+) + +commit 5cff1f231cbc2d59f13298cdaa106b39c1875762 +Author: Egmont Koblinger +Date: 2019-02-04 23:31:21 +0100 + + devanagari.txt: New test file + + perf/devanagari.txt | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 0765088c7710d7c48083efdb1ebf958df742a0b8 +Author: Egmont Koblinger +Date: 2019-02-04 23:06:39 +0100 + + widget: Handle spacing combining marks + + Spacing combining marks are now combined with the preceding base letter + for display purposes. This significantly improves the rendering of + Devanagari and similar scripts. + + https://bugzilla.gnome.org/show_bug.cgi?id=584160 + + src/vte.cc | 32 +++++++++++++++++++++++++++++--- + 1 file changed, 29 insertions(+), 3 deletions(-) + +commit 27411d1642d3bbafe5986e4f406db361a326a31e +Author: Egmont Koblinger +Date: 2019-02-04 23:05:45 +0100 + + vteunistr: Add method to concatenate two unistrs + + src/vteunistr.cc | 13 +++++++++++++ + src/vteunistr.h | 13 +++++++++++++ + 2 files changed, 26 insertions(+) + +commit 5a01bf95904148a06baf7f908f7321ff3fc7d1a8 +Author: Egmont Koblinger +Date: 2019-01-03 13:51:27 +0100 + + build: Add -Wvla + + configure.ac | 1 + + 1 file changed, 1 insertion(+) + +commit f00344ba6ffee12ad79c6bf62aa65dc2fe2374dc +Author: Andre Klapper +Date: 2018-12-15 23:58:58 +0100 + + Replace Bugzilla by Gitlab URL in DOAP file + + vte.doap | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 72648d140b7e9d50dc0d0139dcd846fa21116d71 +Author: Christian Persch +Date: 2018-12-10 22:06:50 +0100 + + parser: charset: Mention some more charsets + + src/parser-charset-tables.hh | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 76c7dcab5ea80ca3fc6338765eaf7a49b4833b56 +Author: Egmont Koblinger +Date: 2018-12-09 22:20:29 +0100 + + widget: Disconnect GtkSettings signals in destructor + + This fixes a crash when the cursor blink settings are modified + after a terminal exits. + + https://gitlab.gnome.org/GNOME/vte/issues/77 + + src/vte.cc | 4 ---- + src/widget.cc | 5 +++++ + 2 files changed, 5 insertions(+), 4 deletions(-) + +commit 53690d5cee51bdb7c3f7680d3c22b316b1086f2c +Author: Rico Tzschichholz +Date: 2018-12-01 19:04:59 +0100 + + vala: Fix build with vala 0.43+ git master due to empty struct definition + + This should get a proper refactoring as the FIXME suggests. + + See https://gitlab.gnome.org/GNOME/vte/issues/76 + + bindings/vala/app.vala | 2 ++ + 1 file changed, 2 insertions(+) + +commit 748547ef4c1c44942a45e5724d82993e325dbd04 +Author: Christian Persch +Date: 2018-11-28 21:58:24 +0100 + + parser: Document some known deviations from VT100 + + src/parser.cc | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +commit 072274d0ef5a0a3729a51ad14f6a9d32c445b505 +Author: Christian Persch +Date: 2018-11-28 20:36:47 +0100 + + parser: Assert that the parser is not in an unknown state + + Don't print a useless warning, but use an assertion instead. + + src/parser.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 3f81d804ccf19d700bfcf6caf2c07d7887f4d5ae +Author: Christian Persch +Date: 2018-11-28 20:36:47 +0100 + + parser: Code style fixes + + src/parser-glue.hh | 8 +-- + src/parser.cc | 198 ++++++++++++++++++++++++++++++++++++----------------- + src/parser.hh | 18 ++--- + 3 files changed, 147 insertions(+), 77 deletions(-) + +commit 75b4f8440bc00fecec0286a452e7b182c46079bb +Author: Egmont Koblinger +Date: 2018-11-27 23:13:57 +0100 + + widget: Don't show the cursor occasionally over the scrollback data + + https://gitlab.gnome.org/GNOME/vte/issues/75 + + src/vte.cc | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 8e35ff4ae7b4b10ab9b1c01ea35e0743d7542f5f +Author: Peter Wu +Date: 2018-11-26 12:28:50 +0100 + + spawn: Fix g_spawn deadlock in a multi-threaded program on linux + + Ported from glib@f2917459f745bebf931bccd5cc2c33aa81ef4d12 + + Issues: glib#945 and glib#1014 + + src/vtespawn.cc | 94 +++++++++++++++++++++++++++++++++++++++------------------ + 1 file changed, 65 insertions(+), 29 deletions(-) + +commit e229ea34cadd21a5afcded56bc7b794e14e86649 +Author: Egmont Koblinger +Date: 2018-11-26 00:38:13 +0100 + + widget: Fix mouse selection to skip trailing unused cells + + Regression from commit 4005f653ac7df5475066da7245b87d71f11e2c8b. + + https://gitlab.gnome.org/GNOME/vte/issues/68 + + src/vte.cc | 16 ++++++++-------- + src/vterowdata.cc | 13 +++++++++++++ + src/vterowdata.hh | 1 + + 3 files changed, 22 insertions(+), 8 deletions(-) + +commit 7124ade774e73d9a4210607e8666dc98ab200acb +Author: Egmont Koblinger +Date: 2018-11-26 00:37:11 +0100 + + widget: Strip off trailing unused cells in get_text() + + Restore the behavior of not including trailing unused cells as spaces, + not even when they have a custom background. This corresponds to the + false value of the former include_trailing_spaces flag. + + This partially reverts commit 138baedc50bbbc455bbc16e76919af2d6f6d7492 + + https://gitlab.gnome.org/GNOME/vte/issues/38 + https://gitlab.gnome.org/GNOME/vte/issues/68 + + src/vte.cc | 39 +++++++++++++++++++++++++++++++++++++++ + 1 file changed, 39 insertions(+) + +commit cfd75ab69f221259e1c15a6b6957a88ef5b91ebc +Author: Egmont Koblinger +Date: 2018-11-26 00:21:57 +0100 + + widget: Fix URL recognition after dragging the scrollbar + + https://gitlab.gnome.org/GNOME/vte/issues/74 + + src/vte.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 8d45f5ff950131d1d9724b62628b4e81a8461462 +Author: Christian Persch +Date: 2018-11-25 23:46:43 +0100 + + regex: Add vte_regex_substitute + + Add VteRegex API to substitute a string match with a replacement. + + Based on a patch by Rodolfo Granata . + + https://gitlab.gnome.org/GNOME/gnome-terminal/issues/43 + + doc/reference/vte-sections.txt | 1 + + src/app/app.cc | 25 +++++++++++++--- + src/vte/vteregex.h | 7 +++++ + src/vteregex.cc | 67 +++++++++++++++++++++++++++++++++++++++++- + src/vteregexinternal.hh | 2 +- + 5 files changed, 96 insertions(+), 6 deletions(-) + +commit 3df8290b4c90d3794ed00cff7f284fbeb6b0ef72 +Author: Iñigo Martínez +Date: 2017-07-03 09:36:14 +0200 + + build: Use input file as parameter in box drawing script + + Changed box_drawing_generate.sh script to read from a file passed as + parameter explicitly instead of using input redirection. + + src/Makefile.am | 2 +- + src/box_drawing_generate.sh | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit ecb62ea5a5b24a5bff38356ab3575b1d9852938b +Author: Ting-Wei Lan +Date: 2018-11-18 23:09:45 +0800 + + parser: cat: Fix clang build error + + seq.param returns int, so param should not be declared as unsigned int. + + src/parser-cat.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fe664c53ed8e43437a10c3699a5870a10132ac32 +Author: Christian Persch +Date: 2018-11-12 22:11:00 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8b9cc7d79afe7d8d399840d1d269b04c71df28df (tag: 0.55.0) +Author: Christian Persch +Date: 2018-11-10 11:08:12 +0100 + + parser: Complete SCI infrastructure + + Add (empty) list of known CSI functions, and test for them. + + src/Makefile.am | 3 +++ + src/parser-sci.hh | 20 ++++++++++++++++++++ + src/parser-test.cc | 24 ++++++++++++++++++++++++ + src/parser.cc | 8 +++++++- + 4 files changed, 54 insertions(+), 1 deletion(-) + +commit 9dabb0f46623b9c7987b3a4c6ee0a67bf43bac71 +Author: Christian Persch +Date: 2018-11-10 11:08:12 +0100 + + parser: cat: Add linter for SGR sequences + + Warn on unknown and unsupported SGR values, and on unknown + and deprecated colour parameters for SGR 38, 48 and 58. + + src/parser-cat.cc | 173 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 173 insertions(+) + +commit ca6956bc653fa1804053d9e3af0f5b4c61aad5aa +Author: Christian Persch +Date: 2018-11-10 11:08:12 +0100 + + parser: cat: Use the parser glue + + src/parser-cat.cc | 129 ++++++++++++++++++++++++++++++----------------------- + src/parser-glue.hh | 11 +++++ + 2 files changed, 84 insertions(+), 56 deletions(-) + +commit 01ad89c6c8926fba966f4333241359afe84c7ee0 +Author: Christian Persch +Date: 2018-11-10 11:08:12 +0100 + + emulation: Treat rapid blink like blink + + src/vteseq.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 38ea0414a411650f5b59b8ecd89f9c453f188690 +Author: Christian Persch +Date: 2018-11-10 11:08:12 +0100 + + parser: Define SGR enum from include files + + src/Makefile.am | 6 +++++ + src/parser-decsgr.hh | 35 ++++++++++++++++++++++++ + src/parser-sgr.hh | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/parser.hh | 16 +++++++++++ + src/vteinternal.hh | 36 ------------------------- + 5 files changed, 133 insertions(+), 36 deletions(-) + +commit f51e0bf23a1b0cbc65e76272eed8d74ec13eba3e +Author: Christian Persch +Date: 2018-11-10 11:08:12 +0100 + + parser: Fix licence template sed job mistake + + src/parser-osc.hh | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 8c034b3839c2d3c6b1b947fd167c711e97dc374a +Author: Christian Persch +Date: 2018-11-10 11:08:12 +0100 + + app: Add new terminal to main menu + + When there's nothing displaying the app menu, New Terminal + wasn't accessible. Add it to the main menu. + + src/app/window.ui | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 4005f653ac7df5475066da7245b87d71f11e2c8b +Author: Egmont Koblinger +Date: 2018-11-07 14:00:40 +0100 + + widget: Rewrite the tracking of selection endpoints + + Track mouse click and drag positions as pointing to the left or right half + of a character cell, rather than between cells. This change is required for + forthcoming BiDi support. + + Refactor the methods and their responsibilities. + + Fixes and improvements of corner cases as listed in the bugreport. + + https://gitlab.gnome.org/GNOME/vte/issues/34 + + src/vte.cc | 1058 ++++++++++++++++++++++++++-------------------------- + src/vteaccess.cc | 9 +- + src/vtegtk.cc | 2 +- + src/vteinternal.hh | 31 +- + src/vtetypes.cc | 73 +++- + src/vtetypes.hh | 59 ++- + 6 files changed, 660 insertions(+), 572 deletions(-) + +commit 1d4eab2e8e098830aafb1001ce4b5a4100db9f4f +Author: Christian Persch +Date: 2018-11-03 22:25:48 +0100 + + lib: Fix clang build error + + Explicitly cast to integer to avoid a narrowing error. + + https://gitlab.gnome.org/GNOME/vte/issues/67 + + src/vteseq.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ad078eb4fec6ba5ec7c2c220fe987b45f87798eb +Author: Christian Persch +Date: 2018-11-02 20:27:20 +0100 + + regex: Check whether PCRE2 was compiled with JIT support + + ... and only warn once if it was not. + + src/vteregex.cc | 48 ++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 38 insertions(+), 10 deletions(-) + +commit 8717ef9d2ec206fe36b758fe9098387c0c3351b2 +Author: Christian Persch +Date: 2018-10-28 19:44:28 +0100 + + emulation: Make OSC replies with same terminator as request + + When replying to an OSC request with an OSC reply, use + the same string terminator (ST or BEL) as the request. + + https://bugzilla.gnome.org/show_bug.cgi?id=722446 + https://gitlab.gnome.org/GNOME/vte/issues/65 + + src/parser-glue.hh | 2 ++ + src/vte.cc | 18 +++++++++++++++--- + 2 files changed, 17 insertions(+), 3 deletions(-) + +commit a25b6339bcf3a328ec3aed63141970a75bce813f +Author: Christian Persch +Date: 2018-10-28 19:44:28 +0100 + + parser: charset: Add a DEC private OCS + + src/parser-charset-tables.hh | 2 +- + src/parser-charset.hh | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +commit fe8b0649d58dea2fc614e617776bc8794f9d6323 +Author: Christian Persch +Date: 2018-10-28 19:44:28 +0100 + + emulation: Document two more DECSGR values + + src/vteseq.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit c67376c8e95eee50687e00dd409f62e47c65ec8e +Author: Christian Persch +Date: 2018-10-28 19:44:28 +0100 + + emulation: Document two DEC private ACS value + + src/vteseq.cc | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +commit da28e9007b2ad10ef9d200a999997fc228ea88b9 +Author: Christian Persch +Date: 2018-10-28 19:44:28 +0100 + + parser: charset: Add a DEC private OCS + + src/parser-charset-tables.hh | 12 ++++++++++-- + src/parser-charset.hh | 1 + + src/parser-test.cc | 16 +++++++++++----- + src/parser.cc | 18 ++++++++++++++---- + 4 files changed, 36 insertions(+), 11 deletions(-) + +commit 05d7324a8cf9cb5af32a4ced094a308139cfd34e +Author: Egmont Koblinger +Date: 2018-10-21 00:25:52 +0200 + + hyperlink-demo.txt: Prefer ST to BEL + + perf/hyperlink-demo.txt | 104 ++++++++++++++++++++++++------------------------ + 1 file changed, 52 insertions(+), 52 deletions(-) + +commit 668173e13e22d840fe418a2276f81161f82bcdb2 +Author: Christian Persch +Date: 2018-10-19 23:46:03 +0200 + + parser: charset: Add a DEC private OCS + + src/parser-charset-tables.hh | 3 +++ + src/parser-charset.hh | 4 ++++ + src/parser-test.cc | 2 +- + src/parser.cc | 4 ++-- + 4 files changed, 10 insertions(+), 3 deletions(-) + +commit d3d9ce88326b0b0d94341de70a73b114e004fdcf +Author: Christian Persch +Date: 2018-10-19 23:46:03 +0200 + + parser: Add another sequence + + src/parser-cmd.hh | 1 + + src/parser-csi.hh | 1 + + src/vteseq.cc | 25 +++++++++++++++++++++++++ + 3 files changed, 27 insertions(+) + +commit c164518011ace939a74b689ac0487dd939dde7fb +Author: Christian Persch +Date: 2018-10-19 23:46:03 +0200 + + tabstops: Cleanup includes + + src/tabstops.hh | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit 4edf989337664452b988a5273a24f9b0355cdb27 +Author: Christian Persch +Date: 2018-10-19 23:46:03 +0200 + + parser: cat: Restructure options parsing + + Also fixes narrowing error with clang: + https://gitlab.gnome.org/GNOME/vte/issues/58 + + src/parser-cat.cc | 148 ++++++++++++++++++++++++++++++++++++------------------ + 1 file changed, 100 insertions(+), 48 deletions(-) + +commit 7c988b9e1ca4a96bd759d52370e6b43cbf572160 +Author: Christian Persch +Date: 2018-10-19 23:46:03 +0200 + + parser: cat: Code style fixes + + src/parser-cat.cc | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +commit 1a84c427cd2ea05939b86eb47c21a437d0ce6d79 +Author: Christian Persch +Date: 2018-10-19 23:46:03 +0200 + + parser: glue: Use std::clamp + + src/parser-glue.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 441ea0ed2c06bfe716c390c825031024eee065ee +Author: Akira Nakajima +Date: 2018-10-19 22:12:48 +0200 + + ring: Fix thawing combining accents over a double-wide character + + https://bugzilla.gnome.org/show_bug.cgi?id=795192 + + src/ring.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 5c7bf233c78969d4b92f71c077a118d51bed3187 +Author: Anish Sheela +Date: 2018-10-15 14:29:06 +0000 + + Update Malayalam translation + + po/ml.po | 147 ++++++++++++++++++++++++++------------------------------------- + 1 file changed, 61 insertions(+), 86 deletions(-) + +commit db83de67084387a73031deaf984b21626879d6be +Author: Christian Persch +Date: 2018-10-06 23:08:28 +0200 + + parser: cat: Refactor and implement lint mode + + Refactor the parser cat to make it easier plugging in + a linter instead of a pretty printer, and implement a basic + linter. + + src/parser-cat.cc | 860 +++++++++++++++++++++++++++++++----------------------- + 1 file changed, 500 insertions(+), 360 deletions(-) + +commit 86e1d0883b88d4899c9b398d9f0a1c51b9d86e8d +Author: Christian Persch +Date: 2018-10-06 23:08:28 +0200 + + emulation: Make dispatch of SCORC symmetrical to SCOSC + + Only dispatch either when DECLRMM is reset. + + src/vteseq.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit e9129cb8f408d7970e8fb32c845075aa52233e26 +Author: Christian Persch +Date: 2018-10-06 23:08:28 +0200 + + modes: Use parentheses in macro + + src/modes.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 58f451a52cb7b3fa68202d6756538731235cb0f1 +Author: Egmont Koblinger +Date: 2018-10-05 14:54:30 +0200 + + widget: Convert vte::grid::span to end-exclusive + + Also fix highlighting when the last character of a match is of double width. + + https://gitlab.gnome.org/GNOME/vte/issues/34 + + src/vte.cc | 8 +++++--- + src/vte/vteterminal.h | 2 +- + src/vtetypes.cc | 25 ++++++++++++------------- + src/vtetypes.hh | 9 +++++---- + 4 files changed, 23 insertions(+), 21 deletions(-) + +commit 79f74ded5a87103426902e21f0d6000086806ffb +Author: Egmont Koblinger +Date: 2018-10-05 13:57:16 +0200 + + widget: Always invalidate entire rows + + https://gitlab.gnome.org/GNOME/vte/issues/26 + + src/vte.cc | 386 ++++++++++++----------------------------------------- + src/vteinternal.hh | 15 +-- + src/vteseq.cc | 33 ++--- + 3 files changed, 101 insertions(+), 333 deletions(-) + +commit b8756bef93778aed0c6f3e3290a95c8773c30f0d +Author: Egmont Koblinger +Date: 2018-10-05 13:56:48 +0200 + + widget: Always draw entire rows + + https://gitlab.gnome.org/GNOME/vte/issues/26 + + src/vte.cc | 46 +++++++++++++++------------------------------- + src/vteinternal.hh | 3 --- + 2 files changed, 15 insertions(+), 34 deletions(-) + +commit f4fd7fde0984f6e6ae8a7de265f15025b68f4ef6 +Author: Egmont Koblinger +Date: 2018-10-05 13:55:43 +0200 + + widget: Simplify draw_rows() + + https://gitlab.gnome.org/GNOME/vte/issues/26 + + src/vte.cc | 412 ++++++++++++++++++++------------------------------------- + src/vtedraw.cc | 3 - + src/vtedraw.hh | 1 - + 3 files changed, 140 insertions(+), 276 deletions(-) + +commit f86cae603b23d34e36ab95fde6612bfc4d5eeca8 +Author: Egmont Koblinger +Date: 2018-10-01 23:31:26 +0200 + + emulation: Implement SCOSC/SCORC + + https://gitlab.gnome.org/GNOME/vte/issues/48 + + src/modes-private.hh | 3 ++- + src/modes.hh | 11 +++++++-- + src/parser-cmd.hh | 6 +++-- + src/parser-csi.hh | 4 ++-- + src/vteseq.cc | 65 +++++++++++++++++++++++++++++++++++++++++----------- + 5 files changed, 68 insertions(+), 21 deletions(-) + +commit b4107da616c069bdff5c275fa37145a36cb9a373 +Author: Christian Persch +Date: 2018-09-28 12:17:40 +0200 + + stream: test: Silence warning + + clang generates weird warnings for this from -Wstring-plus-int; + silence that warning. + + src/vtestream-file.h | 4 ++++ + 1 file changed, 4 insertions(+) + +commit f6c7c9e9ac6d1121c3ca6f1e0e0e4dfe4253eb3f +Author: Christian Persch +Date: 2018-09-28 12:17:40 +0200 + + tests: Silence unused variable warning + + src/vtetypes.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit c6c029152090c772b51291531871abc8e818e4e9 +Author: Christian Persch +Date: 2018-09-28 12:17:40 +0200 + + mev: Add noreturn attribute + + src/mev.c | 1 + + 1 file changed, 1 insertion(+) + +commit f88efe23e25f88b2ade06f6c4a4f0dde3d6070a4 +Author: Christian Persch +Date: 2018-09-28 12:17:40 +0200 + + regex: Only silence warning on GCC + + clang doesn't know this warning, so silencing it results in + another warning. + + src/vteregex.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 228a2850fa9da2e3ee1ce807363405c485c323b9 +Author: Christian Persch +Date: 2018-09-28 12:17:40 +0200 + + spawn: Add noreturn attribute + + src/vtespawn.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 74810de1329073b0dcda36a2f4c227106891e051 +Author: Christian Persch +Date: 2018-09-28 12:17:40 +0200 + + chunk: Remove erroneous std::move calls + + src/chunk.cc | 2 +- + src/vte.cc | 8 ++++---- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit 089b7964997123917f07c5d82bae301ac7364f6a +Author: Christian Persch +Date: 2018-09-28 12:17:40 +0200 + + cell: Silence an incorrect warning + + Compiling cell.hh with clang generates lots of warnings of the form: + + ./cell.hh:102:9: warning: taking address of packed member 'm_colors' + of class or structure 'VteCellAttr' may result in an unaligned pointer + value [-Waddress-of-packed-member] + CELL_ATTR_COLOR(fore) + ^~~~~~~~~~~~~~~~~~~~~ + ./cell.hh:94:46: note: expanded from macro 'CELL_ATTR_COLOR' + vte_color_triple_set_##name(&m_colors, value); \ + ^~~~~~~~ + + However, VteCellAttr is only ever used as a member of VteCell, + where it has offset 4, resulting in the pointers being aligned + sufficiently. + + src/cell.hh | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +commit 4e7fe2f2fc02cc008f67d80ef3cd9b41a8f17129 +Author: Egmont Koblinger +Date: 2018-09-27 21:25:50 +0200 + + widget: Add missing exception specification + + This fixes compiling with clang. + + src/widget.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a688882382d6484e790ea87aa713c012970280b0 +Author: Christian Persch +Date: 2018-09-27 20:15:24 +0200 + + parser: Improve documentation of XTERM_CHECKSUM_MODE + + https://gitlab.gnome.org/GNOME/vte/issues/24 + + src/vteseq.cc | 1 + + 1 file changed, 1 insertion(+) + +commit db2127025b742da895a416d7053b3e09589b2fa4 +Author: Christian Persch +Date: 2018-09-27 20:15:24 +0200 + + parser: Recognise new xterm sequence + + xterm 335 adds XTERM_CHECKSUM_MODE sequence to set + how DECRQCRA calculates the area checksum. Make our + parser recognise it, but we won't implement it unless + esctest starts requiring it. + + https://gitlab.gnome.org/GNOME/vte/issues/24 + + src/parser-cmd.hh | 1 + + src/parser-csi.hh | 1 + + src/vteseq.cc | 24 ++++++++++++++++++++++++ + 3 files changed, 26 insertions(+) + +commit 28b24ba1850b1dad4215697a58f91c8313ce1b23 +Author: Christian Persch +Date: 2018-09-27 18:07:50 +0200 + + all: Fix implicit-fallthrough warnings + + Use [[fallthrough]] attribute to make it clear where + fallthrough is expected. + + configure.ac | 2 ++ + src/parser-cat.cc | 4 ++-- + src/parser.cc | 3 ++- + src/utf8-test.cc | 4 ++-- + src/vte.cc | 4 ++-- + 5 files changed, 10 insertions(+), 7 deletions(-) + +commit 12e0145329cc4f16ea1bc6ba5f2075109a84eef6 +Author: Christian Persch +Date: 2018-09-27 18:07:50 +0200 + + build: Require C++17 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 549166627c077412b3fee2a248a33e497bd24b34 +Author: Christian Persch +Date: 2018-09-27 18:07:50 +0200 + + regex: Silence compiler warning + + The function cast is fine, but -Wcast-function-type warns about it + with recent gcc / recent glib. + + src/vteregex.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit cb315a4c4162a543f910cb0c11a8cf91bd17b0e4 +Author: Egmont Koblinger +Date: 2018-09-23 12:55:46 +0200 + + conv: Fix crash after multiple encoding changes + + https://gitlab.gnome.org/GNOME/vte/issues/50 + + src/vte.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit bca1cd274c1ffafea98f5b9e586b9069a781a318 +Author: Egmont Koblinger +Date: 2018-09-12 13:04:28 +0200 + + widget: Avoid unnecessary invalidations at hyperlinks + + https://gitlab.gnome.org/GNOME/vte/issues/44 + + src/vte.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 02e5fc3ea9c8fd0a39559bc9f1ef63d56be562db +Author: Stas Solovey +Date: 2018-09-10 20:13:11 +0000 + + Update Russian translation + + (cherry picked from commit 94082c9736405c1fb2d7a71da943ca52d21c130f) + + po/ru.po | 32 +++++++++++++++----------------- + 1 file changed, 15 insertions(+), 17 deletions(-) + +commit 5a3cb742fca2d3d5a995e7a3c3cb4204d3aef511 +Author: Christian Persch +Date: 2018-09-10 14:07:12 +0200 + + parser: Remove extraneous sequence + + DCS $ r is DECRPSS, the response to DECRQSS, so don't recognise + it as DECRQSS itself. + + https://gitlab.gnome.org/GNOME/vte/issues/35#note_312259 + + src/parser-dcs.hh | 1 - + 1 file changed, 1 deletion(-) + +commit b3b3c3585528754a0923fcfc7a74126cd839784f +Author: Egmont Koblinger +Date: 2018-09-09 23:39:45 +0200 + + vte.sh: Revert to C0 controls in OSC sequences + + src/vte.sh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 138baedc50bbbc455bbc16e76919af2d6f6d7492 +Author: Egmont Koblinger +Date: 2018-09-07 23:13:37 +0200 + + widget: Deprecate vte_terminal_get_text_include_trailing_spaces() + + Also remove the include_trailing_spaces flag internally. + + https://gitlab.gnome.org/GNOME/vte/issues/38 + + doc/reference/vte-sections.txt | 2 +- + src/vte.cc | 47 ++---------------------------------------- + src/vte/vtedeprecated.h | 6 ++++++ + src/vte/vteterminal.h | 5 ----- + src/vteaccess.cc | 1 - + src/vtegtk.cc | 17 ++++----------- + src/vteinternal.hh | 3 --- + 7 files changed, 13 insertions(+), 68 deletions(-) + +commit ab5161c7df07e09bc7796812d6fa6fdf79f61830 +Author: Egmont Koblinger +Date: 2018-09-07 17:50:02 +0200 + + widget: Disable "bold is bright" by default + + https://bugzilla.gnome.org/show_bug.cgi?id=762247#c25 + + src/app/app.cc | 8 ++++---- + src/vte.cc | 2 +- + src/vtegtk.cc | 2 +- + 3 files changed, 6 insertions(+), 6 deletions(-) + +commit ae7a52101554487f58f8d55325ef8e27136df242 +Author: Yuras Shumovich +Date: 2018-09-07 11:20:48 +0000 + + Update Belarusian translation + + (cherry picked from commit dace9988710869d0a3a02e6a1f3904f7d2289bf5) + + po/be.po | 39 +++++++++++++++++---------------------- + 1 file changed, 17 insertions(+), 22 deletions(-) + +commit 8f4e3c199064adca159daa475774a9ce4be9df36 +Author: Christian Persch +Date: 2018-09-03 16:10:51 +0200 + + parser: Fix incorrect sequence + + https://gitlab.gnome.org/GNOME/vte/issues/35 + + src/parser-cmd.hh | 9 +++++---- + src/parser-csi.hh | 6 +++--- + src/vteseq.cc | 22 ++++++++++++++++++---- + 3 files changed, 26 insertions(+), 11 deletions(-) + +commit b8b1aa4ed5ef12368c5c3f6d85ebf3e1d72f91a8 +Author: Christian Persch +Date: 2018-09-03 16:10:51 +0200 + + utf8: Make decoder conform to recommendation on replacement characters + + With this change, the decoder conforms to the W3 Encoding TR and + the Unicode recommendation on inserting replacement characters + from §3.9 of the Unicode core spec. + + https://gitlab.gnome.org/GNOME/vte/issues/30 + + src/parser-cat.cc | 15 ++++++-------- + src/utf8-test.cc | 58 ++++++++++--------------------------------------------- + src/utf8.cc | 47 ++++++++++++++++++++++++++++++++++++-------- + src/utf8.hh | 7 ++----- + src/vte.cc | 15 ++++++-------- + 5 files changed, 63 insertions(+), 79 deletions(-) + +commit 9bda7de4baf75fd81b8d9a4c745cf46898273477 +Author: Christian Persch +Date: 2018-09-03 16:10:51 +0200 + + utf8: Use a symbol for REJECT in the data table + + Use a short abbreviation, so that the table doesn't need + to be reformatted when the next commit introduces a new + 3-digit state. + + src/utf8.cc | 20 +++++++++++--------- + 1 file changed, 11 insertions(+), 9 deletions(-) + +commit 765f59f1c3c5881b43292223a9cb7545c0764c95 +Author: Christian Persch +Date: 2018-09-03 16:10:51 +0200 + + utf8: Reformat data table + + Make the table more readable and add comments. + + src/utf8.cc | 63 ++++++++++++++++++++++++++++++++++++++++++++++--------------- + 1 file changed, 48 insertions(+), 15 deletions(-) + +commit a7cf5d57115ed3b6ffd62b375c12a6c3eae5ee73 +Author: Christian Persch +Date: 2018-09-03 16:10:51 +0200 + + lib: Make debug assertion conditional on VTE_DEBUG + + src/vte.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit dba065d10fedcadeab5b825a9ac2739509929798 +Author: Egmont Koblinger +Date: 2018-09-03 13:40:17 +0200 + + widget: Clean up overly complex vte_cell_is_between() + + https://gitlab.gnome.org/GNOME/vte/issues/33 + + src/vte.cc | 73 ++++++-------------------------------------------------------- + 1 file changed, 7 insertions(+), 66 deletions(-) + +commit dabedec3df2134e8888e9c4f9a003473c561611f +Author: Egmont Koblinger +Date: 2018-09-03 13:34:45 +0200 + + emulation: Fix upper coordinate limit for legacy mouse events + + https://gitlab.gnome.org/GNOME/vte/issues/36 + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 78d07374fc46895487afa02b4644a9451e297a53 +Author: gogo +Date: 2018-09-02 17:00:36 +0000 + + Update Croatian translation + + po/hr.po | 36 ++++++++++++++++-------------------- + 1 file changed, 16 insertions(+), 20 deletions(-) + +commit f95c35b95dd77376f71f071de0e089b2a20d8ac2 +Author: Christian Persch +Date: 2018-09-02 11:43:27 +0200 + + Post branch version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2b7729bab7ba1faa05be0c5b480c0a33f3e360aa (tag: 0.54.0) +Author: Christian Persch +Date: 2018-09-02 11:37:04 +0200 + + Version 0.54.0 + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit bc2f1b390a6fc0ea6913833bf7919500f5c96e35 +Author: Christian Persch +Date: 2018-09-02 11:29:19 +0200 + + utf8: Don't swallow start bytes in the middle of a sequence + + https://gitlab.gnome.org/GNOME/vte/issues/30 + + src/Makefile.am | 19 ++- + src/parser-cat.cc | 11 ++ + src/utf8-test.cc | 349 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/utf8.hh | 4 + + src/vte.cc | 12 ++ + 5 files changed, 394 insertions(+), 1 deletion(-) + +commit 57c3a07947f301d0363e9449b089da800a7e08d7 +Author: Christian Persch +Date: 2018-09-01 19:28:40 +0200 + + widget: Avoid invalidation from unrealize + + On unrealize, reset the IM preedit data without causing + an invalidation, which would access data already destroyed. + + https://gitlab.gnome.org/GNOME/vte/issues/29 + + src/vte.cc | 28 +++++++++++++++------------- + src/vteinternal.hh | 1 + + src/widget.cc | 2 +- + 3 files changed, 17 insertions(+), 14 deletions(-) + +commit bd74d0dda1287e137a84d9ed49b45e789685980b +Author: Ask Hjorth Larsen +Date: 2018-09-01 18:46:10 +0200 + + Updated Danish translation + + po/da.po | 37 ++++++++++++++++--------------------- + 1 file changed, 16 insertions(+), 21 deletions(-) + +commit 390eb885cbbde69e44c1b2138011b6f5163c3a0f +Author: Rūdolfs Mazurs +Date: 2018-08-31 18:07:08 +0000 + + Update Latvian translation + + po/lv.po | 33 ++++++++++++++++----------------- + 1 file changed, 16 insertions(+), 17 deletions(-) + +commit e12f34cd0820ac4c5e38ee803ed5447f5af45c20 +Author: Balázs Meskó +Date: 2018-08-31 10:56:58 +0000 + + Update Hungarian translation + + po/hu.po | 36 +++++++++++++++++------------------- + 1 file changed, 17 insertions(+), 19 deletions(-) + +commit efdd7400c0dc59e2252d4aa054a70b94c1632861 +Author: Fran Dieguez +Date: 2018-08-29 22:35:26 +0000 + + Update Galician translation + + po/gl.po | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 9abfa272447ad2bbbd87c45e3c13ebe8b4e9eaff +Author: Fran Dieguez +Date: 2018-08-29 22:29:44 +0000 + + Update Galician translation + + po/gl.po | 35 ++++++++++++++++++----------------- + 1 file changed, 18 insertions(+), 17 deletions(-) + +commit 8a70b7c1c86e587ca5b163118a61f80b1d3cfc49 +Author: Christian Persch +Date: 2018-08-27 22:42:00 +0200 + + emulation: Fix off-by-one in TSR + + https://gitlab.gnome.org/GNOME/vte/issues/28 + + src/vteseq.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit cb34c788658c8df42859c25b64606c67609b8d24 +Author: Milo Casagrande +Date: 2018-08-27 08:04:21 +0000 + + Update Italian translation + + po/it.po | 36 +++++++++++++++++------------------- + 1 file changed, 17 insertions(+), 19 deletions(-) + +commit b7b0721af583a5794ce0208017a95ce085159217 +Author: Christian Persch +Date: 2018-08-26 10:14:50 +0200 + + Version 0.53.92 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f5e863516c2c393d387a19c20cf28d74afa1835d +Author: Christian Persch +Date: 2018-08-26 10:14:50 +0200 + + emulation: Be more strict in DECRQSS + + Reject the whole sequence if there are extraneous characters + in the string. + + src/vteseq.cc | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +commit 1880afb994ab2cab152b49b703bf02801bef29a8 +Author: Changwoo Ryu +Date: 2018-08-26 03:59:46 +0000 + + Update Korean translation + + po/ko.po | 70 +++++++++++++--------------------------------------------------- + 1 file changed, 14 insertions(+), 56 deletions(-) + +commit cf5c9560467b69fd2430e798716f0480e0a53e61 +Author: Baurzhan Muftakhidinov +Date: 2018-08-25 17:39:33 +0000 + + Update Kazakh translation + + po/kk.po | 36 ++++++++++++++++-------------------- + 1 file changed, 16 insertions(+), 20 deletions(-) + +commit 0f6fe003af3a4db5b285b25a14dd7e958cb5af7c +Author: Christian Persch +Date: 2018-08-24 10:55:05 +0200 + + emulation: Clarify a comment + + src/vteseq.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit 01b5020b163c10112e3da0fb197e208a12bfe84b +Author: Christian Persch +Date: 2018-08-24 10:55:05 +0200 + + parser: Fix sort order + + src/parser-csi.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 19e85103b9415cc7eabbf5afd7e698c211747d17 +Author: Christian Persch +Date: 2018-08-24 10:55:05 +0200 + + doap: Fix email address + + vte.doap | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 417b9958a135ca1cb3ccf6252d3ce0dbcf7ded35 +Author: Christian Persch +Date: 2018-08-20 22:47:46 +0200 + + emulation: Add sequence and no-op handler for new xterm SGR functions + + https://gitlab.gnome.org/GNOME/vte/issues/23 + + src/parser-cmd.hh | 3 +++ + src/parser-csi.hh | 3 +++ + src/parser-reply.hh | 1 + + src/vteseq.cc | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 80 insertions(+) + +commit 6211878c55d262fa28e463edf44c33961dc9f8d6 +Author: Christian Persch +Date: 2018-08-20 22:47:46 +0200 + + emulation: Add sequence and no-op handler for synchronous update + + https://gitlab.gnome.org/GNOME/vte/issues/15 + + src/parser-cmd.hh | 1 + + src/parser-dcs.hh | 1 + + src/vteseq.cc | 26 ++++++++++++++++++++++++++ + 3 files changed, 28 insertions(+) + +commit 4bdcd7a345e215400819ccf6140b912cf0b31ac9 +Author: Christian Persch +Date: 2018-08-20 22:47:46 +0200 + + widget: Add nullable annotations + + Add nullable annotations to functions returning a char* that may + be nullptr. (vte_terminal_get_window_title() actually doesn't ever + return nullptr in 0.53 but may have before, and it may do so again, + so add the annoation on it, too.) + + https://gitlab.gnome.org/GNOME/vte/issues/21 + + src/vtegtk.cc | 13 ++++++------- + 1 file changed, 6 insertions(+), 7 deletions(-) + +commit 3a36e1da3dae7f54f3bfbfbf085a584ac654890d +Author: Christian Persch +Date: 2018-08-20 22:47:46 +0200 + + widget: Always return non-null from vte_terminal_get_encoding + + Terminal recently changed to storing nullptr instead of "UTF-8". + Make the public accessor continue to return "UTF-8" instead. + + src/vtegtk.cc | 2 +- + src/widget.hh | 5 +++++ + 2 files changed, 6 insertions(+), 1 deletion(-) + +commit 0276859709692ec53f35a8cc158d7553a195c730 +Author: Christian Persch +Date: 2018-08-20 22:47:46 +0200 + + widget: Always emit the child-exited signal + + When there is still a child process running when the + VteTerminal is destroyed, it gets kill()ed, but since + the child-exited signal was only emitted from the + VteReaper callback, it was never actually emitted, since + by that time VteTerminal has ceased to exist. + + Instead of waiting for the reaper, immediately emit + the child-exited signal in VteTerminal::dispose(). The + exit status is synthesised to be WIFSIGNALED() with + WTERMSIG() == SIGKILL. + + https://gitlab.gnome.org/GNOME/gnome-terminal/issues/16 + + src/app/app.cc | 8 +++++- + src/vte.cc | 79 +++++++++++++++++++++++++++--------------------------- + src/vtegtk.cc | 13 +++++++++ + src/vteinternal.hh | 7 ++--- + src/widget.cc | 19 +++++++++++++ + src/widget.hh | 4 +++ + 6 files changed, 86 insertions(+), 44 deletions(-) + +commit cc5904f9ffcc0bbf13a312d7577966d42ff6fb43 +Author: Christian Persch +Date: 2018-08-17 21:05:45 +0200 + + emulation: Fix SRM mode documentation + + https://gitlab.gnome.org/GNOME/vte/issues/22 + + src/modes-ecma.hh | 17 +++++++++++++---- + 1 file changed, 13 insertions(+), 4 deletions(-) + +commit 1d2001c4a2bcc4d637a61dbf7595f8ac48c7618b +Author: Christian Persch +Date: 2018-08-17 20:51:35 +0200 + + parser: cat: Handle SCI instead of asserting + + src/parser-cat.cc | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit c1dbc12b27b3f2e2de524ca596a9e71a6d98c934 +Author: Jiri Grönroos +Date: 2018-08-17 18:04:23 +0000 + + Update Finnish translation + + po/fi.po | 38 +++++++++++++++++--------------------- + 1 file changed, 17 insertions(+), 21 deletions(-) + +commit b2316ab8f9655e36a07f73682f695866fd333cba +Author: Ricardo Silva Veloso +Date: 2018-08-16 20:14:30 +0000 + + Update Brazilian Portuguese translation + + po/pt_BR.po | 37 ++++++++++++++++++------------------- + 1 file changed, 18 insertions(+), 19 deletions(-) + +commit ad010150bfd97fe92382de7bff3eccde575e64e5 +Author: Efstathios Iosifidis +Date: 2018-08-15 11:14:31 +0000 + + Update Greek translation + + po/el.po | 36 +++++++++++++++++------------------- + 1 file changed, 17 insertions(+), 19 deletions(-) + +commit e2fcd488c874d3306a57ad9a86799d0a1023908a +Author: Christian Persch +Date: 2018-08-12 23:48:15 +0200 + + widget: Add nullable annotations for functions that can return nullptr + + https://gitlab.gnome.org/GNOME/vte/issues/21 + + src/vtegtk.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 8f74ce70d96a63df7074cb8bc163a35f42f430d6 +Author: Aurimas Černius +Date: 2018-08-11 18:20:08 +0300 + + Updated Lithuanian translation + + po/lt.po | 31 +++++++++++++++---------------- + 1 file changed, 15 insertions(+), 16 deletions(-) + +commit 21e79fd3642809bf626b52dc2a67af33a6711115 +Author: Christian Persch +Date: 2018-08-09 21:56:22 +0200 + + emulation: Clamp cursor column + + When setting/unsetting tab stops, make sure to clamp the cursor + column to 0..m_column_count-1. This is necessary because vte's + weird autowrap handling where it puts the cursor on column + m_column_count if there's a wrap pending, instead of keeping + the cursor at the right margin and using a flag, like every other + terminal emulator does. + + Fixes a crash when setting/unsetting a tabstop while the cursor + is in that pending autowrap state. + + src/vteinternal.hh | 8 ++++++-- + src/vteseq.cc | 23 +++++++++++------------ + 2 files changed, 17 insertions(+), 14 deletions(-) + +commit b83970ba3869f55c2758f1362753bb4e2f5fe792 +Author: Christian Persch +Date: 2018-08-09 19:26:14 +0200 + + parser: Make reset directly change the state + + Distinguish this from CAN. + + src/parser.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b934f1bfa0ec4c5c16beffd4045a4a4156e3f568 +Author: Christian Persch +Date: 2018-08-09 19:26:14 +0200 + + parser: glue: Add accessor for the introducer character + + src/parser-glue.hh | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +commit 97d9376bd176d665efa125fe40f07a815654959f +Author: Christian Persch +Date: 2018-08-09 19:26:14 +0200 + + parser: glue: Minor comment edit + + src/parser-glue.hh | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +commit 983b70d0d491760508fb83fc7766e2e85df814fc +Author: Christian Persch +Date: 2018-08-09 19:26:14 +0200 + + emulation: Fix DECRQSS reply + + While the VT525 documentation says that a valid reply returns 0 and + and invalid one 1, the STD 070 documentation actually has that inversed, + and xterm also follows that. Since this seems to just be a documentation + bug, and following xterm makes this more useful, change vte to match + this. + + src/vteseq.cc | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +commit 5c12cd6f84357b08bf849278fa531256382da911 +Author: Christian Persch +Date: 2018-08-09 19:26:14 +0200 + + build: Version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bd732ae1468e64ea58f9e29dae6f0f4328d4d28d +Author: Christian Persch +Date: 2018-08-09 19:26:14 +0200 + + emulation: Fix DECDSR 6 reply + + DECXPR starts with '?'. + + src/parser-reply.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5ecf957d95546a3eccd2620390bc11ef920d2373 +Author: Egmont Koblinger +Date: 2018-07-30 12:54:03 +0200 + + widget: Avoid unnecessary invalidations on mouseover + + Works around (or at least reduces the incidence of) + https://gitlab.gnome.org/GNOME/vte/issues/4 + + src/vte.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 1c56c6342414c53ce285e2a57c1e5aac0a35a804 +Author: Igor Zakharov +Date: 2018-07-30 12:48:12 +0200 + + build: Fix "cast between incompatible function types" warning + + https://gitlab.gnome.org/GNOME/vte/issues/16 + + src/vte.cc | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +commit f5748452ffb69635b0127bae6b0817bfa1e2c6cb +Author: Tim Sabsch +Date: 2018-07-27 12:48:39 +0000 + + Update German translation + + po/de.po | 35 +++++++++++++++++------------------ + 1 file changed, 17 insertions(+), 18 deletions(-) + +commit 4331c2748109c9c2b1ba3b0a393cc8ccdfee88fd +Author: Christian Persch +Date: 2018-07-24 21:01:15 +0200 + + lib: Add API to enable test mode + + Add API to set the test flags, instead of using an env variable + for this. + + src/app/app.cc | 4 +--- + src/vte.cc | 4 ++-- + src/vte/vteglobals.h | 6 ++++++ + src/vtegtk.cc | 25 ++++++++++++++++++------- + src/vteinternal.hh | 4 +++- + src/vteseq.cc | 2 +- + 6 files changed, 31 insertions(+), 14 deletions(-) + +commit f20a7ccd9cc8fc3bd0f73aa14969231376421c80 +Author: Christian Persch +Date: 2018-07-24 21:01:15 +0200 + + widget: Move bell to Widget + + src/vte.cc | 8 ++------ + src/vtegtk.cc | 3 ++- + src/widget.cc | 7 +++++++ + src/widget.hh | 2 ++ + 4 files changed, 13 insertions(+), 7 deletions(-) + +commit 1eee87d2bf1a005f4abc072c8bfa32daa0a12cbb +Author: Christian Persch +Date: 2018-07-24 21:01:15 +0200 + + widget: Move GtkSettings change handling to Widget + + src/vte.cc | 54 +++--------------------------------------------------- + src/vteinternal.hh | 5 +++-- + src/widget.cc | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/widget.hh | 4 +++- + 4 files changed, 63 insertions(+), 54 deletions(-) + +commit 69dfd0c37b361adc3d51af6234081989fef9e7d6 +Author: Christian Persch +Date: 2018-07-24 21:01:15 +0200 + + widget: Move IM context to Widget + + src/vte.cc | 147 ++++++----------------------------------------------- + src/vtegtk.cc | 4 ++ + src/vteinternal.hh | 10 ++-- + src/widget.cc | 125 ++++++++++++++++++++++++++++++++++++++++++++- + src/widget.hh | 19 +++++++ + 5 files changed, 168 insertions(+), 137 deletions(-) + +commit 9f9b31f8833a3bd3300657e2355b684225621b7b +Author: Christian Persch +Date: 2018-07-24 21:01:15 +0200 + + widget: Move event window handling to Widget + + src/vte.cc | 103 ++++++++------------------------------------- + src/vtegtk.cc | 4 +- + src/vteinternal.hh | 23 ++++------ + src/widget.cc | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++-- + src/widget.hh | 62 ++++++++++++++++++++++----- + 5 files changed, 198 insertions(+), 115 deletions(-) + +commit c76874b8d54729df7d998ed776265c8a013cb157 +Author: Christian Persch +Date: 2018-07-24 21:01:15 +0200 + + widget: Start separating widget from terminal + + src/Makefile.am | 2 ++ + src/vtegtk.cc | 103 ++++++++++++++++++++++++++++++----------------------- + src/vteinternal.hh | 3 +- + src/widget.cc | 46 ++++++++++++++++++++++++ + src/widget.hh | 94 ++++++++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 202 insertions(+), 46 deletions(-) + +commit 8e0c94b22e17f46053ac9d9332514a23991ab44a +Author: Christian Persch +Date: 2018-07-24 21:01:15 +0200 + + lib: Rename VteTerminalPrivate + + src/vte.cc | 710 +++++++++++++++++++++++++------------------------ + src/vte/vteterminal.h | 2 +- + src/vtegtk.cc | 10 +- + src/vteinternal.hh | 18 +- + src/vteseq.cc | 724 +++++++++++++++++++++++++------------------------- + 5 files changed, 742 insertions(+), 722 deletions(-) + +commit 935723cad1c324b0769f17f6c2c78083f22ea439 +Author: Matej Urbančič +Date: 2018-07-11 21:30:23 +0200 + + Added Slovenian translation + + po/sl.po | 38 ++++++++++++++++++-------------------- + 1 file changed, 18 insertions(+), 20 deletions(-) + +commit eb85292b3ef44ac95d3863af68b19f6a8d8131e2 +Author: Christian Persch +Date: 2018-07-11 21:21:15 +0200 + + widget: Add accessor for the background colour + + https://gitlab.gnome.org/GNOME/vte/issues/9 + + doc/reference/vte-docs.xml | 4 ++++ + doc/reference/vte-sections.txt | 1 + + src/app/app.cc | 17 +++++++++-------- + src/vte/vteterminal.h | 3 +++ + src/vtegtk.cc | 33 +++++++++++++++++++++++++++++++++ + 5 files changed, 50 insertions(+), 8 deletions(-) + +commit 0cb4e79077b2f40ea0ace71c9c18163d40cd9f84 +Author: Christian Persch +Date: 2018-07-11 21:21:15 +0200 + + lib: debug: Hexdump incoming and outgoing buffers + + Add hexdump of incoming (pre- and post-conversion) and outgoing + buffers. + + src/debug.cc | 44 ++++++++++++++++++++++++++++++++++++++++++++ + src/debug.h | 6 +++++- + src/vte.cc | 21 ++++++++++++--------- + 3 files changed, 61 insertions(+), 10 deletions(-) + +commit 297b44b765f8c19ebb5f4c0b600b5015338bb90e +Author: Emin Tufan Çetin +Date: 2018-07-07 07:33:31 +0000 + + Update Turkish translation + + po/tr.po | 33 +++++++++++++++++---------------- + 1 file changed, 17 insertions(+), 16 deletions(-) + +commit 65d67f6f814df4f4ab800898bb7f4b1bc9f135b0 +Author: Debarshi Ray +Date: 2018-06-22 13:19:56 +0200 + + widget: Fix race between polling the master & using the PTY in a child + + When a very short-lived process, like true(1), is spawned + asynchronously as a child, there is a race between the child closing + the pseudo-terminal's slave device on exit and VteTerminal receiving + it, and the GAsyncReadyCallback passed to vte_pty_spawn_async being + invoked. If the child closes it and the G_IO_HUP is received before the + callback is invoked, then it causes VterTerminal to unset its VtePty + object, which leads to the following CRITICAL when the callback tries + to set up a watch on the child: + Vte-CRITICAL **: void vte_terminal_watch_child(VteTerminal*, GPid): + assertion 'impl->m_pty != NULL' failed + + The race can be avoided by setting up the GIOChannel to poll the + pseudo-terminal master device only after the callback has been + invoked. If the kernel has already buffered up some activity on the + slave device, then that will be seen in the next iteration of the main + loop, and the VtePty won't be unset before setting up the watch. + + There is a similar race for downstreams that continue to use + gnome-pty-helper. In those cases, the helper is in charge of creating + the pseudo-terminal device pair, and it closes its copies of the file + descriptors after sending them to VteTerminal. If VteTerminal starts + polling the master device immediately after receiving it from the + helper, before the child process has been forked, and the helper loses + the race to close its copy of the slave device's file descriptor + before the master is polled, then VteTerminal will receive a G_IO_HUP + and stop reading further input from the master. The subsequently forked + child process gets left in a defunct state and the same CRITICAL is + logged. + + This also makes vte_terminal_spawn_async match its synchronous variant, + which is nice. + + Fixes GNOME/vte#7: + https://gitlab.gnome.org/GNOME/vte/issues/7 + + src/vtegtk.cc | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 2f2dc9dce0b2ff1d606cc6ddb43393748cdce7f4 +Author: Kukuh Syafaat +Date: 2018-06-23 03:56:49 +0000 + + Update Indonesian translation + + po/id.po | 26 +++++++++++++------------- + 1 file changed, 13 insertions(+), 13 deletions(-) + +commit a88f8c27542203ee2cbb7f000aa1b760828486ef +Author: Cédric Valmary +Date: 2018-06-22 06:59:55 +0000 + + Update Occitan translation + + po/oc.po | 33 ++++++++++++++++----------------- + 1 file changed, 16 insertions(+), 17 deletions(-) + +commit 48bfd731fcaabd2a04b8e3ae29afed0d7ed8a5f0 +Author: Piotr Drąg +Date: 2018-06-20 22:18:58 +0200 + + Update POTFILES.in + + po/POTFILES.in | 1 - + 1 file changed, 1 deletion(-) + +commit 79d84d680527ff04e1d14f76c2f4a7768e10e703 +Author: Christian Persch +Date: 2018-06-20 21:20:19 +0200 + + lib: Make legacy charset support optional + + configure.ac | 15 +++++++++++++++ + src/vte.cc | 30 ++++++++++++++++++++++++++---- + src/vteinternal.hh | 13 ++++++++----- + 3 files changed, 49 insertions(+), 9 deletions(-) + +commit 82591edee0ce62cc9911434fbef22952f5fb7d17 +Author: Christian Persch +Date: 2018-06-20 21:20:19 +0200 + + conv: Remove vteconv.{h,cc} + + Move the only function into vte.cc where there are only 2 callers. + + src/Makefile.am | 2 -- + src/vte.cc | 68 +++++++++++++++++++++++++++++++++++++- + src/vteconv.cc | 96 ------------------------------------------------------ + src/vteconv.h | 35 -------------------- + src/vteinternal.hh | 1 - + 5 files changed, 67 insertions(+), 135 deletions(-) + +commit e8f57c242ad6ebfd2abf104e5800e30071a2b222 +Author: Christian Persch +Date: 2018-06-20 21:20:19 +0200 + + conv: Remove _vte_conv_reset + + There is only caller and the body is a one-liner, so just + put it into the caller. + + src/vte.cc | 6 ++++-- + src/vteconv.cc | 9 --------- + src/vteconv.h | 1 - + 3 files changed, 4 insertions(+), 12 deletions(-) + +commit d82c807a4c00d84c6804493658ff7043ccfae077 +Author: Christian Persch +Date: 2018-06-20 21:20:19 +0200 + + conv: Remove _vte_conv_open + + Just call g_iconv_open() directly, and lose the //TRANSLIT. + If transliteration is desired, the caller should use + it in the passed encoding string. + + src/vte.cc | 4 ++-- + src/vteconv.cc | 15 +-------------- + src/vteconv.h | 1 - + 3 files changed, 3 insertions(+), 17 deletions(-) + +commit b3b02f643dc4b052d494c3e278e62b47cd793bff +Author: Christian Persch +Date: 2018-06-20 21:20:19 +0200 + + conv: Remove extra wrapper struct + + VteConv was reduced to only contain a sole GIConv member, + so remove the VteConv struct and use GIConv directly. + + src/vte.cc | 34 +++++++++++++++++----------------- + src/vteconv.cc | 53 +++++++++-------------------------------------------- + src/vteconv.h | 12 +++--------- + src/vteinternal.hh | 4 ++-- + 4 files changed, 31 insertions(+), 72 deletions(-) + +commit d93ea3ec95ecdc468f921bf424926337203eb4c3 +Author: Christian Persch +Date: 2018-06-20 20:39:55 +0200 + + conv: Remove iso2022.{h,cc} + + Move the remaining, legacy charset conversion code, directly + to vte.cc. + + src/Makefile.am | 2 - + src/iso2022.cc | 193 ----------------------------------------------------- + src/iso2022.h | 42 ------------ + src/vte.cc | 123 ++++++++++++++++++++++++---------- + src/vteconv.cc | 22 ++++-- + src/vteconv.h | 5 +- + src/vteinternal.hh | 4 +- + 7 files changed, 108 insertions(+), 283 deletions(-) + +commit 9d0c2e55727097941f3e474f79a54a7ee73ce925 +Author: Christian Persch +Date: 2018-06-20 20:39:55 +0200 + + conv: Remove UTF-8-to-UTF-8 conversion + + It's unused now. + + src/Makefile.am | 7 - + src/vteconv.cc | 417 +++----------------------------------------------------- + 2 files changed, 21 insertions(+), 403 deletions(-) + +commit 53228783239e9a822c4821498c18caa43d27e951 +Author: Christian Persch +Date: 2018-06-20 20:39:55 +0200 + + lib: Remove extraneous UTF-8-to-UTF-8 conversion on output + + Only do conversion for legacy encodings; normally + the outgoing data is already in UTF-8 and need not + be converted to itself. + + src/iso2022.cc | 12 ++- + src/vte.cc | 250 ++++++++++++++++++++++++++++----------------------------- + src/vteconv.cc | 2 + + 3 files changed, 138 insertions(+), 126 deletions(-) + +commit 3910a229d14eaee85952e78a681f06cafa4a6213 +Author: Christian Persch +Date: 2018-06-20 20:39:55 +0200 + + conv: Remove conversion to unichar + + It's unused now. + + src/vteconv.cc | 65 ++++------------------------------------------------------ + src/vteconv.h | 4 ---- + 2 files changed, 4 insertions(+), 65 deletions(-) + +commit 582e2d0848946d1458050a0d0fdb81d22e8c53fe +Author: Christian Persch +Date: 2018-06-20 20:39:55 +0200 + + conv: test: Fix test + + src/vteconv.cc | 140 --------------------------------------------------------- + 1 file changed, 140 deletions(-) + +commit a22695724f513324495ca4e775dc4917c91f0b76 +Author: Christian Persch +Date: 2018-06-20 20:39:55 +0200 + + lib: Remove double conversion for legacy encodings + + Directly convert to UTF-8 instead of going first to UTF-32 + then back to UTF-8. + + src/iso2022.cc | 66 +++++++++++++++++++++---------------------------------- + src/iso2022.h | 4 ++-- + src/vte.cc | 22 +++++-------------- + src/vtedefines.hh | 2 +- + 4 files changed, 33 insertions(+), 61 deletions(-) + +commit dad52a5b2c739842756fb647e7656c09c3ee3bc6 +Author: Christian Persch +Date: 2018-06-20 20:39:55 +0200 + + parser: cat: Remove legacy encoding support + + src/Makefile.am | 4 --- + src/parser-cat.cc | 93 ++----------------------------------------------------- + 2 files changed, 3 insertions(+), 94 deletions(-) + +commit 3ac8b26212324592806b7def1b35b299cf357efa +Author: Christian Persch +Date: 2018-06-20 20:39:55 +0200 + + lib: Make legacy encodings work again + + https://gitlab.gnome.org/GNOME/vte/issues/3 + + src/buffer.h | 1 + + src/vte.cc | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++- + src/vteinternal.hh | 4 ++- + 3 files changed, 77 insertions(+), 2 deletions(-) + +commit 9774b87e2f0ff1ae48ce666c0698c062875cba22 +Author: Christian Persch +Date: 2018-06-20 20:39:55 +0200 + + conv: Remove unused code + + Source is never UTF-32. + + src/vteconv.cc | 73 ++++++++-------------------------------------------------- + 1 file changed, 9 insertions(+), 64 deletions(-) + +commit a13b07d346b280592510e7ee6af05bc602197691 +Author: Debarshi Ray +Date: 2018-06-19 18:28:25 +0200 + + parser: Fix the build with GCC 8.1.1 + + Otherwise it fails with: + + vteseq.cc:47:1: error: declaration of + 'void vte::parser::Sequence::print() const' has a different + exception specifier + vte::parser::Sequence::print() const + ^~~ + In file included from vteinternal.hh:30, + from vteseq.cc:34: + parser-glue.hh:83:14: note: from previous declaration + 'void vte::parser::Sequence::print() const noexcept' + void print() const noexcept; + ^~~~~ + + ... and so on. + + Fixes GNOME/vte#5: + https://gitlab.gnome.org/GNOME/vte/issues/5 + + src/vteseq.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 05c1c6dd46835580091a2750b19b05a1866a0d66 +Author: Daniel Șerbănescu +Date: 2018-06-17 19:29:19 +0000 + + Update Romanian translation + + po/ro.po | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +commit a17e714d01ea403450d1920347eb04cd3e6afa5b +Author: Christian Persch +Date: 2018-06-17 19:48:49 +0200 + + widget: Deprecate vte_terminal_[sg]et_encoding() + + https://gitlab.gnome.org/GNOME/vte/issues/3 + + doc/reference/vte-sections.txt | 4 ++-- + src/vte/vtedeprecated.h | 11 +++++++++++ + src/vte/vteterminal.h | 8 -------- + src/vtegtk.cc | 43 +++++++++++++++++++++++++++--------------- + 4 files changed, 41 insertions(+), 25 deletions(-) + +commit 263aa005a5864d74c9d14bce2ecc1c4e95a01646 +Author: Christian Persch +Date: 2018-06-16 20:51:58 +0200 + + lib: Remove unused defines + + src/vtedefines.hh | 8 -------- + 1 file changed, 8 deletions(-) + +commit 7cd6819682dae4bcb167e26c40712d36644e5fba +Author: Christian Persch +Date: 2018-06-16 20:51:58 +0200 + + lib: Use branchless, streaming UTF-8 converter + + Previously vte used to convert the whole chunk of input from + the PTY into UTF-32 in one go, and feed that to the parser. + Replace this with a streaming converter, which consumes the + bytes one-by-one and feeds the result to the parser whenever + a unicode character falls out of it. + + Also simplify the chunk handling by using C++ standard classes + to manage the queue (and stack of reserve chunks) instead + of a hand-grown list handling code. + + As a result of the converter change, vte currently doesn't work + with non-UTF-8 I/O encoding. This will either be reimplemented + or non-UTF-8 support will be dropped completely (to be discussed + in bugzilla). + + The change fixes a bug in parser-cat (and potentially also in vte + itself, haven't been able to check) where occasionally a + character at the end (or start?) of a chunk was discarded. That can + be observed by comparing the output of 'parser-cat --charset "UTF-8"' + (old converter) vs just parser-cat (new converter). + + src/Makefile.am | 6 + + src/chunk.cc | 65 ++++++ + src/chunk.hh | 80 +++++++ + src/parser-cat.cc | 90 +++++++- + src/utf8.cc | 47 ++++ + src/utf8.hh | 79 +++++++ + src/vte.cc | 620 ++++++++++++++++++++--------------------------------- + src/vtedefines.hh | 1 - + src/vteinternal.hh | 26 +-- + 9 files changed, 601 insertions(+), 413 deletions(-) + +commit 5edc2dba692e8132c6f8190f4477330918a83789 +Author: Christian Persch +Date: 2018-06-16 20:51:58 +0200 + + conv: Remove unused functions + + src/vteconv.cc | 20 -------------------- + src/vteconv.h | 6 ------ + 2 files changed, 26 deletions(-) + +commit a167d8b52697a44dc4db39e5bd7a0768b896dcb4 +Author: Christian Persch +Date: 2018-06-16 20:51:58 +0200 + + doap: Cleanup + + vte.doap | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit fdf194112384e76fc80a9e9ba98f4da170e5b155 +Author: Yi-Jyun Pan +Date: 2018-06-13 13:35:42 +0000 + + Update Chinese (Taiwan) translation + + po/zh_TW.po | 25 ++++++++++++------------- + 1 file changed, 12 insertions(+), 13 deletions(-) + +commit 079683ed10ea1b817bfaf71935523fd17f5f0a53 +Author: Charles Monzat +Date: 2018-05-31 09:34:13 +0000 + + Update French translation + + po/fr.po | 32 ++++++++++++++++++-------------- + 1 file changed, 18 insertions(+), 14 deletions(-) + +commit cfc3fedb046141ae74c4a39a9cbbd1ebb2e81a72 +Author: Mingcong Bai +Date: 2018-05-28 09:46:41 +0000 + + Update Chinese (China) translation + + po/zh_CN.po | 27 ++++++++++++++------------- + 1 file changed, 14 insertions(+), 13 deletions(-) + +commit b1753f33bdb2929cab2f91b738cca4f758571b25 +Author: Piotr Drąg +Date: 2018-05-27 07:49:25 +0200 + + Update Polish translation + + po/pl.po | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +commit 6cf37ab6dd22f4f3027f56ed87c7c0e0304fe91f +Author: Fabio Tomat +Date: 2018-05-26 09:00:44 +0000 + + Update Friulian translation + + po/fur.po | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +commit d8b485cb6b82729ac6c6c810e9c33f7adcc4f525 +Author: Christian Persch +Date: 2018-05-23 22:41:11 +0200 + + app: Dim terminal when toplevel has backdrop + + https://bugzilla.gnome.org/show_bug.cgi?id=758368 + + src/app/app.cc | 35 ++++++++++++++++++++++++++++++++++- + 1 file changed, 34 insertions(+), 1 deletion(-) + +commit c0b50d05eb5d0a8fe070a1ecadfb53c486e9ae30 +Author: Anders Jonsson +Date: 2018-05-23 20:40:40 +0000 + + Update Swedish translation + + po/sv.po | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +commit 0cd931c15ebaec0e7f34148e2588a2a251f7766f +Author: Marek Cernocky +Date: 2018-05-22 13:55:07 +0200 + + Updated Czech translation + + po/cs.po | 64 ++++++++++++---------------------------------------------------- + 1 file changed, 12 insertions(+), 52 deletions(-) + +commit 14d6d348d2a466a6fdfd3cb4b8207325a8e8eed2 +Author: Daniel Mustieles +Date: 2018-05-22 13:07:24 +0200 + + Updated Spanish translation + + po/es.po | 25 +++++++++++++------------ + 1 file changed, 13 insertions(+), 12 deletions(-) + +commit 2ad88cd2eb74a42da30b65f963e222c7e9ec65bd +Author: Christian Persch +Date: 2018-05-21 20:54:52 +0200 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 961927a8115c82f35deafe09c1d68689ff069905 (tag: 0.53.0) +Author: Christian Persch +Date: 2018-05-21 20:37:54 +0200 + + all: Fix spelling + + https://bugzilla.gnome.org/show_bug.cgi?id=795278 + + configure.ac | 8 ++++---- + src/vte.cc | 2 +- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit d7df8276158dd448cf6813fb1039e7b5c464a1c2 +Author: Egmont Koblinger +Date: 2018-05-13 15:27:17 +0200 + + ring: Proper boundary checking for hyperlink position + + This fixes a rare crash around hyperlinks in a non grid aligned + VTE widget when the mouse enters the extra padding at the bottom. + + https://bugzilla.gnome.org/show_bug.cgi?id=795826 + + src/ring.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fd1956fb96e229d4176cc118274f325696f46e8e +Author: Christian Persch +Date: 2018-04-23 20:51:18 +0200 + + parser: Update copyright notice + + src/parser.hh | 1 + + 1 file changed, 1 insertion(+) + +commit 8b72b407f01055a7780d5b6e48c4e6fd15502e66 +Author: Christian Persch +Date: 2018-04-23 20:51:18 +0200 + + widget: Use RefPtr for the cursors + + src/vte.cc | 22 +++++++++------------- + src/vteinternal.hh | 9 +++++---- + 2 files changed, 14 insertions(+), 17 deletions(-) + +commit d282b59690df3edf164274a082792d4b1a87bae6 +Author: Christian Persch +Date: 2018-04-23 20:51:18 +0200 + + lib: Add RefPtr type for holding a GObject + + src/Makefile.am | 19 +++++++- + src/refptr-test.cc | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/refptr.hh | 38 +++++++++++++++ + src/vteinternal.hh | 1 + + src/vtetypes.hh | 1 + + 5 files changed, 193 insertions(+), 1 deletion(-) + +commit 71a3550e5372b6636fc276dab1f48fd9418179d4 +Author: Christian Persch +Date: 2018-04-23 20:51:18 +0200 + + widget: Deprecate vte_terminal_match_set_cursor_type + + GdkCursorType is gone from gtk4, so deprecate its use here + also on gtk3 already. + + doc/reference/vte-sections.txt | 2 +- + src/vte/vtedeprecated.h | 6 ++++++ + src/vte/vteterminal.h | 4 ---- + src/vtegtk.cc | 4 +++- + 4 files changed, 10 insertions(+), 6 deletions(-) + +commit 12b024c83830147434c3daa5011d7f251843ed67 +Author: Christian Persch +Date: 2018-04-23 20:51:18 +0200 + + lib: Store preedit string in a string + + Avoid manual memory management. + + src/vte.cc | 57 ++++++++++++++++++++++++------------------------------ + src/vteinternal.hh | 2 +- + 2 files changed, 26 insertions(+), 33 deletions(-) + +commit 38daca643c2aedf0606fde5ec9dce23b501566ce +Author: Christian Persch +Date: 2018-04-23 20:51:18 +0200 + + lib: Store word char exceptions in a string + + Avoid manual memory management. + + src/vte.cc | 69 ++++++++++++++++++++---------------------------------- + src/vtegtk.cc | 3 ++- + src/vteinternal.hh | 8 +++---- + 3 files changed, 30 insertions(+), 50 deletions(-) + +commit 33a64ff18ea36e2c946678a60ff013f17763ae69 +Author: Christian Persch +Date: 2018-04-23 20:51:18 +0200 + + ring: Replace some assertions with static_assert + + src/cell.hh | 8 ++++---- + src/vterowdata.hh | 2 +- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit 20c47ad8f28b7b25c4cc8f4839d0d7ce632bb45e +Author: Christian Persch +Date: 2018-04-23 20:51:18 +0200 + + ring: Split cell and rowdata headers + + doc/reference/Makefile.am | 1 + + src/Makefile.am | 1 + + src/cell.hh | 187 ++++++++++++++++++++++++++++++++++++++++++++++ + src/vterowdata.hh | 159 +-------------------------------------- + 4 files changed, 190 insertions(+), 158 deletions(-) + +commit 9da1685123387d5c59e455dd5fb278e97514e9ed +Author: Christian Persch +Date: 2018-04-23 20:51:18 +0200 + + cxx: ring: Move to C++ + + Straight port; improvements will come later. + + src/ring.cc | 1038 +++++++++++++++++++++++++--------------------------- + src/ring.hh | 249 ++++++++++--- + src/vte.cc | 27 +- + src/vteinternal.hh | 27 +- + src/vterowdata.cc | 8 +- + src/vterowdata.hh | 9 - + 6 files changed, 724 insertions(+), 634 deletions(-) + +commit 838150fbdc2ffff1b18e739d1deb19d9bef00afc +Author: Christian Persch +Date: 2018-04-23 20:51:18 +0200 + + ring: Add some static assertions + + Just to make sure nothing breaks during refactoring. + + src/vterowdata.cc | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit c3755f9a9dcc8a41b1bf9a90e11f0f69ca768d98 +Author: Christian Persch +Date: 2018-04-23 20:51:18 +0200 + + ring: Move some types to ring.cc + + These types are only used internally by the ring and only in + this one file, so there is no need to put them into the header. + + src/ring.cc | 5 +++++ + src/ring.hh | 6 ------ + src/vte.cc | 1 + + 3 files changed, 6 insertions(+), 6 deletions(-) + +commit 728684cd7db14960ba8cc9aa631163dea1c512c2 +Author: Christian Persch +Date: 2018-04-23 20:51:18 +0200 + + cxx: Move some headers to .hh + + doc/reference/Makefile.am | 4 ++-- + src/Makefile.am | 4 ++-- + src/ring.cc | 2 +- + src/{ring.h => ring.hh} | 7 ++----- + src/vte.cc | 3 +-- + src/vteinternal.hh | 2 +- + src/vterowdata.cc | 2 +- + src/{vterowdata.h => vterowdata.hh} | 5 +---- + 8 files changed, 11 insertions(+), 18 deletions(-) + +commit dff76fa217f8c6e1909e46e715416f01c0df397e +Author: Christian Persch +Date: 2018-04-14 23:49:27 +0200 + + parser: glue: StringTokeniser must not be used with a temporary + + StringTokeniser requires the string to be kept alive + while iterating over its tokens. + + https://bugzilla.gnome.org/show_bug.cgi?id=795269 + + src/parser-glue.hh | 2 +- + src/vteseq.cc | 5 +++-- + 2 files changed, 4 insertions(+), 3 deletions(-) + +commit 691db2070ead5894947c7db7c87568aa494fbcfd +Author: Christian Persch +Date: 2018-04-09 10:55:04 +0200 + + lib: Filter out BS and DEL from paste + + https://bugzilla.gnome.org/show_bug.cgi?id=794653 + + src/vte.cc | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 88239d9fca8365397bd1f069eabf24bc74de95d3 +Author: Christian Persch +Date: 2018-04-06 10:01:08 +0200 + + parser: Fix warning with GCC < 7 + + The -Wimplicit-fallthrough option is a GCC 7 addition, + so don't try ignoring it on GCC < 7. + + src/parser-glue.hh | 2 ++ + 1 file changed, 2 insertions(+) + +commit 346ada29f448ade931ee1febeda5218433c76970 +Author: Debarshi Ray +Date: 2018-04-03 12:07:59 +0200 + + parser: Ignore -Wimplicit-fallthrough + + https://bugzilla.gnome.org/show_bug.cgi?id=789778 + + src/parser-glue.hh | 3 +++ + 1 file changed, 3 insertions(+) + +commit b54395869c408656f31493a25f9e9fe89cd56bb7 +Author: Debarshi Ray +Date: 2018-03-09 19:51:03 +0100 + + widget: Remove GdkVisibilityState handling + + GtkWidget::visibility-notify-event doesn't work on modern composited + windowing systems. In such cases one can only assume that the widget + is always completely visible (ie. GDK_VISIBILITY_UNOBSCURED). + + These days most users have a compositor, and therefore bugs in this + optimization often manage to survive undetected. + + https://bugzilla.gnome.org/show_bug.cgi?id=794214 + + src/vte.cc | 53 +---------------------------------------------------- + src/vtegtk.cc | 9 --------- + src/vteinternal.hh | 4 ---- + 3 files changed, 1 insertion(+), 65 deletions(-) + +commit 513220cd80272947ccdcb6b13d7b48ba9bd1d601 +Author: Debarshi Ray +Date: 2018-03-14 12:36:38 +0100 + + ring: Silence -Wunsafe-loop-optimizations + + https://bugzilla.gnome.org/show_bug.cgi?id=789778 + + src/ring.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 43cd3d176264656956febf4f6f29c120e5c73df9 +Author: Christian Persch +Date: 2018-03-31 22:22:12 +0200 + + all: Cleanup some cruft + + AUTHORS | 2 +- + HACKING | 11 --------- + Makefile.am | 1 - + README | 10 --------- + configure.ac | 1 - + doc/Makefile.am | 3 +-- + doc/openi18n/Makefile.am | 7 ------ + doc/openi18n/UTF-8.txt | 18 --------------- + doc/openi18n/cursor.c | 57 ----------------------------------------------- + doc/openi18n/wrap.txt | 1 - + doc/readme.txt | 10 --------- + doc/vttest.tar.gz | Bin 100593 -> 0 bytes + src/Makefile.am | 2 +- + src/iso2022.txt | 15 ------------- + 14 files changed, 3 insertions(+), 135 deletions(-) + +commit 073a5600c11025660893a6558ae7db7bc9ecf874 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + build: Update macros from autoconf-archive + + m4/ax_cxx_compile_stdcxx.m4 | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit 8c8ac7c7b0e65525a11f5ccb8eb570639672d017 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Remove excessive clearing of sequence fields + + seq.command is set when the sequence is executed, + seq.terminator is set when the final character is received, + and seq.introducer is set when the introducer is received, + and all this happens before the sequence is dispatched. + + Therefore these fiedls need not be cleared in any case. + + src/parser.cc | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit ac5a03b0246ffdf3aa986c6254f5736a26eec246 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Only clear the intermediates and params when necessary + + The intermediates need only be cleared when entering ESCAPE, + CSI or DCS sequence states, and the params only be cleared for + CSI and DCS sequence states, since in all other sequence types, + there are no intermediates/parameters, and thus handlers must + not access these fields. + + src/parser-glue.hh | 16 ++++++++------ + src/parser.cc | 61 ++++++++++++++++++++++++++++++++++++------------------ + 2 files changed, 51 insertions(+), 26 deletions(-) + +commit 64db63956b9e3a1861f593d4249897880db9964a +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: No need to clear the charset + + seq.charset is only allowed to be accessed if the command + is GnDm, GnDMm, CnD or DOCS; so there is no need to clear + this field for all other commands and sequence types. + + src/parser.cc | 6 ------ + 1 file changed, 6 deletions(-) + +commit f7d39f6d130a871b14eaea2ec42e29823346f5a3 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: No need to clear for GRAPHIC sequence + + On GRAPHIC, the only field allowed to access are the type, + command, and final character; so there's no need to clear + the other data. + + src/parser.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit 0c2f5bb95d8feda694f2d73dc3a741af9119af82 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: No need to clear for IGNORE sequence + + On IGNORE, the only field allowed to access are the type, + command, and final character; so there's no need to clear + the other data. + + src/parser.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit 50457ebadacfc2cf503d210052e1604f55f28614 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + docs: Update list of ignored files + + doc/reference/Makefile.am | 20 ++++++++++++++------ + 1 file changed, 14 insertions(+), 6 deletions(-) + +commit e934d70d8bcf61a0e0e518caa8da40c52c79fd1c +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Increase maximum number of parameters + + 16 parameters is a bit tight for SGR, considering we allow + specifying 3 colours ([345]8:2:id:r:g:b), each taking 6 + parameters, and then other attributes too, in the same call. + + Increase the maximum to 32, which should be enough. + + src/parser.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1ae56290c08acd59626387bc3b0914c6bb24d66e +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Clear only used parameters + + At most n_args + 1 parameters have been touched, and + therefore only clear these. + + This provides an almost ⅓ speedup on the pure parsing time. + + src/parser.cc | 21 +++++++++++++++------ + 1 file changed, 15 insertions(+), 6 deletions(-) + +commit a7385b19423cd33d723715bbc039561a85e5e616 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Remove redundant assignment + + Don't clear seq.command first and then immediately overwrite + the value again. + + src/parser.cc | 3 --- + 1 file changed, 3 deletions(-) + +commit e2bd1889ec229e718a2ad4ccd7c3e2fecfe3d1c8 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Ignore sequence with too many parameters + + Also ignore sequences with too many default parameters. + + src/parser-test.cc | 4 ++-- + src/parser.cc | 9 +++++++-- + 2 files changed, 9 insertions(+), 4 deletions(-) + +commit 100df735dce712f2512723ed943f7c7260438cf8 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Ignore sequence with too many parameters + + src/parser-test.cc | 50 +++++++++++++++ + src/parser.cc | 181 ++++++++++++++++++++++++++++++++--------------------- + 2 files changed, 159 insertions(+), 72 deletions(-) + +commit d89930ed35031f9b009f9f5f60befe36ba8aa186 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: test: Check parameter clearing + + src/parser-glue.hh | 2 +- + src/parser-test.cc | 36 ++++++++++++++++++++++++++++++++++++ + 2 files changed, 37 insertions(+), 1 deletion(-) + +commit 3596fa22cfeff920c025380ed532c11003a3dcc2 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Annotate unlikely conditionals + + src/parser.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 23bf9277df7109467031daa88a08bf3e905ac952 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + emulation: Limit window title length + + Same as xterm does. + + src/vtedefines.hh | 3 +++ + src/vteseq.cc | 3 ++- + 2 files changed, 5 insertions(+), 1 deletion(-) + +commit 45949df16692ac56bb4ab86e1fef3732e1e4d601 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + widget: Remove extraneous refresh-window emissions + + Palette changes are already doing an invalidate_all(), no + need to emit refresh-window too. + + src/vteinternal.hh | 2 +- + src/vteseq.cc | 35 +++-------------------------------- + 2 files changed, 4 insertions(+), 33 deletions(-) + +commit 32243017bc520c512eaca79d7664ef5654c9f180 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + emulation: Implement OSC 5 + + https://bugzilla.gnome.org/show_bug.cgi?id=722751 + + src/vteinternal.hh | 18 +++++- + src/vteseq.cc | 157 ++++++++++++++++++++++++++++++++++++----------------- + src/vtetypes.hh | 4 ++ + 3 files changed, 128 insertions(+), 51 deletions(-) + +commit a64a06f4753573010951f6b23206ffa742a93267 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + emulation: Implement SUB + + src/vteseq.cc | 9 +-------- + 1 file changed, 1 insertion(+), 8 deletions(-) + +commit 38f09c5ec29a0d00cfbf12aa0d7acf67d1d226f4 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + emulation: Implement DECSR + + src/vteseq.cc | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +commit 774d43cdda268fc89e39c36b616cd409622bb36e +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Add more functions + + ...and mark them as implemented / unimplemented accordingly. + + src/Makefile.am | 6 + + src/modes-ecma.hh | 145 ++- + src/modes-private.hh | 603 +++++++++- + src/parser-c01.hh | 73 ++ + src/parser-cat.cc | 9 +- + src/parser-cmd.hh | 482 +++++--- + src/parser-csi.hh | 202 ++-- + src/parser-dcs.hh | 40 +- + src/parser-esc.hh | 47 +- + src/parser-reply.hh | 7 +- + src/parser-test.cc | 79 +- + src/parser.cc | 90 +- + src/parser.hh | 5 +- + src/vte.cc | 15 + + src/vteinternal.hh | 8 + + src/vteseq.cc | 3056 ++++++++++++++++++++++++++++++++++++++++++++++---- + 16 files changed, 4207 insertions(+), 660 deletions(-) + +commit 33e84644162ac3b5deea493433ac0e40f68738a0 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + emulation: Update DA1 response + + Use 65 to indicate VT5xx. + + src/vteseq.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 181752d26586c050204a56616255ac1473abff91 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Reject mixed-control OSC and DCS sequences + + Only accept OSC/DCS sequences where the introducer (OSC or DCS) + and the string terminator (ST) are either both C1 or C0. + + Note that this doesn't regress bug 730154; we still parse the + sequences but return VTE_SEQ_IGNORE. + + src/parser-test.cc | 50 +++++++++++++++++++++++++++++++++++++------------- + src/parser.cc | 36 ++++++++++++++++++++++++++++++++++++ + src/parser.hh | 1 + + 3 files changed, 74 insertions(+), 13 deletions(-) + +commit 771e9f7f20270936ab3a99402626ad9c41c0aa4a +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: test: Use SequenceBuilder + + src/parser-glue.hh | 44 ++++- + src/parser-test.cc | 478 +++++++++++++++-------------------------------------- + 2 files changed, 175 insertions(+), 347 deletions(-) + +commit a7c9e797fecf9ea1bbad1c076564ca6ea13c4572 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + lib: Use an enum for the SGR codes + + src/vteinternal.hh | 41 +++++++++++++++++++++++++++++++++ + src/vteseq.cc | 66 +++++++++++++++++++++++++++--------------------------- + 2 files changed, 74 insertions(+), 33 deletions(-) + +commit 5288de355453232bb0c18e6d0a65885fb8204155 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: test: Test DCS sequences without intermediates + + src/parser-test.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 7686ffe760f184a92898e9ff5191c0d6a9fc9d03 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Ignore overflowing OSC and DCS sequences + + When the length of the data string exceeds the limit, + ignore these sequences. + + src/parser-test.cc | 44 +++++++++++++++++++++++++++++++------------- + src/parser.cc | 6 ++++-- + 2 files changed, 35 insertions(+), 15 deletions(-) + +commit c38cfbf5b7dedfe8eeaa2c6abefd13ca840a636e +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + emulation: Implement DECRQSS + + For now, only DECSCUSR and DECSTBM requests are supported. + + src/parser-glue.hh | 32 ++++++++++++++++++-- + src/parser-reply.hh | 64 ++++++++++++++++++++++----------------- + src/vte.cc | 21 +++++++++++-- + src/vteinternal.hh | 5 ++++ + src/vteseq.cc | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 175 insertions(+), 33 deletions(-) + +commit f2fb1f76b838d842b0b0d547aaeb3bb4e7bbdd8b +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: glue: Add wrapper class for struct vte_parser + + src/parser-cat.cc | 12 +++---- + src/parser-glue.hh | 45 ++++++++++++++++++++++++++ + src/parser-test.cc | 17 +++++----- + src/parser.cc | 95 ++++++++++++++---------------------------------------- + src/parser.hh | 10 ++++-- + src/vte.cc | 15 ++------- + src/vteinternal.hh | 3 +- + 7 files changed, 95 insertions(+), 102 deletions(-) + +commit 3c35e09be098206beb586f18d67a0f6f44856011 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Remove leftover from initial import + + These bits are unused. + + src/parser.hh | 33 --------------------------------- + 1 file changed, 33 deletions(-) + +commit 418350bdbd129ea8ff1da6c4fbd9ee6ef687ac11 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Distinguish between state changes and actions + + src/parser.cc | 395 ++++++++++++++++++++++++++++------------------------------ + 1 file changed, 190 insertions(+), 205 deletions(-) + +commit ff66c7352b27c087f419e0ccbc74086c8f388a1f +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Simplify parameter parsing + + The state machine already knows if it's processing + a character '0'..'9', or the parameter delimiters ':' + and ';'. Split parameter collection into 3 different + actions: collecting the value, and finishing a parameter + or subparameter. + + src/parser.cc | 77 ++++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 52 insertions(+), 25 deletions(-) + +commit e25a901cf561a3b884f6ab83884309632e56e533 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Record intermediates in order + + Previously the parser would store intermediates as + a bit mask, which loses the order and, when matching, + makes any permutation of the intermediates match the + same sequence. + + This commit changes that to record the intermediates in + the order they are used. + + Store the intermediate (and, for CSI and DCS sequences, + the optional parameter character at the beginning of the + parameters) in one unsigned int, packed as much as possible. + + Simplify the ESC, CSI and DCS matchers by using a combined + code of final character and intermediates. + + src/Makefile.am | 11 +- + src/parser-cat.cc | 71 ++-- + src/parser-cmd.hh | 2 + + src/parser-csi.hh | 143 +++++++ + src/parser-dcs.hh | 36 ++ + src/parser-esc.hh | 49 +++ + src/parser-glue.hh | 24 +- + src/parser-test.cc | 164 ++++++-- + src/parser.cc | 1072 +++++++++++++++++----------------------------------- + src/parser.hh | 113 +++--- + src/vteseq.cc | 51 ++- + 11 files changed, 859 insertions(+), 877 deletions(-) + +commit 887f744b6e8c84204fa9bd66167ada88a9e7293a +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Don't collect invalid characters in escape sequences + + Intermediates must be 2/0..2/15, and finals must be 3/0..7/14. + Characters outside of that range shouldn't be silently ignored, + but instead abort the sequence. + + src/parser.cc | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 6d7e27736203c9210a3e4fec2cc44efcf9890d84 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + app: Fix option output in help + + src/app/app.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 039d85213be271c91b2609369a2cf87dc21e8a3a +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Ignore most C0 controls in OSC string + + Instead of clearing the sequence, just drop the character, + except for CAN, SUB and ESC. + + Note that this differs from xterm's behaviour. + + src/parser.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8306373fd374bc203e9ae515c67e31fc97146ca6 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Speed up no-op strings + + Perform no action while dropping DCS IGNORE, APC, PM, SOS. + + src/parser.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit c21e714b44fccdd9374483bbf46767638a902cdd +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Ignore DEL in all states + + DEL does not change state or performs any action. + + src/parser-test.cc | 21 ++++++++++----------- + src/parser.cc | 41 ++++++----------------------------------- + 2 files changed, 16 insertions(+), 46 deletions(-) + +commit ada093ad1f965d90688ef05f33b87f0810570684 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + parser: Accept C0 ST to terminate OSC, DCS + + ... as well as the ignored APC, PM, SOS. + + src/parser-test.cc | 57 ++++++++++++------------- + src/parser.cc | 119 ++++++++++++++++++++++++++++++++++++++++++----------- + 2 files changed, 124 insertions(+), 52 deletions(-) + +commit 6c8fbbe2698ca8f374b63c047e3bf571f0f45fe7 +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + emulation: Implement DECRQCRA + + This will be used in the test suite later. + + https://bugzilla.gnome.org/show_bug.cgi?id=745045 + + src/vte.cc | 43 ++++++++++++++++++-------- + src/vteinternal.hh | 8 ++++- + src/vteseq.cc | 89 +++++++++++++++++++++++++++++++++++++++++++++++++----- + 3 files changed, 119 insertions(+), 21 deletions(-) + +commit 02521cba6add9374f716b1e774a4943cccc626ad +Author: Christian Persch +Date: 2018-03-27 19:40:13 +0200 + + emulation: Fix DECSTBM parameters + + The comment about requiring 2 lines was inaccurate; + xterm does not actually work like that. + + https://bugzilla.gnome.org/show_bug.cgi?id=791451 + + src/vteseq.cc | 13 +++++-------- + 1 file changed, 5 insertions(+), 8 deletions(-) + +commit fcdd6958e49571ed51c7b6f342047319d1caf85f +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Fix typo + + DEL is 7/15. + + src/parser.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ef0a81b2cf08c5514772ee818316c094dda7d64e +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Refactor tabstop handling + + Use a bitmask to store the tabstops instead of a hash table, + and add tests. + + src/Makefile.am | 18 ++- + src/parser-cmd.hh | 5 + + src/parser.cc | 10 ++ + src/tabstops-test.cc | 234 +++++++++++++++++++++++++++++++++++++++ + src/tabstops.hh | 222 +++++++++++++++++++++++++++++++++++++ + src/vte.cc | 84 +++----------- + src/vteinternal.hh | 16 ++- + src/vteseq.cc | 302 +++++++++++++++++++++++++++------------------------ + 8 files changed, 673 insertions(+), 218 deletions(-) + +commit db9ca29cfb593468bfabe8f4ac036e1521732692 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Implement SCI parsing + + src/parser-cat.cc | 1 + + src/parser-cmd.hh | 1 - + src/parser-glue.hh | 5 ++++- + src/parser-test.cc | 51 +++++++++++++++++++++++++++++++++++++++++++++-- + src/parser.cc | 58 ++++++++++++++++++++++++++++++++++++++++++++++-------- + src/parser.hh | 2 +- + src/vteseq.cc | 11 ----------- + 7 files changed, 105 insertions(+), 24 deletions(-) + +commit 23c44f1f18b7985d9fba3205500d8873ecde51aa +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Implement the window title stack + + https://bugzilla.gnome.org/show_bug.cgi?id=699819 + + src/vte.cc | 5 +++++ + src/vtedefines.hh | 3 +++ + src/vteinternal.hh | 5 +++++ + src/vteseq.cc | 39 +++++++++++++++++++++++++++++++++++++++ + 4 files changed, 52 insertions(+) + +commit d17321a21c37369bd1383611d245b0ccb80c8cac +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Remove icon title support + + Remove OSC 1 (icon title) support; this is a relic and not + useful anymore. + + Deprecate vte_terminal_get_icon_title(), the "icon-title-changed" + signal and the "icon-title" property, as well. + + https://bugzilla.gnome.org/show_bug.cgi?id=793203 + + doc/reference/vte-sections.txt | 2 +- + src/vte.cc | 14 -------------- + src/vte/vtedeprecated.h | 4 ++++ + src/vte/vteterminal.h | 2 -- + src/vtegtk.cc | 10 ++++++---- + src/vteinternal.hh | 3 --- + src/vteseq.cc | 23 +++-------------------- + 7 files changed, 14 insertions(+), 44 deletions(-) + +commit 20eb6baeb78652a585154150a27dd3ec8e58ca2d +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Implement DECRQM + + https://bugzilla.gnome.org/show_bug.cgi?id=787007 + + src/parser-cmd.hh | 2 +- + src/parser.cc | 4 ++-- + src/vteseq.cc | 48 ++++++++++++++++++++++++++++++++++++++++++------ + 3 files changed, 45 insertions(+), 9 deletions(-) + +commit 6cd4713c561dba2188ecc78b6be648225cab7dda +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: glue: Add sequence builder + + ... and use it throughout. + + src/Makefile.am | 3 + + src/debug.cc | 1 + + src/debug.h | 1 + + src/parser-arg.hh | 9 + + src/parser-cat.cc | 3 + + src/parser-glue.hh | 312 +++++++++++++++++++++++++++++++ + src/parser-reply.hh | 54 ++++++ + src/parser-test.cc | 15 ++ + src/parser.hh | 42 +++++ + src/vte.cc | 83 ++++++++- + src/vteinternal.hh | 15 ++ + src/vteseq.cc | 525 +++++++++++++++++++++++++++++++--------------------- + 12 files changed, 841 insertions(+), 222 deletions(-) + +commit fbeb9cb88eecdc032c7bb0e5e229834eb45b7a9b +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Use an enum for the XTERM_WM param values + + src/vteinternal.hh | 22 ++++++++++++++++++++ + src/vteseq.cc | 60 +++++++++++++++++++++++++++++++++++++++--------------- + 2 files changed, 66 insertions(+), 16 deletions(-) + +commit b3d8fe0e25f6e59d368a4101bd361300fe060177 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Implement DCS parsing + + src/parser-cmd.hh | 17 ++++++ + src/parser-test.cc | 92 +++++++++++++++++++++++++++++- + src/parser.cc | 149 ++++++++++++++++++++++++++++++++++++++++-------- + src/vteseq.cc | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 398 insertions(+), 23 deletions(-) + +commit 1e29c00aaae00069aed92370a8eb1c46fe4455e7 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Remove leftovers from old parser + + src/Makefile.am | 1 - + src/vteinternal.hh | 8 ----- + src/vteseq-list.hh | 96 ------------------------------------------------------ + 3 files changed, 105 deletions(-) + +commit c4cd94d2b5ef472d83888a320c0d3744561d5ecc +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Implement OSC parsing + + src/Makefile.am | 6 + + src/parser-arg.hh | 2 +- + src/parser-cat.cc | 24 +- + src/parser-cmd.hh | 1 + + src/parser-glue.hh | 354 ++++++++++++++++------ + src/parser-osc.hh | 100 ++++++ + src/parser-string.hh | 138 +++++++++ + src/parser-test.cc | 395 ++++++++++++++++++++++-- + src/parser.cc | 58 ++-- + src/parser.hh | 12 +- + src/vte.cc | 53 ++-- + src/vtegtk.cc | 10 +- + src/vteinternal.hh | 63 ++-- + src/vteseq.cc | 836 +++++++++++++++++++++++++-------------------------- + 14 files changed, 1429 insertions(+), 623 deletions(-) + +commit e9fa511fe35ed38020671f1867ff0d3ccb76f07c +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + vte.sh: Use C1 controls in OSC sequences + + src/vte.sh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit b0bb1540a5e1321aa4944310416b3d072596a002 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Unify mode handling + + src/Makefile.am | 23 +- + src/debug.cc | 1 + + src/debug.h | 1 + + src/modes-ecma.hh | 65 ++++++ + src/modes-private.hh | 250 +++++++++++++++++++++ + src/modes-test.cc | 90 ++++++++ + src/modes.hh | 250 +++++++++++++++++++++ + src/vte.cc | 131 +++++------ + src/vteinternal.hh | 68 ++---- + src/vteseq.cc | 618 ++++++++++++++++----------------------------------- + 10 files changed, 937 insertions(+), 560 deletions(-) + +commit 011856ac1904f79ddabce4d72c6dd6e9b428d5a9 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Remove LNM mode support + + LNM has been deprecated for so long that it's been removed + from ECMA-48, see § F.5.2. + + src/vte.cc | 50 +++++++------------------------------------------- + src/vteinternal.hh | 5 +---- + src/vteseq.cc | 3 --- + 3 files changed, 8 insertions(+), 50 deletions(-) + +commit 0b24be7830137b7b099da1b5b102bbdb3a55a86c +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Move sequence handler code directly into the handler + + src/vteseq-list.hh | 3 - + src/vteseq.cc | 216 +++++++++++------------------------------------------ + 2 files changed, 44 insertions(+), 175 deletions(-) + +commit 983769e2879a0d3eb31c6e4114d586054f240860 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Move sequence handler code directly into the handler + + src/parser-cmd.hh | 4 +-- + src/parser.cc | 8 +++--- + src/vteseq-list.hh | 4 --- + src/vteseq.cc | 79 ++++++++++++++++++------------------------------------ + 4 files changed, 32 insertions(+), 63 deletions(-) + +commit fde88ef7f9226a0849ca62663bc1eaa9862178b8 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Move sequence handler code directly into the handler + + src/vteseq-list.hh | 3 -- + src/vteseq.cc | 99 ++++++++++++++++++++++-------------------------------- + 2 files changed, 40 insertions(+), 62 deletions(-) + +commit d6e594de6fed766e874888cf44f396a6fd94ffb4 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Move sequence handler code directly into the handler + + src/vteseq-list.hh | 3 --- + src/vteseq.cc | 70 +++++++++++++++++++++++------------------------------- + 2 files changed, 30 insertions(+), 43 deletions(-) + +commit f96b1326ab5db3701ef0dfda1044b76bede6bbe9 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Move sequence handler code directly into the handler + + src/vteseq-list.hh | 5 ---- + src/vteseq.cc | 75 +++++++++++++----------------------------------------- + 2 files changed, 18 insertions(+), 62 deletions(-) + +commit 37db400d6b5c254d3df46328a170a3f325b59356 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Move sequence handler code directly into the handler + + src/vteseq-list.hh | 2 -- + src/vteseq.cc | 93 +++++++++++++++++++++++------------------------------- + 2 files changed, 39 insertions(+), 56 deletions(-) + +commit 15e9df6f359deb6b670eb714f74775e6e9b8fd93 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Move sequence handler code directly into the handler + + src/vteseq-list.hh | 2 -- + src/vteseq.cc | 24 ++++++++---------------- + 2 files changed, 8 insertions(+), 18 deletions(-) + +commit 13b3ac515590c7e874c4317ae927e06743e10c22 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port DECSTBM to new parameter glue + + src/vteinternal.hh | 3 -- + src/vteseq-list.hh | 3 -- + src/vteseq.cc | 131 +++++++++++++++++++---------------------------------- + 3 files changed, 46 insertions(+), 91 deletions(-) + +commit 33ce2d03b16b6a46c8cb1032864e7b4dc29db0f3 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port DL, IL to new parameter glue + + src/vteseq-list.hh | 1 - + src/vteseq.cc | 28 ++++++++-------------------- + 2 files changed, 8 insertions(+), 21 deletions(-) + +commit 0064f8a157dc2e296d8c4c50f63b651e015d6fd1 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port HTS, TBC to new parameter glue + + src/vteseq-list.hh | 2 -- + src/vteseq.cc | 62 +++++++++++++++++++++++++++++------------------------- + 2 files changed, 33 insertions(+), 31 deletions(-) + +commit a85c4d30dbc7c97cddf1d47ccfe4bc68a1f9eeb5 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port CBT, CHT to new parameter glue + + src/vteseq-list.hh | 2 -- + src/vteseq.cc | 62 ++++++++++++++++++++++++------------------------------ + 2 files changed, 27 insertions(+), 37 deletions(-) + +commit 8a1b704d84a3b97842238d417641fa288a78b453 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port REP to new parameter glue + + src/vteseq-list.hh | 1 - + src/vteseq.cc | 25 ++++++++++--------------- + 2 files changed, 10 insertions(+), 16 deletions(-) + +commit e1687cf958dec87df509ecff0bbbabceeb67a783 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port ICH to new parameter glue + + src/vteseq-list.hh | 1 - + src/vteseq.cc | 20 +++++++------------- + 2 files changed, 7 insertions(+), 14 deletions(-) + +commit b7262c35463bde2474f8a17defcec2b9cec0252d +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port DCH, ECH to new parameter glue + + src/vteseq-list.hh | 2 -- + src/vteseq.cc | 39 ++++++++++++++++----------------------- + 2 files changed, 16 insertions(+), 25 deletions(-) + +commit 1aa9681b7be2079252d9a20333b1abe32c377176 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port CPL, CUU to new parameter glue + + src/vteseq-list.hh | 2 -- + src/vteseq.cc | 32 +++++++++++--------------------- + 2 files changed, 11 insertions(+), 23 deletions(-) + +commit 87385bb7ba0354e764ed652711f2c073cfaa40a2 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port SD, SU to new parameter glue + + src/vteseq-list.hh | 2 -- + src/vteseq.cc | 30 +++++++++--------------------- + 2 files changed, 9 insertions(+), 23 deletions(-) + +commit fcbe649e7b04c584af56ece29060f450cad635d3 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port CUB, CUF to new parameter glue + + src/vteseq-list.hh | 2 -- + src/vteseq.cc | 26 ++++++++------------------ + 2 files changed, 8 insertions(+), 20 deletions(-) + +commit b28f3dceb4b7aad6de98d966ee8fbd30fb66d010 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port CNL, CUD to new parameter glue + + src/vteseq-list.hh | 2 -- + src/vteseq.cc | 28 ++++++++++------------------ + 2 files changed, 10 insertions(+), 20 deletions(-) + +commit 8f223ebdd619846f2f9c1f04c3888eabecde67a6 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port VPA to new parameter glue + + src/vteseq-list.hh | 1 - + src/vteseq.cc | 17 +++++------------ + 2 files changed, 5 insertions(+), 13 deletions(-) + +commit 58f7727b74e8e0957682121dd8a1dbb527f3c9b7 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port CHA, HPA, CUP to new parameter glue + + src/vteinternal.hh | 4 +++ + src/vteseq-list.hh | 4 --- + src/vteseq.cc | 71 +++++++++++++++++++++++++++--------------------------- + 3 files changed, 39 insertions(+), 40 deletions(-) + +commit 7e0af2d46aed31eb53da558c5b2324d71d521693 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port XTERM_WM to new parameter glue + + src/parser-test.cc | 4 + + src/vteseq-list.hh | 1 - + src/vteseq.cc | 385 ++++++++++++++++++++++++++--------------------------- + 3 files changed, 190 insertions(+), 200 deletions(-) + +commit 2dbfddd9e5f866a5aa146a1af8c9b5b2012853bb +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port DECSCUSR to new parameter glue + + src/vteseq-list.hh | 1 - + src/vteseq.cc | 37 +++++++++++++------------------------ + 2 files changed, 13 insertions(+), 25 deletions(-) + +commit 2d8e0f8f27fb57347ebb4f95baaf8ed8c6c04cad +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + emulation: Port DSR to new parameter glue + + src/parser-cmd.hh | 2 +- + src/parser.cc | 4 +- + src/vteseq-list.hh | 2 - + src/vteseq.cc | 193 +++++++++++++++++++++++++++-------------------------- + 4 files changed, 100 insertions(+), 101 deletions(-) + +commit 35b484de9c4f559b445e48535bb39b79170f7c5a +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: glue: Add some convenience function to collect parameters + + src/parser-arg.hh | 14 +++++++++++ + src/parser-glue.hh | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/parser-test.cc | 68 ++++++++++++++++++++++++++++++++++++++++++++++++-- + 3 files changed, 153 insertions(+), 2 deletions(-) + +commit edcb9d8ffaf3aa755df90637767c4dd04f949588 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Improve glue for subparameters + + ... and use it to parse SGR with subparameters. + + src/parser-arg.hh | 8 +- + src/parser-glue.hh | 188 ++++++++++++++++++-- + src/parser-test.cc | 84 ++++++++- + src/vteinternal.hh | 6 +- + src/vteseq-list.hh | 1 - + src/vteseq.cc | 512 ++++++++++++++++++----------------------------------- + 6 files changed, 427 insertions(+), 372 deletions(-) + +commit 02bb51a508a8d368f529ee031cc47db5ba9d599b +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: cat: Add benchmark mode + + Add benchmark mode and repeat counter to parser-cat. + This is useful to measure the time spent in the parser only. + + src/parser-cat.cc | 97 +++++++++++++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 87 insertions(+), 10 deletions(-) + +commit cc76ded64133f942d5074fbc22120ab3f2c73f9a +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Improve test programme + + src/Makefile.am | 25 ++-- + src/interpret.cc | 231 ------------------------------ + src/iso2022.cc | 2 - + src/iso2022.h | 1 - + src/parser-cat.cc | 414 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 424 insertions(+), 249 deletions(-) + +commit 45561b86c5855a3a2c17582b033ef1aace20f2fb +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Parse subparameters in CSI sequences + + This is used in SGR. + + src/parser-test.cc | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +commit db833edf98f881085b14ae5240ea65bcff383b91 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Parse subparameters in CSI sequences + + This is used in SGR. + + src/parser-arg.hh | 116 +++++++++++++++++++++++++++++++++++++++++++++++------ + src/parser-test.cc | 107 ++++++++++++++++++++++++++++++++++++------------ + src/parser.cc | 42 ++++++++++--------- + src/parser.hh | 1 + + 4 files changed, 210 insertions(+), 56 deletions(-) + +commit 0b17caececdc1cf02fe66fd04a2e855b5a83dc2a +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Use 0 as the default arg value + + Instead of using -1 as the default value, use 0, and mark actual values + with a flag. + + This is in preparation to implement parsing subparameters. + + src/parser-arg.hh | 22 +++++++++++----------- + src/parser-test.cc | 1 - + src/vteseq.cc | 2 +- + 3 files changed, 12 insertions(+), 13 deletions(-) + +commit b512050c16e8ae9e9c40efc41b1eba6a52abdca7 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Fix charset detection + + And remove the old parser and test programme. + + src/Makefile.am | 42 +-- + src/caps-list.hh | 318 ------------------ + src/interpret-old.cc | 302 ----------------- + src/matcher.cc | 221 ------------- + src/matcher.hh | 88 ----- + src/parser-charset-tables.hh | 230 +++++++++++++ + src/parser-charset.hh | 306 +++++++++++++++++ + src/parser-cmd.hh | 15 +- + src/parser-glue.hh | 4 + + src/parser-test.cc | 246 +++++++++++++- + src/parser.cc | 538 +++++++++++++----------------- + src/parser.hh | 61 +--- + src/table.cc | 761 ------------------------------------------- + src/table.hh | 55 ---- + src/vteseq-list.hh | 8 - + src/vteseq-str.hh | 156 --------- + src/vteseq.cc | 403 +++++++++++------------ + 17 files changed, 1226 insertions(+), 2528 deletions(-) + +commit bec2fff7f9431f9765f165c3a54b7d2fc19542a9 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Define a type for CSI parameters + + This is in preparation to parse subparameters delimited by ':'. + + src/Makefile.am | 2 ++ + src/interpret.cc | 2 +- + src/parser-arg.hh | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/parser-glue.hh | 4 +-- + src/parser-test.cc | 62 +++++++++++++++++++++++++++++++++++++++++------ + src/parser.cc | 33 +++++++++---------------- + src/parser.hh | 4 ++- + 7 files changed, 145 insertions(+), 33 deletions(-) + +commit e215bc5136e088f51700ba3e7baf6104d6669cc6 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Don't clear state when executing a control character + + C0 controls can occur inside an ESC or CSI sequence, where + they must be executed immediately but not abort the sequence, + and therefore also not clear the parameters. + + src/parser.cc | 1 - + 1 file changed, 1 deletion(-) + +commit 78b37c0ef1e6266cd10789991fcc6bf1d1b9cc3c +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Import new parser + + doc/reference/Makefile.am | 3 + + src/Makefile.am | 73 +- + src/debug.cc | 3 +- + src/debug.h | 27 +- + src/interpret-old.cc | 302 +++++ + src/interpret.cc | 289 ++-- + src/iso2022.h | 1 - + src/matcher.cc | 2 +- + src/parser-cmd.hh | 193 +++ + src/parser-glue.hh | 148 ++ + src/parser-test.cc | 539 ++++++++ + src/parser.cc | 115 +- + src/parser.hh | 218 +-- + src/table.cc | 4 +- + src/table.hh | 1 + + src/vte.cc | 306 ++--- + src/vteinternal.hh | 140 +- + src/vteseq-str.hh | 156 +++ + src/vteseq.cc | 3257 ++++++++++++++++++++++++++++++++++++++++++--- + 19 files changed, 4891 insertions(+), 886 deletions(-) + +commit 032a5c6622ff9ae8131a39c52623e595a2c94f54 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + parser: Import new parser + + COPYING.GPL3 | 675 ++++++++++++++++++++ + COPYING => COPYING.LGPL2 | 0 + COPYING.LGPL3 | 165 +++++ + Makefile.am | 3 + + src/parser.cc | 1578 ++++++++++++++++++++++++++++++++++++++++++++++ + src/parser.hh | 362 +++++++++++ + 6 files changed, 2783 insertions(+) + +commit f1b8a29ae7182ab76cad1867a7fa8a87867e06b4 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + build: Update requirements + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 899ce4558fd6c870813b552f78ab98278823e9b1 +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + Revert "emulation: Add support for OSC 5;0 (bold color)" + + This reverts commit e258bda404f146262545abf7c332d7917a55d5d6. + + src/caps-list.hh | 6 ------ + src/vteinternal.hh | 2 +- + src/vteseq-list.hh | 3 --- + src/vteseq.cc | 57 ++++++++++++++++-------------------------------------- + 4 files changed, 18 insertions(+), 50 deletions(-) + +commit 340233e40b96b69fb17ead2dea6d55e4a875993d +Author: Christian Persch +Date: 2018-03-27 19:40:12 +0200 + + Revert "emulation: Implement DECRQCRA" + + To avoid merge conflicts, this reverts + commit cac7b40b507c8ef705c0d7a3c2fee8a4bc3ee6ef + which will be re-implemented later on. + + src/caps-list.hh | 2 -- + src/vte.cc | 29 ------------------ + src/vteinternal.hh | 5 --- + src/vteseq-list.hh | 1 - + src/vteseq.cc | 89 ------------------------------------------------------ + 5 files changed, 126 deletions(-) + +commit e258bda404f146262545abf7c332d7917a55d5d6 +Author: Egmont Koblinger +Date: 2018-03-21 22:36:55 +0100 + + emulation: Add support for OSC 5;0 (bold color) + + Also OSC 4;256 does the same. Resetting counterparts (104, 105) added too. + + https://bugzilla.gnome.org/show_bug.cgi?id=722751 + + src/caps-list.hh | 6 ++++++ + src/vteinternal.hh | 2 +- + src/vteseq-list.hh | 3 +++ + src/vteseq.cc | 57 ++++++++++++++++++++++++++++++++++++++---------------- + 4 files changed, 50 insertions(+), 18 deletions(-) + +commit f0ee057544f7ba255e92c171203e8b4a8de09121 +Author: Egmont Koblinger +Date: 2018-03-21 21:20:39 +0100 + + widget: Remove faux bold support + + When no suitable bold counterpart is found for a font, simply use the + base font rather than printing it twice with a 1px offset. + + https://bugzilla.gnome.org/show_bug.cgi?id=756010 + + src/vte.cc | 3 +-- + src/vtedraw.cc | 22 ---------------------- + src/vtedraw.hh | 1 - + 3 files changed, 1 insertion(+), 25 deletions(-) + +commit cac3f1d87583932bbac803e036baf5739a03565c +Author: Egmont Koblinger +Date: 2018-03-21 21:19:21 +0100 + + widget: Do not extend the background under faux bold characters + + https://bugzilla.gnome.org/show_bug.cgi?id=682692#c5 + + src/vte.cc | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +commit 6f330cc1aac2975540d45d88b703131f351c51b2 +Author: Christian Persch +Date: 2018-03-12 21:44:43 +0100 + + Post branch version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b4b2eb2ceeeb1625fd1f689dc2b4cceff68e4bd6 (tag: 0.52.0) +Author: Christian Persch +Date: 2018-03-05 21:58:12 +0100 + + build: Post release version bump + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit a793a6eb93cab42bf24d691c778d6ecc545be5a0 (tag: 0.51.92) +Author: Christian Persch +Date: 2018-03-05 21:53:25 +0100 + + Version 0.51.92 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6b56f107ad98b9c50f73b9080d15e82c42da7f61 +Author: Egmont Koblinger +Date: 2018-03-05 21:23:23 +0100 + + widget: Do not scroll to the bottom on soft reset + + https://bugzilla.gnome.org/show_bug.cgi?id=789954#c17 + + src/vte.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit a9e75c4517c58385871cc17fe7ab007098ac363e +Author: Egmont Koblinger +Date: 2018-03-05 21:22:05 +0100 + + widget: Preserve the selection on reset + + https://bugzilla.gnome.org/show_bug.cgi?id=789954 + + src/vte.cc | 37 ++++++++++++++++--------------------- + 1 file changed, 16 insertions(+), 21 deletions(-) + +commit 9c620f462dfa3410d5cb543571ff699754deca45 +Author: Egmont Koblinger +Date: 2018-03-05 13:44:40 +0100 + + widget: Improve regex and hyperlink highlight tracking + + Fix underlining to immediately follow movements of the mouse pointer, + as well as changes to its visibility. Do not perform regex matches + behind the scenes when the pointer is hidden. + + https://bugzilla.gnome.org/show_bug.cgi?id=789536 + + src/vte.cc | 265 +++++++++++++++++++---------------------------------- + src/vteinternal.hh | 22 ++--- + 2 files changed, 100 insertions(+), 187 deletions(-) + +commit f608f08f727bf9bc7b45e6e311560fc7f5a59e62 +Author: Christian Persch +Date: 2018-03-05 00:08:25 +0100 + + app: Unset env var when not in test mode + + Just to make sure other processes don't inherit it. + + src/app/app.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit cac7b40b507c8ef705c0d7a3c2fee8a4bc3ee6ef +Author: Christian Persch +Date: 2018-03-04 23:22:26 +0100 + + emulation: Implement DECRQCRA + + This will be used in the test suite later. + + https://bugzilla.gnome.org/show_bug.cgi?id=745045 + + src/caps-list.hh | 2 ++ + src/vte.cc | 29 ++++++++++++++++++ + src/vteinternal.hh | 5 +++ + src/vteseq-list.hh | 1 + + src/vteseq.cc | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 126 insertions(+) + +commit bac521b55ec8df9de486c318094fa3d016b7ec8a +Author: Christian Persch +Date: 2018-03-04 23:22:26 +0100 + + all: Add test mode + + Add a way to enable test mode, which will activate functions + that are normally not enabled (for whatever reason). + + Add --test-mode to the vteapp to activate test mode. This + will later be used in automatic tests. + + src/app/app.cc | 12 +++++++++++- + src/vte.cc | 17 +++++++++++++---- + src/vtegtk.cc | 7 +++++++ + src/vteinternal.hh | 5 ++++- + 4 files changed, 35 insertions(+), 6 deletions(-) + +commit c9d53c075e4cc3734459051ba456d0e7d10dff06 +Author: Egmont Koblinger +Date: 2018-03-04 14:28:40 +0100 + + widget: Update adjustment page size and increments asynchronously + + This provides a workaround against these mistakenly printed warnings + due to GTK+ bug 769566: + + "Allocating size to GtkScrollbar [...] without calling + gtk_widget_get_preferred_width/height(). How does the code know the + size to allocate?" + + https://bugzilla.gnome.org/show_bug.cgi?id=769566 + https://bugzilla.gnome.org/show_bug.cgi?id=791014 + https://bugzilla.gnome.org/show_bug.cgi?id=793435 + + src/vte.cc | 86 +++++++++++++++++++++++++++----------------------------------- + 1 file changed, 38 insertions(+), 48 deletions(-) + +commit 72cdf6e6579917c351ab324dd313d4c51d7e5687 +Author: Christian Persch +Date: 2018-03-04 11:22:33 +0100 + + widget: Fix bell timestamp update + + Only update the timestamp when emitting the signal, not + every time a bell was pending. + + src/vte.cc | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 5c94130ec7a8f9bb5eb38db7c7fe384c9699a199 +Author: Christian Persch +Date: 2018-03-03 18:32:44 +0100 + + widget: Limit bell rate + + Also move the gdk_display_beep() and the signal emission out + of the processing loop and just queue it. + + https://bugzilla.gnome.org/show_bug.cgi?id=790815 + + src/vte.cc | 12 ++++++++++++ + src/vtedefines.hh | 3 +++ + src/vteinternal.hh | 4 ++++ + src/vteseq.cc | 3 +-- + 4 files changed, 20 insertions(+), 2 deletions(-) + +commit b398e253053806a05261aca79d6cfbfa9d69ed9b +Author: Egmont Koblinger +Date: 2018-03-03 17:42:34 +0100 + + draw: Do not cache ligatured glyphs + + This workaround avoids ligatured glyphs (e.g. for "<=>") from being cached. + A more proper solution is still pending. + + https://bugzilla.gnome.org/show_bug.cgi?id=793391 + + src/vtedraw.cc | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +commit f2d1926ca4cac16e8fc3f77deb1c7eb02df35b66 +Author: Egmont Koblinger +Date: 2018-03-03 17:33:01 +0100 + + widget: Cleanup integer vs. boolean around faux bold + + https://bugzilla.gnome.org/show_bug.cgi?id=793987 + + src/vte.cc | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit 1aae8bf0771076c026b0b8ba494c84837784420d +Author: Jiri Grönroos +Date: 2018-03-03 16:20:48 +0000 + + Update Finnish translation + + po/fi.po | 118 ++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 53 insertions(+), 65 deletions(-) + +commit a1cd4a4e6e00022a6d874cef92980160973a9c01 +Author: Phil Clayton +Date: 2018-03-03 13:29:34 +0100 + + introspection: Fix annotation for vte_terminal_feed_child + + https://bugzilla.gnome.org/show_bug.cgi?id=793273 + + src/vtegtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6d47b23d154eb9a458f4d4bcc47304e51bda85aa +Author: Christian Persch +Date: 2018-03-03 13:01:37 +0100 + + widget: Fix disabling bold effect + + https://bugzilla.gnome.org/show_bug.cgi?id=793987 + + src/vte.cc | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +commit b8faef7af4a1199055b9897d8a51f105e0459f4d +Author: Christian Persch +Date: 2018-03-03 13:01:37 +0100 + + app: Add option to disable bold + + src/app/app.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 278cd4a44344f56050891d302d386320dd306666 +Author: GNOME Translation Robot +Date: 2018-03-01 11:10:11 +0000 + + Update Scottish Gaelic translation + + (cherry picked from commit e64ec6f38d8a63401fb6dad8ad076822b23a2162) + + po/gd.po | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +commit 634d5b019d5a53dc2dd2d82a6c3b4bfc094e92c6 +Author: Egmont Koblinger +Date: 2018-02-27 22:34:15 +0100 + + widget: Initialize the last mouse coordinates to the padding + + https://bugzilla.gnome.org/show_bug.cgi?id=789536 + + src/vte.cc | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 135c6844e554a569f14a48db362af58c9ddfedaa +Author: Egmont Koblinger +Date: 2018-02-27 22:32:19 +0100 + + widget: Update the last mouse coordinates on enter and leave events + + https://bugzilla.gnome.org/show_bug.cgi?id=789536 + + src/vte.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 430e45d30a29e66131d10ca47144d5aa317f06c3 +Author: Egmont Koblinger +Date: 2018-02-27 22:31:04 +0100 + + widget: Fix the initial belief whether the mouse is over the widget + + https://bugzilla.gnome.org/show_bug.cgi?id=789536 + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2e5dfbd89b96e90509e4d738f0e18f4ea163084c +Author: Egmont Koblinger +Date: 2018-02-27 22:29:04 +0100 + + widget: Unset hyperlink URI when moving the mouse to a non-hyperlink cell + + https://bugzilla.gnome.org/show_bug.cgi?id=789536 + + src/vte.cc | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 34a2b58573a4879fd3e07d1fd946b57e46234723 +Author: Carlos Garnacho +Date: 2018-02-15 09:35:24 +0100 + + widget: Protect fudge_pango_colors() against all-inclusive PangoAttributes + + PangoAttribute documentation says "By default an attribute will have an + all-inclusive range of [0,G_MAXUINT]". It seems legal to get that from IMs + (referring to the pre-edit string), however the only caller of this + function just relies on the attribute being within the VteCells range, + leading to crashes. + + https://bugzilla.gnome.org/show_bug.cgi?id=793480 + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3fffbb8c4001c8f6d8409630ec8ab740fdb7e002 +Author: Christian Persch +Date: 2018-02-12 22:17:26 +0100 + + doap: Add Egmont + + vte.doap | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit e9989360bb3b020c4507562af9385ca7584f0d97 +Author: Egmont Koblinger +Date: 2018-02-12 20:52:33 +0100 + + widget: No longer generate bold color automatically + + Use the one explicitly provided via API, or the foreground color. + This also fixes how OSC 10 affects bold color. + + https://bugzilla.gnome.org/show_bug.cgi?id=728600 + https://bugzilla.gnome.org/show_bug.cgi?id=793152 + + src/vte.cc | 13 ++++--------- + src/vtetypes.cc | 35 ----------------------------------- + src/vtetypes.hh | 3 --- + 3 files changed, 4 insertions(+), 47 deletions(-) + +commit 68fc39464453eccefaaf92788e8be2afbea74727 +Author: Christian Persch +Date: 2018-02-05 20:16:20 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 614092c18c9272ee94e53957a9584ecd5118d053 (tag: 0.51.90) +Author: Christian Persch +Date: 2018-02-05 20:12:29 +0100 + + Version 0.51.90 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bc532dc160406aaea35756e9a9e8f755c82fddb2 +Author: Christian Persch +Date: 2018-02-05 20:11:08 +0100 + + widget: Add API to not clear the background + + Remove the background operator again and only support a simple + boolean clear-or-not-clear. + + This is useful only to support a background image. + + https://bugzilla.gnome.org/show_bug.cgi?id=767575 + + doc/reference/vte-sections.txt | 2 +- + src/app/app.cc | 32 ++------------------------------ + src/vte.cc | 30 ++++++++++++++++-------------- + src/vte/vteterminal.h | 4 ++-- + src/vtedraw.cc | 3 +-- + src/vtedraw.hh | 1 - + src/vtegtk.cc | 17 ++++++++--------- + src/vteinternal.hh | 4 ++-- + 8 files changed, 32 insertions(+), 61 deletions(-) + +commit fdaad997cd9d2fa56a9827f3c327aa192ea0abd9 +Author: Egmont Koblinger +Date: 2018-02-03 18:55:02 +0100 + + pty: spawn: Set PWD to the working directory to preserve symlinks + + https://bugzilla.gnome.org/show_bug.cgi?id=758452 + + src/pty.cc | 10 +++++++++- + src/vtegtk.cc | 8 ++++++++ + 2 files changed, 17 insertions(+), 1 deletion(-) + +commit c68a546e0b70128987c392d8e140f809fd809902 +Author: Egmont Koblinger +Date: 2018-01-31 23:01:21 +0100 + + widget: Allow regexes to match spaces + + https://bugzilla.gnome.org/show_bug.cgi?id=792729 + + src/vte.cc | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +commit 809e79770b4dea34d64574710ce429a86855fdb2 +Author: Timm Bäder +Date: 2018-01-27 20:25:03 +0100 + + widget: Fix scrollbar drawing not to be delayed + + https://bugzilla.gnome.org/show_bug.cgi?id=771899 + + src/vte.cc | 22 +--------------------- + src/vtegtk.cc | 1 - + 2 files changed, 1 insertion(+), 22 deletions(-) + +commit 602bb5c1c497b6389f41f364a9412c465370654b +Author: Egmont Koblinger +Date: 2018-01-27 18:27:59 +0100 + + docs: Remove an obsolete comment + + src/vteseq.cc | 1 - + 1 file changed, 1 deletion(-) + +commit b274318f2e48573569d65b17cd2c4ead916e7d6a +Author: Egmont Koblinger +Date: 2018-01-22 13:38:49 +0100 + + widget: Fix mem leak in search_rows() + + https://bugzilla.gnome.org/show_bug.cgi?id=792740 + + src/vte.cc | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +commit 154110da03b9a124d1de91b857bdeb90c558caf8 +Author: Egmont Koblinger +Date: 2018-01-20 10:57:44 +0100 + + app: Uppercase initial for menu entry + + src/app/window.ui | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6bef0ec9e2c67257d87229b5f2035f3b8f487818 +Author: Egmont Koblinger +Date: 2018-01-14 00:11:29 +0100 + + widget: Respect "bold color" even when "bold is bright" is disabled + + https://bugzilla.gnome.org/show_bug.cgi?id=792501 + + src/vte.cc | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit c0cd47f88448969bd219047c3d56af65e35e9278 +Author: Christian Persch +Date: 2018-01-13 22:29:28 +0100 + + all: Remove overzealous use of constexpr + + One more. + Seems some compilers don't like it in these places. + + src/color-triple.hh | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 5f5a11a42b86afed9e1984518d7fe5477289c65b +Author: Christian Persch +Date: 2018-01-13 22:29:28 +0100 + + all: Remove overzealous use of constexpr + + Seems some compilers don't like it in these places. + + src/attr.hh | 14 +++++++------- + src/color-triple.hh | 12 ++++++------ + src/vterowdata.h | 10 +++++----- + 3 files changed, 18 insertions(+), 18 deletions(-) + +commit 6eea10a62ff5b9d57873c498a89973f27a7189f1 +Author: Christian Persch +Date: 2018-01-13 20:55:44 +0100 + + widget: Translate more pango attributes in the IM string + + Take underline colour, underline style and font style from the + PangoAttribute list. + + src/vte.cc | 41 ++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 40 insertions(+), 1 deletion(-) + +commit 66534dfc20c590ec2e0a1911fcbc18c9b92d3f7c +Author: Christian Persch +Date: 2018-01-13 20:55:44 +0100 + + ring: Store cell attributes together in an uint32_t + + Instead of using a bitfield, use an uint32_t and set/get + the values manually. This allows to check for multiple + values at once with just one operation instead of + checking each bitfield member separately., + + perf/deco.sh | 85 +++++++++++++++++ + src/Makefile.am | 1 + + src/attr.hh | 137 ++++++++++++++++++++++++++ + src/ring.cc | 32 +++---- + src/vte.cc | 276 +++++++++++++++++++++++------------------------------ + src/vteinternal.hh | 8 +- + src/vterowdata.h | 108 ++++++++++++++------- + src/vteseq.cc | 47 +++++---- + 8 files changed, 453 insertions(+), 241 deletions(-) + +commit 615d5fac3fa8009a11a3def7799af968d71bc4a9 +Author: Christian Persch +Date: 2018-01-13 20:55:44 +0100 + + all: Rearrange VteCellAttr to store all colours together in one uint64_t + + This re-arranges the VteCellAttr struct to store the foreground, + background and decoration colour together in one uint64_t. This will + allow later optimising the *other* attributes. + + A 24-bit (8 bit per component) color is stored in 25 bits in vte + (one extra bit is necessary to distinguish direct colours from + index colors), so to fit 3 colours into 64 bits, it was necessary + to reduce the depth of the (lesser used) decoration colour to + 4 bit per component. + + src/Makefile.am | 1 + + src/color-triple.hh | 92 ++++++++++++++++++++++++++++++++++++++++++ + src/vte.cc | 113 ++++++++++++++++++++++++++++------------------------ + src/vtedefines.hh | 19 +++++++-- + src/vteinternal.hh | 10 +++-- + src/vterowdata.h | 105 ++++++++++++++++++++++++++++-------------------- + src/vteseq.cc | 100 +++++++++++++++++++++++++++------------------- + 7 files changed, 296 insertions(+), 144 deletions(-) + +commit 088eb01c5f2f3abf558d10933bc5b57cbc9af030 +Author: Christian Persch +Date: 2018-01-13 20:55:44 +0100 + + emulation: Use deco colour also for default colour and fill attributes + + src/vte.cc | 1 + + src/vteseq.cc | 2 ++ + 2 files changed, 3 insertions(+) + +commit b17463c7d03eac1c9753b7b8ced4b9a455cf7727 +Author: Christian Persch +Date: 2018-01-13 20:55:43 +0100 + + widget: Return correct underline value in VteCharAttributes + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1f202f16559e5a1057391b0b77f404a419e8f158 +Author: Christian Persch +Date: 2018-01-08 22:31:15 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit cd6f296fcad9a93d96233664e50360fd4274a869 (tag: 0.51.3) +Author: Christian Persch +Date: 2018-01-08 22:28:26 +0100 + + build: Fix distcheck + + src/debug.c | 122 ---------------------------------------------------------- + src/debug.cc | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- + 2 files changed, 122 insertions(+), 123 deletions(-) + +commit 38396ef88ff44b447399b6abc562a22e07a27684 +Author: Egmont Koblinger +Date: 2017-12-23 22:41:24 +0100 + + widget: Add support for blinking text + + Also add an API to enable/disable this feature depending on the focused + or unfocused state of the widget. + + https://bugzilla.gnome.org/show_bug.cgi?id=579964 + + doc/reference/vte-sections.txt | 5 ++ + src/app/app.cc | 15 +++++ + src/vte.cc | 126 +++++++++++++++++++++++++++++++++++++++-- + src/vte/vteenums.h | 19 +++++++ + src/vte/vteterminal.h | 5 ++ + src/vtegtk.cc | 55 ++++++++++++++++++ + src/vtegtk.hh | 1 + + src/vteinternal.hh | 11 ++++ + 8 files changed, 231 insertions(+), 6 deletions(-) + +commit 68944c293d1004208846b9e9b18e536be3291365 +Author: Egmont Koblinger +Date: 2017-12-19 22:22:22 +0100 + + widget: Speed up the drawing of curly underline by caching its look + + https://bugzilla.gnome.org/show_bug.cgi?id=721761 + + src/vte.cc | 16 +++++------ + src/vtedraw.cc | 79 +++++++++++++++++++++++++++++++++++++++++++----------- + src/vtedraw.hh | 7 ++--- + src/vteinternal.hh | 2 +- + 4 files changed, 76 insertions(+), 28 deletions(-) + +commit 96dfd02eeb3c63b321204fcba01c3b8417c12d19 +Author: Egmont Koblinger +Date: 2017-12-19 10:21:34 +0100 + + doc: Fix vte_terminal_get_allow_bold's description + + src/vtegtk.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit c86612919e855025b03afd0189bd5c7e9c04b92b +Author: Egmont Koblinger +Date: 2017-12-16 23:31:32 +0100 + + widget: Fix display glitches around hidden underline + + https://bugzilla.gnome.org/show_bug.cgi?id=791303 + + src/vte.cc | 14 +++++++++----- + 1 file changed, 9 insertions(+), 5 deletions(-) + +commit 3c9e41211840a602a14b92eea4897ccd2704d6a4 +Author: Egmont Koblinger +Date: 2017-12-14 23:02:28 +0100 + + emulation: Revise the extended color escape sequences + + Add support for true color sequences according to ITU-T T.416, + i.e. CSI 38:2:[color_space_id]:R:G:B[:more_params]m. Color space id + and further parameters are ignored. + + Keep support for the misinterpreted CSI 38:2:R:G:Bm format (missing + color space id) for now, to be dropped at some point in the future. + + Keep support for 256-color sequences according to ITU-T T.416, + i.e. CSI 38:5:INDEXm. Allow and ignore further parameters. + + Keep support for the de facto standard CSI 38;2;R;G;Bm and CSI 38;5;INDEXm + supported by most terminal emulators and emitted by most apps. + + Drop support for mixed use of semicolons and colons. + + Add command line flags to perf/256test.sh and perf/img.sh to select the + emitted sequences, switch to the de jure format as default. + + https://bugzilla.gnome.org/show_bug.cgi?id=791456 + + perf/256test.sh | 34 +++++++++++++++++++++++++--------- + perf/img.sh | 29 +++++++++++++++++++++++------ + src/vteinternal.hh | 3 ++- + src/vteseq.cc | 49 ++++++++++++++++++------------------------------- + 4 files changed, 68 insertions(+), 47 deletions(-) + +commit 87f72720512ea37e76beff9f69890ab0a04f1f74 +Author: Egmont Koblinger +Date: 2017-12-11 22:36:04 +0100 + + widget,emulation: Add support for overline + + The escape sequences are: + CSI 53m to enable + CSI 55m to disable + + https://bugzilla.gnome.org/show_bug.cgi?id=767115 + + src/vte.cc | 41 +++++++++++++++++++++++++++++++++++------ + src/vteinternal.hh | 3 +++ + src/vterowdata.h | 4 +++- + src/vteseq.cc | 6 ++++++ + 4 files changed, 47 insertions(+), 7 deletions(-) + +commit 9d5ab10bd7bc2b444306c275908e38f7315ed0f2 +Author: Christian Persch +Date: 2017-12-11 22:16:15 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9be01fdf027c1f3e5ed665e6da024cf5ca424f0b (tag: 0.51.2) +Author: Egmont Koblinger +Date: 2017-12-11 22:02:44 +0100 + + sgr-test.sh: New script for testing SGR escape sequences + + https://bugzilla.gnome.org/show_bug.cgi?id=721761 + + perf/Makefile.am | 1 + + perf/sgr-test.sh | 138 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 139 insertions(+) + +commit a8af47bcabc66417f3b0930c7f3e2a903f1b9710 +Author: Egmont Koblinger +Date: 2017-12-11 21:50:12 +0100 + + widget,emulation: Add support for colored underlines + + The escape sequences are, similarly to CSI 38...m and CSI 39m: + CSI 58:5:...m or CSI 58;5;...m for an item of the 256-color palette + CSI 58:2:...m or CSI 58;2;...m for a direct RGB color + CSI 59m to turn this off (underline's color is the same as the text's) + + https://bugzilla.gnome.org/show_bug.cgi?id=721761 + + src/vte.cc | 110 ++++++++++++++++++++++++++++++++++------------------- + src/vteinternal.hh | 10 +++-- + src/vterowdata.h | 19 +++++---- + src/vteseq.cc | 17 +++++++-- + 4 files changed, 103 insertions(+), 53 deletions(-) + +commit efaf8f3c16809b8b2e43c39b13bf89464f51ba1a +Author: Egmont Koblinger +Date: 2017-12-11 21:44:49 +0100 + + widget,emulation: Add support for double and curly underlines + + The underline escape sequences are: + CSI 4m or CSI 4:1m for single underline + CSI 21m or CSI 4:2m for double underline + CSI 4:3m for curly underline + CSI 24m or CSI 4:0m for turning them off + + https://bugzilla.gnome.org/show_bug.cgi?id=721761 + + src/vte.cc | 84 ++++++++++++++++++++++++++++++++++++++++++------------ + src/vtedraw.cc | 47 ++++++++++++++++++++++++++++++ + src/vtedraw.hh | 9 ++++++ + src/vteinternal.hh | 6 +++- + src/vterowdata.h | 8 ++---- + src/vteseq.cc | 44 +++++++++++++++++----------- + 6 files changed, 157 insertions(+), 41 deletions(-) + +commit 6c44229d130dd1d5cdb218e897ec6f245e96d538 +Author: Egmont Koblinger +Date: 2017-12-09 12:18:40 +0100 + + widget: Add support for not automatically brightening bold colors + + https://bugzilla.gnome.org/show_bug.cgi?id=762247 + + doc/reference/vte-sections.txt | 2 ++ + src/app/app.cc | 4 +++ + src/vte.cc | 15 ++++++++++- + src/vte/vteterminal.h | 6 +++++ + src/vtegtk.cc | 59 ++++++++++++++++++++++++++++++++++++++++++ + src/vtegtk.hh | 1 + + src/vteinternal.hh | 2 ++ + 7 files changed, 88 insertions(+), 1 deletion(-) + +commit 1a671bbe0af2b0611423e9c869dd8cb3907c0ebc +Author: Egmont Koblinger +Date: 2017-12-08 23:18:39 +0100 + + widget: Remove margin bell support + + https://bugzilla.gnome.org/show_bug.cgi?id=731453 + + src/vte.cc | 12 ------------ + src/vteinternal.hh | 2 -- + src/vteseq.cc | 4 ---- + 3 files changed, 18 deletions(-) + +commit 26c79c6dc93aae4d4f787f36b594cac151df0f07 +Author: Egmont Koblinger +Date: 2017-12-04 23:08:44 +0100 + + widget: Add support for increased line and character spacing + + New API methods vte_terminal_set_cell_{height,width}_scale take values + from 1.0 (default) to 2.0 (double spacing) to push the letters further + apart from each other, without affecting the font size. + + https://bugzilla.gnome.org/show_bug.cgi?id=781479 + https://bugzilla.gnome.org/show_bug.cgi?id=738781 + + doc/reference/vte-sections.txt | 4 + + src/app/app.cc | 8 ++ + src/vte.cc | 193 +++++++++++++++++++++++++++++------------ + src/vte/vteterminal.h | 12 +++ + src/vtedefines.hh | 2 + + src/vtedraw.cc | 124 ++++++++++++++++++-------- + src/vtedraw.hh | 11 ++- + src/vtegtk.cc | 130 ++++++++++++++++++++++++++- + src/vtegtk.hh | 2 + + src/vteinternal.hh | 35 ++++++-- + 10 files changed, 416 insertions(+), 105 deletions(-) + +commit 3d09f0731a61c7bc5ea8795cdb0a86e48740035b +Author: Christian Persch +Date: 2017-11-27 20:17:00 +0100 + + interpret: Add statistics output + + Output a summary of the number of characters inserted and + sequences recognised. + + src/interpret.cc | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit f479790d04bb8932b6816fa343d3621c7997fa5d +Author: Christian Persch +Date: 2017-11-27 17:21:04 +0100 + + build: Rename header file + + src/{caps.h => caps.hh} | 14 +------------- + src/keymap.cc | 2 +- + src/matcher.cc | 2 +- + src/mev.c | 2 +- + src/vte.cc | 2 +- + src/vteseq.cc | 2 +- + 6 files changed, 6 insertions(+), 18 deletions(-) + +commit 74ec8441de36060bf3410903be60c1e297a0c7db +Author: Christian Persch +Date: 2017-11-27 17:03:00 +0100 + + interpret: Bring back the matcher test + + src/Makefile.am | 37 +++++++- + src/interpret.cc | 260 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 296 insertions(+), 1 deletion(-) + +commit 4e2f53632637abba42b1ac558b738b63de18441e +Author: Christian Persch +Date: 2017-11-26 22:04:35 +0100 + + build: Manually generate the C source from the vala source + + Don't use the automake vala support, instead just generate + the C sources manually. This fixes a build failure on + non-srcdir builds. + + bindings/vala/Makefile.am | 29 ++++++++++++++++------------- + 1 file changed, 16 insertions(+), 13 deletions(-) + +commit 0d1f50109740931d9547ed49f5b744438a4157cc +Author: Christian Persch +Date: 2017-11-21 18:36:48 +0100 + + emulation: Simplify sequence matching + + Instead of returning a string from the matcher that is then used + to lookup a handler, just return the function pointer directly + from the matcher. + + configure.ac | 8 -- + doc/reference/Makefile.am | 3 +- + src/Makefile.am | 83 +----------- + src/caps-list.hh | 318 ++++++++++++++++++++++++++++++++++++++++++++++ + src/caps.cc | 306 -------------------------------------------- + src/interpret.cc | 171 ------------------------- + src/matcher.cc | 43 +++---- + src/matcher.hh | 46 +++++-- + src/table.cc | 277 ++++++++++------------------------------ + src/table.hh | 22 ++-- + src/vte.cc | 52 +++++--- + src/vteinternal.hh | 8 +- + src/vteseq-list.hh | 156 +++++++++++++++++++++++ + src/vteseq-n.gperf | 175 ------------------------- + src/vteseq.cc | 125 ++++++++++++------ + 15 files changed, 738 insertions(+), 1055 deletions(-) + +commit 35e071e687e0f9bfed5adc7117e2c2d4cd3237a9 +Author: Christian Persch +Date: 2017-11-21 18:36:48 +0100 + + table: Remove unnecessary null checks + + We always pass non-null out parameters here, so remove + the unnecessary checks. + + src/matcher.cc | 6 ++++-- + src/matcher.hh | 14 +++++++++----- + src/table.cc | 33 +++++++++++++-------------------- + src/table.hh | 6 ++++-- + 4 files changed, 30 insertions(+), 29 deletions(-) + +commit b7e21e539a9c5978f3de072aae42a15980fc89aa +Author: Christian Persch +Date: 2017-11-21 18:36:48 +0100 + + interpret: Fix for non-ASCII characters decoding + + Just call setlocale(), so that we can convert non-ASCII characters + correctly. + + src/interpret.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit be7d350d61df65f60f3b88753688387db984b7ee +Author: Christian Persch +Date: 2017-11-21 18:36:48 +0100 + + interpret: Also print value arrays + + src/interpret.cc | 53 ++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 32 insertions(+), 21 deletions(-) + +commit 5e9ad640f61ba98436e3a48cc0031b64b7851c7e +Author: Christian Persch +Date: 2017-11-21 18:36:48 +0100 + + table: Move header to table.hh + + doc/reference/Makefile.am | 2 +- + src/Makefile.am | 6 +++--- + src/matcher.cc | 2 +- + src/table.cc | 2 +- + src/{table.h => table.hh} | 10 +--------- + 5 files changed, 7 insertions(+), 15 deletions(-) + +commit 601a6d8e3532d656a1522534d5d738742f8f13f7 +Author: Christian Persch +Date: 2017-11-18 23:19:22 +0100 + + emulation: Simplify sequence handlers and parameter handling + + Encapsulate the use of the deprecated GValueArray API in a + helper class, and use that to extract the parameters passed to + the sequence handlers. + + Also, move from using 2-stage sequence handlers that first call a + static function which in turn calls a method on VteTerminalPrivate + to using the member functions directly via a member function pointer. + + doc/reference/Makefile.am | 2 +- + src/Makefile.am | 8 +- + src/{interpret.c => interpret.cc} | 2 +- + src/iso2022.h | 2 +- + src/matcher.cc | 2 +- + src/{matcher.h => matcher.hh} | 10 +- + src/vte.cc | 16 +- + src/vteinternal.hh | 228 +++-- + src/vteseq-n.gperf | 308 +++--- + src/vteseq.cc | 2017 ++++++++++++++----------------------- + 10 files changed, 1098 insertions(+), 1497 deletions(-) + +commit f6678e7e938aaf6f4fd72ceb8f1bb71b2bf3e69e +Author: Egmont Koblinger +Date: 2017-11-18 20:50:06 +0100 + + widget: Reset might need to start blinking the cursor + + https://bugzilla.gnome.org/show_bug.cgi?id=790536 + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bca23e844378e57294c96661b5051ff199736cdc +Author: Christian Persch +Date: 2017-11-18 19:13:17 +0100 + + app: Fix a mem leak + + src/app/app.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 304e29d8a603828f42410ceac39ad803fcac475b +Author: Christian Persch +Date: 2017-11-18 19:10:10 +0100 + + pty: Fix mem leak + + src/pty.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit dda73cc07250ea324b4227907197c39b93fcd365 +Author: Christian Persch +Date: 2017-11-18 18:40:03 +0100 + + matcher: Fix memory leak + + Don't leak the GValueArray. + + https://bugzilla.gnome.org/show_bug.cgi?id=790539 + + src/matcher.cc | 12 +++++++----- + src/table.cc | 19 +++++++++++-------- + 2 files changed, 18 insertions(+), 13 deletions(-) + +commit b4f6c831ad61a7d5c33e62c6dfb6e2b3f3aaa830 +Author: Christian Persch +Date: 2017-11-13 23:01:48 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 22b89cf804f219bd5ab009e6020c620835450e3f (tag: 0.51.1) +Author: Christian Persch +Date: 2017-11-13 22:59:04 +0100 + + Version 0.51.1 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d8146f747f3b55aff3e5b838f77da08653d117a3 +Author: Alistair Thomas +Date: 2017-10-31 20:19:33 +0100 + + vala: add metadata to make Terminal.spawn_async () appear in the VAPI + + See https://bugzilla.gnome.org/show_bug.cgi?id=784232 + + bindings/vala/Vte-2.91.metadata | 1 + + 1 file changed, 1 insertion(+) + +commit 942c031b507c06e868936ac3fc2060d02a9d2f1b +Author: Egmont Koblinger +Date: 2017-10-29 14:45:00 +0100 + + widget: Rename char_width and char_height to cell_width and cell_height + + This is in preparation for the forthcoming line spacing and letter spacing + feature. API names remain unmodified for now. + + https://bugzilla.gnome.org/show_bug.cgi?id=781479 + + src/app/app.cc | 44 ++++++++--------- + src/vte.cc | 138 ++++++++++++++++++++++++++--------------------------- + src/vteaccess.cc | 28 +++++------ + src/vtegtk.cc | 12 ++--- + src/vteinternal.hh | 8 ++-- + src/vteseq.cc | 20 ++++---- + 6 files changed, 125 insertions(+), 125 deletions(-) + +commit dc870c1f3d1f61fc4a5bfdf164c5ada5bafea2d9 +Author: Egmont Koblinger +Date: 2017-10-29 14:43:40 +0100 + + widget: Factor out underline and strikethrough position and thickness + + https://bugzilla.gnome.org/show_bug.cgi?id=781479 + + src/vte.cc | 45 +++++++++++++++++++++++++++------------------ + src/vteinternal.hh | 4 ++++ + 2 files changed, 31 insertions(+), 18 deletions(-) + +commit 3ad045e3a87bc192fa323e7811231abe2d4e578f +Author: Nathan Follens +Date: 2017-10-29 10:18:44 +0000 + + Update Dutch translation + + po/nl.po | 124 +++++++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 70 insertions(+), 54 deletions(-) + +commit 653ad2224deae42d93ac10c4dd8495c7cd214e87 +Author: Egmont Koblinger +Date: 2017-10-28 14:44:15 +0200 + + widget: Show the mouse pointer when a popover is presented from outside VTE + + This is a followup for the incomplete fix from + commit 3e744098a4345fab636dca438f7e1996cdb57f7e. + + https://bugzilla.gnome.org/show_bug.cgi?id=789390 + + src/vte.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 908c14d7c07b1cc1cca147c763572dd3ee465dd6 +Author: Egmont Koblinger +Date: 2017-10-24 23:12:45 +0200 + + caps: Remove redundant entries + + https://bugzilla.gnome.org/show_bug.cgi?id=789389 + + src/caps.cc | 4 ---- + 1 file changed, 4 deletions(-) + +commit 118177ad089b39a7f769aa372e4d453c85b6c19a +Author: Egmont Koblinger +Date: 2017-10-24 23:12:02 +0200 + + debug: Typo fix + + src/table.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7fb4bce92aac6e9fb5400523bbf0a2b4eee04db9 +Author: Christian Persch +Date: 2017-10-24 23:03:51 +0200 + + debug: Pass the known string length + + src/keymap.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit be6cd8246c7993326677c9e2058deedac4263667 +Author: Christian Persch +Date: 2017-10-24 22:45:49 +0200 + + widget: Queue a redraw if the background operator changes + + src/vte.cc | 4 ++++ + src/vtegtk.cc | 3 --- + 2 files changed, 4 insertions(+), 3 deletions(-) + +commit 69a264904b80b4685e4350157396900c01e3e66a +Author: Christian Persch +Date: 2017-10-24 20:37:27 +0200 + + app: Default to the right operator when showing a background image + + src/app/app.cc | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 91d30f8f678afedd5f8eedbb95b64ec252abb7bd +Author: Christian Persch +Date: 2017-10-24 20:33:17 +0200 + + widget: Add API to set the operator used to draw the terminal background + + This is useful only to support a background image. + + https://bugzilla.gnome.org/show_bug.cgi?id=767575 + + configure.ac | 2 + + doc/reference/vte-sections.txt | 1 + + src/app/app.cc | 179 ++++++++++++++++++++++++++++++++++++++--- + src/vte.cc | 8 ++ + src/vte/vteterminal.h | 5 ++ + src/vtedraw.cc | 3 +- + src/vtedraw.hh | 1 + + src/vtegtk.cc | 26 ++++++ + src/vteinternal.hh | 2 + + 9 files changed, 213 insertions(+), 14 deletions(-) + +commit b941987a7060662de320e76cda05f08dde5e10aa +Author: Christian Persch +Date: 2017-10-24 18:38:58 +0200 + + debug: Fix printing the sequence string + + Add a length parameter for non-0-terminated strings, and use it. + + src/debug.c | 14 ++++++++++---- + src/debug.h | 3 ++- + src/keymap.cc | 2 +- + src/table.cc | 8 +++++--- + 4 files changed, 18 insertions(+), 9 deletions(-) + +commit f2fbfce81265f01773fb8521d8eca46e498c2b82 +Author: Christian Persch +Date: 2017-10-24 11:10:23 +0200 + + docs: Move deprecated functions to deprecated section + + doc/reference/vte-sections.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 1fce6af66a1952fdab31a7ec82297de5f77a9432 +Author: Christian Persch +Date: 2017-10-24 10:47:23 +0200 + + all: Silence compiler warning -Wfloat-equal + + We know it's bad to compare floats, but these are fine. + + src/vte.cc | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +commit 3917ff40f7f55646c4b6861a06631413ad3d67b9 +Author: Christian Persch +Date: 2017-10-24 10:47:23 +0200 + + build: Remove unused source code + + doc/reference/Makefile.am | 1 - + src/Makefile.am | 4 ---- + src/vtetree.cc | 60 ----------------------------------------------- + src/vtetree.h | 50 --------------------------------------- + 4 files changed, 115 deletions(-) + +commit 18962e5dd6e8ff293c0655f3df645f24ad4060eb +Author: Christian Persch +Date: 2017-10-24 10:38:59 +0200 + + table: Improve debug message + + src/table.cc | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +commit 99e37b77ab3f6c31e5a29dda2b1ce914b5d9902c +Author: Christian Persch +Date: 2017-10-24 10:38:59 +0200 + + build: Remove wint_t checks + + We don't really need this type anyway. + + configure.ac | 18 ------------------ + src/vte.cc | 10 ++-------- + 2 files changed, 2 insertions(+), 26 deletions(-) + +commit 368e89dcb00d84fb741101e932ab6243732a9aa1 +Author: Christian Persch +Date: 2017-10-24 10:38:59 +0200 + + build: Separate libvte and test app build requirements + + configure.ac | 6 ++++++ + src/app/Makefile.am | 4 ++-- + 2 files changed, 8 insertions(+), 2 deletions(-) + +commit 34cb79e23f019d67107a2624a6b54340b678254d +Author: Christian Persch +Date: 2017-10-23 22:01:38 +0200 + + app: Fix a copypaste error + + src/app/app.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 53c8026834278a1eeed5006dc0bdedb722f22768 +Author: Christian Persch +Date: 2017-10-23 22:01:38 +0200 + + app: Fix a copypaste error + + src/app/app.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9bc33bdd967887db026f5267ae7db28e6bfcfeef +Author: Egmont Koblinger +Date: 2017-10-22 19:36:19 +0200 + + widget: Emit title-changed and uri-changed only if the value really changed + + https://bugzilla.gnome.org/show_bug.cgi?id=782863 + + src/vte.cc | 45 +++++++++++++++++++++++++++++---------------- + 1 file changed, 29 insertions(+), 16 deletions(-) + +commit e2108c7db3c1136777212ed33ba8ab716e87b4f2 +Author: Christian Persch +Date: 2017-10-21 22:30:29 +0200 + + widget: Deprecate geometry helpers + + They can't work correctly since gtk+ removed geometry support, + so all apps need to handle this themselves. + + src/vte/vtedeprecated.h | 12 ++++++++++++ + src/vte/vteterminal.h | 10 ---------- + src/vtegtk.cc | 4 ++++ + 3 files changed, 16 insertions(+), 10 deletions(-) + +commit 05f936a295b7af63e447ea74769aa32d59b12379 +Author: Christian Persch +Date: 2017-10-21 17:09:26 +0200 + + build: Fix resource generation with glib < 2.50 + + https://bugzilla.gnome.org/show_bug.cgi?id=789290 + + src/app/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7734e2826debfecf6a147000bcdb601a356a41b6 +Author: Christian Persch +Date: 2017-10-21 17:09:26 +0200 + + app: Add opacity test mode + + https://bugzilla.gnome.org/show_bug.cgi?id=732023 + + src/app/app.cc | 21 ++++++++++++++++----- + 1 file changed, 16 insertions(+), 5 deletions(-) + +commit 6acfa59dfcceef65c1f7e3570db37ab245f049c4 +Author: Egmont Koblinger +Date: 2017-10-15 22:36:38 +0200 + + build: Remove manual define of _GNU_SOURCE + + https://bugzilla.gnome.org/show_bug.cgi?id=788476#c18 + + src/vteutils.cc | 4 ---- + 1 file changed, 4 deletions(-) + +commit a4362e96d882e496444c8858963d4d4be4d7b430 +Author: Egmont Koblinger +Date: 2017-10-15 22:33:22 +0200 + + build: Add strchrnul implementation to fix compilation on macOS + + https://bugzilla.gnome.org/show_bug.cgi?id=788476 + + configure.ac | 3 +++ + src/vteseq.cc | 1 + + src/vtespawn.cc | 13 ++----------- + src/vteutils.cc | 13 +++++++++++++ + src/vteutils.h | 3 +++ + 5 files changed, 22 insertions(+), 11 deletions(-) + +commit 425f76c798a7296e3c8a878d43c17b112e2bfab3 +Author: Xavi Ivars +Date: 2017-10-05 13:17:46 +0200 + + [l10n] Updated Catalan (Valencian) translation + + po/ca@valencia.po | 134 +++++++++++++++++++++++++----------------------------- + 1 file changed, 63 insertions(+), 71 deletions(-) + +commit 291b36519dc94de2c35bfba63c2af2e48663e786 +Author: Egmont Koblinger +Date: 2017-10-02 19:20:42 +0200 + + widget: Fix a crash with hyperlinks if the mouse is over the padding + + https://bugzilla.gnome.org/show_bug.cgi?id=788426 + + src/vte.cc | 20 ++++++++++++-------- + 1 file changed, 12 insertions(+), 8 deletions(-) + +commit efa20e03f8553373e6983b4b7cec61eaa38681d9 +Author: Christian Persch +Date: 2017-09-29 18:22:49 +0200 + + build: Fix dist + + src/app/Makefile.am | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 41f55bc1c2a978491b3fa3d23cb4aeb0c900e2b1 +Author: Egmont Koblinger +Date: 2017-09-29 14:26:40 +0200 + + widget: Fix initial size in presence of non-default padding + + https://bugzilla.gnome.org/show_bug.cgi?id=787710 + + src/vte.cc | 13 ++++++++++--- + src/vtegtk.cc | 11 +++++++++++ + src/vteinternal.hh | 1 + + 3 files changed, 22 insertions(+), 3 deletions(-) + +commit 0656a5794c8d075c8e7c4b56b3b6142068433981 +Author: Egmont Koblinger +Date: 2017-09-28 16:03:04 +0200 + + emulation: Add support for REP (repeat preceding graphic character) + + https://bugzilla.gnome.org/show_bug.cgi?id=787701 + + src/vte.cc | 6 ++++++ + src/vteinternal.hh | 1 + + src/vteseq-n.gperf | 2 +- + src/vteseq.cc | 19 ++++++++++++++++++- + 4 files changed, 26 insertions(+), 2 deletions(-) + +commit 6684fc6ba4e85065802ca000d4d2d3ccbf922214 +Author: Christian Persch +Date: 2017-09-26 13:38:23 +0200 + + widget: Improve debug output + + Also print padding updates for the WIDGET_SIZE debug category. + + src/vte.cc | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +commit b2e9df861e9717c04824b52d4a6c41fcb2de2baf +Author: Christian Persch +Date: 2017-09-26 13:06:59 +0200 + + app: Fix parsing of boolean options + + Need to use a gboolean for the struct member, since + GOption expects a gboolean (aka int) not a bool. + + src/app/app.cc | 36 ++++++++++++++++++------------------ + 1 file changed, 18 insertions(+), 18 deletions(-) + +commit b7f5fe9fa297231a8370a6892753af50dfb0fc3a +Author: Christian Persch +Date: 2017-09-25 12:58:02 +0200 + + widget: Show padding in size request debug output + + src/app/app.cc | 7 ++++++- + src/vte.cc | 15 +++++++++------ + 2 files changed, 15 insertions(+), 7 deletions(-) + +commit 2125d07a54abfce73b86f41d8c92a20902ad6882 +Author: Christian Persch +Date: 2017-09-25 11:45:41 +0200 + + app: Try to make geometry work also for no-geometry-hints case + + src/app/app.cc | 129 +++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 75 insertions(+), 54 deletions(-) + +commit 5b89b156d0ad37e976a56f74e53a100a247d508e +Author: Christian Persch +Date: 2017-09-24 21:09:29 +0200 + + i18n: Update POTFILES.skip + + po/POTFILES.skip | 1 - + 1 file changed, 1 deletion(-) + +commit 039b22ad57c8d43adf7f00cef0095e3d4c2f6657 +Author: Christian Persch +Date: 2017-09-24 20:53:57 +0200 + + app: Add new test application + + Re-write the vala test application in C for maintainability, and + degrade the vala test app to a mere noinst programme there only + to check that the vala bindings work. + + Remove the old C test application. + + bindings/vala/Makefile.am | 24 +- + configure.ac | 16 +- + po/POTFILES.skip | 4 + + src/Makefile.am | 28 +- + src/app/Makefile.am | 57 ++ + src/app/app.cc | 1915 +++++++++++++++++++++++++++++++++++++++++++++ + src/app/app.gresource.xml | 24 + + src/app/appmenu.ui | 33 + + src/app/search-popover.ui | 265 +++++++ + src/app/window.ui | 209 +++++ + src/vteapp.c | 1260 ----------------------------- + 11 files changed, 2522 insertions(+), 1313 deletions(-) + +commit 9ac6663add75234a1d4cf0f51f37795b2ed21159 +Author: Igor Zakharov +Date: 2017-09-15 20:44:42 +0200 + + widget: Add accessor function to get scrollback lines number + + https://bugzilla.gnome.org/show_bug.cgi?id=787642 + + doc/reference/vte-sections.txt | 1 + + src/vte/vteterminal.h | 2 ++ + src/vtegtk.cc | 18 +++++++++++++++++- + 3 files changed, 20 insertions(+), 1 deletion(-) + +commit 75d6f8fc98818b4f968df5836d8fc8f5857c90c2 +Author: Christian Persch +Date: 2017-09-13 21:16:37 +0200 + + docs: Add some missing functions to vte-sections.txt + + doc/reference/vte-sections.txt | 2 ++ + 1 file changed, 2 insertions(+) + +commit 70747d037b06296ff41cd7525ee31b18912e82cc +Author: Igor Zakharov +Date: 2017-09-13 21:16:37 +0200 + + widget: Add accessor functions for properties + + To get 'scroll on output' and 'scroll on keystroke' states. + + https://bugzilla.gnome.org/show_bug.cgi?id=785083 + + doc/reference/vte-sections.txt | 2 ++ + src/vte/vteterminal.h | 4 ++++ + src/vtegtk.cc | 37 +++++++++++++++++++++++++++++++++++-- + 3 files changed, 41 insertions(+), 2 deletions(-) + +commit a3fd7cfc0c05e64a36c9e28c9001ac4fc048f11e +Author: Christian Persch +Date: 2017-09-13 21:16:37 +0200 + + docs: Add index for 0.52 API additions + + doc/reference/vte-docs.xml | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 3e4b09e7aa5d3d3c70369f72f696d03b2c026c53 +Author: Christian Persch +Date: 2017-09-13 18:38:14 +0200 + + all: Remove gstdio.h + + src/debug.h | 1 - + src/vte.cc | 1 - + src/vtespawn.cc | 3 +-- + 3 files changed, 1 insertion(+), 4 deletions(-) + +commit 516b500c4f94a8c11de39213f78736ddbf6720f6 +Author: Christian Persch +Date: 2017-09-11 21:10:04 +0200 + + Post branch version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9032a81295fa48b088e6e5ceb366ab0676a5b6df (tag: 0.50.0) +Author: Daniel Șerbănescu +Date: 2017-09-06 17:16:43 +0000 + + Update Romanian translation + + po/ro.po | 101 +++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 49 insertions(+), 52 deletions(-) + +commit bdf5a0ea0370924a494214e9b492ac098e97c579 +Author: Egmont Koblinger +Date: 2017-09-05 23:02:08 +0200 + + widget: Fix a crash with hyperlinks if the mouse hasn't entered the widget + + https://bugzilla.gnome.org/show_bug.cgi?id=787283 + + src/vte.cc | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 7f933a505a00864f87b1418f995efaddda29ba70 +Author: Christian Persch +Date: 2017-09-04 20:14:59 +0200 + + Post release version bump + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit f6a7ad5555839e76d643448124cf6a96d7c5ddd6 (tag: 0.49.92) +Author: Christian Persch +Date: 2017-09-04 20:11:16 +0200 + + Version 0.49.92 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 662919b67a0cfd63f93220a72cb5a8efc69c2863 +Author: Alexander Shopov +Date: 2017-09-02 09:32:34 +0300 + + Updated Bulgarian translation + + po/bg.po | 83 ++++++++++++---------------------------------------------------- + 1 file changed, 15 insertions(+), 68 deletions(-) + +commit ba0e1e589faceb8bfdd716790f595f733f698a0d +Author: Egmont Koblinger +Date: 2017-08-31 21:31:58 +0200 + + widget: Use lighter dashed underline for hyperlinks + + https://bugzilla.gnome.org/show_bug.cgi?id=786912 + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit ea132fc22bdad37de04dea38ff8f7a95d2d79d1b +Author: Ask Hjorth Larsen +Date: 2017-08-28 19:45:52 +0200 + + Updated Danish translation + + po/da.po | 19 +++++++++++-------- + 1 file changed, 11 insertions(+), 8 deletions(-) + +commit efbf38e37be3cac925f5b3540a651fc0133c10a1 +Author: Jordi Mas +Date: 2017-08-22 08:46:21 +0200 + + Update Catalan translation + + po/ca.po | 129 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 60 insertions(+), 69 deletions(-) + +commit 3e744098a4345fab636dca438f7e1996cdb57f7e +Author: Egmont Koblinger +Date: 2017-08-20 22:35:27 +0200 + + widget: Don't hide the mouse pointer when a popover is presented + + This was broken in commit 776823da23b81b70e430c494bb66b54954c42d7b. + + https://bugzilla.gnome.org/show_bug.cgi?id=786441 + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 858ac54a884ae4687e98be2785ba0e1a7bcf45f6 +Author: Piotr Drąg +Date: 2017-08-12 02:11:44 +0200 + + Update Polish translation + + po/pl.po | 23 +++++++++++++---------- + 1 file changed, 13 insertions(+), 10 deletions(-) + +commit 723ea607ae49f61b2f23af8c7ea43144e9acfb69 +Author: Benjamin Berg +Date: 2017-07-19 16:44:46 +0200 + + Emit beep on the window instead of the display + + This means that in GNOME when enabling visual flash (in a11y) then only + the gnome-terminal frame will flash instead of the whole screen. Having + the whole screen flash is really disrupting and almost all the time the + reason for the flash is e.g. tab completion kicking in. + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit fa3bc86008cfe517dbb05deb4dff0059f3749c95 +Author: Emmanuele Bassi +Date: 2017-07-12 17:05:24 +0100 + + Fix the generation of the signal marshallers + + The generation of the signal marshallers is based on an undefined + behaviour of the glib-genmarshal tool. Passing both the --header and + --body command line arguments is undocumented and untested behaviour. + The generated C source adds prototypes for the marshallers, and wraps + the whole file between C++ guards. + + Instead of relying on undocumented behaviour, we can achieve the same + result by including the generated header in the generated source. + + https://bugzilla.gnome.org/show_bug.cgi?id=784853 + + src/Makefile.am | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit af889244f9306d8686c6346da35f34694240882e +Author: Christian Persch +Date: 2017-06-13 09:27:06 +0200 + + emulation: Swallow iterm2 OSC 133 + + Accept OSC 133 but make it a no-op. + + When sshing to an osx host the iterm2 integration may be active, + causing the remote shell to emit iterm2 OSC 133 sequences that + clutter the vte terminal since we don't ignore unknown sequences + (bug 403130). + + https://bugzilla.gnome.org/show_bug.cgi?id=783710 + + src/caps.cc | 2 ++ + src/vteseq-n.gperf | 1 + + src/vteseq.cc | 12 ++++++++++-- + 3 files changed, 13 insertions(+), 2 deletions(-) + +commit a0b0a25b6a53b56095e7df1551cfce8aa0a0906d +Author: Kristjan SCHMIDT +Date: 2017-06-10 17:46:03 +0200 + + Updated Esperanto translation + + po/eo.po | 119 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 55 insertions(+), 64 deletions(-) + +commit 61049af2ee9dfe8d5113eafd3597395f8fe27029 +Author: Debarshi Ray +Date: 2017-05-23 17:13:30 +0200 + + Don't set variables to values that are never used + + https://bugzilla.gnome.org/show_bug.cgi?id=783001 + + src/vterowdata.cc | 2 +- + src/vtestream-file.h | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit 965ac9144b5989859230cd859e675fd5dfb29eac +Author: Debarshi Ray +Date: 2017-05-23 09:56:24 +0200 + + pty: Removed unused variable + + Fallout from b59d76a5073d789f2f948cf928e883cb70cc8a75 + + https://bugzilla.gnome.org/show_bug.cgi?id=782977 + + src/pty.cc | 1 - + 1 file changed, 1 deletion(-) + +commit 91e9c83878ee389ad63f45c7ec654011b75039e5 +Author: Christian Persch +Date: 2017-05-07 13:57:41 +0200 + + widget: Provide a way to copy the selection to clipboard as HTML + + Currently, copying to HTML is disabled (#if 0) in the code, because + it will generate the potentially huge selection data in both text and + HTML formats. + + Instead, provide API to tell vte which format to use. + + https://bugzilla.gnome.org/show_bug.cgi?id=365121 + + bindings/vala/app.ui | 1 + + bindings/vala/app.vala | 12 +- + doc/reference/vte-sections.txt | 6 +- + src/vte.cc | 327 +++++++++++++++++++++-------------------- + src/vte/vtedeprecated.h | 4 + + src/vte/vteenums.h | 15 ++ + src/vte/vteterminal.h | 3 +- + src/vteaccess.cc | 4 +- + src/vtegtk.cc | 71 ++++++--- + src/vteinternal.hh | 38 ++--- + 10 files changed, 271 insertions(+), 210 deletions(-) + +commit 64be114a87ad20e874860a7a819c16fa394c69f8 +Author: Egmont Koblinger +Date: 2017-05-04 22:31:21 +0200 + + widget: Fix allow-hyperlink's default + + src/vtegtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4d9fe82d8ef4eda415edae7a307df093f77e50e6 +Author: Egmont Koblinger +Date: 2017-04-30 23:32:09 +0200 + + docs: Remove an obsolete comment + + src/vterowdata.h | 3 --- + 1 file changed, 3 deletions(-) + +commit 0c0ad520265f4a8fc2e8caced228be1c8aa9553e +Author: Egmont Koblinger +Date: 2017-04-30 23:29:36 +0200 + + img.sh: Fix for newer ImageMagick + + https://bugzilla.gnome.org/show_bug.cgi?id=781865 + + perf/img.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 049e0bbc9807311edac246427f3f1f164f60c2da +Author: Christian Persch +Date: 2017-04-26 11:21:41 +0200 + + build: vala: Fix check for valac >= 0.31.1 + + Need to always check this, since we build (but not install) the + test application when --enable-vala is given. + + https://bugzilla.gnome.org/show_bug.cgi?id=781720 + + configure.ac | 17 ++++++----------- + 1 file changed, 6 insertions(+), 11 deletions(-) + +commit c153782c0654f9e99a77207b217fb2778397972e +Author: Christian Persch +Date: 2017-04-26 11:13:22 +0200 + + build: vala: Bump vapigen required version to 0.24 + + https://bugzilla.gnome.org/show_bug.cgi?id=781322 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1ae3ae3983598109f8d7b3e97f0db58504402e6a +Author: Egmont Koblinger +Date: 2017-04-26 00:05:23 +0200 + + docs: Fix hyperlink signal name + + src/vtegtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d2e38f44ec644f94e79f6aa923da5b57601a47df +Author: Christian Persch +Date: 2017-04-25 23:06:13 +0200 + + pty: spawn: Always fill in the GError on failure + + src/pty.cc | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +commit 92da93ab5aa8ee32335dfb14aacd3597823a103f +Author: Christian Persch +Date: 2017-04-25 12:53:14 +0200 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a79378a2ef0c748f3ba2c2750c659a73be8fcc37 (tag: 0.49.1) +Author: Christian Persch +Date: 2017-04-25 12:45:30 +0200 + + Version 0.49.1 + + NEWS | 5 +++++ + configure.ac | 2 +- + 2 files changed, 6 insertions(+), 1 deletion(-) + +commit c9e7cbabfe2fd682a80dd8938c317e7aed1195f4 +Author: Egmont Koblinger +Date: 2017-04-25 01:17:11 +0200 + + widget,emulation: Add support for OSC 8 hyperlinks (HTML-like anchors) + + The escape sequences + OSC 8 ; params ; URI BEL + OSC 8 ; params ; URI ST + turn subsequent characters into an HTML-like anchor to the given address. + Terminate the hyperlink with the same escape sequence with an empty URI. + + Params is an optional colon-separated list of key=value assignments. Cells + having the same URI and "id" parameter, or cells lacking an "id" that were + printed in a single OSC 8 run are underlined together on mouseover. + + For further details, see + https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda. + + https://bugzilla.gnome.org/show_bug.cgi?id=779734 + + bindings/vala/app.vala | 7 + + doc/reference/vte-docs.xml | 4 + + doc/reference/vte-sections.txt | 3 + + perf/hyperlink-demo.txt | 95 ++++++++++ + src/debug.c | 3 +- + src/debug.h | 3 +- + src/marshal.list | 1 + + src/ring.cc | 388 ++++++++++++++++++++++++++++++++++++++--- + src/ring.h | 32 +++- + src/vte.cc | 281 +++++++++++++++++++++++++++-- + src/vte/vteterminal.h | 10 ++ + src/vteapp.c | 19 +- + src/vtedefines.hh | 30 ++++ + src/vtegtk.cc | 121 +++++++++++++ + src/vtegtk.hh | 3 + + src/vteinternal.hh | 19 +- + src/vterowdata.h | 57 +++++- + src/vteseq.cc | 114 +++++++++++- + 18 files changed, 1132 insertions(+), 58 deletions(-) + +commit 83674b1b09d0ee695d0577e86849d42f82ab5942 +Author: Egmont Koblinger +Date: 2017-04-25 01:11:10 +0200 + + ring: Invert colors for the stream's cells if debugging the ring + + If debugging the ring (or soon the hyperlink), make cells that are already written + to the stream appear with reverse colors. This is so that the boundary is more + prominent because this boundary is a potential source of problems. + + src/ring.cc | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit ca7f577a8ff92804d087145a1efad3fb6be2fefc +Author: Egmont Koblinger +Date: 2017-04-24 13:48:55 +0200 + + ring: Tiny code cleanup: maintain GString integrity + + src/ring.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a26a60b8e564968b61716f0d2e52e17cd9362413 +Author: Egmont Koblinger +Date: 2017-04-23 23:57:57 +0200 + + emulation: Disregard bce only when autowrapping to the new line + + Apply bce (background color erase) on a line that newly appears due to an + explicit escape sequence, but not when the text overflows to the next line. + + This improves the fix from commit 18171bcfeaf8f3bf4bcb8a04dfcff916a3fbc40b + and fixes the le editor. + + https://bugzilla.gnome.org/show_bug.cgi?id=754596#c15 + + src/vte.cc | 13 +++++++------ + src/vteinternal.hh | 2 +- + src/vteseq.cc | 4 ++-- + 3 files changed, 10 insertions(+), 9 deletions(-) + +commit 8e670e32809911094d8fd1c127d80115dce7fcc7 +Author: Behdad Esfahbod +Date: 2017-04-18 18:18:05 -0700 + + Remove custom definition of howmany() + + vtedraw.cc has been using it off of sys/param.h just fine. + + src/vte.cc | 5 +---- + src/vtedraw.cc | 2 +- + 2 files changed, 2 insertions(+), 5 deletions(-) + +commit 9f292551493cd7ee0473ebd1de4d0d360771f6a1 +Author: Yuras Shumovich +Date: 2017-04-18 09:36:45 +0000 + + Update Belarusian translation + + (cherry picked from commit 57fa36fa775a8e1fac1aec35c4cb1bef92fc2da8) + + po/be.po | 107 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 50 insertions(+), 57 deletions(-) + +commit 776823da23b81b70e430c494bb66b54954c42d7b +Author: Egmont Koblinger +Date: 2017-04-16 23:08:37 +0200 + + widget: Clean up the mouse pointer displaying logic + + https://bugzilla.gnome.org/show_bug.cgi?id=780785 + https://bugzilla.gnome.org/show_bug.cgi?id=762981 + + src/vte.cc | 58 ++++++++++++++++++++++++++++++------------------------ + src/vteinternal.hh | 7 +++++-- + src/vteseq.cc | 4 ++-- + 3 files changed, 39 insertions(+), 30 deletions(-) + +commit 5189b676dff420f53f3ddf7e9b4d7aeee64175d3 +Author: Egmont Koblinger +Date: 2017-04-16 22:01:39 +0200 + + widget: Add more xkb layout switching codes to the list of modifiers + + https://bugzilla.gnome.org/show_bug.cgi?id=781130 + + src/keymap.cc | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 279c8d5d256ec7b7cbefb7250c665e3ac23a5d4a +Author: Egmont Koblinger +Date: 2017-04-14 23:55:32 +0200 + + widget: Remove the VteIntCell and VteIntCellAttr unions + + https://bugzilla.gnome.org/show_bug.cgi?id=779734#c57 + + src/ring.cc | 26 +++++++++++++------------- + src/ring.h | 4 ++-- + src/vte.cc | 10 +++++----- + src/vterowdata.h | 45 ++++++++++++++------------------------------- + src/vteseq.cc | 4 ++-- + 5 files changed, 36 insertions(+), 53 deletions(-) + +commit bf18bfa791936609b3c5315e928f863ecf2319ff +Author: Egmont Koblinger +Date: 2017-04-13 11:04:54 +0200 + + widget: Support italic in HTML copy-paste target + + src/vte.cc | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 6b87524db415f6bb6ee760555986d6c17c0dc4ce +Author: gogo +Date: 2017-04-11 16:46:42 +0000 + + Update Croatian translation + + (cherry picked from commit 837cce9ced6bfe317cb97aeca171001da92cb3a1) + + po/hr.po | 143 +++++++++++++++++++++++++++------------------------------------ + 1 file changed, 60 insertions(+), 83 deletions(-) + +commit cd8c8b30241b0d357bcdf72256102d0afcc350b6 +Author: Egmont Koblinger +Date: 2017-04-07 01:51:14 +0200 + + emulation: Swallow OSC 8 + + Accept OSC 8 but make it a no-op, in preparation for the forthcoming + hyperlink feature. + + https://bugzilla.gnome.org/show_bug.cgi?id=779734 + + src/caps.cc | 2 ++ + src/vteseq-n.gperf | 1 + + src/vteseq.cc | 6 ++++++ + 3 files changed, 9 insertions(+) + +commit f7e3c8ad342c4965d433bf3b05f418b9e984aa1f +Author: Christian Persch +Date: 2017-03-28 22:58:26 +0200 + + spawn: async: Check for nullptr before unreffing + + This needs to handle a null terminal. Improves the fix from + commit 8ad57f190f33c41b1bc9051e919844a294feada9. + + src/vtegtk.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 8ad57f190f33c41b1bc9051e919844a294feada9 +Author: Christian Persch +Date: 2017-03-28 22:51:45 +0200 + + spawn: async: Release reference to VteTerminal + + https://bugzilla.gnome.org/show_bug.cgi?id=780663 + + src/vtegtk.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 9b1d77603464362b7ee90a6b5ac285170359b255 +Author: Egmont Koblinger +Date: 2017-03-22 21:55:18 +0100 + + vteapp: Remove an unused variable + + src/vteapp.c | 4 ---- + 1 file changed, 4 deletions(-) + +commit a7d534ac6135fa303f899a9e13483fbe24d1a679 +Author: Christian Persch +Date: 2017-03-21 18:57:51 +0100 + + build: Disable vala for distcheck + + Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 03b1a9271df6a27b43f05b1d9a5591a8bb10dde8 +Author: Christian Persch +Date: 2017-03-21 09:37:18 +0100 + + build: Revert "build: Fix building the vala test app with builddir != srcdir" + + This reverts commit 29fb71d3e6ba46e3539a2e0b755b0c7bb1c74670. + + bindings/vala/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ccd5023b65ff37936a44a765ba3abd189596a6b3 +Author: Egmont Koblinger +Date: 2017-03-20 22:33:33 +0100 + + emulation: Character deletion switches to hard line ending + + https://bugzilla.gnome.org/show_bug.cgi?id=780011 + + src/vteseq.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 8e8f8417e88cf102f7b958418ca6a1af7a21db09 +Author: Christian Persch +Date: 2017-03-20 21:57:58 +0100 + + Post branch version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5f536e5de58a3f7aa50aa60ce525139b6b50aa38 (tag: 0.48.0) +Author: Christian Persch +Date: 2017-03-20 21:56:32 +0100 + + Version 0.48.0 + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 392e68ab37dddaccd9d5c2e215129536dd531804 +Author: Christian Persch +Date: 2017-03-20 21:56:32 +0100 + + build: Silence a compiler warning + + -Wmaybe-uninitialized erroneously complains about start_time. + + src/vtespawn.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f83add591aa100e923f96c7d350ad93060c8805a +Author: Christian Persch +Date: 2017-03-20 21:56:32 +0100 + + build: Fix builddir != srcdir build of check programmes + + src/Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 29fb71d3e6ba46e3539a2e0b755b0c7bb1c74670 +Author: Christian Persch +Date: 2017-03-20 21:56:32 +0100 + + build: Fix building the vala test app with builddir != srcdir + + The vala automake integration really can't cope with builddir != srcdir, + so explicitly use an absolute path to the generated vte vapi file using + $(abs_top_builddir). + + https://bugzilla.gnome.org/show_bug.cgi?id=780162 + + bindings/vala/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3e556b57b75e33e0249d94aaf881ea201312b3c0 +Author: Christian Persch +Date: 2017-03-20 21:56:32 +0100 + + build: Don't dist generated sources + + Instead of distributing vteseq-list.h and vteseq-n.cc, just generate + them at build time. + + https://bugzilla.gnome.org/show_bug.cgi?id=780163 + + configure.ac | 8 ++++++++ + src/Makefile.am | 19 +++++++++++++------ + 2 files changed, 21 insertions(+), 6 deletions(-) + +commit f078b6b65223025d7504d0895e66c6e34f1f5a65 +Author: Christian Persch +Date: 2017-03-20 21:56:32 +0100 + + build: Make sure builddir comes before srcdir + + src/Makefile.am | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +commit a31a41d2a93ef45c3940d714f82f58c6b3f9d7d8 +Author: Egmont Koblinger +Date: 2017-03-16 22:07:40 +0100 + + build: Fix compilation of unittests + + https://bugzilla.gnome.org/show_bug.cgi?id=780146 + + src/vteconv.cc | 2 +- + src/vtetypes.cc | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 221aae59c552fad873977b8796603331ba85f30f +Author: Rico Tzschichholz +Date: 2017-03-12 18:41:56 +0000 + + bindings/vala/Makefile.am: Fix vala vapi generation + + Signed-off-by: Javier Jardón + + bindings/vala/Makefile.am | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +commit 450f6b7db5ae9a027aae56c173aed83f8e11585b +Author: GNOME Translation Robot +Date: 2017-03-07 11:52:12 +0000 + + Update Scottish Gaelic translation + + (cherry picked from commit 88ff20cf8aa8252c0bdf6312195331fed5794486) + + po/gd.po | 136 ++++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 65 insertions(+), 71 deletions(-) + +commit f205002af6f162f7850a55c40df7bb19f87f80f3 +Author: Cédric Valmary +Date: 2017-03-06 17:40:37 +0000 + + Update Occitan translation + + po/oc.po | 24 +++++++++++++----------- + 1 file changed, 13 insertions(+), 11 deletions(-) + +commit f54c2ab018fb1855d1cc64b131873967c76019fb +Author: Sveinn í Felli +Date: 2017-03-01 11:46:29 +0000 + + Update Icelandic translation + + (cherry picked from commit 6beb22d9d03bdcf3889832b60b591319dad7b626) + + po/is.po | 94 +++++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 45 insertions(+), 49 deletions(-) + +commit 0e91d4ac1accd2c9c58ddc8497e7d268756cc37c +Author: Chao-Hsiung Liao +Date: 2017-02-28 06:44:40 +0000 + + Update Chinese (Taiwan) translation + + po/zh_TW.po | 116 +++++++++++++++++++++++++++--------------------------------- + 1 file changed, 53 insertions(+), 63 deletions(-) + +commit 9ca6db26ee94c63baa1476d924186ad078bf7f84 +Author: Emmanuele Bassi +Date: 2017-02-17 13:46:43 +0000 + + gir: Look in the right path for vtetypebuiltins.cc + + The vtetypebuiltins.cc file is generated, so it can only be found in the + build directory, not in the source directory. + + This fixes non-srcdir builds like GNOME Continuous. + + https://bugzilla.gnome.org/show_bug.cgi?id=778832 + + bindings/gir/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3dc55c48ab97825f26585e25fd37779a7bb1fc8f +Author: Egmont Koblinger +Date: 2017-02-14 21:59:36 +0100 + + stream: Use explicit_bzero() on encryption keys if available + + src/vtestream-file.h | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +commit d74609f0adfdd6bc17302a8865d70ff12d5e0497 +Author: Christian Persch +Date: 2017-02-14 19:52:25 +0100 + + build: Check for explicit_bzero() + + configure.ac | 1 + + 1 file changed, 1 insertion(+) + +commit 4c88ec5c60dfa36c676b4a5044e4c146952f816e +Author: Christian Persch +Date: 2017-02-13 21:04:25 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fc7fec49e19fa93b288674a937f04dd6709cb773 (tag: 0.47.90) +Author: Christian Persch +Date: 2017-02-13 21:03:53 +0100 + + Version 0.47.90 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 22e448d8fbdd900ba32ee73f8ebb595fb0a15747 +Author: Christian Persch +Date: 2017-02-13 21:02:56 +0100 + + build: Revert erroneous commit + + This reverts commit 95f29c5b901150e5f59aa439138a879fb2b368e3. + + src/Makefile.am | 2 +- + src/vteapp.cc | 1292 ------------------------------------------------------- + 2 files changed, 1 insertion(+), 1293 deletions(-) + +commit f6efdca3f133bae951fe04e1e958c98a1ff2c662 +Author: Christian Persch +Date: 2017-02-13 11:54:15 +0100 + + build: Hint at --disable-{introspection,vala} on error + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 95f29c5b901150e5f59aa439138a879fb2b368e3 +Author: Christian Persch +Date: 2017-02-12 20:05:39 +0100 + + unf + + src/Makefile.am | 2 +- + src/vteapp.cc | 1292 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 1293 insertions(+), 1 deletion(-) + +commit 2d04ed4c5de05937022940c1d5ef0d4465b47595 +Author: Christian Persch +Date: 2017-02-12 20:10:06 +0100 + + build: Try to fix configure without vala installed + + configure.ac | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit d82fc703c83e1759e73d12273ecf70c13bb5639e +Author: Christian Persch +Date: 2017-02-12 18:32:42 +0100 + + emulation: Reset should not switch encoding + + https://bugzilla.gnome.org/show_bug.cgi?id=777747 + + src/vte.cc | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +commit 6c3261f2a3cfdfa3e62f9c1515a2065b168e0f57 +Author: Christian Persch +Date: 2017-02-12 16:22:12 +0100 + + lib: Deprecate vte_terminal_spawn_sync + + Now that async spawning is working, deprecate the old spawning API. + + doc/reference/vte-sections.txt | 2 +- + src/vte/vtedeprecated.h | 14 ++++++++++++++ + src/vte/vteterminal.h | 13 ------------- + src/vtegtk.cc | 2 ++ + 4 files changed, 17 insertions(+), 14 deletions(-) + +commit a5de10b5b558f1e73b81b8f52b468115b33053f3 +Author: Piotr Drąg +Date: 2017-02-12 13:51:29 +0100 + + Update POTFILES.skip + + po/POTFILES.skip | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 0d4422a1b448f68334229f580ada5cad4ec0b013 +Author: Christian Persch +Date: 2017-02-11 21:49:22 +0100 + + m4: Update macros from upstream + + m4/ax_cxx_compile_stdcxx.m4 | 500 ++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 462 insertions(+), 38 deletions(-) + +commit f0691d3e847058c181280670b477e61142a10c50 +Author: Christian Persch +Date: 2017-02-11 21:30:21 +0100 + + bindings: Remove gir and vala bindings to their own directory + + Makefile.am | 2 +- + bindings/Makefile.am | 13 ++++ + bindings/gir/Makefile.am | 34 ++++++++ + bindings/vala/Makefile.am | 101 ++++++++++++++++++++++++ + {src => bindings/vala}/app.gresource.xml | 0 + {src => bindings/vala}/app.ui | 0 + {src => bindings/vala}/app.vala | 0 + {src => bindings/vala}/config.vapi | 0 + {src => bindings/vala}/search-popover.ui | 0 + configure.ac | 16 +++- + po/POTFILES.skip | 2 +- + src/Makefile.am | 130 ------------------------------- + src/vte/vtedeprecated.h | 3 + + 13 files changed, 167 insertions(+), 134 deletions(-) + +commit cb947de6621ffbfb32971968f3dbcd6b1e511073 +Author: Christian Persch +Date: 2017-02-05 21:01:27 +0100 + + build: Fix option name + + The one-dash version works too, but two-dash is correct. + + doc/reference/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 538e6a4c7bf67aac7cad9a3b3fe7edef97680429 +Author: Christian Persch +Date: 2017-02-05 20:35:47 +0100 + + docs: boxes: Add some more tests + + Add shades test from bug #778122, and flesh out the diagnoals section. + + https://bugzilla.gnome.org/show_bug.cgi?id=778122 + + doc/boxes.txt | 19 +++++++++++++++++-- + 1 file changed, 17 insertions(+), 2 deletions(-) + +commit 56615fe40b9572a759158c41792050d0dab19272 +Author: Christian Persch +Date: 2017-02-04 00:00:43 +0100 + + pty: spawn: Remove some unused code + + src/vtespawn.cc | 142 ++++++++------------------------------------------------ + 1 file changed, 20 insertions(+), 122 deletions(-) + +commit 048195077cee8f315d58fb4b059422cecd317f4a +Author: Christian Persch +Date: 2017-02-03 21:16:16 +0100 + + pty: spawn: Work around g_spawn_async non-cancellability + + Until glib gets a fully cancelleable spawning API (either for g_spawn_* or + GSubprocess), just use a trimmed-down copy of gspawn.c with cancellation + added in. + + https://bugzilla.gnome.org/show_bug.cgi?id=772354 + + configure.ac | 5 + + po/POTFILES.skip | 1 + + src/Makefile.am | 2 + + src/pty.cc | 44 +- + src/vtespawn.cc | 1261 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vtespawn.hh | 48 +++ + 6 files changed, 1345 insertions(+), 16 deletions(-) + +commit 1226f58cd97aa06f0ce58791153ca1f58e89658a +Author: Christian Persch +Date: 2017-01-29 17:21:03 +0100 + + emulation: Try to work with newer gperf + + Use language=C++ in gperf. + + https://bugzilla.gnome.org/show_bug.cgi?id=777904 + + src/vteseq-n.gperf | 7 ++++--- + src/vteseq.cc | 11 +++-------- + 2 files changed, 7 insertions(+), 11 deletions(-) + +commit 906f3b65ddb638417093a337d3e5f952adf4df2b +Author: Christian Persch +Date: 2017-01-08 13:39:24 +0100 + + pty: Fix some leaks + + Async spawning was leaking the VtePty ref, and the closure data. + + https://bugzilla.gnome.org/show_bug.cgi?id=777007 + + src/pty.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit b9b928a84559ea9eab5f415513d374f067b9847a +Author: Christian Persch +Date: 2017-01-08 13:39:24 +0100 + + lib: Ressurrect the reaper + + Bring back the reaper as an internal-only thing. This makes + for cleaner code when we need to reap a child process without + a VteTerminalPrivate around. + + This reverts commit de112fd8039ab6244e2cf53dbacdfc4a49504c48. + + src/Makefile.am | 14 ++++ + src/reaper.cc | 227 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/reaper.hh | 30 +++++++ + src/vte.cc | 60 ++++++++------ + src/vtegtk.cc | 12 ++- + src/vteinternal.hh | 3 +- + 6 files changed, 318 insertions(+), 28 deletions(-) + +commit b517d20379c7a665e897f925ca3ecb7b778364f2 +Author: Christian Persch +Date: 2016-11-25 23:15:46 +0100 + + pty: Do not pass G_SPAWN_CHILD_INHERITS_STDIN + + This makes no sense at all, since we redirect stdin to the PTY anyway. + Fixes a FIXME! + + src/pty.cc | 8 ++------ + src/vte.cc | 3 --- + src/vtegtk.cc | 2 -- + 3 files changed, 2 insertions(+), 11 deletions(-) + +commit a8924d88f23c37322bfc20f2ef08949c9c27d4cb +Author: Christian Persch +Date: 2016-11-25 23:15:46 +0100 + + lib: Check out params before setting them + + They are allowed to be NULL, so only set them when non-NULL. + + src/pty.cc | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +commit f30eef1029cd7170d740d69c3693c7e8267a7037 +Author: Christian Persch +Date: 2016-11-25 23:15:46 +0100 + + !fixup: lib: Add async spawning + + Remove forgotten added include. + + src/pty.cc | 1 - + 1 file changed, 1 deletion(-) + +commit fb296872feb8e4104760b54c31d83ff75412bc21 +Author: Christian Persch +Date: 2016-11-25 22:07:52 +0100 + + lib: Add async spawning + + Add vte_pty_spawn_async/finish for async spawning of a + child process on a VtePty, and a vte_terminal_spawn_async + convenience function that wraps creating the PTY and spawning + the child process, and can cope with the terminal being + destroyed between starting the spawning and the operation + being finished. + + This is a partial solution to bug 772354; a full solution + will require glib changes. + + https://bugzilla.gnome.org/show_bug.cgi?id=772354 + + doc/reference/vte-docs.xml | 5 +- + doc/reference/vte-sections.txt | 6 ++ + src/pty.cc | 181 ++++++++++++++++++++++++++++++++++++++++ + src/vte.cc | 1 + + src/vte/vtepty.h | 20 +++++ + src/vte/vteterminal.h | 20 +++++ + src/vteapp.c | 43 ++++++---- + src/vtegtk.cc | 184 +++++++++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 15 ++++ + src/vtepty-private.h | 2 + + 10 files changed, 460 insertions(+), 17 deletions(-) + +commit 710ab416df324ab8366d04d818de13101e21e161 +Author: YunQiang Su +Date: 2016-10-18 17:19:19 +0800 + + Update zh_CN translation + + po/zh_CN.po | 116 +++++++++++++++++++++++++++--------------------------------- + 1 file changed, 53 insertions(+), 63 deletions(-) + +commit 6212ed96e28bb38d48494778c60875886a4e437c +Author: Kjartan Maraas +Date: 2016-10-16 12:39:15 +0200 + + Updated Norwegian bokmål translation from Kjartan Maraas. + + po/nb.po | 78 +++++++++++++--------------------------------------------------- + 1 file changed, 15 insertions(+), 63 deletions(-) + +commit 42e3196a63b8ac3c5352986dec7d768dedaa2c0f +Author: Christian Persch +Date: 2016-10-12 21:24:06 +0200 + + build: Add --with-gtk configure switch + + Add --with-gtk configure switch to allow building with gtk+ 3.9?. + Tested only in the --with-gtk=3.0 configuration. + + Makefile.am | 2 +- + configure.ac | 73 +++++++++++++++++++++++++++++++++++++++++++++--------------- + 2 files changed, 56 insertions(+), 19 deletions(-) + +commit b302921e33a9771f52c66ecb2421c2b4e9bd2cd6 +Author: Gianvito Cavasoli +Date: 2016-10-06 11:54:58 +0000 + + Updated Italian translation + (cherry picked from commit 01a026676864c818f4fd7c3bda71f78f548a85ec) + + po/it.po | 71 ++++++++++++++++------------------------------------------------ + 1 file changed, 18 insertions(+), 53 deletions(-) + +commit bcc7bdbed0e2897b67333685cdf8771d832e01d1 +Author: Egmont Koblinger +Date: 2016-10-03 21:48:16 +0200 + + debug: Fix a typo + + src/pty.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit dc70d3aa143be15fce219d5294ea45bbe35e6c0e +Author: Christian Persch +Date: 2016-09-27 20:25:26 +0200 + + build: Require vala 0.24 + + https://bugzilla.gnome.org/show_bug.cgi?id=772064 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ff5c8bde995f20c45125cd3ec1736cf7338a02a9 +Author: gogo +Date: 2016-09-24 11:09:30 +0000 + + Updated Croatian translation + (cherry picked from commit 65fa76b6e2a4c4845f2fc67283b94c65ee64d1da) + + po/hr.po | 83 +++++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 40 insertions(+), 43 deletions(-) + +commit f6347b0ec91806d97c935eed8bc70fccc984788d +Author: Christian Persch +Date: 2016-09-23 22:48:24 +0200 + + doap: Cleanup + + Remove inactive maintainers (Behdad, Chris). + Remove obsolete MAINTAINERS file. + + MAINTAINERS | 7 ------- + Makefile.am | 1 - + vte.doap | 16 ++-------------- + 3 files changed, 2 insertions(+), 22 deletions(-) + +commit cefec54b93664cff61ce5a6d5d2be03f51a6c127 +Author: Inaki Larranaga Murgoitio +Date: 2016-09-19 13:55:11 +0200 + + Update Basque language + + po/eu.po | 128 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 59 insertions(+), 69 deletions(-) + +commit 774cfe534c59f7f1d7ed8f6a1ee4cf05a18a4ea4 +Author: David King +Date: 2016-09-18 10:26:17 +0200 + + Update British English translation + + po/en_GB.po | 99 ++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 45 insertions(+), 54 deletions(-) + +commit d4d201f80ca1f401e39daab4c8e6bd0836e02696 +Author: Christian Persch +Date: 2016-09-17 20:33:47 +0200 + + widget: Fix backward search + + Search was getting two lines of text at once, breaking backward search. + Problem was introduced in commit d046ae112f5ca93378c2146c1ea239bc63778364. + + https://bugzilla.gnome.org/show_bug.cgi?id=769400 + + src/vte.cc | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit 6699fb33fad4db2acc2bf1f18512b698b8159f81 +Author: Christian Persch +Date: 2016-09-17 20:33:47 +0200 + + app: Fix button icon name + + src/search-popover.ui | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a2e7874286b885d8bb678f0ffad496cddc441788 +Author: Christian Persch +Date: 2016-09-17 20:33:47 +0200 + + app: Fix search button sensitivity + + src/app.vala | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +commit 2b93575d98ccc5dbc932cf0c49be36fa33e61622 +Author: Christian Persch +Date: 2016-09-17 20:33:47 +0200 + + app: Add MULTILINE flag for regex + + src/app.vala | 14 +++----------- + src/vteapp.c | 4 ++-- + 2 files changed, 5 insertions(+), 13 deletions(-) + +commit d42993032c109cd717d93a631fa6c2855789dd89 +Author: Christian Persch +Date: 2016-09-17 20:33:47 +0200 + + Post branch version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6725adabc464654f0f225f6251116bdbadf0cbc6 +Author: Stas Solovey +Date: 2016-09-16 09:26:37 +0000 + + Updated Russian translation + + po/ru.po | 134 ++++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 64 insertions(+), 70 deletions(-) + +commit 46f698b6d54bb42923f85d2b32e1149f78fdc3c0 +Author: Arash Mousavi +Date: 2016-09-13 14:55:58 +0430 + + [l10n] update Persian translations + + po/fa.po | 96 +++++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 47 insertions(+), 49 deletions(-) + +commit 2e9d56251a7b4ce95efcdfbf422a50d4ffba9eae +Author: Ask Hjorth Larsen +Date: 2016-09-13 02:01:48 +0200 + + Updated Danish translation + + po/da.po | 119 ++++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 56 insertions(+), 63 deletions(-) + +commit 202427f931b30f0c41583edbf2dd94831e5278f2 +Author: Christian Persch +Date: 2016-09-12 21:06:17 +0200 + + Post release version bump + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 534fbf28fc6fc988959489ac1da635945dd63c6d (tag: 0.45.92) +Author: Christian Persch +Date: 2016-09-12 21:05:10 +0200 + + Version 0.45.92 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bc359ee16ab371ad5b2cf5f06389610031f8c3bc +Author: Tom Tryfonidis +Date: 2016-09-11 21:19:58 +0000 + + Updated Greek translation + + po/el.po | 122 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 57 insertions(+), 65 deletions(-) + +commit 791a4337cc74ce21db4f76e428e1190e0bb9815a +Author: Egmont Koblinger +Date: 2016-09-11 21:09:22 +0200 + + widget: Fix OSC 112 (reset cursor color) + + This was accidentally broken in commit 86f206b3ec01033c07a76cf949276058489b53ee. + + https://bugzilla.gnome.org/show_bug.cgi?id=771256 + + src/caps.cc | 2 +- + src/vteseq-n.gperf | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 0caaddb831e24d8b2cbc997e29a0be8945fb5b8e +Author: Fran Dieguez +Date: 2016-09-09 00:03:10 +0200 + + Updated Galician translations + + po/gl.po | 128 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 59 insertions(+), 69 deletions(-) + +commit 0381d1a2cb0e2cb4731fdf7b39d96d5d49a4be54 +Author: Rūdolfs Mazurs +Date: 2016-09-08 21:51:01 +0300 + + Update Latvian translation + + po/lv.po | 124 ++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 55 insertions(+), 69 deletions(-) + +commit 8d4195edd3af99237a1220008ea4a8d957380f7d +Author: Anders Jonsson +Date: 2016-09-06 18:25:45 +0000 + + Updated Swedish translation + + po/sv.po | 123 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 56 insertions(+), 67 deletions(-) + +commit b00caee60a757d354bf8d51678669c2eb426e086 +Author: Christian Persch +Date: 2016-09-04 15:18:22 +0200 + + regex: Warn if MULTILINE flag it not used + + Due to the way that vte implements the regex search, using + PCRE2_MULTILINE when creating the regex is required. Warn + if passing a regex that doesn't have it. + + src/vtegtk.cc | 8 ++++++-- + src/vteregex.cc | 16 ++++++++++++++++ + src/vteregexinternal.hh | 2 ++ + 3 files changed, 24 insertions(+), 2 deletions(-) + +commit 4c0d8533051fb80999e886884f7fb2729c1a0c58 +Author: Christian Persch +Date: 2016-09-04 14:36:19 +0200 + + regex: Always add MULTILINE flag when translating from GRegex + + Instead of warning if the MULTILINE flag is not set in the GRegex, + just add it, since we're translating the regex to PCRE2 anyway. + + https://bugzilla.gnome.org/show_bug.cgi?id=770718 + + src/vtegtk.cc | 1 - + src/vteregex.cc | 3 ++- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 298cfcbc643449c9617843e1e8937ab11e6cf3ce +Author: Christian Persch +Date: 2016-09-04 12:45:43 +0200 + + docs: Fix missing descriptions + + Need to specify the source code file extensions manually in order + for gtk-doc to pick up our .cc files. + + https://bugzilla.gnome.org/show_bug.cgi?id=770114 + + doc/reference/Makefile.am | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit cd83f79e9983b959c69790044ae8108c588b31fb +Author: Baurzhan Muftakhidinov +Date: 2016-09-04 04:07:44 +0000 + + Updated Kazakh translation + + po/kk.po | 118 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 55 insertions(+), 63 deletions(-) + +commit e2636596a5f6da194c3c9a3c46401b2baa0fce68 +Author: Changwoo Ryu +Date: 2016-09-03 14:12:20 +0000 + + Updated Korean translation + + po/ko.po | 118 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 54 insertions(+), 64 deletions(-) + +commit 297b0055c896f8f8f274a20dd524da3803c96497 +Author: Claude Paroz +Date: 2016-08-30 08:55:34 +0200 + + Updated French translation + + po/fr.po | 82 ++++++++++++---------------------------------------------------- + 1 file changed, 15 insertions(+), 67 deletions(-) + +commit 1627c4211816be258829308a85f4a152a44665f7 +Author: Мирослав Николић +Date: 2016-08-28 11:37:41 +0200 + + Updated Serbian translation + + po/sr.po | 129 ++++++++++++++++++++++++++------------------------------ + po/sr@latin.po | 131 +++++++++++++++++++++++++++------------------------------ + 2 files changed, 121 insertions(+), 139 deletions(-) + +commit 2796f97eca37613128ee2a4c71e85cad2bfea643 +Author: Eric R. Schulz +Date: 2016-08-27 00:55:11 +0200 + + widget: Fix memory leak in _vte_file_stream_init() + + g_object_new() calls _vte_boa_init(), so calling the init twice leaks memory. + + The bug was introduced in commit ab8b3a3465625e08e4aa5657d13d54b6818a231a. + + https://bugzilla.gnome.org/show_bug.cgi?id=770038 + + src/vtestream-file.h | 1 - + 1 file changed, 1 deletion(-) + +commit 7f09dc6a4bef5f4eb4ffc61d204575f543b9a8d8 +Author: Egmont Koblinger +Date: 2016-08-26 00:54:12 +0200 + + docs: Fix minor typo + + src/vtegtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit aede95e9c7d3abdb174cf9569d3809e62a09d55a +Author: Matej Urbančič +Date: 2016-08-25 22:55:06 +0200 + + Updated Slovenian translation + + po/sl.po | 126 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 58 insertions(+), 68 deletions(-) + +commit b83f44bfa10fad716c2e43aade20c207fe4a7179 +Author: Balázs Úr +Date: 2016-08-19 21:47:56 +0000 + + Updated Hungarian translation + + po/hu.po | 95 +++++++++++----------------------------------------------------- + 1 file changed, 16 insertions(+), 79 deletions(-) + +commit 767974682a014c944d08b01767780dbd5b7754f1 +Author: Andika Triwidada +Date: 2016-08-18 04:51:31 +0000 + + Updated Indonesian translation + + po/id.po | 124 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 57 insertions(+), 67 deletions(-) + +commit 167f6607a779c9b57c0f856df244aa83aa8f2651 +Author: Eric R. Schulz +Date: 2016-08-17 16:12:42 +0200 + + widget: Fix refcount leak in child_watch_done + + VteTerminalPrivate::child_watch_done() was missing the g_object_unref() + corresponding to its g_object_ref() at the start. + + Since this function is only called from the callback of + g_child_watch_add_full(), and that callback already uses g_object_ref()/ + g_object_unref() around the call to VteTerminalPrivate::child_watch_done + to keep the VteTerminalPrivate in a death grip, just remove the extra + g_object_ref(). + + The bug was introduced in commit 50aee40af7d16c2bec82f4f8bcdd259b6913c541. + + https://bugzilla.gnome.org/show_bug.cgi?id=770036 + + src/vte.cc | 1 - + 1 file changed, 1 deletion(-) + +commit aecf940466a9b5b7b41ff4e094f567bced07d379 +Author: Piotr Drąg +Date: 2016-08-16 09:27:16 +0200 + + Updated Polish translation + + po/pl.po | 86 ++++++++++++++++++---------------------------------------------- + 1 file changed, 24 insertions(+), 62 deletions(-) + +commit 50d67b8249a77c0f0351a63beef193566612ab50 +Author: Christian Persch +Date: 2016-08-15 20:23:24 +0200 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 18c271221d86f35940fee9ef6be88d637da781dd (tag: 0.45.90) +Author: Christian Persch +Date: 2016-08-15 20:19:10 +0200 + + Version 0.45.90 + + NEWS | 6 ++++++ + configure.ac | 2 +- + 2 files changed, 7 insertions(+), 1 deletion(-) + +commit 28871b33b03d2f7e2df8c065189547add12f673d +Author: Christian Persch +Date: 2016-08-15 14:39:28 +0200 + + widget: gtk: Pass NULL for geometry widget + + Since gtk 3.20 the geometry hints are not applied if + the geometry widget passed is not NULL. + + This makes geometry a bit better, but still not right. Need + to bring over the fixed to gnome-terminal from bug 760944. + + src/vtegtk.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 51361d236afd98eeeddaab6f1169dcbc865c0360 +Author: Aurimas Černius +Date: 2016-08-14 21:34:11 +0300 + + Updated Lithuanian translation + + po/lt.po | 124 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 57 insertions(+), 67 deletions(-) + +commit 8115d0c169639b4005fec131ff6d5e4bedd5e25d +Author: Marek Černocký +Date: 2016-08-13 23:26:18 +0200 + + Updated Czech translation + + po/cs.po | 122 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 56 insertions(+), 66 deletions(-) + +commit 18fc1015f62b75765ba1269876f3d2e355cece7c +Author: Yosef Or Boczko +Date: 2016-08-09 20:40:03 +0300 + + Updated Hebrew translation + + po/he.po | 109 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 50 insertions(+), 59 deletions(-) + +commit 4003f01ef2e732ae313bcf870c5364cfa6cf372f +Author: Christian Persch +Date: 2016-08-04 17:51:44 +0200 + + regex: Require PCRE2 + + Drop --without-pcre2 and just require PCRE2 to be present. + + configure.ac | 23 +------- + src/Makefile.am | 3 - + src/app.vala | 28 ++------- + src/vte.cc | 153 ++++++++++++++++-------------------------------- + src/vteapp.c | 17 +----- + src/vtegtk.cc | 8 --- + src/vteinternal.hh | 17 +----- + src/vteregex.cc | 57 +----------------- + src/vteregexinternal.hh | 2 - + 9 files changed, 63 insertions(+), 245 deletions(-) + +commit 00f252725c1eb1c5dc65fd9901221523418e18be +Author: Christian Persch +Date: 2016-08-04 17:51:44 +0200 + + regex: Translate GRegex to PCRE2 + + Instead of duplicating all internal functions to deal with either + a PCRE2 regex or a GRegex, just translate the GRegex to PCRE2 in + the API entry points. + + src/vte.cc | 344 ++++-------------------------------------------- + src/vtegtk.cc | 72 ++++------ + src/vteinternal.hh | 42 +----- + src/vteregex.cc | 90 +++++++++++++ + src/vteregexinternal.hh | 6 + + 5 files changed, 149 insertions(+), 405 deletions(-) + +commit da6eb4f22a1ccc9ceb3dcbccf0ed397fb9e297e6 +Author: Piotr Drąg +Date: 2016-07-25 23:41:08 +0200 + + Add Language headers to po files + + Future versions of gettext will fail if this header is missing. + + po/am.po | 1 + + po/ang.po | 1 + + po/ar.po | 1 + + po/ast.po | 1 + + po/az.po | 1 + + po/be@latin.po | 1 + + po/bn.po | 1 + + po/bn_IN.po | 1 + + po/ca@valencia.po | 2 +- + po/cy.po | 1 + + po/dz.po | 1 + + po/en@shaw.po | 1 + + po/en_CA.po | 1 + + po/eo.po | 1 + + po/es.po | 2 +- + po/gu.po | 1 + + po/hi.po | 1 + + po/hr.po | 1 + + po/hu.po | 2 +- + po/ja.po | 1 + + po/ka.po | 1 + + po/kn.po | 1 + + po/ko.po | 2 +- + po/ku.po | 1 + + po/ky.po | 1 + + po/li.po | 1 + + po/lv.po | 1 + + po/mai.po | 1 + + po/mi.po | 1 + + po/mk.po | 1 + + po/ml.po | 1 + + po/mr.po | 1 + + po/ms.po | 1 + + po/nb.po | 2 +- + po/nds.po | 1 + + po/ne.po | 1 + + po/nn.po | 1 + + po/or.po | 1 + + po/rw.po | 1 + + po/si.po | 1 + + po/sl.po | 2 +- + po/sq.po | 1 + + po/sr@latin.po | 2 +- + po/ta.po | 1 + + po/te.po | 1 + + po/th.po | 1 + + po/ug.po | 1 + + po/uz@cyrillic.po | 1 + + po/vi.po | 1 + + po/wa.po | 1 + + po/xh.po | 1 + + po/zh_HK.po | 2 +- + 52 files changed, 52 insertions(+), 8 deletions(-) + +commit a8bfe9d843cc58d7cb41c874a66a693cc0ae662c +Author: Fabio Tomat +Date: 2016-07-25 10:07:46 +0000 + + Updated Friulian translation + + po/fur.po | 21 +++++++++++++++------ + 1 file changed, 15 insertions(+), 6 deletions(-) + +commit be0ae73fe58b9a3b37a0ca9568ac5999416552a2 +Author: Egmont Koblinger +Date: 2016-07-24 19:06:52 +0200 + + widget: Fix a memory leak in set_colors + + https://bugzilla.gnome.org/show_bug.cgi?id=768994 + + src/vtegtk.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 3c56e2cb170b7f5f085570f0f60ccc62bdc65700 +Author: Christian Persch +Date: 2016-07-04 21:26:50 +0200 + + emulation: Swallow iterm2 OSC 1337 + + Accept OSC 1337 but make it a no-op. + + When sshing to an osx host the iterm2 integration may be active, + causing the remote shell to emit iterm2 OSC 1337 sequences that + clutter the vte terminal since we don't ignore unknown sequences + (bug 403130). + + https://bugzilla.gnome.org/show_bug.cgi?id=403130 + + src/caps.cc | 2 ++ + src/vteseq-n.gperf | 1 + + src/vteseq.cc | 12 ++++++++++++ + 3 files changed, 15 insertions(+) + +commit 975a9436fe9f06c6e122c7f0c426f49277ea923d +Author: Mario Blättermann +Date: 2016-06-22 11:30:28 +0000 + + Updated German translation + + po/de.po | 129 +++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 63 insertions(+), 66 deletions(-) + +commit c36482e9c438d146cc733584b9cc8c710f7948cd +Author: Rafael Fontenelle +Date: 2016-06-13 23:19:45 +0000 + + Updated Brazilian Portuguese translation + + po/pt_BR.po | 127 +++++++++++++++++++++++++++++------------------------------- + 1 file changed, 61 insertions(+), 66 deletions(-) + +commit 5bc6b3f8d8e733c02bebb9da8090429fef2b2688 +Author: Simon McVittie +Date: 2016-05-23 10:42:41 +0100 + + widget: Fix get_preferred_height to use the correct padding + + The implementation of GtkWidgetClass:get_preferred_height by + mistake used the horizontal padding instead of the vertical padding. + + https://bugzilla.gnome.org/show_bug.cgi?id=760944 + + src/vte.cc | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit dff6ea72abd509e5ae132ff75b343402433b13ac +Author: Tiago Santos +Date: 2016-06-04 11:36:51 +0000 + + Updated Portuguese translation + + po/pt.po | 101 +++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 49 insertions(+), 52 deletions(-) + +commit 7b4cf2aac53e0e0daa4ff89fb2d1f30b90063148 +Author: Cédric Valmary +Date: 2016-05-30 19:46:22 +0000 + + Updated Occitan translation + + po/oc.po | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +commit c810e88839087d924d27f5aaef55126641cacf12 +Author: Daniel Mustieles +Date: 2016-05-30 19:22:38 +0200 + + Updated Spanish translation + + po/es.po | 115 ++++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 54 insertions(+), 61 deletions(-) + +commit 0cbdca11efab935f9edfc86b0a3811d1b2cc9e21 +Author: Muhammet Kara +Date: 2016-05-26 19:23:07 +0000 + + Updated Turkish translation + + po/tr.po | 99 +++++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 48 insertions(+), 51 deletions(-) + +commit 4a6e4a42ff511d768e3daba13ed44efc45ad0e51 +Author: Dušan Kazik +Date: 2016-05-22 09:57:06 +0000 + + Updated Slovak translation + + po/sk.po | 127 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 59 insertions(+), 68 deletions(-) + +commit a81a797b0cc75b1801fcda11f5d844962d4a0f6c +Author: Christian Persch +Date: 2016-05-16 10:25:30 +0200 + + terminal: Warn on terminal if compiled without GNUTLS + + src/vte.cc | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit cb7589ea01526ec696daae60c5ff8a96d00a73e4 +Author: Christian Persch +Date: 2016-05-16 10:25:29 +0200 + + api: Validate colour values + + Don't allow in a GdkRGBA whose components exceed the allowed range of 0..1. + + src/vtegtk.cc | 23 ++++++++++++++++++++++- + 1 file changed, 22 insertions(+), 1 deletion(-) + +commit 8c70f85361ddc54a61086929210add51dfc44da7 +Author: Christian Persch +Date: 2016-05-16 10:25:29 +0200 + + api: Don't process a reset when input is disabled + + With input disabled, only allow a reset when it comes from + the terminal, not via the API. + + src/vte.cc | 6 +++++- + src/vtegtk.cc | 2 +- + src/vteinternal.hh | 3 ++- + 3 files changed, 8 insertions(+), 3 deletions(-) + +commit 3da10648004c2d201d5bbea1d773c183984a6e39 +Author: Christian Persch +Date: 2016-05-16 09:33:18 +0200 + + test: Don't use IMMEDIATE resize mode for the window + + This makes testvte segfault on startup due to an infinite recursion + below gtk_window_size_allocate(). + + src/vteapp.c | 2 -- + 1 file changed, 2 deletions(-) + +commit c4c589fee91b889f398f1829beade82ff12a2e6e +Author: Egmont Koblinger +Date: 2016-05-11 07:54:00 +0200 + + widget: Don't initialize a variable twice + + src/vte.cc | 1 - + 1 file changed, 1 deletion(-) + +commit 47879674b97aa610174ce79e427a181ca23aad8d +Author: Christian Persch +Date: 2016-05-08 12:55:32 +0200 + + emulation: Swallow urxvt OSC 777 + + Accept OSC 777 but make it a no-op. + + Some distros patch their vte downstream with the rejected patch from + bug 711059, which leads to problems with these escape sequences being + shown on the terminal when using an unpatched upstream build of vte + but the system-installed patched vte.sh script, due to vte not + ignoring unknown escape sequences (bug 403130). + + https://bugzilla.gnome.org/show_bug.cgi?id=403130 + https://bugzilla.gnome.org/show_bug.cgi?id=711059 + + src/caps.cc | 2 ++ + src/vteseq-n.gperf | 1 + + src/vteseq.cc | 7 +++++++ + 3 files changed, 10 insertions(+) + +commit 2b05a52f318f3f9b10ef3784a18e69ba4f04d79e +Author: Alexander Maznev +Date: 2016-05-08 10:22:07 +0200 + + terminal: Fix search return value + + vte_terminal_search_find was always returning FALSE. + + https://bugzilla.gnome.org/show_bug.cgi?id=765328 + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d005d622f458f259919b35e448a985e2aabc7ecd +Author: Christian Persch +Date: 2016-05-08 08:59:09 +0200 + + terminal: Fix ::get_text start column not to be negative + + When the selection starts at the beginning of the line but + having been done by starting on the preceding line after the + end of text, the start column is -1, which would cause + ::get_text() to lose the first line of the selected text. + Regression from commit 3696348c0b9c7d60caf7302411ec4c0298f56e57. + + https://bugzilla.gnome.org/show_bug.cgi?id=765276 + + src/vte.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit 5b7ff132b16f9da882a2b359e68c40903a57b166 +Author: Christian Persch +Date: 2016-05-08 08:59:09 +0200 + + test: Typo fix + + src/vteapp.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2367a68928b85cf1724b84a36086d4e368eb0524 +Author: Cédric Valmary +Date: 2016-05-05 20:17:47 +0000 + + Updated Occitan translation + + po/oc.po | 95 ++++++++++++++++++++++++++++------------------------------------ + 1 file changed, 42 insertions(+), 53 deletions(-) + +commit fb3dd7cd9fb236f8e42e00bec84d64f832a9c3df +Author: Christian Persch +Date: 2016-04-24 13:08:13 +0200 + + build: Treat precious variables correctly + + Test if a precious variable is set already before overwriting it. + + configure.ac | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +commit ac9b60acf5b187987153aabfe7ed8e09350e123a +Author: Egmont Koblinger +Date: 2016-04-20 19:22:41 +0200 + + build: Drop the unused cp437.py script + + https://bugzilla.gnome.org/show_bug.cgi?id=765301 + + src/cp437.py | 9 --------- + 1 file changed, 9 deletions(-) + +commit 035f79c27f680c0e4920afa84a98772823bfaf20 +Author: Debarshi Ray +Date: 2016-04-18 16:11:02 +0200 + + Use my_object_get_instance_private, not G_TYPE_INSTANCE_GET_PRIVATE + + Both do the same thing, but G_TYPE_INSTANCE_GET_PRIVATE is a slower + version of my_object_get_instance_private. Since we are already using + G_ADD_PRIVATE, which generates my_object_get_instance_private, let's + just go for the faster alternative. + + https://bugzilla.gnome.org/show_bug.cgi?id=765210 + + src/vtegtk.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9069734acd66f4fcf28dfe140718a4e3357b9c75 +Author: Debarshi Ray +Date: 2016-04-18 16:40:09 +0200 + + Add autocleanups for all exported types + + https://bugzilla.gnome.org/show_bug.cgi?id=765217 + + src/vte/vtepty.h | 4 ++++ + src/vte/vteregex.h | 4 ++++ + src/vte/vteterminal.h | 4 ++++ + 3 files changed, 12 insertions(+) + +commit 6edda4d403067c2a8d2d8b5d59879e11fbbe92fd +Author: Debarshi Ray +Date: 2016-04-18 13:14:11 +0200 + + pty: Use G_ADD_PRIVATE instead of g_type_class_add_private + + https://bugzilla.gnome.org/show_bug.cgi?id=765210 + + src/pty.cc | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit bc72a5fbc474c0c48527c461cba04e0253a6478c +Author: Alberts Muktupāvels +Date: 2016-04-15 18:09:41 +0200 + + build: Fix the build when an older vte VAPI is present on the system + + Pass --disable-since-check to valac on vala >= 0.31. + + https://bugzilla.gnome.org/show_bug.cgi?id=762780 + + configure.ac | 3 +++ + src/Makefile.am | 4 ++++ + 2 files changed, 7 insertions(+) + +commit 4b2a92a4a7a8014dd9bb4cb7a05a50aa2bd626a8 +Author: Fabio Tomat +Date: 2016-04-07 22:59:21 +0000 + + Updated Friulian translation + (cherry picked from commit 7fa0c02dbae2b6d749e6867533794933eb0ffb10) + + po/fur.po | 75 ++++++++++++++++++++++----------------------------------------- + 1 file changed, 26 insertions(+), 49 deletions(-) + +commit 30a7c0b7f75fc72703e700838db1d831e90430c4 +Author: Egmont Koblinger +Date: 2016-04-06 10:55:57 +0200 + + emulation: Don't use smart tabs if the cells are already in use + + https://bugzilla.gnome.org/show_bug.cgi?id=764330#c3 + + src/vteseq.cc | 44 ++++++++++++++++---------------------------- + 1 file changed, 16 insertions(+), 28 deletions(-) + +commit f5452acf78a105466157a540beadd5dd2ced9efc +Author: Egmont Koblinger +Date: 2016-04-06 10:54:02 +0200 + + emulation: Fix Tab not to alter the background color + + https://bugzilla.gnome.org/show_bug.cgi?id=764330 + + src/vteseq.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e5a00b5b71194be9f2881dee67d82c308406dea7 +Author: Egmont Koblinger +Date: 2016-03-30 10:46:53 +0200 + + widget: Properly remove the cursor from its old position + + https://bugzilla.gnome.org/show_bug.cgi?id=764299 + + src/vte.cc | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit 8bc51bbfe464727d5fab8d6b5ef83087c286ba90 +Author: Christian Persch +Date: 2016-03-19 16:07:51 +0100 + + lib: Add missing include + + Should fix the build on build.g.o. + + src/vtegtk.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 4a05c4413419c2d4a8d9edc2da22ca1ff48680bb +Author: Christian Persch +Date: 2016-03-19 15:47:00 +0100 + + regex: Distinguish regex purposes + + doc/reference/vte-sections.txt | 3 +- + src/app.vala | 6 +-- + src/vte/vteregex.h | 14 ++++-- + src/vteapp.c | 8 ++-- + src/vtegtk.cc | 6 +++ + src/vteregex.cc | 98 +++++++++++++++++++++++++++++++++--------- + src/vteregexinternal.hh | 8 ++++ + 7 files changed, 111 insertions(+), 32 deletions(-) + +commit 0e8d3cb52be25a81060b5a8c0bb184ddf6139c81 +Author: Christian Persch +Date: 2016-03-14 18:07:35 +0100 + + widget: Call internal functions directly + + src/vte.cc | 69 ++++++++++++++++++++++++++++++------------------------ + src/vtegtk.cc | 10 ++++---- + src/vtegtk.hh | 4 ++-- + src/vteinternal.hh | 2 ++ + 4 files changed, 49 insertions(+), 36 deletions(-) + +commit fa008f96d9484204db73d2b500f22f47c247905e +Author: Christian Persch +Date: 2016-03-14 18:07:35 +0100 + + widget: Warn about CSS problem with upgrade to gtk 3.19 + + https://bugzilla.gnome.org/show_bug.cgi?id=763538 + + src/vtegtk.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 656530adcba25745e250de6d73ce40310c1c4d4c +Author: Takao Fujiwara +Date: 2016-03-14 18:07:35 +0100 + + widget: Move IM cursor to the right position in im_update_cursor() + + IM cursor is moved with pre-edit text. + + https://bugzilla.gnome.org/show_bug.cgi?id=756141 + + src/vte.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 659d64b76f89790eb4453effb9c31d66b4a119be +Author: Christian Persch +Date: 2016-03-04 17:59:32 +0100 + + build: Don't define GDK_MULTIHEAD_SAFE + + configure.ac | 2 -- + 1 file changed, 2 deletions(-) + +commit a633f57e05dc30f444c5407ecb30b1bd67754ff4 +Author: Egmont Koblinger +Date: 2016-03-02 12:42:08 +0100 + + widget: Invalidate cursor on style change + + https://bugzilla.gnome.org/show_bug.cgi?id=762963 + + src/vte.cc | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 083bb1e749ed53ccedc57f4ccc89566e58bdef78 +Author: Christian Persch +Date: 2016-02-29 18:38:27 +0100 + + docs: Add section for API new in 0.46 + + doc/reference/vte-docs.xml | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 2322cfaa6791284ae074ba9b421a70bff469eb60 +Author: Christian Persch +Date: 2016-02-29 18:37:36 +0100 + + lib: Fix Since: tags for VteRegex to 0.46 + + src/vte/vteenums.h | 2 +- + src/vtegtk.cc | 18 +++++++++--------- + src/vteregex.cc | 2 +- + 3 files changed, 11 insertions(+), 11 deletions(-) + +commit b92236a8ab960fa892f86d41cff3a8957b971b77 +Author: Anthony G. Basile +Date: 2016-02-29 18:28:22 +0100 + + lib: Use nullptr as sentinel instead of NULL + + On some non-GCC/GLIBC systems, NULL may not be a suitable 0 pointer constant. + + https://bugzilla.gnome.org/show_bug.cgi?id=762863 + (cherry picked from commit e3d9eef71fe29f658d1376a215b02cfddc7a68bc) + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a9fa01991ab7fb068af6d2a81691f32b44b91a9c +Author: Anthony G. Basile +Date: 2016-02-29 18:20:27 +0100 + + lib: Use nullptr as sentinel instead of NULL + + On some non-GCC/GLIBC systems, NULL may not be a suitable 0 pointer constant. + + https://bugzilla.gnome.org/show_bug.cgi?id=762863 + + src/pty.cc | 2 +- + src/vte.cc | 6 +++--- + src/vtedraw.cc | 2 +- + 3 files changed, 5 insertions(+), 5 deletions(-) + +commit 5351f75712fa62dc0016d0cece4b212b5dd43ece +Author: Christian Persch +Date: 2016-02-29 18:20:27 +0100 + + build: Add -Wstrict-null-sentinel to CXXFLAGS + + https://bugzilla.gnome.org/show_bug.cgi?id=762863 + + configure.ac | 1 + + 1 file changed, 1 insertion(+) + +commit cf72edc15a73cdaa21a459fa2b5e8f470334e3ea +Author: Christian Persch +Date: 2016-02-25 18:42:00 +0100 + + widget: Don't deselect when updating the clipboard + + gtk_clipboard_set_with_data() differs from gtk_clipboard_set_with_owner() + in that the old clear callback is *always* invoked instead of only + when the owner (user_data) is different from the last owner (user_data). + I think this is a gtk+ bug, but that code has been that way since 2000, + so who knows why it does it this way. + + Adapt to this by guarding the clear callback to gtk_clipboard_set_with_owner() + with a bool that is set/unset around the call and makes the callback + bail out early if we're updating the clipboard from within vte. + + https://bugzilla.gnome.org/show_bug.cgi?id=762446 + + src/vte.cc | 9 ++++++++- + src/vteinternal.hh | 1 + + 2 files changed, 9 insertions(+), 1 deletion(-) + +commit b2ee030f02b49ce44a3999d58d1bd3d486a38bd1 +Author: Christian Persch +Date: 2016-02-20 12:17:28 +0100 + + lib: Neuter _VTE_GNUC_NONNULL when compiling libvte + + src/vte/vtemacros.h | 4 ++++ + 1 file changed, 4 insertions(+) + +commit d0a2e72476ca052a7623ea4ef65794ab19b5215c +Author: Christian Persch +Date: 2016-02-14 21:19:02 +0100 + + docs: Remove leftovers + + https://bugzilla.gnome.org/show_bug.cgi?id=762043 + + doc/Makefile.am | 1 - + doc/utmpwtmp.txt | 31 ------------------------------- + 2 files changed, 32 deletions(-) + +commit c1a1ab3882dc79cab0fb9b7c4d0425f556df08b0 +Author: Christian Persch +Date: 2016-02-13 20:19:04 +0100 + + Revert "build: libtoolectomy" + + This reverts commit d604a3d9a7ba29717ab479af927fecc71bf4c47b. + + This needs some more work to be functional. + + configure.ac | 23 +++++++++++++---------- + doc/reference/Makefile.am | 2 +- + src/Makefile.am | 45 +++++++++++++++------------------------------ + 3 files changed, 29 insertions(+), 41 deletions(-) + +commit d604a3d9a7ba29717ab479af927fecc71bf4c47b +Author: Christian Persch +Date: 2016-02-13 19:59:50 +0100 + + build: libtoolectomy + + https://bugzilla.gnome.org/show_bug.cgi?id=761444 + + configure.ac | 23 ++++++++++------------- + doc/reference/Makefile.am | 2 +- + src/Makefile.am | 45 ++++++++++++++++++++++++++++++--------------- + 3 files changed, 41 insertions(+), 29 deletions(-) + +commit 30f7bdddd30a6265804c6a82023732415ad3f6e5 +Author: Christian Persch +Date: 2016-02-13 14:19:34 +0100 + + Revert "regex: Disable PCRE2 for 0.44" + + This reverts commit ce94be5ea7f68be90849a1147e13747227adf5ee. + + configure.ac | 6 +++++- + doc/reference/vte-docs.xml | 3 +++ + doc/reference/vte-sections.txt | 12 ++++++++---- + src/Makefile.am | 7 ++++--- + src/vte/vte.h | 1 + + src/vte/vtedeprecated.h | 25 +++++++++++++++++++++++++ + src/vte/vteenums.h | 20 ++++++++++++++++++++ + src/vte/vteterminal.h | 28 ++++++++++++++-------------- + src/vteapp.c | 1 - + src/vtegtk.cc | 28 +++++++++------------------- + src/vteinternal.hh | 2 -- + src/vteregexinternal.hh | 8 -------- + 12 files changed, 89 insertions(+), 52 deletions(-) + +commit 110f9ef6f49b90f690c666f260bb094ba2835eb9 +Author: Christian Persch +Date: 2016-02-13 14:19:33 +0100 + + Revert "docs: Fix the build" + + This reverts commit ea0fe4fcb65345775be4359ea2015b3454a07478. + + doc/reference/vte-sections.txt | 16 ++++++++++++++++ + doc/reference/vte.types | 2 ++ + 2 files changed, 18 insertions(+) + +commit acf6a497b23abed25847e7e8a6881e83bb25b92b +Author: Christian Persch +Date: 2016-02-13 14:19:20 +0100 + + Post branch version bump + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit ea0fe4fcb65345775be4359ea2015b3454a07478 (tag: 0.44.90) +Author: Christian Persch +Date: 2016-02-13 14:18:21 +0100 + + docs: Fix the build + + Failed after commit ce94be5ea7f68be90849a1147e13747227adf5ee. + + doc/reference/vte-sections.txt | 16 ---------------- + doc/reference/vte.types | 2 -- + 2 files changed, 18 deletions(-) + +commit 59e794a4cfd2b0042b934866782e9d2ba14933ba +Author: Christian Persch +Date: 2016-02-13 14:18:21 +0100 + + Version 0.43.90 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ce94be5ea7f68be90849a1147e13747227adf5ee +Author: Christian Persch +Date: 2016-02-13 13:33:18 +0100 + + regex: Disable PCRE2 for 0.44 + + I'm not really satisfied with the API, so let's not export this API + for 0.44. + + This patch will be reverted as soon as we branch for vte-0-44. + + configure.ac | 6 +----- + doc/reference/vte-docs.xml | 3 --- + doc/reference/vte-sections.txt | 12 ++++-------- + src/Makefile.am | 7 +++---- + src/vte/vte.h | 1 - + src/vte/vtedeprecated.h | 25 ------------------------- + src/vte/vteenums.h | 20 -------------------- + src/vte/vteterminal.h | 28 ++++++++++++++-------------- + src/vteapp.c | 1 + + src/vtegtk.cc | 28 +++++++++++++++++++--------- + src/vteinternal.hh | 2 ++ + src/vteregexinternal.hh | 8 ++++++++ + 12 files changed, 52 insertions(+), 89 deletions(-) + +commit 1dea919b9aa4b55e2c5c07bf2022769cbac365b5 +Author: Christian Persch +Date: 2016-02-13 13:33:18 +0100 + + pty: Set COLORTERM variable + + https://bugzilla.gnome.org/show_bug.cgi?id=754521 + + src/pty.cc | 3 +++ + 1 file changed, 3 insertions(+) + +commit e5803965891e6c22bd503b6a96c98097f6890ffd +Author: Christian Persch +Date: 2016-02-13 13:33:18 +0100 + + pty: Comment cleanup + + src/pty.cc | 6 ++---- + src/vteinternal.hh | 2 +- + 2 files changed, 3 insertions(+), 5 deletions(-) + +commit f34c6fb8e9c795eec6ea993372625b094f2b3c51 +Author: Alberts Muktupāvels +Date: 2016-02-06 16:16:27 +0200 + + vtegtk: use CSS name for widget style + + GTK+ now use only CSS name for style. This also changes CSS name + from vte to vte-terminal to make CSS name similar to type name. + + src/vtegtk.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit f318750cd0ecfae87e27a084ffe43cf87a91e0f7 +Author: Christian Persch +Date: 2016-02-05 20:06:30 +0100 + + lib: Add some missing includes + + It works locally for me here without these, but build.g.o fails. + + src/vte.cc | 2 ++ + src/vteseq.cc | 2 ++ + 2 files changed, 4 insertions(+) + +commit fb072423c3e1bc733a8eff88771b4c05c0f3be4a +Author: Christian Persch +Date: 2016-02-05 19:50:30 +0100 + + build: Update C++ version check macros from autoconf archive + + configure.ac | 2 +- + m4/ax_cxx_compile_stdcxx.m4 | 558 +++++++++++++++++++++++++++++++++++++++++ + m4/ax_cxx_compile_stdcxx_11.m4 | 165 ------------ + 3 files changed, 559 insertions(+), 166 deletions(-) + +commit 6d1ab462de4cce0add219aec5829a9dc528cdc64 +Author: Christian Persch +Date: 2016-02-05 19:50:30 +0100 + + lib: Move all colour defines to the same place + + src/vtedefines.hh | 10 +++++++++- + src/vterowdata.h | 10 +--------- + 2 files changed, 10 insertions(+), 10 deletions(-) + +commit a7c9910df445b3b97fe670bbaa6465d362a390f7 +Author: Christian Persch +Date: 2016-02-05 19:50:30 +0100 + + lib: Remove private header + + Don't need more than one private header, so remove vte-private.h. + + doc/reference/Makefile.am | 3 +- + src/Makefile.am | 1 - + src/vte-private.h | 73 ----------------------------------------------- + src/vte.cc | 19 ++++++++++-- + src/vteaccess.cc | 2 +- + src/vteconv.cc | 7 +---- + src/vtedraw.cc | 24 ++++++++++++---- + src/vtegtk.cc | 2 -- + src/vteinternal.hh | 13 +++++++++ + src/vterowdata.h | 2 +- + src/vteseq.cc | 7 +++-- + 11 files changed, 56 insertions(+), 97 deletions(-) + +commit 894e4dacb566119c325df543c9c836039b1a3b67 +Author: Christian Persch +Date: 2016-02-05 19:50:30 +0100 + + widget: Change function name + + src/vte.cc | 13 ++++++------- + 1 file changed, 6 insertions(+), 7 deletions(-) + +commit 9a7d421694a9e6993aec1fc6700b1278eeeca1dc +Author: Hashem Nasarat +Date: 2016-01-31 12:45:05 -0500 + + build: print version of libpcre2-8 when not found + + I spent a few minutes being confused becuase I had the library installed + but it was too old. The standard PKG_CHECK_MODULES macro error message + prints out the expected version, so this custom one should too. + + https://bugzilla.gnome.org/show_bug.cgi?id=761369 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 79b0a66cce6170be7eda992469d565df76973820 +Author: Christian Persch +Date: 2016-01-31 18:53:15 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vte.cc | 2 +- + src/vtegtk.cc | 12 ++++++------ + src/vteinternal.hh | 32 ++++++++++---------------------- + 3 files changed, 17 insertions(+), 29 deletions(-) + +commit 850cd97de0ab914097711e1789c92b3cb5433623 +Author: Christian Persch +Date: 2016-01-31 18:53:15 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vtegtk.cc | 8 ++++---- + src/vteinternal.hh | 24 ++++++++---------------- + 2 files changed, 12 insertions(+), 20 deletions(-) + +commit 6597df875164da49603535b6e20dfef299a68fdc +Author: Christian Persch +Date: 2016-01-31 18:53:15 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vteinternal.hh | 18 ++++++------------ + 1 file changed, 6 insertions(+), 12 deletions(-) + +commit 5a7deca573b744b008207bae3e571ffe06ac2ed2 +Author: Christian Persch +Date: 2016-01-31 18:53:15 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vte.cc | 2 +- + src/vteinternal.hh | 17 +++++------------ + 2 files changed, 6 insertions(+), 13 deletions(-) + +commit aae7da9bd7e50af68d5ccb529502aca25fe3b69b +Author: Christian Persch +Date: 2016-01-31 18:53:14 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vtegtk.cc | 10 +++++----- + src/vteinternal.hh | 38 +++++++++++++------------------------- + 2 files changed, 18 insertions(+), 30 deletions(-) + +commit 43ed39913aff84a462dbf7aea27c915ebdf0b708 +Author: Christian Persch +Date: 2016-01-31 18:53:14 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vtegtk.cc | 10 +++++----- + src/vteinternal.hh | 9 +++------ + 2 files changed, 8 insertions(+), 11 deletions(-) + +commit 3b50659ebb361413bec32d9265793da8c509e019 +Author: Christian Persch +Date: 2016-01-31 18:53:14 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vte.cc | 4 ++-- + src/vteinternal.hh | 20 +++++++------------- + 2 files changed, 9 insertions(+), 15 deletions(-) + +commit 412aecfb230d7cceedabd6532980b53e73114643 +Author: Christian Persch +Date: 2016-01-31 18:53:14 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vte.cc | 2 +- + src/vtegtk.cc | 4 ++-- + src/vteinternal.hh | 45 ++++++++++++++++----------------------------- + src/vteseq.cc | 16 ++++++++-------- + 4 files changed, 27 insertions(+), 40 deletions(-) + +commit 487cc04093612225ee4cb4cb09efaafa19845cca +Author: Christian Persch +Date: 2016-01-31 18:53:14 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vte.cc | 3 ++- + src/vtegtk.cc | 4 ++-- + src/vteinternal.hh | 36 ++++++++++++------------------------ + src/vteseq.cc | 2 +- + 4 files changed, 17 insertions(+), 28 deletions(-) + +commit 0aef3e33170a2ff4cb13e985e6842818f8b02c91 +Author: Christian Persch +Date: 2016-01-31 18:53:14 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vtegtk.cc | 6 +++--- + src/vteinternal.hh | 19 ++++++------------- + src/vteseq.cc | 2 +- + 3 files changed, 10 insertions(+), 17 deletions(-) + +commit e99f32de91934a3c31d903dde57103020c684af8 +Author: Christian Persch +Date: 2016-01-31 18:53:14 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vtegtk.cc | 10 +++++----- + src/vteinternal.hh | 43 ++++++++++++++----------------------------- + src/vteseq.cc | 8 ++++---- + 3 files changed, 23 insertions(+), 38 deletions(-) + +commit 6d19eb06d1ca57c7af2658c3e63308c2e012c092 +Author: Christian Persch +Date: 2016-01-31 18:53:14 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vteaccess.cc | 4 ++-- + src/vtegtk.cc | 2 +- + src/vteinternal.hh | 39 ++++++++++++--------------------------- + 3 files changed, 15 insertions(+), 30 deletions(-) + +commit 14b0cf6b1b91bd9bede73c75f547d47b58e24f22 +Author: Christian Persch +Date: 2016-01-31 18:53:13 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vtegtk.cc | 2 +- + src/vteinternal.hh | 9 +++------ + 2 files changed, 4 insertions(+), 7 deletions(-) + +commit 9769f6ff678173db2b94f8323c9d3e97878bf76b +Author: Christian Persch +Date: 2016-01-31 18:53:13 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vteinternal.hh | 45 ++++++++++++++---------------------- + src/vteseq.cc | 68 +++++++++++++++++++++++++----------------------------- + 2 files changed, 49 insertions(+), 64 deletions(-) + +commit 1c1d51e4c9cb08d67879cf20d04beff251cac936 +Author: Christian Persch +Date: 2016-01-31 18:53:13 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vte.cc | 10 +++++----- + src/vteinternal.hh | 5 +---- + src/vteseq.cc | 8 ++++---- + 3 files changed, 10 insertions(+), 13 deletions(-) + +commit 625b6eb38edca38c4c49f67f379909a02fba5fcd +Author: Christian Persch +Date: 2016-01-31 18:53:13 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vtegtk.cc | 4 ++-- + src/vteinternal.hh | 38 ++++++++++++++------------------------ + 2 files changed, 16 insertions(+), 26 deletions(-) + +commit 08748a649af5d275f45d3bbff6e55ec8c8399bac +Author: Christian Persch +Date: 2016-01-31 18:53:13 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vtegtk.cc | 4 ++-- + src/vteinternal.hh | 21 +++++++-------------- + 2 files changed, 9 insertions(+), 16 deletions(-) + +commit ed3a4550bdc3d730c7a75d9eb45a575c93f79ca0 +Author: Christian Persch +Date: 2016-01-31 18:53:13 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vteinternal.hh | 13 ++++--------- + src/vteseq.cc | 10 +++++----- + 2 files changed, 9 insertions(+), 14 deletions(-) + +commit 99e2c8346a33036fe9f98125485ab9bf730440d4 +Author: Christian Persch +Date: 2016-01-31 18:53:13 +0100 + + widget: Rename instance members + + Now that all of VteTerminalPrivate is ported over, remove the #define + and just rename the member variable. + + src/vte.cc | 4 ++-- + src/vtegtk.cc | 4 ++-- + src/vteinternal.hh | 8 +++----- + src/vteseq.cc | 2 +- + 4 files changed, 8 insertions(+), 10 deletions(-) + +commit a446a5f12cac798115074f4ac4ff0bef9680c293 +Author: Christian Persch +Date: 2016-01-31 18:01:18 +0100 + + widget: Update IM cursor position after scrolling + + https://bugzilla.gnome.org/show_bug.cgi?id=756141 + + src/vte.cc | 27 ++++++++++++++++++--------- + src/vteinternal.hh | 1 + + 2 files changed, 19 insertions(+), 9 deletions(-) + +commit 322e9ec2de50dee81905a6d7d056cf0d2bd69cb0 +Author: Christian Persch +Date: 2016-01-31 15:08:45 +0100 + + lib: Remove VteTerminalPrivate from public headers + + Finally! + + doc/reference/vte-sections.txt | 1 - + src/vte.cc | 3 --- + src/vte/vteterminal.h | 9 +-------- + src/vtegtk.cc | 3 +-- + 4 files changed, 2 insertions(+), 14 deletions(-) + +commit 8891f5b94af911f5e6a31ac97b17b8b9e5cdd719 +Author: Christian Persch +Date: 2016-01-31 15:08:45 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 44 +++++++++++++++++++++++++------------------- + src/vteinternal.hh | 2 ++ + 2 files changed, 27 insertions(+), 19 deletions(-) + +commit c5882a0307e11e81d521822f3332830f9fc876d1 +Author: Christian Persch +Date: 2016-01-31 15:08:45 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 68 +++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 32 insertions(+), 36 deletions(-) + +commit b3af4d814b2ecf592071d7d3d93e5002a87705f7 +Author: Christian Persch +Date: 2016-01-31 15:08:45 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 20 +++++++++++--------- + 1 file changed, 11 insertions(+), 9 deletions(-) + +commit e3113f6d141204fb1ece44d75393fd0c5b729670 +Author: Christian Persch +Date: 2016-01-31 15:08:45 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 84 ++++++++++++++++++++++++------------------------------ + src/vteinternal.hh | 2 ++ + 2 files changed, 40 insertions(+), 46 deletions(-) + +commit bc0b8a47c19025e48e19b46e528e9e603d51d518 +Author: Christian Persch +Date: 2016-01-31 15:08:45 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 101 +++++++++++++++++++++++++++-------------------------- + src/vteinternal.hh | 6 ++-- + 2 files changed, 55 insertions(+), 52 deletions(-) + +commit da0d48350e28418d6c0fc4be2ecad87628c46f45 +Author: Christian Persch +Date: 2016-01-31 15:08:45 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 18 ++++++++---------- + src/vteinternal.hh | 1 + + 2 files changed, 9 insertions(+), 10 deletions(-) + +commit 6ef8d6ae2e54690a089df60adeed12d1c329362e +Author: Christian Persch +Date: 2016-01-31 15:08:45 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 46 +++++++++++++++++++++++----------------------- + src/vteinternal.hh | 4 ++-- + 2 files changed, 25 insertions(+), 25 deletions(-) + +commit bb78d5682445b9b13a3c6a0e80514e8345c6bf08 +Author: Christian Persch +Date: 2016-01-31 15:08:45 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 43 +++++++++++++++++++++---------------------- + src/vteinternal.hh | 1 + + 2 files changed, 22 insertions(+), 22 deletions(-) + +commit 648c6f2b23d3bf929df7998fae1a71b0d8407d86 +Author: Christian Persch +Date: 2016-01-31 15:08:44 +0100 + + widget: Correct comment + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 3a86becb089d62dac838d0068d5a161ec0f1a25b +Author: Christian Persch +Date: 2016-01-31 15:08:44 +0100 + + a11y: Move code into the only caller + + No need for a function when these few lines are just called in this one place. + + src/vte-private.h | 6 ------ + src/vte.cc | 33 --------------------------------- + src/vteaccess.cc | 17 +++++++++++------ + 3 files changed, 11 insertions(+), 45 deletions(-) + +commit 24e953c3cffb4e44c177bb64186114dea358e5b4 +Author: Christian Persch +Date: 2016-01-30 19:03:43 +0100 + + lib: Build fix + + This fails on build.g.o for whatever reason, so comment this for now; it + will be refactored anyway soon. + + src/vteinternal.hh | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 162e67fd22d1d38c16c4886886edb5099d2dce57 +Author: Christian Persch +Date: 2016-01-30 18:19:27 +0100 + + app: Fix return value + + Don't show the context menu and also pass the key to the terminal. + + src/app.vala | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 17edda3088a0dd7c6f8cb6fd1866bb7391790ff2 +Author: Christian Persch +Date: 2016-01-30 18:19:27 +0100 + + widget: Fix check for changed screen in process_incoming + + This was accidentally broken in commit 423063840d1304fdd7ff2d87f2041e70a07f599a. + + src/vte.cc | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +commit f16e91a203fbb749ff124b88b2d7bd0685d8570b +Author: Christian Persch +Date: 2016-01-30 18:19:27 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 118 ++++++++++++++++++++++++++++------------------------- + src/vteinternal.hh | 8 ++++ + 2 files changed, 70 insertions(+), 56 deletions(-) + +commit 71f097cbc6672648ecff8a9780484d6208241f7d +Author: Christian Persch +Date: 2016-01-30 18:19:27 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 4 ---- + src/vte.cc | 39 +++++++++++++++++++++------------------ + src/vteinternal.hh | 5 +++++ + src/vteseq.cc | 28 ++++++++++++++-------------- + 4 files changed, 40 insertions(+), 36 deletions(-) + +commit 66417c928802ce4cd420f35d2484924924f9ba8e +Author: Christian Persch +Date: 2016-01-30 18:19:26 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 95 +++++++++++++++++++++++++----------------------------- + src/vteinternal.hh | 13 ++++++++ + 2 files changed, 57 insertions(+), 51 deletions(-) + +commit b5aefa63dbede585c97b3c5502120eb79c411d56 +Author: Christian Persch +Date: 2016-01-30 18:19:26 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 41 +++++++++++++++++++++-------------------- + src/vteinternal.hh | 3 +++ + 2 files changed, 24 insertions(+), 20 deletions(-) + +commit 08b3e780c3443d67f2a49469bba7a792fceb30c0 +Author: Christian Persch +Date: 2016-01-30 18:19:26 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 48 +++++++++++++++++++++--------------------------- + src/vteinternal.hh | 3 +++ + 2 files changed, 24 insertions(+), 27 deletions(-) + +commit 9e1e7ae61ba99d84c37c0fb351393a65156c050d +Author: Christian Persch +Date: 2016-01-30 18:19:26 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a9f99163b37b3e6ab789e65c1fa6502a8cd182cf +Author: Christian Persch +Date: 2016-01-30 18:19:26 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 1 - + src/vte.cc | 61 ++++++++++++++++++++++-------------------------------- + src/vteaccess.cc | 8 ++----- + src/vteinternal.hh | 6 ++++++ + 4 files changed, 33 insertions(+), 43 deletions(-) + +commit 0c4386edf91051dbb43ee375b5bc6c5a9cbf00d3 +Author: Christian Persch +Date: 2016-01-30 18:19:26 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 3 --- + src/vte.cc | 44 -------------------------------------------- + src/vteaccess.cc | 27 +++++++++++++-------------- + 3 files changed, 13 insertions(+), 61 deletions(-) + +commit d94d9c882eb4152e0628930b4b2d07df003927f9 +Author: Christian Persch +Date: 2016-01-30 18:19:26 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 1 - + src/vte.cc | 5 ++--- + src/vteaccess.cc | 3 ++- + src/vteinternal.hh | 2 ++ + 4 files changed, 6 insertions(+), 5 deletions(-) + +commit 276b8aa04ed69fef2715a63ece509a58744ee18c +Author: Christian Persch +Date: 2016-01-30 18:19:25 +0100 + + lib: Remove unused prototypes + + src/vte-private.h | 17 ----------------- + 1 file changed, 17 deletions(-) + +commit c2adf41d46740fad84f7a7b7e5e51e77de41ea24 +Author: Christian Persch +Date: 2016-01-30 18:19:25 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 121 ++++++++++++++--------------------------------------- + src/vtegtk.cc | 22 +++++++++- + src/vteinternal.hh | 7 ++-- + src/vtetypes.hh | 1 + + 4 files changed, 56 insertions(+), 95 deletions(-) + +commit e9791aba2ff1839ce7e383b29da2e0d0eadd566e +Author: Egmont Koblinger +Date: 2016-01-28 14:06:11 +0100 + + emulation: Track the cursor separately for the two screens + + This is required to correctly resize the normal screen's contents + while the alternate screen is active, fixing a bug introduced by + commit 5a434e6c4457bdfe182a13213396e7a66a08f767. + + https://bugzilla.gnome.org/show_bug.cgi?id=761097 + + src/vte.cc | 154 ++++++++++++++++++++++++++--------------------------- + src/vtegtk.cc | 4 +- + src/vteinternal.hh | 5 +- + src/vteseq.cc | 124 +++++++++++++++++++++--------------------- + 4 files changed, 142 insertions(+), 145 deletions(-) + +commit fee25aaed7e599b6ce351113c61b242d8aab9589 +Author: Christian Persch +Date: 2016-01-18 21:37:19 +0100 + + lib: Remove accidentally committed debug spew + + src/vteseq.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit ab29717e30e3f3f60e122e59649961df5b66c035 +Author: Christian Persch +Date: 2016-01-18 19:48:43 +0100 + + Post release version bump + + configure.ac | 2 +- + src/vteseq.cc | 2 ++ + 2 files changed, 3 insertions(+), 1 deletion(-) + +commit 2d2ee3017f03fe964996393a99fe64ccca6704b2 (tag: 0.43.2) +Author: Christian Persch +Date: 2016-01-18 19:34:56 +0100 + + emulation: Fix stupid typo + + Fix bug introduced by commit 07150c4131a345f6e92a18bdd0bd399af6607dc0 . + + https://bugzilla.gnome.org/show_bug.cgi?id=760772 + + src/vteseq.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 942fd0f219f613507b02d6f58c2d367ad74772c5 +Author: Christian Persch +Date: 2016-01-17 21:37:25 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 07846d9f430b6007554c4b74b4daa7ad94a98555 (tag: 0.43.1) +Author: Christian Persch +Date: 2016-01-17 21:10:05 +0100 + + widget: Add debug output when setting geometry hints + + src/vtegtk.cc | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit 4822e237e1072e1f44825f578a8b8711dfc34e91 +Author: Christian Persch +Date: 2016-01-16 19:15:29 +0100 + + widget: Document how to scroll a VteTerminal + + A GtkScrolledWindow cannot be used since it is incompatible + with VteTerminal. Document that. + + https://bugzilla.gnome.org/show_bug.cgi?id=760718 + + src/vtegtk.cc | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 142a683f9aa07132b11167b62a436731346e053a +Author: Christian Persch +Date: 2016-01-16 19:15:29 +0100 + + widget: Don't make the VteTerminal app paintable + + src/vte.cc | 3 --- + 1 file changed, 3 deletions(-) + +commit 2273aea4ff19d9d929a2b9dd04f21cc407a83d98 +Author: Debarshi Ray +Date: 2016-01-14 18:19:03 +0100 + + build: Fix srcdir != builddir + + Fall out from b77cec8080cdb14541cf106a5afe5bb89718f0b7 + + https://bugzilla.gnome.org/show_bug.cgi?id=760635 + + src/Makefile.am | 2 +- + src/vte/vteglobals.h | 2 +- + src/vte/vtepty.h | 4 ++-- + src/vte/vteregex.h | 2 +- + src/vte/vteterminal.h | 8 ++++---- + src/vte/vteversion.h.in | 2 +- + src/vtetypebuiltins.h.template | 2 +- + 7 files changed, 11 insertions(+), 11 deletions(-) + +commit a9d2e2f5372a33f03ffc6efd40336f6b5b0bedd9 +Author: Christian Persch +Date: 2016-01-14 19:41:40 +0100 + + Revert "build: srcdir != builddir fix" + + This reverts commit efa582559b1d58e6d93cce0a2032962fdd58c9a5. + + src/Makefile.am | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit aaec68e7d9a70f1de1cbc888632c01ac2369d9e6 +Author: Christian Persch +Date: 2016-01-14 19:41:39 +0100 + + Revert "build: Try again to fix srcdir != builddir build" + + This reverts commit 6738de398f59d8e2f074ebaa2f2d05ac953730bb. + + src/vte/vte.h | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit 6738de398f59d8e2f074ebaa2f2d05ac953730bb +Author: Christian Persch +Date: 2016-01-14 19:25:07 +0100 + + build: Try again to fix srcdir != builddir build + + src/vte/vte.h | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit efa582559b1d58e6d93cce0a2032962fdd58c9a5 +Author: Christian Persch +Date: 2016-01-14 18:15:41 +0100 + + build: srcdir != builddir fix + + src/Makefile.am | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit bdd40c32bf33daab34e994045cd27f909687fdf0 +Author: Christian Persch +Date: 2016-01-14 17:05:38 +0100 + + widget: Fix missing braces + + Tracking the selection also only makes sense on the active screen, + so add the braces as the indentation already suggests. + + Thanks, -Wmisleading-indentation ! + + src/vte.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 81d78f46b4087a441e78453b756b68c15579f96a +Author: Christian Persch +Date: 2016-01-14 17:05:38 +0100 + + build: One more warning flag + + configure.ac | 1 + + 1 file changed, 1 insertion(+) + +commit 9bc965f05f29a45e7b8a73871fd6baf5dcf67b08 +Author: Christian Persch +Date: 2016-01-14 17:05:38 +0100 + + a11y: Use VteTerminal private data directly + + ... instead of via the VteTerminal::pvt pointer. + + src/vteaccess.cc | 53 ++++++++++++++++++++++++++++++----------------------- + 1 file changed, 30 insertions(+), 23 deletions(-) + +commit 929454bc4c8c92c4c4579378c9ec9e925e8a1c8b +Author: Christian Persch +Date: 2016-01-14 17:05:38 +0100 + + widget: Use G_ADD_PRIVATE + + src/vte-private.h | 1 + + src/vtegtk.cc | 337 +++++++++++++++++++++++++++++------------------------- + 2 files changed, 182 insertions(+), 156 deletions(-) + +commit 6c50659e1cea47861df704fe8cc131a3c71e4b42 +Author: Christian Persch +Date: 2016-01-14 17:05:37 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 5 - + src/vte.cc | 5 +- + src/vteinternal.hh | 4 + + src/vteseq.cc | 555 ++++++++++++++++++++++++++--------------------------- + 4 files changed, 283 insertions(+), 286 deletions(-) + +commit 2111ea4210c71bd609af3b9418398db9ab67d0a1 +Author: Christian Persch +Date: 2016-01-14 17:05:37 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 6 ++++++ + src/vteinternal.hh | 3 +++ + src/vteseq.cc | 43 ++++++++++++++++++++++--------------------- + 3 files changed, 31 insertions(+), 21 deletions(-) + +commit 0b6e206173f160c13e827af6b41aa19e6910a978 +Author: Christian Persch +Date: 2016-01-14 17:05:37 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 5 +++++ + src/vteseq.cc | 32 ++++++++++++++++++++------------ + 2 files changed, 25 insertions(+), 12 deletions(-) + +commit fccdc1f524411b9c3bdd915f324b246238a73793 +Author: Christian Persch +Date: 2016-01-14 17:05:37 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 3 ++ + src/vteseq.cc | 108 +++++++++++++++++++++++++++-------------------------- + 2 files changed, 58 insertions(+), 53 deletions(-) + +commit d50aed93fe822cdb9c7cc33730db58856906c934 +Author: Christian Persch +Date: 2016-01-14 17:05:37 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 1 + + src/vteseq.cc | 34 +++++++++++++++++----------------- + 2 files changed, 18 insertions(+), 17 deletions(-) + +commit 0cd8aaa8d85ddd4c1853445fafaf8425a92f2791 +Author: Christian Persch +Date: 2016-01-14 17:05:37 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 2 ++ + src/vteseq.cc | 96 ++++++++++++++++++++++++++++-------------------------- + 2 files changed, 51 insertions(+), 47 deletions(-) + +commit 0d7f5e98c4eae90fb96f5f804c9cca5fac211dc7 +Author: Christian Persch +Date: 2016-01-14 17:05:37 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 2 ++ + src/vteseq.cc | 79 ++++++++++++++++++++++++++++++------------------------ + 2 files changed, 46 insertions(+), 35 deletions(-) + +commit ef3258e8c3a1d4f5bb81766a3c7127a523eeda0f +Author: Christian Persch +Date: 2016-01-14 17:05:37 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 2 ++ + src/vteseq.cc | 54 +++++++++++++++++++++++++++++++----------------------- + 2 files changed, 33 insertions(+), 23 deletions(-) + +commit ba9ba87f98efa204a0a83e2364729d976399482b +Author: Christian Persch +Date: 2016-01-14 17:05:37 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 4 +++- + src/vteseq.cc | 20 ++++++++++++++++---- + 2 files changed, 19 insertions(+), 5 deletions(-) + +commit 20687f52d1ae45be2c4dbad9ca1b1a2d94359a20 +Author: Christian Persch +Date: 2016-01-14 17:05:36 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 2 ++ + src/vteseq.cc | 33 ++++++++++++++++++++++----------- + 2 files changed, 24 insertions(+), 11 deletions(-) + +commit c739a072d06ba23788945e6434befceaaaf59647 +Author: Christian Persch +Date: 2016-01-14 17:05:36 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 1 + + src/vteseq.cc | 31 ++++++++++++++++++------------- + 2 files changed, 19 insertions(+), 13 deletions(-) + +commit 333eee67e7209eb63c504ec2c622ac7133d77e00 +Author: Christian Persch +Date: 2016-01-14 17:05:36 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 3 ++- + src/vteseq.cc | 54 ++++++++++++++++++++++++++++++------------------------ + 2 files changed, 32 insertions(+), 25 deletions(-) + +commit d26ae40c24e0f087de3bf4b366a177c77eb06fff +Author: Christian Persch +Date: 2016-01-14 17:05:36 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 3 +++ + src/vteseq.cc | 38 ++++++++++++++++++++++---------------- + 2 files changed, 25 insertions(+), 16 deletions(-) + +commit 07150c4131a345f6e92a18bdd0bd399af6607dc0 +Author: Christian Persch +Date: 2016-01-14 17:05:36 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 6 +++-- + src/vteseq.cc | 66 +++++++++++++++++++++++++++++++++++++----------------- + 2 files changed, 50 insertions(+), 22 deletions(-) + +commit f7e16708871b581c9e0e5dd3de5e42c7197eb23d +Author: Christian Persch +Date: 2016-01-14 17:05:36 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 3 +++ + src/vteseq.cc | 62 +++++++++++++++++++++++++++++------------------------- + 2 files changed, 36 insertions(+), 29 deletions(-) + +commit eefbe5bf990d4dd2fbb0ca3946cb3c25f379a584 +Author: Christian Persch +Date: 2016-01-14 17:05:36 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 3 ++ + src/vteseq.cc | 103 ++++++++++++++++++++++++++++++++--------------------- + 2 files changed, 66 insertions(+), 40 deletions(-) + +commit a20eda749abe40d20fd6edd1424abc28c10fc6c4 +Author: Christian Persch +Date: 2016-01-14 17:05:36 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 1 + + src/vteseq.cc | 32 +++++++++++++++++--------------- + 2 files changed, 18 insertions(+), 15 deletions(-) + +commit fb732abb9fa45e95cae9f8b2ec90a140a72185ef +Author: Christian Persch +Date: 2016-01-14 17:05:36 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteseq.cc | 30 ++++++++---------------------- + 1 file changed, 8 insertions(+), 22 deletions(-) + +commit 65b0380cc28ee93a7d9c5989ad7bcb968eb9e974 +Author: Christian Persch +Date: 2016-01-14 17:05:36 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 4 ++- + src/vteseq.cc | 87 +++++++++++++++++++++++++++++++++--------------------- + 2 files changed, 57 insertions(+), 34 deletions(-) + +commit 4dc6ceebfbb082e9ff969d648e46cade8b408d5c +Author: Christian Persch +Date: 2016-01-14 17:05:35 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 7 +++++-- + src/vteseq.cc | 49 ++++++++++++++++++++++++++++++------------------- + 2 files changed, 35 insertions(+), 21 deletions(-) + +commit 9a400d42b230fc798b17836bc2d9c2bd60ac5c4f +Author: Christian Persch +Date: 2016-01-14 17:05:35 +0100 + + app: Fix locale setting + + src/app.vala | 2 ++ + 1 file changed, 2 insertions(+) + +commit 662c9e359ec570550a40ee082b843bcaf2afb7e7 +Author: Christian Persch +Date: 2016-01-14 17:05:35 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 2 ++ + src/vteseq.cc | 10 ++++++++-- + 2 files changed, 10 insertions(+), 2 deletions(-) + +commit 2acc7826a625dcd0b39e2b0f552273c0210a4bf0 +Author: Christian Persch +Date: 2016-01-14 17:05:35 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 2 ++ + src/vteseq.cc | 14 +++++++++++++- + 2 files changed, 15 insertions(+), 1 deletion(-) + +commit 4a020416c7a64d750899774cac5f7c5cb384961b +Author: Christian Persch +Date: 2016-01-14 17:05:35 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 1 + + src/vteseq.cc | 31 +++++++++++++------------------ + 2 files changed, 14 insertions(+), 18 deletions(-) + +commit 362208aea1c49349d941b437b14972459ee70ea8 +Author: Christian Persch +Date: 2016-01-14 17:05:35 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 1 + + src/vteseq.cc | 53 ++++++++++++++++++++++++----------------------------- + 2 files changed, 25 insertions(+), 29 deletions(-) + +commit fc22100215cbadb5fbcb2c7a0cfce797e3dd2633 +Author: Christian Persch +Date: 2016-01-14 17:05:35 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 1 + + src/vteseq.cc | 36 ++++++++++++++++-------------------- + 2 files changed, 17 insertions(+), 20 deletions(-) + +commit 1c5c5b50de8e6688863dc49c0755a509186d93ef +Author: Christian Persch +Date: 2016-01-14 17:05:35 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 1 + + src/vteseq.cc | 15 +++++++++------ + 2 files changed, 10 insertions(+), 6 deletions(-) + +commit 87d7f1701b6df48a01fc9ec7be1c7260dd3834d6 +Author: Christian Persch +Date: 2016-01-14 17:05:35 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 3 +++ + src/vteseq.cc | 31 +++++++++++++++++++++++-------- + 2 files changed, 26 insertions(+), 8 deletions(-) + +commit ae28a20a2f382274ee58c99b5b262039b80f494f +Author: Christian Persch +Date: 2016-01-14 17:05:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 1 + + src/vteseq.cc | 8 +++++++- + 2 files changed, 8 insertions(+), 1 deletion(-) + +commit 689a5845976e853d39760935510ac2c2daf8827c +Author: Christian Persch +Date: 2016-01-14 17:05:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 2 ++ + src/vteseq.cc | 16 ++++++++-------- + 2 files changed, 10 insertions(+), 8 deletions(-) + +commit 8ab57d45da737a7b3449167faeac99290aa5bff2 +Author: Christian Persch +Date: 2016-01-14 17:05:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 3 +++ + src/vteseq.cc | 31 +++++++++++++++---------------- + 2 files changed, 18 insertions(+), 16 deletions(-) + +commit 1e2baeac23520491a2acd3625373db5953ca9c6b +Author: Christian Persch +Date: 2016-01-14 17:05:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 4 ++++ + src/vteseq.cc | 38 +++++++++++++++++++++++++++++++------- + 2 files changed, 35 insertions(+), 7 deletions(-) + +commit 98da36037b6401b423a7f3bcc3c44c9ce20f14d5 +Author: Christian Persch +Date: 2016-01-14 17:05:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 3 +++ + src/vteseq.cc | 34 ++++++++++++++++++++++++---------- + 2 files changed, 27 insertions(+), 10 deletions(-) + +commit 8eea607c3526ee1aa1c32caac7027b69dab6dfcb +Author: Christian Persch +Date: 2016-01-14 17:05:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 1 + + src/vteseq.cc | 49 ++++++++++++++++++++++--------------------------- + 2 files changed, 23 insertions(+), 27 deletions(-) + +commit 63e3cee107d5fa69ff80acb22dfeb190eede5541 +Author: Christian Persch +Date: 2016-01-14 17:05:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 1 + + src/vteseq.cc | 23 +++++++++-------------- + 2 files changed, 10 insertions(+), 14 deletions(-) + +commit e923c0b1f58d80d878c379ffef2fc2288d246a1d +Author: Christian Persch +Date: 2016-01-14 17:05:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 1 + + src/vteseq.cc | 22 +++++++++------------- + 2 files changed, 10 insertions(+), 13 deletions(-) + +commit 2df2033319e88f9f205cdc283514a96095ca3bf9 +Author: Christian Persch +Date: 2016-01-14 17:05:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 1 + + src/vteseq.cc | 32 ++++++++++++++------------------ + 2 files changed, 15 insertions(+), 18 deletions(-) + +commit a9d5e7a070a18fe657eb30f804512ae3be1ddd2a +Author: Christian Persch +Date: 2016-01-14 17:05:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 4 +++- + src/vteseq.cc | 26 +++++++++++--------------- + 2 files changed, 14 insertions(+), 16 deletions(-) + +commit 3d65baaaf03e1fdd42ba73501ba22f5bc610bbb6 +Author: Christian Persch +Date: 2016-01-14 17:05:33 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vteinternal.hh | 2 ++ + src/vteseq.cc | 42 +++++++++++++++++++++--------------------- + 2 files changed, 23 insertions(+), 21 deletions(-) + +commit 74cf496f899a5fb7f8900d1e15f1ec7852dc6f89 +Author: Christian Persch +Date: 2016-01-14 17:05:33 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vtegtk.cc | 186 ++++++++++++++++++++++++++++------------------------- + src/vtegtk.hh | 10 +++ + src/vteinternal.hh | 12 ++++ + src/vteseq.cc | 126 ++++++++++++++++++------------------ + 4 files changed, 184 insertions(+), 150 deletions(-) + +commit 7c504396bb0c5dd87f3a348988a589782e7cd742 +Author: Christian Persch +Date: 2016-01-14 17:05:33 +0100 + + widget: Fix crash when destroyed while waiting for clipboard text + + When the terminal is destroyed before the result of the clipboard + request comes in, we would crash. Unforunately, there is no way + to cancel a pending request, so we need this elaborate setup. + + src/vte.cc | 24 ++++----------- + src/vteinternal.hh | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 94 insertions(+), 18 deletions(-) + +commit b77cec8080cdb14541cf106a5afe5bb89718f0b7 +Author: Christian Persch +Date: 2016-01-14 17:05:33 +0100 + + build: Use -fvisibility=hidden to control symbol visibility + + Use -fvisibility=hidden and explicitly mark the exported symbols + with __attribute__((__visibility__("default"))). + + configure.ac | 6 +++ + src/Makefile.am | 1 - + src/vte/vtedeprecated.h | 7 ++++ + src/vte/vteglobals.h | 4 ++ + src/vte/vtemacros.h | 2 + + src/vte/vtepty.h | 13 +++++- + src/vte/vteregex.h | 10 +++++ + src/vte/vteterminal.h | 94 +++++++++++++++++++++++++++++++++++++++--- + src/vte/vteversion.h.in | 5 +++ + src/vtetypebuiltins.h.template | 3 ++ + 10 files changed, 137 insertions(+), 8 deletions(-) + +commit b4f8cdcdfbbe4e1b4afe57721911c0bdc7a44f0d +Author: Christian Persch +Date: 2016-01-14 17:05:33 +0100 + + build: Give up on trying not to use libstdc++ + + src/Makefile.am | 10 ---------- + src/check-libstdc++.sh | 15 --------------- + 2 files changed, 25 deletions(-) + +commit 3e17cbf2d35cd4c64cd8af2944a49407834ab41b +Author: Christian Persch +Date: 2016-01-14 17:05:33 +0100 + + widget: Add CSS name for the terminal widget + + src/vtegtk.cc | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit ca705122f1638cbf8c4119ff6bfab7e974e01256 +Author: Christian Persch +Date: 2016-01-14 17:05:33 +0100 + + spawn: Don't allow G_SPAWN_LEAVE_DESCRIPTORS_OPEN flag + + If you do want to pass a FD to the child, use a child setup + function that unsets the FD_CLOEXEC flag. + + src/vte.cc | 10 ++++++---- + src/vtegtk.cc | 7 ++++--- + 2 files changed, 10 insertions(+), 7 deletions(-) + +commit 5680acc70fb10640ae32ee8be936cec1147dec9f +Author: Christian Persch +Date: 2016-01-14 17:05:33 +0100 + + lib: Improve smart_fd + + src/vtetypes.hh | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 7fdb3d136bde26a28d128eb1009eeccba69a4f4e +Author: Christian Persch +Date: 2015-12-26 21:56:28 +0100 + + regex: Require MULTILINE compile option + + Dingu match regexes should be compiled with MULTILINE option. + + src/app.vala | 7 +++++-- + src/vte.cc | 3 +-- + src/vteapp.c | 2 +- + src/vtegtk.cc | 2 ++ + 4 files changed, 9 insertions(+), 5 deletions(-) + +commit a65d7a5d3cc9d0da2b482228f875f90b7f7bff01 +Author: Christian Persch +Date: 2015-12-26 19:37:49 +0100 + + app: Don't add extra margins by default + + This is only useful to test that VteTerminal handles all offsets + correctly, but not for normal operation. So make it a cmdline option. + + src/app.vala | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +commit 0612f4005c711f7a4fe9133b9555a723689885f4 +Author: Christian Persch +Date: 2015-12-26 19:34:36 +0100 + + widget: Use a input-only window + + We don't need a output window, just an input window so we can handle events. + + https://bugzilla.gnome.org/show_bug.cgi?id=734920 + + src/app.vala | 5 +++ + src/vte.cc | 123 +++++++++++++++++++++++------------------------------ + src/vtegtk.cc | 33 +++++++++++++- + src/vteinternal.hh | 5 +++ + 4 files changed, 96 insertions(+), 70 deletions(-) + +commit 0f7b43b1fdc6844505dd9d847f590365c66804a8 +Author: Christian Persch +Date: 2015-12-26 19:34:36 +0100 + + regex: Fix match flags not to include MULTILINE + + G_REGEX_MULTILINE is a compile flag, and thus must be handled + by the caller, not vte. + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d84745204b9325f90fe3b5660d918cfd7b389780 +Author: Christian Persch +Date: 2015-12-26 12:27:22 +0100 + + regex: Use MULTILINE option and limit offset + + Since we now pass the whole text with an offset, instead of + only the current line like previously, we need to use the + MULTILINE option so that '^' works correctly; and we need + to limit the match offset so that we don't match beyond the + end of the line (but still can satisfy lookahead assertions). + + configure.ac | 2 +- + src/vte.cc | 6 ++++-- + src/vteregex.cc | 3 ++- + 3 files changed, 7 insertions(+), 4 deletions(-) + +commit c2a0b3e8bf1c1bfe8709565c3a1d6b099dec7464 +Author: Christian Persch +Date: 2015-12-26 12:27:22 +0100 + + app: Add tooltip with the regex compile error on the search entry + + When compiling the regex fails, set the error message as tooltip + on the search entry; when it succeeds, clear the tooltip. + + src/app.vala | 3 +++ + src/vteregex.cc | 4 ++-- + 2 files changed, 5 insertions(+), 2 deletions(-) + +commit 331eea79ec7011242e3cb07162cee4e67fdf95c4 +Author: Christian Persch +Date: 2015-12-26 12:27:22 +0100 + + regex: Fix pcre2_jit_compile return value check + + This returns 0 for success, and negative for failure. + + src/vteregex.cc | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 08a2fbb5e53b46ec2aaa4cc9e9af0fa0fb8b7044 +Author: Christian Persch +Date: 2015-12-26 12:27:22 +0100 + + regex: Always set the GError from the PCRE2 error + + Fix a thinko; PCRE2 does return positive and negative error codes. + + src/vte/vteenums.h | 2 +- + src/vteregex.cc | 16 ++++++---------- + 2 files changed, 7 insertions(+), 11 deletions(-) + +commit d046ae112f5ca93378c2146c1ea239bc63778364 +Author: Christian Persch +Date: 2015-12-26 12:27:22 +0100 + + widget: Correct end row in calls to get_text() + + We need to pass row+1 if we use -1 as end column to mean + 'all the text on the last row'. + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 63259c4fe2b5608a0a4236ed33cee706fcce4896 +Author: Christian Persch +Date: 2015-12-25 21:55:44 +0100 + + widget: Simplify coordinate handling + + Store the last mouse position only in view coordinates, and + convert to grid coordinates only on the few occasions we compare + to grid coordinates. Use view coordinates because we do want to + test the last position for being outside the viewable area. + + src/vte.cc | 75 +++++++++++++++++------------------------------------- + src/vteinternal.hh | 14 ++++------ + 2 files changed, 28 insertions(+), 61 deletions(-) + +commit a1c0ce708fcdb3b178aee5c212dc78725cab3c8d +Author: Christian Persch +Date: 2015-12-25 21:55:44 +0100 + + widget: Simplify coordinate handling + + src/vte.cc | 107 ++++++++++++++++++++++++----------------------------- + src/vteinternal.hh | 20 +++++----- + 2 files changed, 57 insertions(+), 70 deletions(-) + +commit 4a126221f0c25f16eba92a23c065d4966cb8b883 +Author: Christian Persch +Date: 2015-12-25 21:55:44 +0100 + + widget: Add function to translate event coords to confined grid coords + + src/vte.cc | 14 ++++++++++++++ + src/vteinternal.hh | 1 + + 2 files changed, 15 insertions(+) + +commit a0414b176add01e4e952484e9849ed934a03644f +Author: Christian Persch +Date: 2015-12-25 21:55:43 +0100 + + widget: Add function to check if grid coords are in scrollback + + src/vte.cc | 2 +- + src/vteinternal.hh | 4 +++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +commit 922527902b3c8fc138c9ac299088d996bde1d683 +Author: Christian Persch +Date: 2015-12-25 21:55:43 +0100 + + widget: Simplify coordinate handling + + src/vte.cc | 65 +++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 32 insertions(+), 33 deletions(-) + +commit 5ccafd65521621918e6ef671a4e055f1f39014d4 +Author: Christian Persch +Date: 2015-12-25 21:55:43 +0100 + + widget: Simplify coordinate handling + + src/vte.cc | 57 +++++++++++++++++++++++++-------------------------------- + 1 file changed, 25 insertions(+), 32 deletions(-) + +commit 722610356d11ad9e5d8fd8e529cc3114b547a5a2 +Author: Christian Persch +Date: 2015-12-25 21:55:43 +0100 + + widget: Correct coordinate check + + src/vte.cc | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit 5a1e0c6af9979eda66fd32cf125c1986f6259df9 +Author: Christian Persch +Date: 2015-12-25 21:55:43 +0100 + + widget: Simplify code + + src/vte.cc | 28 +++++++++++++--------------- + 1 file changed, 13 insertions(+), 15 deletions(-) + +commit aa6c2011a6383c751f25042ab7a1e5431c4982bb +Author: Christian Persch +Date: 2015-12-25 21:55:43 +0100 + + widget: Pass coordinates together + + src/vte.cc | 40 ++++++++++++++++++++-------------------- + src/vteinternal.hh | 13 +++++-------- + 2 files changed, 25 insertions(+), 28 deletions(-) + +commit db3a0f932206da30e26625580576e582a1bcecf0 +Author: Christian Persch +Date: 2015-12-25 21:55:43 +0100 + + widget: Store last mouse position coordinates together + + Use a vte::view::coords for this. + + src/vte.cc | 60 +++++++++++++++++++++++++----------------------------- + src/vteinternal.hh | 5 ++--- + 2 files changed, 30 insertions(+), 35 deletions(-) + +commit aac286e0d9a60bff805c0d6f568f2b67b6d853bc +Author: Christian Persch +Date: 2015-12-25 21:55:43 +0100 + + emulation: Remove extraneous code + + All callers of maybe_send_mouse_button() have already called + read_modifiers() on the event. + + src/vte.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit ca766131718a3a27cae93311e6042aa4450f4796 +Author: Christian Persch +Date: 2015-12-25 21:55:42 +0100 + + widget: Add helpers to convert coordinates + + Add helper functions to convert the event to grid and view coordinates, + to convert between grid and view coordinates, and to check if + grid and view coordinates are within the visible area. + + src/vte.cc | 121 ++++++++++++++++++++++++++++++++++++++++++++++------- + src/vteinternal.hh | 18 ++++++-- + 2 files changed, 121 insertions(+), 18 deletions(-) + +commit b09ed876b1ea1ceb24d7c33447c22816defd72fc +Author: Christian Persch +Date: 2015-12-25 21:55:42 +0100 + + build: Don't use -Waggregate-return for C++ + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 19fadfb9135935ae91c018e60e740ecec1ae5c9a +Author: Christian Persch +Date: 2015-12-25 21:55:42 +0100 + + widget: Transform expose rectangles to view coordinates + + Simplify the calculations by just translating the region to view + coordinates instead of adding/subtracting the padding everywhere. + + src/vte.cc | 126 ++++++++++++++++++++++++----------------------------- + src/vteinternal.hh | 3 +- + 2 files changed, 58 insertions(+), 71 deletions(-) + +commit 3801e8d5b0cc3643ea0406aa9f0903fbc80882bb +Author: Christian Persch +Date: 2015-12-25 21:55:42 +0100 + + widget: Store dirty rects in view coordinates + + Only add padding when doing the actual invalidate. + + src/vte.cc | 52 ++++++++++++++++++++-------------------------------- + src/vteinternal.hh | 5 ++++- + 2 files changed, 24 insertions(+), 33 deletions(-) + +commit 851e34347b0319133041c63138186c8ce3e37f48 +Author: Christian Persch +Date: 2015-12-22 22:47:13 +0100 + + widget: Inline a one-liner in the only caller + + src/vte.cc | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +commit 379891460a69936260b0e5de90e1f264d9f32264 +Author: Christian Persch +Date: 2015-12-22 22:47:13 +0100 + + widget: Store dirty rectangles directly + + Each cairo_region_t in the m_update_regions list was created to contain + only one rectangle. To be more efficient, simply store the dirty rectangles + in an array and create the region from it only when doing the invalidate. + + src/vte.cc | 62 ++++++++++++++++++++++++------------------------------ + src/vteinternal.hh | 5 ++--- + 2 files changed, 30 insertions(+), 37 deletions(-) + +commit cef8cef020fdbd61f602a79010521903476085b8 +Author: Christian Persch +Date: 2015-12-22 22:47:13 +0100 + + lib: Factor out a common code path + + In the update_repeat_timeout() callback, the update_regions==NULL + condition was always satisfied because of the preceding update_regions() + call, so this does not change the behaviour. + + src/vte.cc | 112 +++++++++++++++++++++++++++---------------------------------- + 1 file changed, 49 insertions(+), 63 deletions(-) + +commit de8795c79aef7804c0aa775d22ec91db41fb4643 +Author: Christian Persch +Date: 2015-12-22 22:47:13 +0100 + + lib: Factor out a common code path + + This was copied 3 times, WTF, with an inexplicable difference in the middle + (omission of the emit_adjustment_changed() call). + + src/vte.cc | 97 +++++++++++++++++++++++++------------------------------------- + 1 file changed, 39 insertions(+), 58 deletions(-) + +commit 4016dd5fcb5fed32a8255818e2edbc25744d017c +Author: Christian Persch +Date: 2015-12-22 22:47:13 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 32 ++++++++++++++++---------------- + src/vteinternal.hh | 2 ++ + 2 files changed, 18 insertions(+), 16 deletions(-) + +commit 48719e84812f18f16418498ce9c37f542a056b23 +Author: Christian Persch +Date: 2015-12-22 22:47:13 +0100 + + widget: Fix condition to start scrolling down + + This wasn't updated properly when introducing smooth scroll. + + src/vte.cc | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit a202fa4ada43bd4383a4e4ca6606be04ed8fb9d1 +Author: Christian Persch +Date: 2015-12-22 22:47:13 +0100 + + widget: Store the usable view area + + src/vte.cc | 21 ++++++++------------- + src/vteinternal.hh | 17 +++++++++++++---- + src/vteseq.cc | 4 ++-- + src/vtetypes.cc | 8 ++++++++ + src/vtetypes.hh | 21 +++++++++++++++++++-- + 5 files changed, 50 insertions(+), 21 deletions(-) + +commit 58e4b6f105be0694d9f35b76299a06dbf8939b55 +Author: Christian Persch +Date: 2015-12-22 22:47:13 +0100 + + app: Show context menu also when the Menu key is pressed + + src/app.vala | 24 ++++++++++++++++++++---- + 1 file changed, 20 insertions(+), 4 deletions(-) + +commit 16e7d6bb139cc37c9ccdd6124e18752f53d50ed5 +Author: Christian Persch +Date: 2015-12-15 20:38:42 +0100 + + widget: Change last-line newline behaviour of get_text() + + To get all the text on the last line to the right, you can either + pass m_column_count (or MAXLONG), *or* add 1 to the end row, and + pass -1 as last column. Make it so that the difference between these + is that the former does *not* append a final newline character, + while the latter does append a final newline character. + + This fixes a frequent assert in vte_terminal_accessible_text_scrolled(), + but the assertion in that function will need to be fixed, too, since + it appears the assert can be triggered in other ways too. + + https://bugzilla.gnome.org/show_bug.cgi?id=759319 + + src/vte.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 0ecfbc1c05960df2878360ff78add2f496d555a0 +Author: Christian Persch +Date: 2015-12-15 20:38:41 +0100 + + widget: Simplify background handling + + src/vte.cc | 59 ++++++------------------------------------------------ + src/vtedraw.cc | 46 ++++++++++++------------------------------ + src/vtedraw.hh | 6 ++---- + src/vteinternal.hh | 2 -- + 4 files changed, 21 insertions(+), 92 deletions(-) + +commit 6616a5fd135fa102b7847691f32f8987b8741593 +Author: Christian Persch +Date: 2015-12-15 20:38:41 +0100 + + draw: Remove extraneous functions + + src/vte.cc | 92 +++++++++++++++++----------------------------------------- + src/vtedraw.cc | 13 +++++++++ + src/vtedraw.hh | 5 ++++ + 3 files changed, 45 insertions(+), 65 deletions(-) + +commit bd781d1224b5988c8e90d5b960b07bfee647b127 +Author: Christian Persch +Date: 2015-12-15 20:38:41 +0100 + + widget: Simplify drawing code by translating the cairo context by the padding + + Instead of adding the padding everywhere, just translate the cairo context, + once. + + src/vte.cc | 51 +++++++++++++++++++++++---------------------------- + 1 file changed, 23 insertions(+), 28 deletions(-) + +commit 992ad4dcab54fe985dc65579abac9362f23eaafc +Author: Christian Persch +Date: 2015-12-15 20:38:41 +0100 + + widget: Fix drawing area calculation + + It needs to take into account top *and* bottom padding. + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 09ffddeb138c26b99de919c8c796ae2c2bdcb666 +Author: Christian Persch +Date: 2015-12-15 20:38:41 +0100 + + Revert "build: Fix the build with --disable-debug" + + This reverts commit 413c9920a004c8f3f0907ddcfb7ca6bd004c21d7. + + src/vtetypes.cc | 20 ++------------------ + src/vtetypes.hh | 14 ++++++++++---- + 2 files changed, 12 insertions(+), 22 deletions(-) + +commit 7c76dbea6329bb79c1ca3c70a8fdc0595f50d98e +Author: Christian Persch +Date: 2015-12-15 20:38:41 +0100 + + debug: Completely eliminate debug code if --disable-debug + + src/debug.h | 4 ++++ + 1 file changed, 4 insertions(+) + +commit b7f1c94646a84795740d8b59deb7086936190b60 +Author: Christian Persch +Date: 2015-12-15 20:38:41 +0100 + + widget: Cache the allocation + + src/vte.cc | 34 ++++++++++++++++------------------ + src/vteinternal.hh | 6 ++++++ + src/vtetypes.hh | 2 +- + 3 files changed, 23 insertions(+), 19 deletions(-) + +commit e10e5086d64e3d63e0eb8320564d06f36738f25e +Author: Christian Persch +Date: 2015-12-15 20:38:41 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 37 ++++++++++++++++++------------------- + src/vteinternal.hh | 2 ++ + 2 files changed, 20 insertions(+), 19 deletions(-) + +commit 26aa0bc5c766633df54004592fd26f629d55e514 +Author: Christian Persch +Date: 2015-12-15 20:38:40 +0100 + + app: Also JIT the dingu regexes + + src/app.vala | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 0e08c0961ef6938c2b35564ce3543a02eb472e20 +Author: Christian Persch +Date: 2015-12-13 19:08:23 +0100 + + pty: Remove openpty code path + + Apparently all the BSDs do posix_openpt now, so there's no need for + a separate codepath using openpty() anymore. + + configure.ac | 15 ++------------- + src/Makefile.am | 1 - + src/pty.cc | 46 ---------------------------------------------- + 3 files changed, 2 insertions(+), 60 deletions(-) + +commit e22834288338215033e5d5ce74b16194d4a82065 +Author: Christian Persch +Date: 2015-12-13 19:08:23 +0100 + + app: Don't warn when JITing fails because PCRE2 build doesn't support JITing + + src/app.vala | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit d69772604caf6e722e539c66d9e8787161af2096 +Author: Christian Persch +Date: 2015-12-13 19:08:23 +0100 + + widget: Remove extraneous realized checks + + Except for focus change events, all gtk widget events are only emitted + on realized widgets. + + src/vte.cc | 35 ++++++++++++----------------------- + 1 file changed, 12 insertions(+), 23 deletions(-) + +commit 69d50458cd7d04225bc782ea629635a3af4dbe12 +Author: Christian Persch +Date: 2015-12-13 19:08:23 +0100 + + draw: Remove unused struct element + + src/vtedraw.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit ec28a7535f45f525ea966cad28a594a01daf4236 +Author: Christian Persch +Date: 2015-12-13 19:08:23 +0100 + + draw: Pass the known string length instead of -1 + + src/vtedraw.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit dc5ccaa3313e0bb5936d57163402e293eef5dcce +Author: Christian Persch +Date: 2015-12-13 19:08:23 +0100 + + draw: Remove unused function + + src/vtedraw.cc | 6 ------ + src/vtedraw.hh | 2 -- + 2 files changed, 8 deletions(-) + +commit 8368203cfd34846b06d7a65ad797283bf12cb9c5 +Author: Christian Persch +Date: 2015-12-13 19:08:23 +0100 + + draw: Rename vtedraw header file + + src/Makefile.am | 2 +- + src/vte-private.h | 2 +- + src/vtedraw.cc | 2 +- + src/{vtedraw.h => vtedraw.hh} | 0 + 4 files changed, 3 insertions(+), 3 deletions(-) + +commit 416283b820996e7be79cca03ded3834edace70b6 +Author: Christian Persch +Date: 2015-12-13 19:08:22 +0100 + + draw: Remove unused defines and move private defines to the .cc file + + src/vtedraw.cc | 10 ++++++++++ + src/vtedraw.h | 15 --------------- + 2 files changed, 10 insertions(+), 15 deletions(-) + +commit 8064909df944fc88c594674b363d3870c942cf49 +Author: Christian Persch +Date: 2015-12-12 17:23:41 +0100 + + pty: Add non-linux fallbacks + + Apparently BSDs don't allow O_NONBLOCK in posix_openpt, so fall back + to trying without that and applying the flag afterwards. + + https://bugzilla.gnome.org/show_bug.cgi?id=759346 + + src/pty.cc | 35 +++++++++++++++++++++++++++-------- + 1 file changed, 27 insertions(+), 8 deletions(-) + +commit 1867c0f7aa10b2d8e09fb676fd6c684fe619485e +Author: Christian Persch +Date: 2015-12-12 17:23:41 +0100 + + pty: Skip SIGKILL and SIGSTOP + + src/pty.cc | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit 413c9920a004c8f3f0907ddcfb7ca6bd004c21d7 +Author: Christian Persch +Date: 2015-12-10 21:08:45 +0100 + + build: Fix the build with --disable-debug + + https://bugzilla.gnome.org/show_bug.cgi?id=759314 + + src/vtetypes.cc | 20 ++++++++++++++++++-- + src/vtetypes.hh | 14 ++++---------- + 2 files changed, 22 insertions(+), 12 deletions(-) + +commit 97f645f2329a1ee9b2bf97454c4122ef8d382f61 +Author: Christian Persch +Date: 2015-12-10 18:42:18 +0100 + + pty: Use NSIG instead of SIGUNUSED + + ... and with a fallback to 8 * sizeof(sigset_t) if NSIG is undefined. + + https://bugzilla.gnome.org/show_bug.cgi?id=759196 + + src/pty.cc | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit 831ef8d1915a26303e0bb77ab4fbd0850ec022b1 +Author: Christian Persch +Date: 2015-12-10 18:42:18 +0100 + + widget: Simplify match region handling + + Use a vte::grid::span to hold the match region. + + src/vte.cc | 212 ++++++++++++++++++++++------------------------------- + src/vteinternal.hh | 21 +++--- + src/vtetypes.hh | 3 + + 3 files changed, 103 insertions(+), 133 deletions(-) + +commit d698ede30f5daa2a3bea125f305e6bbff650ab73 +Author: Christian Persch +Date: 2015-12-10 18:42:18 +0100 + + lib: Add to_string() debug functions for helper classes + + Plain old char* buffers, not an overloaded operator<< since we + still don't depend on libstdc++. + + src/vtetypes.cc | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vtetypes.hh | 15 ++++++++++++ + 2 files changed, 87 insertions(+) + +commit f85d4fcf75539bbf34d40f90f877e90206d41a1e +Author: Christian Persch +Date: 2015-12-10 18:42:18 +0100 + + app: Add sanity checks + + src/app.vala | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 1e564f955fef9c82bc59e399f9dcd53ea2b72cac +Author: Ting-Wei Lan +Date: 2015-12-09 01:21:26 +0800 + + Replace EBADFD with EBADF + + Using EBADF is more portable and correct because EBADFD means a file + descriptor in bad state, not an invalid file descriptor. + + https://bugzilla.gnome.org/show_bug.cgi?id=759197 + + src/pty.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bea04b972649524c06dcf57e5c77a87de50edfa5 +Author: Christian Persch +Date: 2015-12-07 22:51:08 +0100 + + app: Add multi-window mode + + src/app.vala | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +commit 986a71c1685709a5547932ac1872a0b5ca30b63e +Author: Christian Persch +Date: 2015-12-07 22:51:08 +0100 + + app: Remove useless parameter + + The non-DEFAULT PTY flags are unused since the removal of g-p-h. + + src/app.vala | 20 ++++---------------- + 1 file changed, 4 insertions(+), 16 deletions(-) + +commit 648b13850e4fc5e2498e40e068c3b13f4aad9612 +Author: Christian Persch +Date: 2015-12-07 22:51:08 +0100 + + app: Launch the child process on idle + + src/app.vala | 27 ++++++++++++++++++--------- + 1 file changed, 18 insertions(+), 9 deletions(-) + +commit 171b8aae9e8cd9555ad86d8a293e50f5ee74cd61 +Author: Christian Persch +Date: 2015-12-07 22:51:08 +0100 + + pty: Simplify signal handling + + Unblock all signals at the start of the child setup, and + iterate through the signals by number instead of the #ifdef + hell. + + src/pty.cc | 119 ++++++++----------------------------------------------------- + 1 file changed, 14 insertions(+), 105 deletions(-) + +commit 4ed174cefead28e21a5ce52935023d88cfbf4fff +Author: Christian Persch +Date: 2015-12-07 22:51:08 +0100 + + pty: Defer grantpt/unlockpt to the child setup + + src/pty.cc | 28 +++++++++++++--------------- + 1 file changed, 13 insertions(+), 15 deletions(-) + +commit 98c7df3d0138d9b94cec02de90d03f94999d6561 +Author: Christian Persch +Date: 2015-12-07 22:51:08 +0100 + + build: Use LT_LANG + + configure.ac | 2 ++ + 1 file changed, 2 insertions(+) + +commit 2edd2780f4906841152e2fcb38777d32a373fadd +Author: Christian Persch +Date: 2015-12-07 22:51:08 +0100 + + build: Use AC_SYS_LARGEFILE + + configure.ac | 2 ++ + 1 file changed, 2 insertions(+) + +commit e8ada0cb8ef8fc04b5545284084758f60879e8cc +Author: Christian Persch +Date: 2015-12-07 22:51:07 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 54 ++++++++++++++++++++++++++---------------------------- + src/vteinternal.hh | 4 ++++ + 2 files changed, 30 insertions(+), 28 deletions(-) + +commit 37a23b6439bf22f1e0d24f25dc91f58b1561cfee +Author: Timm Bäder +Date: 2015-12-06 19:49:39 +0100 + + widget: Use the style context's state instead of the widget's state + + https://bugzilla.gnome.org/show_bug.cgi?id=759054 + + src/vte.cc | 11 ++++++++--- + src/vtegtk.cc | 4 ++-- + 2 files changed, 10 insertions(+), 5 deletions(-) + +commit 8ae65c84b2378d3571f8c732c795d0f8fda04218 +Author: Christian Persch +Date: 2015-12-06 19:49:38 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 71 ++++++++++++++++++++++++++++++------------------------ + src/vteinternal.hh | 14 +++++++++++ + 2 files changed, 53 insertions(+), 32 deletions(-) + +commit 397e0db98913c0f1634f39f2d3174e2800a840cc +Author: Christian Persch +Date: 2015-12-06 19:49:38 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 15 ++++++++------- + src/vteinternal.hh | 3 +++ + 2 files changed, 11 insertions(+), 7 deletions(-) + +commit f740a8a1753ae965afb5b417dc1b007ff1ce62ed +Author: Christian Persch +Date: 2015-12-06 19:49:38 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 12 +++++------- + src/vteinternal.hh | 3 +++ + 2 files changed, 8 insertions(+), 7 deletions(-) + +commit a10df2c30ad14dbd69e495387e22f31568201d6a +Author: Christian Persch +Date: 2015-12-06 19:49:38 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 24 ++++++++++-------------- + src/vteinternal.hh | 3 +++ + 2 files changed, 13 insertions(+), 14 deletions(-) + +commit b91cb1904df389bc5459608478bdffb2d0a62846 +Author: Christian Persch +Date: 2015-12-06 19:49:38 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 25 +++++++++++++------------ + src/vteinternal.hh | 6 ++++++ + 2 files changed, 19 insertions(+), 12 deletions(-) + +commit 029acfd038eb204ff5ef9f856c2b9ad681a23fe6 +Author: Christian Persch +Date: 2015-12-06 19:49:38 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 97 ++++++++++++++++++++++++++++-------------------------- + src/vteinternal.hh | 9 +++++ + 2 files changed, 59 insertions(+), 47 deletions(-) + +commit fbe3672438c7275d8f4a3c217e755e6a89c63fc7 +Author: Christian Persch +Date: 2015-12-06 19:49:38 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 46 +++++++++++++++++++++++----------------------- + src/vteinternal.hh | 1 + + 2 files changed, 24 insertions(+), 23 deletions(-) + +commit e21362bc62731b3ec1801c967937602551106876 +Author: Christian Persch +Date: 2015-12-06 19:49:37 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 59 +++++++++++++++++++++++++++--------------------------- + src/vteinternal.hh | 1 + + 2 files changed, 31 insertions(+), 29 deletions(-) + +commit 3dba92e16929a05503df672a8b568981b547730a +Author: Christian Persch +Date: 2015-12-06 19:49:37 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 56 ++++++++++++++++++++++++------------------------------ + src/vteinternal.hh | 1 + + 2 files changed, 26 insertions(+), 31 deletions(-) + +commit 59dd40862aa97380b694820c00abe738c5901c5e +Author: Christian Persch +Date: 2015-12-06 19:49:37 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 40 +++++++++++++++++++--------------------- + src/vteinternal.hh | 3 +++ + 2 files changed, 22 insertions(+), 21 deletions(-) + +commit 242f9db8903505524193f09ae6dedfc2e077a7f0 +Author: Christian Persch +Date: 2015-12-06 19:49:37 +0100 + + widget: Add stubs for IM surrounding text callbacks + + https://bugzilla.gnome.org/show_bug.cgi?id=726191 + + src/vte.cc | 42 ++++++++++++++++++++++++++++++++++++++++-- + src/vteinternal.hh | 3 +++ + 2 files changed, 43 insertions(+), 2 deletions(-) + +commit 9d96d1473d6817b4fabd75d4a78aaea8244c99f8 +Author: Christian Persch +Date: 2015-12-06 19:49:37 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 33 +++++++++++++++++---------------- + src/vteinternal.hh | 1 + + 2 files changed, 18 insertions(+), 16 deletions(-) + +commit eb5fa93f3e929ab29906e11ccfb784610a98c820 +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 1 - + src/vte.cc | 6 ------ + src/vteaccess.cc | 4 ++-- + 3 files changed, 2 insertions(+), 9 deletions(-) + +commit 3696348c0b9c7d60caf7302411ec4c0298f56e57 +Author: Christian Persch +Date: 2015-12-04 20:10:04 +0100 + + widget: Rework get_text() + + Ignore the passed VteSelectionFunc callback and just always use + the whole passed range. + + src/vte.cc | 75 +++++++++++++++++++----------------------------------- + src/vteaccess.cc | 1 - + src/vtegtk.cc | 22 +++++++++++++--- + src/vteinternal.hh | 12 ++------- + 4 files changed, 47 insertions(+), 63 deletions(-) + +commit e19adc1a78e2c6e3bf4dd24a89849d55c7283342 +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 15 ++++++++------- + src/vteinternal.hh | 2 ++ + 2 files changed, 10 insertions(+), 7 deletions(-) + +commit 871a363c3e7721f444b4eab4657455aa02aac49a +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 71 +++++++++++++++++++++++++----------------------------- + src/vteinternal.hh | 11 ++++++++- + 2 files changed, 43 insertions(+), 39 deletions(-) + +commit ac653330b065b26c0be74429bfe7e15ee8f565b3 +Author: Christian Persch +Date: 2015-12-01 19:36:34 +0100 + + widget: Add function to get the selected text + + src/vte.cc | 34 ++++++++++++++++------------------ + src/vteinternal.hh | 2 ++ + 2 files changed, 18 insertions(+), 18 deletions(-) + +commit 94fc08419b059e264adfe7882da81b79815d0677 +Author: Christian Persch +Date: 2015-12-01 13:55:49 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 57 ++++++++++++++++++++++++++++++++---------------------- + src/vteinternal.hh | 4 ++++ + 2 files changed, 38 insertions(+), 23 deletions(-) + +commit 8d63df14a3336c5ae9fc81374d0a9b66716256a1 +Author: Christian Persch +Date: 2015-12-01 13:52:02 +0100 + + widget: Fix a comment + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 235eb0cbc11e306ddaf6468cbe6e2f89dcf39dd2 +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 122 +++++++++++++++++++++++++++++------------------------ + src/vteinternal.hh | 1 + + 2 files changed, 68 insertions(+), 55 deletions(-) + +commit ab45dfeeb0d28c9467e89036dfaefcd5d56bddb3 +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 40 +++++++++++++++------------------------- + 1 file changed, 15 insertions(+), 25 deletions(-) + +commit 9ed8be05c4730ff836ae42e26bf0b0e5abf5b214 +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 93 +++++++++++++++++++++++++++++++++++------------------- + src/vteinternal.hh | 5 +++ + 2 files changed, 66 insertions(+), 32 deletions(-) + +commit 76b955db2ca84787947089073d8d2ae445c0c7ae +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 32 +++++++++++++++----------------- + src/vteinternal.hh | 2 ++ + 2 files changed, 17 insertions(+), 17 deletions(-) + +commit 23ad7e09f95befb37e8a4438d4cf8ef09b92cc8a +Author: Christian Persch +Date: 2015-11-30 20:37:26 +0100 + + widget: Remove unused encoding parameter + + This is only ever used with "UTF-8", so there's no need for this parameter. + + src/vte.cc | 22 +++++++--------------- + src/vteinternal.hh | 3 +-- + 2 files changed, 8 insertions(+), 17 deletions(-) + +commit a549ce853b6ab27a3232fb0d13c4424f1f5d259c +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 43 +++++++++++++++++++++---------------------- + src/vteinternal.hh | 5 +++++ + 2 files changed, 26 insertions(+), 22 deletions(-) + +commit 845d8642d56ecd8b7cb25b245c76a1c324ba1a54 +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 108 +++++++++++++++++++++++++++++------------------------ + src/vteinternal.hh | 5 +++ + 2 files changed, 65 insertions(+), 48 deletions(-) + +commit 9f45ee1539d2a68a6c6e09146b3561105af61556 +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 14 +++++++------- + src/vteinternal.hh | 2 ++ + 2 files changed, 9 insertions(+), 7 deletions(-) + +commit 50aee40af7d16c2bec82f4f8bcdd259b6913c541 +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 63 ++++++++++++++++++++++++++++++------------------------ + src/vteinternal.hh | 3 +++ + 2 files changed, 38 insertions(+), 28 deletions(-) + +commit 5fc39f66440567e41cf0c0aaf8797de334c8cc00 +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 2 -- + src/vte.cc | 68 +++++++++++++++++++++++++++--------------------------- + src/vteinternal.hh | 3 +++ + src/vteseq.cc | 4 ++-- + 4 files changed, 39 insertions(+), 38 deletions(-) + +commit 6c561ca49efa6281f591a06ce77915c6210b7d8e +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 17 +++++------------ + src/vteinternal.hh | 2 ++ + 2 files changed, 7 insertions(+), 12 deletions(-) + +commit 55fe25a20bacad07dea308507689e5e2552af797 +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 19 +++++++++++++------ + src/vteinternal.hh | 1 + + 2 files changed, 14 insertions(+), 6 deletions(-) + +commit 98d51c8212fbb147a17b1ef9935e3bea29494515 +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 17 +++++++++-------- + src/vteinternal.hh | 4 ++++ + src/vteseq.cc | 8 ++++---- + 3 files changed, 17 insertions(+), 12 deletions(-) + +commit 84db51b761641c5647eb29efd7c4f67873de2a4d +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 98 +++++++++++++++++++++++++++++++----------------------- + src/vteinternal.hh | 6 +++- + 2 files changed, 61 insertions(+), 43 deletions(-) + +commit eb7fd88bdf596ac5dc5aaa5c36a2f9af15dbaeee +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 152 ++++++++++++++++++++++++++--------------------------- + src/vteinternal.hh | 7 +++ + 2 files changed, 83 insertions(+), 76 deletions(-) + +commit 9d6c04de35b5f6b0d1a1f7ecaf18c36bf14c8c5e +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Allow calling get_char_width/height on unrealized widget + + This isn't really ok, but somehow it's happening in gnome-terminal. + + https://bugzilla.gnome.org/show_bug.cgi?id=758841 + + src/vtegtk.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit 186b4f6a56f78f915ac24d43785aa6527567471b +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 1 - + src/vte.cc | 10 ++++------ + src/vteinternal.hh | 2 ++ + src/vteseq.cc | 4 ++-- + 4 files changed, 8 insertions(+), 9 deletions(-) + +commit 857961e340df503522ee2d1082520dbf715f76fd +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + a11y: Remove extraneous copying of a long-ish string + + Add a variant of ::get_text that returns the GString it uses internally + anyway, instead of returning the text, and creating a new GString for + the a11y layer. + + src/vte.cc | 51 +++++++++++++++++++++++++++++++++++++++++---------- + src/vteaccess.cc | 18 +++++------------- + src/vteinternal.hh | 31 +++++++++++++++++++++++-------- + 3 files changed, 69 insertions(+), 31 deletions(-) + +commit efea3241838985c0d2c5da4c796c94fa65bc1941 +Author: Christian Persch +Date: 2015-11-30 17:23:34 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 25 -------- + src/vte.cc | 182 ++++++++++++++++++++++++++--------------------------- + src/vteaccess.cc | 20 +++--- + src/vtegtk.cc | 37 +++++------ + src/vteinternal.hh | 25 ++++++++ + 5 files changed, 139 insertions(+), 150 deletions(-) + +commit 8ad4cadc7819f28909cf9648780f68028f0d570e +Author: Christian Persch +Date: 2015-11-29 20:57:55 +0100 + + pty: Factor out common code + + Both BSD openpty() opened and foreign FD cases need all three of these + calls, so factor them out into a separate function. + + src/pty.cc | 77 ++++++++++++++++++++++++++------------------------------------ + 1 file changed, 32 insertions(+), 45 deletions(-) + +commit aaa1149814aa703824551cbabaae72327ff569a8 +Author: Christian Persch +Date: 2015-11-29 20:57:55 +0100 + + pty: Use smart FD helper class + + Implicitly clean up on failure. + + src/pty.cc | 39 +++++++++++++++------------------------ + 1 file changed, 15 insertions(+), 24 deletions(-) + +commit 2aa91abdd34ef884430ae3d7de11ef6e198e0adf +Author: Christian Persch +Date: 2015-11-29 20:57:55 +0100 + + lib: Add smart FD helper class + + Add class that closes the FD in the destructor. + + src/vtetypes.cc | 24 ++++++++++++++++++++++++ + src/vtetypes.hh | 21 +++++++++++++++++++++ + 2 files changed, 45 insertions(+) + +commit ce8fc367e8c2f947d377a3258bd1b25435cd1c72 +Author: Christian Persch +Date: 2015-11-29 20:57:55 +0100 + + pty: Use helper class to restore errno + + src/pty.cc | 56 ++++++++++++++++++-------------------------------------- + src/vtetypes.cc | 12 ++++++++++++ + src/vtetypes.hh | 14 ++++++++++++++ + 3 files changed, 44 insertions(+), 38 deletions(-) + +commit 9d93a052275e9d1315dd25d65e85af584be1220a +Author: Christian Persch +Date: 2015-11-29 20:57:55 +0100 + + pty: Simplify code + + https://bugzilla.gnome.org/show_bug.cgi?id=747046 + + src/pty.cc | 209 +++++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 112 insertions(+), 97 deletions(-) + +commit 3816196e56a750888425e1460f1e4077c5a92dfa +Author: Christian Persch +Date: 2015-11-29 20:57:55 +0100 + + pty: Also set packet mode on foreign PTY + + src/pty.cc | 39 ++++++++++++++++++++++++--------------- + 1 file changed, 24 insertions(+), 15 deletions(-) + +commit 4d4fd1ed25816781e4f72ddd3f78eb0ca9073bf2 +Author: Christian Persch +Date: 2015-11-29 20:57:55 +0100 + + pty: Don't unset O_NONBLOCK and then set it again + + We were unsetting O_NONBLOCK on the PTY master's FD and then + setting it again. Instead, just always set the flag. Fixes a FIXME. + + https://bugzilla.gnome.org/show_bug.cgi?id=747046 + + src/pty.cc | 59 ++++++++++++++++++++++++++++++----------------------------- + src/vte.cc | 11 ++++------- + 2 files changed, 34 insertions(+), 36 deletions(-) + +commit c7071e819b20f22cf4ec2b7abe6da1f49c6ceaed +Author: Christian Persch +Date: 2015-11-29 20:57:55 +0100 + + pty: Small code cleanup + + Just put the code at the only call site instead of in a separate function. + + https://bugzilla.gnome.org/show_bug.cgi?id=747046 + + src/pty.cc | 44 ++++++++++++-------------------------------- + 1 file changed, 12 insertions(+), 32 deletions(-) + +commit d32fc8ffde983aeb31e9394d5a5e75b4df43a92d +Author: Christian Persch +Date: 2015-11-29 20:57:54 +0100 + + pty: Use FD_CLOEXEC when opening the PTY master + + https://bugzilla.gnome.org/show_bug.cgi?id=747046 + + src/pty.cc | 73 ++++++++++++++++++++++++++++++++++++++++++++++---------------- + 1 file changed, 55 insertions(+), 18 deletions(-) + +commit 33361f1ec6e7d19a550f69c009fae9de88051646 +Author: Christian Persch +Date: 2015-11-29 20:57:54 +0100 + + pty: Simplify acquiring a new PTY master + + All supported OSes either use openpty (BSDs) or have posix_openpt + (linux, illumos). So there is no need to offer a fallback to grantpt(3) + or to opening /dev/ptmx directly. + + https://bugzilla.gnome.org/show_bug.cgi?id=747046 + + configure.ac | 2 +- + src/pty.cc | 20 ++++---------------- + 2 files changed, 5 insertions(+), 17 deletions(-) + +commit da1069a7efd6aed57cb8255a75a3e79410615a6e +Author: Christian Persch +Date: 2015-11-29 20:57:54 +0100 + + pty: Simplify unlockpt call + + There is no need to offer a fallback to ioctl(TIOCSPTLCK) since + all supported OSes either don't use this code (BSDs) or have + unlockpt(3) (linux, illumos). + + https://bugzilla.gnome.org/show_bug.cgi?id=747046 + + src/pty.cc | 66 ++++++++++++-------------------------------------------------- + 1 file changed, 12 insertions(+), 54 deletions(-) + +commit 5a1b8bef8b1416948ce83e12bcd89f2a653a7549 +Author: Christian Persch +Date: 2015-11-29 20:57:54 +0100 + + pty: Simplify ptsname call + + There's no need to use ptsname_r here or offer a fallback to + ioctl(TIOCGPTN), since all supported OSes (linux, BSDs, illumos) + have ptsname(3). + + https://bugzilla.gnome.org/show_bug.cgi?id=747046 + + src/pty.cc | 71 +++++--------------------------------------------------------- + 1 file changed, 5 insertions(+), 66 deletions(-) + +commit b59d76a5073d789f2f948cf928e883cb70cc8a75 +Author: Christian Persch +Date: 2015-11-29 20:57:54 +0100 + + pty: Always acquire the child FD by name + + This saves one file descriptor per terminal in gnome-terminal for the + case where we open the PTY master with BSD openpty(). + + src/pty.cc | 105 ++++++++++++++++++------------------------------------------- + 1 file changed, 30 insertions(+), 75 deletions(-) + +commit 3720b4d27a1d79247db9e368c09572beb42580b1 +Author: Egmont Koblinger +Date: 2015-11-29 20:57:54 +0100 + + pty: Use packet mode on the PTY + + This allows us to get informed when scroll lock changes. + + https://bugzilla.gnome.org/show_bug.cgi?id=755371 + + src/pty.cc | 26 +++++++++++++++++++++++++ + src/vte.cc | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++--- + src/vteinternal.hh | 6 +++++- + 3 files changed, 84 insertions(+), 4 deletions(-) + +commit 280aa3be8175421d9982bb3b442472a4bef511ea +Author: Christian Persch +Date: 2015-11-29 20:57:54 +0100 + + Revert "pty: Use packet mode on the PTY" + + This reverts commit 512b3d5cf8165ba599e7ba60a0054dcaac9a71f7. + + src/pty.cc | 26 ------------------------- + src/vte.cc | 56 +++--------------------------------------------------- + src/vteinternal.hh | 6 +----- + 3 files changed, 4 insertions(+), 84 deletions(-) + +commit 36c8284cfe0ddf21affaaaeb33ded32f4a1048ac +Author: Christian Persch +Date: 2015-11-29 20:57:54 +0100 + + Revert "pyt: Fix syntax error due missing bracket" + + This reverts commit 1e455473a45ff1a03c0444345b1017ac078f9778. + + src/pty.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1e455473a45ff1a03c0444345b1017ac078f9778 +Author: Rico Tzschichholz +Date: 2015-11-29 09:45:16 +0100 + + pyt: Fix syntax error due missing bracket + + Introduced with 512b3d5cf8165ba599e7ba60a0054dcaac9a71f7 + + src/pty.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 512b3d5cf8165ba599e7ba60a0054dcaac9a71f7 +Author: Egmont Koblinger +Date: 2015-11-28 22:58:33 +0100 + + pty: Use packet mode on the PTY + + This allows us to get informed when scroll lock changes. + + https://bugzilla.gnome.org/show_bug.cgi?id=755371 + + src/pty.cc | 26 +++++++++++++++++++++++++ + src/vte.cc | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++--- + src/vteinternal.hh | 6 +++++- + 3 files changed, 84 insertions(+), 4 deletions(-) + +commit 3691ae3952062cba10beb5166559fba042a9adb3 +Author: Christian Persch +Date: 2015-11-28 22:58:33 +0100 + + Revert "pty: Use packet mode on the PTY" + + This reverts commit 06e794c1961195633ba80951ff4771be8e794cf4 since it + broke when opening the PTY with openpty. + + src/pty.cc | 14 -------------- + src/vte.cc | 56 +++--------------------------------------------------- + src/vteinternal.hh | 6 +----- + 3 files changed, 4 insertions(+), 72 deletions(-) + +commit b450109777c6e61b318056242d835de01c659233 +Author: Christian Persch +Date: 2015-11-28 22:58:33 +0100 + + emulation: Remove unused variable + + Leftover from commit 4ab677d4d8d273a969093b29b375c8054416df2e. + + https://bugzilla.gnome.org/show_bug.cgi?id=741402 + + src/vteseq.cc | 5 ----- + 1 file changed, 5 deletions(-) + +commit f320f72b9d386d5f98df3f08ed41dc6c260ca570 +Author: Christian Persch +Date: 2015-11-28 22:58:33 +0100 + + build: Fix overlinking + + Fix the PTY concifugre checks to only check for BSD openpt + when we have UNIX98 PTY support. This prevents us from always + linking to libutil. + + configure.ac | 28 +++++++++++++++++++--------- + src/Makefile.am | 1 + + src/pty.cc | 3 +++ + 3 files changed, 23 insertions(+), 9 deletions(-) + +commit fc48e46f827571582bef8aaecf39e9416558744c +Author: Christian Persch +Date: 2015-11-28 22:58:33 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 3 -- + src/vte.cc | 96 ++++++++++++++++++++++++++---------------------------- + src/vteinternal.hh | 7 ++++ + src/vteseq.cc | 2 +- + 4 files changed, 55 insertions(+), 53 deletions(-) + +commit 8d9644f127cc166ee5c018fe3bbfc7647897501d +Author: Christian Persch +Date: 2015-11-28 22:58:33 +0100 + + emulation: Improve debug output + + Print the value type of the parameters, too. + + src/vteseq.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 8504a6fd46790a819b139daeb650e98e43dd3801 +Author: Christian Persch +Date: 2015-11-28 22:58:33 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 40 ++++++++++++++++++++++------------------ + src/vteinternal.hh | 2 ++ + 2 files changed, 24 insertions(+), 18 deletions(-) + +commit 5a7d57211e00b3ad1ca098cc12530fe122251370 +Author: Christian Persch +Date: 2015-11-28 22:58:33 +0100 + + widget: Remove unused code + + src/vte-private.h | 2 -- + src/vte.cc | 16 ---------------- + 2 files changed, 18 deletions(-) + +commit 6881d567339a49b8b5b5f531efbf51afa59f7f02 +Author: Christian Persch +Date: 2015-11-28 22:58:33 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 35 ++++++++++++++++++----------------- + src/vteinternal.hh | 2 ++ + 2 files changed, 20 insertions(+), 17 deletions(-) + +commit b68a7db0dc8dc232e9d1750684b2571615df1a3f +Author: Christian Persch +Date: 2015-11-28 22:58:32 +0100 + + widget: Disconnect handler from our adjustment on finalize + + src/vte.cc | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +commit 307a743a9e00e9dc848a4dcbe0cf919138c3e417 +Author: Christian Persch +Date: 2015-11-28 22:58:32 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 62 ++++++++++++++++++++++++++++-------------------------- + src/vteinternal.hh | 4 ++++ + 2 files changed, 36 insertions(+), 30 deletions(-) + +commit ed88684dd80bdcf4bbd868c792b34fccb69ede30 +Author: Christian Persch +Date: 2015-11-28 22:58:32 +0100 + + widget: Rename a function parameter + + Rename the parameter so as not to be identical with a member variable. + + src/vte.cc | 66 +++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 33 insertions(+), 33 deletions(-) + +commit 30e7f46f911f0c84e32e2057052d167dd01351ef +Author: Christian Persch +Date: 2015-11-28 22:58:32 +0100 + + lib: Rename type + + src/vte.cc | 4 ++-- + src/vteinternal.hh | 6 +----- + src/vtetypes.cc | 32 ++++++++++++++++++++++++++++++++ + src/vtetypes.hh | 22 ++++++++++++++++++++++ + 4 files changed, 57 insertions(+), 7 deletions(-) + +commit 6285c0271b6634a35a594b770980db7ba3a488f1 +Author: Christian Persch +Date: 2015-11-28 22:58:32 +0100 + + widget: Fix jittery cursor preventing mouse pointer hiding + + Only show the pointer again when the position actually changed. + + https://bugzilla.gnome.org/show_bug.cgi?id=688456 + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 94f2e0fe254541ad6f282e419cae6abf20eeab77 +Author: Christian Persch +Date: 2015-11-28 22:58:32 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 30 +++++++++++++++--------------- + src/vteinternal.hh | 2 ++ + 2 files changed, 17 insertions(+), 15 deletions(-) + +commit 53381e575587d08740a6d00dc70da3d93bba3ce1 +Author: Christian Persch +Date: 2015-11-28 22:58:32 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 12 +++--------- + 1 file changed, 3 insertions(+), 9 deletions(-) + +commit 898816907dfb099c85095cc4cf19ba5012e65718 +Author: Christian Persch +Date: 2015-11-28 22:58:32 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 19 +++++++++---------- + src/vteinternal.hh | 1 + + 2 files changed, 10 insertions(+), 10 deletions(-) + +commit b93d4e5ea83a0b19c8402f11c0ffffdbc1d605e1 +Author: Christian Persch +Date: 2015-11-28 22:58:31 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 187 +++++++++++++++++++++++++---------------------------- + src/vteinternal.hh | 6 ++ + 2 files changed, 94 insertions(+), 99 deletions(-) + +commit f9ca64c0727092094f9cbbc2367825c8e6ee7365 +Author: Christian Persch +Date: 2015-11-28 22:58:31 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 17 ++++++++--------- + src/vteinternal.hh | 2 ++ + 2 files changed, 10 insertions(+), 9 deletions(-) + +commit d240648b59818f144c3ce8e0faaeab06c1c693d6 +Author: Christian Persch +Date: 2015-11-28 22:58:31 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 36 +++++++++++++++++++----------------- + src/vteinternal.hh | 4 ++++ + 2 files changed, 23 insertions(+), 17 deletions(-) + +commit 935b8c5e13e641fc1c47cd4770297b8d9fa24b9b +Author: Christian Persch +Date: 2015-11-28 22:58:31 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 2 -- + src/vte.cc | 16 +++++++--------- + src/vteaccess.cc | 32 ++++++++++++++++---------------- + src/vteinternal.hh | 2 ++ + 4 files changed, 25 insertions(+), 27 deletions(-) + +commit fa8b20f8ffe1280a97d4202fc4a6275b346bca53 +Author: Christian Persch +Date: 2015-11-28 22:58:31 +0100 + + draw: Use double for alpha + + src/vtedraw.cc | 22 +++++++++++----------- + src/vtedraw.h | 10 +++++----- + 2 files changed, 16 insertions(+), 16 deletions(-) + +commit 06e794c1961195633ba80951ff4771be8e794cf4 +Author: Egmont Koblinger +Date: 2015-11-25 20:40:17 +0100 + + pty: Use packet mode on the PTY + + This allows us to get informed when scroll lock changes. + + https://bugzilla.gnome.org/show_bug.cgi?id=755371 + + src/pty.cc | 14 ++++++++++++++ + src/vte.cc | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++--- + src/vteinternal.hh | 6 +++++- + 3 files changed, 72 insertions(+), 4 deletions(-) + +commit 1cda4819a09cb37013c6dfc0bada026cc448afb0 +Author: Christian Persch +Date: 2015-11-25 20:40:17 +0100 + + app: Fix crash with -T and make it work + + src/vteapp.c | 33 +++++++++++++++++++++++---------- + 1 file changed, 23 insertions(+), 10 deletions(-) + +commit 0d99a92a0ca205b4a7bda84a96d2c912b37cc8be +Author: Christian Persch +Date: 2015-11-25 20:40:17 +0100 + + build: Fix test-vtetypes build + + src/Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 86f206b3ec01033c07a76cf949276058489b53ee +Author: Christian Persch +Date: 2015-11-24 23:10:00 +0100 + + widget: Allow setting the cursor foreground colour + + Based on a patch by James Reed . + + https://bugzilla.gnome.org/show_bug.cgi?id=695011 + + doc/reference/vte-sections.txt | 1 + + src/app.vala | 21 ++++++++++++----- + src/caps.cc | 6 ++--- + src/vte.cc | 51 +++++++++++++++++++++++++++++++++++------- + src/vte/vteterminal.h | 2 ++ + src/vteapp.c | 26 +++++++++++++++------ + src/vtegtk.cc | 22 ++++++++++++++++++ + src/vteinternal.hh | 2 ++ + src/vterowdata.h | 3 ++- + src/vteseq-n.gperf | 6 ++--- + src/vteseq.cc | 10 ++++----- + 11 files changed, 117 insertions(+), 33 deletions(-) + +commit 8e8f3d13d48e7ee8e767f87bd00580b4f50c2e1e +Author: Christian Persch +Date: 2015-11-24 23:10:00 +0100 + + widget: Use new colour class + + src/vte.cc | 362 +++++++++++++++++------------------------------------ + src/vtegtk.cc | 25 +++- + src/vteinternal.hh | 24 ++-- + src/vteseq.cc | 66 ++-------- + src/vtetypes.cc | 77 ++++++++++++ + src/vtetypes.hh | 12 +- + 6 files changed, 248 insertions(+), 318 deletions(-) + +commit 6d62287dbb8bfe405ac3a19965ea8cc3f79e87c0 +Author: Christian Persch +Date: 2015-11-24 23:10:00 +0100 + + lib: Add vte native colour class + + src/vte.cc | 78 +++++++++++++++++++++++++++--------------------------- + src/vtedraw.cc | 14 +++++----- + src/vtedraw.h | 9 ++++--- + src/vteinternal.hh | 6 ++--- + src/vteseq.cc | 10 +++---- + src/vtetypes.cc | 8 ++++++ + src/vtetypes.hh | 21 +++++++++++++++ + 7 files changed, 88 insertions(+), 58 deletions(-) + +commit c8e8b7858db046cdbd83c82d400f53e2dc94430c +Author: Christian Persch +Date: 2015-11-24 23:10:00 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 12 ++++++------ + src/vteinternal.hh | 1 + + src/vteseq.cc | 2 +- + 3 files changed, 8 insertions(+), 7 deletions(-) + +commit 2e694d6df101d247bcc34f95cafca382494a0680 +Author: Christian Persch +Date: 2015-11-24 23:09:59 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 55 ++++++++++++++++++++++++++---------------------------- + src/vteinternal.hh | 2 ++ + src/vteseq.cc | 4 ++-- + 3 files changed, 30 insertions(+), 31 deletions(-) + +commit 3d5391813bf6842d4d6842716657d68c12742c69 +Author: Christian Persch +Date: 2015-11-24 23:09:59 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 1 - + src/vte.cc | 23 +++++++++++------------ + src/vteinternal.hh | 3 +++ + src/vteseq.cc | 12 ++++++------ + 4 files changed, 20 insertions(+), 19 deletions(-) + +commit 050a5d1cc778c5d20c6c96380116f88d2edf7e49 +Author: Christian Persch +Date: 2015-11-24 23:09:59 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 1 - + src/vte.cc | 26 +++++++++++++------------- + src/vteinternal.hh | 1 + + src/vteseq.cc | 6 +++--- + 4 files changed, 17 insertions(+), 17 deletions(-) + +commit 49b2d891e48c18a1a2f1cb025d544cc5651c8812 +Author: Christian Persch +Date: 2015-11-24 23:09:59 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 4 ---- + src/vte.cc | 35 ++++++++++++++++++----------------- + src/vteinternal.hh | 4 ++++ + src/vteseq.cc | 18 +++++++++--------- + 4 files changed, 31 insertions(+), 30 deletions(-) + +commit f4a63bcf3036a8a41a672df0072a2b2463650187 +Author: Christian Persch +Date: 2015-11-24 23:09:59 +0100 + + lib: Remove extra header + + src/Makefile.am | 1 - + src/vte-private.h | 7 +++++++ + src/vte.cc | 1 - + src/vteaccess.cc | 1 - + src/vteint.h | 35 ----------------------------------- + 5 files changed, 7 insertions(+), 38 deletions(-) + +commit 64dd51792fe27c9c25ef0aa0c00cd21cbbda495a +Author: Christian Persch +Date: 2015-11-22 21:07:03 +0100 + + app: Intialise match to NULL + + Checking for regexes can return FALSE without NULLing out the elements + of @matches, so don't rely on that. + + https://bugzilla.gnome.org/show_bug.cgi?id=758501 + + src/vteapp.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 380e3512fc23963cf7ad55994931a52480eda536 +Author: Christian Persch +Date: 2015-11-22 21:07:03 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 38 +++++++++++++++++++------------------- + src/vteinternal.hh | 2 ++ + 2 files changed, 21 insertions(+), 19 deletions(-) + +commit e709005af49988b4e9ccf96fa872b08db8fed51e +Author: Christian Persch +Date: 2015-11-22 21:07:03 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 6 ---- + src/vte.cc | 83 +++++++++++++++++++------------------------------------ + src/vteseq.cc | 18 ++++++------ + 3 files changed, 38 insertions(+), 69 deletions(-) + +commit 1596a98941850097c749183c4d31c9313efccb17 +Author: Christian Persch +Date: 2015-11-22 21:07:03 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 29 +++++++++++++---------------- + src/vteinternal.hh | 2 ++ + 2 files changed, 15 insertions(+), 16 deletions(-) + +commit 720022456476820d2003a10d28ecb06e2a56a35f +Author: Christian Persch +Date: 2015-11-22 21:07:03 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 23 +++++++++-------------- + src/vteinternal.hh | 1 + + src/vteseq.cc | 2 +- + 3 files changed, 11 insertions(+), 15 deletions(-) + +commit fff7bccaf74c8dcf941c599dbb9d6a7e43e81572 +Author: Christian Persch +Date: 2015-11-22 21:07:03 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 32 ++++++++++++++++---------------- + src/vteinternal.hh | 1 + + 2 files changed, 17 insertions(+), 16 deletions(-) + +commit a601e38ef464b04e74f19eaa3a61680cdaa43ce8 +Author: Christian Persch +Date: 2015-11-22 21:07:02 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 48 +++++++++++++++++++++--------------------------- + src/vteinternal.hh | 3 +++ + 2 files changed, 24 insertions(+), 27 deletions(-) + +commit 5491397569011253534c439415b2e7f9d9bac520 +Author: Christian Persch +Date: 2015-11-22 21:07:02 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 76 ++++++++++++++++++++++-------------------------------- + src/vteinternal.hh | 5 ++++ + src/vteseq.cc | 12 ++++----- + 3 files changed, 42 insertions(+), 51 deletions(-) + +commit ec70660a8ca21c892485c4035de67a2a4d609e10 +Author: Christian Persch +Date: 2015-11-22 21:07:02 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 33 ++++++++++++++++----------------- + src/vteinternal.hh | 3 +++ + 2 files changed, 19 insertions(+), 17 deletions(-) + +commit 477bee2ee2f455b96fd110a4b2329696aee8a09a +Author: Christian Persch +Date: 2015-11-22 21:07:02 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 33 +++++++++++++++++---------------- + src/vteinternal.hh | 2 ++ + 2 files changed, 19 insertions(+), 16 deletions(-) + +commit 14f8835b4aa89867e886a76165f62807abac6dee +Author: Christian Persch +Date: 2015-11-22 21:07:02 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 3 --- + src/vte.cc | 69 ++++++++++++++++++++++++++---------------------------- + src/vteinternal.hh | 5 ++++ + src/vteseq.cc | 10 ++++---- + 4 files changed, 43 insertions(+), 44 deletions(-) + +commit 8677e7aba76f58e505808a6a3553725192e1c036 +Author: Christian Persch +Date: 2015-11-22 21:07:02 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 16 ++++++++-------- + src/vtegtk.cc | 18 ++++++++++-------- + src/vtegtk.hh | 2 ++ + src/vteinternal.hh | 2 ++ + 4 files changed, 22 insertions(+), 16 deletions(-) + +commit 0daa0e1dd80290cac0cd8acc36695fee00ae89f6 +Author: Christian Persch +Date: 2015-11-22 21:07:02 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 14 +++++++------- + src/vtegtk.cc | 17 +++++++++-------- + src/vtegtk.hh | 1 + + src/vteinternal.hh | 2 ++ + 4 files changed, 19 insertions(+), 15 deletions(-) + +commit f05a63142ccd99b7ca8430dc1f5af914278b321f +Author: Christian Persch +Date: 2015-11-22 21:07:02 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 11 ++++++----- + src/vtegtk.cc | 17 +++++++++-------- + src/vtegtk.hh | 1 + + src/vteinternal.hh | 1 + + 4 files changed, 17 insertions(+), 13 deletions(-) + +commit fd108be732d261e1d9175f580caaad73eb9a8702 +Author: Christian Persch +Date: 2015-11-22 21:07:01 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 10 +++++----- + src/vteinternal.hh | 1 + + src/vteseq.cc | 2 +- + 3 files changed, 7 insertions(+), 6 deletions(-) + +commit c2254c9c40f492f92c019e6c8c56abf2f6fba424 +Author: Christian Persch +Date: 2015-11-22 21:07:01 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 15 ++++----------- + 1 file changed, 4 insertions(+), 11 deletions(-) + +commit 7fe792b2951ef9b16a434a2f3788caf01a3f4267 +Author: Christian Persch +Date: 2015-11-22 21:07:01 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 41 +++++++++++++++++++++-------------------- + src/vteinternal.hh | 3 +++ + 2 files changed, 24 insertions(+), 20 deletions(-) + +commit 3f527d7292ff0a6bf4ac23f355fcaa1e29ca4ce2 +Author: Christian Persch +Date: 2015-11-22 21:07:01 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 17 +++++------------ + src/vteseq.cc | 10 +++++----- + 2 files changed, 10 insertions(+), 17 deletions(-) + +commit 20aba53367a2c6c330acfebc56e76d507a15ef0e +Author: Christian Persch +Date: 2015-11-20 20:58:31 +0100 + + widget: Remove duplicated function + + This was doing exactly the same as connect_pty_read(), so just use that. + + src/vte.cc | 24 +++--------------------- + 1 file changed, 3 insertions(+), 21 deletions(-) + +commit 423063840d1304fdd7ff2d87f2041e70a07f599a +Author: Christian Persch +Date: 2015-11-20 20:58:31 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 194 ++++++++++++++++++++++++++--------------------------- + src/vteinternal.hh | 3 + + 2 files changed, 98 insertions(+), 99 deletions(-) + +commit 8ea73b295bac5c5fd1fa37759140297d83c6cbb3 +Author: Christian Persch +Date: 2015-11-20 20:58:31 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 58 +++++++++++++++++--------------------------- + src/vtegtk.cc | 70 +++++++++++++++++++++++++++++------------------------- + src/vtegtk.hh | 4 ++++ + src/vteinternal.hh | 3 +++ + 4 files changed, 66 insertions(+), 69 deletions(-) + +commit 9f871ca2a4b665aa56f3ca8954272c2b4fda16c0 +Author: Christian Persch +Date: 2015-11-20 20:58:30 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 141 +++++++++++++++++++++++------------------------------ + src/vtegtk.cc | 102 ++++++++++++++++++++------------------ + src/vtegtk.hh | 6 +++ + src/vteinternal.hh | 7 +++ + src/vteseq.cc | 4 +- + 5 files changed, 131 insertions(+), 129 deletions(-) + +commit 1a9a660f19e30a8047dd368cc2ddd7fef9bc0cdc +Author: Christian Persch +Date: 2015-11-20 20:58:30 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 122 ++++++++++++++++++++--------------------------------- + src/vtegtk.cc | 68 +++++++++++++++-------------- + src/vtegtk.hh | 4 ++ + src/vteinternal.hh | 2 + + 4 files changed, 88 insertions(+), 108 deletions(-) + +commit b839eeba38aca1ece1e3b3a70751e32c2eff0024 +Author: Christian Persch +Date: 2015-11-20 20:58:30 +0100 + + widget: Inline function into the only caller + + src/vte.cc | 22 +++++++--------------- + 1 file changed, 7 insertions(+), 15 deletions(-) + +commit fa006d1e1857f00be6a17404b4aff181daeb4e8f +Author: Christian Persch +Date: 2015-11-20 20:58:30 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 52 +++++++++++++++++++++------------------------------- + src/vteinternal.hh | 5 +++++ + 2 files changed, 26 insertions(+), 31 deletions(-) + +commit f6843fcad89c8afa4029442ea2ca10fbd54af6e8 +Author: Christian Persch +Date: 2015-11-20 20:58:30 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 116 ++++++++++++++++++++++++++--------------------------- + src/vteinternal.hh | 5 +++ + 2 files changed, 61 insertions(+), 60 deletions(-) + +commit c85982033570ea6c4fb95ec24436ca5c8576cbf3 +Author: Christian Persch +Date: 2015-11-20 20:58:30 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 1 - + src/vte.cc | 88 +++++++++++++++++++++++++----------------------------- + src/vteinternal.hh | 3 ++ + src/vteseq.cc | 12 ++++---- + 4 files changed, 50 insertions(+), 54 deletions(-) + +commit 01d715dd650550cda744d4cf3f62794ebb667331 +Author: Christian Persch +Date: 2015-11-20 20:58:30 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 100 ++++++++++++++++++++++++++--------------------------- + src/vteinternal.hh | 6 ++++ + 2 files changed, 55 insertions(+), 51 deletions(-) + +commit b61b2a00c65e14904c98e561dc15e74416a645bc +Author: Christian Persch +Date: 2015-11-20 20:58:29 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 59 +++++++++++++++++++++++++++--------------------------- + src/vteinternal.hh | 4 ++++ + 2 files changed, 34 insertions(+), 29 deletions(-) + +commit b584515ec18a1f0f3618c813474b9d92fbb9cd02 +Author: Christian Persch +Date: 2015-11-20 20:58:29 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 23 ++++++++++++----------- + src/vteinternal.hh | 3 +++ + 2 files changed, 15 insertions(+), 11 deletions(-) + +commit 347d244f68b1d32fd27a629b4b631ae45b72dfce +Author: Piotr Drąg +Date: 2015-11-20 18:54:59 +0100 + + Updated POTFILES.in + + po/POTFILES.in | 1 + + 1 file changed, 1 insertion(+) + +commit 8d234271b43ad7cd76a9fb2422059149497a578a +Author: Christian Persch +Date: 2015-11-18 22:04:04 +0100 + + build: Try to fix the --without-pcre2 build + + https://bugzilla.gnome.org/show_bug.cgi?id=758306 + + src/vtegtk.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 3b20a4b4593d8506c0be6c7c3a25d360e69e4757 +Author: Christian Persch +Date: 2015-11-18 21:15:47 +0100 + + doc: Remove vte.cc from files to look for docs in + + All documented public API has moved to vtegtk.cc. + + src/Makefile.am | 1 - + 1 file changed, 1 deletion(-) + +commit 127802a830e5dc7bc3c6e017535c759a026ee704 +Author: Christian Persch +Date: 2015-11-18 21:15:47 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 181 +++++++++++++++++++++++++---------------------------- + src/vtegtk.cc | 20 ++++++ + src/vteinternal.hh | 10 +++ + 3 files changed, 117 insertions(+), 94 deletions(-) + +commit b40b51cd97f59db2cd249ed8d3a4454b8d1a9dd1 +Author: Christian Persch +Date: 2015-11-18 21:15:46 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 64 +++++++++++++++++++++++++++--------------------------- + src/vtegtk.cc | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 7 ++++++ + 3 files changed, 99 insertions(+), 32 deletions(-) + +commit 015a1e45484fc28f235d0753cf4442acae2f92e3 +Author: Christian Persch +Date: 2015-11-18 21:15:46 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 102 +++++++++++++------------------------------- + src/vtegtk.cc | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 12 ++++++ + 3 files changed, 162 insertions(+), 73 deletions(-) + +commit b921f1a59646bf4f3979ecc59520c66b5886d8b2 +Author: Christian Persch +Date: 2015-11-18 21:15:46 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 140 +++++++++++++++++-------------------------------- + src/vtegtk.cc | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 10 ++++ + 3 files changed, 208 insertions(+), 93 deletions(-) + +commit b71eb78b81d1670d58a8c91e0b152e3c6172c55b +Author: Christian Persch +Date: 2015-11-18 21:15:46 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 13 ------------- + src/vtegtk.cc | 13 +++++++++++++ + 2 files changed, 13 insertions(+), 13 deletions(-) + +commit fcbf96505dc472b277b5d7984bea368fffd876f2 +Author: Christian Persch +Date: 2015-11-18 21:15:46 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 36 +++++++----------------------------- + src/vtegtk.cc | 35 +++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 1 + + 3 files changed, 43 insertions(+), 29 deletions(-) + +commit 833f4470234e11901ac0b688856703c9851ad14c +Author: Christian Persch +Date: 2015-11-18 21:15:46 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 233 ++++++++++++++++++----------------------------------- + src/vtegtk.cc | 121 ++++++++++++++++++++++++++++ + src/vteinternal.hh | 12 +++ + 3 files changed, 213 insertions(+), 153 deletions(-) + +commit 4133cc643fa27bd3cd2f291d6f6b02077572130a +Author: Christian Persch +Date: 2015-11-18 21:15:46 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 31 +++++-------------------------- + src/vtegtk.cc | 28 ++++++++++++++++++++++++++++ + src/vteinternal.hh | 2 ++ + 3 files changed, 35 insertions(+), 26 deletions(-) + +commit 33fd0f1f9a2f672f6e791b3675552e79d0e7492e +Author: Christian Persch +Date: 2015-11-18 21:15:46 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 41 ++++++++++------------------------------- + src/vtegtk.cc | 31 +++++++++++++++++++++++++++++++ + src/vteinternal.hh | 3 +++ + 3 files changed, 44 insertions(+), 31 deletions(-) + +commit 3463580779bdd9d9483e0bb24f86feb89012ef35 +Author: Christian Persch +Date: 2015-11-18 21:15:45 +0100 + + widget: Move some public API to its own file + + src/vte-private.h | 1 + + src/vte.cc | 174 ++++++++++++----------------------------------------- + src/vtegtk.cc | 135 ++++++++++++++++++++++++++++++++++++++++- + src/vteinternal.hh | 11 +++- + 4 files changed, 182 insertions(+), 139 deletions(-) + +commit 693eead2c394e6bc6f3e26f52f3b3122aa705e67 +Author: Christian Persch +Date: 2015-11-18 21:15:45 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 39 ++++++++++++--------------------------- + src/vtegtk.cc | 30 ++++++++++++++++++++++++++++++ + src/vteinternal.hh | 2 ++ + 3 files changed, 44 insertions(+), 27 deletions(-) + +commit 68c4fcba7ab395648ae32035f86c72e6e4f17d3e +Author: Christian Persch +Date: 2015-11-18 21:15:45 +0100 + + widget: Move some public API to its own file + + src/vte-private.h | 25 +++++++++ + src/vte.cc | 156 +++--------------------------------------------------- + src/vtegtk.cc | 120 +++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 153 insertions(+), 148 deletions(-) + +commit 44a098bb8418afd5a5f306b0d3e7de2c0c4bb06b +Author: Christian Persch +Date: 2015-11-18 21:15:45 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 22 ---------------------- + src/vtegtk.cc | 24 ++++++++++++++++++++++++ + 2 files changed, 24 insertions(+), 22 deletions(-) + +commit 8150979a5c4890042f975d55bf4e50ba2fd82a4b +Author: Christian Persch +Date: 2015-11-18 21:15:45 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 87 +++++++++++++++++++++--------------------------------- + src/vtegtk.cc | 29 ++++++++++++++++++ + src/vteinternal.hh | 4 +++ + 3 files changed, 67 insertions(+), 53 deletions(-) + +commit dacf0e4ad5686be0662fa82223965acfbd683392 +Author: Christian Persch +Date: 2015-11-18 21:15:44 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 133 +++++++++++++++-------------------------------------- + src/vtegtk.cc | 73 +++++++++++++++++++++++++++++ + src/vteinternal.hh | 3 ++ + 3 files changed, 114 insertions(+), 95 deletions(-) + +commit 9717f9c6c329dfed4d84e3c706161d18041984ac +Author: Christian Persch +Date: 2015-11-18 21:15:44 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 60 +++++++++++++++++++++++------------------------------- + src/vtegtk.cc | 20 ++++++++++++++++++ + src/vteinternal.hh | 4 ++++ + 3 files changed, 49 insertions(+), 35 deletions(-) + +commit 6b838455866a14aa19a3d67ad67d9eb81fb61a1f +Author: Christian Persch +Date: 2015-11-18 21:15:44 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 91 ++++++++---------------------------------------------- + src/vtegtk.cc | 70 +++++++++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 2 ++ + 3 files changed, 85 insertions(+), 78 deletions(-) + +commit 6ef6503e6f51b6f173018de1b810cb2566b06f41 +Author: Christian Persch +Date: 2015-11-18 21:15:44 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 48 +++++++++++++----------------------------------- + src/vtegtk.cc | 37 +++++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 3 +++ + 3 files changed, 53 insertions(+), 35 deletions(-) + +commit 3326680f18062a1b752190c0ceb52af7a99af921 +Author: Christian Persch +Date: 2015-11-18 21:15:44 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 41 ++++++----------------------------------- + src/vtegtk.cc | 33 +++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 1 + + 3 files changed, 40 insertions(+), 35 deletions(-) + +commit 868dbdf6d938c05c51c994c454a73ffd999d430d +Author: Christian Persch +Date: 2015-11-18 21:15:44 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 80 ----------------------------------------------------------- + src/vtegtk.cc | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 80 insertions(+), 80 deletions(-) + +commit bf43c5bd76ba25e93bd0e2dfee069a714a0dc49c +Author: Christian Persch +Date: 2015-11-18 21:15:44 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 86 +++++++++--------------------------------------------- + src/vtegtk.cc | 68 ++++++++++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 2 ++ + 3 files changed, 84 insertions(+), 72 deletions(-) + +commit 13b9d230f9e2085c96eb8d627b36e9048b72632e +Author: Christian Persch +Date: 2015-11-18 21:15:43 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 86 +++++++++++++++++++----------------------------------- + src/vtegtk.cc | 30 +++++++++++++++++++ + src/vteinternal.hh | 1 + + 3 files changed, 61 insertions(+), 56 deletions(-) + +commit 69eae8dbec809f93da99eaf8a7d8a6e76a693414 +Author: Christian Persch +Date: 2015-11-18 21:15:43 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 59 +++++++++++------------------------------------------- + src/vtegtk.cc | 40 ++++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 2 ++ + 3 files changed, 54 insertions(+), 47 deletions(-) + +commit d7ead63ba5748f6423ac38dcc47c494985d65cfa +Author: Christian Persch +Date: 2015-11-18 21:15:43 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 49 +++++++------------------------------------------ + src/vtegtk.cc | 37 +++++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 1 + + 3 files changed, 45 insertions(+), 42 deletions(-) + +commit 7dcde662ac7807c1d140b9431f49f7082cae3328 +Author: Christian Persch +Date: 2015-11-18 21:15:43 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 57 ++++++++++++++++-------------------------------------- + src/vtegtk.cc | 28 +++++++++++++++++++++++++++ + src/vteinternal.hh | 5 +++++ + 3 files changed, 50 insertions(+), 40 deletions(-) + +commit b6dfda45b8187a38684c6aaf1fa4ea073a9c7f5e +Author: Christian Persch +Date: 2015-11-18 21:15:43 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 82 ----------------------------------------------------------- + src/vtegtk.cc | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 82 insertions(+), 82 deletions(-) + +commit f6783f8b5b60711bca9f385585976ba9722df9da +Author: Christian Persch +Date: 2015-11-18 21:15:43 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 110 +++++++++++++++++------------------------------------ + src/vtegtk.cc | 40 +++++++++++++++++++ + src/vteinternal.hh | 2 + + 3 files changed, 76 insertions(+), 76 deletions(-) + +commit 2386a71dfd5c04c11c6b41110cf6b157745a230e +Author: Christian Persch +Date: 2015-11-18 21:15:43 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 37 ++++++------------------------------- + src/vtegtk.cc | 34 ++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 5 +++++ + 3 files changed, 45 insertions(+), 31 deletions(-) + +commit 95f1b9900e744b4dd9520ae7372333b5a00c5a20 +Author: Christian Persch +Date: 2015-11-18 21:15:43 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 126 +++++++++++++++++------------------------------------ + src/vtegtk.cc | 78 +++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 7 +++ + 3 files changed, 126 insertions(+), 85 deletions(-) + +commit 72b1185d2e1b0c5b5b481fb9f8ca7701dbc5d4da +Author: Christian Persch +Date: 2015-11-18 21:15:42 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 236 ++++++++++++++++++++--------------------------------- + src/vtegtk.cc | 63 ++++++++++++++ + src/vteinternal.hh | 20 +++++ + 3 files changed, 172 insertions(+), 147 deletions(-) + +commit 12c085fc5786070decf0d36d8627d61a3bc5f188 +Author: Christian Persch +Date: 2015-11-18 21:15:42 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 60 ++++++++++++++++-------------------------------------- + src/vtegtk.cc | 33 ++++++++++++++++++++++++++++++ + src/vteinternal.hh | 2 ++ + 3 files changed, 53 insertions(+), 42 deletions(-) + +commit 620e9dfd4b478c163f08007fd4134d20e3af10ba +Author: Christian Persch +Date: 2015-11-18 21:15:42 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 70 +++++++++++++++++------------------------------------- + src/vtegtk.cc | 50 ++++++++++++++++++++++++++++++++++++++ + src/vteinternal.hh | 6 +++++ + 3 files changed, 78 insertions(+), 48 deletions(-) + +commit 8cd11ab2fe6bc47bd1b9e838f74f17330581b183 +Author: Christian Persch +Date: 2015-11-18 21:15:42 +0100 + + widget: Move some public API to its own file + + src/vte.cc | 185 ---------------------------------------------------------- + src/vtegtk.cc | 184 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 184 insertions(+), 185 deletions(-) + +commit 09a4be833e159de520df013f7ba12dbca6bd74d7 +Author: Christian Persch +Date: 2015-11-18 21:15:42 +0100 + + widget: Move VteTerminal widget to its own file + + src/Makefile.am | 3 + + src/vte-private.h | 4 - + src/vte.cc | 1528 ++-------------------------------------------------- + src/vtegtk.cc | 1405 +++++++++++++++++++++++++++++++++++++++++++++++ + src/vtegtk.hh | 69 +++ + src/vteinternal.hh | 13 + + 6 files changed, 1537 insertions(+), 1485 deletions(-) + +commit ba4be57f40974a5521a262990968f6c1937cd1ad +Author: Christian Persch +Date: 2015-11-18 21:15:42 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 158 +++++++++++++++++++++++++++-------------------------- + src/vteinternal.hh | 20 ++++++- + 2 files changed, 99 insertions(+), 79 deletions(-) + +commit 262c81e3ff05369a511ab7a7065e5570f560d299 +Author: Christian Persch +Date: 2015-11-18 21:15:42 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 329 ++++++++++++++++++++++++++++------------------------- + src/vteinternal.hh | 45 +++++++- + 2 files changed, 215 insertions(+), 159 deletions(-) + +commit bb8573e2259586d58f9356f0aa1cde14f7cb14b4 +Author: Christian Persch +Date: 2015-11-18 21:15:41 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 104 +++++++++++++++++++++++++++++------------------------ + src/vteinternal.hh | 5 +++ + 2 files changed, 63 insertions(+), 46 deletions(-) + +commit fa5b4adc5db80150ffe087a25fbe67e2dfabc058 +Author: Christian Persch +Date: 2015-11-18 21:15:41 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 40 +++++++++++++++++++++++----------------- + src/vteinternal.hh | 1 + + 2 files changed, 24 insertions(+), 17 deletions(-) + +commit 9835fdf0540fae1859b6eea6ae775e1d0e733ca1 +Author: Christian Persch +Date: 2015-11-18 21:15:41 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 39 ++++++++++++++++++++++----------------- + src/vteinternal.hh | 1 + + 2 files changed, 23 insertions(+), 17 deletions(-) + +commit ed6ce8e06d3dce921e6eb84e41e646de55c60e73 +Author: Christian Persch +Date: 2015-11-18 21:15:41 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 176 ++++++++++++++++++++++++++++------------------------- + src/vteinternal.hh | 15 +++++ + 2 files changed, 109 insertions(+), 82 deletions(-) + +commit c53ec0826e3cde95545b56b2c07bd2f88bf1dfa6 +Author: Christian Persch +Date: 2015-11-18 21:15:41 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 83 ++++++++++++++++++++++++++++-------------------------- + src/vteinternal.hh | 1 + + 2 files changed, 44 insertions(+), 40 deletions(-) + +commit fe3d03a70a3870ad55bfde563736c86c88aa39b5 +Author: Christian Persch +Date: 2015-11-18 21:15:41 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 67 +++++++++++++++++++++++++++--------------------------- + src/vteinternal.hh | 4 ++++ + 2 files changed, 38 insertions(+), 33 deletions(-) + +commit e28c519d0ca6df77768f8f366c5dd0e6f820a618 +Author: Christian Persch +Date: 2015-11-18 21:15:41 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 40 +++++++++++++++++----------------------- + src/vteinternal.hh | 2 ++ + 2 files changed, 19 insertions(+), 23 deletions(-) + +commit 6620724a6e5280ed9128c45e2f236df5d0278553 +Author: Christian Persch +Date: 2015-11-18 21:15:41 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 54 ++++++++++++++++++++++++++++++++++++++---------------- + src/vteinternal.hh | 2 ++ + 2 files changed, 40 insertions(+), 16 deletions(-) + +commit ab70fd4c7105232e27710c684df301513311a744 +Author: Christian Persch +Date: 2015-11-18 21:15:40 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 158 ++++++++++++++++++++++++++++------------------------- + src/vteinternal.hh | 7 +++ + 2 files changed, 90 insertions(+), 75 deletions(-) + +commit 06fe2bc7b129f7b09d28e6655d5a2de63603073c +Author: Christian Persch +Date: 2015-11-18 21:15:40 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 203 +++++++++++++++++++++++++++-------------------------- + src/vteinternal.hh | 15 ++++ + 2 files changed, 118 insertions(+), 100 deletions(-) + +commit 36862a5ba2b8ae5466e2f0b43249b7eebf144970 +Author: Christian Persch +Date: 2015-11-18 21:15:40 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 6 +++--- + src/vteinternal.hh | 1 + + 2 files changed, 4 insertions(+), 3 deletions(-) + +commit bfa4a2bf60d60840380ae452a58bed8c95f47e7d +Author: Christian Persch +Date: 2015-11-18 21:15:40 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 2 -- + src/vte.cc | 20 +++++--------------- + src/vteinternal.hh | 3 +++ + src/vteseq.cc | 2 +- + 4 files changed, 9 insertions(+), 18 deletions(-) + +commit 999f2322d5d06f07eb7033f9de97cf575b2fb4f8 +Author: Christian Persch +Date: 2015-11-18 21:15:40 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 34 +++++++++++++++++----------------- + src/vteinternal.hh | 2 ++ + 2 files changed, 19 insertions(+), 17 deletions(-) + +commit d362ef8eff7f794b06fa0d70fc90192da2f317d0 +Author: Christian Persch +Date: 2015-11-18 21:15:40 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 67 +++++++++++++++++++++++++++--------------------------- + src/vteinternal.hh | 3 +++ + 2 files changed, 36 insertions(+), 34 deletions(-) + +commit 1493f89653b3722970a60c29074efd85b47342a6 +Author: Christian Persch +Date: 2015-11-18 21:15:40 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte-private.h | 1 - + src/vte.cc | 40 +++++++++++++++++++--------------------- + src/vteinternal.hh | 6 ++++++ + src/vteseq.cc | 2 +- + 4 files changed, 26 insertions(+), 23 deletions(-) + +commit 314214ec90c84862ab3614a78bd40d93af94cc1b +Author: Christian Persch +Date: 2015-11-18 21:15:39 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 68 ++++++++++++++++++++++++++++++------------------------ + src/vteinternal.hh | 6 +++++ + 2 files changed, 44 insertions(+), 30 deletions(-) + +commit 44d5ef68eda5ab1b8c14012846c94b5dc3742fa8 +Author: Christian Persch +Date: 2015-11-18 21:15:39 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 236 +++++++++++++++++++++++++---------------------------- + src/vteinternal.hh | 18 ++++ + 2 files changed, 131 insertions(+), 123 deletions(-) + +commit 18caf6fb7b0ac97b4c19bde859fb1b6955f43017 +Author: Christian Persch +Date: 2015-11-18 21:15:39 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 18 ++++++++---------- + src/vteinternal.hh | 5 +++-- + src/vteseq.cc | 2 +- + 3 files changed, 12 insertions(+), 13 deletions(-) + +commit 5cbae82e5bcdbb9ac6cfbc978486566919d90b33 +Author: Christian Persch +Date: 2015-11-18 21:15:39 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 124 ++++++++++++++++++++++++++--------------------------- + src/vteinternal.hh | 20 +++++++++ + 2 files changed, 80 insertions(+), 64 deletions(-) + +commit 7455d104f7858ab5e95c9970b9fe999b45ddf871 +Author: Christian Persch +Date: 2015-11-18 21:15:39 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 38 +++++++++++++++++++------------------- + src/vteinternal.hh | 7 +++++++ + 2 files changed, 26 insertions(+), 19 deletions(-) + +commit 4cb111a87c2176f8c6c3e87285e5952ec94e1288 +Author: Christian Persch +Date: 2015-11-18 21:15:39 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 28 ++++++++++++++-------------- + src/vteinternal.hh | 1 + + 2 files changed, 15 insertions(+), 14 deletions(-) + +commit 0748ca9f45cf9821588b852a9b2e2eea9570bced +Author: Christian Persch +Date: 2015-11-18 21:15:39 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 52 ++++++++++++++++++++++++---------------------------- + src/vteinternal.hh | 3 +++ + 2 files changed, 27 insertions(+), 28 deletions(-) + +commit 92231f7dc3f758d1b071cde6e2773c3e45835bc6 +Author: Christian Persch +Date: 2015-11-18 21:15:38 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 175 +++++++++++++++++++++++++---------------------------- + src/vteinternal.hh | 47 ++++++++++++++ + 2 files changed, 128 insertions(+), 94 deletions(-) + +commit 4924ddb5199f2553cdd42cc2321e41f0fd48fa12 +Author: Christian Persch +Date: 2015-11-18 21:15:38 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 83 ++++++++++++++++++++++++++---------------------------- + src/vteinternal.hh | 11 ++++++++ + 2 files changed, 51 insertions(+), 43 deletions(-) + +commit cc4e7634a6632da7d0428b7890a6d496c9ea1523 +Author: Christian Persch +Date: 2015-11-18 21:15:38 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 20 +++++++++++++------- + src/vteinternal.hh | 4 ++++ + 2 files changed, 17 insertions(+), 7 deletions(-) + +commit 068a54b232f4cae4f3ddbe6567287c0159b7d044 +Author: Christian Persch +Date: 2015-11-18 21:15:38 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/vte.cc | 81 +++++++++++++++++++++++++++++------------------------- + src/vteinternal.hh | 11 ++++++++ + 2 files changed, 54 insertions(+), 38 deletions(-) + +commit 10e4a40a597a9120a683f6db7fb1f4f66734e078 +Author: Christian Persch +Date: 2015-11-18 21:15:38 +0100 + + widget: Move some methods to VteTerminalPrivate + + src/Makefile.am | 2 + + src/vte.cc | 117 +++++++++++++++++++++++++++++++++++------------------ + src/vteinternal.hh | 23 +++++++++++ + 3 files changed, 102 insertions(+), 40 deletions(-) + +commit 741a173ce53af8b06f244969eb6b6e2af0927e79 +Author: Christian Persch +Date: 2015-11-18 21:15:38 +0100 + + lib: Add grid coordinate and span types + + Add vte::grid:coords to hold a (column, row) pair, and vte::grid::span + to hold a pair of (start, end) coordinates. + + They will be used to replace passing separate (column, row) pairs around + in arguments and data structures. + + Also contains tests for the member functions, and static assertion + to test the size of these structs, and ensure they are and stay POD. + + src/Makefile.am | 36 ++++++++++- + src/vtetypes.cc | 189 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vtetypes.hh | 83 +++++++++++++++++++++++++ + 3 files changed, 306 insertions(+), 2 deletions(-) + +commit af1034801a0d5946694ae6590a9032de1965ede1 +Author: Christian Persch +Date: 2015-11-18 21:15:38 +0100 + + doc: Tiny fix + + src/vte.cc | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit fa3ea1e3a20c2b8d1084b462f74c2dbdcc5afcd8 +Author: Christian Persch +Date: 2015-11-13 18:27:16 +0100 + + widget: Rename some function parameters + + Don't use the same name for function parameters as for + members in VteTerminalPrivate. + + src/vte.cc | 20 ++++++++------------ + 1 file changed, 8 insertions(+), 12 deletions(-) + +commit 5a8d5dc512df5c490b7c5f4c355feabe58a99d2c +Author: Christian Persch +Date: 2015-11-13 18:27:15 +0100 + + widget: Store the VteTerminal in VteTerminalPrivate + + src/vte.cc | 2 +- + src/vteinternal.hh | 6 +++++- + 2 files changed, 6 insertions(+), 2 deletions(-) + +commit 2ecc4f1e56d8f116b777d6426594ab0ea7b7e08c +Author: Christian Persch +Date: 2015-11-13 18:25:34 +0100 + + app: Disable menubar accel + + Prevent the gtk+ CSD decorations from handling F10, which belongs + to the terminal, like ALL keys. + + src/vteapp.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit 78c05007983fa2f8fe09bc04be944c33643ee38c +Author: Christian Persch +Date: 2015-11-13 11:11:31 +0100 + + app: Disable menubar accel + + Prevent the gtk+ CSD decorations from handling F10, which belongs + to the terminal, like ALL keys. + + src/app.vala | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 5fabb012bb9a99d5297c41df32760a6a3180a1d7 +Author: Christian Persch +Date: 2015-11-10 21:33:07 +0100 + + build: Add m4 macro to check for C++11 + + ... and move the macros from acinclude.m4 to their own file in m4/. + + configure.ac | 3 +- + acinclude.m4 => m4/attributes.m4 | 0 + m4/ax_cxx_compile_stdcxx_11.m4 | 165 +++++++++++++++++++++++++++++++++++++++ + 3 files changed, 167 insertions(+), 1 deletion(-) + +commit e8964d96155dc992b951dd8ab5850b1376d0f254 +Author: Christian Persch +Date: 2015-11-10 21:33:07 +0100 + + selection: Simplify code + + vte_cell_is_between is only ever called with inclusive=TRUE, so + drop that parameter. TODO: cleanup this function! + + src/vte.cc | 22 +++++++++------------- + 1 file changed, 9 insertions(+), 13 deletions(-) + +commit 7d0defc5a1e22d335da130cf9a09835a9dc82e2e +Author: Egmont Koblinger +Date: 2015-11-02 21:24:37 +0100 + + debug: Fix some messages + + src/vte.cc | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +commit 624f9f90d70ff9cb86b3424d75d7ca4a2e7774c6 +Author: Egmont Koblinger +Date: 2015-11-02 21:16:14 +0100 + + widget: Fix the adjustment's upper boundary + + This is necessary for the contents to look properly when placed inside a + GtkScrolledWindow. + + https://bugzilla.gnome.org/show_bug.cgi?id=757448 + + src/vte.cc | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +commit 08d172395c089aa45e531a07eb0af8ce1e9eeae0 +Author: Cédric Valmary +Date: 2015-10-31 06:18:41 +0000 + + Updated Occitan translation + + po/oc.po | 63 +++++++++++++++++++++++++++++---------------------------------- + 1 file changed, 29 insertions(+), 34 deletions(-) + +commit b6f37954e390b5987a31414ec3539a607f7ba0ac +Author: Egmont Koblinger +Date: 2015-10-24 01:13:17 +0200 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit aa7120c2e359bb5d6d0b0ec6c1e0eecf0583be03 (tag: 0.43.0) +Author: Egmont Koblinger +Date: 2015-10-24 01:06:44 +0200 + + doc: Fix vte-regex's section + + doc/reference/vte-sections.txt | 1 + + 1 file changed, 1 insertion(+) + +commit a9b0b4c75a6dc7282f7cfcaef71413d69f7f0731 +Author: Egmont Koblinger +Date: 2015-10-24 00:12:22 +0200 + + widget: Implement smooth scrolling + + Scroll the history (scrollback buffer) by pixels rather than rows. + This gives a better user experience especially with touchpads. + + Also, use the extra area at the bottom (if the window is not + grid-aligned) to show some text when scrolling. + + https://bugzilla.gnome.org/show_bug.cgi?id=746690 + + src/vte-private.h | 5 - + src/vte.cc | 623 +++++++++++++++++++++++++++++------------------------ + src/vteaccess.cc | 5 +- + src/vteinternal.hh | 3 +- + 4 files changed, 349 insertions(+), 287 deletions(-) + +commit ebaf644b04243e4130c0fc787e4d83904ce3dc97 +Author: Christian Persch +Date: 2015-10-21 11:52:29 +0200 + + Revert "selection: Simplify code" + + This reverts commit 2a321165c62c7362b9d225d98e6cc153b6817f8c. + + src/vte.cc | 22 +++++++++++++--------- + 1 file changed, 13 insertions(+), 9 deletions(-) + +commit 2a321165c62c7362b9d225d98e6cc153b6817f8c +Author: Christian Persch +Date: 2015-10-16 21:30:12 +0200 + + selection: Simplify code + + vte_cell_is_between is only ever called with inclusive=TRUE, so + drop that parameter. TODO: cleanup this function! + + src/vte.cc | 22 +++++++++------------- + 1 file changed, 9 insertions(+), 13 deletions(-) + +commit 7f74ef1e23ee5120bfc37f5daa0fc068fcbe6eae +Author: Christian Persch +Date: 2015-06-11 22:13:53 +0200 + + vteapp: Fix option + + src/app.vala | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit dd31529f5a79b0018b9aff03beb0335c7e6b6c8f +Author: Christian Persch +Date: 2015-10-15 20:28:16 +0200 + + regex: Fix crash on match_check + + Always pass non-NULL @tag. + + src/vte.cc | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 05c680acb0c5a875947db6072717d97ac7d072f9 +Author: Egmont Koblinger +Date: 2015-10-12 20:59:28 +0200 + + widget: Filter out most of the control characters when pasting + + https://bugzilla.gnome.org/show_bug.cgi?id=753197 + + src/vte.cc | 50 +++++++++++++++++++++++++++++++++++++++----------- + 1 file changed, 39 insertions(+), 11 deletions(-) + +commit be69524c255f98a0a49a629b55f5eeeaabb68eb6 +Author: Christian Persch +Date: 2015-10-12 19:58:18 +0200 + + regex: Don't expose PCRE2 in the API + + Until there's a real need to, don't use PCRE2 types in our API. + + doc/reference/vte-sections.txt | 2 -- + src/vte.cc | 4 ++-- + src/vte/vteregex.h | 17 ++--------------- + src/vteregex.cc | 15 ++++++++++----- + src/vteregexinternal.hh | 4 ++++ + 5 files changed, 18 insertions(+), 24 deletions(-) + +commit eb3040df084ffcae55ffe46d508ae9c22f051dec +Author: Christian Persch +Date: 2015-10-12 19:58:18 +0200 + + regex: Forbid \C in regexes + + configure.ac | 2 +- + src/vteregex.cc | 15 +++++++++++---- + 2 files changed, 12 insertions(+), 5 deletions(-) + +commit a04e393cf8f1a95e2b04f10fb06783bbcd72104d +Author: Egmont Koblinger +Date: 2015-10-08 23:15:23 +0200 + + regex: Fix row number in the new vte_terminal_event_* methods + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 82b25d0c65eebaad65a535502af2a26abaa64531 +Author: Christian Persch +Date: 2015-10-08 14:31:26 +0200 + + regex: Fix parameter name in documentation + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 17c23b253eb96227d036768ebbf101930aadec73 +Author: Samuel Thibault +Date: 2015-10-01 01:33:00 +0200 + + a11y: Emit missing space character insertion + + When backspacing over space, content comparison would not find any + difference, so vte always emits a space character deletion by hand, + so that screen readers speak it, see bug 150858. That however makes + the announced text incoherent, thus confusing brltty. + + This commit adds emitting a space character insertion, to get back to + coherent content. + + https://bugzilla.gnome.org/show_bug.cgi?id=150858 + https://bugzilla.gnome.org/show_bug.cgi?id=754964 + + src/vteaccess.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 9201006aa1b06ccf8de4cf41f42456f7f87693ed +Author: Christian Persch +Date: 2015-10-07 22:29:16 +0200 + + regex: Fix build without PCRE2 + + src/vte.cc | 4 ++++ + src/vteapp.c | 2 ++ + 2 files changed, 6 insertions(+) + +commit 71944514e7d8837c624933f65bf716d9106dea88 +Author: Christian Persch +Date: 2015-10-07 22:15:06 +0200 + + regex: Add API to check if some regexes match at an event position + + https://bugzilla.gnome.org/show_bug.cgi?id=741728 + + doc/reference/vte-sections.txt | 2 + + src/vte.cc | 190 ++++++++++++++++++++++++++++++++++++++--- + src/vte/vtedeprecated.h | 8 ++ + src/vte/vteterminal.h | 6 ++ + src/vteapp.c | 39 +++++++-- + 5 files changed, 227 insertions(+), 18 deletions(-) + +commit b9f2f05eba85bab72db475e0dc2738de7b553eeb +Author: Christian Persch +Date: 2015-10-07 22:15:06 +0200 + + vteapp: Use vte_terminal_match_check_event + + src/vteapp.c | 10 +++------- + 1 file changed, 3 insertions(+), 7 deletions(-) + +commit e5c69d6584c124e774b5f7d9938b12ec1a242e17 +Author: Christian Persch +Date: 2015-10-07 22:15:06 +0200 + + regex: Use unsigned for offsets into match_contents + + Except when matching with GRegex, since its API returns ints + + src/vte.cc | 75 +++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 38 insertions(+), 37 deletions(-) + +commit d665b6ceebabdc65d2c2b105369ebae95542a8ff +Author: Christian Persch +Date: 2015-10-07 22:15:05 +0200 + + regex: Restructure code + + Factor out actually matching the regex against the subject into its + own function, in preparation for adding extra regex matching. + + src/vte.cc | 475 ++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 269 insertions(+), 206 deletions(-) + +commit f18cf1d9cacf4ad439cfef7b745a62db698561cc +Author: Christian Persch +Date: 2015-10-07 22:15:05 +0200 + + regex: Fix conditional + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 9a774ea964769466c8db6476b9b34dcb67c67245 +Author: Christian Persch +Date: 2015-10-07 22:15:05 +0200 + + regex: Simplify no-match region calculation + + It is only necessary to updated start/end_blank once per regex. + + Note that with or without the patch, the no-match region sometimes is wrong. + + src/vte.cc | 34 ++++++++++++++++++---------------- + 1 file changed, 18 insertions(+), 16 deletions(-) + +commit 664d9f3d7be3690aa35c5cd671d05e3f0e8e09b0 +Author: Christian Persch +Date: 2015-10-07 22:15:05 +0200 + + regex: Simplify conditionals + + src/vte.cc | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +commit 1855deb46bda149aa1463e05761e3e7f583eed64 +Author: Christian Persch +Date: 2015-10-07 22:15:05 +0200 + + regex: Add some more debug output + + Print out the no-match region. + + src/vte.cc | 40 +++++++++++++++++++++++++++++++++------- + 1 file changed, 33 insertions(+), 7 deletions(-) + +commit 52c966d30ea4e95165835c3b41a43851679d53c5 +Author: Christian Persch +Date: 2015-10-07 22:15:05 +0200 + + regex: Simplify code + + These conditionals can only be true if we set [se]blank above, + so we can move them inside the block. + + src/vte.cc | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +commit 2f9036ae59ac07de63788fa934e7a5dd323f1891 +Author: Christian Persch +Date: 2015-10-07 22:15:05 +0200 + + regex: Simplify code + + Always pass non-NULL for the out parameters of the internal functions, + and use gssize type consistently. + + src/vte.cc | 118 ++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 59 insertions(+), 59 deletions(-) + +commit 93bfe531e986fde14f7588ba546ad244767e2be1 +Author: Christian Persch +Date: 2015-10-07 22:15:05 +0200 + + regex: Pass more data to regex matching + + Pass the whole match contents before the line to matching, which is useful + if there are lookbehind assertions in the regex. We also want to pass + the whole contents after the line to matching to satisfy lookahead + assertions, but this isn't possible currently without new PCRE2 API. + + This also fixes the cell row/column info in the debug output. + + src/vte.cc | 42 ++++++++++++++++++++++-------------------- + 1 file changed, 22 insertions(+), 20 deletions(-) + +commit 4235b24f49caf205859dc380c920e0cdc96ba6e5 +Author: Christian Persch +Date: 2015-10-04 22:53:29 +0200 + + regex: Fix a -Wformat warning + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4fb5732547c8b618e57d59b505300d076f54c6a9 +Author: Christian Persch +Date: 2015-10-04 22:45:02 +0200 + + regex: Move some shared code to vte_terminal_match_check_internal + + Initialising the out params can be done in the main function. + + src/vte.cc | 28 ++++++++++------------------ + 1 file changed, 10 insertions(+), 18 deletions(-) + +commit 8dfe0db6022688a581795e2571c48100db105836 +Author: Christian Persch +Date: 2015-10-04 22:42:38 +0200 + + regex: Fix the build without PCRE2 + + src/vte.cc | 30 +++++++++++++++--------------- + 1 file changed, 15 insertions(+), 15 deletions(-) + +commit 35941473cce716b9d952eb9782fb1694844393c9 +Author: Christian Persch +Date: 2015-10-04 22:39:38 +0200 + + regex: Factor out getting the offset in the match attributes + + This is identical between GRegex and PCRE, so factor it out into its + own function. + + src/vte.cc | 199 +++++++++++++++++++++++-------------------------------------- + 1 file changed, 75 insertions(+), 124 deletions(-) + +commit 641402c3b9a39fc649cedf48066ae768d32cab0a +Author: Christian Persch +Date: 2015-10-04 22:39:38 +0200 + + build: Make sure the resources are not exported + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ac3438cbdffd7886a93e6adbd8283e15d241bb50 +Author: Egmont Koblinger +Date: 2015-10-03 21:26:11 +0200 + + widget: Report correct mouse coordinates if viewport is scrolled back + + https://bugzilla.gnome.org/show_bug.cgi?id=755187 + + src/vte.cc | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +commit 18171bcfeaf8f3bf4bcb8a04dfcff916a3fbc40b +Author: Egmont Koblinger +Date: 2015-10-02 21:20:30 +0200 + + emulation: Disregard bce when a new line appears at the bottom + + Applying bce (background color erase) on a line that newly appears + at the bottom when scrolling is a badly designed feature, causing + many problems. Let's see if we break anything by disabling it. + + https://bugzilla.gnome.org/show_bug.cgi?id=754596 + + src/vte.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit 71be227f36f058baf812f68deea3f368b27b3b98 +Author: Christian Persch +Date: 2015-10-02 20:46:11 +0200 + + widget: Deprecate vte_terminal_match_check + + Instead of trying to calculate the row and column from event coordinates, + vte_terminal_match_check_event() should be used directly. Coordinate translation + will fail in future with sub-row scrolling; and this function may be changed + to just return NULL ("no match") then. + + src/vte.cc | 2 ++ + src/vte/vtedeprecated.h | 5 +++++ + src/vte/vteterminal.h | 3 --- + 3 files changed, 7 insertions(+), 3 deletions(-) + +commit 967a18718d3546901b2f9cbb00703358e7900c50 +Author: Christian Persch +Date: 2015-10-01 10:33:37 +0200 + + draw: Make one function static + + It's not used from outside vtedraw.cc. + + src/vtedraw.cc | 5 ++++- + src/vtedraw.h | 3 --- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 89abb24192ef3829b936c4a5cdc9b1f59f57fb69 +Author: Egmont Koblinger +Date: 2015-10-02 20:05:25 +0200 + + stream: Allocate large buffer on stack rather than on heap + + src/vtestream-file.h | 24 ++++++++---------------- + 1 file changed, 8 insertions(+), 16 deletions(-) + +commit d69645413f35ba6ebff9359a89bd121733a2e475 +Author: Egmont Koblinger +Date: 2015-10-02 19:38:38 +0200 + + widget: Fix painting the preedit text near the right margin + + https://bugzilla.gnome.org/show_bug.cgi?id=755668 + + src/vte.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit d4ac47aa0bad6fb6a5c2b12b69631bf57a306b1f +Author: Christian Persch +Date: 2015-09-30 22:17:17 +0200 + + search: Fix crashing typo + + https://bugzilla.gnome.org/show_bug.cgi?id=755900 + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 45e0311928e8d6170b06b5210946215d35753882 +Author: Christian Persch +Date: 2015-09-30 20:26:35 +0200 + + lib: Silence some -Wfloat-equal warnings + + In these cases, it should be safe to really use ==, so silence the + warning for these. + + src/vte-private.h | 10 ++++++++++ + src/vte.cc | 4 ++-- + src/vtedraw.cc | 2 +- + 3 files changed, 13 insertions(+), 3 deletions(-) + +commit ce0aaa93f877b5920cae419c5861b24209944a5c +Author: Christian Persch +Date: 2015-09-30 20:26:35 +0200 + + vteapp: Fix build without pcre2 + + src/app.vala | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +commit 6d8980f7476c9e19aa4631ce071d67b9528be409 +Author: Christian Persch +Date: 2015-09-30 20:26:35 +0200 + + build:Fix CXXLDFLAGS checks + + configure.ac | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 4f95d4ed9df726d8d4404d3601639844278780c2 +Author: Christian Persch +Date: 2015-09-30 20:26:35 +0200 + + build: Remove -Wpacked warning + + It shows warnings in vte on i386, but not on anything else afaics. + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ee34c83ec9ea23f71f209f58bee49bf09affdc31 +Author: Michael Catanzaro +Date: 2015-09-29 23:14:24 -0500 + + Fix build with -Werror=format + + -Werror=format is set by default in configure.ac so let's make it work. + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 0550d8a5739c77d9b895c7904154b99db77223a8 +Author: Christian Persch +Date: 2015-09-29 23:56:14 +0200 + + build: Check for pkg-config + + configure.ac | 2 ++ + 1 file changed, 2 insertions(+) + +commit c3fd98a57396b03bcfb00ac322b2d8c60f5b8048 +Author: Christian Persch +Date: 2015-09-29 23:34:24 +0200 + + lib: Fix build without pcre2 + + src/vteregex.cc | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +commit 8e5a72a005c24b462531fcc05b4255ac985ba19d +Author: Christian Persch +Date: 2015-09-29 23:08:00 +0200 + + lib: Fix type builtins + + Move VteRegexError to vteenums.h to fix vtetypebuiltins generation. + + doc/reference/vte.types | 5 ++--- + src/vte/vteenums.h | 20 ++++++++++++++++++++ + src/vte/vteregex.h | 8 -------- + src/vteregex.cc | 1 + + 4 files changed, 23 insertions(+), 11 deletions(-) + +commit 0294a0bc7ddbad303b1cc358d7f160d6d7b97e19 +Author: Christian Persch +Date: 2015-09-28 20:09:22 +0200 + + widget: Remove obsolete workaround + + This used to be necessary when working with glibc's regex, but is + unnecessary for both GRegex and PCRE2. + + src/vte.cc | 31 ++++++++----------------------- + 1 file changed, 8 insertions(+), 23 deletions(-) + +commit eb45e6cbc7c747d0cf277acebfcbc61e96269b27 +Author: Christian Persch +Date: 2015-09-15 21:38:41 +0200 + + lib: Add PCRE2 support + + Add VteRegex wrapping PCRE2's pcre2_code_8* to add refcounting, + and add API to VteTerminal to use it for matching and searching. + + configure.ac | 28 +- + doc/reference/vte-docs.xml | 7 + + doc/reference/vte-sections.txt | 26 +- + src/Makefile.am | 33 +- + src/app.ui | 2 +- + src/app.vala | 111 +++++- + src/debug.c | 3 +- + src/debug.h | 5 +- + src/vte.cc | 846 +++++++++++++++++++++++++++++++++++------ + src/vte/vte.h | 5 +- + src/vte/vtedeprecated.h | 12 + + src/vte/vteregex.h | 77 ++++ + src/vte/vteterminal.h | 15 +- + src/vteapp.c | 56 ++- + src/vteinternal.hh | 27 +- + src/vtepcre2.h | 27 ++ + src/vteregex.cc | 296 ++++++++++++++ + src/vteregexinternal.hh | 20 + + 18 files changed, 1413 insertions(+), 183 deletions(-) + +commit 9ca7b21abd4a4d4d65f3edcdb2476aca067773c1 +Author: Christian Persch +Date: 2015-09-28 20:54:34 +0200 + + vteapp: Fix build with gtk+ < 3.16 + + https://bugzilla.gnome.org/show_bug.cgi?id=755650 + + configure.ac | 7 +++++++ + src/Makefile.am | 4 ++++ + src/app.vala | 2 ++ + 3 files changed, 13 insertions(+) + +commit 4e636acd3434ce0a2111e492d7d74aaba1020323 +Author: Christian Persch +Date: 2015-09-28 20:22:41 +0200 + + vteapp: Remove glib memory profiler support + + It's gone from glib. + + src/vteapp.c | 6 ------ + 1 file changed, 6 deletions(-) + +commit 845b1d97f6f42960ea3c5e133077cbe421120f56 +Author: Christian Persch +Date: 2015-09-28 20:15:01 +0200 + + vteapp: Silence useless debug spew by default + + src/app.vala | 4 ++++ + src/vteapp.c | 4 ++++ + 2 files changed, 8 insertions(+) + +commit 346a2e5a2d1be28968dab109bf020f08d7e5e5fb +Author: Piotr Drąg +Date: 2015-09-24 21:21:41 +0200 + + Updated POTFILES.skip + + po/POTFILES.skip | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 0209b8c20dab7fc454d0fa93f43849f6b5ce8579 +Author: Christian Persch +Date: 2015-09-23 20:36:25 +0200 + + i18n: Don't translate the test application + + po/POTFILES.in | 1 - + po/POTFILES.skip | 1 + + 2 files changed, 1 insertion(+), 1 deletion(-) + +commit 394180996a8d59d0dd9637c427133835663ebbad +Author: Christian Persch +Date: 2015-09-23 20:36:25 +0200 + + i18n: Don't translate the test application + + po/POTFILES.in | 2 -- + po/POTFILES.skip | 2 ++ + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 52032cd4867214c0a3d4eb546bf5d7a93bd76c4b +Author: Christian Persch +Date: 2015-09-23 18:55:22 +0200 + + vteapp: Use a header bar and a gear menu + + src/app.ui | 201 +++++++++++++++++++++++++++++++++-------------------------- + src/app.vala | 100 ++++++++++++++++++----------- + 2 files changed, 179 insertions(+), 122 deletions(-) + +commit 62925f3191367bce01c913e7f8da9b223ad192a8 +Author: Piotr Drąg +Date: 2015-09-22 21:34:57 +0200 + + Updated POTFILES.in + + po/POTFILES.in | 1 + + 1 file changed, 1 insertion(+) + +commit 2184b99ecd9cb5a9c84cbf0d3aa960855a92ae20 +Author: Christian Persch +Date: 2015-09-22 19:58:32 +0200 + + vteapp: Add search + + And also port to using gtk templates. + + src/Makefile.am | 2 + + src/app.gresource.xml | 1 + + src/app.ui | 192 ++++++++++++++++++++------------------ + src/app.vala | 156 ++++++++++++++++++++++++++++--- + src/search-popover.ui | 249 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 499 insertions(+), 101 deletions(-) + +commit 0aa25de96433821a5323c6a0675ce90637c47572 +Author: Christian Persch +Date: 2015-09-21 16:50:55 +0200 + + Post branch version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 91b6c8d5dde3d153e7b234e5f6dcd40fd57981df (tag: 0.42.0) +Author: Christian Persch +Date: 2015-09-21 16:50:16 +0200 + + Version 0.42.0 + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 546aa781692b83393f96c89b68ceaa7f9f9c0d46 +Author: Arash Mousavi +Date: 2015-09-17 01:46:27 +0430 + + Update Persian translation + + po/fa.po | 114 ++++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 65 insertions(+), 49 deletions(-) + +commit 1c703aaefa44f88ca50e210fcb0265f2b65851b9 +Author: Egmont Koblinger +Date: 2015-09-13 15:27:39 +0200 + + widget: Fix regex matches not always being recognized + + https://bugzilla.gnome.org/show_bug.cgi?id=754949 + + src/vte.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 2477ae1d8e904f3dcff27f716ee30073dc3c298e +Author: Christian Persch +Date: 2015-09-07 20:59:04 +0200 + + emulation: Fix comment + + Turns out that xterm does reset this property on hard reset. + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 89541b675021b74a8668462fd930ebce2cda3afc +Author: Christian Persch +Date: 2015-08-30 22:21:10 +0200 + + emulation: Implement DECSET 1004 + + Add support for xterm's DECSET 1004 to enable focus tracking. + This sends CSI I on focus in, and CSI O on focus out. + + Contrary to xterm, vte disables the focus tracking on reset, and when + focus tracking is enabled, immediately sends a focus in or focus out, so + that clients always have an accurate value. + + src/vte-private.h | 2 ++ + src/vte.cc | 24 ++++++++++++++++++++++++ + src/vteinternal.hh | 2 ++ + src/vteseq.cc | 16 ++++++++++++++++ + 4 files changed, 44 insertions(+) + +commit f1b199b66e9eedef163bcbd68bc28613408a2e54 +Author: Christian Persch +Date: 2015-08-30 22:21:10 +0200 + + tests: mev: Add focus tracking mode + + src/mev.c | 241 ++++++++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 164 insertions(+), 77 deletions(-) + +commit d1efd072ac616385823d9be345ce4add12835b53 +Author: Piotr Drąg +Date: 2015-08-26 20:01:43 +0200 + + Updated Polish translation + + po/pl.po | 35 ++++++++++------------------------- + 1 file changed, 10 insertions(+), 25 deletions(-) + +commit c640d0af6074aebc5853860b2a8db74c5750e7f4 +Author: Christian Persch +Date: 2015-08-17 19:15:42 +0200 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 837d13d432f7caa56ea36b840c12d8176b045022 (tag: 0.41.90) +Author: Christian Persch +Date: 2015-08-17 19:15:12 +0200 + + Version 0.41.90 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a477bdd38db0068d013cff6eefa4f5c8757d3839 +Author: Christian Persch +Date: 2015-08-17 19:15:12 +0200 + + build: Fix make dist + + src/Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +commit 587f24ec206425b386f4b1dc5b765713f7596f9b +Author: Christian Persch +Date: 2015-08-17 19:15:12 +0200 + + ring: Make assertion more informative + + https://bugzilla.gnome.org/show_bug.cgi?id=753025 + + src/ring.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c1db666000f9c8e3d05930690926a6d7908e8e41 +Author: Egmont Koblinger +Date: 2015-08-16 12:31:39 +0200 + + widget: Ensure cursor is shown when blinking gets turned off + + https://bugzilla.gnome.org/show_bug.cgi?id=753645 + + src/vte.cc | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 23c7cd0f99d504cbab06d4c27254d4f3e2807ba8 +Author: Egmont Koblinger +Date: 2015-08-16 12:22:20 +0200 + + emulation: Fix escape sequence of Ctrl+Backspace + + https://bugzilla.gnome.org/show_bug.cgi?id=733246 + + src/vte.cc | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit bd86e7637d89a55941674756e3e223c82aee2305 +Author: Christian Persch +Date: 2015-07-15 18:53:10 +0200 + + Revert "Add the style context provider with FALLBACK priority" + + This reverts commit a264918ad22973c69897c559260e77cb14018235. + + https://bugzilla.gnome.org/show_bug.cgi?id=750559 + + src/vte.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f4027d541a3907cb5daa52943f3e25b7c29e263c +Author: Christian Persch +Date: 2015-07-15 13:33:16 +0200 + + build: Fix the required gnutls version + + https://bugzilla.gnome.org/show_bug.cgi?id=752372 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7e8a9e1cc350126f1487743734a70ee3664f2f21 +Author: Egmont Koblinger +Date: 2015-07-15 09:11:25 +0200 + + docs: Fix typo in function name + + https://bugzilla.gnome.org/show_bug.cgi?id=751980 + + doc/reference/vte-sections.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 019c48f5cbcf5fb84109a48b77540c58d68f7555 +Author: Christian Persch +Date: 2015-07-05 14:17:34 +0200 + + docs: Add missing symbols to sections.txt + + https://bugzilla.gnome.org/show_bug.cgi?id=751980 + + doc/reference/vte-sections.txt | 3 +++ + 1 file changed, 3 insertions(+) + +commit fc3f6529d08e543ba064a2aaa668ea9a85af1733 +Author: Pedro Albuquerque +Date: 2015-07-01 22:02:13 +0000 + + Updated Portuguese translation + + po/pt.po | 114 ++++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 66 insertions(+), 48 deletions(-) + +commit 06be4f6701e240117c8f991566bb213bf850c4ee +Author: Daniel Șerbănescu +Date: 2015-06-22 20:22:15 +0200 + + Updated Romanian Translation + + po/ro.po | 103 +++++++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 58 insertions(+), 45 deletions(-) + +commit ecaf60ddab5e2c7c84e245fdce987fea7a51e24e +Author: Behdad Esfahbod +Date: 2015-05-12 12:48:58 -0700 + + Remove check for unused fwrite_unlocked function + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1efffd36979560620b7efd4880188a0ea4a30d5c +Author: Daniel Martinez +Date: 2015-05-04 18:15:45 +0200 + + Added Aragonese translation + + po/LINGUAS | 1 + + po/an.po | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 85 insertions(+) + +commit a235384892c617c961cd1c9131227f8b1363fa22 +Author: Egmont Koblinger +Date: 2015-04-28 23:48:05 +0200 + + stream: Fix a crash on truncate followed by reset + + https://bugzilla.gnome.org/show_bug.cgi?id=748484 + + src/vtestream-file.h | 66 ++++++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 54 insertions(+), 12 deletions(-) + +commit a8b2ae135e352497301dd5ed7d37c9af08a9e75d +Author: Egmont Koblinger +Date: 2015-04-28 22:57:04 +0200 + + pty: Reset SIGQUIT handler to its default + + https://bugzilla.gnome.org/show_bug.cgi?id=748520 + + src/pty.cc | 1 + + 1 file changed, 1 insertion(+) + +commit d37abbc17afa94d0e0c6e18e0924510c0fe9e3ba +Author: Cédric Valmary +Date: 2015-04-28 13:37:27 +0000 + + Updated Occitan translation + + po/oc.po | 154 ++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 69 insertions(+), 85 deletions(-) + +commit 48f8200340825161566eb06d47c1cdb4185c219f +Author: Christian Persch +Date: 2015-04-27 14:53:33 +0200 + + all: Fix includes + + src/pty.cc | 5 +---- + src/ring.h | 2 +- + src/vte-private.h | 1 - + src/vte.cc | 2 +- + src/vteaccess.cc | 2 +- + src/vteaccess.h | 1 - + src/vteapp.c | 2 +- + src/vtedraw.h | 2 -- + src/vteint.h | 3 +-- + src/vteseq.cc | 2 +- + src/vtetypebuiltins.cc.template | 2 +- + 11 files changed, 8 insertions(+), 16 deletions(-) + +commit 6a74baeaabb0a1ce54444611b324338f94721a5c +Merge: 3fac4469 56ea5810 +Author: Christian Persch +Date: 2015-04-27 13:48:52 +0200 + + Merge branch 'work-html' into merge-html + +commit 3fac4469de267f662c761ea4f247c8017ced483d +Author: Piotr Drąg +Date: 2015-04-23 23:15:18 +0200 + + Updated POTFILES.in + + po/POTFILES.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 5a58273b8ec252fad7a810614ed612a7e42f2a9b +Author: Ting-Wei Lan +Date: 2015-04-24 00:18:42 +0800 + + build: Add libc++ check to check-libstdc++.sh + + https://bugzilla.gnome.org/show_bug.cgi?id=748376 + + src/check-libstdc++.sh | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +commit 42ecf1a705a3ff57f3a6eafc0d1dcc594217a18a +Author: Ting-Wei Lan +Date: 2015-04-24 00:10:10 +0800 + + build: Fix build when using C++11 mode + + https://bugzilla.gnome.org/show_bug.cgi?id=748376 + + src/vte.cc | 10 +++++----- + src/vtedraw.cc | 2 +- + 2 files changed, 6 insertions(+), 6 deletions(-) + +commit 669131f41aee180e8cdb994c09264e8ba4578b18 +Author: Egmont Koblinger +Date: 2015-04-23 12:17:17 +0200 + + stream: Don't nest VteIv's definition + + https://bugzilla.gnome.org/show_bug.cgi?id=748354 + + src/vtestream-file.h | 24 ++++++++++++++---------- + 1 file changed, 14 insertions(+), 10 deletions(-) + +commit 6ee7dd640c9124f016ae2ce351439af37b530936 +Author: Christian Persch +Date: 2015-04-01 22:10:24 +0200 + + lib: Make VteTerminalPrivate a C++ class + + src/vte-private.h | 353 +---------------------------------------------- + src/vte.cc | 8 +- + src/vte/vteterminal.h | 6 + + src/vteinternal.hh | 375 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 389 insertions(+), 353 deletions(-) + +commit e167d6da450c6c1a9fa9b3b10f658af23c8759bb +Author: Christian Persch +Date: 2015-04-01 21:41:27 +0200 + + emacs: Adjust settings for C++ mode too + + .dir-locals.el | 5 +++++ + 1 file changed, 5 insertions(+) + +commit b27e3ccf5133bd845aa9d9620c5d09acd4b56be0 +Author: Christian Persch +Date: 2015-04-01 21:28:40 +0200 + + lib: Move define to the few places where it is used + + src/pty.cc | 2 ++ + src/vte-private.h | 2 -- + src/vte.cc | 2 ++ + 3 files changed, 4 insertions(+), 2 deletions(-) + +commit d7149e997970899957c63463b977270f205b7471 +Author: Christian Persch +Date: 2015-04-01 21:24:28 +0200 + + lib: Move defines to vtedefines.hh + + src/Makefile.am | 1 + + src/vte-private.h | 70 ++------------------------------------------ + src/vtedefines.hh | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 90 insertions(+), 68 deletions(-) + +commit 958859d14ef4d94fc4735c700f550b57739f31ac +Author: Christian Persch +Date: 2015-03-30 17:54:33 +0200 + + all: Move to C++ + + doc/reference/Makefile.am | 3 +- + src/Makefile.am | 130 +++++++++++---------- + src/{caps.c => caps.cc} | 0 + src/debug.cc | 1 + + src/{iso2022.c => iso2022.cc} | 0 + src/{keymap.c => keymap.cc} | 0 + src/{matcher.c => matcher.cc} | 0 + src/{pty.c => pty.cc} | 0 + src/{ring.c => ring.cc} | 0 + src/{table.c => table.cc} | 4 +- + src/{vte.c => vte.cc} | 0 + src/{vteaccess.c => vteaccess.cc} | 0 + src/{vteconv.c => vteconv.cc} | 56 ++++----- + src/{vtedraw.c => vtedraw.cc} | 0 + src/{vterowdata.c => vterowdata.cc} | 0 + src/{vteseq.c => vteseq.cc} | 2 +- + src/vtestream-file.h | 6 +- + src/{vtestream.c => vtestream.cc} | 0 + src/{vtetree.c => vtetree.cc} | 0 + ...tins.c.template => vtetypebuiltins.cc.template} | 0 + src/{vteunistr.c => vteunistr.cc} | 0 + src/{vteutils.c => vteutils.cc} | 0 + 22 files changed, 108 insertions(+), 94 deletions(-) + +commit 618a96fea213d2c1310521dd88c252de6cbd256d +Author: Christian Persch +Date: 2015-03-30 15:19:27 +0200 + + build: Add C++ infrastructure + + In preparation of moving to C++, add configure check for C++ compiler, + and add compiler flags and a check script to make sure we do NOT link + to libstdc++. + + configure.ac | 117 +++++++++++++++++++++++++++++++------------------ + src/Makefile.am | 18 ++++++-- + src/check-libstdc++.sh | 13 ++++++ + 3 files changed, 101 insertions(+), 47 deletions(-) + +commit a264918ad22973c69897c559260e77cb14018235 +Author: Iain Lane +Date: 2014-11-14 16:02:47 +0000 + + Add the style context provider with FALLBACK priority + + Adwaita doesn't set these properties any more, but other themes might + want to. Set a lower priority than the theme. + + https://bugzilla.gnome.org/show_bug.cgi?id=740123 + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 101addedd67374536e71b4ed7e5cfa29fd781670 +Author: Christian Persch +Date: 2015-04-13 19:04:27 +0200 + + lib: Add missing G_BEGIN/END_DECLS + + src/vte/vteversion.h.in | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 6e369a5d6e5d21dd6242b362c15a7c634483b0dc +Author: Egmont Koblinger +Date: 2015-04-02 01:00:07 +0200 + + Revert "emulation: Make clear compatible with xterm, don't add lines to scrollback" + + This reverts commit 450bf257266c1ec0f380e88a5512743acc6fc863. + + https://bugzilla.gnome.org/show_bug.cgi?id=747191 + + src/vteseq.c | 29 ++++++++++++----------------- + 1 file changed, 12 insertions(+), 17 deletions(-) + +commit 4af7670b6e429f4f15c0f5597ce4d4d276d53151 +Author: Christian Persch +Date: 2015-04-01 18:58:01 +0200 + + build: Fix srcdir != builddir issue + + https://bugzilla.gnome.org/show_bug.cgi?id=747137 + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bad099d7bf3922fb7ea7e537f96167d0a052d332 +Author: Christian Persch +Date: 2015-03-31 19:56:29 +0200 + + build: m4: Respect language + + Make it possible to use the CC_* macros with C and C++ in the same + configure script, by renaming the cache variables appropriately. + + acinclude.m4 | 72 ++++++++++++++++++++++++++++++------------------------------ + 1 file changed, 36 insertions(+), 36 deletions(-) + +commit 3539be453711e38858d79035867d742c534a6a1e +Author: Christian Persch +Date: 2015-03-31 19:53:46 +0200 + + build: m4: Fix m4 warning about missing AC_LANG_SOURCE + + acinclude.m4 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d7d095c0db1d14243d278603c9a389ff77148c6d +Author: Christian Persch +Date: 2015-03-31 19:52:22 +0200 + + build: m4: Update from upstream + + Update with latest version from systemd. + + acinclude.m4 | 31 ++++++++++++++++--------------- + 1 file changed, 16 insertions(+), 15 deletions(-) + +commit 868e47e19f7fbf25f01363c62c4a2201fc60c1f4 +Author: Christian Persch +Date: 2015-03-31 18:56:13 +0200 + + all: Reorganise source tree + + Move public headers to src/vte/ so that in-tree and out-of-tree inclusion can + both use #include . + + Makefile.am | 4 ++- + configure.ac | 2 +- + doc/reference/Makefile.am | 14 ++++++-- + src/Makefile.am | 82 ++++++++++++++++++++++++------------------- + src/reflect.c | 2 +- + src/{ => vte}/vte.h | 0 + src/{ => vte}/vtedeprecated.h | 0 + src/{ => vte}/vteenums.h | 0 + src/{ => vte}/vteglobals.h | 0 + src/{ => vte}/vtemacros.h | 0 + src/{ => vte}/vtepty.h | 0 + src/{ => vte}/vteterminal.h | 0 + src/{ => vte}/vteversion.h.in | 0 + vte/vte.h | 1 - + 14 files changed, 62 insertions(+), 43 deletions(-) + +commit 77114e490fd8ca10616292dc36fbcc6ff694091f +Author: Christian Persch +Date: 2015-03-30 17:54:33 +0200 + + all: Fix compilation with CC=g++ + + In preparation of moving to C++. + + src/debug.c | 2 +- + src/debug.h | 6 +- + src/keymap.c | 32 +++++----- + src/keymap.h | 4 +- + src/pty.c | 55 ++++++++-------- + src/ring.c | 8 +-- + src/table.c | 2 +- + src/vte-private.h | 86 ++++++++++++++----------- + src/vte.c | 174 ++++++++++++++++++++++++++------------------------- + src/vteaccess.c | 87 ++++++++++++-------------- + src/vtedraw.c | 12 ++-- + src/vterowdata.c | 2 +- + src/vteseq.c | 26 ++++---- + src/vtestream-base.h | 5 ++ + src/vtestream-file.h | 18 ++++-- + 15 files changed, 271 insertions(+), 248 deletions(-) + +commit 299c700c743c7d5dfd14e3b3a21417d9e9f35818 +Author: Christian Persch +Date: 2015-03-30 20:04:40 +0200 + + pty: Remove PTY helper + + It's only used for the obsolete [uw]tmp logging. + + https://bugzilla.gnome.org/show_bug.cgi?id=747046 + + Makefile.am | 5 - + configure.ac | 33 +- + doc/reference/vte-sections.txt | 8 +- + gnome-pty-helper/AUTHORS | 4 - + gnome-pty-helper/COPYING | 502 ---------------------- + gnome-pty-helper/Makefile.am | 32 -- + gnome-pty-helper/NEWS | 0 + gnome-pty-helper/README | 9 - + gnome-pty-helper/acinclude.m4 | 244 ----------- + gnome-pty-helper/configure.ac | 33 -- + gnome-pty-helper/git.mk | 1 - + gnome-pty-helper/gnome-login-support.c | 380 ----------------- + gnome-pty-helper/gnome-login-support.h | 39 -- + gnome-pty-helper/gnome-pty-helper.c | 751 --------------------------------- + gnome-pty-helper/gnome-pty.h | 22 - + gnome-pty-helper/gnome-utmp.c | 374 ---------------- + src/Makefile.am | 1 - + src/pty.c | 512 +--------------------- + src/vte.c | 2 - + src/vtedeprecated.h | 4 + + src/vteenums.h | 14 +- + src/vtepty.h | 2 - + 22 files changed, 22 insertions(+), 2950 deletions(-) + +commit 450bf257266c1ec0f380e88a5512743acc6fc863 +Author: Egmont Koblinger +Date: 2015-03-30 23:26:39 +0200 + + emulation: Make clear compatible with xterm, don't add lines to scrollback + + https://bugzilla.gnome.org/show_bug.cgi?id=506438 + + src/vteseq.c | 29 +++++++++++++++++------------ + 1 file changed, 17 insertions(+), 12 deletions(-) + +commit 41d2e152878cc35d78a4dd8feb7cad52f088cdf9 +Author: Egmont Koblinger +Date: 2015-03-30 23:19:46 +0200 + + emulation: Fix vertical positioning after resize in some rare cases + + https://bugzilla.gnome.org/show_bug.cgi?id=747059 + + doc/rewrap.txt | 10 +++++----- + src/vte.c | 2 +- + 2 files changed, 6 insertions(+), 6 deletions(-) + +commit ef3d7942c9ab3c89d315f8bee5a53a76d3d5a7f6 +Author: Christian Persch +Date: 2015-03-30 12:50:21 +0200 + + all: Update version check to stable version + + src/pty.c | 2 +- + src/vte.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 5c946bbffd8a3040009f4735afa5afe04ad2b276 +Author: Christian Persch +Date: 2015-03-30 11:48:46 +0200 + + git.mk: Update from upstream + + git.mk | 29 ++++++++++++++++++++++------- + 1 file changed, 22 insertions(+), 7 deletions(-) + +commit 8427999ef982baef3c45762a656aa6b4a9f170ad +Author: Egmont Koblinger +Date: 2015-03-29 13:00:20 +0200 + + build: Remove obsolete gtk check + + src/vte.c | 4 ---- + 1 file changed, 4 deletions(-) + +commit 3291b8700e77c0254347b0d65cf4ea9595b96199 +Author: Christian Persch +Date: 2015-03-24 14:58:29 +0100 + + pty: More correct assertion + + Unlikely this is a problem, but was pointed out in + https://bugzilla.gnome.org/show_bug.cgi?id=746667 + + src/pty.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 56f4d7c5fe81cd6f04aee1722da855aa156896d4 +Author: Christian Persch +Date: 2015-03-23 19:42:37 +0100 + + Post branch version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e1b9b19ac1fe11006830c6fe78ed47b708832ed0 (tag: 0.40.0) +Author: Milo Casagrande +Date: 2015-03-20 09:18:29 +0000 + + Updated Italian translation + + po/it.po | 86 +++++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 41 insertions(+), 45 deletions(-) + +commit 98fe3b7ad0398bb2c56d8201f8883e909e6ca5d7 +Author: Christian Persch +Date: 2015-03-16 19:02:58 +0100 + + Post release version bump + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit af340daa087a083fa7d943f1365ac1e4633b9dfd (tag: 0.39.92) +Author: Christian Persch +Date: 2015-03-16 18:24:43 +0100 + + Version 0.39.92 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a5fb88c896024d137228fe2089deace4c8f2e6cb +Author: Christian Persch +Date: 2015-03-12 19:28:52 +0100 + + widget: Adjust default set of word characters + + https://bugzilla.gnome.org/show_bug.cgi?id=730632 + + src/vte.c | 15 ++++++--------- + 1 file changed, 6 insertions(+), 9 deletions(-) + +commit 625685a80598e668886feffd0ff10363fb244a7c +Author: Christian Persch +Date: 2015-03-12 19:28:52 +0100 + + widget: Implement word char exceptions + + https://bugzilla.gnome.org/show_bug.cgi?id=730632 + + src/vte-private.h | 7 ++- + src/vte.c | 181 ++++++++++++++++++++++++++++++++++++++++++++++++++---- + src/vteterminal.h | 2 +- + 3 files changed, 176 insertions(+), 14 deletions(-) + +commit c6edcfd003ad8835771712d6a188db1fa85de9df +Author: Samir Ribic +Date: 2015-03-13 21:02:34 +0000 + + Updated Bosnian translation + + po/bs.po | 141 +++++++++++++++++++++++---------------------------------------- + 1 file changed, 52 insertions(+), 89 deletions(-) + +commit 50e3e3899d72cfb0ae95ae41bbc08bdaa7c28f7b +Author: Egmont Koblinger +Date: 2015-03-03 15:09:58 +0100 + + widget: Decide on rectangular selection when the mouse click occurs + + https://bugzilla.gnome.org/show_bug.cgi?id=745471 + + src/vte.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit f2c40efd59639e87cf94bbecd5c70d32443b1323 +Author: Egmont Koblinger +Date: 2015-02-27 12:00:05 +0100 + + widget,emulation: Ignore if Shift is released while selecting with mouse + + https://bugzilla.gnome.org/show_bug.cgi?id=745134 + + src/vte.c | 13 +++++-------- + 1 file changed, 5 insertions(+), 8 deletions(-) + +commit 01d7eb0388b8215df5bed6165b519e03ca4e040b +Author: Egmont Koblinger +Date: 2015-02-27 11:59:19 +0100 + + emulation: Report middle mouse button release + + https://bugzilla.gnome.org/show_bug.cgi?id=745131 + + src/vte-private.h | 1 + + src/vte.c | 11 ++++++++++- + 2 files changed, 11 insertions(+), 1 deletion(-) + +commit 3448a1dbbd0e8af558d25f9eb4195f699e7e288b +Author: Egmont Koblinger +Date: 2015-02-27 11:57:56 +0100 + + emulation: Fix mouse mode 1003 to correctly report if no button is pressed + + https://bugzilla.gnome.org/show_bug.cgi?id=745074 + + src/vte-private.h | 2 +- + src/vte.c | 29 ++++++++++++++++++++++------- + 2 files changed, 23 insertions(+), 8 deletions(-) + +commit ec5028023dae899752ab43728d4b7c4818ff4d53 +Author: Egmont Koblinger +Date: 2015-02-27 11:55:38 +0100 + + emulation: Fix printing DEL (127) to do nothing + + https://bugzilla.gnome.org/show_bug.cgi?id=744837 + + src/caps.c | 2 +- + src/vteseq-n.gperf | 1 + + src/vteseq.c | 6 ++++++ + 3 files changed, 8 insertions(+), 1 deletion(-) + +commit 5d510f8984b442103f5ad00f009ac6d62384c639 +Author: Egmont Koblinger +Date: 2015-02-27 11:54:47 +0100 + + a11y: Fix the order of events + + https://bugzilla.gnome.org/show_bug.cgi?id=372777 + + src/vteaccess.c | 24 ++++++++++++++++++++++-- + 1 file changed, 22 insertions(+), 2 deletions(-) + +commit 4ff2d8daed454c581dc45f1be199f0b262fbae88 +Author: Christian Persch +Date: 2015-02-16 22:26:55 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b720a360829b713cf55c9db22b7d5c03bf6fa447 (tag: 0.39.90) +Author: Christian Persch +Date: 2015-02-08 19:44:34 +0100 + + widget: Add word-char-exceptions property infrastructure + + Just the infrastructure; not hooked up to anything yet. + + https://bugzilla.gnome.org/show_bug.cgi?id=730632 + + doc/reference/vte-sections.txt | 2 ++ + src/app.vala | 12 ++++++--- + src/vte-private.h | 1 + + src/vte.c | 59 ++++++++++++++++++++++++++++++++++++++++++ + src/vteterminal.h | 5 ++++ + 5 files changed, 76 insertions(+), 3 deletions(-) + +commit 8fc00da9e9f8af5e37b2e37657195d09cb3ce9fa +Author: Christian Persch +Date: 2015-02-08 19:47:13 +0100 + + Version 0.39.90 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1c71f28a7f0f957cb45cf55fa9517e63390e62f6 +Author: Egmont Koblinger +Date: 2015-02-08 19:04:10 +0100 + + widget: Make word char detection depend on the VteTerminal + + In preparation of (re-)introducing a way to override the default + word chars. + + https://bugzilla.gnome.org/show_bug.cgi?id=730632 + + src/vte-private.h | 2 +- + src/vte.c | 9 +++++---- + src/vteaccess.c | 35 +++++++++++++++++++---------------- + 3 files changed, 25 insertions(+), 21 deletions(-) + +commit 3c192eca2d03426760171806e13205e6c676edf3 +Author: Christian Persch +Date: 2015-01-26 11:04:53 +0100 + + build: Use -fno-semantic-interposition if available + + configure.ac | 1 + + 1 file changed, 1 insertion(+) + +commit 5e44fbbc502310df59c95db13d3d9b13eaa4171b +Author: Sveinn í Felli +Date: 2015-02-02 08:41:33 +0000 + + Updated Icelandic translation + + po/is.po | 197 +++++++++++++++++++++++++++++++++------------------------------ + 1 file changed, 103 insertions(+), 94 deletions(-) + +commit 143de2bfe40a33424991944202e9c3b25c3a0b01 +Author: Samuel Thibault +Date: 2015-02-01 20:37:42 +0100 + + a11y: Fix caret position when the cursor is at the top left of the terminal + + https://bugzilla.gnome.org/show_bug.cgi?id=166637 + + src/vteaccess.c | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +commit 1ab98077cadd4a54bb9f1f963690b4b1bda1ba7e +Author: Christian Persch +Date: 2015-01-21 17:10:54 +0100 + + Revert "Set the caret properly when the cursor is at the top left of the terminal." + + This reverts commit 3e3e3fdec8302a04c400bc7fbfa1118dbf9cbccd. + + Unauthorised commit. + + src/vteaccess.c | 50 ++++++++++++++++++-------------------------------- + 1 file changed, 18 insertions(+), 32 deletions(-) + +commit 3e3e3fdec8302a04c400bc7fbfa1118dbf9cbccd +Author: Jason White +Date: 2013-01-02 12:34:53 +1100 + + Set the caret properly when the cursor is at the top left of the terminal. + + https://bugzilla.gnome.org/show_bug.cgi?id=166637 + + src/vteaccess.c | 50 ++++++++++++++++++++++++++++++++------------------ + 1 file changed, 32 insertions(+), 18 deletions(-) + +commit c91ad56404898a4f2e7ef668edd52497f19cf5de +Author: Egmont Koblinger +Date: 2015-01-20 23:35:42 +0100 + + emulation: Fix escape sequences of normal and keypad Enter with modifiers + + https://bugzilla.gnome.org/show_bug.cgi?id=743258 + + src/keymap.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit c6643cb5d41a31ea72927bc1981fd5ba10385697 +Author: Christian Persch +Date: 2015-01-20 18:21:17 +0100 + + docs: Add missing Since: comment + + src/vte.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 3dea7fde1d474d8988dcc87ce25fb19cc0d745ce +Author: Christian Persch +Date: 2015-01-20 18:04:54 +0100 + + docs: Fix doc comment syntax + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 117f65e672bf2a37f0c7e9f476c50be3fa095a6b +Author: Christian Persch +Date: 2015-01-20 17:59:53 +0100 + + all: Add feature string + + doc/reference/vte-sections.txt | 1 + + src/vte.c | 19 +++++++++++++++++++ + src/vteglobals.h | 2 ++ + 3 files changed, 22 insertions(+) + +commit d03fa439b26ca876a05cea6bf5d57ca03f7131e1 +Author: Egmont Koblinger +Date: 2015-01-20 17:00:07 +0100 + + build: Wire up the gnutls switch + + https://bugzilla.gnome.org/show_bug.cgi?id=743231 + + src/vtestream-file.h | 29 +++++++++++++++++++++-------- + 1 file changed, 21 insertions(+), 8 deletions(-) + +commit df839df6dedbaf9e156fd2489b4b790fae8678a3 +Author: Fabio Tomat +Date: 2015-01-20 15:55:28 +0000 + + Updated Friulian translation + + po/fur.po | 93 ++++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 53 insertions(+), 40 deletions(-) + +commit 222394fecb368e4f56116c31d870d5888700d6d8 +Author: Christian Persch +Date: 2015-01-20 16:49:49 +0100 + + build: Add --without-gnutls configure switch + + Not yet wired up in the code. + + https://bugzilla.gnome.org/show_bug.cgi?id=743231 + + configure.ac | 20 +++++++++++++++++++- + 1 file changed, 19 insertions(+), 1 deletion(-) + +commit d07ea7c64cf7c13b639684e7277d97523e29f2a0 +Author: Egmont Koblinger +Date: 2015-01-19 20:18:13 +0100 + + widget: Fix backwards selection over wide characters + + https://bugzilla.gnome.org/show_bug.cgi?id=725909#c15 + + src/vte.c | 1 + + 1 file changed, 1 insertion(+) + +commit 12e706ba1601896fc233ad97255a37281e70dc09 +Author: Christian Persch +Date: 2015-01-19 12:28:22 +0100 + + Revert "vte.sh: Append to PROMPT_COMMAND rather than overwriting it" + + This reverts commit 1e6e46f90a035a51b37576d059d6108ece1b4eaa. + + Revert this patch since it'll cause __vte_prompt_command to be + twice in PROMPT_COMMAND with the default fedora /etc/bashrc for + non-login shells. + + Conflicts: + src/vte.sh + + src/vte.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c94ad30af3c487ccdbd4ef581eb3583ee33aa89a +Author: Egmont Koblinger +Date: 2015-01-18 19:20:12 +0100 + + Revert "vte.sh: Change the title in zsh too, as we do in bash" + + This reverts commit ded24c01de5999ea8e71c4804053e478de38b160. + + Conflicts: + src/vte.sh + + src/vte.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1e6e46f90a035a51b37576d059d6108ece1b4eaa +Author: Egmont Koblinger +Date: 2015-01-18 18:17:07 +0100 + + vte.sh: Append to PROMPT_COMMAND rather than overwriting it + + https://bugzilla.gnome.org/show_bug.cgi?id=704960 + + src/vte.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ded24c01de5999ea8e71c4804053e478de38b160 +Author: Egmont Koblinger +Date: 2015-01-18 18:15:19 +0100 + + vte.sh: Change the title in zsh too, as we do in bash + + https://bugzilla.gnome.org/show_bug.cgi?id=743073 + + src/vte.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 75f76e851605c70a516e301311fc97101556cdbb +Author: Egmont Koblinger +Date: 2015-01-18 18:11:53 +0100 + + vte.sh: Use consistent notation + + src/vte.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b72d5b7bd39aceac6d1163e0fe0a3cd9012fcaa5 +Author: Egmont Koblinger +Date: 2015-01-18 17:54:12 +0100 + + widget: Fix triple click behavior + + https://bugzilla.gnome.org/show_bug.cgi?id=725909#c1 + + src/vte.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit c632c336a5cdca8ea3f1856973a359431b61136a +Author: Egmont Koblinger +Date: 2015-01-18 17:51:07 +0100 + + widget: Modify selection boundaries to match xterm's behavior + + https://bugzilla.gnome.org/show_bug.cgi?id=725909 + + src/vte.c | 29 +++++++++++++---------------- + 1 file changed, 13 insertions(+), 16 deletions(-) + +commit c18db6cae7f5d8d8f70c5c0c589243f8d29fad0e +Author: Egmont Koblinger +Date: 2015-01-18 17:36:55 +0100 + + docs: Method was renamed to vte_terminal_spawn_sync + + src/pty.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 65bb9e38474b1dcefd21acd870a3e193668d1c49 +Author: Egmont Koblinger +Date: 2015-01-18 17:15:10 +0100 + + stream: Encrypt the contents + + The compressed scrollback block of at most 64kB in the "boa" layer is now + encrypted with AES 256 GCM before hitting the disk. + + https://bugzilla.gnome.org/show_bug.cgi?id=738601 + https://bugzilla.gnome.org/show_bug.cgi?id=664611 + + configure.ac | 2 +- + src/vtestream-file.h | 513 ++++++++++++++++++++++++++++++++++++--------------- + 2 files changed, 367 insertions(+), 148 deletions(-) + +commit 2e1d9354a6cd16908b44793e0be321bd97f9081b +Author: Egmont Koblinger +Date: 2015-01-18 17:11:48 +0100 + + ring: Don't reset the stream offsets to 0 on ring reset + + This is required for encryption, so that we don't reuse the same IV. + + https://bugzilla.gnome.org/show_bug.cgi?id=738601#c93 + + src/ring.c | 14 ++++++++------ + src/ring.h | 2 +- + src/vte.c | 18 ++++++------------ + 3 files changed, 15 insertions(+), 19 deletions(-) + +commit 51bd252e2ef35661f0bbc1b3ea1cc4cd089aca15 +Author: Egmont Koblinger +Date: 2015-01-09 22:53:04 +0100 + + widget,docs: Clarify palette entries, remove leftovers of indexed dim colors + + https://bugzilla.gnome.org/show_bug.cgi?id=446533 + + src/vte.c | 44 ++++++++++++++++++-------------------------- + 1 file changed, 18 insertions(+), 26 deletions(-) + +commit 80c55b04d0c1d2a42ab236f9387274df50157d05 +Author: Egmont Koblinger +Date: 2015-01-08 22:56:25 +0100 + + ring: Don't attempt to close streams that weren't opened + + https://bugzilla.gnome.org/show_bug.cgi?id=742606 + + src/ring.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit f7e71e74d8eba0edd565c5904bd829e4185177d7 +Author: Egmont Koblinger +Date: 2015-01-08 14:25:16 +0100 + + widget: Invalidate rectangular selection on rewrap + + https://bugzilla.gnome.org/show_bug.cgi?id=742320 + + src/vte.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 2b3b9a1167aafb8d9ac40b2b2c57e5434fb33379 +Author: Egmont Koblinger +Date: 2015-01-07 19:05:41 +0100 + + doc: Add ignore-decorator for gtk-doc + + https://bugzilla.gnome.org/show_bug.cgi?id=742501 + + doc/reference/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3111d44927ee755c07eb5c51656935770b0ce59b +Author: Egmont Koblinger +Date: 2014-12-28 23:53:22 +0100 + + emulation: Support CSI 3J (clear scrollback) + + https://bugzilla.gnome.org/show_bug.cgi?id=678042 + + src/caps.c | 8 ++++---- + src/ring.c | 21 ++++++++++++++++++++- + src/ring.h | 1 + + src/vte-private.h | 1 + + src/vte.c | 14 ++++++++++++++ + src/vteseq.c | 10 ++++++++-- + 6 files changed, 48 insertions(+), 7 deletions(-) + +commit 015acdc077b0ce016919b02e94d4dc5fb0f7445c +Author: Egmont Koblinger +Date: 2014-12-28 23:51:17 +0100 + + ring: Rename visible_rows_hint: it's no longer a hint only + + src/ring.c | 20 ++++++++++---------- + src/ring.h | 4 ++-- + src/vte.c | 4 ++-- + 3 files changed, 14 insertions(+), 14 deletions(-) + +commit 57731fdd70964784017ed4a011475ffa9337604e +Author: Egmont Koblinger +Date: 2014-12-19 00:14:00 +0100 + + stream: Avoid g_assert expression with side effect + + src/vtestream-file.h | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +commit 9752965a0ae611634232fc6b019a81c0d78594cc +Author: Christian Persch +Date: 2014-12-15 22:38:17 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d564cb5190331df31a27beae989cf24c98455ff1 (tag: 0.39.1) +Author: Behdad Esfahbod +Date: 2014-12-14 16:50:15 -0800 + + Rebuild box_drawing.h if generator script changes + + Avoids build breakage when the format changes. + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 51cc5a7507ea28123c915ee8c5cfd7a10948bbf0 +Author: Egmont Koblinger +Date: 2014-12-14 23:21:17 +0100 + + ring: Don't create streams for the alternate screen + + https://bugzilla.gnome.org/show_bug.cgi?id=741480 + + src/ring.c | 29 +++++++++++++++++++++-------- + src/ring.h | 3 ++- + src/vte.c | 4 ++-- + 3 files changed, 25 insertions(+), 11 deletions(-) + +commit ab8b3a3465625e08e4aa5657d13d54b6818a231a +Author: Egmont Koblinger +Date: 2014-12-14 23:14:30 +0100 + + stream: Compress data with zlib + + Compression is implemented in "boa", a new layer between the "snake" storing + 64kB units and the buffering layer. Each 64kB unit is compressed separately, + and we rely on the file system leaving sparse blocks. + + https://bugzilla.gnome.org/show_bug.cgi?id=738121 + https://bugzilla.gnome.org/show_bug.cgi?id=738601 + + configure.ac | 2 +- + src/vtestream-file.h | 723 +++++++++++++++++++++++++++++++++++++++++---------- + 2 files changed, 580 insertions(+), 145 deletions(-) + +commit 7e63a5068f50567b102d0ca18bc5394389687286 +Author: Egmont Koblinger +Date: 2014-12-14 22:59:16 +0100 + + stream: Implement with one file descriptor + + Instead of paging between two file descriptors, store the stream in one; + with a special "snake" mapping between logical and physical offsets. + Replace stdio caching with pwrite/pread of 64kB units, and manual buffering + on top of the snake layer. + + https://bugzilla.gnome.org/show_bug.cgi?id=738601 + + src/Makefile.am | 21 +- + src/vtestream-base.h | 21 +- + src/vtestream-file.h | 1092 +++++++++++++++++++++++++++++++++++++------------- + src/vtestream.h | 3 +- + 4 files changed, 857 insertions(+), 280 deletions(-) + +commit 4ab677d4d8d273a969093b29b375c8054416df2e +Author: Egmont Koblinger +Date: 2014-12-11 20:20:37 +0100 + + emulation: Change window manipulation sequences only perform one action + + https://bugzilla.gnome.org/show_bug.cgi?id=741402 + + src/vteseq.c | 396 ++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 200 insertions(+), 196 deletions(-) + +commit a72436b76c25ec33cdf11d8731b866052aa0724a +Author: Egmont Koblinger +Date: 2014-12-11 20:17:25 +0100 + + emulation: Change soft reset not to switch back to normal screen + + This also works around an assertion failure due to incorrect cursor + position, introduced in commit 5a434e6c4457bdfe182a13213396e7a66a08f767. + + https://bugzilla.gnome.org/show_bug.cgi?id=741406 + + src/vte.c | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +commit 44ee72738ecfc254728222706faf2a7a2637033d +Author: Egmont Koblinger +Date: 2014-12-08 18:17:18 +0100 + + doc: Update iso2022.txt: keep only the supported ones and fix British + + src/iso2022.txt | 30 ++++++------------------------ + 1 file changed, 6 insertions(+), 24 deletions(-) + +commit fca0c15fc2288b3315d1de24958a4732580f620e +Author: Egmont Koblinger +Date: 2014-12-08 17:32:07 +0100 + + build: Drop unitables + + Should have been done in commit 02da6534a721f09619962ca24aa287b2a36bd630 + + src/mkunitables.sh | 45 - + src/unitable.CNS11643 | 17712 ------------------------------------------------ + src/unitable.CP437 | 129 - + src/unitable.GB12345 | 7549 --------------------- + src/unitable.GB2312 | 7446 -------------------- + src/unitable.JIS0201 | 66 - + src/unitable.JIS0208 | 6879 ------------------- + src/unitable.JIS0212 | 6068 ----------------- + src/unitable.KSX1001 | 8227 ---------------------- + 9 files changed, 54121 deletions(-) + +commit e549a0eebc82fde89134c15ead322dc199d99239 +Author: Egmont Koblinger +Date: 2014-12-07 13:41:49 +0100 + + emulation: Fix crash in restore-cursor without a preceding save-cursor + + https://bugzilla.gnome.org/show_bug.cgi?id=741193 + + src/vte-private.h | 2 ++ + src/vte.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- + src/vteseq.c | 37 ++----------------------------------- + 3 files changed, 52 insertions(+), 37 deletions(-) + +commit 5f19e0b08cb06c76d989592e1a859ac3a23b8b4b +Author: Debarshi Ray +Date: 2014-12-04 16:46:00 +0100 + + widget: Reap only when a child is present + + https://bugzilla.gnome.org/show_bug.cgi?id=740929 + + src/vte.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 38e10d6db707a4e602afe97e059f5e4d20aef7a6 +Author: Yaşar Şentürk +Date: 2014-12-04 07:51:33 +0000 + + Updated Turkish translation + + po/tr.po | 102 ++++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 58 insertions(+), 44 deletions(-) + +commit 82a8b0697dd948fa488b5a51ee7391deb35d49be +Author: Egmont Koblinger +Date: 2014-12-01 21:25:54 +0100 + + pty: Default to TERM=xterm-256color + + https://bugzilla.gnome.org/show_bug.cgi?id=740641 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 31b150146189b49fadd126edc1c373ada234c865 +Author: Egmont Koblinger +Date: 2014-12-01 13:30:52 +0100 + + widget: Do not leave behind a zombie child when closing a terminal + + https://bugzilla.gnome.org/show_bug.cgi?id=740929 + + src/vte.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +commit 916964eb67e230f1aa9204623944745370eb771e +Author: Egmont Koblinger +Date: 2014-12-01 13:27:26 +0100 + + emulation: Modify erase-in-line when cursor is beyond the last column + + Don't move the cursor back to the last column. This intentially deviates + from xterm because makes more sense and fixes utilities such as grep. + + https://bugzilla.gnome.org/show_bug.cgi?id=740789 + + src/vteseq.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +commit fc9dcbba2e875e44e646287f8551a89297021a11 +Author: Egmont Koblinger +Date: 2014-11-29 13:28:46 +0100 + + ring: Add _vte_ring_reset() + + https://bugzilla.gnome.org/show_bug.cgi?id=738601#c75 + + src/ring.c | 10 ++++++++++ + src/ring.h | 1 + + src/vte.c | 8 ++------ + 3 files changed, 13 insertions(+), 6 deletions(-) + +commit 6da6f95ba2efe565f92ab7ed7d27090237c3cb06 +Author: Christian Persch +Date: 2014-11-24 22:28:56 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5a434e6c4457bdfe182a13213396e7a66a08f767 (tag: 0.39.0) +Author: Egmont Koblinger +Date: 2014-11-22 19:20:35 +0100 + + emulation: Save/restore alternate charset + + https://bugzilla.gnome.org/show_bug.cgi?id=731205 + + src/vte-private.h | 67 +++++--- + src/vte.c | 281 ++++++++++++++---------------- + src/vteseq.c | 502 +++++++++++++++++++++++++++++------------------------- + 3 files changed, 442 insertions(+), 408 deletions(-) + +commit aa5cd566746d98cdb89a50ec41fcfaf01494dd80 +Author: Egmont Koblinger +Date: 2014-11-22 19:17:56 +0100 + + emulation: Drop support for default/UTF-8 character set escape sequences + + https://bugzilla.gnome.org/show_bug.cgi?id=731208 + + src/vteseq-n.gperf | 4 ++-- + src/vteseq.c | 15 --------------- + 2 files changed, 2 insertions(+), 17 deletions(-) + +commit 02da6534a721f09619962ca24aa287b2a36bd630 +Author: Egmont Koblinger +Date: 2014-11-22 19:16:56 +0100 + + emulation: Drop ISO-2022 support + + https://bugzilla.gnome.org/show_bug.cgi?id=732586 + + src/Makefile.am | 38 +- + src/caps.c | 10 +- + src/interpret.c | 5 +- + src/iso2022.c | 1700 +--------------------------------------------------- + src/iso2022.h | 22 +- + src/table.c | 7 +- + src/vte-private.h | 13 +- + src/vte.c | 139 +++-- + src/vteseq-n.gperf | 10 +- + src/vteseq.c | 60 +- + 10 files changed, 187 insertions(+), 1817 deletions(-) + +commit 18d710a8ba9d546ad9a8e6135f4097c24f83d182 +Author: Egmont Koblinger +Date: 2014-11-22 16:26:48 +0100 + + emulation: Add support for C1 control codes + + https://bugzilla.gnome.org/show_bug.cgi?id=730154 + + src/matcher.c | 41 ++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 40 insertions(+), 1 deletion(-) + +commit 430965a0bc372296555f859bcf56a358ea191507 +Author: Paul Bolle +Date: 2014-11-22 15:45:19 +0100 + + emulation: Add support for DECSCUSR (set cursor style) + + https://bugzilla.gnome.org/show_bug.cgi?id=720821 + + src/caps.c | 2 + + src/vte-private.h | 33 +++++++++++++- + src/vte.c | 127 +++++++++++++++++++++++++++++++++++++++++++---------- + src/vteseq-n.gperf | 1 + + src/vteseq.c | 28 ++++++++++++ + 5 files changed, 167 insertions(+), 24 deletions(-) + +commit 447266e2925527f898d3e9d048db7cecd2397cb7 +Author: Egmont Koblinger +Date: 2014-11-22 13:33:33 +0100 + + widget: Fix installing the CJK ambiguous width property + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0a5ce7e493b9965f788351b271b4804753624e38 +Author: Egmont Koblinger +Date: 2014-11-22 13:12:33 +0100 + + widget: Draw attributes on box drawing characters + + https://bugzilla.gnome.org/show_bug.cgi?id=708195 + + src/box_drawing_generate.sh | 2 +- + src/vte.c | 568 ++------------------------------------------ + src/vtedraw.c | 478 +++++++++++++++++++++++++++++++++++++ + 3 files changed, 501 insertions(+), 547 deletions(-) + +commit d3bbb4a543d43034c89bc9ca819154e2b58f3177 +Author: Nick Stoughton +Date: 2014-11-22 13:07:07 +0100 + + widget: Remove colon from word chars + + https://bugzilla.gnome.org/show_bug.cgi?id=727743#c8 + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit be56dd13d7327a597202eedd70cde87a603c54e5 +Author: Christian Persch +Date: 2014-11-19 22:00:23 +0100 + + misc: Add functions to get the version at runtime + + src/vte.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vteversion.h.in | 6 ++++++ + 2 files changed, 60 insertions(+) + +commit ecf7e0dafb95702a14c2e57e96b397600ccfc85b +Author: Egmont Koblinger +Date: 2014-11-17 12:19:16 +0100 + + widget: Fix advance_tail if tail is not in the stream + + https://bugzilla.gnome.org/show_bug.cgi?id=738964 + + src/ring.c | 6 +++--- + src/vtestream-file.h | 2 ++ + 2 files changed, 5 insertions(+), 3 deletions(-) + +commit a7419dd861f0021391cae784137bdff2a0714426 +Author: Egmont Koblinger +Date: 2014-11-17 12:18:09 +0100 + + build: Add a missing return value + + src/vtestream-file.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 19963440f9da89e2a3035c8a7488a92a244f22e3 +Author: Christian Persch +Date: 2014-11-03 18:38:30 +0100 + + widget: Check cursor's display before using it + + src/vte.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 79009162081fd6547136701b4baf4f7c7a8db5f7 +Author: Christian Persch +Date: 2014-11-03 18:38:30 +0100 + + docs: Add index for API new in 0.40 + + doc/reference/vte-docs.xml | 4 ++++ + 1 file changed, 4 insertions(+) + +commit c2dc6bb2e2d4a99fade8e97d127bd1a91ef1585c +Author: Christian Persch +Date: 2014-11-03 18:38:30 +0100 + + widget: Deprecated vte_terminal_match_set_cursor + + The cursor is specific to a display, and can't be changed when the widget's + display changes. Use a GdkCursorType or named cursor instead. + + src/vte.c | 2 ++ + src/vtedeprecated.h | 5 +++++ + src/vteterminal.h | 3 --- + 3 files changed, 7 insertions(+), 3 deletions(-) + +commit 0a96716b8fe1a68d397862fc4dbb60dad5625c52 +Author: Christian Persch +Date: 2014-11-03 18:38:29 +0100 + + docs: Remove version markers + + 0.38 has a new API/ABI, so the Since: markers really aren't appropriate. + + doc/reference/vte-docs.xml | 24 ---------- + src/pty.c | 24 ---------- + src/vte.c | 111 --------------------------------------------- + src/vteenums.h | 4 -- + src/vtepty.h | 2 - + src/vteversion.h.in | 10 ---- + 6 files changed, 175 deletions(-) + +commit ca4458536e6068e3302902961f36b0d2d409b5b2 +Author: Christian Persch +Date: 2014-11-03 18:38:29 +0100 + + build: Add deprecation infrastructure back in + + This reverts commit 8b7ecc9d646a58d86b38c7b0f943778f766a2995. + + Conflicts: + src/Makefile.am + src/vte.h + + src/Makefile.am | 7 +++++-- + src/vte.h | 4 ++++ + src/vtedeprecated.h | 38 ++++++++++++++++++++++++++++++++++++++ + 3 files changed, 47 insertions(+), 2 deletions(-) + +commit 3e896b4cb2c5901ec81204076bb408b2da49c29a +Author: Baurzhan Muftakhidinov +Date: 2014-10-26 02:28:26 +0000 + + Added Kazakh translation + + po/LINGUAS | 1 + + po/kk.po | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 94 insertions(+) + +commit c3da9ead189a50dd7de410fdea2239aeb1a7d645 +Author: Daniel Korostil +Date: 2014-10-07 01:43:19 +0300 + + Updated Ukrainian translation + + po/uk.po | 95 ++++++++++++++++++++++++++++++++++++++-------------------------- + 1 file changed, 57 insertions(+), 38 deletions(-) + +commit 9b01f837f7943d893d248e12f2434a0d9e1d0061 +Author: GNOME Translation Robot +Date: 2014-09-23 14:44:42 +0000 + + Added Scottish Gaelic translation + + po/LINGUAS | 1 + + po/gd.po | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 103 insertions(+) + +commit 9ae9fc3aca7bfd90735023f0dbedd4fcb844eda5 +Author: Iris Gou +Date: 2014-09-23 11:47:11 +0800 + + update zh_CN translation + + po/zh_CN.po | 83 ++++++++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 52 insertions(+), 31 deletions(-) + +commit 0f226722344ee586ad9af7b8778f98c26f29fd2f +Author: A S Alam +Date: 2014-09-21 08:40:41 -0500 + + update Punjabi Translation for 3.14 release + + po/pa.po | 93 ++++++++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 53 insertions(+), 40 deletions(-) + +commit b08deebddff43e3802234d5b6b1642e4c65b22c4 +Author: Christian Persch +Date: 2014-09-21 13:43:54 +0200 + + Post branch version bump + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit cde9a09cfa327bfcece8d539364c03c6c914fa17 +Author: Ask H. Larsen +Date: 2014-09-20 17:24:47 +0200 + + Updated Danish translation + + po/da.po | 75 ++++++++++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 47 insertions(+), 28 deletions(-) + +commit 7d5857e7115d42cc093f011b8bea42c6da016a3c +Author: Мирослав Николић +Date: 2014-09-17 21:38:51 +0200 + + Updated Serbian translation + + po/sr.po | 90 +++++++++++++++++++++++++++++++++++----------------------- + po/sr@latin.po | 90 +++++++++++++++++++++++++++++++++++----------------------- + 2 files changed, 108 insertions(+), 72 deletions(-) + +commit f398086446f3bacc3cf878fc4e67fa2641729adb +Author: Mattias Eriksson +Date: 2014-09-16 19:05:49 +0000 + + Updated Swedish translation + + po/sv.po | 112 +++++++++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 77 insertions(+), 35 deletions(-) + +commit 5abcd4eeb611abbc3b77a837d3807d92262fbabe +Author: Dušan Kazik +Date: 2014-09-15 19:38:06 +0000 + + Updated Slovak translation + + po/sk.po | 88 +++++++++++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 56 insertions(+), 32 deletions(-) + +commit 45deae03e8d0d53de82de14fbe189930d7133592 +Author: Jasper Lievisse Adriaanse +Date: 2014-09-15 09:01:47 +0200 + + Prevent redefinition of VteCharAttributes as that breaks GCC 4.2 + + src/vteterminal.h | 1 - + 1 file changed, 1 deletion(-) + +commit 1ee62000486bd146179555ea9645a210e30720f5 +Author: Matej Urbančič +Date: 2014-09-14 21:13:55 +0200 + + Updated Slovenian translation + + po/sl.po | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d233f03602777d8d68c8b587eeb7dc93aa791925 +Author: Matej Urbančič +Date: 2014-09-14 21:12:43 +0200 + + Added Slovenian translation + + po/sl.po | 107 +++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 52 insertions(+), 55 deletions(-) + +commit 43e082c61fabffe3bea9b7f6662d677b01a74dd4 +Author: Christian Persch +Date: 2014-09-14 10:20:20 +0200 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bc0fe14b8a470a717eb2e44ef110153327abd272 (tag: 0.38.0) +Author: Christian Persch +Date: 2014-09-14 09:55:49 +0200 + + build: Try fixing builddir != srcdir build + + src/Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) + +commit f6ece5c14e97ad9756cad3ddd6cc659803fcd80f +Author: Christian Persch +Date: 2014-09-13 10:11:42 +0200 + + Version 0.38.0 + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit c6354c469d03fa21fa768d8922ddb439703fe20e +Author: Christian Persch +Date: 2014-09-13 10:10:17 +0200 + + glade: Make catalogue parallel-installable with vte 2.90 + + configure.ac | 2 +- + glade/Makefile.am | 5 +---- + glade/vte.xml.in.in | 8 +++++++- + 3 files changed, 9 insertions(+), 6 deletions(-) + +commit 955a2ffadc81d1e4943dc28af7796dae5d37110b +Author: Egmont Koblinger +Date: 2014-09-12 14:08:44 +0200 + + glade: Update list of properties + + https://bugzilla.gnome.org/show_bug.cgi?id=736508 + + glade/vte.xml.in.in | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +commit 4aa4066846b5311c362e5537c0344c34bfa77880 +Author: Egmont Koblinger +Date: 2014-09-12 01:25:33 +0200 + + widget: Rename beep signal to bell, part 2 + + src/vteseq.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9b211fa62290112874a478df04172ba5ca18de00 +Author: Egmont Koblinger +Date: 2014-09-12 00:45:06 +0200 + + widget: Rename beep signal to bell + + https://bugzilla.gnome.org/show_bug.cgi?id=602726#c23 + + src/vte.c | 10 +++++----- + src/vteterminal.h | 2 +- + 2 files changed, 6 insertions(+), 6 deletions(-) + +commit 32984f268cb1d042a9cf854d23886294e9267033 +Author: Egmont Koblinger +Date: 2014-09-12 00:38:34 +0200 + + vteapp: Make the bell option consistent between the two test apps + + src/vteapp.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit ba00836d7d461f5ca96a7921de56ae561bc7e60c +Author: Egmont Koblinger +Date: 2014-09-12 00:30:07 +0200 + + widget: Remove broken visual bell support + + https://bugzilla.gnome.org/show_bug.cgi?id=602726#c19 + + doc/reference/vte-sections.txt | 2 -- + src/app.vala | 1 - + src/vte-private.h | 2 -- + src/vte.c | 82 ------------------------------------------ + src/vteapp.c | 1 - + src/vteterminal.h | 3 -- + 6 files changed, 91 deletions(-) + +commit ccd870b735b8fd0bd65ca6ee779f4597547d32e8 +Author: Egmont Koblinger +Date: 2014-09-12 00:12:04 +0200 + + Revert "widget: Implement visual bell" + + This reverts commit 4add1f726a8acef0525f5903b9cbe7ae0b905658. + + https://bugzilla.gnome.org/show_bug.cgi?id=602726#c19 + + src/vte-private.h | 6 ++---- + src/vte.c | 48 ++++-------------------------------------------- + 2 files changed, 6 insertions(+), 48 deletions(-) + +commit a4ef99acfb62d19398da14ed315df545b0570d43 +Author: Egmont Koblinger +Date: 2014-09-12 00:10:27 +0200 + + Revert "vteapp: Three-state bell option" + + This reverts commit 983b3840454267205ce789498f8d0941b41c8d60. + + src/app.vala | 12 ++++++------ + src/vteapp.c | 21 +++++++++++---------- + 2 files changed, 17 insertions(+), 16 deletions(-) + +commit 4b6acd5b117a961feed9966df103134ea50bee6a +Author: Alexander Shopov +Date: 2014-09-07 19:17:16 +0300 + + Updated Bulgarian translation + + po/bg.po | 77 ++++++++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 43 insertions(+), 34 deletions(-) + +commit b6b381ab64f4500eece628106eb52dd8709e983d +Author: Ville-Pekka Vainio +Date: 2014-09-07 13:45:48 +0300 + + Finnish translation update by Jiri Grönroos + + po/fi.po | 36 ++++++++++++++++++++---------------- + 1 file changed, 20 insertions(+), 16 deletions(-) + +commit 5a68ffcb971dcb9508ed43a60ac28ad6ea802422 +Author: Piotr Drąg +Date: 2014-09-07 03:26:59 +0200 + + Updated Polish translation + + po/pl.po | 71 +++++++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 39 insertions(+), 32 deletions(-) + +commit 4f7526f2241ec01ceea5a93cd9d3dd3106e7f5e5 +Author: Jesse van den Kieboom +Date: 2014-09-06 08:46:53 +0200 + + Do not use deprecated AM_PROG_CC_STDC + + https://bugzilla.gnome.org/show_bug.cgi?id=736180 + + gnome-pty-helper/configure.ac | 1 - + 1 file changed, 1 deletion(-) + +commit 714a3be378f4e8664b404bf753d1d6212dc3d7d4 +Author: Changwoo Ryu +Date: 2014-09-06 18:32:12 +0900 + + Updated Korean translation + + po/ko.po | 70 ++++++++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 40 insertions(+), 30 deletions(-) + +commit 9b075daa1f78a0a011c37c71b076341d0fdb7468 +Author: Andika Triwidada +Date: 2014-09-04 04:26:29 +0000 + + Updated Indonesian translation + + po/id.po | 72 ++++++++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 41 insertions(+), 31 deletions(-) + +commit 983b3840454267205ce789498f8d0941b41c8d60 +Author: Egmont Koblinger +Date: 2014-08-27 22:24:34 +0200 + + vteapp: Three-state bell option + + https://bugzilla.gnome.org/show_bug.cgi?id=602726 + + src/app.vala | 12 ++++++------ + src/vteapp.c | 21 ++++++++++----------- + 2 files changed, 16 insertions(+), 17 deletions(-) + +commit 4add1f726a8acef0525f5903b9cbe7ae0b905658 +Author: Egmont Koblinger +Date: 2014-08-25 22:49:41 +0200 + + widget: Implement visual bell + + https://bugzilla.gnome.org/show_bug.cgi?id=602726 + + src/vte-private.h | 6 ++++-- + src/vte.c | 48 ++++++++++++++++++++++++++++++++++++++++++++---- + 2 files changed, 48 insertions(+), 6 deletions(-) + +commit 2e64b768924ab7cdbd263e2141086652c6128740 +Author: Egmont Koblinger +Date: 2014-08-25 22:33:41 +0200 + + widget: Make dim color handling more xterm-like + + https://bugzilla.gnome.org/show_bug.cgi?id=735245 + + doc/reference/vte-sections.txt | 1 - + perf/256test.sh | 73 +++++++++++++++++++++++++++++++++++++ + perf/Makefile.am | 1 + + src/vte-private.h | 8 +++- + src/vte.c | 83 +++++++++--------------------------------- + src/vterowdata.h | 11 +++--- + src/vteseq.c | 6 +-- + src/vteterminal.h | 2 - + 8 files changed, 105 insertions(+), 80 deletions(-) + +commit 1d489818c7177abf14bf5285819f19a61231d7e2 +Author: Marek Černocký +Date: 2014-08-22 11:46:50 +0200 + + Updated Czech translation + + po/cs.po | 26 +++++++++++++++----------- + 1 file changed, 15 insertions(+), 11 deletions(-) + +commit ca7cd82efa86ce4f26a9dffe538a5eb9a7e102fb +Author: Chao-Hsiung Liao +Date: 2014-08-21 19:02:15 +0800 + + Updated Traditional Chinese translation(Hong Kong and Taiwan) + + po/zh_HK.po | 77 +++++++++++++++++++++++++++++++++++++++---------------------- + po/zh_TW.po | 77 +++++++++++++++++++++++++++++++++++++++---------------------- + 2 files changed, 98 insertions(+), 56 deletions(-) + +commit cb038a92719f0c84460ceed78a4197e798633a5d +Author: Christian Persch +Date: 2014-08-21 10:31:41 +0200 + + widget: Fix theming + + The application specific theming was removed from the gtk builtin theme. + Unfortunately there's *still* no way for a library to just drop a + css file in a ressource somewhere that will be automatically picked up + by gtk, so just add to the existing workaround with the explicit css provider. + + https://bugzilla.gnome.org/show_bug.cgi?id=735081 + + src/vte.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit dfe0e9969a97ff1df89f812a05736859cd41b664 +Author: ngoswami +Date: 2014-08-19 17:25:56 +0000 + + Updated Assamese translation + + po/as.po | 77 ++++++++++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 48 insertions(+), 29 deletions(-) + +commit a36d5c57131aa292c2b0f9a7b199ff8d268bec65 +Author: Christian Persch +Date: 2014-08-19 18:38:31 +0200 + + emulation: Fix sed mistake + + https://bugzilla.gnome.org/show_bug.cgi?id=735024 + + src/caps.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b28e673c66941c01847513711fa22abe05922c8d +Author: Claude Paroz +Date: 2014-08-18 20:23:19 +0000 + + Updated French translation + + po/fr.po | 83 ++++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 41 insertions(+), 42 deletions(-) + +commit 4f20cd6fd4eda5e46f7fc3ebca29c062ac9b3573 +Author: Christian Persch +Date: 2014-08-18 21:28:47 +0200 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9ff9d3a75deaf0e07c957db0981b41d246ff1eb8 (tag: 0.37.90) +Author: Christian Persch +Date: 2014-08-18 21:16:42 +0200 + + Version 0.37.90 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e6131f4a7aea14faa85f7f1b915ad3c59f26f806 +Author: Christian Persch +Date: 2014-08-17 20:00:59 +0200 + + widget: Improve API name + + Synchronous functions should be named ..._sync. + + doc/reference/vte-sections.txt | 2 +- + src/app.vala | 2 +- + src/vte.c | 14 ++++++-------- + src/vteapp.c | 6 +++--- + src/vteterminal.h | 10 +++++----- + 5 files changed, 16 insertions(+), 18 deletions(-) + +commit 55364d008339077e765f8328ad86ac0b1fc40107 +Author: Christian Persch +Date: 2014-08-15 13:30:09 +0200 + + widget: Improve set_encoding API + + Since opening the converter can fail, make this return a gboolean and a GError. + And change the meaning of NULL as @codeset from 'current locale' to 'UTF-8'. + + src/app.vala | 9 +++++++-- + src/vte.c | 53 +++++++++++++++++++++++++++++++---------------------- + src/vteapp.c | 4 +++- + src/vteseq.c | 4 ++-- + src/vteterminal.h | 5 +++-- + 5 files changed, 46 insertions(+), 29 deletions(-) + +commit e9b017895af86940b75f9f64e203974be0d0c602 +Author: Christian Persch +Date: 2014-08-13 14:05:31 +0200 + + widget: Simplify word-chars + + Until we implement full UAX29 word boundary detection, let's simplify the + exception cases of ascii punctuation we don't want to include. + + https://bugzilla.gnome.org/show_bug.cgi?id=730632 + + src/vte.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit e4bd699014e140e242af919b3b3a6f5aaf5f0385 +Author: Christian Persch +Date: 2014-08-13 14:00:58 +0200 + + Revert "widget: Narrow the set of word chars" + + This reverts commit 1b6cf784afab99aea861128f5e7bb5619288d6c1. + + src/vte.c | 12 +++--------- + 1 file changed, 3 insertions(+), 9 deletions(-) + +commit 0ef701c3ec0ae146a00aa17fa2512bccd8c1099f +Author: Christian Persch +Date: 2014-06-28 21:20:27 +0200 + + widget: Use G_PARAM_EXPILCIT_NOTIFY + + src/pty.c | 8 ++++++-- + src/vte.c | 48 ++++++++++++++++++++++++++---------------------- + 2 files changed, 32 insertions(+), 24 deletions(-) + +commit eb76811ac7cfb679cc9784ad71d79f2886e1d45f +Author: Carles Ferrando +Date: 2014-08-17 13:50:35 +0200 + + [l10n] Updated Catalan (Valencian) translation + + po/ca@valencia.po | 137 +++++++++++++++++------------------------------------- + 1 file changed, 42 insertions(+), 95 deletions(-) + +commit 1df25863886ec215b5345829e9b1ab62a5803f85 +Author: Gil Forcada +Date: 2014-08-17 13:50:33 +0200 + + [l10n] Updated Catalan translation + + po/ca.po | 138 ++++++++++++++++++++------------------------------------------- + 1 file changed, 43 insertions(+), 95 deletions(-) + +commit bdeeecee5d44b7926af769c4ad9b4e2d61368e6b +Author: Lasse Liehu +Date: 2014-08-17 14:39:37 +0300 + + Finnish translation update + + po/fi.po | 76 ++++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 38 insertions(+), 38 deletions(-) + +commit bf1e3c040982b9fc52e941b88763edc078a768e9 +Author: Inaki Larranaga Murgoitio +Date: 2014-08-07 15:55:53 +0200 + + Updated Basque language + + po/eu.po | 89 +++++++++++++++++++++++++++++++++++++++------------------------- + 1 file changed, 55 insertions(+), 34 deletions(-) + +commit a20f7d2864850fa5e330b3f35f698082f97e5517 +Author: Egmont Koblinger +Date: 2014-08-04 15:09:39 +0200 + + a11y: Fix a crash at text deletion + + https://bugzilla.gnome.org/show_bug.cgi?id=727587 + + src/vteaccess.c | 101 ++++++++++++++++++++++++++++++-------------------------- + 1 file changed, 54 insertions(+), 47 deletions(-) + +commit 3841316afc3df1d216e0eb5f158dc636c585b1ae +Author: Egmont Koblinger +Date: 2014-08-03 13:22:15 +0200 + + a11y: Fix omitted first letter when scrolling + + https://bugzilla.gnome.org/show_bug.cgi?id=657960 + + src/vteaccess.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit d99bb5c9c2387357b92412551d000e2bc57c2c8b +Author: Piotr Drąg +Date: 2014-07-31 20:02:48 +0200 + + doap: add + + vte.doap | 2 ++ + 1 file changed, 2 insertions(+) + +commit b1e4e7c078e370906da1d75765ab989eb4a2f0cf +Author: Olav Vitters +Date: 2014-07-30 20:44:44 +0200 + + doap category core + + vte.doap | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 645c499d98c49c042ffa36f05b43a2814e9393c5 +Author: Egmont Koblinger +Date: 2014-07-27 15:55:16 +0200 + + emulation: Set scrollback lines on both screens + + https://bugzilla.gnome.org/show_bug.cgi?id=731205#c8 + + src/vte.c | 53 +++++++++++++++++++++++++---------------------------- + 1 file changed, 25 insertions(+), 28 deletions(-) + +commit 1b6cf784afab99aea861128f5e7bb5619288d6c1 +Author: Egmont Koblinger +Date: 2014-07-26 23:06:51 +0200 + + widget: Narrow the set of word chars + + https://bugzilla.gnome.org/show_bug.cgi?id=730632 + + src/vte.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +commit 6774bfd96cf6ae71429ec06670b8f755cb4def55 +Author: Egmont Koblinger +Date: 2014-07-26 23:02:03 +0200 + + widget: Fix box drawing characters in wide CJK mode + + src/vte.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 817b6834b579b4ecb6a071729daabc50def931eb +Author: Egmont Koblinger +Date: 2014-07-26 14:05:01 +0200 + + emulation: Fix cursor handling at right margin + + https://bugzilla.gnome.org/show_bug.cgi?id=731155 + + src/vteseq.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 60 insertions(+), 2 deletions(-) + +commit d45402bd87b6d99d3084eb1ba69ace957a1ac717 +Author: Egmont Koblinger +Date: 2014-07-26 14:02:56 +0200 + + emulation: Deccolm mode switch clears the screen and moves cursor home + + https://bugzilla.gnome.org/show_bug.cgi?id=731155#c6 + + src/vteseq.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 46e0f35b57702e4083b34edded2311ef19d0859d +Author: Egmont Koblinger +Date: 2014-07-25 16:37:37 +0200 + + emulation: Fix cursor reporting with origin mode + + src/vteseq.c | 30 ++++++++++++++++++++++++------ + 1 file changed, 24 insertions(+), 6 deletions(-) + +commit 71aadaf2568d20b3a4eb2a92bebdaf6f3bb46b47 +Author: Egmont Koblinger +Date: 2014-07-25 15:17:52 +0200 + + emulation: Fix \e[d and \e[` + + src/vteseq.c | 45 +++++++++++++++++---------------------------- + 1 file changed, 17 insertions(+), 28 deletions(-) + +commit a2a49dfda338d7ca9d836de9e3777d5c02f96ac8 +Author: Egmont Koblinger +Date: 2014-07-25 14:53:20 +0200 + + emulation: Fix absolute cursor movement with origin mode + + src/vteseq.c | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +commit 83d03666cf51850b708bced2e3fb43b3b4dde1c5 +Author: Egmont Koblinger +Date: 2014-07-25 12:25:35 +0200 + + emulation: Make {insert,delete}-lines move the cursor to first column + + src/vteseq.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 3bcb11b14fabd79b1d96516cf1013bbf1c9e8a21 +Author: Balázs Úr +Date: 2014-07-24 08:22:48 +0000 + + Updated Hungarian translation + + po/hu.po | 84 ++++++++++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 53 insertions(+), 31 deletions(-) + +commit f09439bf7d05cb81c37e3e1a8a4af71f489700ba +Author: Colin Guthrie +Date: 2014-07-23 22:44:40 +0200 + + vte.sh: Fix tilde replacement for bash-4.3. + + https://bugzilla.gnome.org/show_bug.cgi?id=733504 + + src/vte.sh | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 99625feadc71e9bccdc24495d0fa577aa7ea2ad8 +Author: Kjartan Maraas +Date: 2014-07-23 16:52:08 +0200 + + Updated Norwegian bokmål translation. + + po/nb.po | 69 ++++++++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 39 insertions(+), 30 deletions(-) + +commit 3fc7c422c7746f33f0051d2e52bc267949a7957e +Author: Tom Tryfonidis +Date: 2014-07-09 23:18:39 +0000 + + Updated Greek translation + + po/el.po | 46 ++++++++++++++++++++++++---------------------- + 1 file changed, 24 insertions(+), 22 deletions(-) + +commit 4c6ea9d37347d10f5522a8dac954d07927be5e5e +Author: Aurimas Černius +Date: 2014-07-05 14:15:07 +0300 + + Updated Lithuanian translation + + po/lt.po | 93 +++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 42 insertions(+), 51 deletions(-) + +commit 7feebcb3eb041961a6207ab5768651f77f46c134 +Author: Fran Diéguez +Date: 2014-07-01 22:12:19 +0200 + + Updated Galician translations + + po/gl.po | 85 +++++++++++++++++++++++++++++++++++++++------------------------- + 1 file changed, 52 insertions(+), 33 deletions(-) + +commit 3592152295b5a434376996062482474edffadf2c +Author: Yuri Myasoedov +Date: 2014-06-29 09:27:16 +0400 + + Updated Russian translation + + po/ru.po | 85 +++++++++++++++++++++++++++++++++++++++------------------------- + 1 file changed, 52 insertions(+), 33 deletions(-) + +commit 2226e6a7efaff9d93a7e74ba4a0845e311e5896f +Author: Christian Persch +Date: 2014-06-23 19:26:30 +0200 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 73745f9f4a1dd87edf69a807f90f8d99880b8d80 (tag: 0.37.2) +Author: Egmont Koblinger +Date: 2014-06-23 14:37:31 +0200 + + widget: Fix display glitch when starting a rectangular selection + + https://bugzilla.gnome.org/show_bug.cgi?id=730800#c10 + + src/vte.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +commit 9ef0dcfba0bc43f1a8f8e4c7ef25e0184eb4659f +Author: Egmont Koblinger +Date: 2014-06-22 21:36:54 +0200 + + widget: Fix another display glitch with rectangular selection and wide chars + + https://bugzilla.gnome.org/show_bug.cgi?id=730800#c7 + + src/vte.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 1052bc6e8d675ef2142d416f18648df5399acd79 +Author: Egmont Koblinger +Date: 2014-06-22 11:39:58 +0200 + + emulation: Clean up TAB/CJK when pushed out on the right + + src/vte.c | 2 ++ + src/vteseq.c | 1 - + 2 files changed, 2 insertions(+), 1 deletion(-) + +commit b9dad4a2d5515c8facf5b64f1a0b0cd43da839ca +Author: Egmont Koblinger +Date: 2014-06-17 19:24:31 +0200 + + widget: Fix an off-by-one in TAB/CJK cleanup on deleting a character + + https://bugzilla.gnome.org/show_bug.cgi?id=731788 + + src/vteseq.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 4b4cb33957749a2f194aeec63c1b17b4acd29c02 +Author: Christian Persch +Date: 2014-06-13 19:13:56 +0200 + + utils: Set some FS flags on our temp files + + Disable COW on our temp files, if the FS it's on supports it. + + src/vteutils.c | 27 +++++++++++++++++++++++++-- + 1 file changed, 25 insertions(+), 2 deletions(-) + +commit 977375b05df4f906329177a401a2d8c00b2516d4 +Author: Egmont Koblinger +Date: 2014-06-14 10:23:54 +0200 + + widget: Fix a drawing artifact with blinking cursor + + https://bugzilla.gnome.org/show_bug.cgi?id=731427 + + src/vte.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 609ab716d743b806325c362852add882b069af09 +Author: genodeftest +Date: 2014-06-08 16:00:33 +0000 + + Updated German translation + + po/de.po | 86 +++++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 50 insertions(+), 36 deletions(-) + +commit 854bc46c452131135c66dcb039621769166fa7e2 +Author: Egmont Koblinger +Date: 2014-06-04 14:33:06 +0200 + + emulation: Fix cursor position when entering restricted scroll with origin + + This fixes vttest's "Origin mode test" (under "screen features"). + + src/vteseq.c | 17 +++++++++++++---- + 1 file changed, 13 insertions(+), 4 deletions(-) + +commit 2acda621985e1df2e84d579f77f479e8b1f02b21 +Author: Egmont Koblinger +Date: 2014-05-29 13:02:11 +0200 + + docs: Clarify get/set_font's relation to font scale + + src/vte.c | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +commit 5d934ecc4e23610dfaaaed0c8ec1c3137e08160b +Author: Egmont Koblinger +Date: 2014-05-29 12:47:21 +0200 + + widget: Don't apply the font scale again on an already scaled font + + https://bugzilla.gnome.org/show_bug.cgi?id=730858 + + src/vte.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 9240ed8a65549300840aa15fc1580f6c350ae583 +Author: Egmont Koblinger +Date: 2014-05-29 12:39:44 +0200 + + emulation: Keep the incoming buffer on reset + + https://bugzilla.gnome.org/show_bug.cgi?id=730760 + + src/vte.c | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +commit a540568a7efe784cf1f48b43656476b23ff083f9 +Author: Christian Persch +Date: 2014-05-28 20:37:21 +0200 + + build: Fix version + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7dc1d2848bb934bf39fd1539a0d562596bcff3a7 +Author: Christian Persch +Date: 2014-05-28 19:07:57 +0200 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b446923caf746a18e4fa9eb298eacf751e53256f (tag: 0.37.1) +Author: Egmont Koblinger +Date: 2014-05-28 12:28:08 +0200 + + widget: Fix display glitches with rectangular selection and wide characters + + https://bugzilla.gnome.org/show_bug.cgi?id=730800 + + src/vte.c | 4 ++-- + src/vterowdata.h | 11 ++++++----- + src/vteseq.c | 21 +++++++++------------ + 3 files changed, 17 insertions(+), 19 deletions(-) + +commit b8db6a28b9b809a643268941a3bd1b0dcff70198 +Author: Egmont Koblinger +Date: 2014-05-26 13:14:44 +0200 + + widget: Speed up scrolling in very large terminals + + https://bugzilla.gnome.org/show_bug.cgi?id=730732 + + src/vte.c | 14 +++++++++++--- + 1 file changed, 11 insertions(+), 3 deletions(-) + +commit 8fbb9722099fa4af01cfb16919fe61282a7aa9ab +Author: Egmont Koblinger +Date: 2014-05-26 12:54:55 +0200 + + widget: Fix a rare display update problem after a terminal reset + + https://bugzilla.gnome.org/show_bug.cgi?id=730599 + + src/vte.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit 2249f514c877041dd291a717360cd6e2747103f5 +Author: Egmont Koblinger +Date: 2014-05-26 12:19:14 +0200 + + widget: Set the ring's in-memory size on terminal reset + + src/vte.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 7a8256af09173496a09afec90249a9875c742896 +Author: Egmont Koblinger +Date: 2014-05-25 19:27:51 +0200 + + widget: Make sure to always set the style + + https://bugzilla.gnome.org/show_bug.cgi?id=727614 + + src/vte.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 0d0bb6ac9b7eeea9d6726436f47c59fac81d2194 +Author: Piotr Drąg +Date: 2014-05-25 17:50:02 +0200 + + Updated POTFILES.in + + po/POTFILES.in | 1 + + 1 file changed, 1 insertion(+) + +commit 4d6edfb7ecd9bc2743fe507794092ff096d50aac +Author: Egmont Koblinger +Date: 2014-05-23 01:44:50 +0200 + + emulation: Improve the handling of Tab and CJK fragments + + Tab is converted to spaces when the content underneath is modified, instead of + when the cursor is moved over. Only the left part is converted to spaces, the + right part becomes a shorter tab. + + Double wide characters are replaced by spaces when split in two. + + https://bugzilla.gnome.org/show_bug.cgi?id=691972 + https://bugzilla.gnome.org/show_bug.cgi?id=730343 + + src/vte-private.h | 2 +- + src/vte.c | 151 +++++++++++++++++++++++++++++++++++++----------------- + src/vteseq.c | 20 ++++++-- + 3 files changed, 119 insertions(+), 54 deletions(-) + +commit f82209190742fca586641f21367b1fddcb14227a +Author: Behdad Esfahbod +Date: 2014-05-22 17:57:33 -0400 + + caps: Adjust start-of-string / end-of-string to match xterm + + No idea what they are for, but here's a test case: + + $ echo -e "\eXas\e\\df + + It should only show "df". Ie, the portion between ESC X and + ESC \\ is skipped. + + src/caps.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 7bbd2d3f6cca9ca4401e3dd3c041fb8d33ab3e25 +Author: Behdad Esfahbod +Date: 2014-05-22 17:54:50 -0400 + + caps: Minor + + src/caps.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ec7b994b5b954b12866413d670fbf90287ce9ae5 +Author: Egmont Koblinger +Date: 2014-05-22 23:41:07 +0200 + + emulation: Fix cursor backward movement + + (broken since commit 60c0bca2f00cd55ea1eb42fd59fa017b62197c9d) + + src/vteseq.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0b21ef1a53ddea1838e75e87f678a10ade6b0c29 +Author: Behdad Esfahbod +Date: 2014-05-22 16:35:41 -0400 + + table: Remove support for unused %2, %3, and %M in cap strings + + src/table.c | 17 ++++------------- + 1 file changed, 4 insertions(+), 13 deletions(-) + +commit c0dab8bffc249e26a7a935a9efebdcf10a8de1e7 +Author: Behdad Esfahbod +Date: 2014-05-22 16:32:10 -0400 + + table: Remove unused %i support in capability strings + + src/table.c | 73 +++++++++++++------------------------------------------------ + 1 file changed, 15 insertions(+), 58 deletions(-) + +commit 4425ee077bbedb1337e2e7d332e1137e68fd4adf +Author: Egmont Koblinger +Date: 2014-05-22 22:28:59 +0200 + + widget: Immediately resize the ring on app-initiated window resize + + https://bugzilla.gnome.org/show_bug.cgi?id=647466 + + src/vte.c | 37 ++++++++++++++++--------------------- + 1 file changed, 16 insertions(+), 21 deletions(-) + +commit 3e211284104be539a951976ec6f62d203e8a60f5 +Author: Christian Persch +Date: 2014-05-22 20:26:59 +0200 + + vteapp: Add back C test application + + So you can test vte when building with vala fails. + + src/Makefile.am | 25 +- + src/vteapp.c | 1161 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 1184 insertions(+), 2 deletions(-) + +commit a0d4cd974927a3b08c09d346c34430775835179d +Author: Christian Persch +Date: 2014-05-22 20:10:45 +0200 + + matcher: Use less relocations + + src/caps.c | 455 +++++++++++++++++++++++++++++----------------------------- + src/caps.h | 8 +- + src/matcher.c | 12 +- + 3 files changed, 237 insertions(+), 238 deletions(-) + +commit bef7a550a9be7889735a4333f2820792e72e9853 +Author: Christian Persch +Date: 2014-05-22 20:10:19 +0200 + + debug: Improve sequence->string conversion + + Print OSC, CSI etc. + + src/debug.c | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +commit 2f65bb5d5eae690196448cf0a0101f8ad7f92c96 +Author: Christian Persch +Date: 2014-05-22 18:03:37 +0200 + + a11y: Remove unused code + + The function is always called with 0 quark (since commit + a44035e91dffdbeb3613d56234c74bb6d8483368), so just removed + the parameter. + + src/vte.c | 31 ++----------------------------- + 1 file changed, 2 insertions(+), 29 deletions(-) + +commit c38f44dafea624ca656d3700e0f4b0c0a259856e +Author: Christian Persch +Date: 2014-05-22 13:50:16 +0200 + + build: Don't enable pty helper by default + + Makefile.am | 1 + + configure.ac | 8 +++++++- + src/vteenums.h | 10 +++++----- + 3 files changed, 13 insertions(+), 6 deletions(-) + +commit 174428ceafa642747400c5497dcfe207ec928db1 +Author: Christian Persch +Date: 2014-05-22 08:53:13 +0200 + + tests: interpret: Fix build for matcher API change + + src/interpret.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit 9f22a3c9c5eaabf7c23c1db759e9749e37f4191d +Author: Behdad Esfahbod +Date: 2014-05-21 21:10:58 -0400 + + Remove unused quark arguments all around the matcher code + + src/matcher.c | 11 ++++----- + src/matcher.h | 6 ++--- + src/table.c | 72 ++++++++++++++++++++++++------------------------------- + src/table.h | 4 ++-- + src/vte-private.h | 3 +-- + src/vte.c | 5 ---- + src/vteseq.c | 9 ++++--- + 7 files changed, 46 insertions(+), 64 deletions(-) + +commit 1f660f2bd4fc19876863925063ec8e7dec7bbccd +Author: Behdad Esfahbod +Date: 2014-05-21 20:40:40 -0400 + + Remove unuse caps quark + + src/caps.c | 430 ++++++++++++++++++++++++++++++------------------------------- + src/caps.h | 1 - + 2 files changed, 215 insertions(+), 216 deletions(-) + +commit fb579fdf7e0df89b1228300433d128586d5fa3e2 +Author: Behdad Esfahbod +Date: 2014-05-21 20:35:29 -0400 + + Make capability name and seq handler names match exactly + + Going to remove the indirection through string capability names + at some point. + + src/caps.c | 82 +++++++++++++++++++++++++++--------------------------- + src/vteseq-n.gperf | 68 ++++++++++++++++++++++---------------------- + src/vteseq.c | 8 +++--- + 3 files changed, 79 insertions(+), 79 deletions(-) + +commit c255e5bf3d88cc0485a25c2cbaa2dd55b72f4555 +Author: Behdad Esfahbod +Date: 2014-05-21 20:14:04 -0400 + + Remove unused code + + src/vte-private.h | 2 +- + src/vteseq.c | 6 ------ + 2 files changed, 1 insertion(+), 7 deletions(-) + +commit cdc5fcd685027a3576ab6004bce4bc2aa8bad171 +Author: Behdad Esfahbod +Date: 2014-05-21 15:34:45 -0400 + + Fix build with newer libtool + + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b361b01369f2e06fec77d436b6c3ee90ac9cc037 +Author: Egmont Koblinger +Date: 2014-05-21 15:42:58 +0200 + + emulation: Remove unused vteseq-2.gperf + + src/vteseq-2.gperf | 291 ----------------------------------------------------- + 1 file changed, 291 deletions(-) + +commit a9fb5eb122bd1ed02e360bc4bf130c55bedf3090 +Author: Piotr Drąg +Date: 2014-05-20 22:02:30 +0200 + + Updated POTFILES.in + + po/POTFILES.in | 1 - + 1 file changed, 1 deletion(-) + +commit 66ce3c9346b74848e793bd002f93ffcc04a3d679 +Author: Christian Persch +Date: 2014-05-20 16:15:38 +0200 + + matcher: Remove unused trie matcher + + https://bugzilla.gnome.org/show_bug.cgi?id=728665 + + src/Makefile.am | 38 +- + src/debug.c | 2 +- + src/debug.h | 2 +- + src/matcher.c | 6 +- + src/trie.c | 1110 ------------------------------------------------------- + src/trie.h | 65 ---- + 6 files changed, 6 insertions(+), 1217 deletions(-) + +commit 4e253be9282829f594c8a55ca08d1299e80e471d +Author: Egmont Koblinger +Date: 2014-05-20 11:23:56 +0200 + + emulation: No longer rely on terminfo; drop ncurses dependency + + https://bugzilla.gnome.org/show_bug.cgi?id=728900#c5 + + HACKING | 9 +- + README | 3 - + configure.ac | 12 +- + doc/reference/vte-sections.txt | 3 - + src/Makefile.am | 71 +-- + src/app.vala | 5 - + src/debug.c | 42 ++ + src/debug.h | 1 + + src/interpret.c | 20 +- + src/keymap.c | 2 +- + src/keymap.h | 2 - + src/matcher.c | 154 ++----- + src/matcher.h | 3 +- + src/pty.c | 70 +-- + src/table.c | 2 +- + src/vte-private.h | 1 - + src/vte.c | 176 +------- + src/vteglobals.h | 2 - + src/vtepty.h | 3 - + src/vteseq.c | 9 - + src/vteterminal.h | 6 - + src/vteti.c | 628 --------------------------- + src/vteti.h | 94 ---- + src/vtetivars.awk | 83 ---- + src/vtetivars.h | 966 ----------------------------------------- + 25 files changed, 112 insertions(+), 2255 deletions(-) + +commit 99e912b298fb76662be73d940fcbd673f1dcef66 +Author: Christian Persch +Date: 2014-05-19 18:33:21 +0200 + + iconv: test: Simplify test setup + + src/vteconv.c | 241 +++++++++++++++++++++++++++++++++------------------------- + 1 file changed, 138 insertions(+), 103 deletions(-) + +commit 3a6511d3ba96b06f94f28c6ac5d5efbde25fda21 +Author: Christian Persch +Date: 2014-05-19 18:33:21 +0200 + + iconv: test: Simplify test setup + + src/vteconv.c | 47 ++++++++++++++++++++++------------------------- + 1 file changed, 22 insertions(+), 25 deletions(-) + +commit 35c11c3c6a967b2cb64da02bc9ab3cb23441ec15 +Author: Christian Persch +Date: 2014-05-19 18:33:21 +0200 + + iconv: test: Use g_assert_cmpuint + + src/vteconv.c | 52 +++++++++++++++++++++------------------------------- + 1 file changed, 21 insertions(+), 31 deletions(-) + +commit 53056d1e523a39c018272efa15f13c8e2ce8932a +Author: Colin Gibbs +Date: 2014-05-19 15:27:40 +0200 + + widget: Fix disappearing mouse pointer + + https://bugzilla.gnome.org/show_bug.cgi?id=725342 + + src/vte.c | 1 + + 1 file changed, 1 insertion(+) + +commit 45cbf11f768b46641c359ab71ad95ee4d78aafc6 +Author: Egmont Koblinger +Date: 2014-05-19 15:07:01 +0200 + + emulation: Remove unused code + + src/vteseq-n.gperf | 2 -- + src/vteseq.c | 63 ------------------------------------------------------ + 2 files changed, 65 deletions(-) + +commit 2e549d2372740b10163a90471991f8fad260f461 +Author: Egmont Koblinger +Date: 2014-05-19 15:03:20 +0200 + + emulation: Migrating from terminfo: miscellaneous + + Hardwire the behavior of some random operations, rather than relying on + terminfo. + + Drop support for "uc", there's no corresponding xterm terminfo entry. + + src/caps.c | 3 + + src/vteseq-2.gperf | 50 +++++++------- + src/vteseq-n.gperf | 6 +- + src/vteseq.c | 192 +++-------------------------------------------------- + 4 files changed, 40 insertions(+), 211 deletions(-) + +commit a2f3bc6664cc3c4e3844151f8cf2faeebc11e996 +Author: Egmont Koblinger +Date: 2014-05-19 14:56:15 +0200 + + emulation: Migrating from terminfo: scrolling operations + + Hardwire the behavior of scrolling operations, rather than relying on + terminfo. + + Make the parameter parsing of scroll regions more compatible with xterm. + + Drop support for "cS", there's no corresponding xterm terminfo entry. + + src/vteseq-2.gperf | 4 +-- + src/vteseq.c | 88 ++++++++++++++---------------------------------------- + 2 files changed, 25 insertions(+), 67 deletions(-) + +commit 73710e6aeabb48d50b1ee93a56aaca528b45e3c7 +Author: Egmont Koblinger +Date: 2014-05-19 14:54:37 +0200 + + emulation: Migrating from terminfo: clear operations + + Hardwire the behavior of clear operations, rather than relying on + terminfo. + + src/vteseq-2.gperf | 6 +++--- + src/vteseq.c | 14 +++++++------- + 2 files changed, 10 insertions(+), 10 deletions(-) + +commit 7ba12a5095403ee4a131f50bac6425b918077132 +Author: Egmont Koblinger +Date: 2014-05-19 14:52:36 +0200 + + emulation: Migrating from terminfo: insert and erase operations + + Hardwire the behavior of insert and erase operations, rather than relying + on terminfo. + + src/vteseq-2.gperf | 18 +++---- + src/vteseq-n.gperf | 2 +- + src/vteseq.c | 134 ++++------------------------------------------------- + 3 files changed, 19 insertions(+), 135 deletions(-) + +commit 60c0bca2f00cd55ea1eb42fd59fa017b62197c9d +Author: Egmont Koblinger +Date: 2014-05-19 14:46:41 +0200 + + emulation: Migrating from terminfo: cursor moving operations + + Hardwire the behavior of cursor moving operations, rather than relying on + terminfo. + + Remove support for nonstandard "move cursor to lower left corner". + + src/caps.c | 2 +- + src/vteseq-2.gperf | 24 +++--- + src/vteseq-n.gperf | 10 +-- + src/vteseq.c | 238 +++++++++++++++++++++++------------------------------ + 4 files changed, 119 insertions(+), 155 deletions(-) + +commit 7281fa8dac1bdb1d091e47fd2ad5bcc9c6fbf616 +Author: Egmont Koblinger +Date: 2014-05-19 14:41:02 +0200 + + emulation: Migrating from terminfo: single-byte control codes + + Hardwire the behavior of single-byte control codes (newline, tab etc.) and + closely related ones (e.g. tab stops), rather than relying on terminfo. + + Implement CSI n I (n tabs). + + src/caps.c | 8 ++++++ + src/vteseq-2.gperf | 30 ++++++++++---------- + src/vteseq-n.gperf | 11 ++++++-- + src/vteseq.c | 80 +++++++++++++----------------------------------------- + 4 files changed, 50 insertions(+), 79 deletions(-) + +commit ac4cce6587f7dbd15d5574fef1fdc5910adab99a +Author: Egmont Koblinger +Date: 2014-05-18 20:12:44 +0200 + + emulation: Drop separate standout attribute, it's actually reverse in xterm + + src/vte.c | 6 ------ + src/vterowdata.h | 3 +-- + src/vteseq.c | 51 ++------------------------------------------------- + 3 files changed, 3 insertions(+), 57 deletions(-) + +commit 462e4ffb6ec3a188a5b3ed76821263f63acacebb +Author: Egmont Koblinger +Date: 2014-05-18 19:53:20 +0200 + + emulation: Remove status line support + + doc/reference/vte-sections.txt | 1 - + src/app.vala | 6 ---- + src/vte-private.h | 3 -- + src/vte.c | 81 ------------------------------------------ + src/vteseq-2.gperf | 4 +-- + src/vteseq.c | 16 --------- + src/vteterminal.h | 4 --- + 7 files changed, 2 insertions(+), 113 deletions(-) + +commit ad82b82c2612240ee7aa58df9e58245535fc90b7 +Author: Egmont Koblinger +Date: 2014-05-18 19:44:53 +0200 + + emulation: Fix absolute cursor movement with missing row number + + src/caps.c | 13 ++++++++----- + src/vteseq-n.gperf | 2 +- + src/vteseq.c | 20 +++++++++++++------- + 3 files changed, 22 insertions(+), 13 deletions(-) + +commit fc3e87814474ad2a80b8981c472df5f8929ca0b1 +Author: Egmont Koblinger +Date: 2014-05-18 14:29:02 +0200 + + emulation: Don't depend on terminfo for autowrap and a few other capabilities + + src/vte-private.h | 8 +----- + src/vte.c | 75 ++++++------------------------------------------------- + src/vteseq.c | 16 +----------- + 3 files changed, 9 insertions(+), 90 deletions(-) + +commit 598572b526568591ca91e3e0019412274edd9643 +Author: Egmont Koblinger +Date: 2014-05-18 13:36:01 +0200 + + keymap: Use hardcoded sequences instead of terminfo + + https://bugzilla.gnome.org/show_bug.cgi?id=728900#c5 + + src/keymap.c | 616 +++++++++++++++++++++++++---------------------------------- + src/keymap.h | 4 +- + src/vte.c | 51 ++--- + 3 files changed, 279 insertions(+), 392 deletions(-) + +commit 64f7ae57e8cd6667dc9fc7afd870df6c67cf87c7 +Author: Christian Persch +Date: 2014-05-18 11:19:52 +0200 + + build: Fix double defines of *CLEANFILES + + src/Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 3075360bcea5b07c3026527a6d6a1082f48a38c0 +Author: Christian Persch +Date: 2014-05-18 11:16:04 +0200 + + iconv: test: Port to gtest and run it on make check + + https://bugzilla.gnome.org/show_bug.cgi?id=730242 + + src/Makefile.am | 2 +- + src/vteconv.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++---------- + 2 files changed, 107 insertions(+), 23 deletions(-) + +commit 7383a5d9c23656f70f132a2f4b296fbed3e4c53d +Author: Egmont Koblinger +Date: 2014-05-18 10:37:59 +0200 + + keymap: Drop fkey modes + + Drop broken fkey modes. + + For merge simpliciy, and since the terminfo code is going away soon, + just switch the terminfo lookup to using termcap compat caps instead of + terminfo caps. + + https://bugzilla.gnome.org/show_bug.cgi?id=730137 + + src/dumpkeys.c | 59 +--- + src/keymap.c | 856 ++++++++++++++++++------------------------------------ + src/keymap.h | 8 - + src/vte-private.h | 6 - + src/vte.c | 18 +- + src/vteseq.c | 40 --- + 6 files changed, 291 insertions(+), 696 deletions(-) + +commit 184c74baa3c37f79b0620b666e7d739d00b81d49 +Author: Christian Persch +Date: 2014-04-18 22:00:48 +0200 + + all: Use terminfo instead of termcap + + https://bugzilla.gnome.org/show_bug.cgi?id=169295 + + Makefile.am | 2 +- + configure.ac | 55 +-- + src/Makefile.am | 143 +++++-- + src/app.vala | 8 +- + src/caps.c | 355 ----------------- + src/caps.h | 10 - + src/interpret.c | 18 +- + src/iso2022.c | 2 +- + src/keymap.c | 308 ++++++--------- + src/keymap.h | 6 +- + src/matcher.c | 146 ++++--- + src/matcher.h | 5 +- + src/table.c | 2 +- + src/vte-private.h | 6 +- + src/vte.c | 112 +++--- + src/vte.gresource.xml.in | 3 - + src/vteconv.c | 7 +- + src/vteseq.c | 73 ++-- + src/vtetc.c | 648 ------------------------------- + src/vtetc.h | 59 --- + src/vteti.c | 628 ++++++++++++++++++++++++++++++ + src/vteti.h | 94 +++++ + src/vtetivars.awk | 83 ++++ + src/vtetivars.h | 966 +++++++++++++++++++++++++++++++++++++++++++++++ + termcaps/Makefile.am | 4 - + termcaps/xterm | 33 -- + termcaps/xterm-color | 27 -- + termcaps/xterm.baseline | 35 -- + 28 files changed, 2198 insertions(+), 1640 deletions(-) + +commit 95879ab9b4aa113d7877e4d080fbb7b403963f3b +Author: Egmont Koblinger +Date: 2014-05-17 13:45:09 +0200 + + iconv: Fix the UTF-8 decoder when a NUL byte is encountered + + https://bugzilla.gnome.org/show_bug.cgi?id=730220 + + src/vteconv.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 83 insertions(+), 2 deletions(-) + +commit 3fe609d9592b69854796cdc1011d0112bc7506af +Author: Egmont Koblinger +Date: 2014-05-16 13:57:01 +0200 + + build: Fix vteconv warning + + src/vteconv.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 8a17c8ee4474b84414e5ed35a604ff3abfbe3fbe +Author: Egmont Koblinger +Date: 2014-05-16 13:33:01 +0200 + + iconv: Fix a broken unittest + + src/vteconv.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3287a66f02edd3f26e5da708d1c3d36b3418a23c +Author: Egmont Koblinger +Date: 2014-05-16 13:25:39 +0200 + + iconv: Fix broken _vte_conv_utf8_strlen + + src/vteconv.c | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +commit c745ac44d15a827ec903ed30561970a0e24316a2 +Author: Yosef Or Boczko +Date: 2014-05-16 05:08:18 +0300 + + Updated Hebrew translation + + po/he.po | 84 +++++++++++++++++++++++++++++++++++++++------------------------- + 1 file changed, 52 insertions(+), 32 deletions(-) + +commit 60f5573f9bbbfba7de535dda55f229142e324d9f +Author: Egmont Koblinger +Date: 2014-05-15 01:35:06 +0200 + + widget: doc: Clarify a comment about rewrapping + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4b830778edf598f4c3d41477a522986832f58d97 +Author: Christian Persch +Date: 2014-05-14 20:40:36 +0200 + + build: Don't dist generated files + + src/Makefile.am | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) + +commit ffa42d66a73c66bbda25df5d84b95717be6b1efa +Author: Christian Persch +Date: 2014-05-14 19:48:34 +0200 + + build: Dist box_drawing_generate.sh + + https://bugzilla.gnome.org/show_bug.cgi?id=730140 + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f49c6131ac5ac8f082a5212a3bf18dc9d5d4b1ca +Author: Christian Persch +Date: 2014-05-12 11:04:49 +0200 + + vteapp: Add comment pointing to the bug + + src/app.vala | 1 + + 1 file changed, 1 insertion(+) + +commit 691669ac5166da1104eb584bc43a70a9c7a924d7 +Author: Egmont Koblinger +Date: 2014-05-14 17:09:10 +0200 + + emulation: Fix escape sequences of keypad Home and End (take 2) + + https://bugzilla.gnome.org/show_bug.cgi?id=600659#c63 + + src/keymap.c | 18 ++++++++---------- + 1 file changed, 8 insertions(+), 10 deletions(-) + +commit 88c24de77c1d5c5b677181898271abcb79bf491f +Author: Egmont Koblinger +Date: 2014-05-12 17:06:50 +0200 + + widget: doc: fix an obvious typo + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ec08b2b0e255f62275773ef5d56b934c4ff3f6bd +Author: Christian Persch +Date: 2014-05-11 10:32:40 +0200 + + widget: Ensure rendering data is re-initialised on re-realise + + pvt->draw is destroyed on unrealise, so we need to make sure to recreate it + on realise. + + https://retrace.fedoraproject.org/faf/reports/429280/ + + src/vte.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit bc0ae12c39e8eb110e7805320e98dc35b0fc0901 +Author: Christian Persch +Date: 2014-05-11 10:19:12 +0200 + + Revert "emulation: Fix escape sequences of keypad Home and End" + + This reverts commit cbc73b6d40aa099643cce07400c31028cfaa7e8c. + + src/keymap.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 4431fd96c2224988ec844cb7cfd3e947b1d819b4 +Author: Christian Persch +Date: 2014-05-11 10:18:04 +0200 + + vteapp: Only install argb visual when required by options + + src/app.vala | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +commit f41bd6b7b33040c2fdee555e3174221d12a3c961 +Author: Daniel Mustieles +Date: 2014-05-10 19:59:25 +0200 + + Updated Spanish translation + + po/es.po | 100 ++++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 58 insertions(+), 42 deletions(-) + +commit f555e78839bbb47a4407bcfd01adcfc2dd070071 +Author: Debarshi Ray +Date: 2014-05-09 18:33:15 +0200 + + widget: Set the background alpha in set_colors + + We are doing that in vte_terminal_set_color_background, but a lot of + applications (eg., the test application, gnome-terminal) use + vte_terminal_set_colors. So set it there as well. + + Fallout from 060850078a53dce64c3d2b96882f525fef7f5028 + + https://bugzilla.gnome.org/show_bug.cgi?id=729884 + + src/vte.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit b61a35cf1bd4babb7945798256132c362786327f +Author: Christian Persch +Date: 2014-05-06 21:29:44 +0200 + + vteapp: Fix build with older vala + + https://bugzilla.gnome.org/show_bug.cgi?id=729639 + + src/app.vala | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 1327396207626f9aafe28a58b99aeffadf62bea0 +Author: Christian Persch +Date: 2014-05-05 10:28:19 +0200 + + vteapp: Reindent + + Fix vala mode indentation. And fix setup so that vala code is never + using tabs! + + .dir-locals.el | 7 +- + src/app.vala | 1468 +++++++++++++++++++++++++++---------------------------- + src/config.vapi | 2 +- + 3 files changed, 741 insertions(+), 736 deletions(-) + +commit 52662317e154fbc1ca094d8dd2bf54c62e376ec7 +Author: Christian Persch +Date: 2014-05-05 09:17:08 +0200 + + all: Fix namespace for attributes macros + + They are only there to be used in our headers, they are not + part of our API. So prefix them with an underscore. + + src/vtemacros.h | 8 +-- + src/vtepty.h | 14 ++--- + src/vterowdata.h | 4 +- + src/vteterminal.h | 170 +++++++++++++++++++++++++++--------------------------- + 4 files changed, 98 insertions(+), 98 deletions(-) + +commit 07a3f97381112dad889b99211ce655b84858ed66 +Author: Egmont Koblinger +Date: 2014-05-06 13:24:46 +0200 + + emulation: Change bracketed paste mode to per-terminal + + https://bugzilla.gnome.org/show_bug.cgi?id=729533 + + src/vte-private.h | 2 +- + src/vte.c | 8 ++++---- + src/vteseq.c | 2 +- + 3 files changed, 6 insertions(+), 6 deletions(-) + +commit 0b9f5163093c599ad99d56d32a0c855b47b6ed4b +Author: Dimitris Spingos +Date: 2014-05-05 07:20:07 +0300 + + Updated Greek translation + + po/el.po | 100 ++++++++++++++++++++++++++++++++++++++------------------------- + 1 file changed, 60 insertions(+), 40 deletions(-) + +commit 834f0acdd1690b17467b21380f4c7c40613310c1 +Author: Christian Persch +Date: 2014-05-02 09:56:47 +0200 + + all: Add malloc attribute + + src/vteterminal.h | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 9c047aecd0483897491bbec0a409f9fb33373d48 +Author: Christian Persch +Date: 2014-05-02 09:56:47 +0200 + + all: Add nonnull attributes + + src/Makefile.am | 3 + + src/vtemacros.h | 38 +++++++++++ + src/vtepty.h | 15 +++-- + src/vterowdata.h | 10 +-- + src/vteterminal.h | 197 ++++++++++++++++++++++++++++++------------------------ + 5 files changed, 161 insertions(+), 102 deletions(-) + +commit cbc73b6d40aa099643cce07400c31028cfaa7e8c +Author: Egmont Koblinger +Date: 2014-04-29 17:19:22 +0200 + + emulation: Fix escape sequences of keypad Home and End + + https://bugzilla.gnome.org/show_bug.cgi?id=600659#c63 + + src/keymap.c | 6 ------ + 1 file changed, 6 deletions(-) + +commit a1d56abdd6000bc5df9da83c1da321b30b5ef3ab +Author: Christian Persch +Date: 2014-04-28 18:24:50 +0200 + + build: Add missing header to gir files + + src/Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +commit 8395162c4ea12cbc03a512f5995cdc61a216dd4f +Author: Christian Persch +Date: 2014-04-28 18:24:50 +0200 + + build: Remove duplicate flag + + configure.ac | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +commit 338d7873e5cd390cd8d5efff21571a06154f5418 +Author: Christian Persch +Date: 2014-04-28 18:24:49 +0200 + + build: Don't dist generated headers + + src/Makefile.am | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 9ae3281e3416e16275c8b3997b22d5f85a24504b +Author: Christian Persch +Date: 2014-04-28 18:24:49 +0200 + + all: Remove duplicate definitions + + src/vte.h | 8 -------- + 1 file changed, 8 deletions(-) + +commit 15d99b8961e6f6108eb688c691c04722dc63163f +Author: Christian Persch +Date: 2014-04-27 16:47:29 +0200 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d6a6aca25aeb7db26507b9097e29ca8334c4f4b1 (tag: 0.37.0) +Author: Christian Persch +Date: 2014-04-27 16:37:58 +0200 + + build: Work around include directory issue + + The correct way to include vte.h is but the source directoy + is named src/ not vte/ so this doesn't work while building vte itself, + and it breaks when building the vala test application. + + Make vte/vte.h symlink to src/vte.h, and dist that. Ugly, but it works™. + + Makefile.am | 3 ++- + vte | 1 - + vte/vte.h | 1 + + 3 files changed, 3 insertions(+), 2 deletions(-) + +commit 97f610ba1b9a0fac1382636e4ed9baad20209d24 +Author: Christian Persch +Date: 2014-04-27 16:15:04 +0200 + + all: Reorganise headers + + src/Makefile.am | 21 ++- + src/pty.c | 2 + + src/vte.h | 393 +---------------------------------------- + src/vteenums.h | 128 ++++++++++++++ + src/vteglobals.h | 32 ++++ + src/vtepty.h | 44 +---- + src/vteterminal.h | 356 +++++++++++++++++++++++++++++++++++++ + src/vtetypebuiltins.h.template | 6 +- + src/vteversion.h.in | 8 +- + 9 files changed, 554 insertions(+), 436 deletions(-) + +commit 95eeb058f1a84ebe53b071e2647914e0d2e65351 +Author: Christian Persch +Date: 2014-04-27 15:43:04 +0200 + + Prepare version 0.37.0 + + NEWS | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 957a85b11750362a265526d63ca1423ae453cf3b +Author: Christian Persch +Date: 2014-04-27 10:13:41 +0200 + + docs: Fix licence header + + The library is LGPL, and the docs include the docs comments from the library + sources, so it's logical that the docs licence should be LGPL too. The docs + already said so in the text, but the licence header in the comments said GFDL. + Since I'm the only one who's contributed to the xml file itself, I just + changed this to LGPL, too. + + https://bugzilla.gnome.org/show_bug.cgi?id=728795 + + doc/reference/vte-docs.xml | 19 +++++++++++++------ + 1 file changed, 13 insertions(+), 6 deletions(-) + +commit 7ec0eb229d21fa6293573332783084a1d12c9186 +Author: Enrico Nicoletto +Date: 2014-04-26 23:57:18 +0000 + + Updated Brazilian Portuguese translation + + po/pt_BR.po | 89 +++++++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 54 insertions(+), 35 deletions(-) + +commit a8aa5606c0a69eed3e2e31d1077af672ffe26c61 +Author: Christian Persch +Date: 2014-04-26 18:12:57 +0200 + + widget: Rename API + + Now that the GdkColor APIs are gone, rename the GdkRGBA APIs to remove + the _rgba suffix. + + doc/reference/vte-sections.txt | 16 ++++++------- + src/app.vala | 12 +++++----- + src/vte.c | 52 +++++++++++++++--------------------------- + src/vte.h | 38 +++++++++++++++--------------- + 4 files changed, 52 insertions(+), 66 deletions(-) + +commit 16bda596da75356686991da2ee75e5f9f501cdac +Author: Christian Persch +Date: 2014-04-26 09:59:28 +0200 + + widget: Set style background on realize + + vte analogue to https://bugzilla.gnome.org/show_bug.cgi?id=692988 + + src/vte.c | 1 + + 1 file changed, 1 insertion(+) + +commit d201742f47d85049eb3e0dd1d2489bbd01ba642c +Author: Christian Persch +Date: 2014-04-24 20:04:41 +0200 + + Revert "all: Use terminfo instead of termcap" + + This reverts commit a65aae3bb5cb140a8cf5b6bdda2a5b333c574502. + + Makefile.am | 2 +- + configure.ac | 54 ++- + src/Makefile.am | 145 ++----- + src/app.vala | 8 +- + src/caps.c | 355 +++++++++++++++++ + src/caps.h | 10 + + src/interpret.c | 18 +- + src/iso2022.c | 2 +- + src/keymap.c | 297 +++++++++------ + src/keymap.h | 6 +- + src/matcher.c | 148 ++++---- + src/matcher.h | 5 +- + src/table.c | 2 +- + src/vte-private.h | 6 +- + src/vte.c | 112 +++--- + src/vte.gresource.xml.in | 3 + + src/vteconv.c | 7 +- + src/vteseq.c | 73 ++-- + src/vtetc.c | 648 +++++++++++++++++++++++++++++++ + src/vtetc.h | 59 +++ + src/vteti.c | 628 ------------------------------ + src/vteti.h | 94 ----- + src/vtetivars.awk | 83 ---- + src/vtetivars.h | 966 ----------------------------------------------- + termcaps/Makefile.am | 4 + + termcaps/xterm | 33 ++ + termcaps/xterm-color | 27 ++ + termcaps/xterm.baseline | 35 ++ + 28 files changed, 1639 insertions(+), 2191 deletions(-) + +commit d340debc07697d35ac9ded93e273a965b77350f7 +Author: Christian Persch +Date: 2014-04-24 20:04:31 +0200 + + Revert "build: Remove nonexisting Makefile from output files" + + This reverts commit 64836c29c9def4a455870ff4cf5e75410c1d2054. + + configure.ac | 1 + + 1 file changed, 1 insertion(+) + +commit 78b9a3091e1bdea691a74b4c4350acce957ebacd +Author: Christian Persch +Date: 2014-04-24 20:04:22 +0200 + + Revert "terminfo: Fix return values in assertions" + + This reverts commit 21e6badc84b658448a4db29ce6651d911e65f7ae. + + src/vteti.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +commit 0154fbd0c78d0f6a0db8f50681ae2664c5cd2b12 +Author: Christian Persch +Date: 2014-04-24 12:31:04 +0200 + + vteapp: Remove unreachable code + + src/app.vala | 2 -- + 1 file changed, 2 deletions(-) + +commit 4d7b5f0a5a85c2a21ae93e2eb1a6dca75dc12512 +Author: Christian Persch +Date: 2014-04-24 12:29:31 +0200 + + build: Remove unnecessary flag + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit da2fbf5b3d272750ebb080d91038bd799a8e3766 +Author: Christian Persch +Date: 2014-04-24 12:29:19 +0200 + + build: Fix compiler warning + + src/vteseq.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 9bc105dce8508c49311774d45c22166149118e79 +Author: Marek Černocký +Date: 2014-04-24 15:48:48 +0200 + + Updated Czech translation + + po/cs.po | 99 +++++++++++++++++++++++++++------------------------------------- + 1 file changed, 42 insertions(+), 57 deletions(-) + +commit ecb9fcc8cfb73207bcda93889e3e2564d41f79c9 +Author: Christian Persch +Date: 2014-04-23 21:09:19 +0200 + + pty: Fix introspection annotation typo + + src/pty.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c113610d98496b29edf9200ec3b27df00c496c39 +Author: Christian Persch +Date: 2014-04-23 21:07:18 +0200 + + widget: Fix debug printf string + + Use G_GSIZE_FORMAT. + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 21e6badc84b658448a4db29ce6651d911e65f7ae +Author: Christian Persch +Date: 2014-04-23 21:06:24 +0200 + + terminfo: Fix return values in assertions + + src/vteti.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +commit 64836c29c9def4a455870ff4cf5e75410c1d2054 +Author: Christian Persch +Date: 2014-04-23 20:42:18 +0200 + + build: Remove nonexisting Makefile from output files + + Fixes build after commit a65aae3bb5cb140a8cf5b6bdda2a5b333c574502. + + configure.ac | 1 - + 1 file changed, 1 deletion(-) + +commit a65aae3bb5cb140a8cf5b6bdda2a5b333c574502 +Author: Christian Persch +Date: 2014-04-18 22:00:48 +0200 + + all: Use terminfo instead of termcap + + https://bugzilla.gnome.org/show_bug.cgi?id=169295 + + Makefile.am | 2 +- + configure.ac | 54 +-- + src/Makefile.am | 145 +++++-- + src/app.vala | 8 +- + src/caps.c | 355 ----------------- + src/caps.h | 10 - + src/interpret.c | 18 +- + src/iso2022.c | 2 +- + src/keymap.c | 297 ++++++--------- + src/keymap.h | 6 +- + src/matcher.c | 146 ++++--- + src/matcher.h | 5 +- + src/table.c | 2 +- + src/vte-private.h | 6 +- + src/vte.c | 112 +++--- + src/vte.gresource.xml.in | 3 - + src/vteconv.c | 7 +- + src/vteseq.c | 73 ++-- + src/vtetc.c | 648 ------------------------------- + src/vtetc.h | 59 --- + src/vteti.c | 628 ++++++++++++++++++++++++++++++ + src/vteti.h | 94 +++++ + src/vtetivars.awk | 83 ++++ + src/vtetivars.h | 966 +++++++++++++++++++++++++++++++++++++++++++++++ + termcaps/Makefile.am | 4 - + termcaps/xterm | 33 -- + termcaps/xterm-color | 27 -- + termcaps/xterm.baseline | 35 -- + 28 files changed, 2190 insertions(+), 1638 deletions(-) + +commit f323f49db6cbd9e54ba7eea9ce7c148d737407de +Author: Christian Persch +Date: 2014-04-23 20:08:18 +0200 + + build: Fix check program build + + From commit f34959ef25a7c70c545a8e31087a35e8c586e100. + + src/Makefile.am | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit f1e106864e0465e60178214eb2edd6c086a0dd53 +Author: Christian Persch +Date: 2014-04-23 19:45:12 +0200 + + build: Use configure.ac instead of configure.in + + gnome-pty-helper/{configure.in => configure.ac} | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit e414ab351319a36ff1e55181f901eee8c2030907 +Author: Christian Persch +Date: 2014-04-23 19:21:06 +0200 + + build: Use AC_USE_SYSTEM_EXTENSIONS + + ... instead of some grep magic. + + gnome-pty-helper/configure.in | 25 ++----------------------- + 1 file changed, 2 insertions(+), 23 deletions(-) + +commit 911abedc84bc3c36d851306391b223ab722e5a7b +Author: Christian Persch +Date: 2014-04-23 19:37:18 +0200 + + build: Remove unused flags + + Fixes commit e5a83ebfc16bb6607bf946535ef55c50d416a8b6. + + src/Makefile.am | 1 - + 1 file changed, 1 deletion(-) + +commit e320fd38fb60ca0e01e66734df17d8fa4443ae23 +Author: Christian Persch +Date: 2014-04-23 19:21:06 +0200 + + build: Default to enable bindings + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit e5a83ebfc16bb6607bf946535ef55c50d416a8b6 +Author: Christian Persch +Date: 2014-04-23 19:21:06 +0200 + + build: Remove obsolete checks + + configure.ac | 36 ------------------------------------ + 1 file changed, 36 deletions(-) + +commit f34959ef25a7c70c545a8e31087a35e8c586e100 +Author: Christian Persch +Date: 2014-04-23 19:21:06 +0200 + + build: Update warning flags check + + acinclude.m4 | 81 ++++++++++++++++++--------------------------------------- + configure.ac | 57 +++++++++++++++++++++++++++++++--------- + src/Makefile.am | 8 +++--- + src/vte.c | 3 +++ + 4 files changed, 78 insertions(+), 71 deletions(-) + +commit f97eb914b0776644931dbb571779c3a99572598f +Author: Christian Persch +Date: 2014-04-23 19:21:06 +0200 + + build: Use AC_USE_SYSTEM_EXTENSIONS + + ... instead of some grep magic. + + configure.ac | 20 +------------------- + 1 file changed, 1 insertion(+), 19 deletions(-) + +commit 049a604a817585008934bf4778ca668d1c53b57c +Author: Christian Persch +Date: 2014-04-23 19:21:06 +0200 + + a11y: Remove bogus code + + There is no weak pointer there, so just remove this code. + + src/vteaccess.c | 2 -- + 1 file changed, 2 deletions(-) + +commit a4bd9ef53e61535e53e88fe3f00cdca443965e4d +Author: Christian Persch +Date: 2014-04-23 19:21:06 +0200 + + a11y: Remove unnecessary vfunc impl + + Z-order is MININT by default, so there is no need to provide an overriding impl + returning the same. + + src/vteaccess.c | 7 ------- + 1 file changed, 7 deletions(-) + +commit 216ca3c1bc032e8741a062750804d777c5affe9f +Author: Christian Persch +Date: 2014-04-23 19:21:05 +0200 + + a11y: Remove unnecessary vfunc impl + + Layer is WIDGET by default, so there is no need to provide an overriding impl + returning the same. + + src/vteaccess.c | 8 -------- + 1 file changed, 8 deletions(-) + +commit bc4020090d3cbc42975fce383986676ddcdc3517 +Author: Christian Persch +Date: 2014-04-23 19:21:05 +0200 + + a11y: Remove unnecessary vfunc impl + + These are deprecated in atk. + + src/vteaccess.c | 30 ------------------------------ + 1 file changed, 30 deletions(-) + +commit 65cd26f051dbe4f786a5d27a83adf8a149baa03d +Author: Christian Persch +Date: 2014-04-23 19:21:05 +0200 + + a11y: Remove unnecessary vfunc impl + + atk has a default implementation that's identical. + + src/vteaccess.c | 15 --------------- + 1 file changed, 15 deletions(-) + +commit 737416ca14e3be9fb8ffd75aec387ef2720ce0d3 +Author: Christian Persch +Date: 2014-04-23 19:21:05 +0200 + + a11y: Fix compiler warnings about unused variables + + src/vteaccess.c | 4 ---- + 1 file changed, 4 deletions(-) + +commit 0679ee76ff8991cfc41a704442c5f777dca57dd6 +Author: Christian Persch +Date: 2014-04-23 19:21:05 +0200 + + a11y: Remove unused include + + src/vteaccess.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +commit 8e87b30267ee4ffae5032f75d1e86795984a2ba9 +Author: Christian Persch +Date: 2014-04-23 19:21:05 +0200 + + widget: Remove unused struct + + src/vte-private.h | 5 ----- + 1 file changed, 5 deletions(-) + +commit 194c691f73c0976e46dd79e778b435b4e1ac8047 +Author: Christian Persch +Date: 2014-04-23 19:21:05 +0200 + + all: Remove unused function argument + + The result isn't depending on the terminal anymore, so remove that arg. + + src/vte-private.h | 2 +- + src/vte.c | 12 +++++------- + src/vteaccess.c | 32 ++++++++++++++++---------------- + 3 files changed, 22 insertions(+), 24 deletions(-) + +commit fee9fca10cbdc1eaa6ac161fdde5ac263fb986e7 +Author: Christian Persch +Date: 2014-04-22 18:42:12 +0200 + + build: Distcheck with test application and bindings enabled + + Makefile.am | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 22867536b39b526445076748e2c637ef3cf6bffd +Author: Christian Persch +Date: 2014-04-22 18:41:36 +0200 + + gitignore: Update git.mk from upstream + + Makefile.am | 24 ++++-------------------- + git.mk | 48 ++++++++++++++++++++++++++++++++++++------------ + 2 files changed, 40 insertions(+), 32 deletions(-) + +commit 9dbe3c51e3de5010a3abf755e30f3708d1eca525 +Author: Christian Persch +Date: 2014-04-22 08:31:14 +0200 + + widget: More input-enabled fixes + + Check in more places that input is enabled before trying to send + data to the child. + + src/vte.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +commit 0c45fbb7e3ed5afb8b82c3a151cdda2041a562ce +Author: Christian Persch +Date: 2014-04-20 13:23:19 +0200 + + widget: Don't forward key release to input method when input is disabled + + src/vte.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +commit 0397e953677a40453d4554bf155cc6cd731eb7c2 +Author: Christian Persch +Date: 2014-04-19 15:41:47 +0200 + + all: Remove crufty test programme + + src/Makefile.am | 3 +- + src/ssfe.c | 1271 ------------------------------------------------------- + 2 files changed, 1 insertion(+), 1273 deletions(-) + +commit 3868467b2d4613e5aa5f34c0d8e74abc3a38ef16 +Author: Christian Persch +Date: 2014-04-18 11:00:28 +0200 + + widget: Add setting to disable input + + https://bugzilla.gnome.org/show_bug.cgi?id=687118 + + src/app.ui | 17 ++++++++- + src/app.vala | 3 ++ + src/vte-private.h | 1 + + src/vte.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- + src/vte.h | 5 +++ + 5 files changed, 128 insertions(+), 4 deletions(-) + +commit 6f8767384d35f46b4f8bd5e5c0c5defb5f80a0f3 +Author: Piotr Drąg +Date: 2014-04-17 01:01:53 +0200 + + Updated POTFILES.in + + po/POTFILES.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f963f3bbc2d787a0c9a97dfd1b8ef6864a4d3c61 +Author: Christian Persch +Date: 2014-04-14 21:37:35 +0200 + + build: Fix vteapp build dependencies and includes + + src/Makefile.am | 15 ++++++++++----- + vte | 1 + + 2 files changed, 11 insertions(+), 5 deletions(-) + +commit 1dc05b9b33acd0bfe21c2d8f00d7a78babc4af0a +Author: Christian Persch +Date: 2014-04-14 21:01:52 +0200 + + widget: Add function to check for match at event coordinates + + This saves the caller from translating from event coordinates to + grid coordinates himself. + + doc/reference/vte-sections.txt | 1 + + src/Makefile.am | 3 ++- + src/app.vala | 7 +------ + src/vte.c | 40 ++++++++++++++++++++++++++++++++++++++++ + src/vte.h | 3 +++ + 5 files changed, 47 insertions(+), 7 deletions(-) + +commit a0402e6bea1eb9a71781256619dae5282056517e +Author: Christian Persch +Date: 2014-04-14 21:01:52 +0200 + + widget: Use gsize/gssize in public API + + src/vte.c | 20 ++++++++++---------- + src/vte.h | 6 +++--- + 2 files changed, 13 insertions(+), 13 deletions(-) + +commit 4f7052edbe4d697d77c5f5fa8e0838f49374120f +Author: Christian Persch +Date: 2014-04-14 19:21:42 +0200 + + vteapp: Warn when parsing the colour failed + + src/app.vala | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 89a25dc5272a2da8af81bdf1f8f79980e29f2f94 +Author: Christian Persch +Date: 2014-04-14 19:19:22 +0200 + + vteapp: Fix a couple typos + + src/app.vala | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 371f90d40fa9b3331c3e10bab91bec4a63809a0b +Author: Christian Persch +Date: 2014-04-14 18:58:02 +0200 + + widget: Make resize-window signal cell based + + And don't report the padding down to the application. + + https://bugzilla.gnome.org/show_bug.cgi?id=555662 + + src/app.vala | 27 ++++-------------------- + src/vte.c | 4 ++-- + src/vteseq.c | 67 ++++++++++++++++++------------------------------------------ + src/window | 5 +++++ + 4 files changed, 31 insertions(+), 72 deletions(-) + +commit fd128d70048c566442aa90cca58a9bf1e0960103 +Author: Christian Persch +Date: 2014-04-14 18:58:02 +0200 + + vteapp: Reimplement vteapp in vala + + configure.ac | 46 +- + src/Makefile.am | 91 ++-- + src/app.gresource.xml | 22 + + src/app.ui | 91 ++++ + src/app.vala | 823 ++++++++++++++++++++++++++++++++++ + src/config.vapi | 5 + + src/pty.c | 4 +- + src/vte.c | 2 +- + src/vteapp.c | 1181 ------------------------------------------------- + 9 files changed, 1043 insertions(+), 1222 deletions(-) + +commit 0c1556774ed889d33557f144e728d4cf536ccf0e +Author: Christian Persch +Date: 2014-04-14 18:58:02 +0200 + + widget: Fix font-scale property + + src/vte.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +commit aba6a403fc781a4e7d3ee4fe9fd683dd2f9f9bda +Author: Christian Persch +Date: 2014-04-14 18:58:02 +0200 + + widget: Allow passing NULL colour + + These were already (allow-none) but neverthelss asserted the colour != null. + + src/vte.c | 3 --- + 1 file changed, 3 deletions(-) + +commit f7a3c36cf36371bf0659f76cba6317c15d51a997 +Author: Egmont Koblinger +Date: 2014-04-14 17:19:02 +0200 + + widget: Initialize the color palette when the widget is initialized + + https://bugzilla.gnome.org/show_bug.cgi?id=728051 + + src/vte-private.h | 3 +-- + src/vte.c | 25 ++++++++++++------------- + 2 files changed, 13 insertions(+), 15 deletions(-) + +commit b7e59e10bbdf4c3255d41ac1d600b6b66d771691 +Author: Ting-Wei Lan +Date: 2014-04-03 20:31:52 +0800 + + build: Remove unused pty.h header + + https://bugzilla.gnome.org/show_bug.cgi?id=727540 + + src/pty.c | 1 - + src/vte.c | 1 - + 2 files changed, 2 deletions(-) + +commit 8ef03ce788def3a13cbf909be9ab52843e4c6e58 +Author: Christian Persch +Date: 2014-04-12 17:12:17 +0200 + + widget: Disable more widget keybindings + + Disable all of GtkWidget's keybindings except the ones for popup-menu. + We do not want that either, but handling Shift-F10/MenuKey ourself will + require new API to en/disable it, so defer that for now. + + This reverts commit 46b7464576141d69bd0dce16409141cfb26a8225, wontfixing + bug https://bugzilla.gnome.org/show_bug.cgi?id=153265. + + https://bugzilla.gnome.org/show_bug.cgi?id=726438 + + src/vte.c | 25 ++++++++++++++----------- + 1 file changed, 14 insertions(+), 11 deletions(-) + +commit 56ea5810759b9943a4203f9382919f058a66f224 +Author: Christian Persch +Date: 2014-04-11 19:44:42 +0200 + + all: Fix comment style + + src/vte.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +commit a71e0eb84d1b88f764d13b5bb38e3faaded672d2 +Merge: 7f765481 0beed99e +Author: Christian Persch +Date: 2014-04-11 11:38:53 +0200 + + Merge remote-tracking branch 'nomeata/master-html-copy-paste' into work-master + + Works, but needs much cleanup before it can be merged. + + Conflicts: + src/vte-private.h + src/vte.c + +commit 7f765481c24765dfb3d02932666686103e2a4e07 +Author: Christian Persch +Date: 2014-04-09 20:22:36 +0200 + + a11y: Use non-deprecated function to get position + + src/vteaccess.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 1ab0221efb2cfff9922ce74d3fa24a8af8ba070a +Author: Christian Persch +Date: 2014-04-09 20:22:36 +0200 + + widget: Use non-deprecated function to get style font + + configure.ac | 2 +- + src/vte.c | 6 ++---- + 2 files changed, 3 insertions(+), 5 deletions(-) + +commit e16c77315449718438885fb77f8dbdfe81f5e6d9 +Author: Christian Persch +Date: 2014-04-09 20:22:36 +0200 + + widget: Ignore gdk_threads_enter/leave deprecation + + src/vte.c | 29 +++++++++++++++++++++++++++++ + 1 file changed, 29 insertions(+) + +commit ad5c712efdcffc01efef8f9f2bfba30039cd14c0 +Author: Christian Persch +Date: 2014-04-09 20:22:36 +0200 + + widget: Replace deprecated gdk_cursor_{ref,unref} by g_object_{ref,unref} + + src/vte.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit fa308e50d9f6c1c13d1cdbbfdd55f5a8921473a6 +Author: Christian Persch +Date: 2014-04-09 20:22:36 +0200 + + build: Don't suppress gtk deprecation warnings + + src/Makefile.am | 1 - + 1 file changed, 1 deletion(-) + +commit 854633c4cff36853f2618ea02cdb3e4936a3f813 +Author: Christian Persch +Date: 2014-04-07 21:26:03 +0200 + + widget: Add window geometry helper function + + Encapsulate this into a helper function that'll be used in gnome-terminal, + instead of having to poke at the internas like character width and height. + + doc/reference/vte-sections.txt | 4 +++ + src/vte.c | 76 ++++++++++++++++++++++++++++++++++++++++++ + src/vte.h | 8 +++++ + src/vteapp.c | 59 +++++--------------------------- + 4 files changed, 97 insertions(+), 50 deletions(-) + +commit d7772dd9818305f29ed63b63c4df4a1a7558a91c +Author: Christian Persch +Date: 2014-04-07 21:10:34 +0200 + + widget: Remove unused variable + + src/vte.c | 2 -- + 1 file changed, 2 deletions(-) + +commit 8a90631a4e3db877b49610a483601378bd7baf48 +Author: Christian Persch +Date: 2014-04-07 21:04:10 +0200 + + widget: Simplify word-chars handling + + Instead of having a small set of characters listed explicitly, + just use the character's unicode categories. + + Coincidentally fixes https://bugzilla.gnome.org/show_bug.cgi?id=700217 . + + src/vte-private.h | 5 --- + src/vte.c | 127 +++--------------------------------------------------- + 2 files changed, 5 insertions(+), 127 deletions(-) + +commit 2edea355dc98ae109ca35b94b36550441fa2df03 +Author: Christian Persch +Date: 2014-04-07 18:46:52 +0200 + + tests: Fix for API change + + src/reflect.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 8d7f0d7f0ee36698d7de3db7aba737e342a27766 +Author: Christian Persch +Date: 2014-04-07 09:40:53 +0200 + + all: Rename API + + doc/reference/vte-sections.txt | 24 ++++++++++++------------ + doc/reference/vte.types | 8 ++++---- + src/ring.c | 6 +++--- + src/ring.h | 2 +- + src/vte-private.h | 6 +++--- + src/vte.c | 32 ++++++++++++++++---------------- + src/vte.h | 34 +++++++++++++++++----------------- + src/vteapp.c | 10 +++++----- + 8 files changed, 61 insertions(+), 61 deletions(-) + +commit 11d8fbf811819d124e6c678a70f82f0c151946bf +Author: Christian Persch +Date: 2011-06-14 22:40:54 +0200 + + widget: Add match flags for search regex + + For API consistency. + + src/vte-private.h | 1 + + src/vte.c | 9 +++++++-- + src/vte.h | 3 ++- + 3 files changed, 10 insertions(+), 3 deletions(-) + +commit 6145cf756058014e584a19b02faf9f7a520745f6 +Author: Christian Persch +Date: 2011-06-12 22:28:39 +0200 + + widget: Rename API + + For consistency. + + doc/reference/vte-sections.txt | 2 +- + src/vte.c | 8 ++------ + src/vte.h | 3 +-- + 3 files changed, 4 insertions(+), 9 deletions(-) + +commit 45b072529fbc11b79f1b3b9c52dd9a9563d54741 +Author: Debarshi Ray +Date: 2014-04-07 14:56:50 +0200 + + widget: Remove word-chars property and related API + + https://bugzilla.gnome.org/show_bug.cgi?id=727743 + + doc/reference/vte-sections.txt | 1 - + glade/vte.xml.in.in | 1 - + src/vte.c | 37 ++++--------------------------------- + src/vte.h | 5 ----- + 4 files changed, 4 insertions(+), 40 deletions(-) + +commit 9db7f00e4b1eef43d37294326cbcebcf387a891e +Author: Debarshi Ray +Date: 2014-04-07 14:20:47 +0200 + + widget: Use the same default for word-chars as gnome-terminal + + https://bugzilla.gnome.org/show_bug.cgi?id=727743 + + src/vte.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit ec01c93c9b1f7d2f64c7887c28c82c6c10226be9 +Author: Christian Persch +Date: 2011-06-11 23:28:05 +0200 + + widget: Don't make is_word_char public + + Conflicts: + doc/reference/vte-sections.txt + src/vte-private.h + src/vte.c + + doc/reference/vte-sections.txt | 1 - + src/vte-private.h | 2 ++ + src/vte.c | 11 +++++------ + src/vte.h | 1 - + src/vteaccess.c | 32 ++++++++++++++++---------------- + 5 files changed, 23 insertions(+), 24 deletions(-) + +commit 339c939671b7b6c1bbe68a4279048a28f2356292 +Author: Christian Persch +Date: 2011-06-07 19:03:13 +0200 + + all: Rename VteBuffer to VteByteArray + + ... because I want to use "VteBuffer" for something else. + + Conflicts: + src/iso2022.c + + src/buffer.h | 16 ++++++++-------- + src/iso2022.c | 22 +++++++++++----------- + src/vte-private.h | 4 ++-- + src/vte.c | 34 +++++++++++++++++----------------- + src/vteconv.c | 14 +++++++------- + src/vteseq.c | 4 ++-- + 6 files changed, 47 insertions(+), 47 deletions(-) + +commit c76058502b3a597fa7c0945374bba87f9e246cd5 +Author: Christian Persch +Date: 2011-06-01 08:46:33 +0200 + + widget: Rename API + + For consistency, name this vte_terminal_match_remove_all. + + doc/reference/vte-sections.txt | 2 +- + src/vte.c | 6 ++++-- + src/vte.h | 4 +--- + 3 files changed, 6 insertions(+), 6 deletions(-) + +commit bbe25c8a64e673c7187be0b349840a73439f9d07 +Author: Christian Persch +Date: 2011-05-29 16:21:56 +0200 + + widget: Rename API + + 'spawn' is a better name than 'fork' for this. + + doc/reference/vte-sections.txt | 2 +- + src/vte.c | 4 ++-- + src/vte.h | 22 +++++++++++----------- + src/vteapp.c | 2 +- + 4 files changed, 15 insertions(+), 15 deletions(-) + +commit 2067d8a6baf72e8b16cec2dbca989f7b60c421b1 +Author: Christian Persch +Date: 2014-04-06 16:13:21 +0200 + + widget: Allow setting font-scale before realize + + src/vte.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit b87ccc6f2c2eaf3eb457fc412a278be0fe39d980 +Author: Christian Persch +Date: 2014-04-06 15:41:37 +0200 + + widget: Clamp font scale + + Only clamp the font scale, but don't issue a critical warning. + + src/vte.c | 1 - + 1 file changed, 1 deletion(-) + +commit 2606c74e2f3f13396a9fd9b1c9c8bee5189e1743 +Author: Christian Persch +Date: 2014-04-06 15:36:46 +0200 + + Revert "widget: Install default CSS at FALLBACK priority" + + This causes a off-by-one error somewhere that makes sizing not work correctly + anymore. So revert this for now. + + This reverts commit 8d970eaf129221d925a26f4423b4baf4524ff481. + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c818ee7445189cda4f5fa1dc19f676d91fbab7a7 +Author: Christian Persch +Date: 2011-05-27 23:49:37 +0200 + + widget: Add font-scale property + + To implement zoom, add font-scale property. + + Conflicts: + src/vte-private.h + src/vte.c + src/vteapp.c + + doc/reference/vte-sections.txt | 3 +- + src/vte-private.h | 5 ++ + src/vte.c | 159 +++++++++++++++++++++++++++++------------ + src/vte.h | 8 ++- + src/vteapp.c | 31 ++++---- + 5 files changed, 140 insertions(+), 66 deletions(-) + +commit 916a5cb9d440a6391dd809d01ee72754b8e6216f +Author: Christian Persch +Date: 2011-05-29 01:05:16 +0200 + + widget: Init variable + + Fixes a potential condition depending on an uninitialised value. + + src/vte.c | 1 + + 1 file changed, 1 insertion(+) + +commit a43ff5dfb5039bad031f03ed6ff4b60d3bb20a2d +Author: Christian Persch +Date: 2011-05-28 22:01:02 +0200 + + vteapp: Remove dead code + + src/vteapp.c | 6 ------ + 1 file changed, 6 deletions(-) + +commit 8ae1daa342662a16fb695bc6c05122b53da2fcdb +Author: Christian Persch +Date: 2011-05-28 21:53:41 +0200 + + vteapp: Correct error message + + src/vteapp.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit d9ac9d390c7e186d74854de0f6555fd558229e8c +Author: Christian Persch +Date: 2011-05-28 13:17:48 +0200 + + vteapp: Derive from VteTerminal + + src/vteapp.c | 36 +++++++++++++++++++++++++++++++++++- + 1 file changed, 35 insertions(+), 1 deletion(-) + +commit 06ac11f9086c0f1b0a3adec38c58ed55bf6d70c2 +Author: Christian Persch +Date: 2011-05-28 13:07:13 +0200 + + vteapp: Add option to add new dingus + + For testing purposes, allow specifying extra dingu regexes + on the command line. + + Conflicts: + src/vteapp.c + + src/vteapp.c | 66 +++++++++++++++++++++++++++++++++++++++++++----------------- + 1 file changed, 48 insertions(+), 18 deletions(-) + +commit e36b4f0f906bb1386229b778b6b901a49c2cbc42 +Author: Christian Persch +Date: 2011-05-26 22:50:38 +0200 + + vteapp: Use gtk API to get the text targets + + Conflicts: + src/vteapp.c + + src/vteapp.c | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +commit 5d9faee7a45cdd2d7c1215ba44271bef9d8296fa +Author: Christian Persch +Date: 2011-05-26 22:38:05 +0200 + + all: Rename API + + Add _sync suffix and GCancellable argument to synchronous functions. + + Conflicts: + doc/reference/vte-sections.txt + src/vte.c + + doc/reference/vte-sections.txt | 8 ++++---- + src/pty.c | 20 ++++++++++++-------- + src/vte.c | 25 +++++++++++++++---------- + src/vte.h | 10 ++++++---- + src/vteapp.c | 14 +++++++++++--- + src/vtepty.h | 12 +++++++----- + 6 files changed, 55 insertions(+), 34 deletions(-) + +commit 163446f49e6e799a444322eeb52ef4992c50b99c +Author: Christian Persch +Date: 2014-04-06 12:02:01 +0200 + + widget: Rename API + + Now that the pty FD API has been removed, move the pty-object API. + + doc/reference/vte-sections.txt | 4 ++-- + src/vte.c | 36 ++++++++++++++++++------------------ + src/vte.h | 4 ++-- + src/vteapp.c | 2 +- + 4 files changed, 23 insertions(+), 23 deletions(-) + +commit 84579974d9bf5cdda22f13baa7c455f50a491638 +Author: Christian Persch +Date: 2014-04-06 11:39:08 +0200 + + iso2022: Build fix for the check binary + + src/iso2022.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 31810bc64a72903b5dfd21bec950b0afb183e679 +Author: Christian Persch +Date: 2014-04-06 11:12:07 +0200 + + a11y: Don't explicitly set accessible parent + + Most other widget's a11y implementations don't do this either. + + src/vteaccess.c | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) + +commit 002adc13df035025aa17d8e9ffe936878f5455bc +Author: Christian Persch +Date: 2014-04-06 11:07:20 +0200 + + vteapp: Add options to set highlight colour + + src/vteapp.c | 61 +++++++++++++++++++++++++++++++++++++++++++++--------------- + 1 file changed, 46 insertions(+), 15 deletions(-) + +commit fbf422d402b3643c4e8d24958214251ce85dedaf +Author: Christian Persch +Date: 2011-05-18 15:40:19 +0200 + + widget: Add style debug flag + + ... and remove the unused background debug flag. + + Conflicts: + src/debug.c + src/debug.h + + src/debug.c | 2 +- + src/debug.h | 2 +- + src/vte.c | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +commit 8d970eaf129221d925a26f4423b4baf4524ff481 +Author: Christian Persch +Date: 2011-05-17 21:43:48 +0200 + + widget: Install default CSS at FALLBACK priority + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 13a106ce72e342bcda646426c74c72e95430a646 +Author: Christian Persch +Date: 2014-04-06 10:32:52 +0200 + + widget: Remove drawable checks + + src/vte.c | 40 ++++++++++++++++++++++------------------ + 1 file changed, 22 insertions(+), 18 deletions(-) + +commit 46a3afa231071943e061c3346bdbd9271d709450 +Author: Christian Persch +Date: 2014-04-06 08:24:11 +0200 + + a11y: Remove duplicated code + + Remove code copied from GtkWidgetAccessible. + + This reverts commit 3bdb0639aa26ce1dcd745bab71a6bd5dddca6019. + + src/vteaccess.c | 427 +------------------------------------------------------- + 1 file changed, 1 insertion(+), 426 deletions(-) + +commit 58b3f192373e9e986031916e2d1133e7f5f7bb54 +Author: Christian Persch +Date: 2014-04-06 08:24:11 +0200 + + a11y: Remove atk component get_{extends,size,position} impls + + GtkWidgetAccessible's implementation of these is the same already. + + src/vteaccess.c | 63 --------------------------------------------------------- + 1 file changed, 63 deletions(-) + +commit 720f75161bdae0d99f81cc0a2d0f0eb6ddc38eef +Author: Christian Persch +Date: 2014-04-06 09:28:16 +0200 + + a11y: Use new gtk a11y infrastructure + + Derive VteTerminalAccessible from GtkWidgetAccessible, and use instance + private data instead of gobject data for VteTerminalPrivate. + + src/vte.c | 44 +---- + src/vteaccess.c | 497 +++++++++++++++++++------------------------------------- + src/vteaccess.h | 37 +---- + 3 files changed, 178 insertions(+), 400 deletions(-) + +commit 134067406b7ede702ed79bddcd84944ed51b1023 +Author: Christian Persch +Date: 2014-04-05 10:20:50 +0200 + + vteapp: Plug a mem leak + + ==27552== 10 bytes in 1 blocks are definitely lost in loss record 1,262 of 7,046 + ==27552== at 0x4027AB1: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) + ==27552== by 0x4B17C32: g_malloc (gmem.c:97) + ==27552== by 0x4B30260: g_strdup (gstrfuncs.c:356) + ==27552== by 0x4057921: vte_get_user_shell (vte.c:3464) + ==27552== by 0x804BFC4: main (vteapp.c:1014) + + src/vteapp.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit f1f3dff4ed94ddd39e59e373a539981016ff1b8f +Author: Christian Persch +Date: 2014-04-04 14:47:51 +0200 + + keymap: Add missing Begin key to list of cursor keys + + src/keymap.c | 1 + + 1 file changed, 1 insertion(+) + +commit b2b4dd9c77b12b775b33c1b5bd4c5d9b64721ecf +Author: Christian Persch +Date: 2014-04-04 13:55:51 +0200 + + keymap: Add missing modifiers to the list + + src/keymap.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit d63adca24e305c0e1c0fd6514fce20b433ba2dc3 +Author: Christian Persch +Date: 2014-04-04 13:40:39 +0200 + + widget: Add more keys that the IM may need + + src/vte.c | 43 ++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 42 insertions(+), 1 deletion(-) + +commit 883088e1fe82b77fba101d9ec02cf96f66c50e91 +Author: Christian Persch +Date: 2014-04-04 10:45:47 +0200 + + a11y: Use correct function to compare colours + + Can't compare PangoColors with gdk_color_equal! + + src/vteaccess.c | 17 +++++++++++++---- + 1 file changed, 13 insertions(+), 4 deletions(-) + +commit 83f822b7d3682e743ffd48d4806427e9bc56090f +Author: Christian Persch +Date: 2014-04-04 10:42:25 +0200 + + widget: Add assertions to public API + + Move the assertions to the public API instead of having them in the private + functions. + + src/vte.c | 52 +++++++++++++++++++++++++--------------------------- + 1 file changed, 25 insertions(+), 27 deletions(-) + +commit 060850078a53dce64c3d2b96882f525fef7f5028 +Author: Christian Persch +Date: 2014-04-04 10:26:00 +0200 + + widget: Remove unused tint colour + + src/vte-private.h | 2 +- + src/vte.c | 104 ++++++++++++++---------------------------------------- + src/vte.h | 3 -- + src/vteapp.c | 6 ++-- + 4 files changed, 30 insertions(+), 85 deletions(-) + +commit 763a191592b3e2cc5c415b3255f6ee421cd261cc +Author: Christian Persch +Date: 2014-04-03 19:17:39 +0200 + + iso2022: Update the interpret test tool for internal API change + + src/interpret.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1f18737d606346c5c2ab09555a76411ab1ae1a89 +Author: Christian Persch +Date: 2014-03-31 23:14:02 +0200 + + widget: Add setting for CJK ambiguous width + + When using UTF-8 encoding, normally ambiguous-width characters are narrow. + However, some uses (most importantly CJK) want them to be wide instead. + + https://bugzilla.gnome.org/show_bug.cgi?id=352654 + https://bugzilla.gnome.org/show_bug.cgi?id=614617 + + doc/reference/vte-sections.txt | 2 ++ + src/iso2022.c | 20 +++++++++--- + src/iso2022.h | 4 +++ + src/vte-private.h | 1 + + src/vte.c | 74 +++++++++++++++++++++++++++++++++++++++++- + src/vte.h | 4 +++ + src/vteapp.c | 34 +++++++++++++++++++ + 7 files changed, 134 insertions(+), 5 deletions(-) + +commit c9b4abe638bf783459c52d9aeceb5b7960ab7cbb +Author: Christian Persch +Date: 2014-03-31 22:01:44 +0200 + + iso2022: Always intern the codeset name + + src/iso2022.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit 080c8b4d88ec33597e71c4b4822fc784f9bc97e4 +Author: Christian Persch +Date: 2012-04-24 20:53:26 +0200 + + build: Provide VAPI + + Conflicts: + configure.ac + src/Makefile.am + + Makefile.am | 1 + + configure.ac | 15 ++++++++++++--- + src/Makefile.am | 28 ++++++++++++++++++++++++++-- + 3 files changed, 39 insertions(+), 5 deletions(-) + +commit 08c778bf4a23abe614bad294027b4e88f6b727f0 +Author: Christian Persch +Date: 2011-05-14 17:45:23 +0200 + + widget: Remove vte_terminal_get_child_exit_status + + Add the child's exit status to the child-exited signal instead. + + Conflicts: + src/vte.c + + doc/reference/vte-sections.txt | 1 - + src/vte-private.h | 1 - + src/vte.c | 47 +++++++++++------------------------------- + src/vte.h | 5 +---- + src/vteapp.c | 30 ++++++++++----------------- + 5 files changed, 24 insertions(+), 60 deletions(-) + +commit 27366ed28ddc07dd59d493c07b974f030d2d4e54 +Author: Christian Persch +Date: 2014-03-30 21:16:23 +0200 + + widget: Allow setting size larger than current size + + src/vteaccess.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 165b0cf9c40cddf6235e42d86a434b9a1cffaea5 +Author: Christian Persch +Date: 2011-05-07 20:13:04 +0200 + + widget: Remove 'inner-border' style property + + Use the standard 'padding' style property instead. + + src/vte.c | 30 +++++------------------------- + src/vteaccess.c | 17 +++++++---------- + src/vteapp.c | 54 +++++++++++++++++++++++++++--------------------------- + 3 files changed, 39 insertions(+), 62 deletions(-) + +commit 9b13d57f59764ebcd2cc0fe78cdefdf1e8ce2baa +Author: Christian Persch +Date: 2011-05-07 20:01:26 +0200 + + widget: Rename 'inner_border' to 'padding' + + Preparation for the next commit. + + src/vte-private.h | 2 +- + src/vte.c | 150 +++++++++++++++++++++++++++--------------------------- + src/vteaccess.c | 10 ++-- + src/vteapp.c | 42 +++++++-------- + src/vteseq.c | 48 ++++++++--------- + 5 files changed, 126 insertions(+), 126 deletions(-) + +commit d371754b004e29bea5c08a4bf257cdbc018a09e1 +Author: Christian Persch +Date: 2011-05-07 19:56:10 +0200 + + widget: Add private function to transform from xy to grid coordinates + + ... and from pixel size to grid size. + + src/vte-private.h | 10 +++++++++ + src/vte.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 77 insertions(+) + +commit 78ff0489f1a29506baee65673a8992873c9cf496 +Author: Christian Persch +Date: 2014-03-27 18:49:37 +0100 + + build: Export all symbols starting with vte_ + + Does't change anything, but is simpler. + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8b7ecc9d646a58d86b38c7b0f943778f766a2995 +Author: Christian Persch +Date: 2014-03-27 18:45:14 +0100 + + all: Remove vtedeprecated.h + + No more deprecated functions remaining! + + src/Makefile.am | 7 +++---- + src/vte.h | 6 ------ + src/vtedeprecated.h | 36 ------------------------------------ + 3 files changed, 3 insertions(+), 46 deletions(-) + +commit b610b630b04c993850a6ab7efca0573fb700f406 +Author: Christian Persch +Date: 2014-03-27 18:41:29 +0100 + + widget: Remove deprecated function + + src/vte.c | 14 -------------- + src/vtedeprecated.h | 3 --- + 2 files changed, 17 deletions(-) + +commit 985fd375c25345933bcd864d4c8be302c3a54eb8 +Author: Christian Persch +Date: 2014-03-27 18:41:29 +0100 + + widget: Remove deprecated function + + doc/reference/vte-sections.txt | 3 --- + src/vte.c | 22 ---------------------- + src/vtedeprecated.h | 3 --- + 3 files changed, 28 deletions(-) + +commit 9d01365de2d925fb512476473eb9cf46028cfd8a +Author: Christian Persch +Date: 2011-05-07 19:46:42 +0200 + + all: Don't export _vte_debug_* symbols + + Debug symbols are for internal use only. + + Conflicts: + src/Makefile.am + + src/Makefile.am | 4 +++- + src/debug.h | 9 +++++++++ + src/vteapp.c | 2 ++ + 3 files changed, 14 insertions(+), 1 deletion(-) + +commit 616f1a6968a5c6c98fb8ba0802ad07f811264033 +Author: Christian Persch +Date: 2014-03-27 18:36:00 +0100 + + widget: Remove use of deprecated GtkStyle + + src/vte.c | 28 +++++++++------------------- + 1 file changed, 9 insertions(+), 19 deletions(-) + +commit bed08e89388d4b004e8e62df4583f75de07c79c2 +Author: Christian Persch +Date: 2014-03-27 18:27:48 +0100 + + widget: Remove unnecessary boolean return value + + It's not called from a timeout anymore, so just return void. + + src/vte.c | 13 ++++--------- + 1 file changed, 4 insertions(+), 9 deletions(-) + +commit c55062b704249adb67538385eae796289fc38004 +Author: Christian Persch +Date: 2011-05-03 19:33:30 +0200 + + vteapp: Implement --border-width option + + This is to test the condition that the terminal isn't at (0,0) in its + containing widget. + + Conflicts: + src/vteapp.c + + src/vteapp.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit 33fc2cb7979da51470dbce1af0a1cd319cefab97 +Author: Christian Persch +Date: 2011-05-03 17:10:19 +0200 + + widget: No need to clip the cairo context + + The context passed to ::draw is already clipped. + + src/vte.c | 1 - + src/vtedraw.c | 9 --------- + src/vtedraw.h | 1 - + 3 files changed, 11 deletions(-) + +commit 14e854fc0eaf0476c9dfc1423a97a20ac1067c98 +Author: Christian Persch +Date: 2014-03-27 16:45:53 +0100 + + drawing: Don't store the widget + + And esp. not a reference to it! It's just needed when creating the font info, + so only pass it to set_text_font. + + src/vte.c | 10 +++------- + src/vtedraw.c | 18 +++++++----------- + src/vtedraw.h | 3 ++- + 3 files changed, 12 insertions(+), 19 deletions(-) + +commit cd40ae1387546d52bae9c344d798cbee830ecc9a +Author: Christian Persch +Date: 2014-03-27 16:35:23 +0100 + + drawing: Remove start/end + + _vte_draw_start/end doesn't fit with the current drawing model anymore. + Instead just set the cairo context at the start of ::draw, and unset it + at the end. + + src/vte.c | 4 ++-- + src/vtedraw.c | 50 +++++++++++++++++--------------------------------- + src/vtedraw.h | 6 ++---- + 3 files changed, 21 insertions(+), 39 deletions(-) + +commit 547aca3d4c030cb4314b1073fce94796aa1f7e44 +Author: Christian Persch +Date: 2014-03-27 16:27:51 +0100 + + widget: Use allocated {width,height} + + src/vte.c | 13 ++++++------- + 1 file changed, 6 insertions(+), 7 deletions(-) + +commit 9fc100d8fc626235d677119e09f02badd7772658 +Author: Christian Persch +Date: 2014-03-27 16:25:05 +0100 + + widget: Remove expose event debug output + + It's just ::draw now, no need for two separate debug messages for the same thing. + + src/vte.c | 15 ++------------- + 1 file changed, 2 insertions(+), 13 deletions(-) + +commit d6a9831ef41323f591c971a42aeefb13e37d5a47 +Author: Christian Persch +Date: 2014-03-27 16:21:24 +0100 + + widget: Merge paint function into ::draw + + No need for a separate function here. + + src/vte.c | 57 +++++++++++++++++++++++++-------------------------------- + 1 file changed, 25 insertions(+), 32 deletions(-) + +commit 08d07821b0da2faf50c72f21037a2bbd05d197cd +Author: Christian Persch +Date: 2014-03-27 16:17:49 +0100 + + widget: Use gobject define instead of redefining it + + src/vte.c | 45 +++++++++++++++++++++------------------------ + 1 file changed, 21 insertions(+), 24 deletions(-) + +commit 545fdf4de9d664bc5c12678323ce5eda64b9f42f +Author: Christian Persch +Date: 2014-03-27 16:16:13 +0100 + + widget: Handle background colour changes immediately + + Now that we don't support faux transparency anymore, we can just handle + background updates immediately (resulting in an invalidate-all) instead of + queuing them. + + src/vte-private.h | 3 +-- + src/vte.c | 28 ++-------------------------- + 2 files changed, 3 insertions(+), 28 deletions(-) + +commit 68011996d3910389f1b5cfb0a7e47a20ea67004f +Author: Christian Persch +Date: 2014-03-27 16:13:26 +0100 + + widget: Remove background pixbuf settings + + doc/reference/Makefile.am | 1 - + doc/reference/vte-sections.txt | 3 - + src/Makefile.am | 2 - + src/vte-private.h | 2 - + src/vte.c | 260 +-------------------------------- + src/vteapp.c | 20 +-- + src/vtebg.c | 323 ----------------------------------------- + src/vtebg.h | 68 --------- + src/vtedeprecated.h | 7 - + src/vtedraw.c | 47 ------ + src/vtedraw.h | 8 - + 11 files changed, 2 insertions(+), 739 deletions(-) + +commit a14008988f755d7d5241bc9086173ebdcdad0b8f +Author: Christian Persch +Date: 2014-03-27 15:45:11 +0100 + + widget: Remove pixmap background saturation setting + + doc/reference/vte-sections.txt | 1 - + src/vte-private.h | 1 - + src/vte.c | 106 ++++++----------------------------------- + src/vteapp.c | 2 +- + src/vtebg.c | 25 +++------- + src/vtebg.h | 1 - + src/vtedeprecated.h | 2 - + src/vtedraw.c | 5 +- + src/vtedraw.h | 3 +- + 9 files changed, 25 insertions(+), 121 deletions(-) + +commit 0ea015d952803f380f62ca1eb5b72d8638f58e6c +Author: Christian Persch +Date: 2014-03-27 15:26:35 +0100 + + widget: Remove faux-transparency support + + Remove snapshotting the X root window used to emulate transparency on + non-composited WMs. There also goes the last explicit X dependency. + + configure.ac | 13 +-- + doc/reference/vte-sections.txt | 1 - + src/vte-private.h | 2 - + src/vte.c | 188 +++-------------------------------------- + src/vteapp.c | 13 +-- + src/vtebg.c | 188 +---------------------------------------- + src/vtebg.h | 1 - + src/vtedeprecated.h | 2 - + 8 files changed, 23 insertions(+), 385 deletions(-) + +commit 9894a095df50e6717683cf6b365265b748bae94a +Author: Christian Persch +Date: 2014-03-27 15:10:20 +0100 + + widget: Remove public GdkColor APIs + + Use GdkRGBA in the API, and use PangoColor internally, and for the attributes. + + doc/reference/vte-sections.txt | 8 -- + src/vte-private.h | 4 +- + src/vte.c | 170 ++++++++++++++++++++--------------------- + src/vte.h | 22 +----- + src/vtedeprecated.h | 2 - + src/vteseq.c | 15 +++- + 6 files changed, 95 insertions(+), 126 deletions(-) + +commit e7f0dde0c43493ab93203585ae7e5aca96b21e62 +Author: Christian Persch +Date: 2011-05-03 00:27:46 +0200 + + vteapp: Use RGBA colour APIs + + Conflicts: + src/vteapp.c + + src/vteapp.c | 28 ++++++++++++---------------- + 1 file changed, 12 insertions(+), 16 deletions(-) + +commit 85d04d873dd3531ac289c858f640f0ee157dcd7a +Author: Christian Persch +Date: 2011-05-03 00:15:19 +0200 + + widget: Store background saturation as double + + Conflicts: + src/vte-private.h + + src/vte-private.h | 3 +-- + src/vte.c | 20 +++++++++----------- + 2 files changed, 10 insertions(+), 13 deletions(-) + +commit 1ec6c43d1aa89620e040f5a8eebe25b6772a35e6 +Author: Christian Persch +Date: 2011-05-02 23:21:01 +0200 + + widget: Make background tint colour use GdkRGBA + + Remove vte_terminal_set_background_tint_color and vte_terminal_set_opacity. + The opacity is now taken from the alpha component of the tint GdkRGBA. + + Conflicts: + doc/reference/vte-sections.txt + src/vte.c + src/vte.h + src/vteapp.c + + doc/reference/vte-sections.txt | 2 - + src/vte-private.h | 3 +- + src/vte.c | 111 ++++++++--------------------------------- + src/vte.h | 3 ++ + src/vteapp.c | 10 ++-- + src/vtebg.c | 30 +++++------ + src/vtebg.h | 2 +- + src/vtedraw.c | 15 +++--- + src/vtedraw.h | 7 +-- + 9 files changed, 52 insertions(+), 131 deletions(-) + +commit d400734d2b98bb74411450769ab4dc95d025f7d8 +Author: Piotr Drąg +Date: 2014-03-25 00:57:12 +0100 + + Updated POTFILES.in + + po/POTFILES.in | 1 - + 1 file changed, 1 deletion(-) + +commit d72b94209831c4e1f34bca7ad7637e961f311298 +Author: Christian Persch +Date: 2011-05-02 23:10:53 +0200 + + widget: Remove vte_char_attributes struct + + Conflicts: + src/vte.h + + src/vte.h | 9 +-------- + 1 file changed, 1 insertion(+), 8 deletions(-) + +commit 34101e0d477d1aa1d091e28368e6fee7ba42f93d +Author: Christian Persch +Date: 2011-05-02 23:06:33 +0200 + + widget: Add vte_get_default_emulation + + ... renamed from vte_terminal_get_default_emulation. + + Conflicts: + doc/reference/vte-docs.xml + src/vte.c + + doc/reference/vte-sections.txt | 2 +- + src/pty.c | 2 +- + src/vte.c | 22 ++++++++++------------ + src/vte.h | 3 ++- + 4 files changed, 14 insertions(+), 15 deletions(-) + +commit 539dc0db756c2b68486ddf5d47230bb0ffe5d7d0 +Author: Christian Persch +Date: 2011-05-02 22:50:21 +0200 + + widget: Remove now unused seal macros + + Conflicts: + src/vte.h + + configure.ac | 2 -- + src/vte.h | 12 ------------ + vte.pc.in | 2 +- + 3 files changed, 1 insertion(+), 15 deletions(-) + +commit 47e2298b7fad518ffb6092f7fa623a9fbfd9948c +Author: Christian Persch +Date: 2011-05-02 22:47:33 +0200 + + widget: Remove sealed adjustment from public struct + + src/reflect.c | 7 +----- + src/vte-private.h | 1 + + src/vte.c | 70 +++++++++++++++++++++++++++---------------------------- + src/vte.h | 1 - + src/vteapp.c | 2 +- + src/vteseq.c | 2 +- + 6 files changed, 39 insertions(+), 44 deletions(-) + +commit 447b526f44954da888fc8d294f574ed17ce754dd +Author: Christian Persch +Date: 2011-05-02 22:46:17 +0200 + + widget: Remove sealed icon_title from public struct + + Conflicts: + src/vteapp.c + + src/vte-private.h | 1 + + src/vte.c | 10 +++++----- + src/vte.h | 3 --- + src/vteapp.c | 3 +-- + src/vteseq.c | 2 +- + 5 files changed, 8 insertions(+), 11 deletions(-) + +commit f0a83006f71d6708568b927fc58533d3de8ee7af +Author: Christian Persch +Date: 2011-05-02 22:44:10 +0200 + + widget: emove sealed window_title from public struct + + src/vte-private.h | 1 + + src/vte.c | 12 ++++++------ + src/vte.h | 1 - + src/vteaccess.c | 9 ++++----- + src/vteapp.c | 3 +-- + src/vteseq.c | 2 +- + 6 files changed, 13 insertions(+), 15 deletions(-) + +commit f523b63806c7ded4af9dfb4c57e4854594aa7f3a +Author: Christian Persch +Date: 2011-05-02 22:38:56 +0200 + + widget: Remove sealed {row,column}_count from public struct + + Conflicts: + src/vte.c + src/vteseq.c + + src/vte-private.h | 4 + + src/vte.c | 232 +++++++++++++++++++++++++++--------------------------- + src/vte.h | 3 - + src/vteaccess.c | 13 +-- + src/vteapp.c | 8 +- + src/vteseq.c | 88 ++++++++++----------- + 6 files changed, 175 insertions(+), 173 deletions(-) + +commit ce6179e581b400a9d9e818185921204a6ba1c5d1 +Author: Christian Persch +Date: 2011-05-02 22:30:35 +0200 + + widget: Remove sealed char_{width,height} from public struct + + Conflicts: + src/vte.c + src/vteseq.c + + src/vte-private.h | 3 ++ + src/vte.c | 136 +++++++++++++++++++++++++++--------------------------- + src/vte.h | 1 - + src/vteapp.c | 16 +++++-- + src/vteseq.c | 16 +++---- + 5 files changed, 91 insertions(+), 81 deletions(-) + +commit b52bdae618b1dd38f470bb541302818b8e226967 +Author: Christian Persch +Date: 2011-05-02 22:26:21 +0200 + + widget: Do not export the accessible object + + Conflicts: + src/Makefile.am + src/vte.c + src/vteaccess.c + + doc/reference/vte-docs.xml | 5 ----- + doc/reference/vte-sections.txt | 25 ------------------------- + doc/reference/vte.types | 3 --- + src/Makefile.am | 2 +- + src/vte.c | 2 +- + src/vteaccess.c | 22 +++++++++++----------- + src/vteaccess.h | 12 ++++++------ + 7 files changed, 19 insertions(+), 52 deletions(-) + +commit eb05089881c122508bb870ec457e187fae7eb8ef +Author: Christian Persch +Date: 2011-05-02 21:42:32 +0200 + + widget: Remove deprecated VteTerminalAntiAlias + + https://bugzilla.gnome.org/show_bug.cgi?id=561366 + + Conflicts: + src/vtedeprecated.h + + doc/reference/vte-sections.txt | 3 --- + doc/reference/vte.types | 1 - + src/vte.c | 2 +- + src/vtedeprecated.h | 16 ---------------- + 4 files changed, 1 insertion(+), 21 deletions(-) + +commit c341b8898e53cc3e21958dc95eba5994594fe3e9 +Author: Christian Persch +Date: 2011-05-02 21:41:00 +0200 + + widget: Remove deprecated vte_terminal_set_font_from_string_full + + https://bugzilla.gnome.org/show_bug.cgi?id=561366 + + Conflicts: + src/vtedeprecated.h + + doc/reference/vte-sections.txt | 1 - + src/vte.c | 47 ++++++++---------------------------------- + src/vtedeprecated.h | 4 ---- + 3 files changed, 9 insertions(+), 43 deletions(-) + +commit 9db7f039cd9617b5cbea99c8b4b1fb2a4e40cdc5 +Author: Christian Persch +Date: 2011-05-02 21:37:58 +0200 + + widget: Remove deprecated vte_terminal_set_font_full + + https://bugzilla.gnome.org/show_bug.cgi?id=561366 + + doc/reference/vte-sections.txt | 1 - + src/vte.c | 51 +++++++----------------------------------- + src/vtedeprecated.h | 3 --- + 3 files changed, 8 insertions(+), 47 deletions(-) + +commit e8ab62cf2f5925203ce49586fca16265faddbb21 +Author: Christian Persch +Date: 2011-05-02 21:31:23 +0200 + + vteapp: Don't use deprecated vte_terminal_set_font_from_string_full + + https://bugzilla.gnome.org/show_bug.cgi?id=561366 + + Conflicts: + src/vteapp.c + + src/vteapp.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +commit 0a6318be62537743833d7c47d95f688a338b14fc +Author: Christian Persch +Date: 2011-05-02 21:28:32 +0200 + + widget: Remove obsolete antialias handling from VteDraw + + https://bugzilla.gnome.org/show_bug.cgi?id=561366 + + Conflicts: + src/vtedraw.c + + src/vte.c | 3 +-- + src/vtedraw.c | 66 ++++++++++++++++------------------------------------------- + src/vtedraw.h | 3 +-- + 3 files changed, 20 insertions(+), 52 deletions(-) + +commit 64821b0f299d383d4e147cef4ec994b9f62f58d1 +Author: Christian Persch +Date: 2011-05-02 21:24:10 +0200 + + widget: Remove VteTerminalPrivate.fontantialias + + src/vte-private.h | 1 - + src/vte.c | 4 +--- + 2 files changed, 1 insertion(+), 4 deletions(-) + +commit 0276505b70b98a1adfec3da8b16a8f720de2b97a +Author: Christian Persch +Date: 2011-05-02 21:22:23 +0200 + + widget: Remove antialias arg from vte_terminal_set_font_full_internal + + https://bugzilla.gnome.org/show_bug.cgi?id=561366 + + src/vte.c | 23 ++++++++--------------- + 1 file changed, 8 insertions(+), 15 deletions(-) + +commit 12aa33c89e995f9b6fcbe3ae22d6997a4c60393c +Author: Christian Persch +Date: 2011-05-02 21:20:08 +0200 + + vteapp: Remove --antialias option + + https://bugzilla.gnome.org/show_bug.cgi?id=561366 + + Conflicts: + src/vteapp.c + + src/vteapp.c | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +commit 6c0c1f1397013853fe4153f743cec95cee77950d +Author: Christian Persch +Date: 2011-05-02 21:18:06 +0200 + + widget: Remove deprecated VTE_IS_TERMINAL_ANTI_ALIAS + + doc/reference/vte-sections.txt | 1 - + src/vtedeprecated.h | 11 ----------- + 2 files changed, 12 deletions(-) + +commit d0001b7863c87203399b89be970c1ea5027908d9 +Author: Christian Persch +Date: 2011-05-02 21:17:43 +0200 + + widget: Remove deprecated VTE_IS_TERMINAL_ERASE_BINDING + + doc/reference/vte-sections.txt | 1 - + src/vtedeprecated.h | 11 ----------- + 2 files changed, 12 deletions(-) + +commit 6c204035f1798fda47d641172c98f6071a00bf02 +Author: Christian Persch +Date: 2011-05-02 21:16:45 +0200 + + widget: Remove deprecated vte_terminal_set_cursor_blinks + + doc/reference/vte-sections.txt | 1 - + src/vte.c | 15 --------------- + src/vtedeprecated.h | 2 -- + 3 files changed, 18 deletions(-) + +commit 0690e03a83f22e4d17814b9bbbd7b74dbc6df182 +Author: Christian Persch +Date: 2011-05-02 21:14:59 +0200 + + widget: Remove deprecated vte_terminal_[gs]et_pty + + Conflicts: + src/vte.c + + doc/reference/vte-sections.txt | 2 -- + src/vte.c | 82 ------------------------------------------ + src/vtedeprecated.h | 2 -- + 3 files changed, 86 deletions(-) + +commit 9ba542abb3e9e97da39fc975102dc3b6b88b7687 +Author: Christian Persch +Date: 2011-05-02 21:12:44 +0200 + + widget: Remove deprecated vte_terminal_fork_command + + doc/reference/vte-sections.txt | 1 - + src/pty.c | 67 ----------------------- + src/reflect.c | 20 ++++--- + src/vte.c | 121 ----------------------------------------- + src/vtedeprecated.h | 6 -- + src/vtepty-private.h | 8 --- + 6 files changed, 12 insertions(+), 211 deletions(-) + +commit d81edfe310786e322126fa4351c8542bfa5c7bac +Author: Christian Persch +Date: 2011-05-02 21:09:23 +0200 + + widget: Remove deprecated vte_terminal_forkpty + + Conflicts: + src/vteapp.c + + doc/reference/vte-sections.txt | 1 - + src/pty.c | 42 ----------------------------- + src/vte.c | 60 ------------------------------------------ + src/vteapp.c | 30 +++++++++++++-------- + src/vtedeprecated.h | 5 ---- + src/vtepty-private.h | 4 --- + 6 files changed, 19 insertions(+), 123 deletions(-) + +commit 64ed735c2d11f9fb226aec2d1895b68ae9940a95 +Author: Christian Persch +Date: 2011-05-02 20:59:01 +0200 + + widget: Remove deprecated vte_terminal_get_adjustment + + Conflicts: + src/vtedeprecated.h + + doc/reference/vte-sections.txt | 1 - + src/vte.c | 17 ----------------- + src/vtedeprecated.h | 2 -- + 3 files changed, 20 deletions(-) + +commit ac7f636d9ebbe7e95fabfec3529a964bec53c84e +Author: Christian Persch +Date: 2011-05-02 20:56:53 +0200 + + widget: Remove deprecated vte_terminal_get_padding + + doc/reference/vte-sections.txt | 1 - + src/vte.c | 28 ---------------------------- + src/vtedeprecated.h | 1 - + 3 files changed, 30 deletions(-) + +commit 6cfcf7c287ce8e2baecb9ecf51226561ee403c13 +Author: Christian Persch +Date: 2011-05-02 20:55:42 +0200 + + widget: Remove sealed char_{a,de}scent from public struct + + Conflicts: + src/vte.c + + src/vte-private.h | 2 ++ + src/vte.c | 12 ++++++------ + src/vte.h | 1 - + 3 files changed, 8 insertions(+), 7 deletions(-) + +commit 23c86953b60a3a8626ff0adaec6811a03788e3b9 +Author: Christian Persch +Date: 2011-05-02 20:50:51 +0200 + + widget: Remove deprecated vte_terminal_get_char_{a,de}scent + + doc/reference/vte-sections.txt | 2 -- + src/vte.c | 36 ------------------------------------ + src/vtedeprecated.h | 2 -- + 3 files changed, 40 deletions(-) + +commit 6103d1f2ebf42279965bf664e8cda1d3d8bf6411 +Author: Christian Persch +Date: 2011-05-02 20:49:15 +0200 + + widget: Remove deprecated vte_terminal_get_using_xft + + https://bugzilla.gnome.org/show_bug.cgi?id=560766 + + doc/reference/vte-sections.txt | 1 - + src/vte.c | 20 -------------------- + src/vtedeprecated.h | 1 - + 3 files changed, 22 deletions(-) + +commit de112fd8039ab6244e2cf53dbacdfc4a49504c48 +Author: Christian Persch +Date: 2011-05-02 20:47:11 +0200 + + Der Tod und das Datensichtgerät + + https://bugzilla.gnome.org/show_bug.cgi?id=112172 + + Conflicts: + src/reaper.c + src/reaper.h + + doc/reference/vte-docs.xml | 4 - + doc/reference/vte-sections.txt | 17 ---- + doc/reference/vte.types | 2 - + src/Makefile.am | 11 +- + src/reaper.c | 226 ----------------------------------------- + src/reaper.h | 75 -------------- + src/vte-private.h | 3 +- + src/vte.c | 52 ++++------ + 8 files changed, 21 insertions(+), 369 deletions(-) + +commit 19e2cbbe396ad4acdd3db65454fa39aa1bd9b6f5 +Author: Christian Persch +Date: 2011-05-02 20:35:57 +0200 + + pty: Remove deprecated _vte_pty_* functions + + Conflicts: + src/pty.h + + src/Makefile.am | 5 +- + src/pty.c | 213 -------------------------------------------------------- + src/pty.h | 52 -------------- + 3 files changed, 2 insertions(+), 268 deletions(-) + +commit 64399a47a776c6c4b02f8237d6c01b62e6387590 +Author: Christian Persch +Date: 2014-03-24 20:17:59 +0100 + + app: Fix compiler warnings + + src/vteapp.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 44af37273d064af18f2c5ac0f6d1c7f4db759b46 +Author: Christian Persch +Date: 2011-05-02 20:33:11 +0200 + + widget: Remove deprecated vteregex + + Only support GRegex now. + + Conflicts: + src/Makefile.am + src/vte.c + src/vteregex.c + src/vteregex.h + + doc/reference/Makefile.am | 1 - + doc/reference/vte-sections.txt | 1 - + src/Makefile.am | 2 - + src/vte-private.h | 23 +-- + src/vte.c | 314 +---------------------------------------- + src/vtedeprecated.h | 1 - + src/vteregex.c | 119 ---------------- + src/vteregex.h | 38 ----- + 8 files changed, 14 insertions(+), 485 deletions(-) + +commit f275e61df7deeb93bf47c99ce24a46a2ffdd559d +Author: Christian Persch +Date: 2014-03-24 19:57:42 +0100 + + ring: Fix compiler warnings + + src/ring.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit d6e16bc0b52350d7d9ea61826f3f4dddeb607cb0 +Author: Christian Persch +Date: 2014-03-24 19:26:29 +0100 + + build: API/ABI bump + + Makefile.am | 4 ++-- + configure.ac | 13 ++++--------- + doc/reference/Makefile.am | 4 ++-- + glade/vte.xml.in.in | 2 +- + src/Makefile.am | 35 +++++++++++++++++------------------ + vte.pc.in | 2 +- + 6 files changed, 27 insertions(+), 33 deletions(-) + +commit 86546336d6b2f0b9b5e17723c38f3d079fc1c215 +Author: Christian Persch +Date: 2014-03-24 19:05:52 +0100 + + build: Version bump + + configure.ac | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 2493a5ec5dba8c8b2255dc1b28cfbd6d6eaa1b01 +Merge: d5645871 94037b77 +Author: Christian Persch +Date: 2014-03-24 20:03:27 +0100 + + Merge remote-tracking branch 'origin/master' + +commit d56458713b657053cea8b09d49ef69d97585a0d6 +Author: Christian Persch +Date: 2014-03-24 15:00:50 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6a25ed8b232ece0145d7d6bcb305fc458ed0b417 (tag: 0.36.0) +Author: Christian Persch +Date: 2014-03-24 14:57:26 +0100 + + Version 0.36.0 + + NEWS | 5 +++++ + 1 file changed, 5 insertions(+) + +commit bc7676cacd71c117c4c7b6aeab4cac26f8225989 +Author: Egmont Koblinger +Date: 2014-03-18 16:10:58 +0100 + + doc: Add API index for highlight foreground color + + doc/reference/vte-sections.txt | 2 ++ + 1 file changed, 2 insertions(+) + +commit 96afeccdf6fa099af0e76f875df0ba75ffaf53ee +Author: Egmont Koblinger +Date: 2014-03-18 15:26:18 +0100 + + doc: Minor update to rewrap.txt + + doc/rewrap.txt | 35 ++++++++++++++++++----------------- + 1 file changed, 18 insertions(+), 17 deletions(-) + +commit cbdb21f740a9369f61d6dbfb48f87bce9c5c9ba4 +Author: Egmont Koblinger +Date: 2014-03-18 14:42:23 +0100 + + build: Do not hardcode /bin/bash + + https://bugzilla.gnome.org/show_bug.cgi?id=726604 + + perf/img.sh | 2 +- + perf/inc.sh | 2 +- + src/box_drawing_generate.sh | 2 +- + src/test-vte-sh.sh | 4 ++-- + 4 files changed, 5 insertions(+), 5 deletions(-) + +commit 749e3b1c12ad4047d2b5b7200132331bd6fe15b5 +Author: Christian Persch +Date: 2014-03-17 22:36:55 +0100 + + Post release version bump + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit e6e97b2ca4f11851d55d4a26f7645d5f38f53b7b (tag: 0.35.90) +Author: Christian Persch +Date: 2014-03-17 22:28:35 +0100 + + Version 0.35.90 + + NEWS | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit 56ab1baaa64f2a23f25450c8682b6693c9b0329a +Author: Egmont Koblinger +Date: 2014-03-17 21:59:14 +0100 + + widget: Nicer box drawing characters + + Fixes problems with the hollow box drawing characters. + + https://bugzilla.gnome.org/show_bug.cgi?id=709556 + + src/Makefile.am | 12 +- + src/box_drawing.txt | 768 ++++++++++++++++++++++++++++++++++++++++++++ + src/box_drawing_generate.sh | 70 ++++ + src/vte.c | 484 ++++++---------------------- + 4 files changed, 949 insertions(+), 385 deletions(-) + +commit 56090d8d95e51df47c59f9410416932cfd111cec +Author: Christian Persch +Date: 2014-03-17 21:59:03 +0100 + + build: Version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ebd86b75eea99a866405e0bc29eeefd75ba3fe09 +Author: Christian Persch +Date: 2014-03-17 19:51:12 +0100 + + build: Fix log domain + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d7e3749cdfee5d57d49bb508b05b8691b6799982 +Author: Egmont Koblinger +Date: 2014-03-17 14:39:51 +0100 + + widget: Do not intercept Ctrl+F1 + + https://bugzilla.gnome.org/show_bug.cgi?id=726438 + + src/vte.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 2856a4ee3e7bf4e1b9fcdcd934bd7349eec6a2f2 +Author: Egmont Koblinger +Date: 2014-03-17 14:23:13 +0100 + + perf: Add scripts to EXTRA_DIST + + perf/Makefile.am | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +commit 9f2a88cc03543c2c37a896309f61c333766647ee +Author: Egmont Koblinger +Date: 2014-03-16 15:53:19 +0100 + + build: Use consistent version check for smooth scroll + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0941913e97e436f262e9f711ad7516122c94b364 +Author: Egmont Koblinger +Date: 2014-03-16 15:53:03 +0100 + + build: Remove vte-gtk-compat + + src/Makefile.am | 1 - + src/vte-gtk-compat.h | 48 ----------------------------------------------- + src/vte.c | 53 ++++++++++++++++++++++++++++++---------------------- + src/vteaccess.c | 1 - + src/vtebg.c | 1 - + src/vtedraw.c | 2 +- + src/vtedraw.h | 3 +-- + 7 files changed, 33 insertions(+), 76 deletions(-) + +commit 1d1e56ccc3c8fc2b844e7c93e0471660a94928b1 +Author: Egmont Koblinger +Date: 2014-03-16 15:52:19 +0100 + + build: Clean up legacy signal creation leftovers + + src/vte.c | 496 +++++++++++++++++++++++++++++--------------------------------- + 1 file changed, 232 insertions(+), 264 deletions(-) + +commit b2f3b5a6eb5cae73bee1f116c6fd558f7314bfb4 +Author: Egmont Koblinger +Date: 2014-03-16 15:51:58 +0100 + + build: Clean up gdk keysym names + + src/iso2022.c | 192 ++++++++++++++------------- + src/keymap.c | 406 +++++++++++++++++++++++++++++----------------------------- + src/vte.c | 104 ++++++++------- + 3 files changed, 348 insertions(+), 354 deletions(-) + +commit 663cb18068c11502acd41ad6adaf94891868fd7e +Author: Egmont Koblinger +Date: 2014-03-16 15:51:03 +0100 + + build: Remove gtk2 leftover code + + src/iso2022.c | 5 -- + src/keymap.c | 5 -- + src/reflect.c | 8 -- + src/vte-gtk-compat.h | 32 -------- + src/vte-private.h | 4 - + src/vte.c | 210 +-------------------------------------------------- + src/vte.h | 63 ---------------- + src/vteapp.c | 15 +--- + src/vtebg.c | 5 -- + src/vtedeprecated.h | 2 - + 10 files changed, 3 insertions(+), 346 deletions(-) + +commit 9c9a0fcf80d6b55f4afb0de1ac474d3cb7b1b99c +Author: Egmont Koblinger +Date: 2014-03-15 15:27:16 +0100 + + emulation: Add support for OSC 19/119 (highlight fg color) and corresponding API + + https://bugzilla.gnome.org/show_bug.cgi?id=725974 + + src/vte.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++---- + src/vte.h | 4 +++ + src/vterowdata.h | 7 ++--- + src/vteseq-n.gperf | 6 ++--- + src/vteseq.c | 23 +++++++++++++++++ + 5 files changed, 104 insertions(+), 11 deletions(-) + +commit 3c915ee012c0d25b376be0ba4e0037b67f7beebe +Author: Egmont Koblinger +Date: 2014-03-15 15:22:51 +0100 + + emulation: Use more consistent and verbose names for special purpose colors + + https://bugzilla.gnome.org/show_bug.cgi?id=725974 + + src/vte.c | 72 ++++++++++++++++++++++++++++---------------------------- + src/vterowdata.h | 12 +++++----- + src/vteseq.c | 40 +++++++++++++++---------------- + 3 files changed, 62 insertions(+), 62 deletions(-) + +commit be8407dbc4c669cd5c00c9ab95ade40e3b94e46d +Author: Egmont Koblinger +Date: 2014-03-03 13:41:38 +0100 + + build: Fix many compiler warnings + + src/pty.c | 6 ------ + src/slowcat.c | 2 +- + src/vte.c | 51 +++++++++------------------------------------------ + src/vteaccess.c | 5 ----- + src/vteapp.c | 5 ----- + src/vteconv.c | 3 --- + src/vteseq.c | 8 ++------ + 7 files changed, 12 insertions(+), 68 deletions(-) + +commit e102da687242aa0820225e4fe47b84869229fb63 +Author: Michal Sojka +Date: 2014-03-03 11:50:38 +0100 + + prompt: Make zsh hook to precmd. + + Previously used chpwd hook caused the escape sequence to be printed when + it shouldn't be printed. For example, when user wanted to list files in + a directory with "(cd dir; find) > list.txt", list.txt contained not + only the files but also the VTE escape sequence. + + This patch changes the hook to precmd, which is invoked before + displaying prompt. This is the same "hook" that is used in bash. + + https://bugzilla.gnome.org/show_bug.cgi?id=724982 + + src/vte.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2af14ef99eb244e9fc84a80b4b64014d4299465a +Author: Christian Persch +Date: 2014-02-18 21:59:22 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ef5abe86eed6279be4928ac1650f022fd7f1ba89 (tag: 0.35.2) +Author: Christian Persch +Date: 2014-02-18 21:52:30 +0100 + + Version 0.35.2 + + NEWS | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 53bdd2569e943ebac2fce4f88064e3f4e529ed47 +Author: Egmont Koblinger +Date: 2014-02-12 22:14:04 +0100 + + widget: Maintain selection when rewrapping, take 3 + + https://bugzilla.gnome.org/show_bug.cgi?id=722635#c9 + + src/vte.c | 48 ++++++++++++++++++++++++++++++------------------ + 1 file changed, 30 insertions(+), 18 deletions(-) + +commit 3cf7c41308e1eb9e33986474232f94d0a221501a +Author: Egmont Koblinger +Date: 2014-01-24 02:05:40 +0100 + + widget: Fix selection's padding adjustment + + https://bugzilla.gnome.org/show_bug.cgi?id=722873 + + src/vte.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit 335872efdf8bdd40efceaf306fa25b7ba8ad5725 +Author: Egmont Koblinger +Date: 2014-01-24 01:34:18 +0100 + + widget: Maintain selection when rewrapping, take 2 + + https://bugzilla.gnome.org/show_bug.cgi?id=722635#c7 + + src/vte.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit 9ff56e238ec92b8982b6dacc456c2f313b548196 +Author: Egmont Koblinger +Date: 2014-01-24 01:00:35 +0100 + + widget: Maintain selection when rewrapping + + https://bugzilla.gnome.org/show_bug.cgi?id=722635 + + src/vte.c | 46 ++++++++++++++++++++++++++++------------------ + 1 file changed, 28 insertions(+), 18 deletions(-) + +commit ccfc082df82c10fbe91848de16ba8ac45dcd5ce1 +Author: Egmont Koblinger +Date: 2014-01-24 00:54:23 +0100 + + emulation: Make OSC response use the same terminator as the query + + https://bugzilla.gnome.org/show_bug.cgi?id=722446 + + src/caps.c | 44 +++++++++++++-------------- + src/vteseq-n.gperf | 33 +++++++++++++------- + src/vteseq.c | 89 ++++++++++++++++++++++++++++++++++++++++++------------ + 3 files changed, 113 insertions(+), 53 deletions(-) + +commit adb2aafe5d1eeca4f19d6c10b81f9ba18415ddcd +Author: Egmont Koblinger +Date: 2014-01-22 01:49:43 +0100 + + debug: Fix segfault + + src/vte.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +commit 1b8c6b1aac587b79476a60a5830385abc939430d +Author: Egmont Koblinger +Date: 2014-01-22 00:13:51 +0100 + + emulation: Add support for OSC 1?1[017] (fg, bg, highlight colors) + + https://bugzilla.gnome.org/show_bug.cgi?id=567444 + + src/caps.c | 34 +++++++++++++++++++++----- + src/osc | 6 +++++ + src/vteseq-n.gperf | 17 ++++++++++--- + src/vteseq.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++------- + 4 files changed, 110 insertions(+), 17 deletions(-) + +commit f957cd94c3057965bc8d74d0811252ff9dbb9894 +Author: Egmont Koblinger +Date: 2014-01-21 00:41:22 +0100 + + emulation: Add support for OSC 104 (reset colors) + + https://bugzilla.gnome.org/show_bug.cgi?id=640040 + + src/caps.c | 4 ++++ + src/osc | 2 ++ + src/vteseq-n.gperf | 1 + + src/vteseq.c | 26 ++++++++++++++++++++++++++ + 4 files changed, 33 insertions(+) + +commit b7c7417127521fbf6639ba78d5d32f1fe27a28c9 +Author: Kevin Goodsell +Date: 2014-01-21 00:39:38 +0100 + + emulation: Add support for OSC 112 (reset cursor color) + + https://bugzilla.gnome.org/show_bug.cgi?id=640040 + + src/caps.c | 2 ++ + src/osc | 1 + + src/vteseq-n.gperf | 1 + + src/vteseq.c | 7 +++++++ + 4 files changed, 11 insertions(+) + +commit c7a76a9f87bed3760f0922a7181d337c55dec121 +Author: Egmont Koblinger +Date: 2014-01-21 00:37:08 +0100 + + emulation: Refactor color palette handling + + https://bugzilla.gnome.org/show_bug.cgi?id=640040 + + src/vte-private.h | 23 ++++---- + src/vte.c | 159 ++++++++++++++++++++++-------------------------------- + src/vteseq.c | 18 ++++--- + 3 files changed, 87 insertions(+), 113 deletions(-) + +commit de31abd9d5eb101530f6e9096c6e930230cb1f6d +Author: Egmont Koblinger +Date: 2014-01-17 03:40:14 +0100 + + widget: Don't try to allocate arbitrary amount of memory. + + src/vte.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 3dead44f0ef831bf54cbcdf86d59c104c88f2db0 +Author: Egmont Koblinger +Date: 2014-01-17 03:36:36 +0100 + + widget: Fix off-by-one in allowed palette size. + + src/vte.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 6b524d4aad8665f36ce106304cc6d9e7d14dcf8c +Author: Christian Persch +Date: 2014-01-13 20:28:26 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ded1bd783d50601b4ca524724b32f358c86ae289 (tag: 0.35.1) +Author: Egmont Koblinger +Date: 2014-01-13 20:07:25 +0100 + + Version 0.35.1 + + NEWS | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit b1a3c3603ce919788e59503ff77ba57116315a76 +Author: Egmont Koblinger +Date: 2014-01-13 18:15:23 +0100 + + emulation: Fix standout handling (typo introduced by true color support) + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2b4f4f1eea9dd87e27142ee02c973ce7ae9afd3c +Author: Egmont Koblinger +Date: 2014-01-13 17:42:49 +0100 + + Fix performance regression with only one active terminal widget. + + https://bugzilla.gnome.org/show_bug.cgi?id=721944 + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b8a021330c0375ef6411f9abf2e4f717d0a5fb1d +Author: Egmont Koblinger +Date: 2014-01-13 17:29:26 +0100 + + Allow ":" as subparameter delimiter in SGR color sequences. + + https://bugzilla.gnome.org/show_bug.cgi?id=685759 + + src/table.c | 38 ++++++++++++--- + src/vteseq.c | 157 +++++++++++++++++++++++++++++++++++++++++------------------ + 2 files changed, 140 insertions(+), 55 deletions(-) + +commit a5fe6998b9fdcc9892a3dc8f53e70a5cf273d059 +Author: Egmont Koblinger +Date: 2014-01-10 02:44:39 +0100 + + emulation: Restore colors upon terminal reset. + + https://bugzilla.gnome.org/show_bug.cgi?id=672210 + + src/vte.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit c5a32b491afe783b02eec49b1f02241163ba4367 +Author: Egmont Koblinger +Date: 2014-01-09 00:12:33 +0100 + + emulation: Support 16 million colors + + https://bugzilla.gnome.org/show_bug.cgi?id=704449 + + perf/img.sh | 71 +++++++++++++++++++++++++ + src/vte-private.h | 36 +++++++++---- + src/vte.c | 155 ++++++++++++++++++++++++++++++------------------------ + src/vterowdata.h | 47 ++++++++++------- + src/vteseq.c | 151 +++++++++++++++++++++------------------------------- + 5 files changed, 271 insertions(+), 189 deletions(-) + +commit 5cf31fcc7b12073e5ab4f49dd9c2477627547e1a +Author: Egmont Koblinger +Date: 2014-01-08 23:43:02 +0100 + + license: Update to LGPL 2.1. Update FSF postal address. + + https://bugzilla.gnome.org/show_bug.cgi?id=619891 + https://bugzilla.gnome.org/show_bug.cgi?id=721522 + + COPYING | 206 +++++++++++++++++++++++++--------------------- + acinclude.m4 | 10 +-- + gnome-pty-helper/COPYING | 207 ++++++++++++++++++++++++++--------------------- + src/buffer.h | 18 ++--- + src/caps.c | 20 ++--- + src/caps.h | 20 ++--- + src/debug.c | 20 ++--- + src/debug.h | 20 ++--- + src/dumpkeys.c | 20 ++--- + src/interpret.c | 20 ++--- + src/iso2022.c | 20 ++--- + src/iso2022.h | 20 ++--- + src/keymap.c | 20 ++--- + src/keymap.h | 20 ++--- + src/matcher.c | 20 ++--- + src/matcher.h | 20 ++--- + src/mev.c | 20 ++--- + src/pty.c | 20 ++--- + src/pty.h | 20 ++--- + src/reaper.c | 20 ++--- + src/reaper.h | 20 ++--- + src/reflect.c | 20 ++--- + src/ring.c | 20 ++--- + src/ring.h | 20 ++--- + src/slowcat.c | 20 ++--- + src/table.c | 20 ++--- + src/table.h | 20 ++--- + src/test-vte-sh.sh | 14 ++-- + src/trie.c | 20 ++--- + src/trie.h | 20 ++--- + src/vte-gtk-compat.h | 22 ++--- + src/vte-private.h | 20 ++--- + src/vte.c | 20 ++--- + src/vte.h | 20 ++--- + src/vte.sh | 15 ++-- + src/vteaccess.c | 20 ++--- + src/vteaccess.h | 20 ++--- + src/vteapp.c | 20 ++--- + src/vtebg.c | 20 ++--- + src/vtebg.h | 20 ++--- + src/vteconv.c | 20 ++--- + src/vteconv.h | 20 ++--- + src/vtedeprecated.h | 20 ++--- + src/vtedraw.c | 20 ++--- + src/vtedraw.h | 20 ++--- + src/vteint.h | 20 ++--- + src/vtepty-private.h | 16 ++-- + src/vtepty.h | 16 ++-- + src/vteregex.c | 20 ++--- + src/vteregex.h | 20 ++--- + src/vterowdata.c | 20 ++--- + src/vterowdata.h | 20 ++--- + src/vteseq.c | 20 ++--- + src/vtestream-base.h | 20 ++--- + src/vtestream-file.h | 20 ++--- + src/vtestream.c | 20 ++--- + src/vtestream.h | 20 ++--- + src/vtetc.c | 20 ++--- + src/vtetc.h | 20 ++--- + src/vtetree.c | 20 ++--- + src/vtetree.h | 20 ++--- + src/vteunistr.c | 20 ++--- + src/vteunistr.h | 20 ++--- + src/vteutils.c | 20 ++--- + src/vteutils.h | 20 ++--- + src/vteversion.h.in | 20 ++--- + src/xticker.c | 20 ++--- + 67 files changed, 860 insertions(+), 824 deletions(-) + +commit a118544044e064ea1d3f36e959d961845ec9c317 +Author: Egmont Koblinger +Date: 2014-01-08 23:38:24 +0100 + + Emulation: Emit sequences for Shift+PageUp and friends on alternate screen. + + https://bugzilla.gnome.org/show_bug.cgi?id=643233 + + src/vte.c | 18 ++++++++++++------ + 1 file changed, 12 insertions(+), 6 deletions(-) + +commit 67e9cf6fe71a9dd65592e5e587b6f48ae5879ea7 +Author: Egmont Koblinger +Date: 2014-01-07 20:23:17 +0100 + + drawing: Make the cursor over a tab character only a single cell wide + + https://bugzilla.gnome.org/show_bug.cgi?id=691972 + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bda961d71e34bc25f553b529f74af83e3fe04ce3 +Author: Egmont Koblinger +Date: 2014-01-07 20:18:39 +0100 + + doc: Add ambiguous.txt to EXTRA_DIST + + doc/Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +commit f6cc6726745c3a4f79ba70152d0867dd3bfc537d +Author: Paul Bolle +Date: 2014-01-07 20:02:11 +0100 + + drawing: Make underline cursor's height equal the i-beam's width + + https://bugzilla.gnome.org/show_bug.cgi?id=586950 + + src/vte.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit f7b72a59e1cef353c9b287dbf030c312177e4e16 +Author: Egmont Koblinger +Date: 2014-01-07 19:49:21 +0100 + + Emulation: Fix escape sequence of Ctrl+Alt+Space + + https://bugzilla.gnome.org/show_bug.cgi?id=710349 + + src/keymap.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 551bbddae4f7e476e9fd77c9b5908b058d624b3b +Author: Egmont Koblinger +Date: 2014-01-07 19:47:13 +0100 + + Emulation: Fix escape sequences of Begin (numpad 5) with modifiers + + https://bugzilla.gnome.org/show_bug.cgi?id=600659 + + src/keymap.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 3db0f20fc475c5f82db9de4c7a5f6feb4f9130d8 +Author: Egmont Koblinger +Date: 2014-01-07 19:45:54 +0100 + + Emulation: Fix escape sequences of Home and End, with and without modifiers + + https://bugzilla.gnome.org/show_bug.cgi?id=600659 + + src/keymap.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit e0aafaaccf11696939e35b891cad5d43663fabf5 +Author: Egmont Koblinger +Date: 2014-01-07 19:44:36 +0100 + + Emulation: Fix escape sequences of numpad math operators with modifiers + + https://bugzilla.gnome.org/show_bug.cgi?id=600659 + + src/keymap.c | 39 ++++++++++++++++++++++++++------------- + 1 file changed, 26 insertions(+), 13 deletions(-) + +commit f582d097c687daec99182844df744cfcfa60f7ec +Author: Egmont Koblinger +Date: 2014-01-07 19:43:19 +0100 + + Emulation: Fix escape sequences of F1-F4 with modifiers + + https://bugzilla.gnome.org/show_bug.cgi?id=600659 + + src/keymap.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit 01cbea907972a8676b0b1065d59ee247e5cb253f +Author: Egmont Koblinger +Date: 2014-01-07 19:41:23 +0100 + + Mention rewrap in NEWS + + NEWS | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 2e4d2814140cbeb6267871e6b66f9571e7d5b8c7 +Author: Egmont Koblinger +Date: 2014-01-07 19:35:56 +0100 + + iconv: Don't drop incomplete UTF-8 before control characters + + https://bugzilla.gnome.org/show_bug.cgi?id=720977 + + src/iso2022.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +commit c67472e1ee35e2cd8fae7c511d20af84832e73bd +Author: Egmont Koblinger +Date: 2013-12-25 19:36:00 +0100 + + iconv: UTF-8 decoding cleanup + + https://bugzilla.gnome.org/show_bug.cgi?id=720977 + + src/vteconv.c | 27 +++------------------------ + 1 file changed, 3 insertions(+), 24 deletions(-) + +commit 8f4a5533586c12d46169cf7e184c9ade28f713f7 +Author: Christian Persch +Date: 2013-12-20 21:48:47 +0100 + + doc: Remove ancient copy of xterm sequences doc + + The master copy in xterm is much more expansive and up to date. + + doc/Makefile.am | 7 - + doc/ctlseqs.ms | 1647 ------------------------------------------------------- + 2 files changed, 1654 deletions(-) + +commit a87c4ee534191f6f128381555e3e975daec8a41b +Author: Christian Persch +Date: 2013-12-20 21:48:21 +0100 + + doc: Add rewrap.txt to EXTRA_DIST + + doc/Makefile.am | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit a6a370872c592db2e1c1166a005688d71db3b4c0 +Author: Egmont Koblinger +Date: 2013-12-16 22:23:15 +0100 + + widget: Add pref to control rewrapping on resize + + https://bugzilla.gnome.org/show_bug.cgi?id=336238 + + doc/reference/vte-sections.txt | 2 ++ + src/vte-private.h | 1 + + src/vte.c | 70 ++++++++++++++++++++++++++++++++++++++++-- + src/vte.h | 2 ++ + src/vteapp.c | 9 +++++- + 5 files changed, 81 insertions(+), 3 deletions(-) + +commit 01e244183b7d8c5b3ef2a80546fe82b314a5883a +Author: Christian Persch +Date: 2013-12-16 22:19:46 +0100 + + docs: Add API index for symbols new in 0.36 + + doc/reference/vte-docs.xml | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 20ac1c5b0306f6d6e8d2a87c61d8c20d782b6c12 +Author: Christian Persch +Date: 2013-12-01 18:05:04 +0100 + + emulation: Fix function key mode setting + + These are boolean values, not pointers! + + src/vteseq.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit f231c86e2aedb1bc51a166a18fb6f372120ab3fb +Author: Christian Persch +Date: 2013-12-01 18:02:30 +0100 + + emulation: Make DECSET handler struct static + + By storing just the offsets, we can make the struct static and const. + + src/vteseq.c | 255 ++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 137 insertions(+), 118 deletions(-) + +commit 6ff4d0936ccc819b610f80bd12cb12bbcfcc2e6b +Author: Christian Persch +Date: 2013-12-01 14:53:09 +0100 + + emulation: Improve DECSET handler + + Use bsearch instead of a linear search. + + src/vteseq.c | 108 +++++++++++++++++++++++++++++++++-------------------------- + 1 file changed, 60 insertions(+), 48 deletions(-) + +commit 08c2ac7a4f9a9f89a268b1c55cb0b2b78be26c38 +Author: Christian Persch +Date: 2013-12-01 13:18:04 +0100 + + emulation: Remove duplicate sequence entry + + For commit b38428322ee2c99b9ef5da9208533b817fcf94fe. + + src/vteseq.c | 1 - + 1 file changed, 1 deletion(-) + +commit 740c4d9ef36ba59c7330bc74b91ee85d55da6623 +Author: Christian Persch +Date: 2013-11-18 21:59:02 +0100 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 21ef2c5b3e9c50ef27149f4ccee08d9986db3c60 (tag: 0.35.0) +Author: Christian Persch +Date: 2013-11-18 21:43:51 +0100 + + Version 0.35.0 + + NEWS | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit b38428322ee2c99b9ef5da9208533b817fcf94fe +Author: Michele Baldessari +Date: 2013-11-18 21:26:45 +0100 + + emulation: Support DECCOLM mode to switch between 80 and 132 columns + + https://bugzilla.gnome.org/show_bug.cgi?id=4993 + + src/vte-private.h | 1 + + src/vte.c | 3 +++ + src/vteseq.c | 40 ++++++++++++++++++++++++---------------- + 3 files changed, 28 insertions(+), 16 deletions(-) + +commit a2a819591dfbbb750730caa2fd8b32e87b521fb6 +Author: Egmont Koblinger +Date: 2013-10-26 14:49:35 +0200 + + emulation: Reset attributes when entering alternate screen + + https://bugzilla.gnome.org/show_bug.cgi?id=709930 + + src/vteseq.c | 1 + + 1 file changed, 1 insertion(+) + +commit b04ccce0ba4c29a7f09c407de1f601a297b26ea6 +Author: Egmont Koblinger +Date: 2013-10-24 15:18:16 +0200 + + emulation: Fix ESC E at the bottom of the screen + + ESC E needs to scroll, if necessary. + + https://bugzilla.gnome.org/show_bug.cgi?id=693013 + + src/vteseq.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 4358250397456b033c88241e71ec8c3b96f0f339 +Author: Egmont Koblinger +Date: 2013-10-23 00:45:57 +0200 + + emulation: Avoid lines filled up with spaces in the restricted scrolling area + + https://bugzilla.gnome.org/show_bug.cgi?id=336238#c88 + + src/vte.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 01380dae776a560c61aecb95d06be5bf8ccae5f4 +Author: Egmont Koblinger +Date: 2013-10-23 00:35:30 +0200 + + widget,emulation: Rewrap the lines when the window is resized + + https://bugzilla.gnome.org/show_bug.cgi?id=336238 + + doc/rewrap.txt | 447 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/ring.c | 426 ++++++++++++++++++++++++++++++++++++++++++++++++++- + src/ring.h | 5 + + src/vte-private.h | 4 - + src/vte.c | 104 +++++++++---- + src/vteseq.c | 4 +- + 6 files changed, 951 insertions(+), 39 deletions(-) + +commit c004921c26eec0183ef2f07ee76803efb3d9eeb1 +Author: Egmont Koblinger +Date: 2013-10-23 00:27:26 +0200 + + ring: Fix stream reset + + Change suspicios code: resetting row_stream to 0 is fishy, I really do think + it needs to be set to ring->writable. + + https://bugzilla.gnome.org/show_bug.cgi?id=336238#c75 + + src/ring.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 7a201c651251b483a026eae60c1f48cc27da7abe +Author: Egmont Koblinger +Date: 2013-10-23 00:22:42 +0200 + + ring,stream: Refactor the interface between the ring and the stream + + Refactor and simplify the interface between ring and vte-stream; this is + required for the forthcoming rewrapping feature. Paging is now a concept + private to vte-stream. Instead of telling when to turn page, the ring now + advances the tail of the streams, and vte-stream does paging on its own + based on this information. + + https://bugzilla.gnome.org/show_bug.cgi?id=336238#c74 + + src/ring.c | 36 ++++++++++++------------------------ + src/ring.h | 1 - + src/vtestream-base.h | 14 ++++++-------- + src/vtestream-file.h | 18 ++++++++++-------- + src/vtestream.h | 9 ++------- + 5 files changed, 30 insertions(+), 48 deletions(-) + +commit 5fc57fc8e2feb0cd8e99f97ca4b25fee5eba2f06 +Author: Egmont Koblinger +Date: 2013-10-23 00:04:26 +0200 + + widget: Remove obsolete code + + Remove legacy "Smooth (Slow) Scroll (DECSCLM)" code leftover. + + https://bugzilla.gnome.org/show_bug.cgi?id=710426#c4 + + src/vte-private.h | 1 - + src/vte.c | 2 -- + src/vteseq.c | 5 ----- + 3 files changed, 8 deletions(-) + +commit 7efb04fbcec9a39512847204d75350fb0b119c9f +Author: Egmont Koblinger +Date: 2013-10-23 00:02:00 +0200 + + widget: Support for smooth scrolling + + https://bugzilla.gnome.org/show_bug.cgi?id=710426 + + src/vte-private.h | 1 + + src/vte.c | 86 +++++++++++++++++++++++++++++++++---------------------- + src/vteseq.c | 22 ++++++++++---- + 3 files changed, 69 insertions(+), 40 deletions(-) + +commit bd03247ac0be93a9666e3091b9c12b6ad2ae74e0 +Author: Egmont Koblinger +Date: 2013-10-22 23:59:47 +0200 + + emulation: Fix background when bottom row is scrolled upwards + + Make scrolling the bottom row upwards not fill this row with the + background color. Only the new empty bottom line should be filled. + + To reproduce, run + + $ echo -e '\e['$LINES'H\e[43mBottom row'; sleep 100 + + When the row containig the text "Bottom row" gets scrolled up by 1, it was + filled with the background color in vte, but not in xterm. + + https://bugzilla.gnome.org/show_bug.cgi?id=710486 + + src/vte.c | 7 ------- + 1 file changed, 7 deletions(-) + +commit bba3a71948daea9f95e6fdf1be11ed2a65dddf5b +Author: Egmont Koblinger +Date: 2013-10-22 23:58:40 +0200 + + emulation: Fix the scrollbar position with restricted scrolling + + To reproduce, produce at least a screenful of text so that the scrollbar is + active. Then enable restricting scrolling, with the upper bound being the + topmost row, e.g. echo -e '\e[1;15r'. Now produce more output so that the + cursor hits the boundary at the 15th row and the content starts scrolling. + The scrollbar starts wandering upwards, though it should stay at the bottom. + When trying to scroll by Shift+PageUp or by dragging the scrollbar, suddenly + everything jumps back to normal. + + https://bugzilla.gnome.org/show_bug.cgi?id=710488 + + src/vte.c | 1 - + 1 file changed, 1 deletion(-) + +commit 8c65377993b110d124cbb8503110439b633ea39a +Author: Egmont Koblinger +Date: 2013-10-22 23:57:24 +0200 + + emulation: Reset restricted scrolling on window resize + + Xterm disables restricted scrolling mode on window resize. This pretty much + makes sense, since we have no clue how the application wishes to continue + restricting the scrolling (counting the number of lines from the top or from + the bottom). + + https://bugzilla.gnome.org/show_bug.cgi?id=710484 + + src/vte.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 98b54527c802620a5951a615fe6ae21ffc19a171 +Author: Egmont Koblinger +Date: 2013-10-22 23:56:05 +0200 + + emulation: Fix restricted scrolling with a short ring + + Fixes setting restrict scrolling with the upper bound being row 1 not working. + To test, run "echo -e '\e[1;15r'" immediately before the terminal starts + scrolling; before this patch this had no effect. + + https://bugzilla.gnome.org/show_bug.cgi?id=710483 + + src/vteseq.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +commit 2f4378d6a25dc4985efddcacf0b298fbc10b5c7a +Author: Egmont Koblinger +Date: 2013-10-22 23:54:24 +0200 + + Don't fake cursor keys on normal screen with restricted scrolling. + + https://bugzilla.gnome.org/show_bug.cgi?id=710481 + + src/vte.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit 105f2c5ffcdc251ddaa7e5b06287d3d31b6504fe +Author: Egmont Koblinger +Date: 2013-10-22 23:39:12 +0200 + + emulation: Allow the terminal application to consume right button click events + + This is necessary for gnome-terminal to deliver a right click to applications + which are interested in mouse events, and pop up the menu otherwise. + + https://bugzilla.gnome.org/show_bug.cgi?id=13299 + + src/vte.c | 55 ++++++++++++++++++++++++++++++++++++++----------------- + 1 file changed, 38 insertions(+), 17 deletions(-) + +commit 3d22a006b6d72dccae6083b3c485c8cdaca76d29 +Author: Egmont Koblinger +Date: 2013-10-22 23:37:50 +0200 + + widget,emulation: Separate application palette from terminal palette + + Make colors set by escape sequences have higher precedence than those set via + API calls. + + https://bugzilla.gnome.org/show_bug.cgi?id=705985 + + src/vte-private.h | 8 +++++- + src/vte.c | 73 ++++++++++++++++++++++++++++++++++++++++++------------- + src/vteseq.c | 4 +-- + 3 files changed, 65 insertions(+), 20 deletions(-) + +commit 88e8e89560a62d0981ce2b18974a230d0a07dbdd +Author: Micah Cowan +Date: 2013-10-22 23:30:43 +0200 + + widget: Fix invalidation region + + When the sequence handler moves the cursor into the restricted scrolling region, + the bbox needs to be reset, too. + Fixes glitches with interspersing writes to the bottom line with scrolls of the + upper region, and also fixes missing screen redraws when using mosh. + + https://bugzilla.gnome.org/show_bug.cgi?id=542087 + https://bugzilla.gnome.org/show_bug.cgi?id=686097 + + src/vte.c | 28 +++++++++++++++++++++++----- + 1 file changed, 23 insertions(+), 5 deletions(-) + +commit d9421112ee69180b18b7f342d7acc7b1bc1b73c3 +Author: Christian Persch +Date: 2013-11-16 21:29:20 +0100 + + widget: Ignore our own deprecation + + src/vte.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 289b9fc98442b4bf5b58b0d2f2097072a0cbf9bd +Author: Christian Persch +Date: 2013-11-16 21:27:38 +0100 + + build: Suppress glib and gtk deprecation warnings + + src/Makefile.am | 21 +++++++++++++++++---- + 1 file changed, 17 insertions(+), 4 deletions(-) + +commit 513c60e23e4cb3cdd4903936073993e9eae4a49f +Author: Christian Persch +Date: 2013-10-20 22:30:00 +0200 + + build: Ignore deprecations + + It's just cluttering the output too much, and all of these are already fixed + on vte-next. For this branch, just ignore the deprecations. + + src/Makefile.am | 2 ++ + src/vte.c | 12 ++++++++++++ + src/vteapp.c | 10 +++++++++- + 3 files changed, 23 insertions(+), 1 deletion(-) + +commit 14022429be328c448fa9b515c4f29f0432289e83 +Author: Christian Persch +Date: 2013-10-20 22:13:50 +0200 + + vteapp: Default to infinite scrollback + + src/vteapp.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit defec8201afb6bd86d6d7c5f6004347278a26ac6 +Author: Christian Persch +Date: 2013-10-20 22:09:27 +0200 + + widget: Increase default scrollback + + src/vte-private.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b3c49c5d1f2d939b37bbcea4b1793cb7d224b6d9 +Author: Egmont Koblinger +Date: 2013-10-19 22:56:59 +0200 + + drawing: Fix drawing of the n-eights block characters + + Make the n-eights block characters align with each other and the half + block characters as well. + + https://bugzilla.gnome.org/show_bug.cgi?id=709584 + + src/vte.c | 57 +++++++++++++++++++++++++++------------------------------ + 1 file changed, 27 insertions(+), 30 deletions(-) + +commit 28eeba30fffcac7720b9e0d349887780dced2dc9 +Author: Christian Persch +Date: 2013-10-17 22:54:51 +0200 + + drawing: Fix drawing of U+2594 to align with U+2587 + + The upper ⅛ block was misaligned with the lower ⅞ block. + + This also fixes part of https://bugzilla.gnome.org/show_bug.cgi?id=709584 + + src/vte.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 0e24dccc8df3cc90beec14a163b66c984e9cd6e7 +Author: Egmont Koblinger +Date: 2013-10-17 22:12:26 +0200 + + drawing: doc: Add block characters to test file + + doc/boxes.txt | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit df01bb02c3ec02f1b35bc577db77772c2f591b23 +Author: Christian Persch +Date: 2013-10-17 21:03:36 +0200 + + drawing: Make round box drawing characters nicer + + Replace the Bézier curves with circle arcs plus straight segments. + + Based on a patch by Egmont Koblinger. + + https://bugzilla.gnome.org/show_bug.cgi?id=709692 + + src/vte.c | 34 +++++++++++++++++++++++++++++----- + 1 file changed, 29 insertions(+), 5 deletions(-) + +commit ebb0b00f08b1ffbc0c6f261c75432cb46e865223 +Author: Antoine Jacoutot +Date: 2013-10-15 13:21:15 +0200 + + portability: protect O_NOATIME + + The O_NOATIME open() flag is only available on Linux, so unbreak building + by protecting it with an ifdef. + + src/vteutils.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 67a6928092d0768a76280be6d0384d41b65c86b2 +Author: Christian Persch +Date: 2013-10-14 21:24:20 +0200 + + Post branch version bump + + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 94123d6c2d1401a4d383cb0d990309bb154b243c +Author: Christian Persch +Date: 2013-10-14 21:16:52 +0200 + + docs: Fix build + + Remove (skip) annotation which breaks check-doc-syntax check; the symbol + is already hidden from the introspection scanner anyway. + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7c3387669f915d21bfc5f228adb9480c0db2e493 +Author: Christian Persch +Date: 2013-10-14 21:06:17 +0200 + + Version 0.34.9 + + NEWS | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit 9384685e72cebff9389a331f225dd18333878d74 +Author: Egmont Koblinger +Date: 2013-10-13 19:59:02 +0200 + + docs: Improve graphic characters test file + + Make it contain all box drawing and block element characters. + + doc/boxes.txt | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 68 insertions(+) + +commit 4e2f4a175b8cf44621832db1cb3d55f48145e272 +Author: Christian Persch +Date: 2013-10-12 12:14:09 +0200 + + utils: Remove unneeded define + + This part of the code is linux only anyway. + + src/vte.c | 4 ++-- + src/vteutils.c | 6 +----- + 2 files changed, 3 insertions(+), 7 deletions(-) + +commit 9cec9a3c871c0e52058d52dc8bb7d3ec03a48305 +Author: Victor Ibragimov +Date: 2013-10-10 17:03:24 +0500 + + Tajik translation added + + po/LINGUAS | 1 + + po/tg.po | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 88 insertions(+) + +commit 94037b77990f1dc957b7bc14e9b1643344d7797e +Author: Victor Ibragimov +Date: 2013-10-10 17:01:53 +0500 + + Tajik translation updated + + po/tg.po | 63 +++++++++++++++++++++++++++++++++------------------------------ + 1 file changed, 33 insertions(+), 30 deletions(-) + +commit 9c9f1451f37864f18e711c348f6335a22e7c4c4d +Author: Christian Persch +Date: 2013-10-03 14:34:49 +0200 + + prompt: Set LC_ALL instead of LANG + + LC_ALL and LC_* override LANG, so if the user has any of them set, + __vte_urlencode would give the wrong output. + + https://bugzilla.gnome.org/show_bug.cgi?id=709354 + + src/vte.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9f8c1b88dcd880c2d9e78c93521ee755560a9275 +Author: Christian Persch +Date: 2013-09-30 23:00:09 +0200 + + emulation: Add support for DEC 1007 to set the alternate scroll mode + + By default, the mouse wheel sends cursor up/down keycodes in the + alternate screen. This adds an escape sequence (DEC 1007) that allows + turning this off (and on again). + + For compatibility with ubuntu's ******** patched vte, also add a + (deprecated, skip) public API that has the expected name but does nothing. + + Based on patches from ubuntu, and Egmont Koblinger. + + https://bugzilla.gnome.org/show_bug.cgi?id=518405 + https://bugzilla.gnome.org/show_bug.cgi?id=709060 + + src/vte-private.h | 1 + + src/vte.c | 24 ++++++++++++++++++++++-- + src/vtedeprecated.h | 3 +++ + src/vteseq.c | 5 +++++ + 4 files changed, 31 insertions(+), 2 deletions(-) + +commit ed5adb65a132b1c0e5054618fc989f76955a7e00 +Author: Behdad Esfahbod +Date: 2013-09-30 00:25:14 -0400 + + [stream] Use unlocked stdio when available + + configure.ac | 2 +- + src/vtestream-file.h | 7 ++++++- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit b959b86bdb5759152328ff1b99ac956ba4189a77 +Author: Behdad Esfahbod +Date: 2013-09-29 21:32:51 -0400 + + [stream] Add a stdio-based buffered implementation + + Should be fairly solid, though more testing will help. + The buffering in stdio makes most of the syscalls go away. + Most remaining are the lseek() syscalls caused by fseek() + calls for when moving backward in the buffer. I think + it's a bug in stdio to make those syscalls when the result + is cached anyway. Anyway, this is a huge improvement + already, specially when reading the buffer forward. + + src/vtestream-file.h | 177 +++++++++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 166 insertions(+), 11 deletions(-) + +commit f690a497fe8c1a5f1adcac193674793da58b245f +Author: Behdad Esfahbod +Date: 2013-09-29 20:48:40 -0400 + + [stream] More fixups + + Towards an abstract file descriptor. + + src/vtestream-file.h | 100 +++++++++++++++++++++++++++++---------------------- + 1 file changed, 57 insertions(+), 43 deletions(-) + +commit d17e4ba45e9b45aec6852475285702f63e241787 +Author: Behdad Esfahbod +Date: 2013-09-29 20:48:40 -0400 + + [stream] More fixups + + Towards an abstract file descriptor. + + src/vtestream-file.h | 70 +++++++++++++++++++++++++++++++++++++++------------- + 1 file changed, 53 insertions(+), 17 deletions(-) + +commit 272b7f42ccdb93517e06a0c8e832531fffa8714c +Author: Behdad Esfahbod +Date: 2013-09-29 20:38:49 -0400 + + [stream] Remove unused includes + + src/vtestream-file.h | 4 ---- + 1 file changed, 4 deletions(-) + +commit cf0c865523ea7cc6f663533d9d15cb2b6060b12a +Author: Behdad Esfahbod +Date: 2013-09-29 20:37:20 -0400 + + [stream] Finish off commit 2cf872c90d85163f297e3a0fd56866a29849e0bf + + src/vtestream-file.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 488d7a2d37ba66fbf7483a1ac7b33ee03dfdfe3f +Author: Behdad Esfahbod +Date: 2013-09-29 20:31:33 -0400 + + Bug 676075 - Incorrect scrollbar position after the "less" command + + Patch from Egmont Koblinger. + + src/vte.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 2a44325fb611d76b22ffe49722e38440a3a0e480 +Author: Behdad Esfahbod +Date: 2013-09-29 20:17:18 -0400 + + [stream] Fix warnings + + src/vtestream-base.h | 2 +- + src/vtestream-file.h | 5 ++--- + 2 files changed, 3 insertions(+), 4 deletions(-) + +commit 2cf872c90d85163f297e3a0fd56866a29849e0bf +Author: Behdad Esfahbod +Date: 2013-09-29 20:13:45 -0400 + + [stream] Use -1, not 0, as "not opened yet" + + As suggested by ChPe. + + src/vtestream-file.h | 9 +++++---- + src/vteutils.c | 9 --------- + 2 files changed, 5 insertions(+), 13 deletions(-) + +commit 73e10d9bcf414696258dbf10245a111985311b9a +Author: Behdad Esfahbod +Date: 2013-09-29 19:54:39 -0400 + + [stream] Remove write_contents + + The ring will now read the stream contents and write it out itself. + Makes stream implementation(s) easier. + + src/ring.c | 34 +++++++++++++++++++++++++++------- + src/vtestream-base.h | 13 ------------- + src/vtestream-file.h | 38 -------------------------------------- + src/vtestream.h | 4 ---- + 4 files changed, 27 insertions(+), 62 deletions(-) + +commit 480e1ae1cb9e343663896a19df31060f3bffb7b5 +Author: Behdad Esfahbod +Date: 2013-09-29 19:39:00 -0400 + + [stream] Add API to get start-of-page offsets + + For previous behavior of the _vte_stream_head() api, add + index=0 to the new function. + + src/ring.c | 8 ++++---- + src/vtestream-base.h | 8 +++++--- + src/vtestream-file.h | 4 ++-- + src/vtestream.h | 7 ++++++- + 4 files changed, 17 insertions(+), 10 deletions(-) + +commit 5ad51c95557f4e953af066b551bbd9b295c88df4 +Author: Behdad Esfahbod +Date: 2013-09-29 16:25:48 -0400 + + Part of Bug 646098 - vte uses too many file descriptors + + Patch from Egmont Koblinger, from comment 13. + + src/ring.c | 37 ++++++++++++++++++++++++++++++------- + src/ring.h | 4 +++- + src/vte.c | 3 +++ + 3 files changed, 36 insertions(+), 8 deletions(-) + +commit 6b022a603c0c582a3673e0f883366532effc784b +Author: Behdad Esfahbod +Date: 2013-09-29 15:58:44 -0400 + + Bug 415277 - Garbage displayed after resizing whilst using an alternate screen + + Patch from Egmont Koblinger. + + src/vte.c | 140 +++++++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 80 insertions(+), 60 deletions(-) + +commit c80fe16c3019eeb0686023b2968199e4d84a2676 +Author: Christian Persch +Date: 2013-09-28 11:38:49 +0200 + + stream: file: Use O_TMPFILE when available + + https://bugzilla.gnome.org/show_bug.cgi?id=704705 + + src/Makefile.am | 2 ++ + src/vtestream-file.h | 17 ++++------- + src/vteutils.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vteutils.h | 30 ++++++++++++++++++ + 4 files changed, 124 insertions(+), 11 deletions(-) + +commit b9ea4ed01269484b544ac130c2c0cd1223b08def +Author: Kristjan SCHMIDT +Date: 2013-09-28 13:47:03 +0200 + + Updated Esperanto translation + + po/eo.po | 55 ++++++++++++++++++++++++++++--------------------------- + 1 file changed, 28 insertions(+), 27 deletions(-) + +commit a43839c166da7cc0a89bd7eb0b78b991bdff5471 +Author: Behdad Esfahbod +Date: 2013-09-27 18:18:34 -0400 + + [stream-file] Recover from a disk-full situation + + src/vtestream-file.h | 38 +++++++++++++++++++++++++------------- + 1 file changed, 25 insertions(+), 13 deletions(-) + +commit fae64189d5370681dccbe4f96c6f0a86153caa3f +Author: Behdad Esfahbod +Date: 2013-09-27 18:09:38 -0400 + + [stream-file] Remove another lseek + + src/vtestream-file.h | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 2e268aaef84bb9026ff98504efd7679c91ee591c +Author: Behdad Esfahbod +Date: 2013-09-27 18:06:31 -0400 + + Fixup commit a551b0b8686bc266a2329a3215069895d591b0e9 + + src/vtestream-file.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ee3a84fe9eaea643b6b64da41fe5354e43e5dde9 +Author: Behdad Esfahbod +Date: 2013-09-27 17:43:18 -0400 + + Bug 708496 - Lines disappear after positioning back the cursor + + Patch from Egmont Koblinger. + + src/ring.c | 23 +++++++++++++++++++---- + 1 file changed, 19 insertions(+), 4 deletions(-) + +commit fe79b99acf38945b124ad33c3af145d68ce8f5ff +Author: Behdad Esfahbod +Date: 2013-09-27 17:26:58 -0400 + + [ring] Rename variables for readability + + Patch from Egmont Koblinger. + + Part of Bug 708496 - Lines disappear after positioning back the cursor + + src/ring.c | 79 +++++++++++++++++++++++++++++++++++--------------------------- + src/ring.h | 5 ++-- + 2 files changed, 48 insertions(+), 36 deletions(-) + +commit 97ca3655c77364db51be89fdfebb4028bb7a58a4 +Author: Behdad Esfahbod +Date: 2013-09-27 16:34:56 -0400 + + [stream-file] Mark temp files NOATIME + + src/vtestream-file.h | 3 +++ + 1 file changed, 3 insertions(+) + +commit a551b0b8686bc266a2329a3215069895d591b0e9 +Author: Behdad Esfahbod +Date: 2013-09-27 16:04:36 -0400 + + [stream-file] Bug 637275 - Use pread/pwrite() if available + + Turns syscalls in half. + + configure.ac | 5 ++++- + src/vtestream-file.h | 42 ++++++++++++++++++++++++++++++++---------- + 2 files changed, 36 insertions(+), 11 deletions(-) + +commit 658c2d4643ec7fb0cdd1ebaedc6377c29a850d21 +Author: Behdad Esfahbod +Date: 2013-09-27 16:00:27 -0400 + + [stream-file] Keep head value in memory + + Reduces syscalls. + + Part of Bug 637275 - Use pread/pwrite() in vtestream-file.h if available + + src/vtestream-base.h | 4 ++-- + src/vtestream-file.h | 17 ++++++++--------- + src/vtestream.h | 2 +- + 3 files changed, 11 insertions(+), 12 deletions(-) + +commit 6e65d90d50862ca8a9e9686b7b582f22e13e8768 +Author: Behdad Esfahbod +Date: 2013-09-27 15:34:27 -0400 + + Fix resize handling + + Patch from Egmont Koblinger. At least it's readable... + + Bug 707572 - Aborts on assertion (debug mode) + Bug 708213 - zsh - lots of blank space upon resizing VTE based terminals + + src/debug.c | 3 ++- + src/debug.h | 3 ++- + src/vte.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------- + 3 files changed, 64 insertions(+), 10 deletions(-) + +commit 9c1df647f15739dbee8a6943aaed2b0d5a3d27c3 +Author: Christian Persch +Date: 2013-09-17 00:11:18 +0200 + + Post release version bump + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 90fbbbf604790c9969e4703fbfe00ee3b8f4877d (tag: 0.34.8) +Author: Christian Persch +Date: 2013-09-17 00:06:29 +0200 + + Version 0.34.8 + + NEWS | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit e34b2bbe28261e11d99f052bddfd830a8c330411 +Author: Egmont Koblinger +Date: 2013-09-16 23:39:46 +0200 + + emulation: Make extended fore/background colour handling more xterm-like + + https://bugzilla.gnome.org/show_bug.cgi?id=616436 + + src/vte-private.h | 11 ++++++--- + src/vte.c | 39 +++++++------------------------ + src/vteseq.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++-------- + 3 files changed, 76 insertions(+), 44 deletions(-) + +commit e0fdec86f735b6fd87e911c16ef166dfe0693bc9 +Author: Christian Persch +Date: 2013-09-16 23:09:10 +0200 + + vteapp: Disable transparency by default + + This is actually a bug in the vte widget, which should only use bg_opacity + when bg_transparent is TRUE, but since this feature is deprecated anyway, + there's no point wasting any time fixing this in the widget. + + src/vteapp.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit ba74252d91898e5e03e16daa888d09797ac274fd +Author: Christian Persch +Date: 2013-09-16 23:02:09 +0200 + + widget: Fix sizeof error in memset + + vte.c: In function 'vte_terminal_reset': + vte.c:14135:16: warning: argument to 'sizeof' in 'memset' call is the same expression as the destination; did you mean to remove the addressof? [-Wsizeof-pointer-memaccess] + sizeof(&pvt->selection_origin)); + ^ + + src/vte.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 75b06e0b5fff57e8be8d6b61b97b687291f92478 +Author: Egmont Koblinger +Date: 2013-09-16 22:53:24 +0200 + + drawing: Interrupt attribute runs at graphic characters + + Graphic characters are drawn individually and directly, so they should interrupt + a run of cells of the same attributes. + + https://bugzilla.gnome.org/show_bug.cgi?id=707221 + + src/vte.c | 17 +++-------------- + 1 file changed, 3 insertions(+), 14 deletions(-) + +commit c8b374c41f2df26d8eb5bd79517017f9f0d9f2d0 +Author: Christian Persch +Date: 2013-09-12 19:14:35 +0200 + + drawing: Guard against pathological fonts + + src/vtedraw.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 237916cbc53dad24cb63f8a6c0041634f5f8885f +Author: Seán de Búrca +Date: 2013-08-29 16:01:43 -0600 + + Updated Irish translation + + po/ga.po | 51 ++++++++++++++++++++++----------------------------- + 1 file changed, 22 insertions(+), 29 deletions(-) + +commit 6163192e074fb5abcc28f6a935e9d69ad1c16e88 +Author: Christian Persch +Date: 2013-07-31 13:36:19 +0200 + + widget: Finish deprecation + + Remove duplicate declarations, and add G_GNUC_DEPRECATED attributes. + + src/vte.h | 13 ------------- + src/vtedeprecated.h | 16 ++++++++-------- + 2 files changed, 8 insertions(+), 21 deletions(-) + +commit 2da7058c57fd27bb8a8955b50a7a5b2ae8e6d50f +Author: Christian Persch +Date: 2013-07-30 15:29:48 +0200 + + widget: Deprecate some unused functions + + We don't use these in g-t anymore, and they're already gone from -next, so + deprecate them here too. + + doc/reference/vte-sections.txt | 18 ++++++++++-------- + src/vte.c | 28 ++++++++++++++++++++++++++++ + src/vtedeprecated.h | 13 +++++++++++++ + 3 files changed, 51 insertions(+), 8 deletions(-) + +commit 32b17c32e986e8cf7a850bc0b5d44fe73552fd5d +Author: Christian Persch +Date: 2013-07-30 15:33:11 +0200 + + build: Update git.mk from upstream + + git.mk | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++------------- + 1 file changed, 142 insertions(+), 35 deletions(-) + +commit 1515ea1e38777d14875aac851129046cae684f5e +Author: Christian Persch +Date: 2013-07-30 15:31:39 +0200 + + build: Move configure.in to .ac + + configure.in => configure.ac | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 0062b25d84cd86f04525059d1bfa1ee186acf140 +Author: Christian Persch +Date: 2013-07-30 15:31:26 +0200 + + build: Use autoreconf directly + + autogen.sh | 31 +++++++++---------------------- + 1 file changed, 9 insertions(+), 22 deletions(-) + +commit b9c509bb5d67d188e7069b39618b210a264686a0 +Author: Christian Persch +Date: 2013-07-07 13:05:09 +0200 + + Post release version bump + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1eecbd3cfc961f06a9e2f19d1ab48a0c119f104e (tag: 0.34.7) +Author: Christian Persch +Date: 2013-07-07 13:04:08 +0200 + + Version 0.34.7 + + NEWS | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 2b6efd6aa23eb576bb788c3dbba50f59895d21e0 +Author: Christian Persch +Date: 2013-06-28 16:42:37 +0200 + + widget: Honour gtk-enable-primary-paste setting + + src/vte.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +commit acc863ef287284e9e52c1b96d7e704d6c159d4dd +Author: Christian Persch +Date: 2013-06-16 22:15:10 +0200 + + emulation: Redraw when changing colours + + https://bugzilla.gnome.org/show_bug.cgi?id=702415 + + src/vte-private.h | 3 +++ + src/vte.c | 23 ++++++++++++----------- + src/vteseq.c | 4 +--- + 3 files changed, 16 insertions(+), 14 deletions(-) + +commit 5231137abd0b580aa6830527190bc5bfb3c961f8 +Author: Christian Persch +Date: 2013-06-16 21:44:33 +0200 + + emacs: Add .dir-locals.el + + .dir-locals.el | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 2a7ff01443d482bd1b30c7bd899c369a57430751 +Author: Christian Persch +Date: 2013-06-10 17:59:19 +0200 + + Post release version bump + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 364d5b5252b7dce4358ad25fc0249ccd843155d4 (tag: 0.34.6) +Author: Christian Persch +Date: 2013-06-08 13:47:00 +0200 + + pty: Move spawn flag define to vtepty.h + + src/vte.h | 2 -- + src/vtepty.h | 2 ++ + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 5ba5c9ee232e0bf24b88623edfb8bd86a2aad06c +Author: Christian Persch +Date: 2013-06-08 13:41:23 +0200 + + widget: Deprecate vte_terminal_im_append_menuitems + + src/vte.h | 4 ---- + src/vtedeprecated.h | 3 +++ + 2 files changed, 3 insertions(+), 4 deletions(-) + +commit 1bdda64d980c8880c4de93ef68739990775b6756 +Author: Christian Persch +Date: 2013-06-01 19:12:46 +0200 + + Version 0.34.6 + + NEWS | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 89f6741d8e0ce481b7ec188043e26488edb5a455 +Author: Christian Persch +Date: 2013-06-01 19:07:55 +0200 + + emulation: Allow unsetting the current-{directory,file}-uri + + By passing "" (or an invalid, non-URI value), unset the property. + + src/vteseq.c | 32 ++++++++++++++++++-------------- + 1 file changed, 18 insertions(+), 14 deletions(-) + +commit 4100d11e579108289f7e3c994865e77aa7c35422 +Author: Michael Kuhn +Date: 2013-05-25 13:35:48 +0200 + + prompt: Return 0 instead of last exit status + + src/vte.sh | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 4ab8de471e5dea5f58873abd5cc4a24feaa7210b +Author: Christian Persch +Date: 2013-05-25 18:04:29 +0200 + + pty: Add a spwan flag to not inherit the parent environment + + In gnome-terminal we don't want the gnome-terminal-server's environment + to pollute the child environment, so add the VTE_SPAWN_NO_PARENT_ENVV flag + that when passed to vte_terminal_fork_command_full() makes it *not* + merge the parent's environment. + + src/pty.c | 26 ++++++++++++++++++-------- + src/vte.h | 2 ++ + 2 files changed, 20 insertions(+), 8 deletions(-) + +commit 5804cf60534611d0b5e673acbed49b756e780aca +Author: Christian Persch +Date: 2013-05-13 20:10:14 +0200 + + Post release version bump + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9979712a1b556e0ddd3bf57b3ec8379b57cf66c1 (tag: 0.34.5) +Author: Christian Persch +Date: 2013-05-13 20:01:05 +0200 + + prompt: Fix test + + src/test-vte-sh.sh | 4 +++- + src/vte.sh | 2 ++ + 2 files changed, 5 insertions(+), 1 deletion(-) + +commit 17841f18c480c7198463b2969e9fe178a87e6632 +Author: Christian Persch +Date: 2013-05-13 19:58:51 +0200 + + prompt: Simplify test + + src/vte.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a22ab115e414bf3e08b46d38568c35322e51db6c +Author: Christian Persch +Date: 2013-05-13 19:45:02 +0200 + + Version 0.34.5 + + NEWS | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit 68046665721bbd36fe8035fe51ab138e9dd3c1dd +Author: Christian Persch +Date: 2013-05-13 19:44:36 +0200 + + pty: Change vte version variable name + + Use "VTE_VERSION". Adapt the vte.sh script accordingly. + + src/pty.c | 4 ++-- + src/vte.sh | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit fa9171fc7b9ed0f46e26dec32e2755c1c48c4c70 +Author: Christian Persch +Date: 2013-05-04 21:06:58 +0200 + + prompt: zsh compatibility + + src/vte.sh | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) + +commit b307d45e8b2dd27a3881852c29f4a6f0443d5348 +Author: Christian Persch +Date: 2013-04-30 20:36:27 +0200 + + prompt: Set PROMPT_COMMAND + + Use PROMPT_COMMAND to set the cwd. This works for both login and non-login + shells (at least under F17 and should also work for any other distro that + sources /etc/profile.d/*.sh both ways). + + src/vte.sh | 31 ++++++++++++++++++++++++------- + 1 file changed, 24 insertions(+), 7 deletions(-) + +commit 5f80578b383a3378274c78f6867b1fcb05d42ea3 +Author: Christian Persch +Date: 2013-04-29 12:37:17 +0200 + + prompt: Make __vte_ps1 only print anything if running under vte + + src/vte.sh | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit 8bea17d1a36abb635e751e4daf4315b0bf20b26e +Author: Christian Persch +Date: 2013-04-21 19:02:26 +0200 + + pty: Set env var with vte version + + This is necessary so that we'll be able to check whether to use the + vte.sh script in PS1. + + src/pty.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit b7b11d01886e87253c80b047d75157abadbc8d2e +Author: Chetan Khona +Date: 2013-04-19 15:47:08 +0530 + + Updated Marathi translation + + po/mr.po | 102 ++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 45 insertions(+), 57 deletions(-) + +commit 61b5f22d63b6f68dbd0ef481bbcf5afc9af1ab35 +Author: Christian Persch +Date: 2013-04-15 18:13:28 +0200 + + Post release version bump + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bd4f09b0262a247c3af2c3f6c3befc2b17b3f1aa (tag: 0.34.4) +Author: Christian Persch +Date: 2013-04-15 18:12:08 +0200 + + vte.sh: Fix distcheck + + src/test-vte-sh.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3a88aae49c03d423bb1e4c589c2fb8cde676e895 +Author: Christian Persch +Date: 2013-04-15 18:04:38 +0200 + + Version 0.34.4 + + NEWS | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 7045b26c47008e27742bf3b3dc4b1f127553fbb5 +Author: Christian Persch +Date: 2013-04-13 19:49:28 +0200 + + vte.sh: Improve vte.sh script and add testcase + + Improved vte.sh script by Peter De Wachter. + + Add a test that checks the urlencoding is done right. + + src/Makefile.am | 5 +++- + src/test-vte-sh.sh | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/vte.sh | 26 +++++++++---------- + 3 files changed, 90 insertions(+), 15 deletions(-) + +commit 425246f2f683b6f41b479867c298f08eab73f857 +Author: Christian Persch +Date: 2013-03-25 21:08:04 +0100 + + Post release version bump + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b8ea15489cb31079d235b34235db44d7d4c1eb9c (tag: 0.34.3) +Author: Christian Persch +Date: 2013-03-25 21:07:32 +0100 + + Version 0.34.3 + + NEWS | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit cf9093136adc20971fad3518f6ece3e2bd48e809 +Author: Victor Ibragimov +Date: 2013-03-19 22:41:12 +0100 + + [l10n] Added Tadjik translation + + po/LINGUAS | 1 + + po/tg.po | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 85 insertions(+) + +commit f0481f382a4b41196a48ebe928d83e053a7c7fc1 +Author: Changwoo Ryu +Date: 2013-03-19 02:26:20 +0900 + + Updated Korean translation + + po/ko.po | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit d95ddf397da615a96bae9fe1af241ce23587362f +Author: Duarte Loreto +Date: 2013-03-17 01:12:19 +0000 + + Converted Portuguese translation to New Spelling (Novo AO) + + po/pt.po | 49 +++++++++++++++++++++++++------------------------ + 1 file changed, 25 insertions(+), 24 deletions(-) + +commit 4ed69e422a4a203b9c9bb3f4d594daa6d41f8c37 +Author: Brad Smith +Date: 2013-02-23 22:49:00 +0100 + + pty: Use posix_openpt() if available + + https://bugzilla.gnome.org/show_bug.cgi?id=694494 + + configure.in | 2 +- + src/pty.c | 4 +++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +commit b27c11605f6e78b97f782b7a7a40ed51cb64a025 +Author: Gheyret Kenji +Date: 2013-01-27 13:24:51 +0900 + + Updated Uyghur translation + + Signed-off-by: Gheyret Kenji + + po/ug.po | 25 +++++++++++++------------ + 1 file changed, 13 insertions(+), 12 deletions(-) + +commit 1c4391e2d6614c4c61f249236b1cb1781aeebedc +Author: TmTFx +Date: 2012-12-28 22:58:04 -0200 + + Updated Friulian translation + + po/LINGUAS | 1 + + po/fur.po | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 84 insertions(+) + +commit df69676c65361cfd35227e987de79a14db30ab42 +Author: TmTFx +Date: 2012-12-28 22:58:04 -0200 + + Updated Friulian translation + + po/LINGUAS | 1 + + po/fur.po | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 84 insertions(+) + +commit d1fb78fb00388b3e76fa1c8c71149d64c931b68e +Author: Colin Watson +Date: 2012-12-20 11:23:18 +0000 + + Use @basename@ rather than @filename@ in vtetypebuiltins.h + + On Debian/Ubuntu-based systems it is helpful for headers to be identical + across architectures, thereby allowing the -dev packages from multiple + architectures to be installed simultaneously; in particular, this + simplifies cross-building. When building out-of-tree, the use of + @filename@ causes the build directory to end up in the generated header + file, which means that it isn't reliably identical on all architectures. + Using @basename@ instead fixes this problem. + + Although it isn't necessary to change the corresponding .c file as well, + I did so for consistency. + + https://bugzilla.gnome.org/show_bug.cgi?id=690554 + + src/vtetypebuiltins.c.template | 2 +- + src/vtetypebuiltins.h.template | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 30a37fa36077a9920d86e9d1cd5900516a90f954 +Author: Behdad Esfahbod +Date: 2012-12-10 18:08:47 -0500 + + Mark attributes with caller-allocates annotation + + Part of Bug 690003 - get_text method moved + + src/vte.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit e39a9aa0e628ff1a32398f3556f387eabf75b130 +Author: Behdad Esfahbod +Date: 2012-12-10 18:07:37 -0500 + + Mark is_selected functions with allow-none + + Part of Bug 690003 - get_text method moved + + src/vte.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 2ba27999b537300f4beb92ca27830fbd4197740e +Author: Simon Schampijer +Date: 2012-11-28 21:14:59 +0100 + + Move definition of VteCharAttributes up, #676999 + + I found the element-type for the attributes in vte_terminal_get_text + vte_terminal_get_text_include_trailing_spaces and vte_terminal_get_text_range + strange to be of type "Vte.CharAttributes" and not VteCharAttributes but when I + changed it I only got a warning. Then I saw that there was already a warning + about "Unknown namespace for identifier 'vte_char_attributes'", so I moved the + definition of VteCharAttributes and now those functions are introspectable. + + src/vte.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6800607c98ad7c11d4579852dfe2edd35abb44ff +Author: Christian Persch +Date: 2012-11-12 23:20:49 +0100 + + Post release version bump + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 017c63b6cf25b5bc619e11a088b393ae5ec75dbe (tag: 0.34.2) +Author: Christian Persch +Date: 2012-11-12 23:18:26 +0100 + + Version 0.34.2 + + NEWS | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 645bc2474da740bc75ea513a0dd0238bd70417a9 +Author: Bahodir Mansurov <6ahodir@gmail.com> +Date: 2012-10-17 14:23:03 -0400 + + adding uz@cyrillic translation + + po/LINGUAS | 1 + + po/uz@cyrillic.po | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 83 insertions(+) + +commit eb748ae6922a1ca45e33b3fa3a8561fdf1b7610b +Author: Christian Persch +Date: 2012-10-16 01:26:10 +0200 + + Post release version bump + + NEWS | 7 +++++++ + configure.in | 2 +- + 2 files changed, 8 insertions(+), 1 deletion(-) + +commit 49cacf86a2930cadf1fef5913b40c697797cbdea (tag: 0.34.1) +Author: Egmont Koblinger +Date: 2012-10-12 22:00:03 +0200 + + emulation: End selection mode misses Shift release + + When shift was released before the mouse button, we were not ending the selection. + + https://bugzilla.gnome.org/show_bug.cgi?id=683730 + + src/vte.c | 11 ++--------- + 1 file changed, 2 insertions(+), 9 deletions(-) + +commit 34199b9242c47eb9dd55d6cf8a8ae623f3d7a349 +Author: Egmont Koblinger +Date: 2012-10-12 21:49:40 +0200 + + emulation: Don't report shift-left-button release + + In case selection is deferred until the threshold is exceeded, we still need + to consume the event so that we don't report a button release event to the app. + + https://bugzilla.gnome.org/show_bug.cgi?id=683729 + + src/vte.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit e2b6be983a31446ba6150ddc3ca7dfa105bca7b2 +Author: Egmont Koblinger +Date: 2012-08-21 00:33:26 +0200 + + emulation: Support xterm extended mouse tracking mode + + https://bugzilla.gnome.org/show_bug.cgi?id=681329 + + src/Makefile.am | 4 +-- + src/mev.c | 28 ++++++++++++++++++- + src/vte-private.h | 1 + + src/vte.c | 80 +++++++++++++++++++++++++------------------------------ + src/vteseq.c | 5 ++++ + 5 files changed, 71 insertions(+), 47 deletions(-) + +commit c396ff7573514db04e2cd66f0365e049adcd429c +Author: Christian Persch +Date: 2012-10-08 21:58:14 +0200 + + keymap: Simplify debug code + + Remove the autogenerated keysyms.c and just use gdk_keyval_name(). + + Conflicts: + src/Makefile.am + + src/Makefile.am | 2 - + src/genkeysyms.py | 27 -- + src/keymap.c | 16 +- + src/keysyms.c | 1254 ----------------------------------------------------- + 4 files changed, 4 insertions(+), 1295 deletions(-) + +commit ad68297cb8792c5f2927ccac44014507ff310da2 +Author: Patrick Niklaus +Date: 2012-10-05 01:40:28 +0200 + + emulation: Support italic text + + The escape sequence SGR 3 for italic text is now recognised and supported. + + https://bugzilla.gnome.org/show_bug.cgi?id=685223 + + src/vte.c | 67 +++++++++++++++----------- + src/vtedraw.c | 140 ++++++++++++++++++++++++++++++++++++++----------------- + src/vtedraw.h | 17 ++++--- + src/vterowdata.h | 9 ++-- + src/vteseq.c | 6 +++ + 5 files changed, 158 insertions(+), 81 deletions(-) + +commit 16514fc908ca99b4e648e6646c9f9ee9f22cd4b9 +Author: Timur Zhamakeev +Date: 2012-09-26 22:50:43 +0600 + + Updated Kyrgyz translation + + po/ky.po | 115 +++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 57 insertions(+), 58 deletions(-) + +commit 30888b94b50ef02b65f9027eb55ef171d6d77ecc +Author: Rūdolfs Mazurs +Date: 2012-09-24 17:10:49 +0300 + + Updated Latvian translation + + po/lv.po | 68 +++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 31 insertions(+), 37 deletions(-) + +commit 03fdd545b4e76d946f21540e413e84b2d50578f3 +Author: Timur Zhamakeev +Date: 2012-09-24 19:00:26 +0600 + + Updated Kyrgyz translation + + po/ky.po | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +commit 87d3abe983541c52cd119fcc4f04379d86292ba2 +Author: Ani Peter +Date: 2012-09-22 12:34:11 +0530 + + Updated Malayalam file + + po/ml.po | 105 ++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 46 insertions(+), 59 deletions(-) + +commit b115c693967bdae09ea3b85ce510a6cc75898595 +Author: Christian Persch +Date: 2012-09-16 19:14:36 +0200 + + Post release version bump + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c48b33792c07abe8f6c06326c32934b61760c2a3 (tag: 0.34.0) +Author: Christian Persch +Date: 2012-09-16 19:07:33 +0200 + + Version 0.34.0 + + NEWS | 8 +++++++- + configure.in | 4 ++-- + 2 files changed, 9 insertions(+), 3 deletions(-) + +commit 380af17de3f53acd40ca15cb0bc502027b236aae +Author: Piotr Drąg +Date: 2012-09-04 23:50:49 +0200 + + Updated Polish translation + + po/pl.po | 49 ++++++++++++++++++++++++++++--------------------- + 1 file changed, 28 insertions(+), 21 deletions(-) + +commit 3cba23e61e7bbfc15aa312b64d1efe00e75ed75d +Author: Piotr Drąg +Date: 2012-09-04 23:50:49 +0200 + + Updated Polish translation + + po/pl.po | 49 ++++++++++++++++++++++++++++--------------------- + 1 file changed, 28 insertions(+), 21 deletions(-) + +commit ea6de03f67050d637695dabc70384043d44f823a +Author: Christian Persch +Date: 2012-08-25 22:36:32 +0200 + + drawing: Don't overdraw the cell on bold characters + + This was added in comment dcb7fd974bea5fe49d4f5b0344ebdaffc6d7bae1 and is only + required when using double-strike pseudo-bolding; so only add the extra pixel when + doing that. This makes the usual case (i.e. using a real bold font) look nicer. + + https://bugzilla.gnome.org/show_bug.cgi?id=682692 + + src/vte.c | 4 ++-- + src/vtedraw.c | 2 +- + src/vtedraw.h | 1 + + 3 files changed, 4 insertions(+), 3 deletions(-) + +commit f2012351c2e609b9ae3152d7c43b3505bfac3ad1 +Author: Christian Persch +Date: 2012-08-25 21:32:41 +0200 + + CJK: Fix width of Box Drawing and Block Elements characters + + U+254C..U+254F and U+2574..U+257F have East Asian Width property + N (neutral) while all the other line drawing characters are + A (ambigous). This makes those characters not match up with those + other line drawing characters from the Box Drawing (U+2500..U+257F) + block when using VTE_CJK_WIDTH=wide; so we forcibly treat them as + ambigous too. + + And we also do the same for the Terminal Graphic Characters + (U+2596..U+259F) as well as U+2590 and U+2591 from the Block Elements + (U+2580..U+259F) block. + + The reasons *why* these characters are N instead of A is not clear. + It certainly looks like a bug in Unicode, but these characters are there + since Unicode 1.1, and even the first version of UAX#11 + (DTR#11, http://www.unicode.org/reports/dtr11.html) has them as N. + + src/iso2022.c | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +commit 94b6ca416d4e5b54be084a057ec1341bcfddabe1 +Author: Phil Clayton +Date: 2012-08-13 02:51:35 +0100 + + Correct introspection annotation for vte_terminal_new + + https://bugzilla.gnome.org/show_bug.cgi?id=681714 + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 49e3433dea9a32d7ab9972b719484b49ca7f6b81 +Author: Rafał Mużyło +Date: 2012-08-24 21:14:13 +0200 + + introspection: Fix some annotations + + https://bugzilla.gnome.org/show_bug.cgi?id=679805 + + src/vte.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit c1a549c3fdd45ed952bc3b90f7b713d5bb7d840d +Author: Matthias Clasen +Date: 2012-08-04 22:20:36 -0400 + + Replace GDK_THREADS_ENTER/LEAVE with gdk_threads_enter/leave + + Using the functions directly allows us to benefit from the + new more gracious deprecation approach, and doesn't force + a harsh build break due to undefined macros. + + https://bugzilla.gnome.org/show_bug.cgi?id=681216 + + src/vte.c | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +commit b2585f2cb87c02266bf9ae7e5e4bc7b5116abf77 +Author: Christian Persch +Date: 2012-08-23 20:39:12 +0200 + + docs: Add index for API new in 0.34 + + doc/reference/vte-docs.xml | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 154abade902850afb44115cccf8fcac51fc082f0 +Author: Christian Persch +Date: 2012-08-22 19:01:33 +0200 + + drawing: Fix drawing of Box Drawing and Block Elements characters + + ... and remove the few other special-cased characters. We may consider + adding all or parts of U+2400..U+243F (Control Pictures) and U+25A0..U+25FF + (Geometric Shapes) back in. + + The Box drawing block is: + + U+250x ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏ + + U+251x ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟ + + U+252x ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯ + + U+253x ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿ + + U+254x ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏ + + U+255x ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ + + U+256x ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯ + + U+257x ╰ ╱ ╲ ╳ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿ + + and the Block Elements block is: + + U+258x ▀ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊ ▋ ▌ ▍ ▎ ▏ + + U+259x ▐ ░ ▒ ▓ ▔ ▕ ▖ ▗ ▘ ▙ ▚ ▛ ▜ ▝ ▞ ▟ + + https://bugzilla.gnome.org/show_bug.cgi?id=435000 + + src/vte.c | 1509 +++++++++++++++++++++++++++------------------------------ + src/vtedraw.c | 22 +- + src/vtedraw.h | 6 + + 3 files changed, 742 insertions(+), 795 deletions(-) + +commit 8c80c36713e2305c2decc56452bd9cf5af7662d2 +Author: Christian Persch +Date: 2012-08-21 22:55:31 +0200 + + widget: Remove extraneous vte_draw_[start|end] calls + + Drawing only happens on ::draw which calls start/end already. + + src/vte.c | 4 ---- + 1 file changed, 4 deletions(-) + +commit 3320ba9bb3328df3d18310e10d4edc13c66b87f0 +Author: Christian Persch +Date: 2012-08-21 22:53:56 +0200 + + widget: Remove broken 'visual beep' code + + It's not possible to draw to widget->window outside of a ::draw event, + so don't do that. + + https://bugzilla.gnome.org/show_bug.cgi?id=602726 + + src/vte.c | 21 +-------------------- + 1 file changed, 1 insertion(+), 20 deletions(-) + +commit f89b42ef37fc20944e3c17d41581c6fe3c004e6e +Author: Christian Persch +Date: 2012-08-21 19:54:17 +0200 + + Revert "Revert "Add urxvt extended mouse tracking mode support"" + + This reverts commit 580bc054a083c020ab658183864ab44ba8589c85. + + src/vte-private.h | 1 + + src/vte.c | 58 +++++++++++++++++++++++++++++++++++-------------------- + src/vteseq.c | 5 +++++ + 3 files changed, 43 insertions(+), 21 deletions(-) + +commit d6e362089ffdb2802e0675498da34369c4e746ea +Author: Christian Persch +Date: 2012-08-21 19:54:07 +0200 + + Revert "emulation: Support xterm extended mouse tracking mode" + + This reverts commit e75d806d8a79d7b7e28d982da05e066c3681ea32. + + src/vte-private.h | 1 - + src/vte.c | 88 ++++++++++++++++++++++++++----------------------------- + src/vteseq.c | 7 ----- + 3 files changed, 42 insertions(+), 54 deletions(-) + +commit e75d806d8a79d7b7e28d982da05e066c3681ea32 +Author: Christian Persch +Date: 2012-08-21 00:42:14 +0200 + + emulation: Support xterm extended mouse tracking mode + + https://bugzilla.gnome.org/show_bug.cgi?id=681329 + + src/vte-private.h | 1 + + src/vte.c | 88 +++++++++++++++++++++++++++++-------------------------- + src/vteseq.c | 7 +++++ + 3 files changed, 54 insertions(+), 42 deletions(-) + +commit 580bc054a083c020ab658183864ab44ba8589c85 +Author: Christian Persch +Date: 2012-08-21 00:33:26 +0200 + + Revert "Add urxvt extended mouse tracking mode support" + + This reverts commit 60e0ce9ff6b27787c47c266e779d80e3389babe9. + + src/vte-private.h | 1 - + src/vte.c | 58 ++++++++++++++++++++----------------------------------- + src/vteseq.c | 5 ----- + 3 files changed, 21 insertions(+), 43 deletions(-) + +commit 1ed30619fa3ceb1d537cc6e6384cd646acaa0a4d (tag: 0.33.90) +Author: Christian Persch +Date: 2012-08-19 19:33:43 +0200 + + Version 0.33.90 + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b14544d0d46e39f78da0be098c20b586a1bcda3c +Author: Nguyễn Thái Ngọc Duy +Date: 2012-07-02 14:50:30 +0700 + + Updated Vietnamese translation + + po/vi.po | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit f1fb6367761c6faf444404c3004e544ffeac98be +Author: Nguyễn Thái Ngọc Duy +Date: 2012-07-02 14:49:20 +0700 + + po/vi: import from Damned Lies + + po/vi.po | 96 +++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 44 insertions(+), 52 deletions(-) + +commit 503e27af78c995ba6a1175290552f3592e7d048c +Author: Christian Persch +Date: 2012-06-06 11:11:33 +0200 + + pkgconfig: Remove uninstalled pc file + + configure.in | 1 - + vte-uninstalled.pc.in | 13 ------------- + 2 files changed, 14 deletions(-) + +commit 87dc14dc33d69e5cb8fffbb92d22ab832c522f57 +Author: Christian Persch +Date: 2012-06-06 11:09:44 +0200 + + pkgconfig: Remove unused default emulation variable + + https://bugzilla.gnome.org/show_bug.cgi?id=674490 + + vte.pc.in | 2 -- + 1 file changed, 2 deletions(-) + +commit 2975562afc96125911e1d4635382a87c90b97ff0 +Author: Christian Persch +Date: 2012-06-04 23:51:27 +0200 + + bash: Add /etc/profile.d/vte.sh script + + This script exports __vte_ps1 which when used in PS1 will keep the terminal + updated about the current directory. Use like this in ~/.bashrc: + + export PS1='\[$(__vte_ps1)\]'$PS1 + + The urlencoding code is taken from gnome-doc-tool. + + https://bugzilla.gnome.org/show_bug.cgi?id=675987 + + src/Makefile.am | 5 ++++- + src/vte.sh | 40 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 44 insertions(+), 1 deletion(-) + +commit 9be0ee6968fbd9677c0eadca8df13ecffa6551b3 +Author: Christian Persch +Date: 2012-06-01 19:42:03 +0200 + + emulation: Add sequences to set current directory and file + + Add sequences + OSC 6 ; URI BEL + OSC 6 ; URI ST + OSC 7 ; URI BEL + OSC 7 ; URI ST + that set the current file (OSC 7) and current directory (OSC 6) as an URI. + + https://bugzilla.gnome.org/show_bug.cgi?id=675987 + + doc/reference/vte-sections.txt | 2 + + src/caps.c | 4 ++ + src/osc | 2 + + src/vte-private.h | 4 ++ + src/vte.c | 146 ++++++++++++++++++++++++++++++++++++++++- + src/vte.h | 2 + + src/vteseq-n.gperf | 2 + + src/vteseq.c | 64 ++++++++++++++++++ + 8 files changed, 225 insertions(+), 1 deletion(-) + +commit 0299dbc53df8fa43cafe81411a428b5bfb086ae3 +Author: Christian Persch +Date: 2012-06-01 18:39:41 +0200 + + Post branch version bump + + configure.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit b09d7e41f427f61de36202cbc5f5cf9270c998dd +Author: Daniel Mustieles +Date: 2012-05-31 14:18:52 +0200 + + Updated Spanish translation + + po/es.po | 36 +++++++++++++++--------------------- + 1 file changed, 15 insertions(+), 21 deletions(-) + +commit 062b64d42717ef33b65f987018d2cb6d40da4dd8 (tag: 0.32.2) +Author: Christian Persch +Date: 2012-05-29 22:03:24 +0200 + + Version 0.32.2 + + NEWS | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 664c6eebf9cec5ed5e20cec36a8eca78f417d6d0 +Author: Jacques-Pascal Deplaix +Date: 2012-05-26 17:08:56 +0200 + + Remove a segfault when passing null in tag argument + + Bug #676886. + + src/vte.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +commit bfecfad9912fb13201b7d6d3c74331496cd3d523 +Author: Christian Persch +Date: 2012-05-23 18:51:16 +0200 + + table: Move GValueArray existence check/creation out of loop + + src/table.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 98ce2f265f986fb88c38d508286bb5e3716b9e74 +Author: Christian Persch +Date: 2012-05-19 20:04:12 +0200 + + emulation: Limit repetitions + + Don't allow malicious sequences to cause excessive repetitions. + + https://bugzilla.gnome.org/show_bug.cgi?id=676090 + + src/vteseq.c | 25 ++++++++++++++++++------- + 1 file changed, 18 insertions(+), 7 deletions(-) + +commit feeee4b5832b17641e505b7083e0d299fdae318e +Author: Christian Persch +Date: 2012-05-19 19:36:09 +0200 + + emulation: Limit integer arguments to 65535 + + To guard against malicious sequences containing excessively big numbers, + limit all parsed numbers to 16 bit range. Doing this here in the parsing + routine is a catch-all guard; this doesn't preclude enforcing + more stringent limits in the handlers themselves. + + https://bugzilla.gnome.org/show_bug.cgi?id=676090 + + src/table.c | 2 +- + src/vteseq.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit a9d6a34708f846952f423d078397352858f7b1a4 +Author: Christian Persch +Date: 2012-05-12 18:48:05 +0200 + + keymap: Treat ALT as META + + https://bugzilla.gnome.org/show_bug.cgi?id=663779 + + src/vte.c | 23 ++++++++++++++--------- + 1 file changed, 14 insertions(+), 9 deletions(-) + +commit 476a8b4aa9e03ac7c657e489b532df1efa7db3f0 +Author: Christian Persch +Date: 2012-04-30 22:49:23 +0200 + + Remove notify of nonexisting object property + + src/vte.c | 2 -- + 1 file changed, 2 deletions(-) + +commit e8d55ffaa517910200148ed4cfd030120e9a9a9e +Author: Jason Conti +Date: 2012-04-19 18:37:10 -0400 + + Use top_srcdir/top_builddir in DOC_SOURCE_DIR + + to fix out-of-tree builds. + + Bug #674443. + + doc/reference/Makefile.am | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit dde7e42ec946e6f31e861a06fa9024f6583ef596 +Author: Christian Persch +Date: 2012-04-16 19:19:26 +0200 + + Post release version bump + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f0bdb48cd20ac2a07425a35b5f10c545a025f6c2 (tag: 0.32.1) +Author: Christian Persch +Date: 2012-04-16 19:11:08 +0200 + + Version 0.32.1 + + NEWS | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit a482be38bf8fc33642558589b116bac0db2224ff +Author: Chandan Kumar +Date: 2012-04-08 18:34:13 +0530 + + Updated HINDI translation + + po/hi.po | 51 ++++++++++++++++++++++++++++----------------------- + 1 file changed, 28 insertions(+), 23 deletions(-) + +commit 4e79964afe6429f5e5846dbc6a3ebc264e34f1dd +Author: Anders Kaseorg +Date: 2012-02-16 19:16:36 -0500 + + emulation: Fix off-by-one error in interpretation of ECH (erase character) + + _vte_row_data_fill fills the row up to but *not including* len, so we + need to pass len = col + 1. + + https://bugzilla.gnome.org/show_bug.cgi?id=670037 + + Signed-off-by: Anders Kaseorg + + src/vteseq.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6f1a9900af0d287b6a7289203936ded478702d98 +Author: Pavel Vasin +Date: 2012-03-24 19:08:35 +0400 + + _vte_draw_set_text_font(): fix PangoContext leak if font_info in cache + + Bug #672757. + + src/vtedraw.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 3040f88a9e459f849e0cda4c9b6b3d5007d81a7e +Author: Christian Persch +Date: 2012-03-23 02:17:25 +0100 + + pty: Fix custom child setup function + + Fix passing a custom child setup to vte_terminal_fork_command_full(). + Before, it was impossible to actually make use of this, since there's + no way to get the VtePty to call vte_pty_child_setup() on. Now, just + store the extra child setup and call it from vte_pty_child_setup(). + + https://bugzilla.gnome.org/show_bug.cgi?id=672649 + + src/pty.c | 31 +++++++++++++++++++++++++------ + src/vte.c | 2 +- + 2 files changed, 26 insertions(+), 7 deletions(-) + +commit 722ab0c498a64121d92b4f48dd8e4ffc831b086f +Author: Christian Persch +Date: 2012-03-19 18:29:25 +0100 + + Post release version bump + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9f091e1865220ac01c3c575291bec02a051882ea (tag: 0.32.0) +Author: Christian Persch +Date: 2012-03-19 18:22:16 +0100 + + Version 0.32.0 + + NEWS | 10 ++++++++++ + configure.in | 3 +-- + 2 files changed, 11 insertions(+), 2 deletions(-) + +commit 578c54755eac8906dedffe2fd09b7b40465a04f9 +Author: Christian Persch +Date: 2012-03-10 16:51:11 +0100 + + glade: Use correct gettext domain + + glade/vte.xml.in.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b1040ae9a4f4326dd30adcb62647e0930bdd196c +Author: Christian Persch +Date: 2012-03-10 13:44:02 +0100 + + glade: Fix library name + + https://bugzilla.gnome.org/show_bug.cgi?id=671760 + + configure.in | 1 + + glade/Makefile.am | 5 ++--- + glade/{vte.xml.in => vte.xml.in.in} | 2 +- + 3 files changed, 4 insertions(+), 4 deletions(-) + +commit a5c8932882d10323d17cb11d82c60089beec7bb9 +Author: Khoem Sokhem +Date: 2012-03-10 13:29:12 +0100 + + Add initial Khmer translation + + po/LINGUAS | 1 + + po/km.po | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 85 insertions(+) + +commit ef34977b6765be1036ea8cd016861199033e2231 +Author: Christian Persch +Date: 2012-03-09 17:06:14 +0100 + + introspection: Fix annotation thinko + + https://bugzilla.gnome.org/show_bug.cgi?id=661716 + + src/vte.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 79793eeb430c60a774ff118192b249c6c06e4acc +Author: Christian Persch +Date: 2012-03-08 22:15:54 +0100 + + build: Install GIR and typelib into our prefix + + https://bugzilla.gnome.org/show_bug.cgi?id=648183 + + src/Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 563963f2d9c47c0fc1763ae568dbeb97242ac581 +Author: Evan Nemerson +Date: 2012-03-08 22:11:49 +0100 + + build: Include pkg-config and include info in the GIR + + http://bugzilla-attachments.gnome.org/attachment.cgi?id=192742 + + src/Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) + +commit f4db3875fd08d246bf337d048845bd9b54c325f8 +Author: Gert Michael Kulyk +Date: 2012-03-04 13:03:53 +0100 + + Explicitly set GDK_SCROLL_MASK as recent gtk+ versions require it for scrolling to work + + Bug #671305. + + src/vte.c | 1 + + 1 file changed, 1 insertion(+) + +commit 116fe70d32c810ccd0bb226fc0c06c74e28db075 +Author: Martin Pieuchot +Date: 2012-03-08 21:53:52 +0100 + + pty: Support allocating PTYs through openpty on BSD + + Allows systems supporting the BSD openpty(3) utily function but not + the Unix98 PTY function family (grantpt(3), unlockpt(3), ...) to + allocate pseudo-tty without relying on the gnome-pty-helper. + + https://bugzilla.gnome.org/show_bug.cgi?id=670758 + + configure.in | 6 +++++- + src/pty.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- + 2 files changed, 61 insertions(+), 2 deletions(-) + +commit be763b49aabc14fb48a5533a32645b6d88f31fbb +Author: Markus Duft +Date: 2012-03-08 21:44:14 +0100 + + build: Add fallback for round on interix + + configure.in | 2 +- + src/vte.c | 10 ++++++++++ + 2 files changed, 11 insertions(+), 1 deletion(-) + +commit 8cff105a2b280ed738b296955724590b9cd348ce +Author: Christian Persch +Date: 2012-03-08 21:38:13 +0100 + + introspection: Add missing annotation + + https://bugzilla.gnome.org/show_bug.cgi?id=661716 + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bbfcc64b4f52c14b71c008a52b253d9fdc205fd5 +Author: Alban Browaeys +Date: 2012-03-08 21:33:33 +0100 + + build: Fix missing bracked + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f210e8be89b985102fe2af1dca846e699c2e6ca7 +Author: Christian Persch +Date: 2012-03-08 21:29:20 +0100 + + build: Disable warnings about non-portable constructs + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5fa716cb825bd0402dbdaa5bc0f0e5947f9dd058 +Author: Bahodir Mansurov <6ahodir@gmail.com> +Date: 2012-02-29 19:46:51 -0500 + + Adding uz@cyrillic to the LINGUAS file + + po/LINGUAS | 1 + + 1 file changed, 1 insertion(+) + +commit d903d27087fb3a92fac3cfcf5cc0bc3bb4a4cf21 +Author: Bahodir Mansurov <6ahodir@gmail.com> +Date: 2012-02-29 19:44:54 -0500 + + Adding Uzbek@cyrillic translation + + po/uz@cyrillic.po | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 82 insertions(+) + +commit 1272d8b979b4b1b579180b6c57fc7df4c3e405a6 +Author: Vincent Untz +Date: 2012-02-24 11:28:38 +0100 + + gnome-pty-helper: Respect SUID_CFLAGS and SUID_LDFLAGS + + This is a good way for distributors to use -fPIE/-pie when building vte. + + https://bugzilla.gnome.org/show_bug.cgi?id=670732 + + gnome-pty-helper/Makefile.am | 3 +++ + gnome-pty-helper/configure.in | 5 +++++ + 2 files changed, 8 insertions(+) + +commit 1a6963ed0a7aa287fa9265de1756ed8e7b1d4124 +Author: Gheyret Kenji +Date: 2012-02-19 19:56:04 +0900 + + Uyghur translation updated + + po/ug.po | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +commit bdc6c05ec09872db755679aba1b39489094c3d05 +Author: Christian Persch +Date: 2012-02-16 17:58:07 +0100 + + build: Disable glib deprecation warnings + + Due to the GValueArray deprecation, deprecation warnings have become just too + overwhelming. + + configure.in | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 841b29b09e826799984f63f4265ecd4558316743 +Author: Christian Persch +Date: 2012-02-15 02:42:44 +0100 + + Typo fix + + src/vte.gresource.xml.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c0fbf94743d10c4cd26b8cbfc41067d38fe39f56 +Author: Christian Persch +Date: 2012-02-15 02:15:56 +0100 + + Fix argument order in odd API + + src/vtetc.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit c7cab4b852e4958e71207e90c16ea33d3d591967 +Author: Christian Persch +Date: 2012-02-15 01:59:28 +0100 + + Use a GResource for our default termcap + + configure.in | 24 +++++++++-------- + src/Makefile.am | 15 +++++++---- + src/interpret.c | 10 ++++--- + src/vte-private.h | 1 - + src/vte.c | 44 +++++++----------------------- + src/vte.gresource.xml.in | 22 +++++++++++++++ + src/vtetc.c | 69 +++++++++++++++++++++++++++++++++++++----------- + src/vtetc.h | 2 +- + termcaps/Makefile.am | 12 ++------- + 9 files changed, 117 insertions(+), 82 deletions(-) + +commit 2c12c4081b9f4e12ca5e89ddc0ab4f6b57c212f5 +Author: Kjartan Maraas +Date: 2012-01-28 22:56:06 +0100 + + Updated Norwegian bokmål translation + + po/nb.po | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +commit b568d7c40a9ba0a61dfd4ad8d63c0a3fce35d077 +Author: Christian Persch +Date: 2011-11-26 18:02:32 +0100 + + build: Add warning + + configure.in | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 45fd45ff5c4ea0d58c8cf32cfd03d7b556bb9dc8 (tag: 0.31.0) +Author: Christian Persch +Date: 2011-11-21 14:47:38 +0100 + + Version 0.31.0 + + NEWS | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 9fc22089b05cfe6c47ae8e8059a4092fa6933edc +Author: Christian Persch +Date: 2011-11-18 13:22:19 +0100 + + build: Add more compiler warnings + (cherry picked from commit 5146e22b60cbbba25e432ee8b3e08533efae65e6) + + configure.in | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 568e2488f58dd6df9d8f8c542f112e15955d1261 +Author: Christian Persch +Date: 2011-10-31 14:02:28 +0100 + + build: Use better autoconf macros to detect compiler flags support + + This fixes these autoconf warnings: + + Running aclocal-1.11... + configure.in:195: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body + ../../lib/autoconf/lang.m4:194: AC_LANG_CONFTEST is expanded from... + ../../lib/autoconf/general.m4:2591: _AC_COMPILE_IFELSE is expanded from... + ../../lib/autoconf/general.m4:2607: AC_COMPILE_IFELSE is expanded from... + configure.in:140: VTE_CC_TRY_FLAG is expanded from... + ../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... + ../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... + ../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... + configure.in:195: the top level + [etc] + + Should also fix detection of non-support for -fno-common in sun cc, + https://bugzilla.gnome.org/show_bug.cgi?id=616001 . + (cherry picked from commit e22660067676aff41db5dfc2948b603ee1f2b8c5) + + Makefile.am | 2 +- + acinclude.m4 | 319 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + configure.in | 152 +++++----------------------- + 3 files changed, 346 insertions(+), 127 deletions(-) + +commit 60e0ce9ff6b27787c47c266e779d80e3389babe9 +Author: Egmont Koblinger +Date: 2011-11-09 22:47:37 +0100 + + Add urxvt extended mouse tracking mode support + + https://bugzilla.gnome.org/show_bug.cgi?id=662423 + + src/vte-private.h | 1 + + src/vte.c | 58 +++++++++++++++++++++++++++++++++++-------------------- + src/vteseq.c | 5 +++++ + 3 files changed, 43 insertions(+), 21 deletions(-) + +commit 70128abf00fba026d85e92b1e47c0b2d69270f16 +Author: Brian Cameron +Date: 2011-10-30 19:10:16 +0100 + + Fix build with sun's cc + + https://bugzilla.gnome.org/show_bug.cgi?id=661121 + + src/vte.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit f91e8adbbdee5dccf61fc594c58b954d12bb0356 +Author: Dan Winship +Date: 2011-07-15 13:36:45 -0400 + + vte: use gtk_drag_check_threshold() + + When processing motion events, don't start selecting until the pointer + has moved at least the gtk drag threshold distance. + + Fixes the problem where, when clicking to select a terminal, you often + end up selecting a bit of text where you clicked, which is especially + annoying when you were planning to middle-button-paste something from + another window. + + https://bugzilla.gnome.org/show_bug.cgi?id=654691 + + src/vte-private.h | 1 + + src/vte.c | 34 ++++++++++++++++++++++++++-------- + 2 files changed, 27 insertions(+), 8 deletions(-) + +commit 0870312c122b55f64b41390f4315b09d338c6556 +Author: Young-Ho Cha +Date: 2011-10-28 14:10:03 +0200 + + Add runtime check for X11 display + + https://bugzilla.gnome.org/show_bug.cgi?id=660151 + + src/vtebg.c | 1 + + 1 file changed, 1 insertion(+) + +commit 62f9f45839e9c79b255c02f9d893c4898de00187 +Author: Evan Nemerson +Date: 2011-07-27 03:18:37 -0700 + + Add missing (closure) annotation on VteSelectionFunc + + Fixes #655405. + + src/vte.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e68cfbac308e98d704fbca579bab53998904c7ad +Author: Christian Persch +Date: 2011-10-27 23:10:56 +0200 + + Don't override the widget background colour + + The comment was inaccurate; we always do draw the background colour even + when the background mode is NONE. Removing the colour override makes + theme colours working again in gnome-terminal's gsettings branch. + + src/vte.c | 3 --- + 1 file changed, 3 deletions(-) + +commit e6a83f6175c2865385c80deec1f7ed79650f7d58 +Author: Christian Persch +Date: 2011-10-27 23:09:31 +0200 + + Use to GtkStyleContext + + ... instead of the obsolete GtkStyle. + + src/vte.c | 29 +++++++++++++---------------- + 1 file changed, 13 insertions(+), 16 deletions(-) + +commit f1b028951c2b79b4f01d39a2bfda1f039ba0760d +Author: Christian Persch +Date: 2011-10-27 23:12:28 +0200 + + Post branch version bump + + configure.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 4b3faee73939770d035d88bb575393f31f62ec78 +Author: Christian Persch +Date: 2011-10-17 13:14:58 +0200 + + Post release version bump + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4927c3877e73cd7c11456d4b49081c9b99f7e72f (tag: 0.30.1) +Author: Christian Persch +Date: 2011-10-16 19:51:01 +0200 + + Version 0.30.1 + + NEWS | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit c62f7da3858643735673aed7f467ce363d18520d +Author: Volkan Yalçın +Date: 2011-09-30 01:58:10 +0300 + + Updated Turkish translation + + po/tr.po | 99 +++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 44 insertions(+), 55 deletions(-) + +commit 5ab9d7f67968dcb0478dad37e76e78f49a33ee44 +Author: krishnababu k +Date: 2011-10-10 17:19:22 +0530 + + Updated Telugu Translations + + po/te.po | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +commit 57e5e748ded9fa219bdd736e84793f52a575f02b +Author: krishnababu k +Date: 2011-10-10 17:13:52 +0530 + + Updated Telugu Translations + + po/te.po | 105 ++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 46 insertions(+), 59 deletions(-) + +commit ccda1776812e619ac91fbd45ceb23866e478825a +Author: Volkan Yalçın +Date: 2011-09-30 01:55:14 +0300 + + Updated Turkish translation + + po/tr.po | 56 +++++++++++++++++++++++++------------------------------- + 1 file changed, 25 insertions(+), 31 deletions(-) + +commit aaa1b57d1b51d22e893e331d1fcf1310ae5f76d0 +Author: Christian Persch +Date: 2011-09-26 14:32:59 +0200 + + Post release version bump + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 708c2d1213d62cbc07b1af73f5452323a9f5cdb8 +Author: Christian Persch +Date: 2011-09-26 14:32:34 +0200 + + Post branch version bump + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 65c2024179edff36d1609b756fb909a3e1ccfd71 (tag: 0.30.0) +Author: Christian Persch +Date: 2011-09-24 23:18:35 +0200 + + Version 0.30.0 + + NEWS | 5 +++++ + configure.in | 4 ++-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit bfaaf4526ebae22d14fdcc68acde5b597ab7b1a8 +Author: Nilamdyuti Goswami +Date: 2011-09-24 16:44:56 +0530 + + Updated Assamese Translations:bugzilla#659595 + + po/as.po | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit d8d3bedf8406ad5531fa2e76904116170aaaf036 +Author: Nilamdyuti Goswami +Date: 2011-09-22 18:58:19 +0200 + + Updated Assamese translation + + po/as.po | 69 +++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 31 insertions(+), 38 deletions(-) + +commit a1f2b6926d8f874dca00229ef8f9fabcff03ba58 +Author: Nilamdyuti Goswami +Date: 2011-09-22 18:58:19 +0200 + + Updated Assamese translation + + po/as.po | 69 +++++++++++++++++++++++++++++----------------------------------- + 1 file changed, 31 insertions(+), 38 deletions(-) + +commit e0f4ea705f62fdb84a91bcd8bde89fc02fc012da +Author: Ihar Hrachyshka +Date: 2011-09-04 19:30:40 +0300 + + Updated Belarusian translation. + + po/be.po | 164 +++++++++++++++++++-------------------------------------------- + 1 file changed, 49 insertions(+), 115 deletions(-) + +commit 17c78db35181f14020ef6c104dbeaa08ce81fb47 +Author: Ihar Hrachyshka +Date: 2011-09-04 19:28:00 +0300 + + Updated Belarusian translation. + + po/be.po | 48 +++++++++++++++++++++--------------------------- + 1 file changed, 21 insertions(+), 27 deletions(-) + +commit 0571cba5546d722cdeceb0532f651f171f0e18a2 (tag: 0.29.1) +Author: Christian Persch +Date: 2011-08-29 13:59:28 +0200 + + Version 0.29.1 + + NEWS | 6 ++++++ + configure.in | 2 +- + 2 files changed, 7 insertions(+), 1 deletion(-) + +commit 6d07a9223f60553a0924c1577b5bc9489cd8e73b +Author: Alexandre Rostovtsev +Date: 2011-08-28 21:59:00 -0400 + + Need to set VTE_API_VERSION + + Configure needs to properly set VTE_API_VERSION to use the same library + names as previous gtk3-based vte releases, and to prevent file collisions + with gtk2-based vte. + + https://bugzilla.gnome.org/show_bug.cgi?id=657584 + + configure.in | 1 + + 1 file changed, 1 insertion(+) + +commit 9c1b149373e16e9483b8a8a1fa1fb811bfb048bb +Author: Alexandre Rostovtsev +Date: 2011-08-28 21:26:06 -0400 + + Gdk-3.0 supports multiple targets + + Gdk-3.0 supports multiple targets now, and the "target" variable no + longer works. + + [ This is an 0.29.0 port of a patch created by Nirbheek Chauhan + for 0.28.0. ] + + https://bugzilla.gnome.org/show_bug.cgi?id=657581 + + configure.in | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +commit 927246221eea55a18aadbe0150ce8e288af06dd3 (tag: 0.29.0) +Author: Christian Persch +Date: 2011-08-28 23:42:41 +0200 + + Version 0.29.0 + + NEWS | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 9bb899054922218b015aec2b8cfb734ed7a08e50 +Author: Marek Černocký +Date: 2011-08-19 09:57:52 +0200 + + Updated Czech translation + + po/cs.po | 26 ++------------------------ + 1 file changed, 2 insertions(+), 24 deletions(-) + +commit 9d9c902e3e1ad4da1fcddf554988c49a4a03b6c8 +Author: Christian Persch +Date: 2011-08-17 19:10:23 +0200 + + Remove gtk2 python bindings + + acinclude.m4 | 32 -- + configure.in | 87 ------ + python/Makefile.am | 43 --- + python/cat.py | 57 ---- + python/pyvte.pc.in | 11 - + python/unrealize.py | 51 ---- + python/vte-demo.py | 98 ------- + python/vte.defs | 818 ---------------------------------------------------- + python/vte.override | 657 ----------------------------------------- + python/vtemodule.c | 50 ---- + 10 files changed, 1904 deletions(-) + +commit 3bdb0639aa26ce1dcd745bab71a6bd5dddca6019 +Author: Mike Gorse +Date: 2011-08-16 16:13:30 -0500 + + BGO#654630: Fix accessibility with gtk+ 3.1 + + The gtk+ accessibility code was reworked in the 3.1 cycle, and the code + to fetch the accessibility type associated with GtkWidget no longer + works. At present, third-party ATK implementations for GTK widgets are + expected to derive from GtkAccessible, which implements none of the + accessibility code for standard gtk+ widgets, so copied/adapted much of + this code from the GtkWidgetAccessible implementation. + + Makefile.am | 4 - + configure.in | 43 +---- + src/vte.c | 29 +++- + src/vteaccess.c | 497 ++++++++++++++++++++++++++++++++++++++++++++------------ + 4 files changed, 423 insertions(+), 150 deletions(-) + +commit fea853b153bbf166854850e4e22df6702fe709df +Author: Christian Persch +Date: 2011-08-16 23:54:13 +0200 + + Version 0.29.0 + + configure.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit d9289c5e0d4a2b18431b2ebb9cadc6df45aa64d8 +Author: Ihar Hrachyshka +Date: 2011-07-25 11:19:05 +0300 + + Updated Belarusian translation. + + po/be.po | 161 ++++++++++++++++++++------------------------------------------- + 1 file changed, 51 insertions(+), 110 deletions(-) + +commit 0beed99e3000e8b60d8f0ab0e47f0f0865268d0c +Author: Joachim Breitner +Date: 2011-07-21 14:02:01 +0200 + + Set colors in HTML if attr->reverse is set + + src/vte.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 55c514ae6a714abcfa818c33f00a2c051412c3d9 +Author: Joachim Breitner +Date: 2011-07-21 12:08:56 +0200 + + Refactor vte_terminal_determine_colors_internal + + to work on VteCellAttr instead of VteCell, and use it in + vte_terminal_cellattr_to_html. + + src/vte.c | 47 ++++++++++++++++------------------------------- + 1 file changed, 16 insertions(+), 31 deletions(-) + +commit a054a54f6712d3c1a10fefc354ae9b05ba7b4db7 +Author: Joachim Breitner +Date: 2011-07-21 12:06:48 +0200 + + Reorder functions (no other change) + + src/vte.c | 217 +++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 109 insertions(+), 108 deletions(-) + +commit 28ff7e6cd10f3f1eb163a984eb790865e1b27b76 +Author: Joachim Breitner +Date: 2011-07-21 12:03:37 +0200 + + Transform colors according to bold, half, standout + + Otherwise, the combination of bold and some color does not give the + desired result in HTML colors. + + src/vte.c | 38 ++++++++++++++++++++++++-------------- + 1 file changed, 24 insertions(+), 14 deletions(-) + +commit 7f32fb26c1c9417b34b2f89e2a045b94ba29ab63 +Author: Joachim Breitner +Date: 2011-07-21 11:58:17 +0200 + + Generate tags + + src/vte.c | 43 ++++++++++++++++++++++++++++++++++++++----- + 1 file changed, 38 insertions(+), 5 deletions(-) + +commit cf3a13b60bf51bc5e085ead8d516025a452d69cc +Author: Joachim Breitner +Date: 2011-07-21 00:21:02 +0200 + + Switch to ancient-style HTML + + But at least you can paste a manpage into evolution and it works great. + + src/vte.c | 49 +++++++++++++++++++++++++++---------------------- + 1 file changed, 27 insertions(+), 22 deletions(-) + +commit 830de14b922789c24800e987de1db3050d0e942d +Author: Joachim Breitner +Date: 2011-07-21 00:08:24 +0200 + + Convert VteCellAttr to CSS string + + This works, but is unsatisfying. Pasting into evolution does not + preserve boldness, as it seems to expect tags. + + src/vte.c | 39 ++++++++++++++++++++++++++++++++++----- + 1 file changed, 34 insertions(+), 5 deletions(-) + +commit 512330985be3f81bc0143408d16d0e4303c27dc6 +Author: Joachim Breitner +Date: 2011-07-20 23:55:06 +0200 + + Work with VteCellAttr instead of VteCharAttributes + + because VteCellAttr are more semantic. The downside is that some weird + ways to get hold of them are required. + + src/vte.c | 52 ++++++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 42 insertions(+), 10 deletions(-) + +commit 612a9b47ac16208ee2b91a874ade73681e340460 +Author: Joachim Breitner +Date: 2011-07-20 23:37:32 +0200 + + Identify spans of equal attributes + + This works with VteCharAttributes, which unfortunately do not carry the + information we want (boldness etc.). Therefore, this is going to be + refactored further. + + src/vte.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 48 insertions(+), 4 deletions(-) + +commit 970b01983df90d0c0d10c2a306e2def16821519c +Author: Joachim Breitner +Date: 2011-07-20 22:46:14 +0200 + + Store the htmlified selection in terminal->pvt + + Just a refactoring: We "generate" html already when taking the + selection, and vte_terminal_attributes_to_html() will perform the actual + conversion. + + src/vte-private.h | 1 + + src/vte.c | 40 ++++++++++++++++++++++++++++++++++------ + src/vte.h | 3 +++ + 3 files changed, 38 insertions(+), 6 deletions(-) + +commit 68ea4d259f898112425616bdb3a597a941dd1d4b +Author: Joachim Breitner +Date: 2011-07-20 21:30:38 +0200 + + Implement text/html target + + For now without actually transferring any markup, but we do wrap the + data in
, so a possible user of the data will use fixed-width
+    fonts.
+
+ src/vte-private.h |  8 ++++++++
+ src/vte.c         | 49 ++++++++++++++++++++++++++++++++++++-------------
+ 2 files changed, 44 insertions(+), 13 deletions(-)
+
+commit 7785c154472b644770d55337b1edbd0cdbef29ff
+Author: Joachim Breitner 
+Date:   2011-07-20 21:04:25 +0200
+
+    Unify SELECTION_PRIMARY and _CLIPBOARD treatment
+    
+    By adding a custom enumeration and storing data required for either in
+    an array in terminal->pvt.
+
+ src/vte-private.h |  11 +++-
+ src/vte.c         | 148 ++++++++++++++++++++----------------------------------
+ 2 files changed, 64 insertions(+), 95 deletions(-)
+
+commit 44b05c360907f9a8570f46396af0260853161ce7
+Author: Joachim Breitner 
+Date:   2011-07-20 19:24:58 +0200
+
+    Use async clipboard API also for CLIPBOARD selection
+    
+    In preparation of supporting the HTML target as well.
+
+ src/vte-private.h |   3 ++
+ src/vte.c         | 117 +++++++++++++++++++++++++++++++++++++++---------------
+ 2 files changed, 87 insertions(+), 33 deletions(-)
+
+commit f8e59be9a8d27d0c172638bb63ee871ef5f952d1 (tag: 0.28.2)
+Author: Behdad Esfahbod 
+Date:   2011-07-04 10:16:31 -0400
+
+    Revert "gitignore: Add generated *.pot files in po/ subdirectory"
+    
+    This reverts commit 62736f9eccd7eed23bee6c73c862ea1075b47c99.
+
+ .gitignore | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 388cabe41bdbaff8bf6f8b39be786cbe4611e94e
+Author: Behdad Esfahbod 
+Date:   2011-07-04 10:16:09 -0400
+
+    Revert "gitignore: Add generated *.pot files in po/ subdirectory"
+    
+    This reverts commit 570ca69c9e6996b3c2848a43509e55d9ddc4a235.
+
+ .gitignore | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 62736f9eccd7eed23bee6c73c862ea1075b47c99
+Author: Tommi Vainikainen 
+Date:   2011-07-04 14:12:00 +0300
+
+    gitignore: Add generated *.pot files in po/ subdirectory
+
+ .gitignore | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 5879114f81ec4eabfd42b3841f560283a0814cb3
+Author: Tommi Vainikainen 
+Date:   2011-07-04 14:11:29 +0300
+
+    Updated Finnish translation
+
+ po/fi.po | 88 ++++++++++++++++++++++------------------------------------------
+ 1 file changed, 30 insertions(+), 58 deletions(-)
+
+commit 570ca69c9e6996b3c2848a43509e55d9ddc4a235
+Author: Tommi Vainikainen 
+Date:   2011-07-04 14:12:00 +0300
+
+    gitignore: Add generated *.pot files in po/ subdirectory
+
+ .gitignore | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 551da0e982edd1b6dfef471f38cf64938fbf2aa9
+Author: Tommi Vainikainen 
+Date:   2011-07-04 14:11:29 +0300
+
+    Updated Finnish translation
+
+ po/fi.po | 88 ++++++++++++++++++++++------------------------------------------
+ 1 file changed, 30 insertions(+), 58 deletions(-)
+
+commit 88d748a106e137baeef660c354bd54ed82efff86 (tag: 0.28.1)
+Author: Christian Persch 
+Date:   2011-06-14 23:38:20 +0200
+
+    Version 0.28.1
+
+ NEWS | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit ac71d26f067be3a21bff315c3cabf24c94360dd6
+Author: Christian Persch 
+Date:   2011-06-10 17:31:58 +0200
+
+    [CVE-2011-2198] Limit insert-blank-characters
+    
+    Bug #652124.
+
+ src/vteseq.c | 27 ++++++++++++++++++++++-----
+ 1 file changed, 22 insertions(+), 5 deletions(-)
+
+commit cadfb9b5a43791034f38b562bb6f58d1b4513844
+Author: Christian Persch 
+Date:   2011-06-10 17:31:58 +0200
+
+    [CVE-2011-2198] Limit insert-blank-characters
+    
+    Bug #652124.
+
+ src/vteseq.c | 27 ++++++++++++++++++++++-----
+ 1 file changed, 22 insertions(+), 5 deletions(-)
+
+commit 97bf37f7a61c45792b116ea1957daa0b043bf4de
+Author: Javier Jardón 
+Date:   2011-06-13 15:22:58 +0100
+
+    vteseq: Use 'const' instead deprecated G_CONST_RETURN
+
+ src/vteseq.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 71f0d11b4ae9d1651808d1c71345ae26d384083c
+Author: Christian Persch 
+Date:   2011-05-30 17:56:16 +0200
+
+    Don't notify nonexisting property
+
+ src/vte.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit c5529f4a4cd8896e5daeab4946c5a8820810d88e
+Author: Carles Ferrando 
+Date:   2011-05-29 19:12:50 +0200
+
+    [l10n]Updated Catalan (Valencian) translation
+
+ po/ca@valencia.po | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+commit 07a03020cabab719d824c525d58cd735a70856e9
+Author: Carles Ferrando 
+Date:   2011-05-29 19:12:39 +0200
+
+    [l10n]Updated Catalan (Valencian) translation
+
+ po/ca@valencia.po | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+commit ff8a58b8464188f8241bcc8e16a5585a2d40cc87
+Author: Daniel Martinez Cucalon 
+Date:   2011-05-09 18:22:21 +0200
+
+    Added Aragonese translation
+
+ po/LINGUAS |  1 +
+ po/an.po   | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 88 insertions(+)
+
+commit 93ecff2136d61b639dccf0bd282761c292bd7589
+Author: Muhammet Kara 
+Date:   2011-04-26 02:03:26 +0300
+
+    Updated Turkish translation
+
+ po/tr.po | 93 ++++++++++++++++++++++++++++++----------------------------------
+ 1 file changed, 44 insertions(+), 49 deletions(-)
+
+commit 276b3f60dcab2ae25644254f808c905ac460fe2e
+Author: Jordi Serratosa 
+Date:   2011-04-05 23:09:08 +0200
+
+    [l10n]Fixes on Catalan translation
+
+ po/ca.po | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 4a4bce656bf3fa2e57caa27e31866e16b26f8aea
+Author: Christian Persch 
+Date:   2011-04-04 14:09:58 +0200
+
+    Post branch version bump
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 98f05a28ae9a6429cc9b77b98a6c174d2c2233f3
+Author: Christian Persch 
+Date:   2011-04-04 14:08:56 +0200
+
+    Post release version bump
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 56def42f554720a8d91da1aee32c66cbeef406e2 (tag: 0.28.0)
+Author: Christian Persch 
+Date:   2011-04-03 23:06:23 +0200
+
+    Version 0.28.0
+
+ NEWS         | 6 ++++++
+ configure.in | 4 ++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 6450f121b8fb210a34eec8c6841153d20695934c
+Author: Behdad Esfahbod 
+Date:   2011-03-29 14:41:19 -0400
+
+    Fix docs
+
+ src/pty.c | 13 +++++--------
+ 1 file changed, 5 insertions(+), 8 deletions(-)
+
+commit 1bca2ba0a347c962cdf245da49c6d7399d7c3dc0
+Author: Behdad Esfahbod 
+Date:   2011-01-22 15:41:38 -0500
+
+    Add OSC 12 cursor color to the osc script
+
+ src/osc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 6ae9903f33dc68b67b49dbb23691965be86662b5
+Author: Abduxukur Abdurixit 
+Date:   2011-03-27 21:55:21 +0200
+
+    Added UG translation
+
+ po/ug.po | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c0ca7cdbcdf0ecb3bb1ebbcf729d60d662461c31
+Author: Runa Bhattacharjee 
+Date:   2011-03-24 20:01:36 +0530
+
+    Updated Bengali India Translation
+
+ po/bn_IN.po | 108 ++++++++++++++++++++++++++++--------------------------------
+ 1 file changed, 50 insertions(+), 58 deletions(-)
+
+commit 9dbb8153360e230dc06426311b002fd183d0dc2b
+Author: Amitakhya Phukan 
+Date:   2011-03-21 12:25:34 +0530
+
+    Updated Assamese translations
+
+ po/as.po | 47 +++++++++++++++++++++++++----------------------
+ 1 file changed, 25 insertions(+), 22 deletions(-)
+
+commit e17b13133c7f16afd53bd805dbb094db377c47fe
+Author: Marcel Telka 
+Date:   2011-03-20 16:40:54 +0100
+
+    Updated Slovak translation
+
+ po/sk.po | 95 ++++++++++++++++++++++------------------------------------------
+ 1 file changed, 33 insertions(+), 62 deletions(-)
+
+commit 4b26aff1ed9f2cc8e31e798298f2bd73043a9fc3
+Author: Miroslav Nikolić 
+Date:   2011-03-19 15:09:17 +0100
+
+    Reviewed Serbian translation
+
+ po/sr.po       | 73 ++++++++++++++++++++++++++--------------------------------
+ po/sr@latin.po | 69 +++++++++++++++++++++++++-----------------------------
+ 2 files changed, 64 insertions(+), 78 deletions(-)
+
+commit 7e34e293bb465da788a5ce9addfd9fe7dceae878
+Author: Manoj Kumar Giri 
+Date:   2011-03-04 15:52:07 +0530
+
+    Updated Oriya Translation
+
+ po/or.po | 92 +++++++++++++++++++++++++++++-----------------------------------
+ 1 file changed, 42 insertions(+), 50 deletions(-)
+
+commit b9c3e3bc182e5f950ae7110751523ef1a710fa11
+Author: Rudolfs Mazurs 
+Date:   2011-02-28 23:54:46 +0200
+
+    Updated Latvian translation.
+
+ po/lv.po | 42 ++++++++++++++++++++++--------------------
+ 1 file changed, 22 insertions(+), 20 deletions(-)
+
+commit 61ff01fc2ed66fa2b9611014486fb35e8260f958
+Author: Sweta Kothari 
+Date:   2011-02-28 14:15:28 +0530
+
+    Updated Gujarati Translations
+
+ po/gu.po | 102 ++++++++++++++++++++++++---------------------------------------
+ 1 file changed, 38 insertions(+), 64 deletions(-)
+
+commit 227fc807a536041178696c5d8cdccfb416d3c67a
+Author: Maciej Piechotka 
+Date:   2011-02-13 15:43:55 +0000
+
+    Update gladeui for glade 4.0 (3.9.x)
+
+ configure.in | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+commit 63f2327d9b03a67cab9dd910af504d1ecb8112f8
+Author: Kjartan Maraas 
+Date:   2011-02-23 09:51:35 +0100
+
+    Updated Norwegian bokmål translation.
+
+ po/nb.po | 37 +++++++++++++++++++------------------
+ 1 file changed, 19 insertions(+), 18 deletions(-)
+
+commit aec26917e31291ecfb892761ddb7899ae4370ce0 (tag: 0.27.90)
+Author: Christian Persch 
+Date:   2011-02-21 17:37:29 +0100
+
+    Version 0.27.90
+
+ NEWS         | 5 +++++
+ configure.in | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 841b0ee578d09ada0f0c43d8dd22a49785da4e5b
+Author: Christian Persch 
+Date:   2011-02-21 17:38:02 +0100
+
+    Remove gsettings enum stuff
+
+ configure.in                   |  6 ------
+ src/Makefile.am                |  8 --------
+ src/org.gnome.vte.v0.enums.xml | 28 ----------------------------
+ 3 files changed, 42 deletions(-)
+
+commit e7d3f3c118bbc39805736323f6e9fe572eb71ab8
+Author: Christian Persch 
+Date:   2011-02-16 20:42:18 +0100
+
+    Add version marker to new API
+
+ src/vte.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 219ea41b4382ab43ddb6b826d62a5401aab20e6e
+Author: Christian Persch 
+Date:   2011-02-16 20:34:41 +0100
+
+    Export vte_get_user_shell()
+    
+    Bug #642184. Also fixes bug #640179.
+
+ doc/reference/vte-sections.txt |  3 +++
+ src/Makefile.am                |  2 +-
+ src/vte.c                      | 58 +++++++++++++++++++-----------------------
+ src/vte.h                      |  2 ++
+ src/vteapp.c                   |  3 +++
+ 5 files changed, 35 insertions(+), 33 deletions(-)
+
+commit de22ca4f72bcf7f60afc4d948d04018b5cdbde7b
+Author: Christian Persch 
+Date:   2011-02-14 23:20:46 +0100
+
+    Require gtk 3.0.0
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 4973121f747cb9519ed149d7c90b596f9bcabee3
+Author: Daniel Korostil 
+Date:   2011-02-08 20:22:20 +0200
+
+    Uploaded Ukranian
+
+ po/uk.po | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f01e298c01f7b2bb23d00e209550bebcef494485
+Author: Daniel Korostil 
+Date:   2011-02-08 20:16:56 +0200
+
+    Uploaded Ukranian
+
+ po/uk.po | 123 +++++++++++++++++++++++++++++----------------------------------
+ 1 file changed, 56 insertions(+), 67 deletions(-)
+
+commit 2681c8e440a955ec75c1eb9830a653f64a32380f
+Author: Christian Persch 
+Date:   2011-02-06 00:28:55 +0100
+
+    Add new struct
+
+ doc/reference/vte-sections.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 3597b3adf026e87e6c7edc40115aa23c098abccd
+Author: Christian Persch 
+Date:   2011-02-06 00:24:51 +0100
+
+    Add index with symbols new in 0.28
+
+ doc/reference/vte-docs.xml | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 1c55bed8025942925f2e9760a9461020bc634e86
+Author: Ignacio Casal Quinteiro 
+Date:   2011-01-25 12:31:31 +0100
+
+    Add RGBA variants to set colors.
+
+ doc/reference/vte-sections.txt |   7 ++
+ src/vte.c                      | 207 +++++++++++++++++++++++++++++++++++++++++
+ src/vte.h                      |  21 +++++
+ 3 files changed, 235 insertions(+)
+
+commit 0ac349af9c34094763f27d66fa7a2c1901576afa
+Author: Christian Persch 
+Date:   2011-02-03 14:03:06 +0100
+
+    Lower intltool req again
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 15a5ebd5de88b2145bee53ea7230d2dca6cc9a20
+Author: Mahyar Moghimi 
+Date:   2011-02-03 12:45:34 +0330
+
+    Updating Persian Translation
+
+ po/fa.po | 115 +++++++++++++++++++++++++++++----------------------------------
+ 1 file changed, 52 insertions(+), 63 deletions(-)
+
+commit 1b6d84b8b795b5aa01d1ef5d95dbf9e58554128e
+Author: Christian Persch 
+Date:   2011-02-02 19:00:23 +0100
+
+    There are no macros
+
+ Makefile.am  | 2 +-
+ configure.in | 1 -
+ 2 files changed, 1 insertion(+), 2 deletions(-)
+
+commit 31b4047a51ac48264b735a8be24fdddd3b086acc
+Author: Christian Persch 
+Date:   2011-02-02 18:45:41 +0100
+
+    Add default style provider
+    
+    This fixes the default value for the 'inner-border' property not
+    to be NULL.
+    
+    Bug #640460.
+
+ configure.in      |  2 +-
+ src/vte-private.h |  5 +++++
+ src/vte.c         | 29 +++++++++++++++++++++++++++--
+ 3 files changed, 33 insertions(+), 3 deletions(-)
+
+commit 1c114685f684941e28f60b1440bc0e5effd9b770
+Author: Christian Persch 
+Date:   2011-02-02 18:08:15 +0100
+
+    Don't shadow a global definition
+
+ src/ring.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit cc095a66991be940dffa59cfeb09d27b820ff636
+Author: Christian Persch 
+Date:   2011-02-02 18:06:24 +0100
+
+    Remove unused variables
+
+ src/vte.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit ca772ef8e9113a8c4599a43b717ab0e67c0b7c14
+Author: Christian Persch 
+Date:   2011-02-02 18:05:17 +0100
+
+    Remove obsolete signal IDs in class struct
+    
+    ... and add more padding. gtk3 only, so no ABI change.
+
+ src/vte.c | 62 +++++++++++++++++++++++++++++++++++---------------------------
+ src/vte.h | 16 +++++++++++++---
+ 2 files changed, 48 insertions(+), 30 deletions(-)
+
+commit a34652e11339722ecad0079dc9ad85de191deffb
+Author: Christian Persch 
+Date:   2011-02-02 17:48:57 +0100
+
+    Lower am req again
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f46b5c288c9b1222cf614f22c1d1f53f1ee60c56
+Author: Christian Persch 
+Date:   2011-02-02 17:49:06 +0100
+
+    Revert "Use the recommended configure.ac instead configure.in"
+    
+    This reverts commit 765f1087eced3d19768a7ebd98500e5ff3df8a1a.
+    
+    Renaming breaks automatic reconfiguring from make during git bisect.
+
+ autogen.sh                   | 2 +-
+ configure.ac => configure.in | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 2cce4ae4d5599b131b5f53340f636630bf1cf6d9
+Author: Javier Jardón 
+Date:   2011-02-02 13:35:24 +0000
+
+    build: Update autotools configuration
+    
+    Replace deprecated macros and use the new libtool syntax
+
+ Makefile.am  |  2 ++
+ autogen.sh   |  7 +------
+ configure.ac | 31 +++++++++++++++++--------------
+ 3 files changed, 20 insertions(+), 20 deletions(-)
+
+commit 765f1087eced3d19768a7ebd98500e5ff3df8a1a
+Author: Javier Jardón 
+Date:   2011-02-02 13:23:19 +0000
+
+    Use the recommended configure.ac instead configure.in
+
+ autogen.sh                   | 2 +-
+ configure.in => configure.ac | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 45c73fc2a9aaf166056c7f29aec7bdf8cd8d165f
+Author: Javier Jardón 
+Date:   2011-02-02 13:21:32 +0000
+
+    configura.in: Check for >= version of glib, not only >
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a9200f9dd2852a358cf6644f197e5bda87790001
+Author: Matthias Clasen 
+Date:   2011-02-02 02:21:10 -0500
+
+    Post-release bump
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 80239d8e93b9db3dca976e4ed520c38d394dedb2 (tag: 0.27.5)
+Author: Matthias Clasen 
+Date:   2011-02-02 02:14:46 -0500
+
+    Updates
+
+ NEWS | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 437b412c8010fa0fbee022235f3ddb9fd4d3fd3a
+Author: Fran Diéguez 
+Date:   2011-01-27 00:41:50 +0100
+
+    QA of Galician translations
+
+ po/gl.po | 38 ++++++++++++++++++++------------------
+ 1 file changed, 20 insertions(+), 18 deletions(-)
+
+commit 86225e5f053bf8bfb3e851fda437455624514eec
+Author: Matthias Clasen 
+Date:   2011-01-16 11:07:14 -0500
+
+    Don't use internal GTK+ api
+    
+    GtkTargetPair was always documented as private, and in
+    GTK+ 3 it is gone from the headers. Just use existing API.
+
+ src/vte.c | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+commit 4553d0294a6095ce9f5215a8af273a7decac8740
+Author: Matthias Clasen 
+Date:   2011-01-11 14:15:35 -0500
+
+    Bump version
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit dda7b5036acc1ca95c71eb0d5f3d4fb1590a4508 (tag: 0.27.4)
+Author: Matthias Clasen 
+Date:   2011-01-11 13:40:51 -0500
+
+    Updates
+
+ NEWS | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit 63ad8cf6c00c92e959e7856b6529281892a63d59
+Author: Behdad Esfahbod 
+Date:   2011-01-05 20:20:39 -0500
+
+    Bug 638782 - vte build is broken by using gtk_quit_add: uplift needed
+    
+    Harmlessly remove cleanup...
+
+ src/vtedraw.c | 41 -----------------------------------------
+ 1 file changed, 41 deletions(-)
+
+commit b33feb45bff370ad860685923e3616a3583b281d
+Author: Cristian Klein 
+Date:   2011-01-05 19:36:38 +0000
+
+    Prevent useless wakeups when the focus is lost.
+    
+    When running powertop in a gnome-terminal window, gnome-terminal is
+    shown to generate 1.6 wakeups/second. This is caused by the fact that
+    the cursor blink timer is not disable when the cursor is hidden.
+
+ src/vte-private.h |  1 +
+ src/vte.c         | 48 +++++++++++++++++++++++++++---------------------
+ 2 files changed, 28 insertions(+), 21 deletions(-)
+
+commit d64e28b3290aaf034ec37bbf4524ef78adbdfb2e
+Author: Behdad Esfahbod 
+Date:   2011-01-05 02:03:49 -0500
+
+    Bug 589557 - Ctrl+ sends erroneous value when primary keyboard layout is not English
+    
+    Fix it to match what xterm is doing.
+
+ src/vte.c | 42 +++++++++++++++++++++++++-----------------
+ 1 file changed, 25 insertions(+), 17 deletions(-)
+
+commit fc7eb565f48d3ddc311bb0296177860b58eb311e
+Author: Ignacio Casal Quinteiro 
+Date:   2010-12-30 21:15:01 +0100
+
+    Fix annotations of fork_command_full.
+    
+    Some annotations were removed in the previous commit, it was wrong
+    and it must be readded.
+
+ src/vte.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit f7c5b8e77d4143031fe5e32437728f357ef94015
+Author: Ignacio Casal Quinteiro 
+Date:   2010-12-27 20:25:49 +0100
+
+    Make fork_command_full introspectable.
+
+ src/vte.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit 0017f00af763f7778cf19153d234a58304104ba4
+Author: Gheyret T.Kenji 
+Date:   2010-12-23 19:42:18 +0100
+
+    Added UG translation
+
+ po/ug.po | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7c5709cfce74ac1bed351a013600da1483ce8279
+Author: Vincent Untz 
+Date:   2010-12-23 14:13:38 +0100
+
+    release: post-release bump to 0.27.4
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 435b8ffe9166bba9dd9ac663db5a3ccfff8b4e26 (tag: 0.27.3)
+Author: Vincent Untz 
+Date:   2010-12-23 14:13:31 +0100
+
+    release: 0.27.3
+
+ NEWS | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+commit 70c9222ba95931495dde123fcc427bcc8bcef08d
+Author: Ignacio Casal Quinteiro 
+Date:   2010-12-21 16:52:33 +0100
+
+    Fix annotations. No need to annotate the strings.
+    
+    See as example gtk_text_buffer_insert.
+
+ src/vte.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit b916a4d3f369d4357697ebd0d00e2b01b5c50c5c
+Author: Ignacio Casal Quinteiro 
+Date:   2010-12-21 16:44:39 +0100
+
+    Add --warn-all flag.
+
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 66dedcb732b31a141656c6f05ec2d3bbe7c4cf40
+Author: Ivar Smolin 
+Date:   2010-12-20 13:58:06 +0200
+
+    [l10n] Updated Estonian translation
+
+ po/et.po | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 728bc476c024987007c0856db44eff483a43902c
+Author: Ignacio Casal Quinteiro 
+Date:   2010-12-04 13:47:42 +0100
+
+    Bump gobject-introspection to 0.9.0
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f9fcec517d4125eabe93dcdc5002b615e275ff42
+Author: Christian Persch 
+Date:   2010-12-02 21:06:48 +0100
+
+    Fix build with gtk3 master
+
+ configure.in | 2 +-
+ src/vtebg.c  | 5 +++--
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+commit 4fa7d35b7d454a06b3700b2b52021b61ef4ac426
+Author: Theppitak Karoonboonyanan 
+Date:   2010-11-23 16:32:49 +0700
+
+    Updated Thai translation.
+
+ po/th.po | 104 +++++++++++++++++++++++++++++----------------------------------
+ 1 file changed, 47 insertions(+), 57 deletions(-)
+
+commit f05ddeca7ed710db16dfc183ab9bc48150baa695
+Author: Gheyret T.Kenji 
+Date:   2010-11-20 13:05:34 +0100
+
+    Added UG translation
+
+ po/ug.po | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+commit 56472c1940a9df55edd134fc5d3c74ada67ad37b
+Author: Christian Persch 
+Date:   2010-11-17 18:21:07 +0100
+
+    Clarify error message
+    
+    Bug #628870.
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 64f03be0c97d3941f259e20cc6d7a12d3a329770
+Author: Christian Persch 
+Date:   2010-11-16 20:47:56 +0100
+
+    Don't use the automatic rules for .enums.xml generation
+    
+    The generated file isn't very nice, so put a fixed-up copy
+    in git, dist and install it.
+
+ src/Makefile.am                |  7 ++++---
+ src/org.gnome.vte.v0.enums.xml | 28 ++++++++++++++++++++++++++++
+ 2 files changed, 32 insertions(+), 3 deletions(-)
+
+commit de948ce4b0d63a1e37cfc85c3b3da82397758873
+Author: Christian Persch 
+Date:   2010-11-16 20:36:25 +0100
+
+    Change .enums.xml namespace
+
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 187cdd3089b67613bbb3757f16897cbfeb315aa2
+Author: Christian Persch 
+Date:   2010-11-16 20:21:26 +0100
+
+    Create and install a gsettings .enums.xml file for vte's enum types
+
+ configure.in    | 8 +++++++-
+ src/Makefile.am | 9 +++++++++
+ 2 files changed, 16 insertions(+), 1 deletion(-)
+
+commit e21f7da2881bbb9ba863398728e194c7acfcfc50
+Author: Gheyret T.Kenji 
+Date:   2010-11-13 23:01:05 +0100
+
+    Added UG translation
+
+ po/ug.po | 31 ++++++++++++-------------------
+ 1 file changed, 12 insertions(+), 19 deletions(-)
+
+commit a09849b392ab1065c10225a390f669e061047932
+Author: Christian Persch 
+Date:   2010-11-11 14:32:35 +0100
+
+    Post release version bump
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9d9b0ab63422b0ece31a4fceddf17348ab9bed36 (tag: 0.27.2)
+Author: Javier Jardón 
+Date:   2010-11-09 03:46:39 +0100
+
+    Use gtk_paned_new() instead gtk_[h|v]paned_new()
+
+ src/reflect.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit d512516528a5951c81a8be7f8d47f10c52f7ac13
+Author: Brandon Ehle 
+Date:   2010-10-31 01:43:34 -0700
+
+    Fix a compile error when using an older version of GTK+.
+
+ src/vte.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit a6c009841f7917bac1a2a16bbb0d921ba4b8bf0d
+Author: Carles Ferrando 
+Date:   2010-10-29 21:49:51 +0100
+
+    Updated Catalan (Valencian) translation
+
+ po/ca@valencia.po | 56 ++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 26 insertions(+), 30 deletions(-)
+
+commit a3de47da0a42892d01fc4b6b90a5ec2728b26787
+Author: Christian Persch 
+Date:   2010-10-26 13:44:37 +0200
+
+    Add missing break
+
+ src/vte.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit f75f5a42aa3bbba44e91ca4a58396139a3883eb3
+Author: Christian Persch 
+Date:   2010-10-26 13:44:21 +0200
+
+    Add missing break
+
+ src/vte.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit ba49f082e6ba59a37d9ad2740ecb3ba4209a6c42
+Author: Christian Persch 
+Date:   2010-10-26 13:41:05 +0200
+
+    Implement [hv]scroll-policy properties
+
+ src/vte-private.h |  8 ++++++++
+ src/vte.c         | 42 ++++++++++++++++++++++++++++++++++++++----
+ 2 files changed, 46 insertions(+), 4 deletions(-)
+
+commit 85b7996647b171f82910538e2a9c90a6d359d1a2
+Author: Christian Persch 
+Date:   2010-10-24 20:12:03 +0200
+
+    Implement GtkScrollable interface on gtk3
+
+ src/vte.c           | 75 ++++++++++++++++++++++++++++++++++++++++++++++-------
+ src/vte.h           |  5 ++++
+ src/vtedeprecated.h |  4 +++
+ 3 files changed, 75 insertions(+), 9 deletions(-)
+
+commit cc497d0eae579f7b67adc92a93225326e32beefe
+Author: Christian Persch 
+Date:   2010-10-18 16:07:35 +0200
+
+    Post release version bump
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 51a75752f3df876c4a96b6f9030ebc79afbf6c6a (tag: 0.27.1)
+Author: Christian Persch 
+Date:   2010-10-18 16:03:17 +0200
+
+    Add cast to fix compiler warning
+
+ src/vteapp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5278c3f3f0cdc5bfa741a5b5579d5da2aeda0079
+Author: Christian Persch 
+Date:   2010-10-18 16:02:08 +0200
+
+    Version 0.27.1
+
+ NEWS | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+commit 80676b14ddc84ea28571501ec78fd9fc885446b8
+Author: Christian Persch 
+Date:   2010-10-16 00:02:07 +0200
+
+    Plug refcount leak
+    
+    The leaked VtePty leaked FDs, too. Bug #632257.
+
+ src/vte.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 2944c2ac799a8c73f488d83ab5912936f6a0f766
+Author: Gintautas Miliauskas 
+Date:   2010-10-13 16:10:24 +0300
+
+    Updated Lithuanian translation.
+
+ po/lt.po | 113 ++++++++++++++++++++++++++++-----------------------------------
+ 1 file changed, 50 insertions(+), 63 deletions(-)
+
+commit 7d0eb2ff215709712d80577521a22979490126e5
+Author: Owen W. Taylor 
+Date:   2010-10-11 13:22:31 -0400
+
+    Report correct minimum/natural sizes for GTK+ 3
+    
+    In GTK+ 3, the hack of reporting the current size of the terminal
+    as its minimum size breaks down because GTK+ 3 will never allocate
+    a widget smaller than its minimum size. However, in GTK+ 3 it's
+    possible to report separate minimum and natural sizes, so we
+    should just report a minimum size of 1x1 character and a natural
+    size of the current size.
+    
+    This requires a change in vteapp.c to make the window start off
+    at the right size.
+    
+    https://bugzilla.gnome.org/show_bug.cgi?id=631903
+
+ src/vte.c    | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vteapp.c | 10 +++++++++
+ 2 files changed, 77 insertions(+)
+
+commit 552cfed9ad796ee8ea34b0182aa63a2a5e7abfb3
+Author: Changwoo Ryu 
+Date:   2010-10-09 08:33:01 +0900
+
+    Updated Korean translation
+
+ po/ko.po | 66 ++++++++++++++++++++--------------------------------------------
+ 1 file changed, 20 insertions(+), 46 deletions(-)
+
+commit e5fd6c3cda63cad2e3d7af8728a168b90eb009dc
+Author: Tomeu Vizoso 
+Date:   2010-10-07 12:57:45 +0200
+
+    Pass the correct TERM value inside envp when spawning
+    
+    So the codepaths that end up invoking execve still have the correct
+    TERM entry. Clarify the effect of vte_pty_set_term().
+    
+    https://bugzilla.gnome.org/show_bug.cgi?id=631589
+
+ src/pty.c | 19 ++++++++-----------
+ src/vte.c | 32 ++------------------------------
+ 2 files changed, 10 insertions(+), 41 deletions(-)
+
+commit 89336f820dabf3d0ae2f55d76d4af4c70c3004f6
+Author: Christian Persch 
+Date:   2010-10-05 16:34:54 +0200
+
+    Don't install the test programmes and scripts
+
+ src/Makefile.am | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+commit 89cb5538c3d1a7b825faa78f23106ee957442dee
+Author: Christian Persch 
+Date:   2010-10-05 00:40:52 +0200
+
+    Vary termcap file into for gtk2/3 builds
+
+ src/Makefile.am      | 3 ++-
+ src/interpret.c      | 3 +--
+ src/vte.c            | 9 +++++----
+ termcaps/Makefile.am | 2 +-
+ 4 files changed, 9 insertions(+), 8 deletions(-)
+
+commit 89c61bb589eb99a7f70f96f0550fdda4e3151706
+Author: Christian Persch 
+Date:   2010-10-04 14:16:04 +0200
+
+    Post release version bump
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit bc02908854e9b2c396427a24cb8fb36afe2cb818 (tag: 0.27.0)
+Author: Christian Persch 
+Date:   2010-10-04 14:11:12 +0200
+
+    Bump gtk 3 req
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b38176cf75284d2cb5530b071415a1b6465aa0f5
+Author: Christian Persch 
+Date:   2010-10-04 14:09:28 +0200
+
+    Distcheck with gtk 3 now
+
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 21f66f796766f22df087d9011aad29a59030e765
+Author: Behdad Esfahbod 
+Date:   2010-10-01 16:03:24 -0400
+
+    Whitespace
+
+ src/vteapp.c | 222 +++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 111 insertions(+), 111 deletions(-)
+
+commit 81e166f3f7ef206b58296e41afa9c93af26a85f7
+Author: Behdad Esfahbod 
+Date:   2010-10-01 16:02:09 -0400
+
+    Remove unnecessary conditional
+
+ src/vteapp.c | 33 ++++++++++++++++-----------------
+ 1 file changed, 16 insertions(+), 17 deletions(-)
+
+commit f97b8b8a41a5ace2995cc663dba624a82ce65670
+Author: Behdad Esfahbod 
+Date:   2010-10-01 16:01:20 -0400
+
+    [vteapp] Prefer $SHELL to /bin/sh
+
+ src/vteapp.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit 332bd39b2e85bba165dca2a37d4fa3d53e2ce6ff
+Author: Inaki Larranaga Murgoitio 
+Date:   2010-10-01 00:21:13 +0200
+
+    Updated Basque language
+
+ po/eu.po | 96 +++++++++++++++++++++++++++-------------------------------------
+ 1 file changed, 41 insertions(+), 55 deletions(-)
+
+commit 8e292f603ea78e00ee707aed3614a55cf908f292
+Author: Gheyret Kenji 
+Date:   2010-10-01 00:16:25 +0200
+
+    Added UG translation
+
+ po/ug.po | 134 ++++++++++++++++++++++++++++++---------------------------------
+ 1 file changed, 64 insertions(+), 70 deletions(-)
+
+commit 48a7718d143a03b28b4c708e054c1ea6f44c942a
+Author: Behdad Esfahbod 
+Date:   2010-09-28 15:02:08 -0400
+
+    Revert "Revert 9370647823ce29c1088c351381a07a5506b74c84"
+    
+    This reverts commit dab50851a395069492218115caf44361b742b20c.
+    
+    Again, set widget background color to the terminal background color.
+    This removes flicker when resizing the terminal/widget.
+
+ src/vte.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 5f64a707e562598be0432a56d5bdeea9962e7add
+Author: Christian Persch 
+Date:   2010-09-28 19:50:29 +0200
+
+    Use gtk_widget_set_visual
+
+ src/vteapp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8d71032c172285be94d34c01cb891f110dcbb925
+Author: Christian Persch 
+Date:   2010-09-28 16:02:56 +0200
+
+    Fix the gtk 2 build
+
+ src/vtebg.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit cde73f4896e82b13edb112bfd5f510ed2740d2df
+Author: Christian Persch 
+Date:   2010-09-24 14:53:07 +0200
+
+    Use gdk_error_trap_pop_ignored
+
+ src/vte-gtk-compat.h | 4 ++++
+ src/vtebg.c          | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit aeb607a958f96648d78496459ca6aebda9fd0324
+Author: Christian Persch 
+Date:   2010-09-21 13:58:52 +0200
+
+    Don't use gdk_drawable_get_size
+
+ src/vteaccess.c | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+commit b0a12909c0df9a8818923ef8af663a18d60a768c
+Author: Christian Persch 
+Date:   2010-09-14 18:08:52 +0200
+
+    Port to latest rendering-cleanup-next branch
+
+ src/vte.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+commit 21a064ac8b5925108b0ab9bd6516664c8cd3e268
+Author: Christian Persch 
+Date:   2010-09-13 21:44:50 +0200
+
+    Use cairo_copy_clip_rectangle_list() to recreate the clip region
+    
+    Thanks to Behdad for the hint, and for pointing out a bug in my
+    first attempt.
+
+ src/vte.c | 48 ++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 44 insertions(+), 4 deletions(-)
+
+commit 6a7f6538aaaf81e5ef755c6660dcca8311835ca1
+Author: Christian Persch 
+Date:   2010-09-13 16:27:13 +0200
+
+    Port to GtkWidget::draw
+    
+    ... to work with the rendering-cleanup-next branch of gtk.
+    
+    Need to think what will happen with the update_regions.
+
+ src/vte.c | 45 +++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 43 insertions(+), 2 deletions(-)
+
+commit e69b4c1bb4de66d432a1592a50daba1b105a6b64
+Author: Christian Persch 
+Date:   2010-09-11 12:39:03 +0200
+
+    Fix build with gtk 3 rendering cleanup branch
+
+ src/vte.c    | 22 ++++++++++++++++------
+ src/vteapp.c | 10 ++++++++++
+ src/vtebg.c  |  4 ++++
+ 3 files changed, 30 insertions(+), 6 deletions(-)
+
+commit 65dfcff5ab1a60d1761581e341c8c8a00fc89c5d
+Author: Christian Persch 
+Date:   2010-09-26 16:24:03 +0200
+
+    Post branch version bump
+
+ configure.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 4f1df545bf8ac5439d38bd2415b49edefb56eba5
+Author: Lucian Adrian Grijincu 
+Date:   2010-09-25 12:34:30 +0300
+
+    Updated Romanian translation
+
+ po/ro.po | 72 +++++++++++++++++++++++++++++++++-------------------------------
+ 1 file changed, 37 insertions(+), 35 deletions(-)
+
+commit 252ced33f6930fb54704d9aef2011bf530b7adfe
+Author: Yuri Myasoedov 
+Date:   2010-09-22 09:15:28 +0400
+
+    Updated Russian translation
+
+ po/ru.po | 119 ++++++++++++++++++++++++---------------------------------------
+ 1 file changed, 45 insertions(+), 74 deletions(-)
+
+commit dab50851a395069492218115caf44361b742b20c
+Author: Behdad Esfahbod 
+Date:   2010-09-20 22:23:39 -0400
+
+    Revert 9370647823ce29c1088c351381a07a5506b74c84
+    
+    Was not needed anymore.  For details see:
+    
+    Bug 621902 - artifacts shown at the button of maximized terminal after
+    minimizing another window over it
+
+ src/vte.c | 8 --------
+ 1 file changed, 8 deletions(-)
+
+commit 43936cabba157cf9704680bcb5c71bb2324aadc2
+Author: Daniel S. Koda 
+Date:   2010-09-20 08:58:25 -0300
+
+    Updated Brazilian Portuguese translation
+
+ po/pt_BR.po | 121 ++++++++++++++----------------------------------------------
+ 1 file changed, 28 insertions(+), 93 deletions(-)
+
+commit 25c56f2d644340d2216cd4df4ee2c377fc17db85
+Author: Wouter Bolsterlee 
+Date:   2010-09-19 20:28:01 +0200
+
+    Updated Dutch translation by Wouter Bolsterlee
+
+ po/nl.po | 111 ++++++++++++++++++++++++++-------------------------------------
+ 1 file changed, 46 insertions(+), 65 deletions(-)
+
+commit 2ddaf14177f238f5d5f00949e489ad792f3e3698
+Author: Kenneth Nielsen 
+Date:   2010-09-19 17:44:43 +0200
+
+    Updated Danish translation
+
+ po/da.po | 111 +++++++++++++++++++++++++++------------------------------------
+ 1 file changed, 47 insertions(+), 64 deletions(-)
+
+commit c5b318675ec1fc90464a4eaa356c5ad1ab68c69d
+Author: Francesco Marletta 
+Date:   2010-09-18 17:12:26 +0200
+
+    [l10n] Updated Italian translation
+
+ po/it.po | 52 ++++++++++++++++++++--------------------------------
+ 1 file changed, 20 insertions(+), 32 deletions(-)
+
+commit e984749f939981d16ee7828ebef352e74ce461e1
+Author: Christian Persch 
+Date:   2010-09-15 00:47:58 +0200
+
+    Don't force VTE_SEAL_ENABLE on vte/gtk2
+    
+    Only enforce it on vte 2.90 (gtk3).
+
+ configure.in          | 3 +++
+ vte-uninstalled.pc.in | 2 +-
+ vte.pc.in             | 2 +-
+ 3 files changed, 5 insertions(+), 2 deletions(-)
+
+commit 0574bcfbd5c5925458ecdea0e6bbac6d65e30efc
+Author: Christian Persch 
+Date:   2010-09-13 16:17:31 +0200
+
+    Clarify TERM env var handling with VtePty
+
+ src/pty.c |  5 +++++
+ src/vte.c | 32 ++++++++++++++++++++++++++++++--
+ 2 files changed, 35 insertions(+), 2 deletions(-)
+
+commit a7b74340edad2f1e61dc7b78a7177c52715eb925
+Author: Christian Persch 
+Date:   2010-09-11 12:29:34 +0200
+
+    Use new gdk keysym names on gtk3
+
+ src/iso2022.c | 200 +++++++++++++++--------------
+ src/keymap.c  | 394 +++++++++++++++++++++++++++++-----------------------------
+ src/vte.c     | 110 ++++++++--------
+ 3 files changed, 362 insertions(+), 342 deletions(-)
+
+commit 5f52c7ce5f8151aa1718dc0aab6c116ba595f402
+Author: Christian Persch 
+Date:   2010-09-06 13:08:00 +0200
+
+    Use -Bsymbolic-functions when available
+    
+    Bug #628870.
+
+ configure.in    | 25 +++++++++++++++++++++++++
+ src/Makefile.am | 10 +++++++---
+ 2 files changed, 32 insertions(+), 3 deletions(-)
+
+commit f04856b1b5ec91431871c4c77a07e4256eb7cc20
+Author: Christian Persch 
+Date:   2010-09-12 13:36:16 +0200
+
+    Add --cursor-blink to vteapp
+
+ src/vteapp.c | 20 +++++++++++++-------
+ 1 file changed, 13 insertions(+), 7 deletions(-)
+
+commit 2a325bd050eb3e9d19767687aabb95c390b13b6e
+Author: Takayuki KUSANO 
+Date:   2010-09-13 20:34:51 +0900
+
+    Updated Japanese translation.
+
+ po/ja.po | 108 +++++++++++++++++++++++++++------------------------------------
+ 1 file changed, 47 insertions(+), 61 deletions(-)
+
+commit f1676fbe3e91a6e887abf254723b57e841fad0bb
+Author: Piotr Drąg 
+Date:   2010-09-07 19:02:47 +0200
+
+    Updated Polish translation
+
+ po/pl.po | 34 +++++++++++++---------------------
+ 1 file changed, 13 insertions(+), 21 deletions(-)
+
+commit 606ae4edb1721ea7643b0e2439a6d8fc2b6469a2
+Author: Christian Persch 
+Date:   2010-09-06 13:05:25 +0200
+
+    Remove unused variable
+
+ src/vte.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 2f58eba8406c699159ed8fc4a88554f88e1012fc
+Author: Christian Persch 
+Date:   2010-09-06 12:49:56 +0200
+
+    Use correct variables for cleaning the gir data
+
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit be36d54abdd1ef3b067430c33e155137f8a31eef
+Author: Michael Kotsarinis 
+Date:   2010-09-04 19:02:02 +0300
+
+    Updated Greek translation
+
+ po/el.po | 113 ++++++++++++++++++++++++++++-----------------------------------
+ 1 file changed, 51 insertions(+), 62 deletions(-)
+
+commit 8bf969a27069fbc0c71f0bb3fcb176456b5e32ba
+Author: drtv 
+Date:   2010-09-03 21:35:19 +0530
+
+    Updated Tamil translation
+
+ po/ta.po | 99 ++++++++++++++++++++++++++++------------------------------------
+ 1 file changed, 43 insertions(+), 56 deletions(-)
+
+commit 0689c745e07e48e1324c3a3878f42d3ea1c38f59
+Author: Philip Withnall 
+Date:   2010-09-01 09:44:36 +0100
+
+    Update British English translation
+
+ po/en_GB.po | 108 +++++++++++++++++++++++++-----------------------------------
+ 1 file changed, 44 insertions(+), 64 deletions(-)
+
+commit d831dd8da5bdfa2e8c85932966605e8dd64e8fce
+Author: Gabor Kelemen 
+Date:   2010-08-31 01:55:44 +0200
+
+    Updated Hungarian translation
+
+ po/hu.po | 99 +++++++++++++++++++++++-----------------------------------------
+ 1 file changed, 35 insertions(+), 64 deletions(-)
+
+commit 203d696ed3772da3b7eb52b12e1f53cc6fdbbebf (tag: 0.25.91)
+Author: Christian Persch 
+Date:   2010-08-29 13:56:48 +0200
+
+    Don't dist the gir and typelib
+    
+    Fixes distchecking with --disable-introspection.
+
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 76387964c9ae6630d5bd29be61e3359b7b0ed8c9
+Author: Christian Persch 
+Date:   2010-08-29 13:51:42 +0200
+
+    Version 0.25.91
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c9fd190d894354fa0d345c8f58524a83bab80524
+Author: Christian Persch 
+Date:   2010-08-29 13:49:52 +0200
+
+    Use gtk_widget_style_attach
+    
+    Fix faulty code introduced in commit ac1e78c78e6a39834d35c525be01d50c348d33ba
+    from bug #612484.
+    
+    Bug #627764.
+
+ src/vte.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+commit 7f964f72bb6cb51c5f8a7265476eb6f581ef1d36
+Author: Christian Persch 
+Date:   2010-08-20 21:22:41 +0200
+
+    Distcheck with gtk 2 but without introspection
+
+ Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit c737262bf968ee94c22144c3ed7ed4f6fd27e2dd
+Author: Bruno Brouard 
+Date:   2010-08-26 14:43:16 +0200
+
+    Updated French translation
+
+ po/fr.po | 83 ++++++++++++++++++++++------------------------------------------
+ 1 file changed, 28 insertions(+), 55 deletions(-)
+
+commit 724195be5ba53c45d650366a8e029939c20d43a4
+Author: Behdad Esfahbod 
+Date:   2010-08-24 16:53:17 -0400
+
+    Really fix Bug 601926 - Don't hardcode meta to alt
+    
+    Correct fix applied this time.  Tested, Alt is not broken by this
+    change.
+
+ configure.in | 2 +-
+ src/keymap.h | 2 +-
+ src/vte.c    | 7 ++++++-
+ 3 files changed, 8 insertions(+), 3 deletions(-)
+
+commit 7f93f32a18d12e1dbf18a269f7aaec6e706e8cb0
+Author: Chao-Hsiung Liao 
+Date:   2010-08-23 20:00:04 +0800
+
+    Updated Traditional Chinese translation(Hong Kong and Taiwan)
+
+ po/zh_HK.po | 57 +++++++++++++++++++++++++--------------------------------
+ po/zh_TW.po | 57 +++++++++++++++++++++++++--------------------------------
+ 2 files changed, 50 insertions(+), 64 deletions(-)
+
+commit 1d6459b92336ffcb5cb2f3187cac6bda5990cc95
+Author: Милош Поповић 
+Date:   2010-08-23 01:40:41 +0200
+
+    Updated Serbian translation
+
+ po/sr.po       | 137 +++++++++++++++++++++++++++------------------------------
+ po/sr@latin.po | 137 +++++++++++++++++++++++++++------------------------------
+ 2 files changed, 130 insertions(+), 144 deletions(-)
+
+commit b278c6c8fff7860b81dc2bb89e8b37cd144223b3
+Author: Alexander Shopov 
+Date:   2010-08-22 23:11:21 +0300
+
+    Updated Bulgarian translation
+
+ po/bg.po | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 578fef8c1711bfd5b5e105cb2d6fe6b560bba251
+Author: Alexander Shopov 
+Date:   2010-08-22 22:39:01 +0300
+
+    Updated Bulgarian translation
+
+ po/bg.po | 91 +++++++++++++++++++++-------------------------------------------
+ 1 file changed, 30 insertions(+), 61 deletions(-)
+
+commit 132d8ca1d6869af4a9e7965a597247dcc37ce234
+Author: David Planella 
+Date:   2010-08-22 10:19:21 +0200
+
+    Updated Catalan translation
+
+ po/ca.po | 105 +++++++++++++++++++++++++++------------------------------------
+ 1 file changed, 45 insertions(+), 60 deletions(-)
+
+commit 4f40ebe3050eda9d501f9f136059de781fff5bc0
+Author: Duarte Loreto 
+Date:   2010-08-21 17:46:05 +0100
+
+    Updated Portuguese translation
+
+ po/pt.po | 98 ++++++++++++++++++++++++++++------------------------------------
+ 1 file changed, 42 insertions(+), 56 deletions(-)
+
+commit 8995cbbec42fa7a1033a2ec88a93a874a18ac2cc
+Author: Saleem Abdulrasool 
+Date:   2010-08-19 23:11:39 -0700
+
+    fix make check
+
+ src/reflect.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c56c3c4673a310f5d71bc16045a331d362c0bbc5
+Author: Behdad Esfahbod 
+Date:   2010-08-19 12:52:50 -0400
+
+    Revert "Bug 601926 - Don't hardcode meta to alt"
+    
+    This reverts commit b73782a28894e25ed146271f9d6c6775a6836199.
+
+ src/keymap.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1388c74ff3d025b0b87a9de2a94d6407c40980b0
+Author: Behdad Esfahbod 
+Date:   2010-08-11 16:54:52 -0400
+
+    Indent
+
+ src/vte-private.h | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+commit 8b8ad8ff56505ba93f5ab6cae29f766eaa2861ff
+Author: Kristian Høgsberg 
+Date:   2010-08-19 09:50:33 -0400
+
+    Remove leftover, unused GdkPixmpap variable
+    
+    This removes the last GdkPixmap reference in vte.
+
+ src/vtebg.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 0cfaef604b1cbda52cbacf992bbba279059cc96a (tag: 0.25.90)
+Author: Christian Persch 
+Date:   2010-08-16 21:26:29 +0200
+
+    Distcheck with --with-gtk=3.0
+
+ Makefile.am | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit b48f5ea815337f48a0dafefb68b5858af66ecd6a
+Author: Christian Persch 
+Date:   2010-08-16 21:23:39 +0200
+
+    One more GSEAL fix
+
+ src/reflect.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 077f698fcd06eae347ee91426a110c4d00ee1a99
+Author: Christian Persch 
+Date:   2010-08-16 15:09:42 +0200
+
+    Version 0.25.90
+
+ NEWS         | 15 +++++++++++++++
+ configure.in |  2 +-
+ 2 files changed, 16 insertions(+), 1 deletion(-)
+
+commit deaac0d77a1838dc3ecc33ba2993b45dd2a3ee1c
+Author: Behdad Esfahbod 
+Date:   2010-08-11 16:15:18 -0400
+
+    Fix signdness warnings
+
+ src/vte.c | 30 ++++++++++++++++--------------
+ 1 file changed, 16 insertions(+), 14 deletions(-)
+
+commit 9af0c65c082daab19d388f50c2b5d52f8f28a454
+Author: Behdad Esfahbod 
+Date:   2010-08-11 16:10:06 -0400
+
+    Bug 626676 - Cleanup vte_terminal_determine_colors
+    
+    Or rather, rewrite it.
+    
+    At least I understand how it's supposed to work now.  Combinations of
+    set highlight color, set cursor color, reverse mode, selected text,
+    etc work much better now.
+
+ src/vte.c | 188 ++++++++++++++++++++++++++++++++++----------------------------
+ 1 file changed, 102 insertions(+), 86 deletions(-)
+
+commit a0d9e0ff3a580a47f45dc01eb303c164a126c81b
+Author: Behdad Esfahbod 
+Date:   2010-08-11 15:21:29 -0400
+
+    Simplify determine_colors more
+    
+    Get rid of reverse argument.  Also "xor" instead of "or" selection mode
+    with reverse mode.  Selection works with reverse mode now.  Before, it
+    didn't render.
+
+ src/vte.c | 34 +++++++++++-----------------------
+ 1 file changed, 11 insertions(+), 23 deletions(-)
+
+commit 956a836ab4f7000a7cf409c05a194e194573c358
+Author: Behdad Esfahbod 
+Date:   2010-08-11 14:30:14 -0400
+
+    Bug 621298 - Cursor invisible (plain black) in (xfce) Terminal & terminator
+    
+    Fix the case where cursor color is set.
+    
+    Towards making determine_colors make sense.  Still not done.  More
+    commits coming, but this one is enough to fix the main regression.
+
+ src/vte.c | 32 ++++++++++++++++++++++----------
+ 1 file changed, 22 insertions(+), 10 deletions(-)
+
+commit 3a7fbb285ebf9a50eb3498e21e001b773701f5a6
+Author: Behdad Esfahbod 
+Date:   2010-08-11 14:24:33 -0400
+
+    Revert "Don't hide cursor even if cell is invisible"
+    
+    This reverts commit 18ee5f522d8bc2f5dfe896f40eba8d5313cb310f.
+    
+    This didn't make sense.  It was making invisible cells visible when
+    under cursor.
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit edde846fa555e0d5e16d54328e47d81096f82893
+Author: Behdad Esfahbod 
+Date:   2010-08-11 13:46:10 -0400
+
+    Minor
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b2f8852f936a8ef0537a0a83156a24544b1a1cf2
+Author: Behdad Esfahbod 
+Date:   2010-08-11 13:45:40 -0400
+
+    Minor --help adjustment
+
+ src/vteapp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9abf75cb36376d00a6dc14d7482599a57cbff023
+Author: Christian Persch 
+Date:   2010-08-11 18:16:20 +0200
+
+    Vary gettext domain for vte/gtk3
+    
+    Using the same domain creates parallel-install troubles.
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 48e2356a5a91c8c6d61573c30bcb8740fbec4b8e
+Author: Behdad Esfahbod 
+Date:   2010-08-10 15:01:47 -0400
+
+    Ensure vte-gtk-compat.h is included in the tarball
+
+ src/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 01c7eee35d336e674df206220047c19bc38ed20e
+Author: Behdad Esfahbod 
+Date:   2010-08-10 15:00:22 -0400
+
+    Ensure decset, osc and window are included in the tarball
+
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 14aa0032f04aa1771116fe6f73dd46a75c4c11f2
+Author: Christian Persch 
+Date:   2010-08-10 20:09:29 +0200
+
+    Docs update
+
+ doc/reference/vte-sections.txt |  6 +++++
+ src/vte.c                      | 57 ++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 63 insertions(+)
+
+commit 4feccba86ead67f7e0da018b45f2301a89a3ea75
+Author: Nils-Christoph Fiedler 
+Date:   2010-08-08 15:53:24 +0200
+
+    Updated LowGerman translation
+
+ po/nds.po | 35 ++++++++++++++++++-----------------
+ 1 file changed, 18 insertions(+), 17 deletions(-)
+
+commit 18ed68d1ea94e002cef001398b8bb344d639f5d7
+Author: A S Alam 
+Date:   2010-08-04 15:10:48 +0530
+
+    update Translation in master for Punjabi by A S Alam
+
+ po/pa.po | 46 ++++++++++++++++++++++++----------------------
+ 1 file changed, 24 insertions(+), 22 deletions(-)
+
+commit 23655733396cbe49b989901c7a4a0c66bca4a4dc
+Author: Dirgita 
+Date:   2010-08-04 11:03:00 +0700
+
+    Updated Indonesian translation
+
+ po/id.po | 154 ++++++++++++++++++---------------------------------------------
+ 1 file changed, 43 insertions(+), 111 deletions(-)
+
+commit 701dfad230c641edd7894f562fb46195a57bcf08
+Author: Daniel Nylander 
+Date:   2010-07-25 19:05:14 +0200
+
+    Updated Swedish translation
+
+ po/sv.po | 114 +++++++++++++++++++++++++--------------------------------------
+ 1 file changed, 45 insertions(+), 69 deletions(-)
+
+commit bc8df68917912f333ebdab8135800e4d3632dcd4
+Author: Behdad Esfahbod 
+Date:   2010-07-22 13:05:04 -0400
+
+    Bug 618097 - Broken backtab (cbt)
+
+ src/vteseq.c | 9 ++-------
+ 1 file changed, 2 insertions(+), 7 deletions(-)
+
+commit 3e8c59f78a8e7557ffccd97d7cd5dea0f7b0aceb
+Author: Behdad Esfahbod 
+Date:   2010-07-22 12:32:40 -0400
+
+    Add compat impl for gtk_accessible_get_widget()
+
+ src/vte-gtk-compat.h | 4 ++++
+ src/vteaccess.c      | 1 +
+ 2 files changed, 5 insertions(+)
+
+commit 07307c1863cd68a85284235b69e6687f9eed36e9
+Author: Fran Diéguez 
+Date:   2010-07-21 16:28:11 +0200
+
+    Updated Galician translations
+
+ po/gl.po | 58 ++++++++++++++++++----------------------------------------
+ 1 file changed, 18 insertions(+), 40 deletions(-)
+
+commit c01a676e1ed44e1aa3e318cea559be4b2f1d49c3
+Author: Mario Blättermann 
+Date:   2010-07-16 21:38:54 +0200
+
+    [i18n] Updated German translation
+
+ po/de.po | 99 +++++++++++++++++++++++++++++-----------------------------------
+ 1 file changed, 45 insertions(+), 54 deletions(-)
+
+commit 8b971a7b2c59902914ecbbc3915c45dd21530a91
+Author: Kees Cook 
+Date:   2010-07-12 21:31:32 +0200
+
+    Fix terminal title reporting
+    
+    Fixed CVE-2003-0070 again.
+    See also http://marc.info/?l=bugtraq&m=104612710031920&w=2 .
+    (cherry picked from commit 6042c75b5a6daa0e499e61c8e07242d890d38ff1)
+
+ src/vteseq.c | 24 ++++++++++++++++--------
+ 1 file changed, 16 insertions(+), 8 deletions(-)
+
+commit a4445d5bd1106d8683b471a358f7933bacb58105
+Author: Christian Persch 
+Date:   2010-07-12 21:27:38 +0200
+
+    Tiny configure fix
+
+ configure.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit d17e650aa062946ce599f80fe33989cc2c7bb52d
+Author: Kristian Høgsberg 
+Date:   2010-07-15 09:57:23 -0400
+
+    Stop using the gdk_draw_* API
+    
+    Only one gdk_draw_rectangle() call let.
+
+ src/vte.c | 25 ++++++++++++++-----------
+ 1 file changed, 14 insertions(+), 11 deletions(-)
+
+commit 6eadb8494797e44910b86b5e101823cf527c04e1
+Author: Kristian Høgsberg 
+Date:   2010-07-15 09:07:51 -0400
+
+    Use accessors for setting adjustment
+    
+    We use g_object_freeze_notify() to emit the same amount of ::changed
+    signals.
+
+ src/vte.c | 34 ++++++++++++++++++++--------------
+ 1 file changed, 20 insertions(+), 14 deletions(-)
+
+commit 31303a1893ba6052a537f285c99db80499a8b797
+Author: Kristian Høgsberg 
+Date:   2010-07-15 08:38:42 -0400
+
+    Use get accessors for adjustments
+
+ src/vte.c | 57 +++++++++++++++++++++++++++++++--------------------------
+ 1 file changed, 31 insertions(+), 26 deletions(-)
+
+commit 887f86c00e99e38f9374eea03b1535cd823851b3
+Author: Kristian Høgsberg 
+Date:   2010-07-15 08:24:16 -0400
+
+    Add remaining accessors
+    
+    All that remains now is the adjustment accessors.
+
+ src/vte.c       | 19 +++++++++--------
+ src/vteaccess.c | 64 +++++++++++++++++++++++++++++---------------------------
+ src/vteapp.c    | 65 +++++++++++++++++++++++++++++++++------------------------
+ src/vtedraw.c   | 11 ++++++----
+ src/vteseq.c    | 16 +++++++-------
+ 5 files changed, 97 insertions(+), 78 deletions(-)
+
+commit 0f4d6539fa0280cfa658a27ceaca63c2db0232e4
+Author: Kristian Høgsberg 
+Date:   2010-07-14 22:52:53 -0400
+
+    Seal VTE when VTE_SEAL_ENABLE is given, not GSEAL_ENABLE
+    
+    gtk+ 3.0 defines GSEAL_ENABLE, which seals up VTE for the vte code as well.
+    Instead, seal of VTE when VTE_SEAL_ENABLE is defined and set it in
+    the .pc file.
+
+ src/vte.h | 2 +-
+ vte.pc.in | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 235461a3c4ac1577a3c0891a2d0ca5316e12a568
+Author: Kristian Høgsberg 
+Date:   2010-07-14 22:51:18 -0400
+
+    Introduce compat macros for region differences
+
+ src/vte-gtk-compat.h | 27 +++++++++++++++++++++++++++
+ src/vte.c            |  6 +++---
+ src/vtedraw.h        |  1 +
+ 3 files changed, 31 insertions(+), 3 deletions(-)
+
+commit ac1e78c78e6a39834d35c525be01d50c348d33ba
+Author: Saleem Abdulrasool 
+Date:   2010-07-14 22:10:00 -0400
+
+    Use accessors for gtk objects
+    
+    This change introduces vte-gtk-compat.h to allow compatibility with the
+    current GTK+ requirement (2.14+) while allowing us to use GSEAL when
+    available.  When the GTK+ requirements are moved up to 2.20+, it should
+    be possible to entirely remove the header.
+    
+    Setting of the GTK adjustment fields still occurs without the accessors
+    as setting the value and then using value_changed may introduce
+    different behaviour and/or double signal emissions.
+
+ src/vte-gtk-compat.h |  45 +++++++++
+ src/vte.c            | 253 ++++++++++++++++++++++++++++++---------------------
+ 2 files changed, 195 insertions(+), 103 deletions(-)
+
+commit 396f44dd5ea0a4d9d0567ae9c6618bb3004c4c34
+Author: Kristjan Schmidt 
+Date:   2010-07-04 17:33:30 +0200
+
+    Add Esperanto translation
+
+ po/LINGUAS | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 3671437e3d2fca4ac4918078700b2d60de43228c
+Author: Kristjan Schmidt 
+Date:   2010-07-04 17:33:30 +0200
+
+    Add Esperanto translation
+
+ po/eo.po | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 105 insertions(+)
+
+commit 137e16630cd737dd4690fb54e6431b0bfebcf509
+Author: Behdad Esfahbod 
+Date:   2010-06-30 15:27:30 -0400
+
+    Simplify libtool versioning
+
+ configure.in    | 38 +++++++++++++++++++-------------------
+ src/Makefile.am |  2 +-
+ 2 files changed, 20 insertions(+), 20 deletions(-)
+
+commit 4423625ec82432f7bbc6b8a00b865271d3b123fd
+Author: Aron Xu 
+Date:   2010-06-29 21:53:54 +0800
+
+    Update Simplified Chinese translation.
+
+ po/zh_CN.po | 112 +++++++++++++++++++++++++-----------------------------------
+ 1 file changed, 46 insertions(+), 66 deletions(-)
+
+commit 11a21955d145c743631a3eb6dc109e08359bfea5
+Author: Khaled Hosny 
+Date:   2010-06-26 22:30:37 +0300
+
+    Updated Arabic translation
+
+ po/ar.po | 46 ++++++++++++++++++++--------------------------
+ 1 file changed, 20 insertions(+), 26 deletions(-)
+
+commit 9caf8b2249dea81bc03108020b7c033a78cd3f57
+Author: Behdad Esfahbod 
+Date:   2010-06-25 02:02:29 -0300
+
+    Minor comment fix.
+
+ src/vte.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 8b3dbe8e6771356023fe552b178659357f502473
+Author: Behdad Esfahbod 
+Date:   2010-06-17 15:02:54 -0400
+
+    Set widget app_paintable.
+
+ src/vte.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit 332e694b5067c7e8e5d2f32ceccbd229243a3ff7
+Author: Christian Persch 
+Date:   2010-05-28 21:10:46 +0200
+
+    Make vte dual buildable with gtk2 and gtk3
+    
+    Gtk3 build is untested.
+
+ Makefile.am               |  8 +++--
+ configure.in              | 82 ++++++++++++++++++++++++++++++++++++++---------
+ doc/reference/Makefile.am |  4 +--
+ src/Makefile.am           | 60 +++++++++++++++++-----------------
+ vte-uninstalled.pc.in     |  2 +-
+ vte.pc.in                 |  4 +--
+ 6 files changed, 109 insertions(+), 51 deletions(-)
+
+commit 405ed5bb3151940db0f21ff5b8e96bea94770f96
+Author: Behdad Esfahbod 
+Date:   2010-06-11 22:51:49 -0400
+
+    Clean up background clearing
+    
+    Fixes bug where lower border of the screen was not properly painted in
+    fullscreen mode.
+
+ src/vte.c     | 45 +++++++++------------------------------------
+ src/vtedraw.c | 18 +-----------------
+ src/vtedraw.h |  3 +--
+ 3 files changed, 11 insertions(+), 55 deletions(-)
+
+commit b73782a28894e25ed146271f9d6c6775a6836199
+Author: Behdad Esfahbod 
+Date:   2010-06-04 14:36:45 -0400
+
+    Bug 601926 - Don't hardcode meta to alt
+
+ src/keymap.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b86c068b061090e176b1ff6e82dcccfd0198ed2f
+Author: Matthias Clasen 
+Date:   2010-06-03 12:16:30 -0400
+
+    Bug 620493 - strict aliasing warning
+
+ gnome-pty-helper/gnome-pty-helper.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit bff92abe96896ebf3c7e2a60243caf65659d3390
+Author: Yaron Shahrabani 
+Date:   2010-05-29 13:29:22 +0300
+
+    Updated Hebrew translation.
+
+ po/he.po | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 94d7fb63386d1e8e2653a961af6cbeac06b05c2b
+Author: Yaron Shahrabani 
+Date:   2010-05-29 13:28:26 +0300
+
+    Updated Hebrew translation.
+
+ po/he.po | 100 +++++++++++++++++++++++++++------------------------------------
+ 1 file changed, 43 insertions(+), 57 deletions(-)
+
+commit b1cc8aa1a42e74c2130a6e39c5571779fb842f69
+Author: Ivar Smolin 
+Date:   2010-05-27 08:35:49 +0300
+
+    Estonian translation updated
+
+ po/et.po | 106 +++++++++++++++++----------------------------------------------
+ 1 file changed, 28 insertions(+), 78 deletions(-)
+
+commit 9370647823ce29c1088c351381a07a5506b74c84
+Author: Behdad Esfahbod 
+Date:   2010-05-26 13:09:47 -0400
+
+    Bug 618749 - set terminal widget background color to terminal background
+
+ src/vte.c | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+commit 430dd34fa9532fa492ea512f226e8483d1393716
+Author: Behdad Esfahbod 
+Date:   2010-05-26 13:09:25 -0400
+
+    Fix requires_clear setting
+    
+    Part of Bug 618749 - [PATCH] set terminal widget background color to terminal
+
+ src/vtedraw.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 2902ade6f3714e8d42cab0320a5e99345a142bd9
+Author: Petr Kovar 
+Date:   2010-05-23 19:49:10 +0200
+
+    Update Czech translation by Marek Cernocky
+
+ po/cs.po | 43 ++++++++++++++++++-------------------------
+ 1 file changed, 18 insertions(+), 25 deletions(-)
+
+commit 3bd8a57d124126f360a2352bfdc61e78a7c7982f
+Author: Behdad Esfahbod 
+Date:   2010-05-14 18:27:32 -0400
+
+    Revert "Disable introspection dist"
+    
+    This reverts commit a0cec4542963d52b1c1842ea9b450a51262b4c09.
+
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 2d2aabde8ba4ef9dff306cbf15044c68e350ba9d
+Author: Thomas Thurman 
+Date:   2010-05-13 18:06:11 -0400
+
+    Updated Shavian translation
+
+ po/en@shaw.po | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 868d03f9921e49ef8966a9307a0f521f5c9311d7
+Author: Thomas Thurman 
+Date:   2010-05-12 18:41:00 -0400
+
+    Updated Shavian transliteration
+
+ po/en@shaw.po | 47 ++++++++++++++++++++---------------------------
+ 1 file changed, 20 insertions(+), 27 deletions(-)
+
+commit 5dc9b3ce32070f1a7040b8ed24d9d463ad6a67b0
+Author: Behdad Esfahbod 
+Date:   2010-05-11 16:49:10 -0400
+
+    Bug 614658 - text selection with mouse is buggy when using the shift key
+
+ src/vte.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit c84f01d9de7bc2c7a9bfbc6373afbdebbab3d2be
+Author: Behdad Esfahbod 
+Date:   2010-05-05 19:16:39 -0400
+
+    Bug 617690 - Setting default fg color should not cancel underline
+
+ src/vteseq.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+commit 7af990ed413f19de0b20815b4ceeec13c201790f (tag: 0.25.1)
+Author: Behdad Esfahbod 
+Date:   2010-05-03 11:31:46 -0400
+
+    Release 0.25.1
+
+ NEWS         | 17 +++++++++++++++++
+ configure.in |  2 +-
+ 2 files changed, 18 insertions(+), 1 deletion(-)
+
+commit a0cec4542963d52b1c1842ea9b450a51262b4c09
+Author: Behdad Esfahbod 
+Date:   2010-05-03 21:08:54 -0400
+
+    Disable introspection dist
+    
+    Broken as usual...
+
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 860ed187545355fa9daef60907a3746837cc7b6a
+Author: Behdad Esfahbod 
+Date:   2010-05-03 11:21:42 -0400
+
+    [configure] Make libtool versioning automatic
+
+ configure.in | 21 +++++++++------------
+ 1 file changed, 9 insertions(+), 12 deletions(-)
+
+commit d8ccb73b23cd2a5c85a3bfbfbfe550391feb3ae0
+Author: Behdad Esfahbod 
+Date:   2010-05-03 04:17:52 -0400
+
+    [search] Fix not-found
+
+ src/vte.c | 30 +++++++++++++++++++++++++++++-
+ 1 file changed, 29 insertions(+), 1 deletion(-)
+
+commit e7101e79d6ba2d8a2f2d1029e76f7c8aecffbc09
+Author: Behdad Esfahbod 
+Date:   2010-05-03 03:58:34 -0400
+
+    [search] Don't scroll if result is on screen already
+
+ src/vte.c | 22 ++++++++++++++++------
+ 1 file changed, 16 insertions(+), 6 deletions(-)
+
+commit 8be7456df21e13fa7182143eb1266790ce3fc31a
+Author: Behdad Esfahbod 
+Date:   2010-05-03 03:49:09 -0400
+
+    Fix presenting search result
+
+ src/vte.c | 47 ++++++++++++++++++++++-------------------------
+ 1 file changed, 22 insertions(+), 25 deletions(-)
+
+commit 871fc9e97a2c6f8340ca20eb75fbbd04fecfb694
+Author: Behdad Esfahbod 
+Date:   2010-05-03 03:23:17 -0400
+
+    Add comment
+
+ src/vte.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit fc35e7bed6ee7940167f9cde0eae913be7d15f4a
+Author: Behdad Esfahbod 
+Date:   2010-05-03 03:21:59 -0400
+
+    Fix selection invalidation.  Oops!
+
+ src/vte.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit d80ecde4c350e9922d374f9adb97238e5c041e5c
+Author: Behdad Esfahbod 
+Date:   2010-05-03 03:20:52 -0400
+
+    [search] Implement wrap-around
+
+ src/vte.c | 92 ++++++++++++++++++++++++++++++++++++++++-----------------------
+ 1 file changed, 59 insertions(+), 33 deletions(-)
+
+commit 95c30fc52edd2d5de68267fdf3847b9e639d218d
+Author: Behdad Esfahbod 
+Date:   2010-05-02 03:35:21 -0400
+
+    Add VteVisualPosition
+
+ src/vte-private.h | 16 +++++------
+ src/vte.c         | 80 +++++++++++++++++++++++++++----------------------------
+ src/vteseq.c      |  2 +-
+ 3 files changed, 48 insertions(+), 50 deletions(-)
+
+commit ae08c6d9c1a2f1d9f5fee8658ddbed2321b1b0e1
+Author: Behdad Esfahbod 
+Date:   2010-05-02 03:23:29 -0400
+
+    Refactor search
+
+ src/vte-private.h |   1 +
+ src/vte.c         | 198 ++++++++++++++++++++++++++++++++++--------------------
+ 2 files changed, 125 insertions(+), 74 deletions(-)
+
+commit 1710d5069482355cf1b3dff9a7605f35311823d4
+Author: Kjartan Maraas 
+Date:   2010-05-02 11:40:20 +0200
+
+    Updated Norwegian bokmål translation
+
+ po/nb.po | 95 ++++++++++++++++++++--------------------------------------------
+ 1 file changed, 29 insertions(+), 66 deletions(-)
+
+commit 81375a2f4aec7b55d8c3337a316fdeda166b701f
+Author: Behdad Esfahbod 
+Date:   2010-04-29 16:38:36 -0400
+
+    Bug 616497 - 256 color sequence lacks boundary checking
+
+ src/vteseq.c | 28 ++++++++++++++++------------
+ 1 file changed, 16 insertions(+), 12 deletions(-)
+
+commit 5e7bb0b7cbbd130eada9730b029270d822a69ef5 (origin/search)
+Author: Behdad Esfahbod 
+Date:   2010-04-27 16:28:12 -0400
+
+    Fixup search a bit
+
+ src/vte-private.h | 2 +-
+ src/vte.c         | 9 +++++----
+ 2 files changed, 6 insertions(+), 5 deletions(-)
+
+commit ed1c3e4ba7aa3a6a3d4eea9dc30b6356f91c26b9
+Author: Behdad Esfahbod 
+Date:   2010-04-27 11:35:39 -0400
+
+    Add _[gs]et_wrap_around() API
+
+ src/vte-private.h |  1 +
+ src/vte.c         | 29 ++++++++++++++++++++++-------
+ src/vte.h         |  7 ++++---
+ 3 files changed, 27 insertions(+), 10 deletions(-)
+
+commit c16d84a84006fd62ad4282b983868ae7b91cf9c6
+Author: Behdad Esfahbod 
+Date:   2010-04-27 06:22:26 -0400
+
+    Start of find_prev
+
+ src/vte.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++----------
+ 1 file changed, 80 insertions(+), 15 deletions(-)
+
+commit 812fa94985488dda7d14992895c20ea632c04147
+Author: Behdad Esfahbod 
+Date:   2010-04-27 04:01:03 -0400
+
+    Add buffer search API
+    
+    Not performing any actual search right now.
+
+ src/vte-private.h |  3 +++
+ src/vte.c         | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vte.h         |  9 ++++++++
+ 3 files changed, 73 insertions(+)
+
+commit 3653a15060dace53d22834fd853ecf702859aea0
+Author: Francisco Diéguez 
+Date:   2010-04-17 21:35:15 +0200
+
+    Updated Galician translations
+
+ po/gl.po | 37 ++++++++++++++++---------------------
+ 1 file changed, 16 insertions(+), 21 deletions(-)
+
+commit 25a382362d049d655620c122e3036f3482ebf963
+Author: Christian Persch 
+Date:   2010-04-15 19:02:04 +0200
+
+    VteBg is private API
+
+ doc/reference/vte-sections.txt | 1 -
+ src/vtebg.c                    | 2 +-
+ 2 files changed, 1 insertion(+), 2 deletions(-)
+
+commit 8c0e7c9aa277e8f51d7dbb010044fea072a26c0b
+Author: Christian Persch 
+Date:   2010-04-15 18:55:02 +0200
+
+    Use (transfer full)
+
+ src/pty.c |  6 +++---
+ src/vte.c | 18 +++++++++---------
+ 2 files changed, 12 insertions(+), 12 deletions(-)
+
+commit 15ce739c19ff14f3d5e2267d2c1bb1d1b5c50a28
+Author: Jorge González 
+Date:   2010-04-15 08:28:01 +0200
+
+    Updated Spanish translation
+
+ po/es.po | 145 +++++++++++++++++++++++++++++----------------------------------
+ 1 file changed, 67 insertions(+), 78 deletions(-)
+
+commit 32af285e46f078a84fbff7d2455bba4960b3a4b8
+Author: Matej Urbančič 
+Date:   2010-04-14 17:58:38 +0200
+
+    Updated Slovenian translation
+
+ po/sl.po | 147 +++++++++++++++++++++++++++------------------------------------
+ 1 file changed, 64 insertions(+), 83 deletions(-)
+
+commit c4159492f8ea3f5fc4c1adeae5077ef12edb366b
+Author: Christian Persch 
+Date:   2010-04-12 20:29:38 +0200
+
+    Add some more gi annotations
+
+ src/vte.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit 0142382369accceab938fd06e7001688187834c5
+Author: Christian Persch 
+Date:   2010-04-12 20:09:08 +0200
+
+    Tiny docs fix
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit deeab3837a7b3c463e525f75f0b96436448bc7c3
+Author: Christian Persch 
+Date:   2010-04-12 19:59:44 +0200
+
+    Add annotation-glossary.xml include
+
+ doc/reference/vte-docs.xml | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 122d6382534fd381ca2f964b0df9aa568da52c45
+Author: Christian Persch 
+Date:   2010-04-12 19:59:03 +0200
+
+    Add deprecation guards to vtedeprecated.h
+    
+    They're redunant since this file is only included in the
+    !VTE_DISABLE_DEPRECATED case, but this is necessary to make the docs
+    build happy.
+
+ src/vtedeprecated.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit fddc82dde27f0cbdbc38c617808be965b83558ac
+Author: Behdad Esfahbod 
+Date:   2010-04-12 11:38:06 -0400
+
+    Bug 615417 - Reversed and one error saturation level in 0.24.0
+
+ src/vtebg.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit f82251e5138a3515c3bd17e4af5769ee2c7c3d96
+Author: Behdad Esfahbod 
+Date:   2010-04-12 11:23:42 -0400
+
+    Bug 615467 - [PATCH] VTE does not handle CSI%dr properly
+
+ src/caps.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit bc3a50d2d6024e8b01bb64f9e0e908de123216a2
+Author: Christian Persch 
+Date:   2010-04-11 21:00:01 +0200
+
+    Don't crash when root_surface is NULL
+
+ src/vtebg.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 17a7de4fb76205f92d6f9af7af9ba6e127eeb3b4
+Author: Christian Persch 
+Date:   2010-04-11 20:51:56 +0200
+
+    Add some debug output to VteBg
+
+ src/debug.c |  3 ++-
+ src/debug.h |  3 ++-
+ src/vtebg.c | 21 ++++++++++++---------
+ 3 files changed, 16 insertions(+), 11 deletions(-)
+
+commit bf80e94ed89c3abdc238725694617444cc0f3949
+Author: Christian Persch 
+Date:   2010-04-10 17:48:54 +0200
+
+    Tiny docs fixup
+
+ src/vte.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 09ac9fd1733e0376fe2201e92a93accd7c716865
+Author: Christian Persch 
+Date:   2010-04-10 17:41:28 +0200
+
+    Add gobject introspection annotations
+    
+    ... and update some docs.
+
+ src/pty.c |  24 ++---
+ src/vte.c | 315 +++++++++++++++++++++++++++-----------------------------------
+ src/vte.h |   9 +-
+ 3 files changed, 154 insertions(+), 194 deletions(-)
+
+commit b1379dc19ac015a3dbb7a42f7b1250e6e096820f
+Author: Christian Persch 
+Date:   2010-04-10 16:34:11 +0200
+
+    Remove unused variable
+
+ src/vtebg.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit e70fbd240fd230155a5321907bfe6f4fa032586c
+Author: Christian Persch 
+Date:   2010-04-10 16:27:19 +0200
+
+    Add FIXME about potential optimisation
+
+ src/vtebg.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 3aaa051bc390c97dca80beff9fdcf14eaddf01a8
+Author: Christian Persch 
+Date:   2010-04-10 16:24:33 +0200
+
+    Add some gtk-doc comments
+    
+    While trying to understand this code.
+
+ src/vtebg.c | 43 +++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 35 insertions(+), 8 deletions(-)
+
+commit 41db1d0d64227d65d1f25de68d8a62e3a7bd271d
+Author: Christian Persch 
+Date:   2010-04-10 16:06:02 +0200
+
+    Use _vte_debug_print() here
+
+ src/vtebg.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit 7561724dc78abf71a6cefaf17965f16a69fec44b
+Author: Christian Persch 
+Date:   2010-04-10 16:01:45 +0200
+
+    Parse options enum from string
+
+ src/vteapp.c | 54 ++++++++++++++++++++++++++++++++++++++----------------
+ 1 file changed, 38 insertions(+), 16 deletions(-)
+
+commit 08283ddc9f5516e1f15306399c909c0adc49db77
+Author: Christian Persch 
+Date:   2010-04-10 15:49:31 +0200
+
+    Use standard form of stock type macros
+
+ src/vte.h   | 29 +++++++++--------------------
+ src/vtebg.h | 15 +++++++--------
+ 2 files changed, 16 insertions(+), 28 deletions(-)
+
+commit 39b7a1f74dc7044d1fd6cd9df7abceffa7e99349
+Author: Christian Persch 
+Date:   2010-04-10 01:42:24 +0200
+
+    We also depend on cairo-xlib on gdk-x11
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a9642829fbbd027bf39df6205efc1d7cb8383c02
+Author: Christian Persch 
+Date:   2010-04-10 01:41:52 +0200
+
+    Use G_STATIC_ASSERT
+    
+    Now that we depend on glib 2.22, remove our private static assert macro
+    and just use G_STATIC_ASSERT.
+
+ src/debug.h      |  4 ----
+ src/vterowdata.h | 10 +++++-----
+ 2 files changed, 5 insertions(+), 9 deletions(-)
+
+commit 49759e9608b1d69cdc26a44e0259d57297be995a
+Author: Christian Persch 
+Date:   2010-04-08 17:16:49 +0200
+
+    Fix underline cursor height calculation
+    
+    Use the cell width, not the whole cursor width when calculating the
+    underline cursor height.
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d00507b9bc4c29248817915225c49c1e8b349fe0
+Author: Christian Persch 
+Date:   2009-12-03 18:47:13 +0100
+
+    Use the style's cursor-aspect-ratio when drawing the cursor
+    
+    For the ibeam cursor, use the aspect ratio; for the underline, its
+    inverse (that's the only thing that makes sense here).
+    
+    Bug #586950.
+
+ src/vte-private.h |  1 +
+ src/vte.c         | 29 +++++++++++++++++++++++------
+ 2 files changed, 24 insertions(+), 6 deletions(-)
+
+commit b72c2a7df25e5fdfefbd437505f9f71b7d675da8
+Author: Christian Persch 
+Date:   2010-04-08 13:15:00 +0200
+
+    Print the GDK target during configure
+    
+    For checking purposes.
+
+ configure.in | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 8df389be0035f185705a4553bd8564940cb23080
+Author: Christian Persch 
+Date:   2010-04-04 22:37:02 +0200
+
+    Remove accidentally added include
+
+ src/vtetc.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 022bf76c6b01ea82310c67020461530082f86998
+Author: Christian Persch 
+Date:   2010-04-04 18:12:00 +0200
+
+    Add debug output when g-p-h fails
+
+ src/pty.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit d8569b1a45bdba4f09d6162ad9287f47ac8ca25f
+Author: Christian Persch 
+Date:   2010-04-04 17:20:16 +0200
+
+    Remove unused function declaration
+
+ src/vtetc.c | 1 +
+ src/vtetc.h | 3 ---
+ 2 files changed, 1 insertion(+), 3 deletions(-)
+
+commit feeda1671770daffa08a4235b94becdcbf9b825c
+Author: Christian Persch 
+Date:   2010-04-04 17:08:10 +0200
+
+    Remove signal ID from VteBgClass
+    
+    It's unused.
+
+ src/vtebg.c | 16 ++++++++--------
+ src/vtebg.h |  1 -
+ 2 files changed, 8 insertions(+), 9 deletions(-)
+
+commit acbaf637f2c78d34d735e1b0c0c2586b344d42ff
+Author: Christian Persch 
+Date:   2010-04-04 17:06:39 +0200
+
+    Remove unnecessary i18n init from vtebg
+    
+    VteBg is an internal object that cannot be accessed from outside, and
+    that has no i18n. So there's really no need to make its class init
+    function bind vte's textdomain.
+
+ src/vtebg.c | 7 -------
+ 1 file changed, 7 deletions(-)
+
+commit be41faea3651c2a90012648490ebf346eac82d04
+Author: Christian Persch 
+Date:   2010-04-04 17:03:24 +0200
+
+    Add x11 to pkg-config dep list on gdk-x11
+    
+    Bug #613525.
+
+ configure.in | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+commit f0809d9cc8b4bba36252a12098fb31dd81534242
+Author: Christian Persch 
+Date:   2010-04-03 23:50:51 +0200
+
+    Remove #if 0'd code
+
+ src/vtebg.c | 22 ----------------------
+ 1 file changed, 22 deletions(-)
+
+commit 9a36a04d3f6edbb81a304b0cad3b60d2e90d2324
+Author: Christian Persch 
+Date:   2010-04-03 23:49:15 +0200
+
+    Fix crash when loading the bg pixbuf failed
+
+ src/vtebg.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit 61e12fa671c2af5766ba28077a788423355bb5c1
+Author: Christian Persch 
+Date:   2010-04-03 18:59:03 +0200
+
+    Clean up vtebg
+    
+    Fixes build with !GDK_WINDOWING_X11. Bug #614469.
+
+ src/vtebg.c   | 191 +++++++++++++++++++++++++++++-----------------------------
+ src/vtebg.h   |  19 +++---
+ src/vtedraw.c |   2 +-
+ src/vtedraw.h |   2 +-
+ 4 files changed, 107 insertions(+), 107 deletions(-)
+
+commit e2981d7ae9039256a22137a7f0b8fd886b794a94
+Author: Behdad Esfahbod 
+Date:   2010-04-01 18:09:41 -0400
+
+    Bug 604240 - fix set-scrolling-region behaviour on reset
+
+ src/vteseq.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit bd2da3fd0fc436887a61a89b0dd367954fa36745
+Author: Behdad Esfahbod 
+Date:   2010-04-01 02:16:56 -0400
+
+    Bug 604241 - improve xterm emulation of set-scrolling-region behaviour
+
+ src/caps.c         |  5 +++++
+ src/vteseq-n.gperf |  2 ++
+ src/vteseq.c       | 26 ++++++++++++++++++++++++++
+ 3 files changed, 33 insertions(+)
+
+commit f74f7b2ac16cedd53884917ede02e293276f40f2
+Author: Behdad Esfahbod 
+Date:   2010-04-01 01:52:35 -0400
+
+    Bug 613192 - check-doc-syntax.sh test fails
+
+ src/check-doc-syntax.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0f095ac8755655525a48424773cf06b5b9ed21e9
+Author: Behdad Esfahbod 
+Date:   2010-04-01 01:49:30 -0400
+
+    Fix warnings
+
+ src/dumpkeys.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 18ee5f522d8bc2f5dfe896f40eba8d5313cb310f
+Author: Behdad Esfahbod 
+Date:   2010-04-01 01:41:36 -0400
+
+    Don't hide cursor even if cell is invisible
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 09345b1ab25b72984419e82cfe3dca07bc5229ce
+Author: Behdad Esfahbod 
+Date:   2010-04-01 01:39:41 -0400
+
+    Bug 499944 - vte_sequence_handler_ta abuses cell.attr.invisible to hide tab char
+
+ src/vtedraw.c | 5 +++++
+ src/vteseq.c  | 1 -
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit f412a6f73a7b3a432bb88830b63ee25ea648619d
+Author: Behdad Esfahbod 
+Date:   2010-04-01 01:34:18 -0400
+
+    Followup on Bug 602596 - Cursor can become invisible
+    
+    Fix invisible attribute.
+
+ src/vte.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+commit 3a37564dbce407a112b82b3e7b384a6669c498a3
+Author: Behdad Esfahbod 
+Date:   2010-03-31 19:03:03 -0400
+
+    Remove #ident
+
+ python/vtemodule.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit b58bc5359085d2c9233ac6d6a265645bfa217e82
+Author: Behdad Esfahbod 
+Date:   2010-03-31 14:05:10 -0400
+
+    Bug 602596 - Cursor can become invisible
+    
+    Always compute the full fore/back color first, then reverse.
+    That's what xterm does also.
+
+ src/vte.c | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+commit 492f6a7d6dbb30b2dee2d3b4ee0cd7f9a3bb7f60
+Author: Christian Persch 
+Date:   2010-03-30 21:42:41 +0200
+
+    Also generate type builtins from vtedeprecated.h
+
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit d4d0df68fb76fc145d05c2d6c1a7354e1737cffa
+Author: Christian Persch 
+Date:   2010-03-30 21:34:31 +0200
+
+    Remove obsolete FIXME comment
+
+ src/pty.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 80ea6ee57d8d80a2876edf626e797e738c8419ad
+Author: Christian Persch 
+Date:   2010-03-30 21:33:15 +0200
+
+    Reindent code after removing extra block
+
+ src/pty.c | 44 ++++++++++++++++++++++----------------------
+ 1 file changed, 22 insertions(+), 22 deletions(-)
+
+commit d75b77aaccf81e56077525d9aba45bd1a59da2d8
+Author: Christian Persch 
+Date:   2010-03-30 21:31:29 +0200
+
+    Remove "utf-8" property on VtePty
+    
+    It doesn't make much sense.
+
+ src/pty.c | 36 +++---------------------------------
+ 1 file changed, 3 insertions(+), 33 deletions(-)
+
+commit 840e598b685e5d6bd7b7f73b3b972c99ca933bbd
+Author: Christian Persch 
+Date:   2010-03-30 21:29:16 +0200
+
+    Make vte_pty_set_utf8 return a GError on failure
+
+ src/pty.c    | 56 +++++++++++++++++++++++++++++++++++++++-----------------
+ src/vte.c    |  9 +++++++--
+ src/vtepty.h |  5 +++--
+ 3 files changed, 49 insertions(+), 21 deletions(-)
+
+commit 63a407a1f8c4f77fc8cdf3b8d404dca154a5b686
+Author: Christian Persch 
+Date:   2010-03-30 21:12:07 +0200
+
+    Remove FIXME
+
+ src/pty.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 13f08f861f96bf2c695ce2486729bf54df5e946d
+Author: Christian Persch 
+Date:   2010-03-30 21:11:34 +0200
+
+    Reindent after removing unnecessary block
+
+ src/pty.c | 129 +++++++++++++++++++++++++++++++-------------------------------
+ 1 file changed, 64 insertions(+), 65 deletions(-)
+
+commit 1665665bc4b66fe6e8b25466cf4768f026741212
+Author: Christian Persch 
+Date:   2010-03-30 21:10:15 +0200
+
+    Don't leak a FD on error
+
+ src/pty.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 85d92cf07482ab861173d5516319284b8173c801
+Author: Christian Persch 
+Date:   2010-03-30 21:02:20 +0200
+
+    Remove obsolete warning message
+    
+    We now report back a GError which is much better than spewing random
+    stuff to the console.
+
+ src/pty.c | 11 -----------
+ 1 file changed, 11 deletions(-)
+
+commit b6741eec1a280a590b20682e65e41ad65b84c50f
+Author: Christian Persch 
+Date:   2010-03-30 20:58:43 +0200
+
+    Preserve errno since the deprecated API might use it
+
+ src/pty.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+commit 9ce477c70120a2a24c32bcacebc28b6e09a63957
+Author: Christian Persch 
+Date:   2010-03-30 20:55:47 +0200
+
+    Don't allow setting negative row/column size
+
+ src/pty.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 8b6da8a26641ec84a6b0475d12e2b05952bf0cec
+Author: Christian Persch 
+Date:   2010-03-29 14:17:45 +0200
+
+    Update lt versioning
+
+ configure.in | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 5a472756b10dc8b683fc0372d97fb69ea4ff2256
+Author: Jamil Ahmed 
+Date:   2010-03-28 00:31:22 +0600
+
+    Updated Bengali translation
+
+ po/bn.po | 157 ++++++++++++++++++++++++++++++---------------------------------
+ 1 file changed, 75 insertions(+), 82 deletions(-)
+
+commit 8c1473f646bffffbc18c2473f6f1e80b9287a4b8
+Author: Behdad Esfahbod 
+Date:   2010-03-26 16:52:17 -0400
+
+    Bug 614048 - Never change active selection to a column block
+    
+    Only activate block selection if ctrl was pressed when selection was started.
+
+ src/vte.c | 42 +++---------------------------------------
+ 1 file changed, 3 insertions(+), 39 deletions(-)
+
+commit 26771370d12c58d5876aa7e0d8b7c6acd2698189
+Author: Christian Persch 
+Date:   2010-03-25 14:16:55 +0100
+
+    Use the set column/row size even when we don't have a PTY
+    
+    Bug #317158.
+
+ src/vte.c | 23 +++++------------------
+ 1 file changed, 5 insertions(+), 18 deletions(-)
+
+commit f116be136c0111d3ff1ea7a8c89233bd00fd5140
+Author: Christian Persch 
+Date:   2010-03-25 13:59:32 +0100
+
+    Add more conditionals
+    
+    Only use these signals if they're defined. Taken from the patch in
+    bug #369310.
+
+ src/pty.c | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+commit 1e684a5156f770c6238ef02e15b5d8713f43638d
+Author: Christian Persch 
+Date:   2010-03-24 21:38:32 +0100
+
+    Add GError param to vte_pty_new_foreign
+
+ src/pty.c    | 22 +++++++++-------------
+ src/vte.c    |  5 +++--
+ src/vtepty.h |  3 ++-
+ 3 files changed, 14 insertions(+), 16 deletions(-)
+
+commit 47ddb37d3e6900a456a6739ceb6f03ab96f7c1b0
+Author: Christian Persch 
+Date:   2010-03-24 21:29:11 +0100
+
+    Preserve errno
+
+ src/pty.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit bd66b79ef8395e9ffe177e82aff20bf5de6f79e5
+Author: Christian Persch 
+Date:   2010-03-24 21:26:23 +0100
+
+    Don't leak a FD when starting the PTY helper fails
+
+ src/pty.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit 28b4c114ab963aa526a27853fd16e311f5bfc171
+Author: Christian Persch 
+Date:   2010-03-24 15:46:41 +0100
+
+    Return error when compiled without g-p-h and no-fallback flag used
+
+ src/pty.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+commit da94ec83debfbf19e36fec9aea15f619803cee70
+Author: Christian Persch 
+Date:   2010-03-24 15:21:49 +0100
+
+    Preserve errno for the _vte_pty_* compat API
+
+ src/pty.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit c7070697b5363714462c7450448475918ffac0a3
+Author: Christian Persch 
+Date:   2010-03-24 15:18:53 +0100
+
+    More error handling
+
+ src/pty.c | 28 +++++++++++++++++++++++-----
+ 1 file changed, 23 insertions(+), 5 deletions(-)
+
+commit 1e2b9d17dcbfd530e925a9896d106ca4885e0911
+Author: Christian Persch 
+Date:   2010-03-24 14:57:33 +0100
+
+    Better error reporting
+
+ src/pty.c | 24 ++++++++++++++----------
+ 1 file changed, 14 insertions(+), 10 deletions(-)
+
+commit d08ab3e5641e6f486e1918d32566bec104924698
+Author: Christian Persch 
+Date:   2010-03-24 14:15:08 +0100
+
+    Prevent single inclusion of vtedeprecated.h
+
+ src/vte.h           | 2 ++
+ src/vtedeprecated.h | 4 ++++
+ 2 files changed, 6 insertions(+)
+
+commit 8d263ba855ca6cbf741fc9cdfc921963be63991c
+Author: Christian Persch 
+Date:   2010-03-24 14:10:47 +0100
+
+    Move deprecated stuff out of vte.h
+    
+    ... and into vtedeprecated.h. This way it won't end up in the GIR.
+
+ src/Makefile.am     |  3 +-
+ src/vte.h           | 78 +++-----------------------------------------
+ src/vtedeprecated.h | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 99 insertions(+), 75 deletions(-)
+
+commit 4ad049abbad52836542551953c4072ae08d7ceea
+Author: Christian Persch 
+Date:   2010-03-24 14:05:04 +0100
+
+    Improve error messages
+    
+    Get more specific error messages telling what exactly went wrong.
+
+ src/pty.c | 77 ++++++++++++++++++++++++++++++++++++++++++---------------------
+ 1 file changed, 52 insertions(+), 25 deletions(-)
+
+commit 52ec2582e509940ec48215c03d120ec2ace46076
+Author: Badral Sanligiin 
+Date:   2010-03-23 02:34:11 +0100
+
+    Updated Mongolian translation
+
+ po/mn.po | 100 ++++++++++++++++++++++++++++++++-------------------------------
+ 1 file changed, 51 insertions(+), 49 deletions(-)
+
+commit 5cd582723d55a487d8117adbae28f7bf0fd76da3
+Author: Behdad Esfahbod 
+Date:   2010-03-21 22:26:59 -0400
+
+    Bug 613528 - computed size is wrong with low width and height values in vte_terminal_size_allocate
+
+ src/vte.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 087f18c041175fe73b187ee4f1ad89a2aa53bbff
+Author: Christian Persch 
+Date:   2010-03-18 20:27:30 +0100
+
+    Move deprecated stuff to the end
+
+ src/vte.h | 46 ++++++++++++++++++----------------------------
+ 1 file changed, 18 insertions(+), 28 deletions(-)
+
+commit 8f67e5d4b0ad71d512d47082b46fe353efff1601
+Author: Christian Persch 
+Date:   2010-03-18 13:24:50 +0100
+
+    Add PTY flags option to vteapp
+    
+    So I can test the PTY implementation.
+
+ src/vteapp.c | 42 +++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 41 insertions(+), 1 deletion(-)
+
+commit 75594032397e16e7f6b34ca89fe506c16f011bda
+Author: Christian Persch 
+Date:   2010-03-18 00:21:24 +0100
+
+    Remove unnecessary include
+
+ src/vte.h    | 2 ++
+ src/vtepty.h | 2 --
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 6ed5d3120d575531a5e25594785310ddaf28d330
+Author: Christian Persch 
+Date:   2010-03-17 22:59:43 +0100
+
+    Docs update
+
+ src/vte.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit cb7b31e70e34b7af4162fd28b947678c31609819
+Author: Christian Persch 
+Date:   2010-03-17 22:37:41 +0100
+
+    Work harder to preserve errno
+
+ src/pty.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit fb2739a358ae8f4775150f54745e16be698775db
+Author: Christian Persch 
+Date:   2010-03-17 22:34:16 +0100
+
+    Use errsv here instead of errno
+
+ src/pty.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 7f0db06fc886d8a98ea171d775ee8293554ab704
+Author: Christian Persch 
+Date:   2010-03-17 21:54:46 +0100
+
+    Use G_SPAWN_SEARCH_PATH in vteapp's --command
+
+ src/vteapp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit e1b7915a6cb88da609f2c9a7c754ff75aa260d88
+Author: Christian Persch 
+Date:   2010-03-17 21:23:40 +0100
+
+    Add introspection
+    
+    Based on a patch by Johan Dahlin from bug #604837.
+
+ Makefile.am     |  2 +-
+ configure.in    | 11 +++++++++++
+ src/Makefile.am | 33 +++++++++++++++++++++++++++++++++
+ 3 files changed, 45 insertions(+), 1 deletion(-)
+
+commit eb412ad588f9796bdeb63f3cfddf419cd99b28e3
+Author: Christian Persch 
+Date:   2010-03-17 21:23:27 +0100
+
+    Remove removed pty test
+
+ src/Makefile.am | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+commit 74b824a278cc884be462855f148bcc8b349f2d46
+Author: Christian Persch 
+Date:   2010-03-17 19:19:22 +0100
+
+    Use inner-border property
+    
+    Replace deprecated vte_terminal_get_padding() with "inner-border" style
+    property.
+
+ src/vteaccess.c | 18 ++++++++++-----
+ src/vteapp.c    | 72 +++++++++++++++++++++++++++++++++++----------------------
+ 2 files changed, 56 insertions(+), 34 deletions(-)
+
+commit 8cc30010ef4e8d67bf3bba68a7c45e47992b35ac
+Author: Christian Persch 
+Date:   2010-03-17 19:03:19 +0100
+
+    Rename VTE_SEAL to _VTE_SEAL
+    
+    So that gtk-doc doesn't think this macro should be documented.
+
+ src/vte.h | 90 +++++++++++++++++++++++++++++++--------------------------------
+ 1 file changed, 45 insertions(+), 45 deletions(-)
+
+commit cc1431c5cc8f12252a3ebeb17da273d6edfe1c56
+Author: Christian Persch 
+Date:   2010-03-17 19:01:13 +0100
+
+    Seal VteTerminal
+    
+    All of these public fields have accessors already.
+
+ src/vte.h | 30 +++++++++---------------------
+ 1 file changed, 9 insertions(+), 21 deletions(-)
+
+commit 15221b3505dc9a7ee9eec63e9d3d040a211aca60
+Author: Christian Persch 
+Date:   2010-03-17 18:50:22 +0100
+
+    Deprecated VteTerminalClass::*_signal
+    
+    These signal IDs are useless. If someone is interested in the signal ID,
+    they can just use g_signal_lookup().
+
+ src/vte.h | 70 ++++++++++++++++++++++++++++++---------------------------------
+ 1 file changed, 33 insertions(+), 37 deletions(-)
+
+commit 106081e2d1875d893e598a4d20bfab266b6a764e
+Author: Christian Persch 
+Date:   2010-03-17 18:40:49 +0100
+
+    Add VTE_SEAL and VTE_DEPRECATED macros
+
+ src/vte.h | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+commit 4c07ce73bef1f253075c382d0e55cc526df7222a
+Author: Christian Persch 
+Date:   2010-01-30 14:15:37 +0100
+
+    Add index for new API in 0.26
+
+ doc/reference/vte-docs.xml | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit e45144f8a70244da43723349b09d9edf5f9d8d1f
+Author: Christian Persch 
+Date:   2010-01-30 14:14:19 +0100
+
+    Update version in API docs for new/deprecated APIs
+
+ src/pty.c    | 40 ++++++++++++++++++++--------------------
+ src/vte.c    | 24 ++++++++++++------------
+ src/vtepty.h |  6 +++---
+ 3 files changed, 35 insertions(+), 35 deletions(-)
+
+commit dd08c50c6a6dd4349d3cbce271ddf4b741db8861
+Author: Christian Persch 
+Date:   2010-01-14 18:08:33 +0100
+
+    Add VtePty and adapt the VteTerminal APIs to it
+    
+    Add VtePty as a GObject holding the info about the PTY. Add new API to
+    VteTerminal to set a VtePty, and deprecate the old API that takes a FD
+    to the PTY. Also deprecate the whole of the undocumented _vte_pty_*()
+    APIs.
+    
+    Add vte_terminal_fork_command_full() variant that allow providing a
+    custom child setup function and that returns a GError on failure.
+    
+    Bug #585841, bug #320128, bug #514447, bug #588871.
+
+ Makefile.am                    |    2 +-
+ doc/reference/vte-docs.xml     |    3 +
+ doc/reference/vte-sections.txt |   50 +-
+ doc/reference/vte.types        |    5 +-
+ gnome-pty-helper/configure.in  |    5 +-
+ src/Makefile.am                |   14 +-
+ src/pty.c                      | 1672 ++++++++++++++++++++++++++++++----------
+ src/pty.h                      |    6 +-
+ src/vte-private.h              |    3 +-
+ src/vte.c                      |  789 +++++++++++++------
+ src/vte.h                      |   40 +-
+ src/vteapp.c                   |   32 +-
+ src/vtepty-private.h           |   43 ++
+ src/vtepty.h                   |  121 +++
+ 14 files changed, 2075 insertions(+), 710 deletions(-)
+
+commit 9103412cc7c3706f246a1e382af7361f6319c104
+Author: Christian Persch 
+Date:   2010-03-17 18:21:39 +0100
+
+    Post branch version bump
+
+ configure.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 953625f24173318ba1a553866a9b8c7cb83aac01
+Author: Behdad Esfahbod 
+Date:   2010-03-13 00:02:57 -0500
+
+    [git.mk] Update from pango
+
+ git.mk | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit bcb4b775af73cf9da76a79083cd446122bd5c97f
+Author: Marek Černocký 
+Date:   2010-03-06 19:14:08 +0100
+
+    Update Czech translation
+
+ po/cs.po | 102 ++++++++++++++++++++++++++++++---------------------------------
+ 1 file changed, 48 insertions(+), 54 deletions(-)
+
+commit 41c42c121b89eeb6c73b6deb9c71c4661f12a858
+Author: Piotr Drąg 
+Date:   2010-02-25 13:47:36 +0100
+
+    Updated Polish translation
+
+ po/pl.po | 160 +++++++++++++++++++--------------------------------------------
+ 1 file changed, 47 insertions(+), 113 deletions(-)
+
+commit 17c16e6babd0be2a40cf2faa745295c9b47b6655
+Author: Fran Diéguez 
+Date:   2010-02-15 17:19:27 +0100
+
+    Updated Galician Translation
+
+ po/gl.po | 60 +++++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 31 insertions(+), 29 deletions(-)
+
+commit 11c0cd96e0614a96aebc0bc64e3c9a9fe357c4e3
+Author: Behdad Esfahbod 
+Date:   2010-01-26 14:39:18 -0500
+
+    Improve debug message
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5f4f67f579c9530af716573d6aaafc9cdb060e09
+Author: Kristian Høgsberg 
+Date:   2010-01-12 10:57:45 -0500
+
+    vtebg: Cache backgrounds as cairo surfaces
+
+ src/vtebg.c   | 385 +++++++++++++++++-----------------------------------------
+ src/vtebg.h   |  15 ++-
+ src/vtedraw.c |  33 ++---
+ 3 files changed, 134 insertions(+), 299 deletions(-)
+
+commit d8e791be89f38e168faf078268be8bdee4a6715d
+Author: Christian Persch 
+Date:   2010-01-14 18:42:06 +0100
+
+    Modernise the API docs
+    
+    Update to gtk-doc 0.13. Drop tmpl use, use , add object
+    hierarchy, index, deprecated symbols index, and indices for new symbols
+    in 0.20 and 0.24.
+
+ autogen.sh                         |    3 +-
+ configure.in                       |    9 +-
+ doc/reference/Makefile.am          |  137 +++-
+ doc/reference/tmpl/internals.sgml  |   20 -
+ doc/reference/tmpl/pty.sgml        |   18 -
+ doc/reference/tmpl/reaper.sgml     |   25 -
+ doc/reference/tmpl/vte-unused.sgml |  516 ---------------
+ doc/reference/tmpl/vte.sgml        | 1287 ------------------------------------
+ doc/reference/tmpl/vteaccess.sgml  |   37 --
+ doc/reference/tmpl/vteversion.sgml |   59 --
+ doc/reference/version.xml.in       |    1 +
+ doc/reference/vte-docs.sgml        |   25 -
+ doc/reference/vte-docs.xml         |  127 ++++
+ doc/reference/vte-sections.txt     |   70 +-
+ doc/reference/vte.types            |   12 +-
+ src/reaper.c                       |   26 +
+ src/reaper.h                       |    8 +
+ src/vte.c                          |   32 +-
+ src/vte.h                          |   98 ++-
+ src/vteaccess.c                    |   10 +-
+ src/vteaccess.h                    |   62 +-
+ src/vteversion.h.in                |   47 ++
+ 22 files changed, 516 insertions(+), 2113 deletions(-)
+
+commit e8594f159ef206bbd357db6bf28f659eccfefc9a (tag: 0.23.5)
+Author: Behdad Esfahbod 
+Date:   2010-01-13 20:32:09 -0500
+
+    Release 0.23.5
+
+ NEWS         | 4 ++++
+ configure.in | 6 +++---
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+commit 08ee96f50c5053721c31a1eefa05bd6e92a368a7 (tag: 0.23.4)
+Author: Behdad Esfahbod 
+Date:   2010-01-13 20:21:38 -0500
+
+    Release 0.23.4
+
+ NEWS         | 5 +++++
+ configure.in | 6 +++---
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+commit d9f1a47a2f14dd0404a7fc9bab7b24a3916922e8
+Author: Behdad Esfahbod 
+Date:   2010-01-13 19:48:59 -0500
+
+    [doc] Update list of symbols
+
+ doc/reference/tmpl/vte.sgml    |  45 +++++++++++++-----
+ doc/reference/vte-sections.txt | 105 +++++++++--------------------------------
+ src/vte.c                      |   2 +-
+ 3 files changed, 57 insertions(+), 95 deletions(-)
+
+commit ce4f4bc7e0157ff3fc3ce03ce7efb7ba5d4f9bd0
+Author: Behdad Esfahbod 
+Date:   2010-01-13 19:41:12 -0500
+
+    [doc] Update list of header files
+
+ doc/reference/Makefile.am | 18 ++++++------------
+ 1 file changed, 6 insertions(+), 12 deletions(-)
+
+commit 13000e1938ef4c0968f03503e892b939acfec3e2
+Author: Behdad Esfahbod 
+Date:   2010-01-13 19:40:49 -0500
+
+    Fix doc typo
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 38b6a46d413247d7acda50f7729048c635ffe23b
+Author: Behdad Esfahbod 
+Date:   2010-01-13 19:33:34 -0500
+
+    [ring] Only write_contents() the part of history that fits in the num rows
+
+ src/ring.c           | 12 ++++++++++--
+ src/vtestream-base.h | 12 +++++++++---
+ src/vtestream-file.h | 19 +++++++++++++++----
+ src/vtestream.h      |  4 +++-
+ 4 files changed, 37 insertions(+), 10 deletions(-)
+
+commit 9d18ff3de3ff4ca36570d6872a079b8cd09d889d
+Author: Behdad Esfahbod 
+Date:   2010-01-13 19:33:21 -0500
+
+    [app] Fix signal connection
+
+ src/vteapp.c | 30 +++++++++++++-----------------
+ 1 file changed, 13 insertions(+), 17 deletions(-)
+
+commit f7920a159918b81286d5345ed83a7b5ce2c5668f
+Author: Behdad Esfahbod 
+Date:   2010-01-13 18:13:30 -0500
+
+    Initial implementation of vte_terminal_write_contents()
+    
+    Currently is buggy in that it writes parts of history still in the ring but
+    before set number of history lines.  Fix coming.
+
+ configure.in         |  5 ++--
+ src/Makefile.am      |  4 ++--
+ src/ring.c           | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++-
+ src/ring.h           | 12 +++++++++-
+ src/vte.c            | 38 ++++++++++++++++++++++++++++++-
+ src/vte.h            | 19 ++++++++++++++--
+ src/vteapp.c         | 55 ++++++++++++++++++++++++++++++++------------
+ src/vtestream-base.h | 10 +++++++-
+ src/vtestream-file.h | 31 ++++++++++++++++++++++++-
+ src/vtestream.c      |  7 +++---
+ src/vtestream.h      |  4 +++-
+ 11 files changed, 217 insertions(+), 32 deletions(-)
+
+commit 2e612fbb78b5a30ca57c4721743dc4d1a3f2884a
+Author: Behdad Esfahbod 
+Date:   2010-01-13 16:43:16 -0500
+
+    [ring] Don't xor attrs with basic_attrs
+    
+    Before we did that to better handle failed reads.  Now we explicitly handle
+    read failure, so no need to do it anymore.
+
+ src/ring.c | 12 +++---------
+ 1 file changed, 3 insertions(+), 9 deletions(-)
+
+commit 3ea88f06dbe753cf1884000354f6555be92af1e8 (tag: 0.23.3)
+Author: Behdad Esfahbod 
+Date:   2010-01-13 12:19:59 -0500
+
+    Release 0.23.3
+
+ NEWS         | 8 ++++++++
+ configure.in | 4 ++--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+commit 598d7ef7300d94888068a89eaf02f80e4a0a27be
+Author: Behdad Esfahbod 
+Date:   2010-01-13 12:09:14 -0500
+
+    Disable deprecation stuff since they were broken
+    
+    Needs proper fixing later.
+
+ configure.in | 40 ++++++++++++++++++++--------------------
+ 1 file changed, 20 insertions(+), 20 deletions(-)
+
+commit 38b2a632d1a1e86fee82eb460201fb3d3b547ab3
+Author: Behdad Esfahbod 
+Date:   2010-01-12 03:12:13 -0500
+
+    [draw] Rename a bit
+
+ src/vtedraw.c | 27 +++++++++++++--------------
+ 1 file changed, 13 insertions(+), 14 deletions(-)
+
+commit 7d9f0294f6ea52bb2525863350fbbac12f9d1459
+Author: Behdad Esfahbod 
+Date:   2010-01-12 03:09:45 -0500
+
+    [draw] Update comments
+
+ src/vtedraw.c | 13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+commit c36b81bbee7addf15cf57ca8401ac9245affe678
+Author: Behdad Esfahbod 
+Date:   2010-01-12 02:47:25 -0500
+
+    Fix debug info
+
+ src/vte.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit 5311d24f0382fbfaac117a46b45f1163f370bfbd
+Author: Behdad Esfahbod 
+Date:   2010-01-12 02:44:16 -0500
+
+    Fix deprecation enabling logic
+
+ configure.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 884527cf0a37728d53cff21d0ce4f07911f2049e
+Author: Behdad Esfahbod 
+Date:   2010-01-12 02:39:33 -0500
+
+    Bug 534526 - Flickering when resizing a vte widget
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c31361e5ef7a255e4ce96fa884bf71daafc86dbe
+Author: Behdad Esfahbod 
+Date:   2010-01-12 02:31:13 -0500
+
+    Use PangoColor to unify mixed use of GdkColor and vte_palette_entry
+
+ src/vte-private.h |  6 ++--
+ src/vte.c         | 97 ++++++++++++++++++++-----------------------------------
+ src/vtebg.c       | 12 +++----
+ src/vtebg.h       |  2 +-
+ src/vtedraw.c     | 14 ++++----
+ src/vtedraw.h     | 10 +++---
+ 6 files changed, 56 insertions(+), 85 deletions(-)
+
+commit 1608eb418aeb23c7fd27814ba7148ae2708c8017
+Author: Behdad Esfahbod 
+Date:   2010-01-12 02:08:51 -0500
+
+    Add const to GdkColor
+
+ src/vtedraw.c | 10 +++++-----
+ src/vtedraw.h |  8 ++++----
+ 2 files changed, 9 insertions(+), 9 deletions(-)
+
+commit 3c4380448abf647fe7ff93745c9def5f5e2ec326
+Author: Behdad Esfahbod 
+Date:   2010-01-12 02:07:47 -0500
+
+    Draw rectangles in one shot
+
+ src/vte.c     | 22 ++++++++++++----------
+ src/vtedraw.c |  4 ++--
+ 2 files changed, 14 insertions(+), 12 deletions(-)
+
+commit 1ad50e4873fe5c9029e7ea2ad9dc554bce2edfb9
+Author: Behdad Esfahbod 
+Date:   2010-01-12 01:54:54 -0500
+
+    Cleanup cursor drawing
+
+ src/vte.c | 41 +++++++++++++++--------------------------
+ 1 file changed, 15 insertions(+), 26 deletions(-)
+
+commit 146b8bc6e2acd34fec8f98a3946f1b1e9e316a21
+Author: Behdad Esfahbod 
+Date:   2010-01-12 01:36:52 -0500
+
+    [draw] Cleanup ->started counting
+
+ src/vtedraw.c | 18 ++++++++----------
+ 1 file changed, 8 insertions(+), 10 deletions(-)
+
+commit 8ab0bb6d55824b7a7728d7e5d4dd782785b21540
+Author: Behdad Esfahbod 
+Date:   2010-01-12 01:10:45 -0500
+
+    Reorder code such that screen can never be NULL
+
+ src/vte.c | 45 +++++++++++++++++++++------------------------
+ 1 file changed, 21 insertions(+), 24 deletions(-)
+
+commit 3b5c1662f9215d66a56506a3858b14ed03d5061b
+Merge: 422519de 021e4a50
+Author: Kristian Høgsberg 
+Date:   2010-01-06 10:54:16 -0500
+
+    Merge branch 'backend-cleanup'
+
+commit 422519de06c76c89a6df5cea7c344a1d32c4b856
+Author: Xandru Armesto Fernandez 
+Date:   2010-01-04 09:38:52 +0100
+
+    Added asturian language
+
+ po/LINGUAS | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 1483c1ca64cfdebf893ef16c225b3395595d4436
+Author: Xandru Armesto Fernandez 
+Date:   2010-01-04 09:38:32 +0100
+
+    Updated asturian language
+
+ po/ast.po | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 95 insertions(+)
+
+commit 4db015d59e80a992c86827e612e06c7df1c901f0
+Author: Josh Triplett 
+Date:   2009-12-28 03:22:48 +0100
+
+    Bug 605299 - Please support xterm bracketed paste mode
+
+ src/vte-private.h | 1 +
+ src/vte.c         | 6 ++++++
+ src/vteseq.c      | 5 +++++
+ 3 files changed, 12 insertions(+)
+
+commit 021e4a5082c46ffdf6998beaacca948749079b15
+Author: Kristian Høgsberg 
+Date:   2009-12-23 12:18:32 -0500
+
+    Pass rgba as doubles to _vte_draw_set_background_solid()
+
+ src/vte.c     | 27 ++++++++++-----------------
+ src/vtedraw.c | 14 ++++++++------
+ src/vtedraw.h |  6 ++++--
+ 3 files changed, 22 insertions(+), 25 deletions(-)
+
+commit 0edf9e87b374488c502c9c8157f07fcf64692593
+Author: Kristian Høgsberg 
+Date:   2009-12-23 11:28:36 -0500
+
+    Drop _vte_draw_get_visual() and _vte_draw_get_colormap()
+
+ src/vte.c     |  5 ++---
+ src/vtedraw.c | 26 +-------------------------
+ src/vtedraw.h |  7 -------
+ 3 files changed, 3 insertions(+), 35 deletions(-)
+
+commit a7ce6af6a780f95d2725f3084808c0d09745e566
+Author: Kristian Høgsberg 
+Date:   2009-12-23 11:11:48 -0500
+
+    Make struct struct _vte_draw private to vtedraw.c
+    
+    Merge in struct _vte_pangocairo_data.
+
+ src/vtedraw.c | 174 ++++++++++++++++++++++++----------------------------------
+ src/vtedraw.h |  11 ----
+ 2 files changed, 71 insertions(+), 114 deletions(-)
+
+commit c7c5b1ee0c31736b2a02634da9822d1988e5fdfc
+Author: Kristian Høgsberg 
+Date:   2009-12-23 11:06:27 -0500
+
+    Make _vte_draw_start() recursive
+
+ src/vte.c     | 10 ++--------
+ src/vtedraw.c | 14 ++++++++------
+ src/vtedraw.h |  2 +-
+ 3 files changed, 11 insertions(+), 15 deletions(-)
+
+commit 7676930c7e1bddd33455a6421fc335027ba50891
+Author: Kristian Høgsberg 
+Date:   2009-12-23 10:31:08 -0500
+
+    Merge vtepangocairo.c into vtedraw.c
+
+ src/Makefile.am     |    1 -
+ src/vtedraw.c       | 1220 +++++++++++++++++++++++++++++++++++++++++++++++++-
+ src/vtepangocairo.c | 1232 ---------------------------------------------------
+ 3 files changed, 1211 insertions(+), 1242 deletions(-)
+
+commit 77ea73bf2ae87c35fe24b49af61d9e6b58e2c551
+Author: Kristian Høgsberg 
+Date:   2009-12-23 10:26:59 -0500
+
+    Drop struct _vte_draw_impl
+
+ src/Makefile.am     |  3 --
+ src/vtedraw.c       | 14 ++-------
+ src/vtedraw.h       | 44 ---------------------------
+ src/vtepangocairo.c | 41 ++++---------------------
+ src/vtepangocairo.h | 33 --------------------
+ src/vteskel.c       | 86 -----------------------------------------------------
+ src/vteskel.h       | 33 --------------------
+ 7 files changed, 8 insertions(+), 246 deletions(-)
+
+commit 58689c06e1d15d645c1181f0f8288fefa52f967e
+Author: Kristian Høgsberg 
+Date:   2009-12-23 10:20:50 -0500
+
+    Merge pangocairo draw into remaining vte_draw functions
+
+ src/vtedraw.c       | 233 ---------------------------------------------------
+ src/vtepangocairo.c | 236 ++++++++++++++++++++++++++++++++++++----------------
+ 2 files changed, 165 insertions(+), 304 deletions(-)
+
+commit 02e5dd66a5bd4bbaa8a0c4bab46c1341af3d9f36
+Author: Kristian Høgsberg 
+Date:   2009-12-23 09:50:10 -0500
+
+    Make _vte_draw_new always create a pangocairo implementation
+
+ src/vtedraw.c       | 121 ----------------------------------------------------
+ src/vtepangocairo.c |  36 +++++++++++++---
+ 2 files changed, 30 insertions(+), 127 deletions(-)
+
+commit 718b6f1d1707a4397098cab0ec3bc4980cb7d1bf
+Author: Behdad Esfahbod 
+Date:   2009-12-22 15:27:01 +0100
+
+    Release 0.23.2
+
+ NEWS         | 16 ++++++++++++++++
+ configure.in |  6 +++---
+ 2 files changed, 19 insertions(+), 3 deletions(-)
+
+commit 7f017f27ff254995c1ad4fbe4947b929c4c6046f
+Author: Behdad Esfahbod 
+Date:   2009-12-19 13:50:04 +0100
+
+    Bug 604966 - Fix "select all" to include text occurring after the visible region
+
+ src/vte.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 3c99618132e8f5924f7a865ce595593889000211
+Author: Behdad Esfahbod 
+Date:   2009-12-15 00:30:37 -0500
+
+    Fix overflow with unlimited scrollback lines
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 31ba6a0a615c9b5d61bb335f756c7c02e701ef5e
+Author: Behdad Esfahbod 
+Date:   2009-12-09 01:29:27 -0500
+
+    Bug 604135 - [PATCH] fix behaviour of set-scrolling-region
+
+ src/vteseq.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit fa070a0ebdfab5e33e550e4561179498752a29c6
+Author: Behdad Esfahbod 
+Date:   2009-12-09 00:57:01 -0500
+
+    Bug 603733 - Remove deprecated Glib symbol
+    
+    Require glib >= 2.22.0
+
+ configure.in | 2 +-
+ src/vtetc.c  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 47406a81f737f6f01fd148ab004de4eac641d571
+Author: Behdad Esfahbod 
+Date:   2009-12-03 13:26:25 -0500
+
+    Bug 603713 - ibeam/underline cursor broken with large inner-border
+
+ src/vte.c | 46 +++++++++++++++++-----------------------------
+ 1 file changed, 17 insertions(+), 29 deletions(-)
+
+commit e72d7ed4da9d065afc494da304741ca5484b1f9b
+Author: Christian Persch 
+Date:   2009-12-03 18:35:50 +0100
+
+    vteapp: Fix --cursor-shape thinko
+
+ src/vteapp.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 7d755a30393124319d3406efb98a5f612538501b
+Author: Christian Persch 
+Date:   2009-12-03 18:32:35 +0100
+
+    vteapp: Add --cursor-shape option
+    
+    Use --cursor-shape=block|ibeam|underline to test cursor shapes.
+
+ src/vteapp.c | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+commit f100847c373f8bfd881d0c9dae213c312334578c
+Author: Christian Persch 
+Date:   2009-12-01 16:01:01 +0100
+
+    Fix deprecation versions
+
+ src/vte.c | 58 +++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 29 insertions(+), 29 deletions(-)
+
+commit bbb00399fce8008fee378d31aa18a6b7c89d6c2b
+Author: Christian Persch 
+Date:   2009-12-01 15:59:12 +0100
+
+    Fix deprecation version of vte_terminal_get_padding
+    
+    It's 0.24, not 0.22.
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a34ea6198748e1621b8f148d81b424ca5312f818
+Author: Christian Persch 
+Date:   2009-12-01 00:21:43 +0100
+
+    Deprecate vte_terminal_get_padding
+    
+    Part of bug #471920.
+
+ src/vte.c | 13 ++++++++++++-
+ src/vte.h |  2 ++
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+commit 25a0fa44c92044b51296be94b9e1680d83270adc
+Author: Christian Persch 
+Date:   2009-11-30 23:32:33 +0100
+
+    Replace VTE_PAD_WIDTH with inner-border
+    
+    Part of bug #471920.
+
+ src/vte-private.h |   1 -
+ src/vte.c         | 123 +++++++++++++++++++++++++++++-------------------------
+ src/vteseq.c      |  39 +++++++++++------
+ 3 files changed, 91 insertions(+), 72 deletions(-)
+
+commit a327292cbb073e7fb1a1298f614f980447f474fe
+Author: Christian Persch 
+Date:   2009-11-30 23:06:01 +0100
+
+    Add VteTerminal::inner-border style property
+    
+    Part of bug #471920.
+
+ doc/reference/tmpl/vte.sgml |  5 +++++
+ src/vte-private.h           |  3 +++
+ src/vte.c                   | 51 ++++++++++++++++++++++++++++++++++++++++++++-
+ 3 files changed, 58 insertions(+), 1 deletion(-)
+
+commit 320902d84b99c58ab7d6ae82b65bb1311288fe75
+Author: Christian Persch 
+Date:   2009-11-30 22:46:53 +0100
+
+    Remove early return from style-set on non-realized widget
+    
+    vte_terminal_set_font_full_internal copes just fine with this.
+
+ src/vte.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+commit 66d729e0b6d84d7cce204d5a3c9b8e6b98087f07
+Author: Christian Persch 
+Date:   2009-11-30 22:39:55 +0100
+
+    Chain up to style-set on parent class
+
+ src/vte.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+commit e42c9ce6035d1b38dce3ad815f1241c8d658acf2
+Author: Adi Roiban 
+Date:   2009-11-27 04:41:22 +0200
+
+    Update Romanian translations
+
+ po/ro.po | 35 ++++++++++++++++-------------------
+ 1 file changed, 16 insertions(+), 19 deletions(-)
+
+commit e25247345d6c075a131a90cb2c65471811a89c64
+Author: Behdad Esfahbod 
+Date:   2009-11-22 15:24:28 -0500
+
+    [interpret] Make the interpret app interactive
+
+ src/interpret.c | 147 +++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 75 insertions(+), 72 deletions(-)
+
+commit 91448540f68235c7e1975fa604842b7872bc0f7a
+Author: Behdad Esfahbod 
+Date:   2009-11-09 19:53:08 -0500
+
+    Bug 601265 -  gnome-terminal assert failure: table.c:723:_vte_table_match
+    
+    Fix handling of %% in termcap strings.
+    Remove the assertion.
+
+ src/table.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 59d08fab676cccbed8df7f8e9d9a39bab6e5413d
+Author: Behdad Esfahbod 
+Date:   2009-11-09 19:04:46 -0500
+
+    Fix warnings
+
+ src/iso2022.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit 7556c58a6f21f846b97351ee2002e0b1d9236824
+Author: Behdad Esfahbod 
+Date:   2009-11-09 18:55:16 -0500
+
+    Handle destroying NULL termcap
+
+ src/vtetc.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit bdc0cca890297a44c86395e27ee51cdfef5f3961
+Author: Behdad Esfahbod 
+Date:   2009-11-09 18:52:47 -0500
+
+    Comment out unused code
+
+ src/caps.c | 2 ++
+ src/caps.h | 3 ---
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+commit 2035eb905aed8905e44781f3f64786fc84cd51c7
+Author: Peteris Krisjanis 
+Date:   2009-11-08 20:36:09 +0200
+
+    Updated Latvian translation.
+
+ po/lv.po | 119 +++++++++++++++++++++++++++++++--------------------------------
+ 1 file changed, 58 insertions(+), 61 deletions(-)
+
+commit 9120f5ebfb9da0d74698f187ebb3046877b48c19
+Author: Behdad Esfahbod 
+Date:   2009-11-08 12:04:16 -0500
+
+    Revert "Bug 591648 - Don't clear the screen when switching to the alternate screen"
+    
+    This reverts commit c6d9bf421f12911298d921314ced64661f6b63bd.
+    That commit introduced issues with less.   Xterm doesn't have those
+    problems.  Need to figure out what's going on  before committing this
+    again.
+
+ src/vteseq.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit d45fdfa66452427ddf2a28fcaff148b0ead9d815
+Author: Thomas Thurman 
+Date:   2009-11-01 15:46:08 -0500
+
+    Shavian translation
+
+ po/LINGUAS    |  1 +
+ po/en@shaw.po | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 91 insertions(+)
+
+commit be0f71823453ef07b6a8c4b6072bdd6b772c74b1
+Author: Christian Persch 
+Date:   2009-10-29 18:59:52 +0100
+
+    Use right modifier to printf gulong
+    
+    Fixes a compiler warning.
+
+ src/ring.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 16db4039b0ea75454c6d51c1a685f3c9d16ffb11 (tag: 0.23.1)
+Author: Behdad Esfahbod 
+Date:   2009-10-26 20:15:21 -0400
+
+    Released 0.23.1
+
+ NEWS         | 25 +++++++++++++++++++++++++
+ configure.in | 10 +++++-----
+ 2 files changed, 30 insertions(+), 5 deletions(-)
+
+commit a91d1adf8cbc3bf9755d1c211f490366ac47782c
+Author: Behdad Esfahbod 
+Date:   2009-10-26 19:54:28 -0400
+
+    Handle out-of-history remove's gracefully
+    
+    They happen at times of resizing the terminal, etc.
+    
+    Bug 597604 - gnome-terminal assert failure:
+    Vte:ERROR:/build/buildd/vte-0.22.0/./src/ring.c:530:_vte_ring_remove:
+    assertion failed: (_vte_ring_contains (ring, position))
+
+ src/ring.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit c621a6e8c4beffb2faf70404b843cf93def8cc1b
+Author: Behdad Esfahbod 
+Date:   2009-10-26 19:54:08 -0400
+
+    [ring] Remove one assertion
+    
+    Better dealing with corrupt history file, etc.
+
+ src/ring.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+commit 572f86ce2faf7532c30751e5c5f9893468550eba
+Author: Behdad Esfahbod 
+Date:   2009-10-26 19:53:33 -0400
+
+    Cosmetic
+
+ src/vte.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit af5726e0c546f9a4914dd80c03e11e1aadc034f2
+Author: Behdad Esfahbod 
+Date:   2009-10-26 19:19:16 -0400
+
+    Finish selection rework
+    
+    Bug 598124 - The selection does not only change when the mousebutton is released
+    
+    Only update selection when mouse-button is released (or focus lost).
+    Also, update PRIMARY when _select_all() is called.
+
+ src/vte.c | 27 +++++++++------------------
+ 1 file changed, 9 insertions(+), 18 deletions(-)
+
+commit de1bd5a05102d26f211d4f636aea2662c6b4e7fc
+Author: Behdad Esfahbod 
+Date:   2009-10-26 17:01:55 -0400
+
+    Bug 598090 - LMB Mouse up event not registered when opining context popup menu
+
+ src/vte.c | 101 ++++++++++++++++++++++++++++----------------------------------
+ 1 file changed, 46 insertions(+), 55 deletions(-)
+
+commit 471d90f670416fc2947b73637c549387eddb9435
+Author: Behdad Esfahbod 
+Date:   2009-10-23 21:01:49 -0400
+
+    Bug 587463 - "select all"+copy from gnome-terminal includes lines no longer in scrollback
+    
+    Previously it used to include lines that have fallen out of the history
+    buffer.  Also, included one extra line at the end.
+
+ src/vte.c | 17 +++++++----------
+ 1 file changed, 7 insertions(+), 10 deletions(-)
+
+commit 370b72ba4759850b1fc9721d2afc0eb7b5383a5e
+Author: Behdad Esfahbod 
+Date:   2009-10-23 20:54:26 -0400
+
+    Bug 585370 - Incomplete disabling of python
+    
+    Don't install python support files if python is disabled.
+
+ python/Makefile.am | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit eb11c5a2e5ec98c3ce1643ecc1b0274eff490a7e
+Author: Behdad Esfahbod 
+Date:   2009-10-23 20:49:47 -0400
+
+    Bug 597242 - libvte color and cursor glitches
+    
+    Don't clear line when inserting smart tab
+
+ src/vteseq.c | 75 ++++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 37 insertions(+), 38 deletions(-)
+
+commit c6d9bf421f12911298d921314ced64661f6b63bd
+Author: Behdad Esfahbod 
+Date:   2009-10-23 20:18:50 -0400
+
+    Bug 591648 - Don't clear the screen when switching to the alternate screen
+
+ src/vteseq.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+commit 94c78423fca44652e9c837e00cf932e0cadb50de
+Author: Behdad Esfahbod 
+Date:   2009-10-23 20:12:14 -0400
+
+    Bug 595445 - Motion notify events are not propagated to parent widget
+    
+    Propagate motion-notify event to parent if not selecting.
+
+ src/vte.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit 03250451173cdc63aeb10f2f43ec7fe203082be1
+Author: Behdad Esfahbod 
+Date:   2009-10-23 20:07:06 -0400
+
+    Revert "Copy PRIMARY only on button release"
+    
+    This reverts commit ab66ce5ca7bc9948ffb5303156c3a2764656c3b7.
+    We need to fix bug 598090 before this can go in.
+
+ src/vte.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit ab66ce5ca7bc9948ffb5303156c3a2764656c3b7
+Author: Behdad Esfahbod 
+Date:   2009-10-23 19:43:06 -0400
+
+    Copy PRIMARY only on button release
+    
+    Bug 598124 - The selection does not only change when the mousebutton is released
+
+ src/vte.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+commit 7f2f2f6622e253d6ae623c310bc0be9079ba9cc6
+Author: Behdad Esfahbod 
+Date:   2009-10-23 19:12:26 -0400
+
+    Bug 569184 - vte generates unnecessary ioctl(I_FIND) kernel warnings
+
+ src/pty.c | 26 ++++++++++++++------------
+ 1 file changed, 14 insertions(+), 12 deletions(-)
+
+commit efaf2668d21f53ada2884157fde91c0b61025fc7
+Author: Behdad Esfahbod 
+Date:   2009-10-23 19:01:38 -0400
+
+    Fix even more warnings.  We're mostly warning-clean now
+
+ src/pty.c       | 3 +--
+ src/vteaccess.c | 4 ++--
+ src/vtedraw.c   | 2 +-
+ 3 files changed, 4 insertions(+), 5 deletions(-)
+
+commit ac0722271e2f5e192e7be4000ba2ca7a2388954e
+Author: Behdad Esfahbod 
+Date:   2009-10-23 18:54:59 -0400
+
+    Fix more warnings
+
+ src/vte.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+commit 592ba42cbfa3e9e948226bcef832e7fd30f5fae7
+Author: Behdad Esfahbod 
+Date:   2009-10-23 18:37:42 -0400
+
+    Interpret and document negative number of scrollback lines as infinite
+
+ src/vte.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+commit 723aec79c9aa7c05b86278d0f304d0640ba9ee5e
+Author: Behdad Esfahbod 
+Date:   2009-10-23 18:19:40 -0400
+
+    [ring] Use gulong instead of guint for row/col indices
+    
+    Bug 599444 - Scrollback index type mess
+
+ src/buffer.h      |  2 +-
+ src/ring.c        | 68 +++++++++++++++++++++++++++----------------------------
+ src/ring.h        | 34 ++++++++++++++--------------
+ src/vte-private.h |  4 ++--
+ src/vte.c         | 10 ++++----
+ src/vterowdata.c  | 20 ++++++++--------
+ src/vterowdata.h  | 12 +++++-----
+ 7 files changed, 76 insertions(+), 74 deletions(-)
+
+commit 3e523aa2db487828a332703461e84d6a2cf4ef04
+Author: Behdad Esfahbod 
+Date:   2009-10-22 14:07:51 -0400
+
+    Bug 598814 - text.getText(0, -1) triggers assertion in vteaccess.c
+
+ src/vteaccess.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b933212a00bf4f7437d5741b1eb9132d66b263fd
+Author: Nils-Christoph Fiedler 
+Date:   2009-10-22 20:07:03 +0200
+
+    Updated Low German translation
+
+ po/nds.po | 28 ++++++++++++++--------------
+ 1 file changed, 14 insertions(+), 14 deletions(-)
+
+commit 54f397c65855d015ffc71e646c55fb4b49208038
+Author: Christian Persch 
+Date:   2009-10-22 00:20:59 +0200
+
+    Ignore .pot files too
+
+ git.mk | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 90799855f499c4ab7dd66896bdde73ccc9e63253
+Author: Christian Persch 
+Date:   2009-08-31 18:26:45 +0200
+
+    Use AM_V_GEN here too
+
+ git.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit fa3508f4957a8cfb6f6f22ef904d5c89f9d54f4a
+Author: Benjamin Berg 
+Date:   2009-10-05 17:41:49 +0200
+
+    Fix memory leaks in python bindings (bug #596739).
+
+ python/vte.override | 131 ++++++++++++++++++++++------------------------------
+ 1 file changed, 56 insertions(+), 75 deletions(-)
+
+commit 7b30cf831aa9ae3e90ca99f016f11d6f6833ad2f
+Author: Behdad Esfahbod 
+Date:   2009-10-03 19:50:21 -0400
+
+    Bug 597165 - void return in vte.c
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3c22f5997c7e11f371c606520daff279d9b613e4
+Author: Behdad Esfahbod 
+Date:   2009-09-29 14:54:30 -0400
+
+    Bug 587894 - the environment passing with python does no longer work
+
+ python/vte.override | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit 1fc66f918330a053b85080756d8be165eb9f2708 (tag: 0.22.2)
+Author: Behdad Esfahbod 
+Date:   2009-09-28 15:42:12 -0400
+
+    Release 0.22.2
+
+ NEWS         | 10 ++++++++++
+ configure.in |  4 ++--
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+commit ea46cc66b0340dbe42b8b19b2691c824083ad033
+Author: Behdad Esfahbod 
+Date:   2009-09-28 14:25:42 -0400
+
+    [a11y] Fix assertion failure
+    
+    Reported here:
+    https://bugs.launchpad.net/ubuntu/+source/gnome-terminal/+bug/435646
+
+ src/vteaccess.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 470030991fc3107e04934b1d3aa54d4428be7e2f
+Author: Behdad Esfahbod 
+Date:   2009-09-28 13:57:26 -0400
+
+    Bug 596444 - word-select includes \n when the word ends at the edge of the terminal
+
+ src/vte.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit b7083d3cdbe31305de2fa2974919b3d105f9b740
+Author: Behdad Esfahbod 
+Date:   2009-09-27 17:06:22 -0400
+
+    Bug 596460 - 0.22.1 kills vte based apps
+    
+    Oops
+
+ src/vteseq.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3e1738a4b962dc339cddd66a4504b198ae80fe38 (tag: 0.22.1)
+Author: Behdad Esfahbod 
+Date:   2009-09-25 17:18:16 -0400
+
+    Release 0.22.1
+
+ NEWS         | 10 ++++++++++
+ configure.in |  4 ++--
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+commit c87f6a7dc778bb75aa6defeceda3505028c0430e
+Author: Behdad Esfahbod 
+Date:   2009-09-25 17:03:31 -0400
+
+    [ring] Clear ring on _init
+
+ src/ring.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 73aba0352cd8034f69178459fc58347cedc74ec7
+Author: Behdad Esfahbod 
+Date:   2009-09-25 16:55:08 -0400
+
+    Bug 596365 - libvte crashes when issueing 'reset' in a terminal
+
+ src/vtestream-file.h | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+commit cc6df5b1ebeba74c8c96d897bb5e8400ba429407
+Author: Behdad Esfahbod 
+Date:   2009-09-25 16:50:04 -0400
+
+    [stream] Fix warnings
+
+ src/vtestream-base.h | 4 ++--
+ src/vtestream-file.h | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 6bafc718f231bac266c663724334999dfebac16e
+Author: Behdad Esfahbod 
+Date:   2009-09-24 23:15:07 -0400
+
+    Bug 588033 - background tabs may lose lines off the bottom of the scrollback
+
+ src/vte.c | 33 ++++++++++++++++++---------------
+ 1 file changed, 18 insertions(+), 15 deletions(-)
+
+commit 3df8026931941ea6a5d41c932803f56ded862a00
+Author: Behdad Esfahbod 
+Date:   2009-09-24 15:26:49 -0400
+
+    Minor
+
+ src/vte-private.h |  1 +
+ src/vte.c         |  7 ++++++-
+ src/vteseq.c      | 14 +++++++-------
+ 3 files changed, 14 insertions(+), 8 deletions(-)
+
+commit 58d0affa8eea77353ef47c53923cd82c4203fe1a
+Author: Behdad Esfahbod 
+Date:   2009-09-24 15:22:30 -0400
+
+    Bug 596163 - Doesn't display expected background color in ncurses apps
+    
+    Revert semantic change introduced in 08caf3b174e68ba3d02f04c2595ad552cd50db30
+
+ src/ring.c        | 25 +++----------------------
+ src/vte-private.h |  3 +++
+ src/vte.c         | 30 +++++++++++++++++++++++++-----
+ src/vteseq.c      | 31 +++++++++++--------------------
+ 4 files changed, 42 insertions(+), 47 deletions(-)
+
+commit 8ad12cd15ad4dc5e7eb40398e4b835af31f34c0f
+Author: Behdad Esfahbod 
+Date:   2009-09-24 14:25:47 -0400
+
+    Bug 596011 -  Problem compiling vte 0.22.0 on Solaris
+
+ src/vterowdata.c | 2 +-
+ src/vterowdata.h | 1 -
+ 2 files changed, 1 insertion(+), 2 deletions(-)
+
+commit ebd4dac2028edd77b38edfd5595dae01c529670d
+Author: Behdad Esfahbod 
+Date:   2009-09-24 14:22:53 -0400
+
+    Fix warning
+
+ src/vtestream-base.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ca89fbb9d6fb8470d5e9150d8b4f35424893d1ca (tag: 0.22.0)
+Author: Behdad Esfahbod 
+Date:   2009-09-21 17:01:17 -0400
+
+    Release 0.22.0
+
+ NEWS         |  4 ++++
+ configure.in | 10 +++++-----
+ 2 files changed, 9 insertions(+), 5 deletions(-)
+
+commit df0350b20f91305e8c330226dd50ea1bee501271
+Author: Rajesh Ranjan 
+Date:   2009-09-19 00:11:04 +0530
+
+    maithili update, translated by Sangeeta Kumari
+
+ po/LINGUAS |  1 +
+ po/mai.po  | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 94 insertions(+)
+
+commit 8658f78fce0ffad86c81ea2502047cdbc2d32669 (tag: 0.21.7)
+Author: Behdad Esfahbod 
+Date:   2009-09-18 02:18:07 -0400
+
+    Release 0.21.7
+
+ NEWS         | 5 +++++
+ configure.in | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 35cb9184e071c8629c953d5bf82542d88438552c
+Author: Behdad Esfahbod 
+Date:   2009-09-18 02:07:57 -0400
+
+    Bug 595494 - Build Failure in vte 0.21.6
+    
+    Revert "Do some symbol hiding"
+    This reverts commit 296a3cbaf6b69555f7d6cdc639dc57c51f2e2bba.
+
+ configure.in        | 11 -------
+ src/caps.c          |  4 +--
+ src/caps.h          |  6 ++--
+ src/debug.c         |  2 +-
+ src/debug.h         |  4 +--
+ src/iso2022.h       | 29 +++++++++---------
+ src/keymap.h        | 46 ++++++++++++++---------------
+ src/matcher.h       | 18 ++++++------
+ src/ring.h          | 18 ++++++------
+ src/table.c         |  2 +-
+ src/table.h         | 20 ++++++-------
+ src/trie.c          |  2 +-
+ src/trie.h          | 26 ++++++++---------
+ src/vte-private.h   | 62 +++++++++++++++++++--------------------
+ src/vtebg.h         | 14 ++++-----
+ src/vteconv.h       | 28 +++++++++---------
+ src/vtedraw.c       |  2 +-
+ src/vtedraw.h       | 84 ++++++++++++++++++++++++++---------------------------
+ src/vteint.h        | 12 ++++----
+ src/vtepangocairo.c |  2 +-
+ src/vtepangocairo.h |  2 +-
+ src/vteregex.h      |  8 ++---
+ src/vterowdata.h    | 18 ++++++------
+ src/vteskel.c       |  2 +-
+ src/vteskel.h       |  2 +-
+ src/vtestream.h     | 15 +++++-----
+ src/vtetc.c         |  2 --
+ src/vtetc.h         | 24 +++++++--------
+ src/vtetree.c       |  2 --
+ src/vtetree.h       |  8 ++---
+ src/vteunistr.h     |  8 ++---
+ 31 files changed, 235 insertions(+), 248 deletions(-)
+
+commit e6e66d4c5733b4c2e5efa686566bde3c76be4212
+Author: Behdad Esfahbod 
+Date:   2009-09-18 02:07:06 -0400
+
+    [ring] Don't append fragment text
+
+ src/ring.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 2c0c2454deeef051f603dd32ef70d926f49b0b2f
+Author: Behdad Esfahbod 
+Date:   2009-09-18 02:04:26 -0400
+
+    [ring] Fix fragment width
+
+ src/ring.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 63ba68fef08838159a5922534f77f89a304f6c03
+Author: Behdad Esfahbod 
+Date:   2009-09-18 02:02:20 -0400
+
+    Simplify tab handling
+
+ src/vteseq.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 09221372842d3954c10f69cd3c98680663c4d6d3 (tag: 0.21.6)
+Author: Behdad Esfahbod 
+Date:   2009-09-17 11:19:29 -0400
+
+    Release 0.21.6
+
+ NEWS         | 6 ++++++
+ configure.in | 4 ++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 296a3cbaf6b69555f7d6cdc639dc57c51f2e2bba
+Author: Behdad Esfahbod 
+Date:   2009-09-17 10:54:15 -0400
+
+    Do some symbol hiding
+
+ configure.in        | 11 +++++++
+ src/caps.c          |  4 +--
+ src/caps.h          |  6 ++--
+ src/debug.c         |  2 +-
+ src/debug.h         |  4 +--
+ src/iso2022.h       | 29 +++++++++---------
+ src/keymap.h        | 46 ++++++++++++++---------------
+ src/matcher.h       | 18 ++++++------
+ src/ring.h          | 18 ++++++------
+ src/table.c         |  2 +-
+ src/table.h         | 20 ++++++-------
+ src/trie.c          |  2 +-
+ src/trie.h          | 26 ++++++++---------
+ src/vte-private.h   | 62 +++++++++++++++++++--------------------
+ src/vtebg.h         | 14 ++++-----
+ src/vteconv.h       | 28 +++++++++---------
+ src/vtedraw.c       |  2 +-
+ src/vtedraw.h       | 84 ++++++++++++++++++++++++++---------------------------
+ src/vteint.h        | 12 ++++----
+ src/vtepangocairo.c |  2 +-
+ src/vtepangocairo.h |  2 +-
+ src/vteregex.h      |  8 ++---
+ src/vterowdata.h    | 18 ++++++------
+ src/vteskel.c       |  2 +-
+ src/vteskel.h       |  2 +-
+ src/vtestream.h     | 15 +++++-----
+ src/vtetc.c         |  2 ++
+ src/vtetc.h         | 24 +++++++--------
+ src/vtetree.c       |  2 ++
+ src/vtetree.h       |  8 ++---
+ src/vteunistr.h     |  8 ++---
+ 31 files changed, 248 insertions(+), 235 deletions(-)
+
+commit e28d3818f3b22fbdf61d721183419a4a010c8a01
+Author: Behdad Esfahbod 
+Date:   2009-09-16 18:09:35 -0400
+
+    Remove expensive assertion
+
+ src/vte.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit ed455c5413f04c4688fd072acfd121b97636e023
+Author: Behdad Esfahbod 
+Date:   2009-09-16 15:42:19 -0400
+
+    [doc] Set LC_ALL instead of LANG for our check scripts
+
+ doc/reference/check-doc-coverage.sh | 4 +++-
+ doc/reference/check-doc-syntax.sh   | 3 ++-
+ git.mk                              | 2 +-
+ src/check-doc-syntax.sh             | 3 ++-
+ 4 files changed, 8 insertions(+), 4 deletions(-)
+
+commit 2c75e3d01f970cae3d0856b04d532bfc90cdbf14
+Author: Niels-Christoph Fiedler 
+Date:   2009-09-16 18:36:45 +0200
+
+    Updated Low German translation
+
+ po/nds.po | 41 ++++++++++++++++++++---------------------
+ 1 file changed, 20 insertions(+), 21 deletions(-)
+
+commit 6946347f771d48393b4a1eb30dc52e40489582f1
+Author: Behdad Esfahbod 
+Date:   2009-09-15 21:26:22 -0400
+
+    [ring] Fix assertion failure with resize
+
+ src/ring.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 109f77b663e4f87e4fb148ae26cd7a566de0cb61
+Author: Behdad Esfahbod 
+Date:   2009-09-15 21:22:53 -0400
+
+    [ring] Simplify a bit
+
+ src/ring.c | 20 ++++++++++++++++----
+ 1 file changed, 16 insertions(+), 4 deletions(-)
+
+commit 5254710eb86008ab218f2ad0a61e631f3f6d6b39
+Author: Behdad Esfahbod 
+Date:   2009-09-15 21:17:51 -0400
+
+    [ring/stream] Handle stream failure (out of space)
+
+ src/ring.c           | 19 ++++++++++++++-----
+ src/vtestream-base.h |  6 +++---
+ src/vtestream-file.h | 15 ++++++---------
+ src/vtestream.h      |  3 +--
+ 4 files changed, 24 insertions(+), 19 deletions(-)
+
+commit 40fef32bc16dc65a138fc7d46549e7ba14395159
+Author: Behdad Esfahbod 
+Date:   2009-09-15 20:10:05 -0400
+
+    [ring] Store text as UTF-8 and RLE-encode the attrs
+
+ src/ring.c       | 188 +++++++++++++++++++++++++++++++++++++++++++------------
+ src/ring.h       |  10 ++-
+ src/vterowdata.h |   6 ++
+ 3 files changed, 163 insertions(+), 41 deletions(-)
+
+commit a1f8b0fb38291dd368b6a085aa2b6c5505024a2a
+Author: Behdad Esfahbod 
+Date:   2009-09-15 15:47:39 -0400
+
+    [stream] Fix bug in _head()
+
+ src/vtestream-file.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit f13c3b9f061d50b18475fdf05b54877031037b35
+Author: Behdad Esfahbod 
+Date:   2009-09-15 13:46:06 -0400
+
+    [unistr] _vte_unistr_len()
+
+ src/vteunistr.c | 4 +---
+ src/vteunistr.h | 2 --
+ 2 files changed, 1 insertion(+), 5 deletions(-)
+
+commit 7cc48f44223ab69725f42399a58ebb0a26c9b2a5
+Author: Behdad Esfahbod 
+Date:   2009-09-14 16:09:40 -0400
+
+    Add VteIntCell
+
+ src/vterowdata.h | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit d6330cf885ff25c6607e0624c03f00daf15bb68b
+Author: Behdad Esfahbod 
+Date:   2009-09-14 16:07:17 -0400
+
+    [stream] Add head()
+
+ src/vtestream-base.h |  7 +++++++
+ src/vtestream-file.h | 12 ++++++++++++
+ src/vtestream.h      |  1 +
+ 3 files changed, 20 insertions(+)
+
+commit 338d4a485f5b7609be1861aed6558693f90955c1
+Author: Behdad Esfahbod 
+Date:   2009-09-14 15:30:04 -0400
+
+    [ring] Fix resize too
+
+ src/ring.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit d1cec534d59399f057399b63dfb819b407174171
+Author: Behdad Esfahbod 
+Date:   2009-09-14 15:27:25 -0400
+
+    [ring] Fix ring according to stream semantics
+
+ src/ring.c | 126 +++++++++++++++++++++++++++++++++++++++++--------------------
+ 1 file changed, 85 insertions(+), 41 deletions(-)
+
+commit ea7ee1b1cbfe58faab7903cf354b377190dfb144
+Author: Behdad Esfahbod 
+Date:   2009-09-14 15:24:57 -0400
+
+    [stream] Fix new_page implementation
+
+ src/vtestream-file.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 1ea043ed2df31522c670b6bfba8cf1c9537ce61e
+Author: Behdad Esfahbod 
+Date:   2009-09-14 15:12:43 -0400
+
+    [stream] Handle eof situation
+
+ src/vtestream-file.h | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 68cce180dd903aacbbec11dca8f89be0cf278e92
+Author: Behdad Esfahbod 
+Date:   2009-09-14 15:04:51 -0400
+
+    [stream] Add a reset() method
+
+ src/vtestream-base.h |   7 ++++
+ src/vtestream-file.h | 104 +++++++++++++++++++++++++++++++--------------------
+ src/vtestream.h      |   1 +
+ 3 files changed, 71 insertions(+), 41 deletions(-)
+
+commit efe25381cca2767423f1c7061dcda1a0be87e59b
+Author: Behdad Esfahbod 
+Date:   2009-09-14 13:31:27 -0400
+
+    [stream] s/trunc/truncate/
+
+ src/vtestream-base.h | 6 +++---
+ src/vtestream-file.h | 4 ++--
+ src/vtestream.h      | 2 +-
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+commit 2eefab893485bbea1d0e2fb62e6f6122314d1959
+Author: Behdad Esfahbod 
+Date:   2009-09-14 13:07:26 -0400
+
+    [stream] Fix returned offset
+
+ src/vtestream-file.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a88338e07429a5ce1fc4cb081448333c699f7f23
+Author: Behdad Esfahbod 
+Date:   2009-09-12 19:40:02 -0400
+
+    [ring] Port to VteStream
+    
+    Not optimized, simple file-based non-compact storage
+
+ src/ring.c           | 694 +++++++++++----------------------------------------
+ src/ring.h           |  48 ++--
+ src/vtestream-base.h |  31 ++-
+ src/vtestream-file.h |  17 +-
+ src/vtestream.h      |   8 +
+ 5 files changed, 214 insertions(+), 584 deletions(-)
+
+commit a63c3d687408a9e21535df84855e00564c4f0905
+Author: Behdad Esfahbod 
+Date:   2009-09-12 18:22:16 -0400
+
+    [stream] Add file stream
+
+ src/Makefile.am      |   2 +
+ src/vtestream-base.h |  51 ++++++++++++
+ src/vtestream-file.h | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vtestream.c      |  31 ++------
+ src/vtestream.h      |   6 +-
+ 5 files changed, 278 insertions(+), 27 deletions(-)
+
+commit 9de9d2de44d4723935176c71f8f09a90f15e678a
+Author: Behdad Esfahbod 
+Date:   2009-09-12 17:15:04 -0400
+
+    [stream] Start vte stream design
+    
+    New buffer coming!
+
+ src/Makefile.am |  2 ++
+ src/vtestream.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vtestream.h | 32 ++++++++++++++++++++++++++++++++
+ 3 files changed, 89 insertions(+)
+
+commit 9ad227f5f57d93e86b8d7ecf5b73bdf3bdf6ced7
+Author: Behdad Esfahbod 
+Date:   2009-09-12 15:38:52 -0400
+
+    [ring] Fix typo
+
+ src/ring.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a532b2950e748ca37b0b429a7255d95514e212c8
+Author: Behdad Esfahbod 
+Date:   2009-09-10 15:59:50 -0400
+
+    [ring] Move VteRowData into its own file
+
+ src/Makefile.am  |   2 +
+ src/ring.c       | 141 +---------------------------------------------
+ src/ring.h       | 138 +--------------------------------------------
+ src/vterowdata.c | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vterowdata.h | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vteunistr.c  |   3 +-
+ 6 files changed, 337 insertions(+), 278 deletions(-)
+
+commit 4e02748b395e2086a4a3f897868bc789875e770d
+Author: Carles Ferrando 
+Date:   2009-09-14 13:39:11 +0200
+
+    Added Catalan (Valencian) translation
+
+ po/LINGUAS        |   1 +
+ po/ca@valencia.po | 157 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 158 insertions(+)
+
+commit 6f8d5b1da087a741c6cf6bbbf27d5a46d66720c8
+Author: Behdad Esfahbod 
+Date:   2009-09-10 12:37:07 -0400
+
+    [ring] Limit line length to 0xFFFF
+    
+    Make rowdata structures a bit more compact
+
+ src/ring.c | 29 +++++++++++++++++++++--------
+ src/ring.h |  6 +++---
+ 2 files changed, 24 insertions(+), 11 deletions(-)
+
+commit d41ff743ec9bb287c3bd2d37f514f259503d03cc
+Author: Behdad Esfahbod 
+Date:   2009-09-09 22:13:36 -0400
+
+    [ring] Add VteRingChunkWritable
+
+ src/ring.c | 96 +++++++++++++++++++++++++++++++-------------------------------
+ src/ring.h | 18 ++++++------
+ 2 files changed, 58 insertions(+), 56 deletions(-)
+
+commit c4c49bfa4e1e52d3653918d873ad64015e8e8bdf
+Author: Behdad Esfahbod 
+Date:   2009-09-09 21:59:56 -0400
+
+    [ring] Remove more unused code
+
+ src/ring.c | 63 +++++++++++++++++++++-----------------------------------------
+ 1 file changed, 21 insertions(+), 42 deletions(-)
+
+commit 20f57866d5b4d47ae1ee66cb9e0156d6d70e321e
+Author: Behdad Esfahbod 
+Date:   2009-09-09 21:56:53 -0400
+
+    [ring] More cleanup
+
+ src/ring.h | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+commit cea0b21adb11d59f2e1e4c649f6cbf5e1cfacfed
+Author: Behdad Esfahbod 
+Date:   2009-09-09 21:54:42 -0400
+
+    [ring] Reshuffle a bit more
+
+ src/ring.c | 74 ++++++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 38 insertions(+), 36 deletions(-)
+
+commit b367d568d57ae93b3e84c0a80302734aa2d2f0ee
+Author: Behdad Esfahbod 
+Date:   2009-09-09 21:33:00 -0400
+
+    [ring] Shuffle code around
+
+ src/ring.c | 247 +++++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 124 insertions(+), 123 deletions(-)
+
+commit fc9a6daf6394642e17e8aa76cbe661f0f08e8a68
+Author: Behdad Esfahbod 
+Date:   2009-09-09 21:26:46 -0400
+
+    [ring] Separate VteRowData and VteCompactRowData
+
+ src/ring.c | 93 +++++++++++++++++++++++++++++++++-----------------------------
+ src/ring.h | 24 ++--------------
+ 2 files changed, 52 insertions(+), 65 deletions(-)
+
+commit 17840c4a141747c241fd3439b98e683a8f84737b
+Author: Behdad Esfahbod 
+Date:   2009-09-09 21:11:29 -0400
+
+    [ring] Remove stale comment
+
+ src/ring.h | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit d77e97e9cff572ba0e325335dd4a5654676bc5fb
+Author: Behdad Esfahbod 
+Date:   2009-09-09 21:10:33 -0400
+
+    [ring] Rename vtecellattr to VteCellAttr
+
+ src/ring.h | 10 +++++-----
+ src/vte.c  |  2 +-
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+commit a24f3bd3a7f9830245d4382df48f7063fd2340ea
+Author: Behdad Esfahbod 
+Date:   2009-09-09 21:09:26 -0400
+
+    [ring] Move row attrs into a struct
+
+ src/ring.h   | 11 ++++++++++-
+ src/vte.c    |  8 ++++----
+ src/vteseq.c |  8 ++++----
+ 3 files changed, 18 insertions(+), 9 deletions(-)
+
+commit d0b03824d508d078accdcba7b1cc17a94d18f5ed
+Author: Behdad Esfahbod 
+Date:   2009-09-09 21:04:15 -0400
+
+    [ring] Further cleanup of cell array
+
+ src/ring.c | 28 ++++++++++++----------------
+ 1 file changed, 12 insertions(+), 16 deletions(-)
+
+commit 3b5177f934c4bba89165e46521192766f13ed655
+Author: Behdad Esfahbod 
+Date:   2009-09-09 20:56:40 -0400
+
+    [ring] Rename
+
+ src/ring.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 7d4895e5ad9d3153086596e3109e871fa027aea6
+Author: Behdad Esfahbod 
+Date:   2009-09-09 20:53:46 -0400
+
+    [ring] Remove spare chunk caching
+
+ src/ring.c | 77 +++++---------------------------------------------------------
+ 1 file changed, 6 insertions(+), 71 deletions(-)
+
+commit c7ce2e2fc72c086352fe44508ac97db390cdd591
+Author: Behdad Esfahbod 
+Date:   2009-09-09 20:48:54 -0400
+
+    [ring] Remove custom cell array allocator
+
+ src/ring.c | 142 ++++++++-----------------------------------------------------
+ 1 file changed, 18 insertions(+), 124 deletions(-)
+
+commit a37a6377089b5f856043b3660a8380326f8c89a8 (tag: 0.21.5)
+Author: Behdad Esfahbod 
+Date:   2009-09-08 11:34:36 -0400
+
+    Release 0.21.5
+
+ NEWS         | 6 ++++++
+ configure.in | 4 ++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit f42c894d767ecf9a5a43355d5b10c132945f66e8
+Author: Behdad Esfahbod 
+Date:   2009-09-08 03:08:16 -0400
+
+    Simplify access
+
+ src/vte.c | 174 ++++++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 89 insertions(+), 85 deletions(-)
+
+commit ecc159908714dfa325106de5a2b5fb01bd1dc09b
+Author: Behdad Esfahbod 
+Date:   2009-09-08 03:04:02 -0400
+
+    [ring] Reinstate attr.fragment
+    
+    Fixes the last bug in the new ring.  Yay!
+
+ src/ring.h        |  6 ++----
+ src/vte-private.h |  1 +
+ src/vte.c         | 41 ++++++++++++++++++++++-------------------
+ src/vteseq.c      |  6 +++---
+ 4 files changed, 28 insertions(+), 26 deletions(-)
+
+commit ccac54d0217e0c13d69012f5fa407d2e0fe5d53a
+Author: Behdad Esfahbod 
+Date:   2009-09-08 02:56:51 -0400
+
+    [ring] Whitespace
+
+ src/ring.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 413abad8f245b0db38cfe18fa23f322579c7a906
+Author: Behdad Esfahbod 
+Date:   2009-09-08 02:54:01 -0400
+
+    [ring] Fix signed issues
+
+ src/ring.c | 24 ++++++++++++------------
+ src/ring.h |  2 +-
+ 2 files changed, 13 insertions(+), 13 deletions(-)
+
+commit 1db31d7d1168294f830b5b0ad0c57a56cf679dc1
+Author: Behdad Esfahbod 
+Date:   2009-09-08 02:50:05 -0400
+
+    [ring] Const correctness
+
+ src/ring.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit 3300760dad390e6299bd21e25521c5e12f5534cd
+Author: Behdad Esfahbod 
+Date:   2009-09-08 02:43:34 -0400
+
+    [ring] Rename a bit
+
+ src/ring.c | 44 ++++++++++++++++++++++----------------------
+ 1 file changed, 22 insertions(+), 22 deletions(-)
+
+commit e2d2ca6888fedcbdc5d61c58d10207dfeebb7000
+Author: Behdad Esfahbod 
+Date:   2009-09-08 02:24:52 -0400
+
+    [ring] Free all spare chunks when all rings are destroyed
+
+ src/ring.c | 70 ++++++++++++++++++++++++++++++++++++++++----------------------
+ 1 file changed, 45 insertions(+), 25 deletions(-)
+
+commit 1972a3614be3f7453a13a48d0ab7013a23d83f09
+Author: Behdad Esfahbod 
+Date:   2009-09-08 02:24:42 -0400
+
+    [ring] Reduce free chunks from 10 to 4
+
+ src/ring.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9ba03097d00059dd5d833053b5cf7f06e22a8f1f
+Author: Behdad Esfahbod 
+Date:   2009-09-08 02:10:07 -0400
+
+    [ring] Fix chunk disposal
+
+ src/ring.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 0f97ca6162d6219040f0273626f88044eecabee5
+Author: Behdad Esfahbod 
+Date:   2009-09-08 02:05:38 -0400
+
+    [ring] Fix bytes_left calculation
+
+ src/ring.c | 29 +++++++++++++++--------------
+ src/ring.h |  8 ++------
+ 2 files changed, 17 insertions(+), 20 deletions(-)
+
+commit 284b9bbb884d36e65af13e968304b74ddb5be1c7
+Author: Behdad Esfahbod 
+Date:   2009-09-08 01:42:25 -0400
+
+    [ring] Invalidate cache
+
+ src/ring.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit c00499dd53ef5ee43ec39fa5823ffcb0659b51e6
+Author: Behdad Esfahbod 
+Date:   2009-09-08 01:25:40 -0400
+
+    [ring] Optimize attribute bitfield placement
+
+ src/ring.c | 6 +++---
+ src/ring.h | 9 ++++++---
+ 2 files changed, 9 insertions(+), 6 deletions(-)
+
+commit 3ea50a543462262407a54b7e0860c5121c96655e
+Author: Behdad Esfahbod 
+Date:   2009-09-08 01:03:42 -0400
+
+    [ring] Add debug output
+
+ src/ring.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+commit c35dc0dab0da6318428b6d049e20c0c90f80ca00
+Author: Behdad Esfahbod 
+Date:   2009-09-08 00:56:00 -0400
+
+    [ring] Fix insert at start
+
+ src/ring.c | 83 ++++++++++++++++++++++++++++++++++++++++++--------------------
+ 1 file changed, 57 insertions(+), 26 deletions(-)
+
+commit ec5229042aee27c074b8d700dad5058f3b50872d
+Author: Behdad Esfahbod 
+Date:   2009-09-08 00:27:52 -0400
+
+    [ring] Move view cache row to ring
+
+ src/ring.c | 74 ++++++++++++++++++++++++++++++--------------------------------
+ src/ring.h | 11 +++++-----
+ 2 files changed, 41 insertions(+), 44 deletions(-)
+
+commit 36ad6fac029ccb29465434d46135559d9f5d5584
+Author: Behdad Esfahbod 
+Date:   2009-09-07 22:59:35 -0400
+
+    [ring] Implement uncompact
+
+ src/ring.c | 203 +++++++++++++++++++++++++++++++++++++++++++++++++++++--------
+ src/ring.h |   7 ++-
+ 2 files changed, 185 insertions(+), 25 deletions(-)
+
+commit eb0444e52d7995f50326109cd6d4cf254b2a4774
+Author: Behdad Esfahbod 
+Date:   2009-09-07 22:05:08 -0400
+
+    Fix ring access const correctness
+
+ src/ring.c   | 14 +++++++++++-
+ src/ring.h   | 14 +++++++++---
+ src/vte.c    | 69 ++++++++++++++++++++++++++++++++++++------------------------
+ src/vteseq.c | 24 ++++++++++-----------
+ 4 files changed, 77 insertions(+), 44 deletions(-)
+
+commit f214a7b86a3a3f37fbcef457bdbe81ac08c302f6
+Author: Behdad Esfahbod 
+Date:   2009-09-07 21:37:31 -0400
+
+    [ring] Minor
+
+ src/ring.h | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit 29bceb6074fa708d37f6901073648b146f8c98e7
+Author: Behdad Esfahbod 
+Date:   2009-09-07 21:30:26 -0400
+
+    [ring] Cleanup warnings
+
+ src/ring.c | 26 ++++++++++++++------------
+ src/ring.h |  7 +++++--
+ 2 files changed, 19 insertions(+), 14 deletions(-)
+
+commit 99b5708db5a7bf04e8cf12195ed2b4309b199bf9
+Author: Behdad Esfahbod 
+Date:   2009-09-07 21:25:08 -0400
+
+    [ring] Ease default attr computations
+
+ src/ring.c   |  6 +++---
+ src/ring.h   | 34 +++++++++++++++++++++-------------
+ src/vte.c    |  6 +++---
+ src/vteseq.c |  2 +-
+ 4 files changed, 28 insertions(+), 20 deletions(-)
+
+commit 1cd88dc0ba39d9c76e165c917510280cf22513a7
+Author: Behdad Esfahbod 
+Date:   2009-09-07 21:16:30 -0400
+
+    [ring] Allow one more room in insert such that position doesn't fall off
+
+ src/ring.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+commit 5b559865f8237b4aa77c513a3d5847bf0a0e01aa
+Author: Behdad Esfahbod 
+Date:   2009-09-07 21:00:13 -0400
+
+    [ring] Enlarge initial writable size
+
+ src/ring.c        | 8 +++++---
+ src/ring.h        | 2 ++
+ src/vte-private.h | 1 -
+ 3 files changed, 7 insertions(+), 4 deletions(-)
+
+commit c40b3e92c52057dc84be0c99b57fe7af07bffecd
+Author: Behdad Esfahbod 
+Date:   2009-09-07 20:09:04 -0400
+
+    [ring] Store max_rows
+
+ src/ring.c | 74 +++++++++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 42 insertions(+), 32 deletions(-)
+
+commit f24dbdf32f0456b5a0e949aaf2068680ccf1feb7
+Author: Behdad Esfahbod 
+Date:   2009-09-07 20:07:38 -0400
+
+    [ring] Almost working
+
+ src/ring.c | 56 +++++++++++++++++++++++++++++++++-----------------------
+ 1 file changed, 33 insertions(+), 23 deletions(-)
+
+commit 05d1c8b063fb9c601bf20b23475dc395221c8f5b
+Author: Behdad Esfahbod 
+Date:   2009-09-07 19:55:14 -0400
+
+    Fix initial scrollback size
+
+ src/vte.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 024c67a1a12e1e82b65cc53b8b0adc89a689e53f
+Author: Behdad Esfahbod 
+Date:   2009-09-07 19:51:50 -0400
+
+    Fix comment
+
+ src/ring.c        | 1 +
+ src/vte-private.h | 3 +--
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 3e1ea9728a313c296fbda053359152192f5305e7
+Author: Behdad Esfahbod 
+Date:   2009-09-07 18:59:02 -0400
+
+    [ring] Compacting goodness; disabled now; eats babies
+
+ src/ring.c | 282 ++++++++++++++++++++++++++++++++++++++++++++++++-------------
+ src/ring.h |  20 ++++-
+ 2 files changed, 243 insertions(+), 59 deletions(-)
+
+commit 91697b796a9c0f1e8e20a6ae18139556f10cb5ca
+Author: Behdad Esfahbod 
+Date:   2009-09-07 17:01:12 -0400
+
+    [ring] Closer to working
+
+ src/ring.c | 191 ++++++++++++++++++++++++++++++++++++++-----------------------
+ 1 file changed, 118 insertions(+), 73 deletions(-)
+
+commit 68d17bacfd7b7127ff03497df555f7274f60b604
+Author: Behdad Esfahbod 
+Date:   2009-09-07 15:36:54 -0400
+
+    [ring] Overhaul.  Not working right now.
+
+ src/ring.c        | 268 +++++++++++++++++++++++++++++++++++++++---------------
+ src/ring.h        |  56 +++++++++---
+ src/vte-private.h |   2 +-
+ src/vte.c         |  16 ++--
+ 4 files changed, 249 insertions(+), 93 deletions(-)
+
+commit de3f63efab64408c2eb3b0e02e358063769c9396
+Author: Behdad Esfahbod 
+Date:   2009-09-07 01:30:44 -0400
+
+    [ring] Keep ring->next instead of ring->length
+
+ src/ring.c | 45 ++++++++++++++++++++-------------------------
+ src/ring.h |  8 ++++----
+ 2 files changed, 24 insertions(+), 29 deletions(-)
+
+commit 75809e632eb097c8a96c855781677cee560978eb
+Author: Behdad Esfahbod 
+Date:   2009-09-07 01:15:55 -0400
+
+    Fix palette handling
+
+ src/ring.h        | 1 +
+ src/vte-private.h | 2 +-
+ src/vte.c         | 5 +++--
+ 3 files changed, 5 insertions(+), 3 deletions(-)
+
+commit 294b146da1c74ae16d2fd97a986a187d7e2a280d
+Author: Behdad Esfahbod 
+Date:   2009-09-06 00:08:54 -0400
+
+    [ring] Simplify insert/remove
+
+ src/ring.c | 24 ++++++++----------------
+ 1 file changed, 8 insertions(+), 16 deletions(-)
+
+commit 0a855cc5c15f986607e9d2b1c77801792db796fc
+Author: Behdad Esfahbod 
+Date:   2009-09-05 23:58:33 -0400
+
+    [ring] Allocate main row array in powers of two
+    
+    This way we can use a bitwise-and to index, instead of int division
+
+ src/ring.c | 39 +++++++++++++++++++++++++--------------
+ src/ring.h |  4 ++--
+ 2 files changed, 27 insertions(+), 16 deletions(-)
+
+commit b86951330fa9cbb8341aec7ca2fc0be7be4596c1
+Author: Behdad Esfahbod 
+Date:   2009-09-05 23:35:37 -0400
+
+    [ring] Assert struct sizes
+
+ src/ring.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit e36788647962b2632e8f241b830e2bb18f173889
+Author: Behdad Esfahbod 
+Date:   2009-09-05 23:32:58 -0400
+
+    Add static assertions
+
+ src/debug.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 475606d988458605f2f79e649dabe335e3a0453a
+Author: Behdad Esfahbod 
+Date:   2009-09-05 23:09:34 -0400
+
+    [ring] Remove glong in favor of guint
+
+ src/ring.c | 64 +++++++++++++++++++++++++++++++-------------------------------
+ src/ring.h | 24 +++++++++++------------
+ 2 files changed, 44 insertions(+), 44 deletions(-)
+
+commit 086cbf79dd47cbecf2b9afe777f940acf1ae19ef
+Author: Behdad Esfahbod 
+Date:   2009-09-05 23:06:58 -0400
+
+    [ring] Minor cleanup
+
+ src/ring.c | 25 ++++++++++++++++---------
+ src/ring.h | 14 +++++++-------
+ src/vte.c  |  4 ++--
+ 3 files changed, 25 insertions(+), 18 deletions(-)
+
+commit 08972ae6e02c65b5ad0442674b6c6f4b938ed17f
+Author: Behdad Esfahbod 
+Date:   2009-09-05 23:00:53 -0400
+
+    [ring] Remove unused macro
+
+ src/ring.h | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 86211afa952dc878b84ce1b7f14b381fcd91991f
+Author: Behdad Esfahbod 
+Date:   2009-09-05 22:55:51 -0400
+
+    [ring] Tune pool allocation to allocate in powers of two in bytes
+
+ src/ring.c | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+commit ddfef75afd62dc324ec033f57594cad70d0ed34e
+Author: Behdad Esfahbod 
+Date:   2009-09-05 22:41:58 -0400
+
+    [ring] Rename
+
+ src/ring.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 99f63f1da37c343064175572b5b53b5193bbcb3f
+Author: Behdad Esfahbod 
+Date:   2009-09-05 22:24:26 -0400
+
+    [ring] Set minimum row size for allocation to 80
+
+ src/ring.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 865e8e2d981873cfd1d98535c6666f25a8315b22
+Author: Behdad Esfahbod 
+Date:   2009-09-05 22:23:44 -0400
+
+    [ring] Add debug messages to new code
+
+ src/ring.c | 24 +++++++++++++++++++-----
+ 1 file changed, 19 insertions(+), 5 deletions(-)
+
+commit e92865dce49fdcec5181add1a2be36fa57fad3af
+Author: Behdad Esfahbod 
+Date:   2009-09-05 22:06:56 -0400
+
+    Minor cleanup
+
+ src/debug.h | 2 +-
+ src/ring.c  | 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+commit 7b7bea551750d0ff5103fd1e2de969b0d093812c
+Author: Behdad Esfahbod 
+Date:   2009-09-05 21:06:53 -0400
+
+    [ring] Use large-size pools for rowdata allocation
+
+ src/ring.c | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 141 insertions(+), 14 deletions(-)
+
+commit c6b2621d549b51dc9499673717d1125437576963
+Author: Behdad Esfahbod 
+Date:   2009-09-05 20:13:23 -0400
+
+    Rename vtecells to VteCells as well
+
+ src/ring.c | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+commit 2ce6acc60f48a0ce929a222a49957e90c0b8e077
+Author: Behdad Esfahbod 
+Date:   2009-09-05 20:12:14 -0400
+
+    Rename vtecell to VteCell as it's not a value type
+
+ src/ring.c        | 19 ++++++++++---------
+ src/ring.h        | 20 ++++++++++----------
+ src/vte-private.h |  6 +++---
+ src/vte.c         | 50 +++++++++++++++++++++++++-------------------------
+ src/vteseq.c      | 16 ++++++++--------
+ 5 files changed, 56 insertions(+), 55 deletions(-)
+
+commit 064822346af55ce36e0a7e82b38bf235e9fb394f
+Author: Behdad Esfahbod 
+Date:   2009-09-05 00:06:38 -0400
+
+    [ring] Remove GArray for rowcell allocation
+    
+    A very dumb allocator right now.  To be optimized.
+
+ src/ring.c | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ src/ring.h |  47 ++++++++++++-----------
+ 2 files changed, 140 insertions(+), 31 deletions(-)
+
+commit fb9a0d3727c12c0dd5de384335050bb416d33815
+Author: Behdad Esfahbod 
+Date:   2009-09-04 21:20:30 -0400
+
+    Remove chunk mutex
+    
+    We always get called in from the mainloop and hence are essentially
+    single-threaded.
+
+ src/vte.c | 7 -------
+ 1 file changed, 7 deletions(-)
+
+commit 9f486dfe6b1c71073ee85fd092cb375842a98f42
+Author: Behdad Esfahbod 
+Date:   2009-09-04 21:17:13 -0400
+
+    Bug 594025 -  crash in Terminal: running cat /dev/urandom...
+    
+    Bug 593795 -  crash in Terminal: By mistake cat'ing a bin...
+    Remove assert.  G_DISABLE_ASSERT has been in use for years...
+    None of the asserts in place right now have been tested much :(
+
+ src/vte.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit f5f3e586ec83c8da5b473164669f501de6fa281a
+Author: Og B. Maciel 
+Date:   2009-08-30 12:11:29 -0400
+
+    Updated mailing list address.
+
+ po/pt_BR.po | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 00566ad0acd9f4a959f1d91935741f9ef07ca4fe
+Author: Behdad Esfahbod 
+Date:   2009-08-28 14:03:50 -0400
+
+    Enable silent rules by default
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit cbb3071086f9bc173b9d8b9d3f79f87bae256c6a
+Author: Behdad Esfahbod 
+Date:   2009-08-27 17:10:19 -0400
+
+    Remove cell.attr.fragment and use cell.c == FRAGMENT instead
+
+ src/ring.h   |  6 +++---
+ src/vte.c    | 42 +++++++++++++++++++-----------------------
+ src/vteseq.c |  6 +++---
+ 3 files changed, 25 insertions(+), 29 deletions(-)
+
+commit 71a6cf23eeb0237858b7b769074ed9c5bb564c3d
+Author: Behdad Esfahbod 
+Date:   2009-08-27 17:07:53 -0400
+
+    [ring] Fix brokenness with macro implementation
+
+ src/ring.h | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+commit 96793d9716c658b5d9ee4c87846c8e6e7b1c26c7
+Author: Behdad Esfahbod 
+Date:   2009-08-27 16:37:27 -0400
+
+    Minor cleanup
+
+ src/vte.c | 88 +++++++++++++++++++++++++++++----------------------------------
+ 1 file changed, 40 insertions(+), 48 deletions(-)
+
+commit f73e04e92c092f4ce791df2008bb3078847f4805
+Author: Behdad Esfahbod 
+Date:   2009-08-27 00:23:35 -0400
+
+    Remove ring from test programs
+
+ src/Makefile.am | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+commit 5a2879bcc28c703b4e120f57d750d47b7b27a8f4
+Author: Behdad Esfahbod 
+Date:   2009-08-27 00:14:16 -0400
+
+    [ring] Swap rows instead of moving
+    
+    Avoids lots of free/new's
+
+ src/ring.c | 17 ++++++-----------
+ 1 file changed, 6 insertions(+), 11 deletions(-)
+
+commit 05f07e28d7f2b886ee924dd37164a7dfb78d0bb3
+Author: Behdad Esfahbod 
+Date:   2009-08-27 00:10:47 -0400
+
+    [ring] Simplify more
+
+ src/ring.c | 21 +++++++++++++++------
+ 1 file changed, 15 insertions(+), 6 deletions(-)
+
+commit a2c132d6ffa528cbfde0ccd0ed35e08900182ffe
+Author: Behdad Esfahbod 
+Date:   2009-08-26 18:45:36 -0400
+
+    Rename _vte_row_data_set_length() to _vte_row_data_shrink()
+
+ src/ring.h   |  4 ++--
+ src/vte.c    | 15 +++------------
+ src/vteseq.c | 23 ++++++++++-------------
+ 3 files changed, 15 insertions(+), 27 deletions(-)
+
+commit 8cb3e376efd04a92570fec8059f6c634e80603c7
+Author: Behdad Esfahbod 
+Date:   2009-08-26 18:32:03 -0400
+
+    Simplify a bit
+
+ src/vte.c    | 3 +--
+ src/vteseq.c | 6 ++----
+ 2 files changed, 3 insertions(+), 6 deletions(-)
+
+commit 4c8cbb00831c40ed62b29da7fe9ae2734dcb5925
+Author: Behdad Esfahbod 
+Date:   2009-08-26 18:19:12 -0400
+
+    Add basic_cell with default cell attrs
+
+ src/ring.c        |  2 +-
+ src/ring.h        | 94 ++++++++++++++++++++++++++++++++++++-------------------
+ src/vte-private.h | 14 +++------
+ src/vte.c         | 72 +++++++++++++++++-------------------------
+ src/vteseq.c      | 18 +++++------
+ 5 files changed, 103 insertions(+), 97 deletions(-)
+
+commit d3f87acad23aa0b50f2d15756ccd12e173ddbcf7
+Author: Behdad Esfahbod 
+Date:   2009-08-26 01:06:27 -0400
+
+    Abstract rowdata functions away from GArray
+
+ src/ring.c   |  17 +++---
+ src/ring.h   |  31 ++++++++++-
+ src/vte.c    | 171 +++++++++++++++++++++++++----------------------------------
+ src/vteseq.c | 146 +++++++++++++++-----------------------------------
+ 4 files changed, 153 insertions(+), 212 deletions(-)
+
+commit 545fb3c59298058a682879545ff52230054642a6
+Author: Behdad Esfahbod 
+Date:   2009-08-26 00:24:09 -0400
+
+    [ring] Simplify insert and remove even more
+
+ src/ring.c   | 41 ++++++++++++++++++++++++++++++-----------
+ src/vte.c    | 24 ++++--------------------
+ src/vteseq.c | 44 ++++++++++++++------------------------------
+ 3 files changed, 48 insertions(+), 61 deletions(-)
+
+commit 681db91a7772a77b903163f6985330a6f24ef977
+Author: Behdad Esfahbod 
+Date:   2009-08-26 00:12:21 -0400
+
+    Simplify insert
+
+ src/vte.c    | 11 ++---------
+ src/vteseq.c | 11 ++---------
+ 2 files changed, 4 insertions(+), 18 deletions(-)
+
+commit e95ee843ef2954635ca3405f8de009fcb2095304
+Author: Behdad Esfahbod 
+Date:   2009-08-26 00:08:10 -0400
+
+    Simplify remove
+
+ src/ring.c   | 4 ++--
+ src/vte.c    | 3 +--
+ src/vteseq.c | 3 +--
+ 3 files changed, 4 insertions(+), 6 deletions(-)
+
+commit 54e717f081f365ac0e9b2a9947e50893c7666807
+Author: Behdad Esfahbod 
+Date:   2009-08-26 00:00:17 -0400
+
+    Simplify code
+
+ src/vte.c    |  9 +++++----
+ src/vteseq.c | 21 ++++++---------------
+ 2 files changed, 11 insertions(+), 19 deletions(-)
+
+commit ffcb06a6bc2bf1d66eadf2e708ec444cf612f0c0
+Author: Behdad Esfahbod 
+Date:   2009-08-25 23:47:07 -0400
+
+    [ring] Add safeguards to remove()
+
+ src/ring.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 41f2912b527d3aa69ac3e70e9146f8ee171c1a9b
+Author: Behdad Esfahbod 
+Date:   2009-08-25 23:42:06 -0400
+
+    [ring] Simplify insert
+
+ src/ring.c | 49 +++++++++++--------------------------------------
+ 1 file changed, 11 insertions(+), 38 deletions(-)
+
+commit 684e66aeb8597e9f54fda6361ef9e337fdb44eda
+Author: Behdad Esfahbod 
+Date:   2009-08-25 23:26:22 -0400
+
+    [ring] Don't free items when inserting, reuse them
+
+ src/ring.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 717f5bc3422dd3b4a838adec7a65e183e2843702
+Author: Behdad Esfahbod 
+Date:   2009-08-25 23:23:12 -0400
+
+    [ring] Update docs
+
+ src/ring.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit 10220e808e6a9406fd96792f14ebcb0e8474ba13
+Author: Behdad Esfahbod 
+Date:   2009-08-25 23:20:48 -0400
+
+    [ring] Add _vte_ring_move()
+
+ src/ring.c | 30 +++++++++++++-----------------
+ 1 file changed, 13 insertions(+), 17 deletions(-)
+
+commit dd06b763d657a5f4f95b30c259eb08e0a6a9118e
+Author: Behdad Esfahbod 
+Date:   2009-08-25 19:30:29 -0400
+
+    [ring] Cleanup debug messages
+
+ src/ring.c | 39 ++++++++-------------------------------
+ 1 file changed, 8 insertions(+), 31 deletions(-)
+
+commit 1c231e40714b9224da37c4aa0352e72a9a35f9e6 (tag: 0.21.4)
+Author: Behdad Esfahbod 
+Date:   2009-08-25 19:08:37 -0400
+
+    Release 0.21.4
+
+ NEWS         | 5 +++++
+ configure.in | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit ea6488d28be389b047bd0aa2ba69e2a736266a71
+Author: Behdad Esfahbod 
+Date:   2009-08-25 19:06:52 -0400
+
+    Remove another stale assert()
+    
+    fatalerror!  Why did you disable asserts!
+
+ src/vtepangocairo.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit a74e9fb90ba1068a29bc83cc1a33c2d9e4cc68c3
+Author: Behdad Esfahbod 
+Date:   2009-08-25 18:56:58 -0400
+
+    [iso2022] Oops, use the right map decoding function
+
+ src/iso2022.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit 8ad1d698f5053aa748339e602e7f823169def211 (tag: 0.21.3)
+Author: Behdad Esfahbod 
+Date:   2009-08-25 18:52:09 -0400
+
+    Release 0.21.3
+
+ NEWS         | 5 +++++
+ configure.in | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit f0f873a6f0944dcae012d1c4b12fe7a582afd474
+Author: Behdad Esfahbod 
+Date:   2009-08-25 18:49:23 -0400
+
+    [ring] Remove newly-added asserts
+    
+    Ok, the ring should be functionally working again now.
+
+ src/ring.c | 11 ++++-------
+ 1 file changed, 4 insertions(+), 7 deletions(-)
+
+commit c84078230b8a9078843cf027846e16d25555128f
+Author: Behdad Esfahbod 
+Date:   2009-08-25 18:40:28 -0400
+
+    [ring] Remove insert_preserve(), just call insert()
+    
+    I changed the semantics of insert_preserve() and broke vim.  Reading
+    the old code however, it seems equivalent functionally to insert().
+    Just use that.
+
+ src/ring.c | 44 --------------------------------------------
+ src/ring.h |  1 -
+ src/vte.c  |  4 ++--
+ 3 files changed, 2 insertions(+), 47 deletions(-)
+
+commit e8d90d684f158d3ad0b4013685fa65a84a49bcd9
+Author: Behdad Esfahbod 
+Date:   2009-08-25 18:40:09 -0400
+
+    Remove assert
+    
+    I just enabled g_assert, so some old disabled asserts are failing now.
+
+ src/keymap.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 43190598174cfc92e74f72e2c34587ca182c3eae
+Author: Behdad Esfahbod 
+Date:   2009-08-25 18:17:59 -0400
+
+    Fix alternate screen default size, again
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ce4926abf990fa10d9172c058b2248fee69b75d5
+Author: Behdad Esfahbod 
+Date:   2009-08-25 18:11:54 -0400
+
+    Fix initial size of scrollback in alternate screen
+
+ src/debug.h | 1 +
+ src/vte.c   | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+commit edea8adf1a042a5055dac56b97e78540eba6250d
+Author: Behdad Esfahbod 
+Date:   2009-08-25 18:11:31 -0400
+
+    Really fix the ring this time
+
+ src/ring.c | 25 +++++++++++++++----------
+ 1 file changed, 15 insertions(+), 10 deletions(-)
+
+commit 674f91ff949f532b7037c9aba658ad5ea3330a91
+Author: Behdad Esfahbod 
+Date:   2009-08-25 18:11:05 -0400
+
+    Remove G_DISABLE_ASSERT
+
+ src/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 689990df0e51ee96b434c1f98e193de537d3a395 (tag: 0.21.2)
+Author: Behdad Esfahbod 
+Date:   2009-08-25 13:39:57 -0400
+
+    Release 0.21.2
+
+ NEWS         | 5 +++++
+ configure.in | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit c4aff049937050c58da80ec3c789d3b35abbffd0
+Author: Behdad Esfahbod 
+Date:   2009-08-25 13:37:08 -0400
+
+    Bug 592990 - gnome terminal crashes with glibc detected
+
+ src/ring.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit 6db87763b28687f468ca881b20a543dd7487c3dd (tag: 0.21.1)
+Author: Behdad Esfahbod 
+Date:   2009-08-24 19:11:27 -0400
+
+    Release 0.21.1
+
+ NEWS         | 8 ++++++++
+ configure.in | 6 +++---
+ 2 files changed, 11 insertions(+), 3 deletions(-)
+
+commit 7f9757c725f769ce582a928ecbadc2c352c1b635
+Author: Behdad Esfahbod 
+Date:   2009-08-24 16:51:54 -0400
+
+    Add _vte_ring_set_length
+
+ src/ring.h | 3 ++-
+ src/vte.c  | 4 ++--
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+commit 9a3de3c246360025f31ad9d6625f7792960c582e
+Author: Behdad Esfahbod 
+Date:   2009-08-21 21:37:07 -0400
+
+    Make ring keep an array of VteRowData, not VteRowData*
+
+ src/ring.c | 55 +++++++++++++++++++++++++------------------------------
+ src/ring.h |  4 ++--
+ 2 files changed, 27 insertions(+), 32 deletions(-)
+
+commit 440737678453a83e812ee60545369ec0e54a4759
+Author: Behdad Esfahbod 
+Date:   2009-08-21 21:01:17 -0400
+
+    Move _vte_new_row_data() business into the ring
+
+ src/ring.c        | 239 ++++++++++++++++++++++++++++--------------------------
+ src/ring.h        |  61 +++++++++-----
+ src/vte-private.h |  34 --------
+ src/vte.c         |  48 +++--------
+ src/vteseq.c      |  38 +++------
+ 5 files changed, 192 insertions(+), 228 deletions(-)
+
+commit 4e20a3b77e0adf2d2b3db655d9f7b5c3dd1a6c99
+Author: Claude Paroz 
+Date:   2009-08-24 23:18:53 +0200
+
+    Rename nds*.po to nds.po
+
+ po/LINGUAS                | 2 +-
+ po/{nds_NFE.po => nds.po} | 0
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+
+commit 0b78dea524ee01e581327d09324193f2c1cce435
+Author: Nils-Christoph Fiedler 
+Date:   2009-08-22 21:27:28 +0200
+
+    Added Low German translation
+
+ po/LINGUAS    |  1 +
+ po/nds_NFE.po | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 95 insertions(+)
+
+commit 031a653d791248c51df12af1b59d169179330b55
+Author: Behdad Esfahbod 
+Date:   2009-08-21 14:09:44 -0400
+
+    Add _vte_ring_resize()
+    
+    Avoids creating a new ring when changing scrollback lines.
+
+ src/ring.c | 43 +++++++++++++++++++++++++++++++++----------
+ src/ring.h | 16 ++++++++--------
+ src/vte.c  | 36 ++++--------------------------------
+ 3 files changed, 45 insertions(+), 50 deletions(-)
+
+commit 4e533b106a1c39b8565a9891fba83e384cc40669
+Author: Behdad Esfahbod 
+Date:   2009-08-21 12:17:38 -0400
+
+    Revert 80dc9064
+    
+    Removing the optimization, so I can clean up the ring API and redesign
+    the implementation.  Sorry Chris!
+
+ src/ring.c | 17 -----------------
+ src/ring.h |  5 -----
+ src/vte.c  | 19 +++++++------------
+ 3 files changed, 7 insertions(+), 34 deletions(-)
+
+commit bf5977d230dd95fcb86d3cbb8ce492f39ff71ae3
+Author: Behdad Esfahbod 
+Date:   2009-08-21 00:20:44 -0400
+
+    Fix bug introduced in ba1f44d6119cc39602d8a660f4e5a9f56a6f19da
+
+ src/ring.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 08caf3b174e68ba3d02f04c2595ad552cd50db30
+Author: Behdad Esfahbod 
+Date:   2009-08-20 23:20:06 -0400
+
+    Remove the fill argument from _vte_new_row_data()
+    
+    I cannot prove that this change is right, though it looks like it's
+    correct!
+
+ src/vte-private.h |  2 +-
+ src/vte.c         | 28 +++++-----------------------
+ src/vteseq.c      | 12 ++++++------
+ 3 files changed, 12 insertions(+), 30 deletions(-)
+
+commit 7a2a78d3ea4a0128251089acef89d56241a455ca
+Author: Behdad Esfahbod 
+Date:   2009-08-20 23:13:06 -0400
+
+    Minor
+
+ src/vteseq.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+commit fb7fb842be37441b37bc4ae79937540fd4a0de3f
+Author: Behdad Esfahbod 
+Date:   2009-08-20 23:10:07 -0400
+
+    Minor
+
+ src/vteseq.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit 1904625c65d111a99e5920e6bc8121cb272ecc7b
+Author: Behdad Esfahbod 
+Date:   2009-08-20 23:08:18 -0400
+
+    Rename _vte_new_row_data_sized to _vte_new_row_data
+
+ src/vte-private.h |  2 +-
+ src/vte.c         | 10 +++++-----
+ src/vteseq.c      | 12 ++++++------
+ 3 files changed, 12 insertions(+), 12 deletions(-)
+
+commit 5e2b6753201ae416bdf1c594ab5ca5ab8bbf2130
+Author: Behdad Esfahbod 
+Date:   2009-08-20 23:06:37 -0400
+
+    Remove _vte_new_row_data
+
+ src/vte-private.h |  1 -
+ src/vte.c         | 11 -----------
+ src/vteseq.c      |  4 ++--
+ 3 files changed, 2 insertions(+), 14 deletions(-)
+
+commit ba1f44d6119cc39602d8a660f4e5a9f56a6f19da
+Author: Behdad Esfahbod 
+Date:   2009-08-20 23:03:50 -0400
+
+    Specialize VteRing to know about VteRowData
+
+ src/ring.c        | 139 +++++++++---------------------------------------------
+ src/ring.h        |  24 ++++------
+ src/vte-private.h |   6 ---
+ src/vte.c         |  68 ++++----------------------
+ src/vteseq.c      |  28 +++++------
+ 5 files changed, 53 insertions(+), 212 deletions(-)
+
+commit b2280c01c376d70d931fa039fbdf3ed2fd3fa3f6
+Author: Behdad Esfahbod 
+Date:   2009-08-20 18:39:34 -0400
+
+    Store small iso2022 maps in 16bit structs
+    
+    Saves over 100k of the shared library size
+
+ src/iso2022.c | 132 +++++++++++++++++++++++++++++++++-------------------------
+ 1 file changed, 76 insertions(+), 56 deletions(-)
+
+commit 68ac36d9bb7e3ad17bda46de00de229cbe0ff5db
+Author: Behdad Esfahbod 
+Date:   2009-08-20 18:15:10 -0400
+
+    Optimize iso2022 map struct on x86-64
+
+ src/iso2022.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f5ce4c445055b7f19db38fea0a79253d68ac6562
+Author: Behdad Esfahbod 
+Date:   2009-08-20 17:26:14 -0400
+
+    Revert b307bc5c and implement it in a clean way
+
+ src/ring.c        |  68 ++++++++++++++--------------
+ src/ring.h        |   8 ++--
+ src/vte-private.h |   4 +-
+ src/vte.c         | 132 ++++++++++++++++++++++++++----------------------------
+ src/vteseq.c      |  77 ++++++++-----------------------
+ 5 files changed, 120 insertions(+), 169 deletions(-)
+
+commit c34204b358df9d887096b4cd1b5ce7f299d1e3ff
+Author: Behdad Esfahbod 
+Date:   2009-08-20 17:12:13 -0400
+
+    Fix warnings
+
+ src/buffer.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c59dc9252888cf3824f31e307758fd49cf7f9b17
+Author: Behdad Esfahbod 
+Date:   2009-08-20 15:25:28 -0400
+
+    Update git.mk
+
+ git.mk | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit dc03f2f6035befdc2e8ca5a0537ca2e8c26c324f
+Author: Behdad Esfahbod 
+Date:   2009-08-20 15:15:01 -0400
+
+    Update copyright header
+
+ src/buffer.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f168a8a2e6b266e980d15c2af023ce7ea1f15394
+Author: Behdad Esfahbod 
+Date:   2009-08-20 15:09:20 -0400
+
+    Use GByteArray for VteBuffer
+    
+    The implementation was the same.  Keep the abstraction though, since
+    VteBuffer may want to implement O(1) _consume() in the future.
+
+ src/Makefile.am |   7 +--
+ src/buffer.c    | 156 --------------------------------------------------------
+ src/buffer.h    |  23 ++++-----
+ src/interpret.c |   2 +-
+ src/iso2022.c   |   2 +-
+ src/vte.c       |  16 +++---
+ src/vteconv.c   |   6 +--
+ src/vteseq.c    |   2 +-
+ 8 files changed, 24 insertions(+), 190 deletions(-)
+
+commit 83018a7d3aa975211996d69dd922b79165439622
+Author: Behdad Esfahbod 
+Date:   2009-08-20 15:01:40 -0400
+
+    Rename "struct _vte_buffer" to VteBuffer
+
+ src/buffer.c      | 18 +++++++++---------
+ src/buffer.h      | 18 +++++++++---------
+ src/interpret.c   |  2 +-
+ src/iso2022.c     |  4 ++--
+ src/vte-private.h |  4 ++--
+ src/vteconv.c     |  2 +-
+ 6 files changed, 24 insertions(+), 24 deletions(-)
+
+commit ee6fd1c3d8c2ba19c63565a0c889bbdc10125596
+Author: Behdad Esfahbod 
+Date:   2009-08-20 14:55:41 -0400
+
+    Remove unused code
+
+ src/Makefile.am |   7 +-
+ src/buffer.c    | 247 --------------------------------------------------------
+ src/buffer.h    |  23 ------
+ 3 files changed, 2 insertions(+), 275 deletions(-)
+
+commit af4ced55057c3bdc1ec8e87ce8bbef6639663f37
+Author: Behdad Esfahbod 
+Date:   2009-08-17 18:31:04 -0400
+
+    Remove newline after AM_V_GEN
+
+ src/Makefile.am | 9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+commit 11bf7a92d4e0cc75ceda1fcd4da892f58e63b4b8
+Author: Behdad Esfahbod 
+Date:   2009-08-16 01:53:18 -0400
+
+    Reuse ->pending array instead of creating a new one
+
+ src/vte.c | 9 +--------
+ 1 file changed, 1 insertion(+), 8 deletions(-)
+
+commit 80ffef9ad70e70827138f18fdd847dc8a27ebc34
+Author: Christian Persch 
+Date:   2009-08-16 22:19:25 +0200
+
+    Support AM_SILENT_RULES
+    
+    And sprinkle some $(AM_V_GEN) around. Silent rules are disabled by default.
+
+ Makefile.am          |  2 +-
+ configure.in         |  4 ++++
+ doc/Makefile.am      |  4 ++--
+ python/Makefile.am   |  2 +-
+ src/Makefile.am      | 18 ++++++++++--------
+ termcaps/Makefile.am |  2 +-
+ 6 files changed, 19 insertions(+), 13 deletions(-)
+
+commit 41e1e01046e2bc0f9cfbc84c2f41430c9a9a9743
+Author: Behdad Esfahbod 
+Date:   2009-08-12 16:16:09 -0400
+
+    Bug 590824 – gnome-terminal crashed with SIGSEGV after hiting ctrl+o
+
+ src/vte.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 1b2c6bf6136d8a6033499d73cdb659a6709982a3
+Author: Seán de Búrca 
+Date:   2009-08-09 14:11:16 -0600
+
+    Updated Irish translation
+
+ po/ga.po | 129 ++++++++++++++++++++++++++++-----------------------------------
+ 1 file changed, 57 insertions(+), 72 deletions(-)
+
+commit 3eaca3e36fb806608c961ef594baf99cecf9fdfa
+Author: Behdad Esfahbod 
+Date:   2009-08-05 21:26:05 -0400
+
+    Bug 572230 – text mode program rendering is strange in cjk locale.
+    
+    Under UTF-8 encoding, always use width=1 for ambiguous-width chars,
+    only allow override using VTE_CJK_WIDTH=1.  Preivously we were using
+    width=2 for CJKS locales.  That's against Unicode recommendations,
+    and breaks a bunch of programs.
+
+ src/iso2022.c | 36 +-----------------------------------
+ 1 file changed, 1 insertion(+), 35 deletions(-)
+
+commit 403a6b40a1b34627dcd88fc4c3d0c30ef6369768
+Author: Christian Persch 
+Date:   2009-07-26 12:56:05 +0200
+
+    Post-branch version bump
+
+ configure.in | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit b8e1a5d9cc583c3a6d31b5594a4c7ce15ea73f5c
+Author: Behdad Esfahbod 
+Date:   2009-07-10 15:56:19 +0100
+
+    Bug 588200 – bashisms in shell scripts
+
+ src/osc    | 2 +-
+ src/window | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit deda7bccf35e153628ca348b5fdf054e608ec462
+Author: Rajesh Ranjan 
+Date:   2009-07-07 14:23:37 +0530
+
+    hindi update by rajesh Ranjan
+
+ po/hi.po | 93 +++++++++++++++++++++++++---------------------------------------
+ 1 file changed, 36 insertions(+), 57 deletions(-)
+
+commit 4fc17c3fb75cc211232c92ac8b0afa3a8f934cbc (tag: 0.20.5)
+Author: Behdad Esfahbod 
+Date:   2009-06-09 18:33:36 -0400
+
+    Release 0.20.5 to undo the unintended .soname bump
+
+ NEWS         | 4 ++++
+ configure.in | 4 ++--
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit c2ad1acee778542ed5ee9b9b3d0ac2b58a5161d6
+Author: Behdad Esfahbod 
+Date:   2009-06-04 17:39:39 -0400
+
+    Update doc templates
+
+ doc/reference/tmpl/vte.sgml | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+commit 94b2b189e429515407d182de3f6cb6b89297e50c
+Author: Krzesimir Nowak 
+Date:   2009-06-02 13:03:47 +0200
+
+    Bug 584563 – default commit signal handler first param fix.
+    
+    First parameter of default commit signal handler now takes const
+    gchar* instead of gchar*.
+
+ src/vte.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 26ab9f6a8685f6f26d419dcefbade13f561e1585
+Author: Krzesimir Nowak 
+Date:   2009-06-02 16:56:09 -0400
+
+    Bug 573976 – Typedef pointer to function
+    
+    Typedefed a pointer to function used in get_text methods and
+    replaced those pointers with VteSelectionFunc. Documentation for
+    VteSelectionFunc is also added.
+
+ doc/reference/vte-sections.txt |  1 +
+ src/vte.c                      | 48 ++++++++++++++++++------------------------
+ src/vte.h                      | 20 +++++++-----------
+ 3 files changed, 29 insertions(+), 40 deletions(-)
+
+commit 185383d2ff114b16296e3fd203d89e69571c4221 (tag: 0.20.4)
+Author: Behdad Esfahbod 
+Date:   2009-06-01 17:29:53 -0400
+
+    Release 0.20.4
+
+ NEWS         | 8 ++++++++
+ configure.in | 6 +++---
+ 2 files changed, 11 insertions(+), 3 deletions(-)
+
+commit c38b7315abc067a529f4420ead5bde2b6b25be82
+Author: Marc-Andre Lureau 
+Date:   2009-05-30 14:06:22 -0400
+
+    Bug 584281 – build: avoid double installation of xterm
+
+ configure.in         | 1 +
+ termcaps/Makefile.am | 6 +++++-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 33f265a9e3397126bd9f1b210c38bd54ea9a1ddb
+Author: Behdad Esfahbod 
+Date:   2009-05-30 14:04:42 -0400
+
+    Bug 543379 – VTE sends NUL/^@ for backspace
+    
+    Add VTE_ERASE_TTY.  Also make AUTO send \H if terminal erase is undefined.
+
+ doc/reference/tmpl/vte.sgml |  1 +
+ src/vte.c                   | 41 +++++++++++++++++++++++++++++++++--------
+ src/vte.h                   |  3 ++-
+ 3 files changed, 36 insertions(+), 9 deletions(-)
+
+commit 416b37dac95c6aa73c9ead3d6841893bfb22c5b8 (tag: 0.20.3)
+Author: Behdad Esfahbod 
+Date:   2009-05-25 18:27:51 -0400
+
+    0.20.3 released
+
+ NEWS         | 6 ++++++
+ configure.in | 4 ++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 7e371f09de8fb3e3af16469603523c17c721483c
+Author: Krzesimir Nowak 
+Date:   2009-05-18 12:34:21 +0200
+
+    Inlined signal docs
+    
+    2009-05-18  Krzesimir Nowak  
+    
+            * doc/reference/tmpl/vte.sgml: Removed all signal
+            descriptions from   markups and arguments.
+            * src/vte.c: Documented all signals and fixed
+            a description of 'set-scroll-adjustments'.
+
+ doc/reference/tmpl/vte.sgml | 155 ++++++++++++--------------
+ src/vte.c                   | 265 +++++++++++++++++++++++++++++++++++++++++---
+ 2 files changed, 322 insertions(+), 98 deletions(-)
+
+commit 218c6e41627021a2964e606ef72165a16ed329bf
+Author: Frédéric Péters 
+Date:   2009-05-18 22:54:27 +0200
+
+    Bug 583129 – [python] allow passing None as command or directory option
+
+ python/vte.override | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 56727a20b71cd5f960e468444ef544296ddc5edf
+Author: Frédéric Péters 
+Date:   2009-05-18 17:36:46 +0200
+
+    Bug 583078 – [python] allow passing of environment as a dictionary
+
+ python/vte.override | 92 ++++++++++++++++++++++++++++++++++-------------------
+ 1 file changed, 59 insertions(+), 33 deletions(-)
+
+commit 7e45bcee12c2a0db998d302f89d126f5df10481b (tag: 0.20.2)
+Author: Behdad Esfahbod 
+Date:   2009-05-04 16:29:01 -0400
+
+    Released 0.20.2
+
+ NEWS         | 5 +++++
+ configure.in | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit be8796b8a5bb258214b0f02ec55a373828acca71
+Author: Behdad Esfahbod 
+Date:   2009-05-04 14:16:08 -0400
+
+    [git.mk] Update
+
+ git.mk | 172 +++++++++++++++++++++++++++++++++--------------------------------
+ 1 file changed, 88 insertions(+), 84 deletions(-)
+
+commit db2a659c6b907564d522312238518937b4b74254
+Author: Behdad Esfahbod 
+Date:   2009-04-27 14:25:12 -0400
+
+    [doap] Add mailto:
+
+ vte.doap | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit a492585a10d58548206b4b58cf62a645d987526d
+Author: Behdad Esfahbod 
+Date:   2009-04-25 20:33:34 -0400
+
+    Add chaining git.mk
+
+ gnome-pty-helper/git.mk | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 6b12feb7b9be5ed4af4dc0e348fc30718547afe9
+Author: Behdad Esfahbod 
+Date:   2009-04-25 20:33:03 -0400
+
+    [git.mk] Fix maintainer-clean
+
+ git.mk | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 30007c8374621d72c1c8eeb260e46f089a2fccc6
+Author: Olav Vitters 
+Date:   2009-04-23 19:40:30 +0200
+
+    doap: Add desktop category
+
+ vte.doap | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 78f9b61137028bd3b0c4b24c6b2169511b1d1e28
+Author: Behdad Esfahbod 
+Date:   2009-04-23 11:27:18 -0400
+
+    [iso2022] Work around buggy iconv (#567064)
+    
+    Seems like glibc's iconv is buggy, eating the ill sequence then
+    returning EILSEQ.  This was causing crashes.  Work around it.
+
+ src/iso2022.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+commit 3abb0fc2a7011eeadc7e1f49a3f07d9cec4f5c8a
+Author: Behdad Esfahbod 
+Date:   2009-04-18 16:20:23 -0400
+
+    [git.mk] Support out-of-tree builds
+
+ git.mk | 35 +++++++++++++++++++++++++++++------
+ 1 file changed, 29 insertions(+), 6 deletions(-)
+
+commit 963fbd0776c96ecc5efd810c837e478986ff8f35
+Author: Behdad Esfahbod 
+Date:   2009-04-18 15:04:41 -0400
+
+    Remove copyright claim
+
+ git.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ce46104d4378e5dc835c4c4681637dffe205e507
+Author: Behdad Esfahbod 
+Date:   2009-04-18 03:48:58 -0400
+
+    [DOAP] Improve!
+
+ vte.doap | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit 6a534c8643a24af997795a0a6027b791a19194de
+Author: Behdad Esfahbod 
+Date:   2009-04-17 21:38:08 -0400
+
+    Add git.mk
+
+ Makefile.am                  |   2 +
+ doc/Makefile.am              |   2 +
+ doc/openi18n/Makefile.am     |   2 +
+ doc/reference/Makefile.am    |   2 +
+ git.mk                       | 155 +++++++++++++++++++++++++++++++++++++++++++
+ glade/Makefile.am            |   4 ++
+ gnome-pty-helper/Makefile.am |   8 +++
+ perf/Makefile.am             |   2 +
+ python/Makefile.am           |   2 +
+ src/Makefile.am              |   2 +
+ termcaps/Makefile.am         |   2 +
+ 11 files changed, 183 insertions(+)
+
+commit b4b3c644fd51611ef4abdc24aa414b4b8d95f722
+Author: Behdad Esfahbod 
+Date:   2009-04-17 18:05:42 -0400
+
+    Remove static .gitignore
+
+ .gitignore | 99 --------------------------------------------------------------
+ 1 file changed, 99 deletions(-)
+
+commit 78dffc29ecfb7b24528d7546771b602e0c105057
+Author: Christian Persch 
+Date:   2009-04-17 21:16:02 +0200
+
+    Remove ChangeLog only on maintainerclean
+
+ Makefile.am | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+commit ce5c397864104792f84869b84481abb80d86ba1e
+Author: Michael J. Chudobiak 
+Date:   2009-04-17 15:07:29 -0400
+
+    Fixed the commented-out shortdesc field in the doap file
+    
+    Bug #579322.
+
+ vte.doap | 14 ++------------
+ 1 file changed, 2 insertions(+), 12 deletions(-)
+
+commit 1b8a6e627bb4c920541977a684767ccfd48ce324
+Author: Christian Persch 
+Date:   2009-04-17 19:31:02 +0200
+
+    Remove generated ChangeLog on make clean
+
+ Makefile.am | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit e68607b3875374ce69fe95b8c1f99e57ba695c64
+Author: Christian Persch 
+Date:   2009-04-17 18:58:36 +0200
+
+    Remove ChangeLog, and auto-generate changelog on make dist
+
+ .gitignore                     |    2 +
+ ChangeLog => ChangeLog.pre-git |    0
+ Makefile.am                    |   18 +-
+ gnome-pty-helper/ChangeLog     |    1 -
+ po/ChangeLog                   | 1353 ----------------------------------------
+ 5 files changed, 19 insertions(+), 1355 deletions(-)
+
+commit fd3ab8dd61ed18f460cecc153de24eb1377a1a34
+Author: Christian Persch 
+Date:   2009-04-17 18:56:16 +0200
+
+    Add DOAP file.
+
+ vte.doap | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 48 insertions(+)
+
+commit 03bc44250a76de0470cc1303879ac1266eec8b27 (tag: vte_0_20_1)
+Author: Christian Persch 
+Date:   2009-04-12 13:54:29 +0000
+
+    More NEWS
+    
+    svn path=/trunk/; revision=2397
+
+ NEWS | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 95f4face68455e5324b1227cdf6a9c766bf086fc
+Author: Christian Persch 
+Date:   2009-04-12 13:53:19 +0000
+
+    Version 0.20.1
+    
+    svn path=/trunk/; revision=2396
+
+ NEWS         | 5 +++++
+ configure.in | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 605b79f6dfe5e6cda05d1aaa092af235b9046d4f
+Author: Adam Jackson 
+Date:   2009-04-01 00:49:38 +0000
+
+    Add gopher:// to the dingus-click regexes.
+    
+    svn path=/trunk/; revision=2395
+
+ ChangeLog    | 5 +++++
+ src/vteapp.c | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit af483015842d0139c31608f719cef5fe31cc5649
+Author: Behdad Esfahbod 
+Date:   2009-03-26 17:58:05 +0000
+
+    Minor fixes from Richard Russon.
+    
+    2009-03-26  Behdad Esfahbod  
+    
+            * src/vte.c (always_selected):
+            * src/vtepangocairo.c (_vte_pangocairo_set_background_image):
+            * src/vteskel.c (_vte_skel_draw_text):
+            Minor fixes from Richard Russon.
+    
+    
+    svn path=/trunk/; revision=2394
+
+ ChangeLog           | 7 +++++++
+ src/vte.c           | 3 ++-
+ src/vtepangocairo.c | 1 -
+ src/vteskel.c       | 2 +-
+ 4 files changed, 10 insertions(+), 3 deletions(-)
+
+commit 6babc11f91a15ea12f4728e98106590355bc6500
+Author: Behdad Esfahbod 
+Date:   2009-03-26 06:18:23 +0000
+
+    Bug 576797 – Double-click sometimes stops working
+    
+    2009-03-26  Behdad Esfahbod  
+    
+            Bug 576797 – Double-click sometimes stops working
+    
+            * src/vte.c (vte_terminal_extend_selection): Invalidate selection
+            if forced.
+    
+    
+    svn path=/trunk/; revision=2393
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 442a1e7fbcd7c0a8adc5ff5f9b8b459f8de09a25
+Author: Behdad Esfahbod 
+Date:   2009-03-26 05:46:39 +0000
+
+    Bug 573674 – reset resets width to 80 chars
+    
+    2009-03-26  Behdad Esfahbod  
+    
+            Bug 573674 – reset resets width to 80 chars
+    
+            * src/vteseq.c (vte_sequence_handler_decset_internal): Disable
+            resizing on decreset.
+    
+    
+    svn path=/trunk/; revision=2392
+
+ ChangeLog    | 7 +++++++
+ src/vteseq.c | 2 ++
+ 2 files changed, 9 insertions(+)
+
+commit 277cd7e6bafd9099093046a2c19ec8146f9b171a
+Author: Behdad Esfahbod 
+Date:   2009-03-23 23:39:56 +0000
+
+    Bug 576504 – vte does not pass its testsuite.
+    
+    2009-03-23  Behdad Esfahbod  
+    
+            Bug 576504 – vte does not pass its testsuite.
+    
+            * src/vte.c:
+            * src/vtedraw.h:
+            Fix "make check".
+    
+    
+    svn path=/trunk/; revision=2391
+
+ ChangeLog     | 8 ++++++++
+ src/vte.c     | 2 +-
+ src/vtedraw.h | 1 -
+ 3 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 62f5344c5b95ae64fd0321b654573cea369aef19
+Author: Christian Persch 
+Date:   2009-03-23 12:12:51 +0000
+
+            Bug 574491 – gnome-pty-helper can prevent volumes from being unmounted
+    
+            * gnome-pty-helper/gnome-pty-helper.c: (main): chdir to /.
+    
+    svn path=/trunk/; revision=2390
+
+ ChangeLog                           | 6 ++++++
+ gnome-pty-helper/gnome-pty-helper.c | 6 ++++++
+ 2 files changed, 12 insertions(+)
+
+commit 1d9e2356ebf937d0265104cc20ae4b6f3666b798
+Author: Djihed Afifi 
+Date:   2009-03-18 09:19:40 +0000
+
+    Updated Arabic translation
+    
+    svn path=/trunk/; revision=2389
+
+ po/ChangeLog |  4 +++
+ po/ar.po     | 82 +++++++++++++++++++++++++++---------------------------------
+ 2 files changed, 41 insertions(+), 45 deletions(-)
+
+commit 449972a31306e586a9348a92c42b01aebe8e3109
+Author: Ignacio Casal Quinteiro 
+Date:   2009-03-17 22:08:28 +0000
+
+    Updated Galician translation by Suso Baleato.
+    
+    svn path=/trunk/; revision=2388
+
+ po/ChangeLog |   4 +++
+ po/gl.po     | 111 ++++++++++++++++++++++++++++-------------------------------
+ 2 files changed, 57 insertions(+), 58 deletions(-)
+
+commit ff02a22a959e001b49297d17e2d5865d81d84823
+Author: Amanpreet Singh Alam 
+Date:   2009-03-17 02:17:33 +0000
+
+    updating for GNOME Punjabi Translation by A S Alam
+    
+    svn path=/trunk/; revision=2387
+
+ po/pa.po | 98 +++++++++++++++++++++++++++++-----------------------------------
+ 1 file changed, 44 insertions(+), 54 deletions(-)
+
+commit c897c9a37bbe592776abd1179a11d65047ea684c
+Author: Christian Persch 
+Date:   2009-03-15 14:15:16 +0000
+
+    NEWS update
+    
+    svn path=/trunk/; revision=2386
+
+ NEWS | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit e42a7297bf8f14400141666961cfa7bcd0495779 (tag: vte_0_20_0)
+Author: Christian Persch 
+Date:   2009-03-15 12:56:45 +0000
+
+    Fix make.
+    
+    svn path=/trunk/; revision=2384
+
+ doc/reference/vte-docs.sgml    | 2 --
+ doc/reference/vte-sections.txt | 1 +
+ 2 files changed, 1 insertion(+), 2 deletions(-)
+
+commit 8dd2fb3c08edf1b8f1c1143601f362be55382d63
+Author: Christian Persch 
+Date:   2009-03-15 12:56:40 +0000
+
+    Prepare version 0.20.0.
+    
+            * configure.in: Prepare version 0.20.0.
+    
+    svn path=/trunk/; revision=2383
+
+ ChangeLog    |  4 ++++
+ Makefile.am  |  2 +-
+ configure.in | 14 +++++++-------
+ 3 files changed, 12 insertions(+), 8 deletions(-)
+
+commit 07cf3c2ef9d697098be99780e654d25f9a02aba4
+Author: Christian Persch 
+Date:   2009-03-15 12:56:33 +0000
+
+            Bug 575398 – configure warns about term.h under OpenSolaris
+    
+            * configure.in: Fix curses detection on solaris. Patch by David Adam.
+    
+    svn path=/trunk/; revision=2382
+
+ ChangeLog    | 6 ++++++
+ configure.in | 7 +++++--
+ 2 files changed, 11 insertions(+), 2 deletions(-)
+
+commit 75027b7cf6ff5f326293bffeb09413955abc6076
+Author: Amitakhya Phukan 
+Date:   2009-03-13 11:26:42 +0000
+
+    Updated assamese translations
+    
+    svn path=/trunk/; revision=2381
+
+ po/as.po | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 57cb728ae9fe20f6acb77b962b1212d4360aa102
+Author: Amitakhya Phukan 
+Date:   2009-03-13 11:26:12 +0000
+
+    Updated assamese translations
+    
+    svn path=/trunk/; revision=2380
+
+ po/ChangeLog |  5 ++++
+ po/LINGUAS   |  1 +
+ po/as.po     | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 97 insertions(+)
+
+commit 73ba06532e7a061176230ea25296b99fd97c14c1
+Author: Behdad Esfahbod 
+Date:   2009-03-09 10:20:54 +0000
+
+    Bug 574616 – "real" transparency not working from python bindings
+    
+    2009-03-09  Behdad Esfahbod  
+    
+            Bug 574616 – "real" transparency not working from python bindings
+    
+            * src/vtepangocairo.c (_vte_pangocairo_destroy),
+            (_vte_pangocairo_set_background_image): Better handle failure of
+            creating pixmap.
+    
+            * src/vtebg.c (vte_bg_get_pixmap): Get rid of unused mask parameter.
+    
+    
+    svn path=/trunk/; revision=2379
+
+ ChangeLog           | 10 ++++++++++
+ src/vtebg.c         |  7 +------
+ src/vtepangocairo.c | 46 +++++++++++++++++++++-------------------------
+ 3 files changed, 32 insertions(+), 31 deletions(-)
+
+commit 43a9b809e5cf9ccf1a685a7a0ccc0761ff206690
+Author: Behdad Esfahbod 
+Date:   2009-03-07 23:51:12 +0000
+
+    Bug 574025 – Crash in _vte_terminal_insert_char
+    
+    2009-03-07  Behdad Esfahbod  
+    
+            Bug 574025 – Crash in _vte_terminal_insert_char
+    
+            * src/vte.c (_vte_terminal_insert_char): Don't crash.
+    
+    
+    svn path=/trunk/; revision=2378
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 10 ++++++----
+ 2 files changed, 12 insertions(+), 4 deletions(-)
+
+commit df30bd81becd7ce6c499ab889443eed7b7806863
+Author: Christian Persch 
+Date:   2009-03-02 20:14:12 +0000
+
+    Prepare 0.19.5
+    
+    svn path=/trunk/; revision=2377
+
+ ChangeLog    |  5 +++++
+ NEWS         | 18 ++++++++++++++++++
+ configure.in |  4 ++--
+ 3 files changed, 25 insertions(+), 2 deletions(-)
+
+commit 03aeb31b699fc253ccd9cd883328306eee8f2f1d
+Author: Christian Persch 
+Date:   2009-03-02 20:14:07 +0000
+
+    Correct use of padding returned by vte_terminal_get_padding().
+    
+            * src/vteaccess.c: (vte_terminal_accessible_set_size),
+            (vte_terminal_accessible_ref_accessible_at_point):
+            * src/vteapp.c: (button_pressed): Correct use of padding returned
+            by vte_terminal_get_padding().
+    
+    svn path=/trunk/; revision=2376
+
+ ChangeLog       |  7 +++++++
+ src/vteaccess.c | 12 ++----------
+ src/vteapp.c    |  4 ++--
+ 3 files changed, 11 insertions(+), 12 deletions(-)
+
+commit fa84c74627c951e3366f7b76298bfdb5208e5c65
+Author: Christian Persch 
+Date:   2009-03-02 20:14:01 +0000
+
+    Use g_strerror() instead of strerror().
+    
+            * src/vte.c: (vte_terminal_refresh_size), (vte_terminal_set_size):
+            Use g_strerror() instead of strerror().
+    
+    svn path=/trunk/; revision=2375
+
+ ChangeLog | 5 +++++
+ src/vte.c | 8 +++++---
+ 2 files changed, 10 insertions(+), 3 deletions(-)
+
+commit f6170007cd7081f0b77663fa2d0275fc2cd8ae38
+Author: Luca Ferretti 
+Date:   2009-02-18 20:22:43 +0000
+
+    Updated Italian translation by Francesco Marletta.
+    
+    2009-02-18  Luca Ferretti  
+    
+            * it.po: Updated Italian translation by Francesco Marletta.
+    
+    svn path=/trunk/; revision=2374
+
+ po/ChangeLog |  4 ++++
+ po/it.po     | 70 ++++++++++++++++++++++--------------------------------------
+ 2 files changed, 30 insertions(+), 44 deletions(-)
+
+commit dbf4da933efe253036ab579fcd67bfd3e250a6bc
+Author: Jani Monoses 
+Date:   2009-02-16 19:55:33 +0000
+
+    Updated Romanian translations from Adi Roiban and Mișu Moldovan
+    
+    svn path=/trunk/; revision=2373
+
+ po/ChangeLog |  5 ++++
+ po/ro.po     | 89 ++++++++++++++++++++++++------------------------------------
+ 2 files changed, 40 insertions(+), 54 deletions(-)
+
+commit 30029cc2f218f93b5009382c3324affc30f00aa7
+Author: Chao-Hsiung Liao 
+Date:   2009-02-14 09:50:02 +0000
+
+    0.19.4
+    
+    svn path=/trunk/; revision=2372
+
+ po/ChangeLog |  5 ++++
+ po/zh_HK.po  | 85 +++++++++++++++++++++++++++---------------------------------
+ po/zh_TW.po  | 83 ++++++++++++++++++++++++++--------------------------------
+ 3 files changed, 80 insertions(+), 93 deletions(-)
+
+commit 1f93f65512eb8bb1e99fa04ab015dccc2071df8a
+Author: Behdad Esfahbod 
+Date:   2009-02-12 05:33:15 +0000
+
+    Bug 54926 – Should try bold version of font before pseudo-bolding
+    
+    2009-02-12  Behdad Esfahbod  
+    
+            Bug 54926 – Should try bold version of font before pseudo-bolding
+    
+            Patch from Kees Cook 
+    
+            * src/vte.c (_vte_invalidate_cell), (_vte_invalidate_cursor_once),
+            (vte_terminal_unichar_is_local_graphic),
+            (vte_terminal_draw_graphic), (vte_terminal_draw_cells),
+            (vte_terminal_draw_rows), (vte_terminal_paint_cursor):
+            * src/vtedraw.c (_vte_draw_get_char_width), (_vte_draw_text),
+            (_vte_draw_char), (_vte_draw_has_char):
+            * src/vtedraw.h:
+            * src/vtepangocairo.c (_vte_pangocairo_set_text_font),
+            (_vte_pangocairo_get_char_width), (_vte_pangocairo_has_bold),
+            (_vte_pangocairo_draw_text), (_vte_pangocairo_draw_has_char):
+            * src/vteskel.c:
+            Try bold font before pseudo-bolding.
+    
+    
+    svn path=/trunk/; revision=2371
+
+ ChangeLog           | 19 +++++++++++++++++++
+ src/vte.c           | 46 ++++++++++++++++++----------------------------
+ src/vtedraw.c       | 45 +++++++++++++++++++++++++++++++--------------
+ src/vtedraw.h       | 20 ++++++++++++--------
+ src/vtepangocairo.c | 47 +++++++++++++++++++++++++++++++++++++++--------
+ src/vteskel.c       |  1 +
+ 6 files changed, 120 insertions(+), 58 deletions(-)
+
+commit dafe17256dd8c687cddb10305b6913dc870cc651
+Author: Christian Persch 
+Date:   2009-02-08 14:20:25 +0000
+
+    Ignore this
+    
+    svn path=/trunk/; revision=2370
+
+ .gitignore | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 97 insertions(+)
+
+commit 94f13bb62629a567c2814477c7b23f01dbca2fca
+Author: Christian Persch 
+Date:   2009-02-02 15:09:20 +0000
+
+            Bug 570208 – vte fails to build outside source tree
+    
+            * python/Makefile.am: Build fix.
+    
+    svn path=/trunk/; revision=2369
+
+ ChangeLog          |  6 ++++++
+ python/Makefile.am | 12 ++++++------
+ 2 files changed, 12 insertions(+), 6 deletions(-)
+
+commit 3ada3abd77c76e3582af0859995c0909c27ce1ce
+Author: Christian Persch 
+Date:   2009-02-01 22:26:06 +0000
+
+    Remove marshalers that have stock ones in gobject, and use the stock ones
+    
+            * src/marshal.list:
+            * src/vte.c: (vte_terminal_class_init):
+            * src/vtebg.c: (vte_bg_class_init): Remove marshalers that have stock
+            ones in gobject, and use the stock ones instead.
+    
+    svn path=/trunk/; revision=2368
+
+ ChangeLog        |  7 +++++++
+ src/marshal.list |  7 ++-----
+ src/vte.c        | 52 ++++++++++++++++++++++++++--------------------------
+ src/vtebg.c      |  2 +-
+ 4 files changed, 36 insertions(+), 32 deletions(-)
+
+commit a06afbb1df1569b38b421193a4e035d624537bd4
+Author: Behdad Esfahbod 
+Date:   2009-02-01 06:18:43 +0000
+
+    Require GTK+ >= 2.14, for "gtk-fontconfig-timestamp" settings property.
+    
+    2009-02-01  Behdad Esfahbod  
+    
+            * configure.in: Require GTK+ >= 2.14, for "gtk-fontconfig-timestamp"
+            settings property.
+    
+            * src/vte.c (vte_terminal_style_set),
+            (vte_terminal_set_font_full_internal), (vte_terminal_init),
+            (vte_terminal_class_init):  Use style_set class method instead of
+            hooking to style-set signal.  Also, proceed to recreating the font
+            even if neither description nor antialias setting changed.  This is
+            necessary to pick up fontconfig configuration changes as well as font
+            install/uninstallations or GNOME font preferences changes.
+    
+            * src/vtepangocairo.c (font_info_destroy),
+            (fontconfig_timestamp_quark),
+            (vte_pango_cairo_set_fontconfig_timestamp),
+            (vte_pango_cairo_get_fontconfig_timestamp), (context_hash),
+            (context_equal), (font_info_create_for_context),
+            (font_info_create_for_screen):
+            Use fontconfig_timestamp in the font object hash, such that we respond
+            to fontconfig configuration changes.
+    
+    
+    svn path=/trunk/; revision=2367
+
+ ChangeLog           | 22 ++++++++++++++++++++++
+ configure.in        |  2 +-
+ src/vte.c           | 24 ++++++++++--------------
+ src/vteapp.c        |  2 +-
+ src/vtepangocairo.c | 47 +++++++++++++++++++++++++++++++++++++++--------
+ 5 files changed, 73 insertions(+), 24 deletions(-)
+
+commit 1fa6a721bcd1491d5faa82b13af376abc9f2ee6f
+Author: Changwoo Ryu 
+Date:   2009-01-29 12:38:14 +0000
+
+    Updated Korean translation
+    
+    svn path=/trunk/; revision=2366
+
+ po/ChangeLog |  4 +++
+ po/ko.po     | 90 ++++++++++++++++++++++++++++--------------------------------
+ 2 files changed, 46 insertions(+), 48 deletions(-)
+
+commit 58bc3a942f198a1a8788553ca72c19d7c1702b74
+Author: Saleem Abdulrasool 
+Date:   2009-01-28 03:47:11 +0000
+
+    fix bug #548272
+    
+    svn path=/trunk/; revision=2365
+
+ ChangeLog    |  5 +++++
+ src/vteseq.c | 18 ++++++++++++------
+ 2 files changed, 17 insertions(+), 6 deletions(-)
+
+commit 916094b4dcab454f5820ca5350abc81f4d51ad4c
+Author: Christian Persch 
+Date:   2009-01-20 19:25:13 +0000
+
+    Use GDK_BLANK_CURSOR for the invisible cursor on gtk+ >= 2.15.
+    
+            * src/vte.c: (vte_terminal_realize): Use GDK_BLANK_CURSOR for the
+            invisible cursor on gtk+ >= 2.15.
+    
+    svn path=/trunk/; revision=2364
+
+ ChangeLog |  5 +++++
+ src/vte.c | 12 ++++++++++--
+ 2 files changed, 15 insertions(+), 2 deletions(-)
+
+commit bcafeb8b5f6ef9eac9a83c37a3f263a84b1932b8
+Author: Christian Persch 
+Date:   2009-01-20 18:44:30 +0000
+
+    Use ttyname() as recommended in the glibc manual. Bug #565688.
+    
+            * gnome-pty-helper/gnome-pty-helper.c: (init_term_with_defaults),
+            (open_ptys), (close_pty_pair): Use ttyname() as recommended in the
+            glibc manual. Bug #565688.
+    
+    svn path=/trunk/; revision=2363
+
+ ChangeLog                           |  6 ++++++
+ gnome-pty-helper/gnome-pty-helper.c | 28 +++-------------------------
+ 2 files changed, 9 insertions(+), 25 deletions(-)
+
+commit 3b22bcc8605a66f43135902859473a01e7b76f27
+Author: Behdad Esfahbod 
+Date:   2009-01-06 20:18:36 +0000
+
+    Convert some g_strdup_printf() uses to g_snprintf() when the buffer was
+    
+    2009-01-06  Behdad Esfahbod  
+    
+            * src/vteseq.c (vte_parse_color),
+            (vte_sequence_handler_change_color),
+            (vte_sequence_handler_request_terminal_parameters),
+            (vte_sequence_handler_send_primary_device_attributes),
+            (vte_sequence_handler_send_secondary_device_attributes),
+            (vte_sequence_handler_device_status_report),
+            (vte_sequence_handler_dec_device_status_report),
+            (vte_sequence_handler_window_manipulation),
+            (vte_sequence_handler_change_cursor_color):
+            Convert some g_strdup_printf() uses to g_snprintf() when
+            the buffer was fixed-size and freed immediately.
+            Also fix g_snprintf usage by not using its return value.
+            *If* the buffer is short, the returned len is not what we
+            are interested in.
+            Finally, pass -1 as len to vte_terminal_feed_child() in
+            most places.  This means a bit more work for the processor,
+            but cleaner code.
+    
+    
+    svn path=/trunk/; revision=2362
+
+ ChangeLog    |  20 ++++++++
+ src/vteseq.c | 155 +++++++++++++++++++++++++++--------------------------------
+ 2 files changed, 90 insertions(+), 85 deletions(-)
+
+commit 7e3cc8b3e89efe87e7acf3a13df3f66666fc7acb
+Author: Behdad Esfahbod 
+Date:   2009-01-06 19:04:59 +0000
+
+    Bug 566795 – VTE fails to build in trunk
+    
+    2009-01-06  Behdad Esfahbod  
+    
+            Bug 566795 – VTE fails to build in trunk
+    
+            * src/vteseq.c (vte_sequence_handler_change_cursor_color):
+            Fix build.
+    
+    
+    svn path=/trunk/; revision=2361
+
+ ChangeLog    | 7 +++++++
+ src/vteseq.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit ca81ba9319f71f97f12652d56910648e1a706818
+Author: Saleem Abdulrasool 
+Date:   2009-01-06 06:51:58 +0000
+
+    add support for OSC 4 and OSC 12
+    
+    svn path=/trunk/; revision=2360
+
+ ChangeLog          |  10 +++
+ src/vteseq-n.gperf |   4 +-
+ src/vteseq.c       | 192 ++++++++++++++++++++++++++++++++++++++++++++---------
+ 3 files changed, 173 insertions(+), 33 deletions(-)
+
+commit 67401849c6d713f9c4fd5ec8a4ffb92d61c13048
+Author: Behdad Esfahbod 
+Date:   2009-01-06 05:39:42 +0000
+
+    Bug 566730 – vte_terminal_set_color_cursor() calls invalidate_all but it
+    
+    2009-01-06  Behdad Esfahbod  
+    
+            Bug 566730 – vte_terminal_set_color_cursor() calls invalidate_all but
+            it doesn't have to
+    
+            * src/vte.c (vte_terminal_set_color_internal): If color is VTE_CUR_BG,
+            invalidate_cursor_once instead of invalidate_all.
+    
+    
+    svn path=/trunk/; revision=2359
+
+ ChangeLog | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 75e3a47bc882b9204df914db85bdbad913a6c3b6
+Author: Behdad Esfahbod 
+Date:   2009-01-06 05:39:17 +0000
+
+    If color is VTE_CUR_BG, invalidate_cursor_once instead of invalidate_all.
+    
+    2009-01-06  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_set_color_internal): If color is VTE_CUR_BG,
+            invalidate_cursor_once instead of invalidate_all.
+    
+    
+    svn path=/trunk/; revision=2358
+
+ ChangeLog | 5 +++++
+ src/vte.c | 9 ++++++---
+ 2 files changed, 11 insertions(+), 3 deletions(-)
+
+commit 47d142ce5717427fe7dd28c8b3f001829d9a7974
+Author: Halton Huo 
+Date:   2008-12-26 14:48:23 +0000
+
+    Bug 565679 - alloca is discouraged
+    
+    2008-12-26  Halton Huo  
+    
+            Bug 565679 - alloca is discouraged
+    
+            * gnome-pty-helper/gnome-pty-helper.c: use malloc replace alloca.
+    
+    
+    svn path=/trunk/; revision=2357
+
+ ChangeLog                           | 6 ++++++
+ gnome-pty-helper/gnome-pty-helper.c | 5 ++++-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+commit 49aa59927ede031871d36903ff29e3d97d3cfd1c
+Author: Christian Persch 
+Date:   2008-12-26 12:37:42 +0000
+
+    Fix the same typo also in the libinfo check.
+    
+            * configure.in: Fix the same typo also in the libinfo check.
+    
+    svn path=/trunk/; revision=2356
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 7f53406e47e7b818c2b80c2857c71b6c59dbd3a0
+Author: Halton Huo 
+Date:   2008-12-26 10:34:18 +0000
+
+    Bug 565675 - typo in configure.in cause ncurses checking fail
+    
+    2008-12-26  Halton Huo  
+    
+            Bug 565675 - typo in configure.in cause ncurses checking fail
+    
+            * configure.in: Fix typo for ncurses. s/ncuses/ncurses
+    
+    
+    svn path=/trunk/; revision=2355
+
+ ChangeLog    | 6 ++++++
+ configure.in | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit dc6e4b781ec06fcfd097c0d2878c5f300fd0ef5e
+Author: Behdad Esfahbod 
+Date:   2008-12-26 04:13:33 +0000
+
+    Fix warnings.
+    
+    2008-12-25  Behdad Esfahbod  
+    
+            * src/interpret.c (main):
+            * src/slowcat.c (catfile):
+            * src/table.c (_vte_table_addi), (_vte_table_add):
+            * src/trie.c (_vte_trie_matchx):
+            * src/vte.c (_vte_invalidate_cell), (_vte_terminal_insert_char):
+            * src/vteaccess.c (offset_from_xy),
+            (vte_terminal_accessible_finalize),
+            (vte_terminal_accessible_get_text),
+            (vte_terminal_accessible_get_text_somewhere):
+            * src/vteapp.c (main):
+            * src/vtebg.c (vte_bg_cache_item_free), (vte_bg_cache_add):
+            Fix warnings.
+    
+    
+    svn path=/trunk/; revision=2354
+
+ ChangeLog       | 15 +++++++++++++++
+ src/interpret.c |  9 +++++----
+ src/slowcat.c   |  3 ++-
+ src/table.c     |  9 +++++----
+ src/trie.c      |  2 +-
+ src/vte.c       |  6 +++---
+ src/vteaccess.c | 30 +++++++++++++++---------------
+ src/vteapp.c    | 12 ++++++++----
+ src/vtebg.c     | 12 ++++++------
+ 9 files changed, 60 insertions(+), 38 deletions(-)
+
+commit 0cdef5173bdcaa04d3e13edfbc1279ae6edaef4c
+Author: Behdad Esfahbod 
+Date:   2008-12-26 03:11:32 +0000
+
+    Minor.
+    
+    svn path=/trunk/; revision=2353
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 38cafc2aaf4aae3e6e12c995b491f91207794078
+Author: Behdad Esfahbod 
+Date:   2008-12-26 03:10:39 +0000
+
+    Bug 565663 – compile failure because use static function in another .h
+    
+    2008-12-25  Behdad Esfahbod  
+    
+            Bug 565663 – compile failure because use static function in another .h
+            file
+    
+            * src/vte.c: Don't mark extern function inline.
+    
+    
+    svn path=/trunk/; revision=2352
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 811c7e117e172140b43476fc01400ad8898bdb74
+Author: Behdad Esfahbod 
+Date:   2008-12-17 08:26:19 +0000
+
+    Bug 149631 – gnome-terminal doesn't combine combining chars in utf8
+    
+    2008-12-17  Behdad Esfahbod  
+    
+            Bug 149631 – gnome-terminal doesn't combine combining chars in utf8
+    
+            * src/vteunistr.c:
+            Limit to 9 combining marks per unistr, and a total of 100,000 unistrs.
+            All to prevent OOM.
+    
+    
+    svn path=/trunk/; revision=2351
+
+ ChangeLog       |  8 ++++++++
+ src/vteunistr.c | 10 +++++++---
+ 2 files changed, 15 insertions(+), 3 deletions(-)
+
+commit c1be75bcf1dac887972c877fc0c900ce32bb9544 (tag: vte_0_19_4)
+Author: Behdad Esfahbod 
+Date:   2008-12-15 20:50:32 +0000
+
+    Released 0.19.4.
+    
+    2008-12-15  Behdad Esfahbod  
+    
+            * NEWS:
+            * configure.in:
+            Released 0.19.4.
+    
+    
+    svn path=/trunk/; revision=2349
+
+ ChangeLog    |  6 ++++++
+ NEWS         | 15 +++++++++++++++
+ configure.in |  4 ++--
+ 3 files changed, 23 insertions(+), 2 deletions(-)
+
+commit baddcfe4934b8e87717c1dd9d02e75e53fc02b98
+Author: Behdad Esfahbod 
+Date:   2008-12-15 20:45:11 +0000
+
+    Fix make check.
+    
+    svn path=/trunk/; revision=2348
+
+ doc/reference/vte-docs.sgml    |  2 ++
+ doc/reference/vte-sections.txt | 11 +++++++++++
+ 2 files changed, 13 insertions(+)
+
+commit 6afcfe2bce6eeb82ab08efe99003ecc3cd2c1200
+Author: Behdad Esfahbod 
+Date:   2008-12-15 20:30:18 +0000
+
+    Fix doc syntax
+    
+    svn path=/trunk/; revision=2347
+
+ src/vteunistr.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit ca92a5e890704d87d6f5d5b9753c57994dc8dfa6
+Author: Behdad Esfahbod 
+Date:   2008-12-15 01:08:12 +0000
+
+    Bug 564535 – check for gperf on build
+    
+    2008-12-14  Behdad Esfahbod  
+    
+            Bug 564535 – check for gperf on build
+    
+            * autogen.sh: Check for gperf.
+    
+    
+    svn path=/trunk/; revision=2346
+
+ ChangeLog  | 6 ++++++
+ autogen.sh | 7 +++++++
+ 2 files changed, 13 insertions(+)
+
+commit de98fae160f3dab8f4812ab1baeddf02fab55d90
+Author: Behdad Esfahbod 
+Date:   2008-12-12 11:29:40 +0000
+
+    Typos
+    
+    svn path=/trunk/; revision=2345
+
+ src/vteunistr.c | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+commit d453dce12191a1ee19fa70d83bab013999006385
+Author: Behdad Esfahbod 
+Date:   2008-12-12 11:20:31 +0000
+
+    Document vteunistr.
+    
+    2008-12-12  Behdad Esfahbod  
+    
+            * doc/reference/Makefile.am:
+            * src/vteunistr.c (unistr_comp_hash), (unistr_comp_equal),
+            (_vte_unistr_append_unichar), (_vte_unistr_get_base),
+            (_vte_unistr_append_to_string), (_vte_unistr_strlen):
+            * src/vteunistr.h:
+            Document vteunistr.
+    
+    
+    svn path=/trunk/; revision=2344
+
+ ChangeLog                 |   9 ++++
+ doc/reference/Makefile.am |   1 +
+ src/vteunistr.c           | 120 +++++++++++++++++++++++++++++-----------------
+ src/vteunistr.h           |  52 ++++++++++++++++++--
+ 4 files changed, 134 insertions(+), 48 deletions(-)
+
+commit beb61da0f7d5d1730f532cc2eb37df507a267a87
+Author: Behdad Esfahbod 
+Date:   2008-12-12 09:22:48 +0000
+
+    .
+    
+    svn path=/trunk/; revision=2343
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9bbfcb27af874137d81728b5217de3f386a8f0da
+Author: Behdad Esfahbod 
+Date:   2008-12-12 09:22:06 +0000
+
+    Minor.
+    
+    svn path=/trunk/; revision=2342
+
+ ChangeLog       | 4 ++++
+ src/vte.c       | 6 ++++--
+ src/vteunistr.c | 2 ++
+ src/vteunistr.h | 4 ++--
+ 4 files changed, 12 insertions(+), 4 deletions(-)
+
+commit a902f8eb1112e59109ff14520706bb75f3cf6790
+Author: Behdad Esfahbod 
+Date:   2008-12-12 09:04:00 +0000
+
+    Avoid pointers in the const array.
+    
+    2008-12-12  Behdad Esfahbod  
+    
+            * src/iso2022.c (_vte_iso2022_ambiguous_width): Avoid pointers in the
+            const array.
+    
+    
+    svn path=/trunk/; revision=2341
+
+ ChangeLog     | 5 +++++
+ src/iso2022.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 646a71162cabe13f96627ea6cbeb91864e9fc625
+Author: Behdad Esfahbod 
+Date:   2008-12-12 06:57:09 +0000
+
+    Bug 149631 – gnome-terminal doesn't combine combining chars in utf8
+    
+    2008-12-12  Behdad Esfahbod  
+    
+            Bug 149631 – gnome-terminal doesn't combine combining chars in utf8
+    
+            * src/vteunistr.c:
+            * src/vteunistr.h:
+            An extended UTF-32 type that assigns numeric values to UTF-8 sequences
+            on demand.  Can be used to efficiently store a string, instead of one
+            character, at each cell.
+    
+            * src/vte-private.h:
+            * src/vte.c:
+            * src/vtedraw.c:
+            * src/vtedraw.h:
+            * src/vtepangocairo.c:
+            Port to vteunistr instead of gunichar for cell content.
+    
+            * src/vte.c:
+            Handle zerowidth insertions by sticking it on the previous cell.
+    
+            * src/iso2022.h:
+            * src/iso2022.c:
+            Cleanup ambiguous-width handling.  Handle zero-width chars.
+    
+    
+    svn path=/trunk/; revision=2340
+
+ ChangeLog           |  26 +++++++++-
+ src/Makefile.am     |   2 +
+ src/iso2022.c       |  90 +++++++++++++++++-----------------
+ src/iso2022.h       |   5 +-
+ src/vte-private.h   |   3 +-
+ src/vte.c           | 103 ++++++++++++++++++++++++++++++++-------
+ src/vtedraw.c       |   6 +--
+ src/vtedraw.h       |  11 +++--
+ src/vtepangocairo.c | 127 +++++++++++++++++++++++++-----------------------
+ src/vteunistr.c     | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vteunistr.h     |  47 ++++++++++++++++++
+ 11 files changed, 421 insertions(+), 135 deletions(-)
+
+commit 2d0c1717a14e5c735877d45d79668d5519f0e838
+Author: Christian Persch 
+Date:   2008-12-11 14:05:01 +0000
+
+    Typo
+    
+    svn path=/trunk/; revision=2339
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 95c425106ca9a3293ca5c2e8ac630e13d4b9e85f
+Author: Christian Persch 
+Date:   2008-12-11 13:50:33 +0000
+
+            Bug 564057 – src/pty.c does not compile with
+            --disable-gnome-pty-helper
+    
+            * src/pty.c: Build with --disable-gnome-pty-helper. Patch by
+            yselkowitz at users.sourceforge.net .
+    
+    svn path=/trunk/; revision=2338
+
+ ChangeLog | 8 ++++++++
+ src/pty.c | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit 8756ffe9b4f054b6a9622537a02cfd1d614fe176
+Author: Christian Persch 
+Date:   2008-12-11 13:50:25 +0000
+
+    Update set-scroll-adjustement docs.
+    
+            * src/vte.c: (vte_terminal_class_init): Update set-scroll-adjustement
+            docs.
+    
+    svn path=/trunk/; revision=2337
+
+ ChangeLog |  5 +++++
+ src/vte.c | 11 +++++------
+ 2 files changed, 10 insertions(+), 6 deletions(-)
+
+commit 207f0ebfce521535f55f0f7bdc16912fbbec3f85
+Author: Paolo Borelli 
+Date:   2008-12-10 21:51:27 +0000
+
+    Bug 562695 - ship pkg-config file for python bindings
+    
+    2008-12-10  Paolo Borelli  
+    
+            Bug 562695 - ship pkg-config file for python bindings
+    
+            * configure.in:
+            * python/Makefile.am:
+            * python/pyvte.pc.in:
+    
+    
+    svn path=/trunk/; revision=2336
+
+ ChangeLog          |  8 ++++++++
+ configure.in       |  1 +
+ python/Makefile.am |  8 +++++++-
+ python/pyvte.pc.in | 11 +++++++++++
+ 4 files changed, 27 insertions(+), 1 deletion(-)
+
+commit 63b25ac4c6669ffd33cfd0dac8913e3a029251d3
+Author: Behdad Esfahbod 
+Date:   2008-12-08 20:17:00 +0000
+
+    Bug 563752 – pangocairo backend recreates cairo_surface_t for background
+    
+    2008-12-08  Behdad Esfahbod  
+    
+            Bug 563752 – pangocairo backend recreates cairo_surface_t for
+            background drawing
+    
+            * src/vte.c (vte_terminal_paint),
+            (vte_terminal_set_scroll_background),
+            (vte_terminal_background_update):
+            * src/vtedraw.c (_vte_draw_new), (_vte_draw_set_background_solid),
+            (_vte_draw_set_background_image),
+            (_vte_draw_set_background_scroll), (_vte_draw_draw_rectangle):
+            * src/vtedraw.h:
+            * src/vtepangocairo.c (_vte_pangocairo_destroy),
+            (_vte_pangocairo_set_background_solid),
+            (_vte_pangocairo_set_background_image),
+            (_vte_pangocairo_set_background_scroll), (_vte_pangocairo_clear),
+            (_vte_pangocairo_clip), (set_source_color_alpha):
+            * src/vteskel.c:
+            Cleanup vte_draw background API.  Use a cached cairo_pattern_t in
+            pangocairo backend.
+    
+            Also, queue background update on scroll_background change.
+    
+    
+    svn path=/trunk/; revision=2335
+
+ ChangeLog           |  23 +++++++++
+ src/vte.c           |  17 ++++---
+ src/vtedraw.c       |  55 ++++++++------------
+ src/vtedraw.h       |  32 +++++-------
+ src/vtepangocairo.c | 143 +++++++++++++++++++++++++++++++++-------------------
+ src/vteskel.c       |   2 +
+ 6 files changed, 160 insertions(+), 112 deletions(-)
+
+commit d849a02007d2dffdf78c55afea4bf1ffcc526a31
+Author: Behdad Esfahbod 
+Date:   2008-12-08 04:06:05 +0000
+
+    Bug 163213 – Cursor should remain visible when selected
+    
+    2008-12-07  Behdad Esfahbod  
+    
+            Bug 163213 – Cursor should remain visible when selected
+    
+            * src/vte.c (vte_terminal_paint_cursor): Do a reverse hollow cursor
+            if selected but not focused.
+    
+    
+    svn path=/trunk/; revision=2334
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 3411e97b89c09f3f692d73d2994dc52ffee8164b
+Author: Christian Persch 
+Date:   2008-12-05 18:58:17 +0000
+
+    Don't modify source_pixbuf. If we're going to change the saturation, first
+    
+            * src/vtebg.c: (vte_bg_get_pixmap): Don't modify source_pixbuf. If
+            we're going to change the saturation, first make a copy. Fixes
+            switching background type between fauxtransparency and image in
+            gnome-terminal trunk.
+    
+    svn path=/trunk/; revision=2333
+
+ ChangeLog   |  7 +++++++
+ src/vtebg.c | 10 +++++++---
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+commit 1862b94fbc5c02dde35c0450e939986e8a097710
+Author: Behdad Esfahbod 
+Date:   2008-12-05 18:35:29 +0000
+
+    Fix scrolling offset. Ray Strode reported that background offset was being
+    
+    2008-12-05  Behdad Esfahbod  
+    
+            * src/vtepangocairo.c (_vte_pangocairo_clear): Fix scrolling offset.
+            Ray Strode reported that background offset was being done incorrectly.
+            A negation did it.
+    
+    
+    svn path=/trunk/; revision=2332
+
+ ChangeLog           | 6 ++++++
+ src/vtepangocairo.c | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit 8ff1af9ae267b8893bcc58f7cfebc88e63d549e1
+Author: Behdad Esfahbod 
+Date:   2008-12-05 18:20:41 +0000
+
+    Hook up perf/.
+    
+    2008-12-05  Behdad Esfahbod  
+    
+            * Makefile.am:
+            * configure.in:
+            Hook up perf/.
+    
+            Also adjust svn:ignore props.
+    
+    
+    svn path=/trunk/; revision=2331
+
+ ChangeLog    | 8 ++++++++
+ Makefile.am  | 2 +-
+ configure.in | 1 +
+ 3 files changed, 10 insertions(+), 1 deletion(-)
+
+commit 38744c4de50fc6b2f32957abfadd51dacc9c355b
+Author: Behdad Esfahbod 
+Date:   2008-12-05 18:08:07 +0000
+
+    Released 0.19.3.
+    
+    2008-12-05  Behdad Esfahbod  
+    
+            * NEWS:
+            * configure.in:
+            Released 0.19.3.
+    
+    
+    svn path=/trunk/; revision=2330
+
+ ChangeLog    | 6 ++++++
+ NEWS         | 9 ++++++++-
+ configure.in | 4 ++--
+ 3 files changed, 16 insertions(+), 3 deletions(-)
+
+commit 6dafe2bd89db102f8a7666908f040115e2767d43
+Author: Behdad Esfahbod 
+Date:   2008-12-05 18:02:21 +0000
+
+    Always call g_array_new() with clear flag set. It incurs no overhead but
+    
+    2008-12-05  Behdad Esfahbod  
+    
+            * src/vte.c (_vte_new_row_data), (_vte_new_row_data_sized),
+            (vte_terminal_match_contents_refresh),
+            (vte_terminal_process_incoming), (vte_terminal_init),
+            (vte_terminal_set_word_chars):
+            Always call g_array_new() with clear flag set.  It incurs no overhead
+            but avoids heisenbugs.
+    
+    
+    svn path=/trunk/; revision=2329
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 20 +++++---------------
+ 2 files changed, 14 insertions(+), 15 deletions(-)
+
+commit 79b2fd9eafdaa40e4de9952366403ab37b0739a0
+Author: Behdad Esfahbod 
+Date:   2008-12-05 17:58:05 +0000
+
+    Use structure assignment instead of memcpy().
+    
+    2008-12-05  Behdad Esfahbod  
+    
+            * src/vte.c (_vte_terminal_insert_char):
+            * src/vteseq.c (vte_sequence_handler_screen_alignment_test):
+            Use structure assignment instead of memcpy().
+    
+    
+    svn path=/trunk/; revision=2328
+
+ ChangeLog    | 6 ++++++
+ src/vte.c    | 2 +-
+ src/vteseq.c | 2 +-
+ 3 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 51a2447ac830a017a07db6c71e012758fc0b0528
+Author: Behdad Esfahbod 
+Date:   2008-12-05 17:56:48 +0000
+
+    Remove unneeded checks. They were masking bugs.
+    
+    2008-12-05  Behdad Esfahbod  
+    
+            * src/vte.c (_vte_terminal_cleanup_tab_fragments_at_cursor): Remove
+            unneeded checks.  They were masking bugs.
+    
+    
+    svn path=/trunk/; revision=2327
+
+ ChangeLog |  5 +++++
+ src/vte.c | 12 ++----------
+ 2 files changed, 7 insertions(+), 10 deletions(-)
+
+commit fc0f0d26e7955e1aa7a155a4ae8a799ebfbb1d83
+Author: Behdad Esfahbod 
+Date:   2008-12-05 17:53:49 +0000
+
+    Red Hat Bug 474618 - gnome-terminal sometime leaves empty begining of the
+    
+    2008-12-05  Behdad Esfahbod  
+    
+            Red Hat Bug 474618 -  gnome-terminal sometime leaves empty begining
+            of the line
+    
+            * src/vte.c (_vte_terminal_insert_char): Really fix the bug this time.
+    
+    
+    svn path=/trunk/; revision=2326
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 5 +++--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+commit ef2d5fed42be09def0d96603a840451c9f10aa0a (tag: vte_0_19_2)
+Author: Behdad Esfahbod 
+Date:   2008-12-05 15:04:24 +0000
+
+    Build fixes.
+    
+    2008-12-05  Behdad Esfahbod  
+    
+            * src/Makefile.am:
+            Build fixes.
+    
+            * NEWS:
+            * configure.in:
+            Released 0.19.2.
+    
+    
+    svn path=/trunk/; revision=2324
+
+ ChangeLog | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 71df6b432b99b8882eef2f8088fbd9f01dada342
+Author: Behdad Esfahbod 
+Date:   2008-12-05 15:03:27 +0000
+
+    More build fixes
+    
+    svn path=/trunk/; revision=2323
+
+ src/Makefile.am | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit af34fea9546f00378e4784764c7bf1afb60717ca
+Author: Behdad Esfahbod 
+Date:   2008-12-05 14:52:42 +0000
+
+    Fix build.
+    
+    svn path=/trunk/; revision=2322
+
+ src/reaper.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit f33eb5d98c542a672ecf0fbb0875a1b03a28034c
+Author: Behdad Esfahbod 
+Date:   2008-12-05 14:30:48 +0000
+
+    Fix version numbers here.
+    
+    svn path=/trunk/; revision=2321
+
+ NEWS | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 6df0f80c2d15c9dbe2bb6ad5837155dd6f75a33b
+Author: Behdad Esfahbod 
+Date:   2008-12-05 14:29:49 +0000
+
+    Released 0.19.2.
+    
+    2008-12-05  Behdad Esfahbod  
+    
+            * NEWS:
+            * configure.in:
+            Released 0.19.2.
+    
+    
+    svn path=/trunk/; revision=2320
+
+ ChangeLog    | 10 ++++++++--
+ NEWS         | 21 +++++++++++++++++++++
+ configure.in |  4 ++--
+ 3 files changed, 31 insertions(+), 4 deletions(-)
+
+commit 258546a8f8c0a3c6a3d3ce377234448b45ca83b5
+Author: Behdad Esfahbod 
+Date:   2008-12-05 14:23:28 +0000
+
+    Bug 474618 - gnome-terminal sometime leaves empty begining of the line
+    
+    2008-12-05  Behdad Esfahbod  
+    
+             Bug 474618 -  gnome-terminal sometime leaves empty begining of the
+             line
+    
+            * src/vte.c (_vte_terminal_cleanup_tab_fragments_at_cursor): continue
+            instead of break'ing out of the loop.
+    
+    
+    svn path=/trunk/; revision=2319
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit 97b34fddd90537c17a5ff66a5a92596b34f20c6c
+Author: Behdad Esfahbod 
+Date:   2008-12-04 21:25:03 +0000
+
+    Bug 563274 – Misspelled word in src code
+    
+    2008-12-04  Behdad Esfahbod  
+    
+            Bug 563274 – Misspelled word in src code
+    
+            * src/vte.c (vte_terminal_process_incoming): Fix typo.
+    
+    
+    svn path=/trunk/; revision=2318
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit 7d03d88f40ee4b8e9a0d3f9a391bca231a31cc62
+Author: Behdad Esfahbod 
+Date:   2008-12-03 00:56:02 +0000
+
+    Bug 563024 – In alternate-screen, selection can copy out of screen
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            Bug 563024 – In alternate-screen, selection can copy out of screen
+            boundaries
+    
+            * src/vte.c (vte_terminal_extend_selection_expand),
+            (vte_terminal_extend_selection): Make sure current selection row is in
+    t
+    he
+            visible screen.
+    
+            I have a deja vu of fixing this bug like two years ago...
+    
+    
+    svn path=/trunk/; revision=2317
+
+ ChangeLog | 11 +++++++++++
+ src/vte.c | 22 ++++++++++++++++++++--
+ 2 files changed, 31 insertions(+), 2 deletions(-)
+
+commit 0094f898d9ef249c0b48f95b965385fb14529c6b
+Author: Christian Persch 
+Date:   2008-12-02 22:10:19 +0000
+
+            Bug 552096 – Detect tgetent if provided by libtinfo
+    
+            * configure.in: Rewrote tgetent checks to be more readable. Also check
+            for tgetent in libtinfo.
+            * src/keymap.c: (_vte_keymap_map), (_vte_keymap_key_is_modifier):
+            * src/ssfe.c: Adjust includes accordingly.
+    
+    svn path=/trunk/; revision=2316
+
+ ChangeLog    |  9 +++++++++
+ configure.in | 49 +++++++++++++++++++++++++++++++++++--------------
+ src/keymap.c | 35 ++++++++++++-----------------------
+ src/ssfe.c   | 22 ++++++++++------------
+ 4 files changed, 66 insertions(+), 49 deletions(-)
+
+commit a1bac9039b195be3dfee1607adc5d8b6d9659a55
+Author: Christian Persch 
+Date:   2008-12-02 22:10:13 +0000
+
+    Show the correct version in Since: and Deprecated: annotations.
+    
+            * src/vte.c: (vte_terminal_class_init): Show the correct version in
+            Since: and Deprecated: annotations.
+    
+    svn path=/trunk/; revision=2315
+
+ ChangeLog |  5 ++++
+ src/vte.c | 78 +++++++++++++++++++++++++++++++--------------------------------
+ 2 files changed, 44 insertions(+), 39 deletions(-)
+
+commit d1c56ce8993a6543d817f5561f873fa428efa7c3
+Author: Behdad Esfahbod 
+Date:   2008-12-02 20:38:06 +0000
+
+    Don't do fancy rounding for row selection, only for column.
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_start_selection),
+            (vte_terminal_extend_selection): Don't do fancy rounding for row
+            selection, only for column.
+    
+    
+    svn path=/trunk/; revision=2314
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 47 ++++++++++++++---------------------------------
+ 2 files changed, 20 insertions(+), 33 deletions(-)
+
+commit c15f5ce6b62833aa848e29bec5d097eeb5a6bd80
+Author: Behdad Esfahbod 
+Date:   2008-12-02 20:29:09 +0000
+
+    Call function instead of open coding.
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_invalidate_selection),
+            (vte_terminal_start_selection): Call function instead of open coding.
+    
+    
+    svn path=/trunk/; revision=2313
+
+ ChangeLog |  5 +++++
+ src/vte.c | 33 ++++++++++++---------------------
+ 2 files changed, 17 insertions(+), 21 deletions(-)
+
+commit 36e0a0aa08f274497f03869a1d7eb84a5cef992d
+Author: Behdad Esfahbod 
+Date:   2008-12-02 20:16:27 +0000
+
+    Cache the full ASCII range if Latin uses the default language.
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vtedraw.h:
+            * src/vtepangocairo.c (font_info_cache_ascii):
+            Cache the full ASCII range if Latin uses the default language.
+    
+    
+    svn path=/trunk/; revision=2312
+
+ ChangeLog           |  6 ++++++
+ src/vtedraw.h       | 10 ++++++++--
+ src/vtepangocairo.c | 15 ++++++++++++---
+ 3 files changed, 26 insertions(+), 5 deletions(-)
+
+commit 4a3768afa819802f533c8ec73cc166010b368000
+Author: Behdad Esfahbod 
+Date:   2008-12-02 19:57:47 +0000
+
+    Respect PangoLanguage set on a widget's PangoContext.
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vtepangocairo.c (context_hash), (context_equal),
+            (font_info_create_for_context), (font_info_create_for_screen),
+            (font_info_create_for_widget): Respect PangoLanguage set on a widget's
+            PangoContext.
+    
+    
+    svn path=/trunk/; revision=2311
+
+ ChangeLog           |  7 +++++++
+ src/vtepangocairo.c | 24 ++++++++++++++++--------
+ 2 files changed, 23 insertions(+), 8 deletions(-)
+
+commit 86c55a0b613311fbf4c7eab3cfa40649d7c131bb
+Author: Behdad Esfahbod 
+Date:   2008-12-02 19:14:26 +0000
+
+    Remove CJK fullwidth measurement hacks. Pango doesn't need these. We're
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vtepangocairo.c (font_info_measure_font): Remove CJK fullwidth
+            measurement hacks.  Pango doesn't need these.  We're down to one
+            FcFontSort() instead of two during initialization.
+    
+    
+    svn path=/trunk/; revision=2310
+
+ ChangeLog           |  6 ++++++
+ src/vtepangocairo.c | 27 +++------------------------
+ 2 files changed, 9 insertions(+), 24 deletions(-)
+
+commit 8ad856610c11cfe877eb7baca8c13eeb1a65e5fd
+Author: Behdad Esfahbod 
+Date:   2008-12-02 18:36:33 +0000
+
+    Bug 559818 – redundant selection-changed signal on deselection
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            Bug 559818 – redundant selection-changed signal on deselection
+    
+            * src/vte.c (vte_terminal_start_selection),
+            (vte_terminal_extend_selection): Fix all redundant selection-changed
+            signals.  Including those on double-click.
+    
+    
+    svn path=/trunk/; revision=2309
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 14 ++++++++------
+ 2 files changed, 16 insertions(+), 6 deletions(-)
+
+commit 28995f5240a7a14795de94578c50345cd08bb8b6
+Author: Behdad Esfahbod 
+Date:   2008-12-02 18:22:39 +0000
+
+    Add missing I_() decorator
+    
+    svn path=/trunk/; revision=2308
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d9c2e0eabe14ec07dfe4d06f1f474c5952f2c6a4
+Author: Behdad Esfahbod 
+Date:   2008-12-02 17:59:11 +0000
+
+    Rewrite text selection. In particular, fix block_mode.
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vte-private.h:
+            * src/vte.c:
+            Rewrite text selection.  In particular, fix block_mode.
+    
+    
+    svn path=/trunk/; revision=2307
+
+ ChangeLog         |   6 +
+ src/vte-private.h |   3 +-
+ src/vte.c         | 563 ++++++++++++++++++++++++++++--------------------------
+ 3 files changed, 303 insertions(+), 269 deletions(-)
+
+commit 66ef6a3d640343d56167394e4447a80e729dcd8c
+Author: Behdad Esfahbod 
+Date:   2008-12-02 15:43:43 +0000
+
+    Update.
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * HACKING: Update.
+    
+    
+    svn path=/trunk/; revision=2306
+
+ ChangeLog |  4 ++++
+ HACKING   | 14 ++++++++++++++
+ 2 files changed, 18 insertions(+)
+
+commit ea2f60c5587f34deeb6fdef293e44adef89e1522
+Author: Behdad Esfahbod 
+Date:   2008-12-02 15:40:12 +0000
+
+    Mouse tracking cleanup.
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vte-private.h:
+            * src/vte.c (_vte_terminal_set_pointer_visible),
+            (vte_terminal_get_mouse_tracking_info),
+            (vte_terminal_send_mouse_button_internal),
+            (vte_terminal_maybe_send_mouse_button),
+            (vte_terminal_maybe_send_mouse_drag), (vte_terminal_motion_notify),
+            (vte_terminal_button_press), (vte_terminal_button_release),
+            (vte_terminal_scroll), (vte_terminal_reset):
+            * src/vteseq.c (vte_sequence_handler_decset_internal):
+            Mouse tracking cleanup.
+    
+    
+    svn path=/trunk/; revision=2305
+
+ ChangeLog         |  13 +++++
+ src/vte-private.h |  18 ++++---
+ src/vte.c         | 151 ++++++++++++++++++++++++------------------------------
+ src/vteseq.c      |  20 ++++----
+ 4 files changed, 103 insertions(+), 99 deletions(-)
+
+commit 51c0a9c523b7a5651593236a7894370aeee2d3f9
+Author: Behdad Esfahbod 
+Date:   2008-12-02 14:55:55 +0000
+
+    Minor
+    
+    svn path=/trunk/; revision=2304
+
+ src/vte.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit ec2d1eeb60cff564461ef4f0c0c1de2590e9abab
+Author: Behdad Esfahbod 
+Date:   2008-12-02 14:53:59 +0000
+
+    Add -Wno-switch-enum warning flag as we are not -Wswitch-enum clean.
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * configure.in: Add -Wno-switch-enum warning flag as we are not
+            -Wswitch-enum clean.
+    
+    
+    svn path=/trunk/; revision=2303
+
+ ChangeLog    | 5 +++++
+ configure.in | 5 +----
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+commit 1501d6c5893cfd57ba1bba6f26c04eb7289529b5
+Author: Behdad Esfahbod 
+Date:   2008-12-02 14:45:30 +0000
+
+    Cut one third of the 400-line function out into a function of its own.
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_extend_selection_on_type),
+            (vte_terminal_extend_selection):
+            Cut one third of the 400-line function out into a function of its own.
+    
+    
+    svn path=/trunk/; revision=2302
+
+ ChangeLog |   6 ++
+ src/vte.c | 275 +++++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 152 insertions(+), 129 deletions(-)
+
+commit 0ae3274d3b2827760a89e28f04ddcef93f2e3341
+Author: Behdad Esfahbod 
+Date:   2008-12-02 14:33:57 +0000
+
+    Revert previous change.
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_extend_selection): Revert previous change.
+    
+    
+    svn path=/trunk/; revision=2301
+
+ ChangeLog | 4 ++++
+ src/vte.c | 4 ----
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit ed8607b74bb6d53b844ab740422b3aef89e2f915
+Author: Behdad Esfahbod 
+Date:   2008-12-02 13:54:42 +0000
+
+    Add a shortcircuit check.
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_extend_selection):  Add a shortcircuit
+            check.
+    
+    
+    svn path=/trunk/; revision=2300
+
+ ChangeLog | 5 +++++
+ src/vte.c | 4 ++++
+ 2 files changed, 9 insertions(+)
+
+commit df9641608756c1ca56deda15ae968400652728d5
+Author: Behdad Esfahbod 
+Date:   2008-12-02 13:49:21 +0000
+
+    Change mouse coordinates type from double to long.
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vte-private.h:
+            * src/vte.c (vte_terminal_send_mouse_button_internal),
+            (vte_terminal_maybe_send_mouse_drag), (cursor_inside_match),
+            (vte_terminal_match_hilite_show),
+            (vte_terminal_match_hilite_update), (vte_terminal_match_hilite),
+            (vte_terminal_extend_selection), (vte_terminal_autoscroll),
+            (vte_terminal_motion_notify), (vte_terminal_button_press),
+            (vte_terminal_button_release):
+            Change mouse coordinates type from double to long.
+    
+    
+    svn path=/trunk/; revision=2299
+
+ ChangeLog         |  12 ++++++
+ src/vte-private.h |   4 +-
+ src/vte.c         | 110 +++++++++++++++++++++++++++---------------------------
+ 3 files changed, 69 insertions(+), 57 deletions(-)
+
+commit 543ac083f713b3cf9c0eb85c8b12ea9155ba66ab
+Author: Behdad Esfahbod 
+Date:   2008-12-02 13:21:31 +0000
+
+    Cleanup selection code a bit more.
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vte-private.h:
+            * src/vte.c (vte_terminal_start_selection),
+            (vte_terminal_extend_selection):
+            Cleanup selection code a bit more.
+    
+    
+    svn path=/trunk/; revision=2298
+
+ ChangeLog         |  7 +++++++
+ src/vte-private.h |  2 +-
+ src/vte.c         | 42 ++++++++++++------------------------------
+ 3 files changed, 20 insertions(+), 31 deletions(-)
+
+commit 5b53f739162260fa7b0efa2f7fc3ffde84d6b3d8
+Author: Behdad Esfahbod 
+Date:   2008-12-02 13:08:16 +0000
+
+    Merge selection_origin and selection_restart_origin as only one was being
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vte-private.h:
+            * src/vte.c (vte_terminal_start_selection),
+            (vte_terminal_extend_selection):
+            Merge selection_origin and selection_restart_origin as only one was
+            being used at a time.
+    
+    
+    svn path=/trunk/; revision=2297
+
+ ChangeLog         | 8 ++++++++
+ src/vte-private.h | 2 +-
+ src/vte.c         | 6 +-----
+ 3 files changed, 10 insertions(+), 6 deletions(-)
+
+commit 47cffc6431a47e04001cc8576c892b6f666a8213
+Author: Behdad Esfahbod 
+Date:   2008-12-02 12:51:10 +0000
+
+    Bug 471480 – select single character Bug 110371 – Cannot select
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            Bug 471480 – select single character
+            Bug 110371 – Cannot select newline at end of full line
+    
+            * src/vte-private.h:
+            * src/vte.c (find_start_column), (find_end_column),
+            (vte_terminal_start_selection), (math_div),
+            (vte_terminal_extend_selection):
+            Make selection work more I-beam-like.
+    
+    
+    svn path=/trunk/; revision=2296
+
+ ChangeLog         | 11 ++++++++
+ src/vte-private.h |  2 +-
+ src/vte.c         | 80 ++++++++++++++++++++++++++++++++++++++++++-------------
+ 3 files changed, 73 insertions(+), 20 deletions(-)
+
+commit c128acf052463ed454a951012b245d3c8a4fd985
+Author: Christian Persch 
+Date:   2008-12-02 12:29:30 +0000
+
+            Bug 112172 – Get rid of VteReaper
+    
+            * src/reaper.h: Deprecate.
+    
+    svn path=/trunk/; revision=2295
+
+ ChangeLog    | 6 ++++++
+ src/reaper.h | 5 ++++-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+commit 8bf187434817ce38611efb8b9d1648f9cba00665
+Author: Christian Persch 
+Date:   2008-12-02 12:26:25 +0000
+
+    Enable maintainer mode by default. Define more deprecation defines, and
+    
+            * configure.in: Enable maintainer mode by default. Define more
+            deprecation defines, and define the *_DISABLE_SINGLE_INCLUDES defines.
+            Enable deprecations by default in maintainer mode.
+            * src/vteapp.c: Undef VTE_DISABLE_DEPRECATED here.
+    
+    svn path=/trunk/; revision=2294
+
+ ChangeLog    |  7 +++++++
+ configure.in | 51 +++++++++++++++++++++++++++++++++++++--------------
+ src/vteapp.c |  2 ++
+ 3 files changed, 46 insertions(+), 14 deletions(-)
+
+commit e89b9c9d5565c2c52e9e5c39cf152bfdce6f4c2f
+Author: Christian Persch 
+Date:   2008-12-02 12:26:18 +0000
+
+    Move VTE_UTF8_BPC definition from configure to vte-private.h. Include
+    
+            * configure.in:
+            * src/vte-private.h: Move VTE_UTF8_BPC definition from configure to
+            vte-private.h.
+            * src/vteconv.c: Include vte-private.h here.
+    
+    svn path=/trunk/; revision=2293
+
+ ChangeLog         | 7 +++++++
+ configure.in      | 3 ---
+ src/vte-private.h | 3 +++
+ src/vteconv.c     | 1 +
+ 4 files changed, 11 insertions(+), 3 deletions(-)
+
+commit 72a984985180449122f855a271b4a302c28bdf76
+Author: Christian Persch 
+Date:   2008-12-02 12:26:13 +0000
+
+    Remove VTE_INVALID_SOURCE definition and just use 0 directly.
+    
+            * src/vte-private.h:
+            * src/vte.c: (mark_input_source_invalid),
+            (_vte_terminal_connect_pty_read), (mark_output_source_invalid),
+            (_vte_terminal_connect_pty_write),
+            (_vte_terminal_disconnect_pty_read),
+            (_vte_terminal_disconnect_pty_write),
+            (_vte_terminal_enable_input_source), (remove_cursor_timeout),
+            (vte_terminal_key_press), (vte_terminal_focus_in),
+            (vte_terminal_focus_out), (vte_terminal_init),
+            (vte_terminal_unrealize), (vte_terminal_expose),
+            (vte_terminal_background_update), (add_update_timeout),
+            (remove_from_active_list), (vte_terminal_add_process_timeout),
+            (process_timeout), (update_repeat_timeout), (update_timeout): Remove
+            VTE_INVALID_SOURCE definition and just use 0 directly.
+    
+    svn path=/trunk/; revision=2292
+
+ ChangeLog         | 17 +++++++++++
+ src/vte-private.h |  1 -
+ src/vte.c         | 86 +++++++++++++++++++++++++++----------------------------
+ 3 files changed, 60 insertions(+), 44 deletions(-)
+
+commit 0d8b243122843d15e7d0bdc47a8d8858a75a286a
+Author: Christian Persch 
+Date:   2008-12-02 12:26:06 +0000
+
+            Bug 560667 – invalid definition of VTE_INVALID_SOURCE
+    
+            * src/vte-private.h: Fix VTE_INVALID_SOURCE define to use 0 instead of
+            -1.
+    
+    svn path=/trunk/; revision=2291
+
+ ChangeLog         | 7 +++++++
+ src/vte-private.h | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit d34606b64581e58b2c5d3878f4e54e4f73da2be3
+Author: Christian Persch 
+Date:   2008-12-02 12:25:58 +0000
+
+    Remove two AC_DEFINEs from here. Define VTE_INVALID_SOURCE here for now.
+    
+            * configure.in: Remove two AC_DEFINEs from here.
+            * src/vte-private.h: Define VTE_INVALID_SOURCE here for now.
+    
+    svn path=/trunk/; revision=2290
+
+ ChangeLog         | 5 +++++
+ configure.in      | 2 --
+ src/vte-private.h | 1 +
+ 3 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 3c751231fbc7a147032e3e7c00edd88191e83613
+Author: Christian Persch 
+Date:   2008-12-02 12:25:52 +0000
+
+            Bug 112172 – Get rid of VteReaper
+    
+            * src/reaper.c: (vte_reaper_child_watch_cb),
+            (vte_reaper_add_child), (vte_reaper_init),
+            (vte_reaper_constructor), (vte_reaper_finalize),
+            (vte_reaper_class_init), (vte_reaper_get), (child_exited), (main):
+            * src/reaper.h: Prepare for removal of Reaper in vte1.0 by removing
+            the unused pre-glib-2.4 code from Reaper.
+    
+    svn path=/trunk/; revision=2289
+
+ ChangeLog    |  11 +++++
+ src/reaper.c | 133 +----------------------------------------------------------
+ src/reaper.h |   4 +-
+ 3 files changed, 15 insertions(+), 133 deletions(-)
+
+commit 2309a9d0135abc1556e201dfb3c87e28525b53b4
+Author: Christian Persch 
+Date:   2008-12-02 12:25:42 +0000
+
+    Catch the child-exited signal to the child's exit code.
+    
+            * src/vteapp.c: (main): Catch the child-exited signal to the child's
+            exit code.
+    
+    svn path=/trunk/; revision=2288
+
+ ChangeLog    | 5 +++++
+ src/vteapp.c | 8 ++++++++
+ 2 files changed, 13 insertions(+)
+
+commit 44dcc1548032d9d32478408ea44b55392af518e5
+Author: Christian Persch 
+Date:   2008-12-02 11:28:18 +0000
+
+    Intern the signal names.
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_class_init): Intern the signal names.
+    
+    svn path=/trunk/; revision=2287
+
+ ChangeLog         |  5 +++++
+ src/vte-private.h |  2 ++
+ src/vte.c         | 62 +++++++++++++++++++++++++++----------------------------
+ 3 files changed, 38 insertions(+), 31 deletions(-)
+
+commit 576393b15d21724cfd442af22fc94c97d8f2963e
+Author: Behdad Esfahbod 
+Date:   2008-12-02 10:57:50 +0000
+
+    Do not discard motion notify events with coordinates out of our
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_motion_notify): Do not discard motion notify
+            events with coordinates out of our allocation, or when the cell under
+            the cursor didn't change.  These are useful for extending selection
+            and for sub-cell selection details, as well as app-requested all
+            motion tracking.
+    
+    
+    svn path=/trunk/; revision=2286
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 17 -----------------
+ 2 files changed, 8 insertions(+), 17 deletions(-)
+
+commit 11bd8553aba33e2e58cf83cd4ceb5ed12c39dfe0
+Author: Behdad Esfahbod 
+Date:   2008-12-02 10:50:54 +0000
+
+    Bug 541441 – Dehighlight links on visibility notify?
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            Bug 541441 – Dehighlight links on visibility notify?
+    
+            * src/vte.c (vte_terminal_focus_in), (vte_terminal_enter):  Move match
+            highlight enabling into "enter" event instead of "focus in".
+    
+    
+    svn path=/trunk/; revision=2285
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 11 +++++++----
+ 2 files changed, 14 insertions(+), 4 deletions(-)
+
+commit 9996b7fa094edb9312467400aa5a362e6563bf0a
+Author: Behdad Esfahbod 
+Date:   2008-12-02 10:10:46 +0000
+
+    Simplify mouse event tracking by using a single int instead of five
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vte-private.h:
+            * src/vte.c (_vte_terminal_set_pointer_visible),
+            (vte_terminal_maybe_send_mouse_button),
+            (vte_terminal_maybe_send_mouse_drag), (vte_terminal_motion_notify),
+            (vte_terminal_button_press), (vte_terminal_button_release),
+            (vte_terminal_scroll), (vte_terminal_reset):
+            * src/vteseq.c (vte_sequence_handler_decset_internal):
+            Simplify mouse event tracking by using a single int instead of five
+            booleans.
+    
+    
+    svn path=/trunk/; revision=2284
+
+ ChangeLog         | 12 +++++++++
+ src/vte-private.h | 12 +++++----
+ src/vte.c         | 76 ++++++++++++++-----------------------------------------
+ src/vteseq.c      | 64 +++++++++++-----------------------------------
+ 4 files changed, 53 insertions(+), 111 deletions(-)
+
+commit 618ac353dbb677659b54b008a7b8bff73ddd5545
+Author: Behdad Esfahbod 
+Date:   2008-12-02 08:56:53 +0000
+
+    Rename struct selection_cell_coords members from x,y to col,row for
+    
+    2008-12-02  Behdad Esfahbod  
+    
+            * src/vte-private.h:
+            * src/vte.c (vte_terminal_deselect_all),
+            (vte_terminal_process_incoming), (vte_cell_is_selected),
+            (vte_terminal_copy), (vte_terminal_start_selection),
+            (vte_terminal_extend_selection), (vte_terminal_select_all),
+            (vte_terminal_paint), (_vte_terminal_get_start_selection),
+            (_vte_terminal_get_end_selection), (_vte_terminal_select_text):
+            Rename struct selection_cell_coords members from x,y to col,row for
+            clarity.
+    
+    
+    svn path=/trunk/; revision=2283
+
+ ChangeLog         |  12 +++
+ src/vte-private.h |   2 +-
+ src/vte.c         | 277 +++++++++++++++++++++++++++---------------------------
+ 3 files changed, 153 insertions(+), 138 deletions(-)
+
+commit 39f87a7d78ea8b3cfda9c3a1c83f3e0306a8f590 (tag: vte_0_19_1)
+Author: Behdad Esfahbod 
+Date:   2008-12-02 00:36:12 +0000
+
+    Released 0.19.1.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * NEWS:
+            * configure.in:
+            Released 0.19.1.
+    
+    
+    svn path=/trunk/; revision=2281
+
+ ChangeLog    |  6 ++++++
+ NEWS         | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ configure.in |  6 +++---
+ 3 files changed, 65 insertions(+), 6 deletions(-)
+
+commit cf78263e0df29e916603b3128c5bf9e11dbeef21
+Author: Behdad Esfahbod 
+Date:   2008-12-02 00:11:48 +0000
+
+    Copy check-doc-syntax.sh tests from cairo and fix doc bugs.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * doc/reference/Makefile.am:
+            * doc/reference/check-doc-syntax.sh:
+            * src/Makefile.am:
+            * src/check-doc-syntax.sh:
+            * src/vte.c (vte_terminal_catch_child_exited),
+            (vte_terminal_class_init):
+            * src/vte.h:
+            * src/vtepangocairo.c:
+            Copy check-doc-syntax.sh tests from cairo and fix doc bugs.
+    
+    
+    svn path=/trunk/; revision=2280
+
+ ChangeLog                         | 12 ++++++
+ doc/reference/Makefile.am         |  9 ++++-
+ doc/reference/check-doc-syntax.sh | 11 ++++++
+ src/Makefile.am                   |  5 ++-
+ src/check-doc-syntax.sh           | 77 +++++++++++++++++++++++++++++++++++++++
+ src/vte.c                         | 14 +++----
+ src/vte.h                         |  2 +-
+ src/vtepangocairo.c               |  2 +-
+ 8 files changed, 120 insertions(+), 12 deletions(-)
+
+commit f496e59520b4bd307e9351c33d9750117e4d3612
+Author: Behdad Esfahbod 
+Date:   2008-12-01 23:57:53 +0000
+
+    More
+    
+    svn path=/trunk/; revision=2279
+
+ doc/reference/vte-docs.sgml | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 5b86070b847a50d981bb2fdd06157d8af92dca31
+Author: Behdad Esfahbod 
+Date:   2008-12-01 23:56:23 +0000
+
+    Remove reaper docs.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * doc/reference/tmpl/vte-unused.sgml:
+            * doc/reference/vte-sections.txt:
+            Remove reaper docs.
+    
+    
+    svn path=/trunk/; revision=2278
+
+ ChangeLog                          |  6 ++++++
+ doc/reference/tmpl/vte-unused.sgml | 30 ++++++++++++++++++++++++++++++
+ doc/reference/vte-sections.txt     | 16 ----------------
+ 3 files changed, 36 insertions(+), 16 deletions(-)
+
+commit 6f16a40e06bec191d4555df1d0da33c8b068da0b
+Author: Behdad Esfahbod 
+Date:   2008-12-01 23:53:59 +0000
+
+    Update templates
+    
+    svn path=/trunk/; revision=2277
+
+ doc/reference/tmpl/vte-unused.sgml | 6 ++++++
+ doc/reference/tmpl/vte.sgml        | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit b708b7bc83a2b7555fe7bfa5877c81614807ac1b
+Author: Behdad Esfahbod 
+Date:   2008-12-01 23:53:28 +0000
+
+    Fix typo
+    
+    svn path=/trunk/; revision=2276
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6c3095b83908f4b9b462e35d6f49d1c7077d51b7
+Author: Behdad Esfahbod 
+Date:   2008-12-01 23:50:02 +0000
+
+    Bug 562806 – crash in Terminal: Typing "cd " just after ...
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            Bug 562806 – crash in Terminal: Typing "cd " just after ...
+    
+            * src/vte.c (_vte_terminal_cleanup_tab_fragments_at_cursor):
+            Fix possible NULL dereference.
+    
+            * src/vteseq.c (vte_sequence_handler_ta):
+            Fix tab fragments to have \t as c.
+    
+    
+    svn path=/trunk/; revision=2275
+
+ ChangeLog    | 10 ++++++++++
+ src/vte.c    |  3 ++-
+ src/vteseq.c |  2 +-
+ 3 files changed, 13 insertions(+), 2 deletions(-)
+
+commit f00b38dacf322c101ef412d029119e40db5f4a62
+Author: Christian Persch 
+Date:   2008-12-01 17:33:06 +0000
+
+    Prepare 0.19.0.
+    
+            * NEWS:
+            * configure.in: Prepare 0.19.0.
+    
+    svn path=/trunk/; revision=2274
+
+ ChangeLog    | 5 +++++
+ NEWS         | 6 ++++++
+ configure.in | 6 +++---
+ 3 files changed, 14 insertions(+), 3 deletions(-)
+
+commit cb0b51a1a28ae29471930ca6625c3cbe4e503dca
+Author: Christian Persch 
+Date:   2008-12-01 14:56:47 +0000
+
+            Bug 562511 – scrollbar doesn't sit at the bottom
+    
+            * src/vte.c: (vte_terminal_init),
+            (vte_terminal_set_scrollback_lines): Always update the scrollback
+            lines, even if the setting hasn't changed. Work-around to fix bug
+            #562511.
+    
+    svn path=/trunk/; revision=2273
+
+ ChangeLog | 9 +++++++++
+ src/vte.c | 4 ++++
+ 2 files changed, 13 insertions(+)
+
+commit 2b909705993d390e5532f442345441ea769ead2a
+Author: Christian Persch 
+Date:   2008-12-01 14:56:40 +0000
+
+    Fix visible-bell property.
+    
+            * src/vte.c: (vte_terminal_class_init): Fix visible-bell property.
+    
+    svn path=/trunk/; revision=2272
+
+ ChangeLog | 4 ++++
+ src/vte.c | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 9a4c4967743634ac09425c23e2a818c393ebb183
+Author: Christian Persch 
+Date:   2008-12-01 14:56:33 +0000
+
+    Rename font property to "font-desc" to be more in line with other
+    
+            * src/vte.c: (vte_terminal_set_font_full_internal),
+            (vte_terminal_class_init): Rename font property to "font-desc" to be
+            more in line with other properties of this type in gtk.
+    
+    svn path=/trunk/; revision=2271
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 14 +++++++-------
+ 2 files changed, 13 insertions(+), 7 deletions(-)
+
+commit 771333da042a7d0c1b9b49edd6ad342201c5ec0a
+Author: Christian Persch 
+Date:   2008-12-01 14:56:26 +0000
+
+    Add gobject notification debugging.
+    
+            * src/vteapp.c: (main): Add gobject notification debugging.
+    
+    svn path=/trunk/; revision=2270
+
+ ChangeLog    |  4 ++++
+ src/vteapp.c | 32 +++++++++++++++++++++++++++++++-
+ 2 files changed, 35 insertions(+), 1 deletion(-)
+
+commit 3129dc10ec91dee3486f01a6217815948e985ebc
+Author: Behdad Esfahbod 
+Date:   2008-12-01 09:50:04 +0000
+
+    Simplify standout handling code.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vteseq.c (vte_terminal_termcap_string_same_as_for),
+            (vte_sequence_handler_se), (vte_sequence_handler_so):
+            Simplify standout handling code.
+    
+    
+    svn path=/trunk/; revision=2269
+
+ ChangeLog    |   6 +++
+ src/vteseq.c | 121 +++++++++++++++++++++++------------------------------------
+ 2 files changed, 52 insertions(+), 75 deletions(-)
+
+commit 491c7df4a12e10f59e0f91f7f4918af9e5a658f7
+Author: Behdad Esfahbod 
+Date:   2008-12-01 09:30:29 +0000
+
+    Minor.
+    
+    svn path=/trunk/; revision=2268
+
+ src/vteseq.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 1d1ec4d77b56edae5d2a780f856ec6b0848fca8e
+Author: Behdad Esfahbod 
+Date:   2008-12-01 09:27:23 +0000
+
+    Rip out VTE_SEQUENCE_HANDLER_PROTO.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vteseq.c: Rip out VTE_SEQUENCE_HANDLER_PROTO.
+    
+    
+    svn path=/trunk/; revision=2267
+
+ ChangeLog    |   4 +
+ src/vteseq.c | 397 +++++++++++++++++++++++++++++++++++------------------------
+ 2 files changed, 240 insertions(+), 161 deletions(-)
+
+commit 3d73ff342fc4a030f957088095980bb2d0d7da81
+Author: Behdad Esfahbod 
+Date:   2008-12-01 09:19:34 +0000
+
+    Rip out vte_sequence_handler_invoke.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vteseq.c: Rip out vte_sequence_handler_invoke.
+    
+    
+    svn path=/trunk/; revision=2266
+
+ ChangeLog    |  4 ++++
+ src/vteseq.c | 15 ++++++---------
+ 2 files changed, 10 insertions(+), 9 deletions(-)
+
+commit 0146a031b80e216e16ab934b6c447c19271de867
+Author: Behdad Esfahbod 
+Date:   2008-12-01 09:16:35 +0000
+
+    Rip out VTE_SEQUENCE_HANDLER_INVOKE.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vteseq.c: Rip out VTE_SEQUENCE_HANDLER_INVOKE.
+    
+    
+    svn path=/trunk/; revision=2265
+
+ ChangeLog    |  4 ++++
+ src/vteseq.c | 65 +++++++++++++++++++++++++++++-------------------------------
+ 2 files changed, 35 insertions(+), 34 deletions(-)
+
+commit 731b0e50cbc347bd9a1555b40464c421b1f9a2ed
+Author: Behdad Esfahbod 
+Date:   2008-12-01 09:14:20 +0000
+
+    Rip out VTE_SEQUENCE_HANDLER_REFERENCE.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vteseq.c: Rip out VTE_SEQUENCE_HANDLER_REFERENCE.
+    
+    
+    svn path=/trunk/; revision=2264
+
+ ChangeLog    |  4 ++++
+ src/vteseq.c | 52 +++++++++++++++++++---------------------------------
+ 2 files changed, 23 insertions(+), 33 deletions(-)
+
+commit 491f866c452ea013f9c3e99612261224019bbb95
+Author: Behdad Esfahbod 
+Date:   2008-12-01 09:11:00 +0000
+
+    Rip out the gcc label vtable code.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vteseq.c (_vte_terminal_handle_sequence): Rip out the gcc label
+            vtable code.
+    
+    
+    svn path=/trunk/; revision=2263
+
+ ChangeLog    |  5 ++++
+ src/vteseq.c | 95 ------------------------------------------------------------
+ 2 files changed, 5 insertions(+), 95 deletions(-)
+
+commit 91dc211fdec31229d2a3d56d64f6ef6bb83447dd
+Author: Behdad Esfahbod 
+Date:   2008-12-01 09:05:56 +0000
+
+    Some cleanup of the gcc label vtable code before I rip it out.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vteseq.c (display_control_sequence),
+            (_vte_terminal_handle_sequence):
+            Some cleanup of the gcc label vtable code before I rip it out.
+    
+    
+    svn path=/trunk/; revision=2262
+
+ ChangeLog    |   6 ++
+ src/vteseq.c | 245 ++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 132 insertions(+), 119 deletions(-)
+
+commit 849ab9282616faffd51c55a275c4ca8f57d531d7
+Author: Behdad Esfahbod 
+Date:   2008-12-01 08:10:01 +0000
+
+    Move some code around.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vteseq.c (vte_sequence_handler_set_title_internal),
+            (vte_sequence_handler_set_mode_internal),
+            (vte_sequence_handler_invoke_internal):
+            Move some code around.
+    
+    
+    svn path=/trunk/; revision=2261
+
+ ChangeLog    |   7 ++
+ src/vteseq.c | 231 ++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 126 insertions(+), 112 deletions(-)
+
+commit da600cbfb8772a94c7af9dc2d1ed2c1bcb35823a
+Author: Behdad Esfahbod 
+Date:   2008-12-01 08:07:06 +0000
+
+    Remove excess initializer.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vteskel.c: Remove excess initializer.
+    
+    
+    svn path=/trunk/; revision=2260
+
+ ChangeLog     | 4 ++++
+ src/vteskel.c | 1 -
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit a4ae36c60d4e2b2d9303e6edcaa42aca8b7d5858
+Author: Behdad Esfahbod 
+Date:   2008-12-01 08:05:34 +0000
+
+    #include  instead of "../config.h".
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/buffer.c:
+            * src/caps.c:
+            * src/dumpkeys.c:
+            * src/interpret.c:
+            * src/iso2022.c:
+            * src/keymap.c:
+            * src/matcher.c:
+            * src/mev.c:
+            * src/pty.c:
+            * src/reaper.c:
+            * src/reflect.c:
+            * src/ring.c:
+            * src/slowcat.c:
+            * src/ssfe.c:
+            * src/table.c:
+            * src/trie.c:
+            * src/vteaccess.c:
+            * src/vtebg.c:
+            * src/vteconv.c:
+            * src/vtedraw.c:
+            * src/vteseq.c:
+            * src/vteskel.c:
+            * src/xticker.c:
+            #include  instead of "../config.h".
+    
+    
+    svn path=/trunk/; revision=2259
+
+ ChangeLog       | 27 +++++++++++++++++++++++++++
+ src/buffer.c    |  2 +-
+ src/caps.c      |  2 +-
+ src/dumpkeys.c  |  2 +-
+ src/interpret.c |  2 +-
+ src/iso2022.c   |  2 +-
+ src/keymap.c    |  2 +-
+ src/matcher.c   |  2 +-
+ src/mev.c       |  2 +-
+ src/pty.c       |  2 +-
+ src/reaper.c    |  2 +-
+ src/reflect.c   |  2 +-
+ src/ring.c      |  2 +-
+ src/slowcat.c   |  2 +-
+ src/ssfe.c      |  2 +-
+ src/table.c     |  2 +-
+ src/trie.c      |  2 +-
+ src/vteaccess.c |  2 +-
+ src/vtebg.c     |  2 +-
+ src/vteconv.c   |  2 +-
+ src/vtedraw.c   |  2 +-
+ src/vteseq.c    |  2 +-
+ src/vteskel.c   |  2 +-
+ src/xticker.c   |  2 +-
+ 24 files changed, 50 insertions(+), 23 deletions(-)
+
+commit e58d84cba5a3c103465446c1f087c94b556f48b2
+Author: Behdad Esfahbod 
+Date:   2008-12-01 08:03:30 +0000
+
+    Some wild crack to build the vtable using gcc extension for labels as
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vteseq.c: Some wild crack to build the vtable using gcc
+            extension for labels as values.  The advantage is that we get down to
+            an empty .data for vteseq.o but .text grows considerably.  And we have
+            to use nested functions, and #define static auto.  It's really ugly.
+            I'm going to remove it in the next commit or the one after.  Just
+            wanted to record it here for posterity.
+    
+    
+    svn path=/trunk/; revision=2258
+
+ ChangeLog    |   9 +++++
+ src/vteseq.c | 124 ++++++++++++++++++++++++++++++++++++++++++++---------------
+ 2 files changed, 103 insertions(+), 30 deletions(-)
+
+commit 9eb563968d1a86441d4f02834119750d395c8016
+Author: Behdad Esfahbod 
+Date:   2008-12-01 06:36:15 +0000
+
+    Almost there. Towards a .data-free vtable.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vteseq.c (vte_sequence_handler_invoke),
+            (vte_sequence_handler_offset), (vte_sequence_handler_multiple),
+            (vte_sequence_handler_decset_internal),
+            (VTE_SEQUENCE_HANDLER_PROTO), (_vte_terminal_handle_sequence):
+            Almost there.  Towards a .data-free vtable.
+    
+    
+    svn path=/trunk/; revision=2257
+
+ ChangeLog    |  12 +++++
+ src/vteseq.c | 173 ++++++++++++++++++++++++++++++++++++-----------------------
+ 2 files changed, 117 insertions(+), 68 deletions(-)
+
+commit 98e7a1540b3256b4199235d7cd7431bc2dccecb4
+Author: Behdad Esfahbod 
+Date:   2008-12-01 05:56:55 +0000
+
+    Make sequence handlers return void instead of gboolean. The return value
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vte-private.h:
+            * src/vteseq.c (vte_sequence_handler_offset),
+            (vte_sequence_handler_multiple),
+            (vte_sequence_handler_decset_internal),
+            (vte_sequence_handler_set_mode_internal),
+            (VTE_SEQUENCE_HANDLER_PROTO), (_vte_terminal_handle_sequence):
+            Make sequence handlers return void instead of gboolean.  The return
+            value was unused.
+    
+    
+    svn path=/trunk/; revision=2256
+
+ ChangeLog         |  11 +++
+ src/vte-private.h |   8 +-
+ src/vteseq.c      | 261 +++++++++++++-----------------------------------------
+ 3 files changed, 75 insertions(+), 205 deletions(-)
+
+commit 51521d139806e01b96f8cc0626bd8aed73fe025a
+Author: Behdad Esfahbod 
+Date:   2008-12-01 05:30:26 +0000
+
+    Switch to calling other handlers using two macros. Get rid of match and
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vteseq.c (vte_sequence_handler_offset),
+            (vte_sequence_handler_multiple),
+            (vte_sequence_handler_decset_internal),
+            (VTE_SEQUENCE_HANDLER_PROTO), (_vte_terminal_handle_sequence):
+            Switch to calling other handlers using two macros.
+            Get rid of match and match_quark arguments to sequence handlers.
+            They were unused.
+    
+    
+    svn path=/trunk/; revision=2255
+
+ ChangeLog    |  10 +++++
+ src/vteseq.c | 126 +++++++++++++++++++++++++----------------------------------
+ 2 files changed, 63 insertions(+), 73 deletions(-)
+
+commit c030133c0529702d24d74ae23bf481c36fe21607
+Author: Behdad Esfahbod 
+Date:   2008-12-01 05:10:25 +0000
+
+    Cleanup vte_sequence_handler_set_title_internal.
+    
+    2008-12-01  Behdad Esfahbod  
+    
+            * src/vteseq.c (vte_sequence_handler_set_title_internal):
+            Cleanup vte_sequence_handler_set_title_internal.
+    
+    
+    svn path=/trunk/; revision=2254
+
+ ChangeLog    |  5 +++++
+ src/vteseq.c | 58 +++++++++++++++++++++++-----------------------------------
+ 2 files changed, 28 insertions(+), 35 deletions(-)
+
+commit 20cbe595e6910e2b09cfd16486651218325ff927
+Author: Behdad Esfahbod 
+Date:   2008-12-01 05:00:01 +0000
+
+    Use a macro to define type of sequence handlers.
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/vteseq.c (VTE_SEQUENCE_HANDLER_PROTO): Use a macro to define
+            type of sequence handlers.
+    
+    
+    svn path=/trunk/; revision=2253
+
+ ChangeLog    |   5 +
+ src/vteseq.c | 728 +++++++++++------------------------------------------------
+ 2 files changed, 139 insertions(+), 594 deletions(-)
+
+commit 4475bcbfb3348b2ed17d70a2152fbb6a2bc61aa1
+Author: Behdad Esfahbod 
+Date:   2008-12-01 04:34:07 +0000
+
+    Remove gperf-generated files from SVN, but still distribute them in the
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/Makefile.am:
+            * src/vteseq-2.c:
+            * src/vteseq-n.c:
+            Remove gperf-generated files from SVN, but still distribute them in
+            the tarball.
+    
+    
+    svn path=/trunk/; revision=2252
+
+ ChangeLog       |   8 ++
+ src/Makefile.am |  19 ++-
+ src/vteseq-2.c  | 268 ----------------------------------------
+ src/vteseq-n.c  | 375 --------------------------------------------------------
+ 4 files changed, 21 insertions(+), 649 deletions(-)
+
+commit 77b722aa359a20240f11054f45c4d9e05612b1bc
+Author: Behdad Esfahbod 
+Date:   2008-12-01 03:52:05 +0000
+
+    One more time.
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * POTFILES.in: One more time.
+    
+    
+    svn path=/trunk/; revision=2251
+
+ po/ChangeLog   | 4 ++++
+ po/POTFILES.in | 1 +
+ 2 files changed, 5 insertions(+)
+
+commit 6adba974637bc29a16693953cf231c7776913825
+Author: Behdad Esfahbod 
+Date:   2008-12-01 03:46:11 +0000
+
+    More code shufflling.
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/vte-private.h:
+            * src/vte.c:
+            * src/vteseq.c (_vte_terminal_scroll_text),
+            (vte_sequence_handler_scroll_down),
+            (vte_sequence_handler_scroll_up):
+            More code shufflling.
+    
+    
+    svn path=/trunk/; revision=2250
+
+ ChangeLog         |  9 +++++++++
+ src/vte-private.h |  2 --
+ src/vte.c         | 52 ---------------------------------------------------
+ src/vteseq.c      | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 4 files changed, 63 insertions(+), 56 deletions(-)
+
+commit 4a251a8a4cb1958f0c33164fdb59202a6da4d373
+Author: Behdad Esfahbod 
+Date:   2008-12-01 03:45:01 +0000
+
+    Update.
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * POTFILES.in: Update.
+    
+    
+    svn path=/trunk/; revision=2249
+
+ po/ChangeLog   |  4 ++++
+ po/POTFILES.in | 11 +----------
+ 2 files changed, 5 insertions(+), 10 deletions(-)
+
+commit e41a8b1567919bc7faae9cbf757e83da49b94b99
+Author: Behdad Esfahbod 
+Date:   2008-12-01 03:38:13 +0000
+
+    Remove vteseq-list.h from SVN, but still distribute it in the tarball.
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/Makefile.am:
+            * src/vteseq-list.h:
+            Remove vteseq-list.h from SVN, but still distribute it in the tarball.
+    
+    
+    svn path=/trunk/; revision=2248
+
+ ChangeLog         |   6 +++
+ src/Makefile.am   |   4 +-
+ src/vteseq-list.h | 117 ------------------------------------------------------
+ 3 files changed, 9 insertions(+), 118 deletions(-)
+
+commit 4821ff6a79628cc8c77952882e5285a06ff4412c
+Author: Behdad Esfahbod 
+Date:   2008-12-01 03:32:02 +0000
+
+    Autogenerate vteseq-list.h.
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/Makefile.am:
+            * src/vteseq-list.h:
+            Autogenerate vteseq-list.h.
+    
+    
+    svn path=/trunk/; revision=2247
+
+ ChangeLog         |  6 ++++++
+ src/Makefile.am   |  6 +++++-
+ src/vteseq-list.h | 23 ++++++++++++-----------
+ 3 files changed, 23 insertions(+), 12 deletions(-)
+
+commit b3d935a3132bca9784a2ff4cd1ff897b09eff705
+Author: Behdad Esfahbod 
+Date:   2008-12-01 03:22:03 +0000
+
+    Sync vteseql-list.h with actual handlers used in gperf files.
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/vteseq-list.h:
+            * src/vteseq.c (_vte_terminal_home_cursor),
+            (_vte_terminal_clear_screen), (_vte_terminal_clear_current_line),
+            (_vte_terminal_clear_above_current),
+            (vte_sequence_handler_decset_internal), (vte_sequence_handler_cl),
+            (vte_sequence_handler_ho), (vte_sequence_handler_erase_in_display),
+            (vte_sequence_handler_erase_in_line):
+            Sync vteseql-list.h with actual handlers used in gperf files.
+    
+    
+    svn path=/trunk/; revision=2246
+
+ ChangeLog         |  11 +++
+ src/vteseq-list.h |   3 -
+ src/vteseq.c      | 279 +++++++++++++++++++++++++-----------------------------
+ 3 files changed, 142 insertions(+), 151 deletions(-)
+
+commit 80c7e53cc585ebf2da979c809fd3cb5634c1a3ea
+Author: Behdad Esfahbod 
+Date:   2008-12-01 03:01:09 +0000
+
+    Implement these calling vte_terminal_scroll() directly instead of
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/vteseq-list.h:
+            * src/vteseq.c (vte_sequence_handler_scroll_down),
+            (vte_sequence_handler_scroll_up):
+            Implement these calling vte_terminal_scroll() directly instead of
+            multiple'ing.
+    
+    
+    svn path=/trunk/; revision=2245
+
+ ChangeLog         |  8 ++++++++
+ src/vteseq-list.h |  2 --
+ src/vteseq.c      | 48 ++++++++++++++++++++++++------------------------
+ 3 files changed, 32 insertions(+), 26 deletions(-)
+
+commit fbcaf9548ae6453387c9708a832844a47b7e1460
+Author: Behdad Esfahbod 
+Date:   2008-12-01 02:55:00 +0000
+
+    Move vte_terminal_scroll to vte.c
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/vte-private.h:
+            * src/vte.c (_vte_terminal_scroll), (_vte_terminal_scroll_region):
+            * src/vteseq.c (vte_sequence_handler_scroll_down_one),
+            (vte_sequence_handler_scroll_up_one):
+            Move vte_terminal_scroll to vte.c
+    
+    
+    svn path=/trunk/; revision=2244
+
+ ChangeLog         |   8 ++++
+ src/vte-private.h |   2 +
+ src/vte.c         |  57 ++++++++++++++++++++++++++-
+ src/vteseq.c      | 112 ++++++++++++++++++------------------------------------
+ 4 files changed, 101 insertions(+), 78 deletions(-)
+
+commit e37545fbe4c3a5bce280f4f7c34d38721a6bc2da
+Author: Behdad Esfahbod 
+Date:   2008-12-01 02:41:21 +0000
+
+    Remove vte_sequence_handler_complain_key. The idea was to warn about
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/vteseq-2.c (vteseq_2_hash), (vteseq_2_lookup):
+            * src/vteseq-2.gperf:
+            * src/vteseq-list.h:
+            * src/vteseq.c:
+            Remove vte_sequence_handler_complain_key.  The idea was to warn about
+            receiving control-sequence handling request for escape sequences that
+            actually belong to a key stroke.  Kinda like a debugging feature.
+            Remove it as the number of sequences being handle that way was
+            greater than the number of sequences handled in the real sense.
+            Saves 2k .data!
+    
+            The actual list is still in vteseq-2.gperf, but commented out.
+    
+    
+    svn path=/trunk/; revision=2243
+
+ ChangeLog          |  15 ++
+ src/vteseq-2.c     | 646 ++++++++++++++---------------------------------------
+ src/vteseq-2.gperf | 294 ++++++++++++------------
+ src/vteseq-list.h  |   1 -
+ src/vteseq.c       |  12 -
+ 5 files changed, 329 insertions(+), 639 deletions(-)
+
+commit 6a534d02447dd51e95d3591df7527cdf74ff440e
+Author: Behdad Esfahbod 
+Date:   2008-12-01 02:29:33 +0000
+
+    Remove stale comment.
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/vteseq.c (_vte_sequence_get_handler),
+            (display_control_sequence):
+            Remove stale comment.
+    
+    
+    svn path=/trunk/; revision=2242
+
+ ChangeLog    |  6 ++++++
+ src/vteseq.c | 11 ++++-------
+ 2 files changed, 10 insertions(+), 7 deletions(-)
+
+commit 755b1c1fd5d957eca61a8f71f71594a3b400b329
+Author: Behdad Esfahbod 
+Date:   2008-12-01 02:20:33 +0000
+
+    Move _vte_terminal_handle_sequence() into vteseq.c
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/Makefile.am:
+            * src/vte-private.h:
+            * src/vte.c (vte_terminal_process_incoming):
+            * src/vteseq.c (display_control_sequence),
+            (_vte_terminal_handle_sequence):
+            * src/vteseq.h:
+            Move _vte_terminal_handle_sequence() into vteseq.c
+    
+    
+    svn path=/trunk/; revision=2241
+
+ ChangeLog         | 10 ++++++++
+ src/Makefile.am   |  1 -
+ src/vte-private.h |  6 +++++
+ src/vte.c         | 75 +++---------------------------------------------------
+ src/vteseq.c      | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ src/vteseq.h      | 35 -------------------------
+ 6 files changed, 94 insertions(+), 109 deletions(-)
+
+commit f269a1c7d84590f8eb96e6ca2bccc6d87c12d88f
+Author: Behdad Esfahbod 
+Date:   2008-12-01 02:12:05 +0000
+
+    Some code reshuffling to remove vte.c calls to vteseq.c functions.
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/vte-private.h:
+            * src/vte.c (vte_insert_line_internal), (vte_remove_line_internal),
+            (_vte_terminal_cursor_down), (_vte_terminal_insert_char),
+            (_vte_terminal_audible_beep), (_vte_terminal_visible_beep),
+            (_vte_terminal_beep), (vte_terminal_key_press):
+            * src/vteseq.c (vte_insert_line_internal),
+            (vte_remove_line_internal), (vte_unichar_strlen),
+            (vte_sequence_handler_bl), (vte_sequence_handler_sf),
+            (vte_sequence_handler_SF), (vte_sequence_handler_vb):
+            * src/vteseq.h:
+            Some code reshuffling to remove vte.c calls to vteseq.c functions.
+    
+    
+    svn path=/trunk/; revision=2240
+
+ ChangeLog         |  14 ++++
+ src/vte-private.h |   4 +
+ src/vte.c         | 186 ++++++++++++++++++++++++++++++++++++++++--
+ src/vteseq.c      | 239 +++++++++++++-----------------------------------------
+ src/vteseq.h      |   4 -
+ 5 files changed, 256 insertions(+), 191 deletions(-)
+
+commit 8db1bf0479bf7c96c2dc5db4e36f4bd2440688c7
+Author: Behdad Esfahbod 
+Date:   2008-12-01 01:17:30 +0000
+
+    Minor.
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/vteseq-2.gperf:
+            * src/vteseq.c:
+            Minor.
+    
+    
+    svn path=/trunk/; revision=2239
+
+ ChangeLog          | 6 ++++++
+ src/vteseq-2.gperf | 2 +-
+ src/vteseq.c       | 1 -
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+commit ce7f40755cdccce5f996d06d9f8c101703019e54
+Author: Behdad Esfahbod 
+Date:   2008-12-01 01:13:00 +0000
+
+    Move helper function out of the way.
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/vteseq.c (vte_terminal_beep): Move helper function out of the
+            way.
+    
+    
+    svn path=/trunk/; revision=2238
+
+ ChangeLog    |  5 +++++
+ src/vteseq.c | 21 +++++++++++----------
+ 2 files changed, 16 insertions(+), 10 deletions(-)
+
+commit 4afa82b2b88abbee75762b05fb7ba5cc5729ac82
+Author: Behdad Esfahbod 
+Date:   2008-12-01 01:00:18 +0000
+
+    Add a macro around sequence handler citations, for future table tricks.
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/vteseq-2.c (vteseq_2_lookup):
+            * src/vteseq-2.gperf:
+            * src/vteseq-n.c (vteseq_n_lookup):
+            * src/vteseq-n.gperf:
+            * src/vteseq.c:
+            Add a macro around sequence handler citations, for future table
+            tricks.
+    
+    
+    svn path=/trunk/; revision=2237
+
+ ChangeLog          |  10 +
+ src/vteseq-2.c     | 442 +++++++++++++++++++++----------------------
+ src/vteseq-2.gperf | 544 ++++++++++++++++++++++++++---------------------------
+ src/vteseq-n.c     | 118 ++++++------
+ src/vteseq-n.gperf | 216 ++++++++++-----------
+ src/vteseq.c       |   5 +
+ 6 files changed, 675 insertions(+), 660 deletions(-)
+
+commit 20fe411a83c4cd3b1ae3f397324e0e016c0640e6
+Author: Behdad Esfahbod 
+Date:   2008-12-01 00:46:40 +0000
+
+    Remove bogus entry that accidentally made it into the gperf list.
+    
+    2008-11-30  Behdad Esfahbod  
+    
+            * src/vteseq-n.gperf:
+            * src/vteseq-n.c (vteseq_n_hash), (vteseq_n_lookup):
+            Remove bogus entry that accidentally made it into the gperf list.
+    
+    
+    svn path=/trunk/; revision=2236
+
+ ChangeLog          |   6 ++
+ src/vteseq-n.c     | 205 ++++++++++++++++++++++++++---------------------------
+ src/vteseq-n.gperf |   1 -
+ 3 files changed, 107 insertions(+), 105 deletions(-)
+
+commit 01ffbb3a2ad5c4d1ceee5669d5854415b56bf1fe
+Author: Christian Persch 
+Date:   2008-11-30 19:21:50 +0000
+
+    Remove more crufty macros.
+    
+            * acinclude.m4: Remove more crufty macros.
+    
+    svn path=/trunk/; revision=2235
+
+ ChangeLog    |  4 ++++
+ acinclude.m4 | 31 -------------------------------
+ 2 files changed, 4 insertions(+), 31 deletions(-)
+
+commit 539509a2ed5406ba4d0f8766624d0f319d0ed474
+Author: Christian Persch 
+Date:   2008-11-30 19:21:43 +0000
+
+    Remove FT2 check macro.
+    
+            * acinclude.m4: Remove FT2 check macro.
+    
+    svn path=/trunk/; revision=2234
+
+ ChangeLog    |   4 ++
+ acinclude.m4 | 145 -----------------------------------------------------------
+ 2 files changed, 4 insertions(+), 145 deletions(-)
+
+commit 7b72a1025293c3314e83771bda33a5a0248724be
+Author: Christian Persch 
+Date:   2008-11-29 23:56:11 +0000
+
+            Bug 540951 – The gnome-pty-helper is spawn when its not needed
+    
+            * src/pty.c: (_vte_pty_open): Don't use the pty helper when we don't
+            need to update any of utmp, wtmp, lastlog. Patch by Alex Cornejo.
+    
+    svn path=/trunk/; revision=2233
+
+ ChangeLog | 7 +++++++
+ src/pty.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit cc94f01446cd7ff176b1511c87e752cc62f13ef1
+Author: Christian Persch 
+Date:   2008-11-29 23:51:44 +0000
+
+            Bug 465036 – gnome-pty-helper locks /var/run/utmp
+    
+            * gnome-pty-helper/gnome-utmp.c: (update_utmp): Close the utmp
+            database after updating it. Patch by Kevin W. Rudd.
+    
+    svn path=/trunk/; revision=2232
+
+ ChangeLog                     | 7 +++++++
+ gnome-pty-helper/gnome-utmp.c | 2 ++
+ 2 files changed, 9 insertions(+)
+
+commit 0783cdf5b52c0938cf14da2ac2c1603167500c5d
+Author: Behdad Esfahbod 
+Date:   2008-11-29 21:57:54 +0000
+
+    Bug 127870 – terminal garbled and needs 'reset' after cat'ing file
+    
+    2008-11-29  Behdad Esfahbod  
+    
+            Bug 127870 – terminal garbled and needs 'reset' after cat'ing file
+    
+            * src/iso2022.c (_vte_iso2022_state_new): Initialize all four maps
+            (G0, G1, G2, G3) in USASCII mode, like xterm does.
+    
+    
+    svn path=/trunk/; revision=2231
+
+ ChangeLog     | 7 +++++++
+ src/iso2022.c | 6 +++---
+ 2 files changed, 10 insertions(+), 3 deletions(-)
+
+commit 32ff14161b0e901ec514caba90a03271869a558e
+Author: Christian Persch 
+Date:   2008-11-29 21:56:32 +0000
+
+    Register the constants too!
+    
+            * python/vtemodule.c: (initvte): Register the constants too!
+    
+    svn path=/trunk/; revision=2230
+
+ ChangeLog          | 4 ++++
+ python/vtemodule.c | 2 ++
+ 2 files changed, 6 insertions(+)
+
+commit 4a60f3edb689ccfb49f2bae5b9142a10f9dd1ed8
+Author: Christian Persch 
+Date:   2008-11-29 17:52:12 +0000
+
+    Add a specific debug flag for widget size-request/size-allocation.
+    
+            * src/debug.c: (_vte_debug_init):
+            * src/debug.h:
+            * src/vte.c: (vte_terminal_size_request),
+            (vte_terminal_size_allocate): Add a specific debug flag for widget
+            size-request/size-allocation.
+    
+    svn path=/trunk/; revision=2229
+
+ ChangeLog   |  8 ++++++++
+ src/debug.c |  3 ++-
+ src/debug.h |  3 ++-
+ src/vte.c   | 10 ++++++----
+ 4 files changed, 18 insertions(+), 6 deletions(-)
+
+commit b86d5a75d7e8f9c3d4f58e81e2b16f8b33ef00ef
+Author: Christian Persch 
+Date:   2008-11-29 17:52:07 +0000
+
+    Add options to use a GtkScrolledWindow as the terminal's container, and to
+    
+            * src/vteapp.c: (main): Add options to use a GtkScrolledWindow as the
+            terminal's container, and to set its vertical scrollbar policy, to
+            allow testing VteTerminal in a scrolled window.
+    
+    svn path=/trunk/; revision=2228
+
+ ChangeLog    |  6 ++++++
+ src/vteapp.c | 49 ++++++++++++++++++++++++++++++++++++++-----------
+ 2 files changed, 44 insertions(+), 11 deletions(-)
+
+commit 712c3c28992254af5062b70bca836be73a177821
+Author: Behdad Esfahbod 
+Date:   2008-11-29 10:02:38 +0000
+
+    Bug 317236 – vte resynchrones too late on invalid UTF-8
+    
+    2008-11-29  Behdad Esfahbod  
+    
+            Bug 317236 – vte resynchrones too late on invalid UTF-8
+    
+            * src/vteconv.c (_vte_conv_utf8_utf8): In our UTF-8 to UTF-8 converter
+            differentiate between an incomplete sequence and an ill sequence at
+            the end of the buffer.  Also cleanup some minor inaccuracies (return
+            value).
+    
+    
+    svn path=/trunk/; revision=2227
+
+ ChangeLog     |  9 +++++++++
+ src/vteconv.c | 39 +++++++++++++++++++++++++++++----------
+ 2 files changed, 38 insertions(+), 10 deletions(-)
+
+commit 8e8429cb020dc23b8a87986a2e777eeaf01a5e90
+Author: Behdad Esfahbod 
+Date:   2008-11-29 07:56:50 +0000
+
+    Bug 107031 – device-control-string error
+    
+    2008-11-29  Behdad Esfahbod  
+    
+            Bug 107031 – device-control-string error
+    
+            * src/table.c (_vte_table_addi):
+            * src/vte.c (vte_terminal_handle_sequence):
+            * src/vteseq.c (vte_sequence_handler_decset_internal):
+            Replace some g_warning's with vte debug output.
+    
+    
+    svn path=/trunk/; revision=2226
+
+ ChangeLog    |  9 +++++++++
+ src/table.c  | 10 +++++-----
+ src/vte.c    | 15 +++------------
+ src/vteseq.c |  9 +++++----
+ 4 files changed, 22 insertions(+), 21 deletions(-)
+
+commit a00ed363b50864ffaa86c9e7a110b7c30ba3e0d4
+Author: Behdad Esfahbod 
+Date:   2008-11-29 07:26:12 +0000
+
+    Bug 521420 – vte closes connection to child before all output is read
+    
+    2008-11-29  Behdad Esfahbod  
+    
+            Bug 521420 – vte closes connection to child before all output is read
+            Patch from Thomas Leonard
+    
+            * src/reaper.c (vte_reaper_add_child): Install child watch at low
+            priority instead of high.
+    
+    
+    svn path=/trunk/; revision=2225
+
+ ChangeLog    | 8 ++++++++
+ src/reaper.c | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit 13fb9b34c9436385baa485a41649145af38e62c8
+Author: Behdad Esfahbod 
+Date:   2008-11-29 06:44:31 +0000
+
+    Require glib >= 2.18.0 as earlier glib versions had a totally bogus
+    
+    2008-11-29  Behdad Esfahbod  
+    
+            * configure.in: Require glib >= 2.18.0 as earlier glib versions
+            had a totally bogus g_unichar_iswide_cjk().
+    
+            * perf/vim.sh: Don't use builting time command.
+    
+    
+    svn path=/trunk/; revision=2224
+
+ ChangeLog    | 7 +++++++
+ configure.in | 2 +-
+ perf/vim.sh  | 6 +++---
+ 3 files changed, 11 insertions(+), 4 deletions(-)
+
+commit c1acc9206329acd8ddf7bc6eb63e0f90ce9864d8
+Author: Behdad Esfahbod 
+Date:   2008-11-29 06:10:18 +0000
+
+    Remove C++-style comment markers.
+    
+    2008-11-29  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_emit_char_size_changed),
+            (_vte_terminal_emit_status_line_changed), (vte_terminal_init),
+            (vte_terminal_background_update):
+            Remove C++-style comment markers.
+    
+    
+    svn path=/trunk/; revision=2223
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 8 ++++----
+ 2 files changed, 11 insertions(+), 4 deletions(-)
+
+commit 8894e5764a8e27e87be8a965851113bb02052e7a
+Author: Behdad Esfahbod 
+Date:   2008-11-29 06:00:17 +0000
+
+    Bug 514632 – Problem with cursor in emacs in gnome-terminal
+    
+    2008-11-29  Behdad Esfahbod  
+    
+            Bug 514632 – Problem with cursor in emacs in gnome-terminal
+    
+            * src/vte-private.h:
+            * src/vte.c (_vte_terminal_cleanup_tab_fragments_at_cursor),
+            (_vte_terminal_insert_char):
+            * src/vteseq.c (vte_sequence_handler_ch),
+            (vte_sequence_handler_cm), (vte_sequence_handler_le),
+            (vte_sequence_handler_cursor_character_absolute):
+            Break "smart tabs" into multiple empty cells when cursor moves
+            into them or inserting character there.
+    
+    
+    svn path=/trunk/; revision=2222
+
+ ChangeLog         | 13 +++++++++++
+ src/vte-private.h |  1 +
+ src/vte.c         | 70 +++++++++++++++++++++++++++++++++++++++++++++++++------
+ src/vteseq.c      |  4 ++++
+ 4 files changed, 81 insertions(+), 7 deletions(-)
+
+commit 37472ef4f34e658a29bb6d99c0b0115da85e017f
+Author: Behdad Esfahbod 
+Date:   2008-11-29 00:41:18 +0000
+
+    Port vtepangocairo profiling and lifecycle logging to vtedebug facilities
+    
+    2008-11-28  Behdad Esfahbod  
+    
+            * src/debug.c (_vte_debug_init):
+            * src/debug.h:
+            * src/vtepangocairo.c (font_info_cache_ascii),
+            (font_info_allocate), (font_info_free),
+            (font_info_find_for_context), (font_info_get_unichar_info):
+            Port vtepangocairo profiling and lifecycle logging to vtedebug
+            facilities under debug domain "pangocairo".
+    
+    
+    svn path=/trunk/; revision=2221
+
+ ChangeLog           | 10 ++++++++++
+ src/debug.c         |  3 ++-
+ src/debug.h         |  3 ++-
+ src/vtepangocairo.c | 50 ++++++++++++++++++++++++--------------------------
+ 4 files changed, 38 insertions(+), 28 deletions(-)
+
+commit f4689385a0d7da2ddb3537f41795ec493ed668f7
+Author: Behdad Esfahbod 
+Date:   2008-11-29 00:22:53 +0000
+
+    Rename debug env var from VTE_DEBUG_FLAGS to VTE_DEBUG.
+    
+    2008-11-28  Behdad Esfahbod  
+    
+            * src/debug.c (_vte_debug_init): Rename debug env var from
+            VTE_DEBUG_FLAGS to VTE_DEBUG.
+    
+    
+    svn path=/trunk/; revision=2220
+
+ ChangeLog   | 5 +++++
+ src/debug.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 990fda3c3d29381568f8463b4349554031975d57
+Author: Behdad Esfahbod 
+Date:   2008-11-29 00:21:56 +0000
+
+    Make _vte_debug_on() inline.
+    
+    2008-11-28  Behdad Esfahbod  
+    
+            * src/debug.c (_vte_debug_init):
+            * src/debug.h:
+            Make _vte_debug_on() inline.
+    
+    
+    svn path=/trunk/; revision=2219
+
+ ChangeLog   |  6 ++++++
+ src/debug.c |  8 +-------
+ src/debug.h | 10 +++++++++-
+ 3 files changed, 16 insertions(+), 8 deletions(-)
+
+commit 1ec198d4341adf8745d698cfe3d57bd787052740
+Author: Christian Persch 
+Date:   2008-11-28 22:43:34 +0000
+
+    Remove backward compat define for gtk 2.0, since we already depend on a
+    
+            * src/vte.c: Remove backward compat define for gtk 2.0, since we
+            already depend on a much higher version.
+    
+    svn path=/trunk/; revision=2218
+
+ ChangeLog | 5 +++++
+ src/vte.c | 4 ----
+ 2 files changed, 5 insertions(+), 4 deletions(-)
+
+commit d1c8da13e65ddc67f93974c896d5061597062d72
+Author: Christian Persch 
+Date:   2008-11-28 22:32:21 +0000
+
+    Revert behaviour change of _vte_debug_on() from last commit.
+    
+            * src/debug.c: (_vte_debug_on): Revert behaviour change of
+            _vte_debug_on() from last commit.
+    
+    svn path=/trunk/; revision=2217
+
+ ChangeLog   | 5 +++++
+ src/debug.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 3fb52fb85c6ab494ce2e54de9733cd98cd5bf21e
+Author: Christian Persch 
+Date:   2008-11-28 22:24:09 +0000
+
+    Use g_parse_debug_string to parse the debug flags.
+    
+            * src/debug.c: (_vte_debug_init), (_vte_debug_on):
+            * src/debug.h:
+            * src/interpret.c: (main):
+            * src/pty.c: (main):
+            * src/reaper.c: (main):
+            * src/trie.c: (main):
+            * src/vte.c: (vte_terminal_new), (vte_terminal_class_init): Use
+            g_parse_debug_string to parse the debug flags.
+    
+    svn path=/trunk/; revision=2216
+
+ ChangeLog       |  11 ++++++
+ src/debug.c     | 107 +++++++++++++++++---------------------------------------
+ src/debug.h     |   2 +-
+ src/interpret.c |   2 +-
+ src/pty.c       |   2 +-
+ src/reaper.c    |   2 +-
+ src/trie.c      |   2 +-
+ src/vte.c       |  11 ++----
+ 8 files changed, 50 insertions(+), 89 deletions(-)
+
+commit 74a67f5d8703275b52c9b91deae2dbe0e4c49087
+Author: Behdad Esfahbod 
+Date:   2008-11-28 17:54:26 +0000
+
+    Bug 459553 – gnome-terminal cannot shows circled digits with the correct
+    
+    2008-11-28  Behdad Esfahbod  
+    
+            Bug 459553 – gnome-terminal cannot shows circled digits with the
+            correct width on ja_JP.PCK
+            Patch from Takao Fujiwara
+    
+            * src/iso2022.c (_vte_iso2022_ambiguous_width): Recognize Shift_JIS
+            as East Asian locale for width considerations.
+    
+    
+    svn path=/trunk/; revision=2215
+
+ ChangeLog     | 13 +++++++++++--
+ src/iso2022.c |  1 +
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+commit f6905bcef2fb212fdaa935f19c50c9cd0ba45054
+Author: Christian Persch 
+Date:   2008-11-28 00:07:16 +0000
+
+    Remove the unused GNU regex code too.
+    
+            * src/vteregex.c: (compare_matches), (_vte_regex_compile),
+            (_vte_regex_free), (_vte_regex_exec): Remove the unused GNU regex
+            code too.
+    
+    svn path=/trunk/; revision=2214
+
+ ChangeLog      |  6 +++++
+ src/vteregex.c | 77 ++--------------------------------------------------------
+ 2 files changed, 8 insertions(+), 75 deletions(-)
+
+commit 08a58074ff6b0557c9294cec22041fbbf0acda61
+Author: Christian Persch 
+Date:   2008-11-28 00:04:11 +0000
+
+    Remove unused PCRE code. If you want PCRE regexes, use the new APIs that
+    
+            * src/vteregex.c: (_vte_regex_compile), (_vte_regex_free),
+            (_vte_regex_exec): Remove unused PCRE code. If you want PCRE regexes,
+            use the new APIs that take GRegex.
+    
+    svn path=/trunk/; revision=2213
+
+ ChangeLog      |  6 +++++
+ src/vteregex.c | 85 ++--------------------------------------------------------
+ 2 files changed, 8 insertions(+), 83 deletions(-)
+
+commit 4b98c5400e147699480a989b35f653dafcb9bbf3
+Author: Christian Persch 
+Date:   2008-11-27 23:57:10 +0000
+
+            Bug 562385 – gnome-pty-helper goes to 100% cpu usage
+    
+            * gnome-pty-helper/gnome-pty-helper.c: (pass_fd), (pty_free),
+            (main): Make sure data structures are correctly aligned and of the
+            right size.
+    
+    svn path=/trunk/; revision=2212
+
+ ChangeLog                           |  8 +++++++
+ gnome-pty-helper/gnome-pty-helper.c | 48 +++++++++++++------------------------
+ 2 files changed, 24 insertions(+), 32 deletions(-)
+
+commit 0d8a9152d5a4682b8ab92a758070e0524167c6cd
+Author: Behdad Esfahbod 
+Date:   2008-11-27 23:56:39 +0000
+
+    oops
+    
+    svn path=/trunk/; revision=2211
+
+ src/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 5c6e9df0a6be45683a902f9b11144d9c6fcbe9c0
+Author: Behdad Esfahbod 
+Date:   2008-11-27 23:54:21 +0000
+
+    More cleanup.
+    
+    2008-11-27  Behdad Esfahbod  
+    
+            * configure.in:
+            * src/Makefile.am:
+            More cleanup.
+    
+    
+    svn path=/trunk/; revision=2210
+
+ ChangeLog       |  6 +++++
+ configure.in    |  1 -
+ src/Makefile.am | 72 ++++++++++++++++++++++++++++++++-------------------------
+ 3 files changed, 46 insertions(+), 33 deletions(-)
+
+commit 9075be7d7a22fae78dd29abc3806b7046033bb23
+Author: Behdad Esfahbod 
+Date:   2008-11-27 23:41:26 +0000
+
+    Run some of the utilities in "make check", and build the others.
+    
+    2008-11-27  Behdad Esfahbod  
+    
+            * src/Makefile.am:
+            Run some of the utilities in "make check", and build the others.
+    
+            * src/nativeecho.c:
+            * src/utf8echo.c:
+            Remove more useless trivial utilities.
+    
+    
+    svn path=/trunk/; revision=2209
+
+ ChangeLog        |   9 +++++
+ src/Makefile.am  | 115 +++++++++++--------------------------------------------
+ src/nativeecho.c |  49 ------------------------
+ src/utf8echo.c   |  70 ---------------------------------
+ 4 files changed, 31 insertions(+), 212 deletions(-)
+
+commit e24ae22dcecda8fbb68aea4f59cd336ea30d1b44
+Author: Behdad Esfahbod 
+Date:   2008-11-27 23:10:04 +0000
+
+    Remove useless trivial utilities.
+    
+    2008-11-27  Behdad Esfahbod  
+    
+            * src/Makefile.am:
+            * src/iso8859mode.c:
+            * src/utf8mode.c:
+            Remove useless trivial utilities.
+    
+    
+    svn path=/trunk/; revision=2208
+
+ ChangeLog         |  7 +++++++
+ src/Makefile.am   |  2 +-
+ src/iso8859mode.c | 28 ----------------------------
+ src/utf8mode.c    | 28 ----------------------------
+ 4 files changed, 8 insertions(+), 57 deletions(-)
+
+commit 22e6626929c27043239b0e8df6d6f283fee05bd7
+Author: Behdad Esfahbod 
+Date:   2008-11-27 23:08:20 +0000
+
+    Update EXTRA_DIST.
+    
+    2008-11-27  Behdad Esfahbod  
+    
+            * src/Makefile.am: Update EXTRA_DIST.
+    
+    
+    svn path=/trunk/; revision=2207
+
+ ChangeLog       | 4 ++++
+ src/Makefile.am | 2 --
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+commit c6777d519b75e25dd0729347387c6ff98a085963
+Author: Behdad Esfahbod 
+Date:   2008-11-27 21:50:34 +0000
+
+    Update :P.
+    
+    2008-11-27  Behdad Esfahbod  
+    
+            * HACKING: Update :P.
+    
+    
+    svn path=/trunk/; revision=2206
+
+ ChangeLog | 4 ++++
+ HACKING   | 8 ++++----
+ 2 files changed, 8 insertions(+), 4 deletions(-)
+
+commit 2905d91df4eacc292ab78cb86f688930cfc9ee7b
+Author: Behdad Esfahbod 
+Date:   2008-11-26 20:57:48 +0000
+
+    Safely handle input of length 1.
+    
+    2008-11-26  Behdad Esfahbod  
+    
+            * src/vteseq.c (_vte_sequence_get_handler): Safely handle input of
+            length 1.
+    
+    
+    svn path=/trunk/; revision=2205
+
+ ChangeLog    | 5 +++++
+ src/vteseq.c | 9 ++++++---
+ 2 files changed, 11 insertions(+), 3 deletions(-)
+
+commit 7d4ac8661ea748304f07ed2f0fac388d343000d4
+Author: Behdad Esfahbod 
+Date:   2008-11-26 20:38:33 +0000
+
+    Don't use switch in gperf-generated code. This increases .data by 1k but
+    
+    2008-11-26  Behdad Esfahbod  
+    
+            * src/Makefile.am:
+            * src/vteseq-2.c (vteseq_2_hash), (vteseq_2_lookup):
+            * src/vteseq-2.gperf:
+            * src/vteseq-n.c (vteseq_n_lookup):
+            * src/vteseq-n.gperf:
+            Don't use switch in gperf-generated code.  This increases .data by 1k
+            but decreases .text by 6k AND the lookup code is MUCH faster.  It used
+            to do tens of compares before.
+    
+    
+    svn path=/trunk/; revision=2204
+
+ ChangeLog          |   11 +
+ src/Makefile.am    |    2 +-
+ src/vteseq-2.c     | 1649 ++++++++++++++++------------------------------------
+ src/vteseq-2.gperf |    1 -
+ src/vteseq-n.c     |  822 ++++++--------------------
+ src/vteseq-n.gperf |    1 -
+ 6 files changed, 687 insertions(+), 1799 deletions(-)
+
+commit 561d5d623dc9fee74e9d6c26dd81263dfd2acb7a
+Author: Behdad Esfahbod 
+Date:   2008-11-26 20:03:30 +0000
+
+    Revert previous commit, fix NULL dereference that it was trying to fix,
+    
+    2008-11-26  Behdad Esfahbod  
+    
+            * src/Makefile.am:
+            * src/vteseq-2.c (vteseq_2_hash), (vteseq_2_lookup):
+            * src/vteseq-n.c (vteseq_n_lookup):
+            * src/vteseq.c (_vte_sequence_get_handler):
+            Revert previous commit, fix NULL dereference that it was trying to
+            fix, and make lookup functions inline.
+    
+    
+    svn path=/trunk/; revision=2203
+
+ ChangeLog       |  9 +++++++++
+ src/Makefile.am |  5 -----
+ src/vteseq-2.c  | 19 +++++++++++--------
+ src/vteseq-n.c  |  6 +++---
+ src/vteseq.c    | 19 +++++++++++++++----
+ 5 files changed, 38 insertions(+), 20 deletions(-)
+
+commit 299b73bb3667402eb63e21659084ee427d56a95e
+Author: Chris Wilson 
+Date:   2008-11-26 19:36:46 +0000
+
+    Manually modify (and record those modifications in the Makefile) the
+    
+    2008-11-26  Chris Wilson  
+    
+            * src/Makefile.am:
+            * src/vteseq-2.c (vteseq_2_hash), (vteseq_2_lookup):
+            * src/vteseq-n.c (vteseq_n_lookup):
+            * src/vteseq.c (_vte_sequence_get_handler):
+            Manually modify (and record those modifications in the Makefile)
+            the autogenerated gperf source code so that we return the sequence
+            handler directly from the lookup function, or NULL on failure.
+            So is this pain worth it?
+    
+    
+    svn path=/trunk/; revision=2202
+
+ ChangeLog       | 11 +++++++++++
+ src/Makefile.am |  4 ++++
+ src/vteseq-2.c  | 17 +++++++----------
+ src/vteseq-n.c  |  4 ++--
+ src/vteseq.c    | 15 ++-------------
+ 5 files changed, 26 insertions(+), 25 deletions(-)
+
+commit 129aa802e5be2d1c3aea58c79fe247c67a2e186f
+Author: Behdad Esfahbod 
+Date:   2008-11-26 19:27:07 +0000
+
+    Free internal layout resources.
+    
+    2008-11-26  Behdad Esfahbod  
+    
+            * src/vtepangocairo.c (font_info_get_unichar_info):
+            Free internal layout resources.
+    
+    
+    svn path=/trunk/; revision=2201
+
+ ChangeLog           | 5 +++++
+ src/vtepangocairo.c | 3 +++
+ 2 files changed, 8 insertions(+)
+
+commit 06107289280f77027c696193bf8698d0d550c438
+Author: Behdad Esfahbod 
+Date:   2008-11-26 19:12:56 +0000
+
+    Update boilerplate
+    
+    svn path=/trunk/; revision=2200
+
+ doc/reference/tmpl/vte-unused.sgml | 6 ++++++
+ doc/reference/tmpl/vte.sgml        | 5 -----
+ 2 files changed, 6 insertions(+), 5 deletions(-)
+
+commit 50c7a0ea9f503f1861732adc03a1f6dc15ae2b00
+Author: Behdad Esfahbod 
+Date:   2008-11-26 19:12:30 +0000
+
+    Bug 562332 – cleanup font infos on exit?
+    
+    2008-11-26  Behdad Esfahbod  
+    
+            Bug 562332 – cleanup font infos on exit?
+    
+            * src/vtepangocairo.c
+            (cleanup_delayed_font_info_destroys_predicate),
+            (cleanup_delayed_font_info_destroys), (ensure_quit_handler),
+            (font_info_register), (font_info_reference),
+            (font_info_destroy_delayed), (font_info_destroy):
+            Use gtk_quit_add() to complete delayed font_info destroys.
+    
+    
+    svn path=/trunk/; revision=2199
+
+ ChangeLog           |  11 +++++
+ src/vtepangocairo.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 143 insertions(+), 3 deletions(-)
+
+commit 3ae4dce903ef23687b3e8168decb546dbdaff69f
+Author: Christian Persch 
+Date:   2008-11-26 19:00:33 +0000
+
+            Bug 562338 – don't need to connect to bunch of xft settings
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_style_changed), (add_cursor_timeout),
+            (vte_terminal_init), (vte_terminal_size_allocate),
+            (vte_terminal_finalize), (vte_terminal_realize): Don't listen to
+            changes on the gtk-xft-* GtkSettings properties. Just calling
+            vte_terminal_set_font_full in the style-set handler works fine.
+    
+    svn path=/trunk/; revision=2198
+
+ ChangeLog         |  11 ++++++
+ src/vte-private.h |   1 -
+ src/vte.c         | 103 ++++++++----------------------------------------------
+ 3 files changed, 26 insertions(+), 89 deletions(-)
+
+commit 6874137db74ca9a2565be25a3273c9be98d5fb89
+Author: Christian Persch 
+Date:   2008-11-26 15:26:40 +0000
+
+            Bug 488960 – gnome-terminal on Solaris 10 does not clean up utmpx on
+            exit (intermittent)
+    
+            * gnome-pty-helper/gnome-pty-helper.c: (main):
+            * gnome-pty-helper/gnome-pty.h:
+            * src/pty.c: (_vte_pty_close): Add new GNOME_PTY_SYNCH operation to
+            gnome-pty-helper. Patch from Behdad.
+    
+    svn path=/trunk/; revision=2197
+
+ ChangeLog                           | 10 ++++++++++
+ gnome-pty-helper/gnome-pty-helper.c |  7 +++++++
+ gnome-pty-helper/gnome-pty.h        |  3 ++-
+ src/pty.c                           | 11 ++++++++++-
+ 4 files changed, 29 insertions(+), 2 deletions(-)
+
+commit 07817dfbc1e4662bbdf20fd93daaca8f1b07eba3
+Author: Christian Persch 
+Date:   2008-11-26 14:39:22 +0000
+
+    Add vte_terminal_set_font_*full_internal so we don't use deprecated
+    
+            * src/vte.c: (vte_terminal_style_changed),
+            (vte_terminal_ensure_font), (vte_terminal_set_font_full),
+            (vte_terminal_set_font_from_string_full_internal),
+            (vte_terminal_set_font_from_string_full),
+            (vte_terminal_reset_rowdata), (vte_terminal_set_property): Add
+            vte_terminal_set_font_*full_internal so we don't use deprecated
+            symbols internally.
+    
+    svn path=/trunk/; revision=2196
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 61 ++++++++++++++++++++++++++++++++++++++-----------------------
+ 2 files changed, 48 insertions(+), 23 deletions(-)
+
+commit 8be1dbc19e6f461050ae3d03410f291faffdea7b
+Author: Christian Persch 
+Date:   2008-11-26 13:43:26 +0000
+
+    Remove gtk 2.12 version checks, since we already depend on 2.12.
+    
+            * src/vte.c: (vte_terminal_sync_settings),
+            (vte_terminal_screen_changed): Remove gtk 2.12 version checks, since
+            we already depend on 2.12.
+    
+    svn path=/trunk/; revision=2195
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 4 ----
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+commit 2fa93a79f2624c4ae0fe1b25f00c102744048e24
+Author: Christian Persch 
+Date:   2008-11-26 13:43:20 +0000
+
+            Bug 561366 – remove antialias setting for 1.0
+    
+            * src/vte.c: (vte_terminal_set_font_full),
+            (vte_terminal_get_property), (vte_terminal_class_init):
+            * src/vte.h: Deprecate the font antialias setting, and remove the
+            (existing only on trunk) font-antialias property already.
+    
+    svn path=/trunk/; revision=2194
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 24 ++++--------------------
+ src/vte.h | 26 +++++++++++++-------------
+ 3 files changed, 26 insertions(+), 33 deletions(-)
+
+commit 7730c13edd2c69cbd58125a088db74706d351f25
+Author: Behdad Esfahbod 
+Date:   2008-11-25 23:56:04 +0000
+
+    Cleanup gperf stuff.
+    
+    2008-11-25  Behdad Esfahbod  
+    
+            * src/Makefile.am:
+            * src/vteseq-2.c (vteseq_2_hash), (vteseq_2_lookup):
+            * src/vteseq-2.gperf:
+            * src/vteseq-n.c (vteseq_n_hash), (vteseq_n_lookup):
+            * src/vteseq-n.gperf:
+            * src/vteseq.c (_vte_sequence_get_handler):
+            Cleanup gperf stuff.
+    
+    
+    svn path=/trunk/; revision=2193
+
+ ChangeLog          |  10 +
+ src/Makefile.am    |   4 +-
+ src/vteseq-2.c     | 915 +++++++++++++++++++++++++++--------------------------
+ src/vteseq-2.gperf |  19 +-
+ src/vteseq-n.c     | 399 +++++++++++------------
+ src/vteseq-n.gperf |  21 +-
+ src/vteseq.c       |  14 +-
+ 7 files changed, 722 insertions(+), 660 deletions(-)
+
+commit 4fea39c855890b9c6fc4336a32e56002179c5a76
+Author: Behdad Esfahbod 
+Date:   2008-11-24 22:33:29 +0000
+
+    Bug 562187 – Add make rules for calling gperf
+    
+    2008-11-24  Behdad Esfahbod  
+    
+            Bug 562187 – Add make rules for calling gperf
+    
+            * src/Makefile.am: Add a "gperf" target to be run manually.
+    
+            * src/vteseq-2.gperf:
+            * src/vteseq-n.gperf:
+            Add comment about "make gperf".
+    
+            * src/vteseq-2.c:
+            * src/vteseq-n.c:
+            Regenerate using newer gperf.
+    
+    
+    svn path=/trunk/; revision=2192
+
+ ChangeLog          |   14 +
+ src/Makefile.am    |    9 +-
+ src/vteseq-2.c     | 2322 ++++++++++++++++++++++++++--------------------------
+ src/vteseq-2.gperf |    1 +
+ src/vteseq-n.c     |  264 +++---
+ src/vteseq-n.gperf |    1 +
+ 6 files changed, 1320 insertions(+), 1291 deletions(-)
+
+commit 7feb9738d0af67fb7886543962635767e70cdc6a
+Author: Behdad Esfahbod 
+Date:   2008-11-24 22:22:05 +0000
+
+    Bug 416518 – Do something about uniwidths
+    
+    2008-11-24  Behdad Esfahbod  
+    
+            Bug 416518 – Do something about uniwidths
+    
+            * src/iso2022.c (_vte_iso2022_is_ambiguous):
+            Call into glib to determine ambiguous-width chars.
+    
+            * src/genwidths.py:
+            * src/uniwidths:
+            Remove.
+    
+    
+    svn path=/trunk/; revision=2191
+
+ ChangeLog        |  11 +
+ src/genwidths.py |  35 ---
+ src/iso2022.c    |  41 +--
+ src/uniwidths    | 820 -------------------------------------------------------
+ 4 files changed, 16 insertions(+), 891 deletions(-)
+
+commit 557b2633fccfdcbf2cb60645c45c638cfce149de
+Author: Behdad Esfahbod 
+Date:   2008-11-24 22:06:32 +0000
+
+    Bug 500191 – Remove vteseq-table.h?
+    
+    2008-11-24  Behdad Esfahbod  
+    
+            Bug 500191 – Remove vteseq-table.h?
+    
+            * src/Makefile.am:
+            * src/vteseq-gen.c:
+            * src/vteseq-table.h:
+            Remove the old table implementation.  We use gperf-generated tables
+            now.
+    
+    
+    svn path=/trunk/; revision=2190
+
+ ChangeLog          |  10 ++
+ src/Makefile.am    |   5 -
+ src/vteseq-gen.c   | 507 -----------------------------------------------------
+ src/vteseq-table.h | 388 ----------------------------------------
+ 4 files changed, 10 insertions(+), 900 deletions(-)
+
+commit 1564e45be8a51f2e30e7d110651b35d8783cc057
+Author: Behdad Esfahbod 
+Date:   2008-11-24 18:56:44 +0000
+
+    Bug 514457 – Use g_strv_length()
+    
+    2008-11-24  Behdad Esfahbod  
+    
+            Bug 514457 – Use g_strv_length()
+    
+            * src/vte.c (_vte_terminal_fork_basic): Do it.
+    
+    
+    svn path=/trunk/; revision=2189
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 4 +---
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+commit 80a809c489d5937b878208b806379220966307a9
+Author: Behdad Esfahbod 
+Date:   2008-11-24 18:27:12 +0000
+
+    No need to check widget font desc here as vte.c does that for us already.
+    
+    2008-11-24  Behdad Esfahbod  
+    
+            * src/vtepangocairo.c (font_info_create_for_widget): No need to check
+            widget font desc here as vte.c does that for us already.
+    
+    
+    svn path=/trunk/; revision=2188
+
+ ChangeLog           | 5 +++++
+ src/vtepangocairo.c | 5 -----
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+commit 0ff5e8e971726b03e9d08c622e41d9fe740db809
+Author: Behdad Esfahbod 
+Date:   2008-11-24 18:19:53 +0000
+
+    Modify GTK_CHECK_VERSION handling to make my vim syntax highlighter happy.
+    
+    2008-11-24  Behdad Esfahbod  
+    
+            * src/vtepangocairo.c (font_info_destroy): Modify GTK_CHECK_VERSION
+            handling to make my vim syntax highlighter happy.
+    
+    
+    svn path=/trunk/; revision=2187
+
+ ChangeLog           |  5 +++++
+ src/vtepangocairo.c | 10 +++++-----
+ 2 files changed, 10 insertions(+), 5 deletions(-)
+
+commit add81f8b64b8704e786f5c880ee2f30f52e42367
+Author: Behdad Esfahbod 
+Date:   2008-11-24 02:31:38 +0000
+
+    Refactor duplicate code.
+    
+    2008-11-23  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_ensure_cursor): Refactor duplicate code.
+    
+    
+    svn path=/trunk/; revision=2186
+
+ ChangeLog |  4 ++++
+ src/vte.c | 26 +++-----------------------
+ 2 files changed, 7 insertions(+), 23 deletions(-)
+
+commit 0b3a9bf9e80de232f6538e9f9aa3a19d5e6efe31
+Author: Christian Persch 
+Date:   2008-11-22 18:27:02 +0000
+
+    Move all the deprecated stuff into one place.
+    
+            * src/vte.h: Move all the deprecated stuff into one place.
+    
+    svn path=/trunk/; revision=2185
+
+ ChangeLog |  4 ++++
+ src/vte.h | 33 ++++++++++++++-------------------
+ 2 files changed, 18 insertions(+), 19 deletions(-)
+
+commit d063b0de2185e6a24573ee10d4dee7e35a72e4ef
+Author: Christian Persch 
+Date:   2008-11-22 14:29:26 +0000
+
+            Bug 542561 – Doesn't build when disabling gnome-pty-helper
+    
+            * src/pty.c: Always include sys/socket.h. Patch by Loïc Minier.
+    
+    svn path=/trunk/; revision=2184
+
+ ChangeLog | 6 ++++++
+ src/pty.c | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit 14692b2586767bceced7d9f02ecb7d5d515ef454
+Author: Christian Persch 
+Date:   2008-11-22 14:16:43 +0000
+
+    Fix --blink; the flag is inverted.
+    
+    2008-11-22  Christian Persch  
+    
+            * src/vteapp.c: (main): Fix --blink; the flag is inverted.
+    
+    svn path=/trunk/; revision=2183
+
+ ChangeLog    | 4 ++++
+ src/vteapp.c | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit cd09f90f9fb0ef54bedba2ad0340f2ab534199ac
+Author: Christian Persch 
+Date:   2008-11-22 14:04:41 +0000
+
+    Use vte_terminal_set_cursor_blink_mode instead of the deprecated
+    
+            * src/vteapp.c: (main): Use vte_terminal_set_cursor_blink_mode instead
+            of the deprecated set_cursor_blinks here.
+    
+    svn path=/trunk/; revision=2182
+
+ ChangeLog    | 5 +++++
+ src/vteapp.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 02e5a9b6ddcd07ee3f937455441aa2d6a06468c4
+Author: Christian Persch 
+Date:   2008-11-22 14:01:03 +0000
+
+            Bug 560766 – Deprecate and remove vte_terminal_get_using_xft()
+    
+            * src/vte.c: (vte_terminal_get_using_xft):
+            * src/vte.h:
+            * src/vtedraw.c: (_vte_draw_text):
+            * src/vtedraw.h:
+            * src/vtepangocairo.c: Deprecate vte_terminal_get_using_xft() as preparation for
+            bug #560766. Remove the internal vtedraw method already.
+    
+    svn path=/trunk/; revision=2181
+
+ ChangeLog           | 11 +++++++++++
+ src/vte.c           |  9 +++++----
+ src/vte.h           |  4 +++-
+ src/vtedraw.c       | 11 -----------
+ src/vtedraw.h       |  2 --
+ src/vtepangocairo.c |  1 -
+ 6 files changed, 19 insertions(+), 19 deletions(-)
+
+commit 31d4e249f52354e0be687035ed190742a5d0f735
+Author: Christian Persch 
+Date:   2008-11-22 13:54:36 +0000
+
+            Bug 536894 – Confusing use of "free" as variable-name in ring
+            functions
+    
+            * src/ring.c: (_vte_ring_new), (_vte_ring_new_with_delta),
+            (_vte_ring_remove):
+            * src/ring.h: Don't shadow global declarations. Patch by dmacks at
+            netspace.org.
+    
+    svn path=/trunk/; revision=2180
+
+ ChangeLog  | 10 ++++++++++
+ src/ring.c | 14 +++++++-------
+ src/ring.h |  4 ++--
+ 3 files changed, 19 insertions(+), 9 deletions(-)
+
+commit cf56c6421f35f3908c4e9275f7c4bd83a3fad42b
+Author: Christian Persch 
+Date:   2008-11-22 13:46:03 +0000
+
+    Fix missing-prototypes warnings.
+    
+            * python/vte.override: Fix missing-prototypes warnings.
+    
+    svn path=/trunk/; revision=2179
+
+ ChangeLog           | 4 ++++
+ python/vte.override | 3 +++
+ 2 files changed, 7 insertions(+)
+
+commit 6324cace0ec03fab3f727996287cd5449f7ea89a
+Author: Christian Persch 
+Date:   2008-11-22 13:45:58 +0000
+
+    No need to include gi18n-lib.h here.
+    
+            * src/vtepangocairo.c: No need to include gi18n-lib.h here.
+    
+    svn path=/trunk/; revision=2178
+
+ ChangeLog           | 4 ++++
+ src/vtepangocairo.c | 1 -
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit 7ff4e01ebf8a85f72620c70350dce2612452e440
+Author: Christian Persch 
+Date:   2008-11-22 13:45:52 +0000
+
+    Clean up the pkgs declared for use in the .pc files.
+    
+            * configure.in:
+            * vte-uninstalled.pc.in:
+            * vte.pc.in: Clean up the pkgs declared for use in the .pc files.
+    
+    svn path=/trunk/; revision=2177
+
+ ChangeLog             | 6 ++++++
+ configure.in          | 9 ++++-----
+ vte-uninstalled.pc.in | 2 +-
+ vte.pc.in             | 2 +-
+ 4 files changed, 12 insertions(+), 7 deletions(-)
+
+commit e629e5a8e86e76334026a4c1d4f57d6f12ac40f4
+Author: Christian Persch 
+Date:   2008-11-22 13:45:48 +0000
+
+    Depend on gtk 2.12. Bug #398862.
+    
+            * configure.in: Depend on gtk 2.12. Bug #398862.
+    
+    svn path=/trunk/; revision=2176
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit aa41a463e213a8f6725bcd25c8aec223a58f6b83
+Author: Christian Persch 
+Date:   2008-11-22 13:45:42 +0000
+
+    Fix the build (broken since r1622).
+    
+            * src/table.c: (print_array): Fix the build (broken since r1622).
+    
+    svn path=/trunk/; revision=2175
+
+ ChangeLog   | 4 ++++
+ src/table.c | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 5dd988de95c7cdb0b8275c0189af620c08991a9d
+Author: Christian Persch 
+Date:   2008-11-22 13:45:36 +0000
+
+    Don't include gtk.h here, it's unneeded.
+    
+            * src/reaper.c: Don't include gtk.h here, it's unneeded.
+    
+    svn path=/trunk/; revision=2174
+
+ ChangeLog    | 4 ++++
+ src/reaper.c | 1 -
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit 98ebf0dfe62d16d23436723f145417f87a66b2ae
+Author: Christian Persch 
+Date:   2008-11-22 13:45:29 +0000
+
+    Make iso2022 programme build again; it was broken since r1612.
+    
+            * src/iso2022.c: (main): Make iso2022 programme build again; it was
+            broken since r1612.
+    
+    svn path=/trunk/; revision=2173
+
+ ChangeLog     | 5 +++++
+ src/iso2022.c | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit a5b6886f2982522cc61a8a8f9e5359134ddad54a
+Author: Christian Persch 
+Date:   2008-11-22 13:45:23 +0000
+
+    Separate CFLAGS and CPPFLAGS.
+    
+            * src/Makefile.am: Separate CFLAGS and CPPFLAGS.
+    
+    svn path=/trunk/; revision=2172
+
+ ChangeLog       |  4 ++++
+ src/Makefile.am | 72 ++++++++++++++++++++++++++++++++++++---------------------
+ 2 files changed, 50 insertions(+), 26 deletions(-)
+
+commit 1835794092892eb2767f36bd7fa5b73d5e984d7c
+Author: Christian Persch 
+Date:   2008-11-22 13:45:16 +0000
+
+    Don't add LDFLAGS to *_LDADD, that's wrong and broken.
+    
+            * src/Makefile.am: Don't add LDFLAGS to *_LDADD, that's wrong and
+            broken.
+    
+    svn path=/trunk/; revision=2171
+
+ ChangeLog       |  5 +++++
+ src/Makefile.am | 43 +++++++++++++++++++++----------------------
+ 2 files changed, 26 insertions(+), 22 deletions(-)
+
+commit 5792cacf58b35e4664cf6aca5933e0090eec3f0c
+Author: Christian Persch 
+Date:   2008-11-22 13:45:09 +0000
+
+    Remove more configure cruft: OTHERLIBS/CFLAGS and X_LIBS/CFLAGS.
+    Don't add LIBS to *_LDADD, since it's there by default already.
+    
+    svn path=/trunk/; revision=2170
+
+ ChangeLog             |  8 ++++++++
+ configure.in          | 29 -----------------------------
+ src/Makefile.am       | 47 ++++++++++++++++++++++++++---------------------
+ vte-uninstalled.pc.in |  4 ++--
+ vte.pc.in             |  4 ++--
+ 5 files changed, 38 insertions(+), 54 deletions(-)
+
+commit a48bb06cadb10ebfc44d38533bfd82dc6c2a4602
+Author: Christian Persch 
+Date:   2008-11-22 13:45:01 +0000
+
+    Use gdk_threads_add_timeout_seconds() here.
+    
+    svn path=/trunk/; revision=2169
+
+ ChangeLog           |  6 ++++++
+ src/vtepangocairo.c | 18 ++++++++++--------
+ 2 files changed, 16 insertions(+), 8 deletions(-)
+
+commit e1b8af75c1e8e85063a4fd7be3498637d372fa60
+Author: Chris Wilson 
+Date:   2008-11-21 01:02:32 +0000
+
+    Remove FT2_LIBS and FT2_CFLAGS
+    
+    2008-11-21  Chris Wilson  
+    
+            * vte.pc.in: Remove FT2_LIBS and FT2_CFLAGS
+    
+    
+    svn path=/trunk/; revision=2168
+
+ ChangeLog | 4 ++++
+ vte.pc.in | 3 +--
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+commit 8450c9d852d3240bdcca69f4c0ec387ededeefd8
+Author: Chris Wilson 
+Date:   2008-11-21 00:42:39 +0000
+
+    Break out of interval search as early as possible. Exploit the strict
+    
+    2008-11-21  Chris Wilson  
+    
+            * src/iso2022.c (_vte_iso2022_is_ambiguous): Break out of interval
+            search as early as possible. Exploit the strict ordering of the
+            ambiguous/unambiguous ranges to break out of the for loop as soon
+            as the character is less than a range start. (As the arrays only
+            contain 2/3 elements, it is not worth adding the overhead of calling
+            bsearch()).
+    
+    
+    svn path=/trunk/; revision=2167
+
+ ChangeLog     |  9 +++++++++
+ src/iso2022.c | 12 ++++++++----
+ 2 files changed, 17 insertions(+), 4 deletions(-)
+
+commit 7bcb445f3a5f8edc5dc0b2fa55cf383a0c7e2dfe
+Author: Chris Wilson 
+Date:   2008-11-21 00:30:28 +0000
+
+    Copy the gunichars directly to the array from the incoming chunk.
+    
+    2008-11-21  Chris Wilson  
+    
+            * src/iso2022.c (process_cdata): Copy the gunichars directly to the
+            array from the incoming chunk.
+    
+    
+    svn path=/trunk/; revision=2166
+
+ ChangeLog     |  5 +++++
+ src/iso2022.c | 14 +++++++++-----
+ 2 files changed, 14 insertions(+), 5 deletions(-)
+
+commit ce822897e6cf4b721c4d2b76c408987f065751f1
+Author: Chris Wilson 
+Date:   2008-11-21 00:28:30 +0000
+
+    Commit the right Makefile.am this time!
+    
+    
+    svn path=/trunk/; revision=2165
+
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8d33fa5325b487461ea27b301b4811bd3c51f4df
+Author: Chris Wilson 
+Date:   2008-11-21 00:27:34 +0000
+
+    Remove FT2_FLAGS
+    
+    2008-11-20  Chris Wilson  
+    
+            * src/Makefile.am: Remove FT2_FLAGS
+    
+    
+    svn path=/trunk/; revision=2164
+
+ ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 25763fcf97ee86a93f6a381dafcca5b3ab93a2bc
+Author: Behdad Esfahbod 
+Date:   2008-11-20 19:49:42 +0000
+
+    Remove obsolete check.
+    
+    2008-11-20  Behdad Esfahbod  
+    
+            * src/vtepangocairo.c (font_info_destroy_delayed): Remove obsolete
+            check.
+    
+    
+    svn path=/trunk/; revision=2163
+
+ ChangeLog           | 5 +++++
+ src/vtepangocairo.c | 6 ++----
+ 2 files changed, 7 insertions(+), 4 deletions(-)
+
+commit 066c1231ac77e3adb1d69125d8f7b51ff7488719
+Author: Behdad Esfahbod 
+Date:   2008-11-20 19:48:22 +0000
+
+    Bug 561713 – crash on font cache cleanup
+    
+    2008-11-20  Behdad Esfahbod  
+    
+            Bug 561713 – crash on font cache cleanup
+    
+            * src/vtepangocairo.c (font_info_reference), (font_info_destroy):
+            Remove destroy timeout when resurrecting a font info.
+    
+    
+    svn path=/trunk/; revision=2162
+
+ ChangeLog           |  7 +++++++
+ src/vtepangocairo.c | 13 ++++++++++++-
+ 2 files changed, 19 insertions(+), 1 deletion(-)
+
+commit 5f755c1377aa53e8233451912062a59eb497e834
+Author: Behdad Esfahbod 
+Date:   2008-11-20 19:28:36 +0000
+
+    Make profiling messages print the info pointer.
+    
+    2008-11-20  Behdad Esfahbod  
+    
+            * src/vtepangocairo.c (font_info_cache_ascii),
+            (font_info_allocate), (font_info_free),
+            (font_info_find_for_context):
+            Make profiling messages print the info pointer.
+    
+    
+    svn path=/trunk/; revision=2161
+
+ ChangeLog           |  7 +++++++
+ src/vtepangocairo.c | 19 ++++++++++++-------
+ 2 files changed, 19 insertions(+), 7 deletions(-)
+
+commit 9a52291c1fc99dcc8c3b993e905a03b0b525237a
+Author: Behdad Esfahbod 
+Date:   2008-11-20 16:57:41 +0000
+
+    Remove more cruft.
+    
+    2008-11-20  Behdad Esfahbod  
+    
+            * configure.in:  Remove more cruft.
+    
+    
+    svn path=/trunk/; revision=2160
+
+ ChangeLog    |   4 ++
+ configure.in | 129 -----------------------------------------------------------
+ 2 files changed, 4 insertions(+), 129 deletions(-)
+
+commit 98e0498289684d6cc912f5e0aa816a110a2faccf
+Author: Behdad Esfahbod 
+Date:   2008-11-20 16:48:04 +0000
+
+    Bug 560819 – Remove obsolete backends
+    
+    2008-11-20  Behdad Esfahbod  
+    
+            Bug 560819 – Remove obsolete backends
+    
+            * configure.in:
+            * src/Makefile.am:
+            * src/vtebg.c (vte_bg_get_pixmap):
+            * src/vtebg.h:
+            * src/vtedraw.c:
+            * src/vtefc.c:
+            * src/vtefc.h:
+            * src/vteft2.c:
+            * src/vteft2.h:
+            * src/vtegl.c:
+            * src/vtegl.h:
+            * src/vteglyph.c:
+            * src/vteglyph.h:
+            * src/vterdb.c:
+            * src/vterdb.h:
+            * src/vtergb.c:
+            * src/vtergb.h:
+            * src/vtexft.c:
+            * src/vtexft.h:
+            Remove all backends except for pangocairo.  Saves so much code.
+    
+    
+    svn path=/trunk/; revision=2159
+
+ ChangeLog       |  25 ++
+ configure.in    |  40 ---
+ src/Makefile.am |  24 +-
+ src/vtebg.c     | 106 -------
+ src/vtebg.h     |   5 -
+ src/vtedraw.c   |  14 -
+ src/vtefc.c     | 496 -----------------------------
+ src/vtefc.h     |  48 ---
+ src/vteft2.c    | 338 --------------------
+ src/vteft2.h    |  33 --
+ src/vtegl.c     | 525 -------------------------------
+ src/vtegl.h     |  33 --
+ src/vteglyph.c  | 805 -----------------------------------------------
+ src/vteglyph.h  |  92 ------
+ src/vterdb.c    | 273 ----------------
+ src/vterdb.h    |  36 ---
+ src/vtergb.c    | 283 -----------------
+ src/vtergb.h    |  53 ----
+ src/vtexft.c    | 953 --------------------------------------------------------
+ src/vtexft.h    |  37 ---
+ 20 files changed, 26 insertions(+), 4193 deletions(-)
+
+commit 1b660899a96132881818a267c791e179d60d02f9
+Author: Behdad Esfahbod 
+Date:   2008-11-20 16:27:50 +0000
+
+    Oops
+    
+    svn path=/trunk/; revision=2158
+
+ src/vtedraw.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit d88a45484df9095078b22a18089f258bb4810a77
+Author: Behdad Esfahbod 
+Date:   2008-11-20 16:12:37 +0000
+
+    Bug 560819 – Remove obsolete backends
+    
+    2008-11-20  Behdad Esfahbod  
+    
+            Bug 560819 – Remove obsolete backends
+    
+            * src/Makefile.am:
+            * src/vtedraw.c:
+            * src/vtepango.c:
+            * src/vtepango.h:
+            Remove pango backend.
+    
+    
+    svn path=/trunk/; revision=2157
+
+ ChangeLog       |  10 ++
+ src/Makefile.am |   2 -
+ src/vtedraw.c   |   3 -
+ src/vtepango.c  | 379 --------------------------------------------------------
+ src/vtepango.h  |  33 -----
+ 5 files changed, 10 insertions(+), 417 deletions(-)
+
+commit 726bb7a9b17f7d0feb1c65cbd3963da5af64be1e
+Author: Behdad Esfahbod 
+Date:   2008-11-20 16:11:12 +0000
+
+    More
+    
+    svn path=/trunk/; revision=2156
+
+ configure.in | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit dccec4deb32809194bb1376e426a97931ce1c66f
+Author: Behdad Esfahbod 
+Date:   2008-11-20 16:09:15 +0000
+
+    Bug 560819 – Remove obsolete backends
+    
+    2008-11-20  Behdad Esfahbod  
+    
+            Bug 560819 – Remove obsolete backends
+    
+            * configure.in:
+            * src/Makefile.am:
+            * src/vtedraw.c:
+            * src/vtepangox.c:
+            * src/vtepangox.h:
+            Remove pangox backend.
+    
+    
+    svn path=/trunk/; revision=2155
+
+ ChangeLog       |  11 ++
+ configure.in    |  25 ----
+ src/Makefile.am |   5 -
+ src/vtedraw.c   |   4 -
+ src/vtepangox.c | 438 --------------------------------------------------------
+ src/vtepangox.h |  33 -----
+ 6 files changed, 11 insertions(+), 505 deletions(-)
+
+commit f1bc5f3a784a221a2e172803f1a8d5d2598d4ecd
+Author: Behdad Esfahbod 
+Date:   2008-11-20 15:11:41 +0000
+
+    Bug 560818 – pangocairo backend doesn't share font cache across widgets
+    
+    2008-11-20  Behdad Esfahbod  
+    
+            Bug 560818 – pangocairo backend doesn't share font cache across
+            widgets
+    
+            * src/vtepangocairo.c (font_info_cache_ascii),
+            (font_info_allocate), (font_info_free), (font_info_register),
+            (font_info_unregister), (font_info_reference),
+            (font_info_destroy_delayed), (font_info_destroy), (context_hash),
+            (context_equal), (font_info_find_for_context),
+            (font_info_create_for_context), (font_info_create_for_screen),
+            (font_info_get_unichar_info): Cache font info and use it for multiple
+            widgets.
+    
+    
+    svn path=/trunk/; revision=2154
+
+ ChangeLog           |  14 ++++
+ src/vtedraw.h       |   2 +-
+ src/vtepangocairo.c | 238 +++++++++++++++++++++++++++++++++++++++++-----------
+ 3 files changed, 206 insertions(+), 48 deletions(-)
+
+commit faf6763cd1fb9c4f8d1c06fde7683a1cd0c2a775
+Author: Behdad Esfahbod 
+Date:   2008-11-19 22:24:03 +0000
+
+    Remove unused PangoCoverage.
+    
+    2008-11-19  Behdad Esfahbod  
+    
+            * src/vtepangocairo.c (font_info_create_for_screen),
+            (font_info_destroy): Remove unused PangoCoverage.
+    
+    
+    svn path=/trunk/; revision=2153
+
+ ChangeLog           | 5 +++++
+ src/vtepangocairo.c | 7 -------
+ 2 files changed, 5 insertions(+), 7 deletions(-)
+
+commit 8078f417862e95f151e14f43a0afccfa2743d4cf
+Author: Behdad Esfahbod 
+Date:   2008-11-19 21:39:25 +0000
+
+    Cache ASCII characters when building font.
+    
+    2008-11-19  Behdad Esfahbod  
+    
+            * src/vtepangocairo.c (font_info_find_unichar_info),
+            (font_info_cache_ascii), (font_info_measure_font),
+            (font_info_get_unichar_info): Cache ASCII characters when building
+            font.
+    
+    
+    svn path=/trunk/; revision=2152
+
+ ChangeLog           |   7 +++
+ src/vtepangocairo.c | 133 +++++++++++++++++++++++++++++++++++++++++++---------
+ 2 files changed, 117 insertions(+), 23 deletions(-)
+
+commit 8a8c65c27aa21d6936b0de656df47e5c549dbfa0
+Author: Christian Persch 
+Date:   2008-11-18 14:10:30 +0000
+
+    Remove glib from gnome-pty-helper. Bug #560977.
+    
+    svn path=/trunk/; revision=2151
+
+ ChangeLog                           | 11 +++++++++++
+ gnome-pty-helper/Makefile.am        |  3 ---
+ gnome-pty-helper/configure.in       | 12 +++++++-----
+ gnome-pty-helper/gnome-pty-helper.c | 11 +++++------
+ 4 files changed, 23 insertions(+), 14 deletions(-)
+
+commit f9a0a8606f64d4212385943c360749ab5f62b4cd
+Author: Christian Persch 
+Date:   2008-11-18 13:47:42 +0000
+
+    Fix missing prototype warning.
+    
+    svn path=/trunk/; revision=2150
+
+ ChangeLog     | 4 ++++
+ src/vteskel.c | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit c298a8512d080a17d86f98af7142f9fd4c2ae580
+Author: Behdad Esfahbod 
+Date:   2008-11-18 13:25:08 +0000
+
+    Remove copy of font desc and antialias from font info object as they were
+    
+    2008-11-18  Behdad Esfahbod  
+    
+            * src/vtepangocairo.c (font_info_create_for_screen),
+            (font_info_destroy): Remove copy of font desc and antialias from font
+            info object as they were not used.
+    
+    
+    svn path=/trunk/; revision=2149
+
+ ChangeLog           |  6 ++++++
+ src/vtepangocairo.c | 12 ++----------
+ 2 files changed, 8 insertions(+), 10 deletions(-)
+
+commit 6ae356484534ed676c34ea87e5e917ee0b33153e
+Author: Behdad Esfahbod 
+Date:   2008-11-18 13:23:42 +0000
+
+    Bug 561185 – pangocairo backend sets antialias incorrectly
+    
+    2008-11-18  Behdad Esfahbod  
+    
+            Bug 561185 – pangocairo backend sets antialias incorrectly
+    
+            * src/vtepangocairo.c (font_info_create_for_screen): Handle
+            FORCE_ENABLE correctly.
+    
+    
+    svn path=/trunk/; revision=2148
+
+ ChangeLog           |  7 +++++++
+ src/vtepangocairo.c | 10 +++++++++-
+ 2 files changed, 16 insertions(+), 1 deletion(-)
+
+commit fc665e5884cf28ecba977bc5e4408b8188c0c866
+Author: Behdad Esfahbod 
+Date:   2008-11-16 02:21:48 +0000
+
+    Bug 560817 – pagocairo backend doesn't have correct opacity support
+    
+    2008-11-16  Behdad Esfahbod  
+    
+            Bug 560817 – pagocairo backend doesn't have correct opacity support
+    
+            * src/vtepangocairo.c (_vte_pangocairo_clear),
+            (_vte_pangocairo_draw_text), (_vte_pangocairo_draw_rectangle),
+            (_vte_pangocairo_fill_rectangle): Fix opacity support by using
+            SOURCE operator.
+    
+    
+    svn path=/trunk/; revision=2147
+
+ ChangeLog           |  9 +++++++++
+ src/vtepangocairo.c | 12 ++++++------
+ 2 files changed, 15 insertions(+), 6 deletions(-)
+
+commit 5c59d1c957ccedc0ee2bca4c6e07168b9a03a913
+Author: Behdad Esfahbod 
+Date:   2008-11-16 02:20:05 +0000
+
+    Bug 560991 – Unsetting background doesn't work
+    
+    2008-11-16  Behdad Esfahbod  
+    
+            Bug 560991 – Unsetting background doesn't work
+    
+            * src/vte.c (vte_terminal_set_background_image): Correctly unset
+            background if image==NULL.
+    
+    
+    svn path=/trunk/; revision=2146
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 217987a8e58b754c99125455d3f96cf14189387f
+Author: Behdad Esfahbod 
+Date:   2008-11-14 15:58:33 +0000
+
+    Bug 395599 – Add pangocairo backend
+    
+    2008-11-14  Behdad Esfahbod  
+    
+            Bug 395599 – Add pangocairo backend
+    
+            * configure.in:
+            Require pango >= 1.22.0
+    
+            * src/Makefile.am:
+            * src/vtedraw.c:
+            * src/vtepangocairo.c:
+            * src/vtepangocairo.h:
+            Add a pangocairo drawing backend.  Use it by default.  This is as fast
+            as the xft backend.  Doesn't share font caches across widgets yet.
+            Also, the transparent background stuff doesn't match xft backend's
+            yet.
+    
+    
+    svn path=/trunk/; revision=2145
+
+ ChangeLog           |  16 ++
+ configure.in        |   2 +-
+ src/Makefile.am     |   2 +
+ src/vtedraw.c       |   2 +
+ src/vtepangocairo.c | 682 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vtepangocairo.h |  33 +++
+ 6 files changed, 736 insertions(+), 1 deletion(-)
+
+commit dcc643ff1247e0337b35b6270c6951de3918c8cd
+Author: Behdad Esfahbod 
+Date:   2008-11-14 11:37:59 +0000
+
+    Remove unneeded draw methods.
+    
+    2008-11-14  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_ensure_font):
+            * src/vtedraw.c (_vte_draw_new), (_vte_draw_free),
+            (_vte_draw_set_background_opacity),
+            (_vte_draw_set_background_color), (_vte_draw_set_text_font),
+            (_vte_draw_get_text_metrics), (_vte_draw_get_char_width),
+            (_vte_draw_char), (_vte_draw_draw_rectangle),
+            (_vte_draw_set_scroll):
+            * src/vtedraw.h:
+            * src/vteft2.c (_vte_ft2_destroy), (_vte_ft2_start),
+            (_vte_ft2_end), (_vte_ft2_set_background_image), (_vte_ft2_clear),
+            (_vte_ft2_set_text_font), (_vte_ft2_get_text_metrics),
+            (_vte_ft2_get_char_width), (_vte_ft2_draw_text),
+            (_vte_ft2_draw_has_char), (_vte_ft2_draw_rectangle),
+            (_vte_ft2_fill_rectangle):
+            * src/vtegl.c (_vte_gl_destroy), (_vte_gl_get_visual),
+            (_vte_gl_start), (_vte_gl_end), (_vte_gl_set_background_image),
+            (_vte_gl_clear), (_vte_gl_set_text_font),
+            (_vte_gl_get_text_metrics), (_vte_gl_get_char_width),
+            (_vte_gl_draw_text), (_vte_gl_draw_has_char), (_vte_gl_rectangle):
+            * src/vtepango.c (_vte_pango_set_text_font),
+            (_vte_pango_get_text_metrics):
+            * src/vtepangox.c (_vte_pangox_create), (_vte_pangox_destroy),
+            (_vte_pangox_start), (_vte_pangox_end),
+            (_vte_pangox_set_background_image), (_vte_pangox_clip),
+            (_vte_pangox_clear), (_vte_pangox_set_text_font),
+            (_vte_pangox_get_text_metrics), (_vte_pangox_get_using_fontconfig),
+            (_vte_pangox_draw_text), (_vte_pangox_draw_has_char),
+            (_vte_pangox_draw_rectangle), (_vte_pangox_fill_rectangle):
+            * src/vtepangox.h:
+            * src/vteskel.c (_vte_skel_clear), (_vte_skel_get_text_metrics),
+            (_vte_skel_draw_text), (_vte_skel_fill_rectangle):
+            * src/vtexft.c (_vte_xft_set_text_font),
+            (_vte_xft_get_text_metrics), (_vte_xft_draw_text):
+            Remove unneeded draw methods.
+    
+    
+    svn path=/trunk/; revision=2144
+
+ ChangeLog       |  37 +++++++++++
+ src/vte.c       |   9 ++-
+ src/vtedraw.c   |  90 ++++++++++---------------
+ src/vtedraw.h   |  21 ++----
+ src/vteft2.c    |  87 ++++++++----------------
+ src/vtegl.c     |  85 +++++++-----------------
+ src/vtepango.c  |  50 +++++++-------
+ src/vtepangox.c | 146 ++++++++++++++++++++--------------------
+ src/vtepangox.h |   2 +-
+ src/vteskel.c   | 201 ++++++++------------------------------------------------
+ src/vtexft.c    |  62 +++++++++--------
+ 11 files changed, 293 insertions(+), 497 deletions(-)
+
+commit 5354340b88cf24aa41b4a1e116de9e801a1c34be
+Author: Behdad Esfahbod 
+Date:   2008-11-14 10:06:20 +0000
+
+    Minor fix.
+    
+    2008-11-14  Behdad Esfahbod  
+    
+            * src/vtedraw.c (_vte_draw_get_char_width): Minor fix.
+    
+            * src/vtepangox.c (_vte_pango_x_create), (_vte_pango_x_start),
+            (_vte_pango_x_clear): Cleanup here too.
+    
+    
+    svn path=/trunk/; revision=2143
+
+ ChangeLog       |   7 ++++
+ src/vtedraw.c   |   2 +-
+ src/vtepangox.c | 106 +++++++++-----------------------------------------------
+ 3 files changed, 24 insertions(+), 91 deletions(-)
+
+commit a37ac82b6f5cc939520449f1274c59bd414fc0c4
+Author: Behdad Esfahbod 
+Date:   2008-11-13 15:59:45 +0000
+
+    Undo previous change instead of cleanly fix it for now.
+    
+    2008-11-13  Behdad Esfahbod  
+    
+            * configure.in:
+            * src/vte-private.h:
+            Undo previous change instead of cleanly fix it for now.
+    
+    
+    svn path=/trunk/; revision=2142
+
+ ChangeLog         | 6 ++++++
+ configure.in      | 2 ++
+ src/vte-private.h | 3 ---
+ 3 files changed, 8 insertions(+), 3 deletions(-)
+
+commit 3877c89caf964c13e018a46cb50d5906027fa401
+Author: Behdad Esfahbod 
+Date:   2008-11-13 15:53:45 +0000
+
+    Why do we let people configure random things?
+    
+    2008-11-13  Behdad Esfahbod  
+    
+            * configure.in:
+            * src/vte-private.h:
+            Why do we let people configure random things?
+    
+    
+    svn path=/trunk/; revision=2141
+
+ ChangeLog         | 6 ++++++
+ configure.in      | 2 --
+ src/vte-private.h | 3 +++
+ 3 files changed, 9 insertions(+), 2 deletions(-)
+
+commit f913fc6c66a30d72194fd5b9455e140283fe626b
+Author: Behdad Esfahbod 
+Date:   2008-11-13 15:44:24 +0000
+
+    .
+    
+    svn path=/trunk/; revision=2140
+
+ src/vtexft.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 97dc4f67f739dc9a6523454b5824a60d04352b88
+Author: Behdad Esfahbod 
+Date:   2008-11-13 15:13:26 +0000
+
+    Simplify backends by relying more on defaults.
+    
+    2008-11-13  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_background_update):
+            * src/vtedraw.c (_vte_draw_update_requires_clear), (_vte_draw_new),
+            (_vte_draw_set_background_opacity),
+            (_vte_draw_set_background_color), (_vte_draw_set_background_image),
+            (_vte_draw_char), (_vte_draw_set_scroll):
+            * src/vtedraw.h:
+            * src/vteft2.c (_vte_ft2_set_background_image), (_vte_ft2_clear),
+            (_vte_ft2_get_char_width):
+            * src/vtegl.c (_vte_gl_create), (_vte_gl_clear),
+            (_vte_gl_get_char_width), (_vte_gl_draw_text):
+            * src/vtepango.c (_vte_pango_create), (_vte_pango_start),
+            (_vte_pango_set_background_image), (_vte_pango_clear):
+            * src/vtexft.c (_vte_xft_create), (_vte_xft_set_background_image),
+            (_vte_xft_clear), (_vte_xft_get_char_width):
+            Simplify backends by relying more on defaults.
+    
+    
+    svn path=/trunk/; revision=2139
+
+ ChangeLog      |  18 +++++++++
+ src/vte.c      |   6 +--
+ src/vtedraw.c  |  69 ++++++++++++++++++++------------
+ src/vtedraw.h  |  26 +++++++++---
+ src/vteft2.c   |  83 ++++++--------------------------------
+ src/vtegl.c    |  95 +++++++++++--------------------------------
+ src/vtepango.c | 115 ++++++++--------------------------------------------
+ src/vtexft.c   | 124 +++++++++------------------------------------------------
+ 8 files changed, 155 insertions(+), 381 deletions(-)
+
+commit 18f2f88d77c000ecb69d35c30a6103b93c977828
+Author: Behdad Esfahbod 
+Date:   2008-11-13 13:17:12 +0000
+
+    Accept draw impl if impl->check is NULL.
+    
+    2008-11-13  Behdad Esfahbod  
+    
+            * src/vtedraw.c (_vte_draw_init_user), (_vte_draw_init_default):
+            Accept draw impl if impl->check is NULL.
+    
+    
+    svn path=/trunk/; revision=2138
+
+ ChangeLog     | 5 +++++
+ src/vtedraw.c | 6 ++++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+commit f60e79017c23bc77c88c7720756610856d05eb7d
+Author: Behdad Esfahbod 
+Date:   2008-11-13 12:29:36 +0000
+
+    Use sensical defaults instead of g_return_if_fail'ing when backend
+    
+    2008-11-13  Behdad Esfahbod  
+    
+            * src/vtedraw.h:
+            * src/vtedraw.c (_vte_draw_new), (_vte_draw_get_visual),
+            (_vte_draw_get_colormap), (_vte_draw_start), (_vte_draw_end),
+            (_vte_draw_set_background_color), (_vte_draw_set_background_image),
+            (_vte_draw_requires_repaint), (_vte_draw_clip), (_vte_draw_clear),
+            (_vte_draw_set_text_font), (_vte_draw_get_text_width),
+            (_vte_draw_get_text_height), (_vte_draw_get_text_ascent),
+            (_vte_draw_get_char_width), (_vte_draw_get_using_fontconfig),
+            (_vte_draw_text), (_vte_draw_char), (_vte_draw_has_char),
+            (_vte_draw_fill_rectangle), (_vte_draw_draw_rectangle),
+            (_vte_draw_set_scroll):
+            Use sensical defaults instead of g_return_if_fail'ing when backend
+            functions are not implemented.
+    
+    
+    svn path=/trunk/; revision=2137
+
+ ChangeLog     |  16 ++++++
+ src/vtedraw.c | 169 +++++++++++++++++++++++++++++++++++++---------------------
+ src/vtedraw.h |   1 +
+ 3 files changed, 124 insertions(+), 62 deletions(-)
+
+commit 746e946887ca9d763b6d69d70cc5e5055baeab47
+Author: Behdad Esfahbod 
+Date:   2008-11-13 12:29:03 +0000
+
+    Update templates
+    
+    svn path=/trunk/; revision=2136
+
+ doc/reference/tmpl/vte.sgml | 130 ++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 130 insertions(+)
+
+commit 4fdc0fae8a3d740def335fc74f695b695e4c13fb
+Author: Chris Wilson 
+Date:   2008-10-31 12:59:29 +0000
+
+    Bug 557375 – >=vte-0.16.14 breaks highlighting on activity
+    
+    2008-10-31  Chris Wilson  
+    
+            Bug 557375 – >=vte-0.16.14 breaks highlighting on activity
+    
+            * src/vte.c (vte_terminal_deselect_all):
+            Preserve the copy of the selection until it is replace by a new
+            selection, so that we can perform asynchronous copies from the
+            clipboard.
+    
+    
+    svn path=/trunk/; revision=2135
+
+ ChangeLog | 9 +++++++++
+ src/vte.c | 4 ++--
+ 2 files changed, 11 insertions(+), 2 deletions(-)
+
+commit ff594c80826beb7a11a695c88368157636a59d85
+Author: Chris Wilson 
+Date:   2008-10-23 09:43:21 +0000
+
+    Bug 557375 – >=vte-0.16.14 breaks highlighting on activity
+    
+    2008-10-23  Chris Wilson  
+    
+            Bug 557375 – >=vte-0.16.14 breaks highlighting on activity
+    
+            * src/vte.c (vte_terminal_deselect_all),
+            (vte_terminal_extend_selection):
+            After the user modifies the selection, copy it to PRIMARY and store
+            it on the terminal. This ensures that after a screen redraw, we
+            compare the contents of the selected region with the current
+            selection, instead of stale data.
+    
+    
+    svn path=/trunk/; revision=2134
+
+ ChangeLog | 11 +++++++++++
+ src/vte.c | 11 ++++++++---
+ 2 files changed, 19 insertions(+), 3 deletions(-)
+
+commit 5f84486a0a4e073a16a837128f0c19b0515a8c9c
+Author: Christian Persch 
+Date:   2008-10-23 09:15:37 +0000
+
+    Default glade catalogue to disabled.
+    
+    svn path=/trunk/; revision=2133
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ca941172225b5333fab5f5caafce9ddacfd14f92
+Author: Christian Persch 
+Date:   2008-10-23 08:50:26 +0000
+
+    I hate ChangeLogs
+    
+    svn path=/trunk/; revision=2132
+
+ ChangeLog | 27 +++++++++++++++++++++++++++
+ 1 file changed, 27 insertions(+)
+
+commit def3f9687ef0d36cb0e6b3fcf22c60df44b4d090
+Author: Christian Persch 
+Date:   2008-10-23 08:39:50 +0000
+
+    Use glib-genmarshal --internal directly instead of checking the glib
+    version, since we now depend on a glib version that provides this.
+    
+    svn path=/trunk/; revision=2131
+
+ configure.in    | 3 ---
+ src/Makefile.am | 4 ++--
+ 2 files changed, 2 insertions(+), 5 deletions(-)
+
+commit 31a1fe16b8e790b9375255adb025fc6f3e7c1eca
+Author: Christian Persch 
+Date:   2008-10-23 08:39:44 +0000
+
+    Bug 556398 – maybe deprecate vte_terminal_get_char_ascent/descent
+    
+    svn path=/trunk/; revision=2130
+
+ src/vte.c | 4 ++++
+ src/vte.h | 6 ++++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit f2875cfc9b42c7f4e1dbb9f8cdf2a95d858aecd3
+Author: Christian Persch 
+Date:   2008-10-23 08:39:38 +0000
+
+    Bug 339819 – LibVTE terminals in GLADE
+    Terminal icons copied from gnome-icon-theme (licence: GPL).
+    
+    svn path=/trunk/; revision=2129
+
+ Makefile.am                                        |   4 ++
+ configure.in                                       |  28 ++++++++++++++
+ glade/Makefile.am                                  |  43 +++++++++++++++++++++
+ .../hicolor_actions_16x16_widget-vte-terminal.png  | Bin 0 -> 644 bytes
+ .../hicolor_actions_22x22_widget-vte-terminal.png  | Bin 0 -> 901 bytes
+ glade/vte.xml.in                                   |  40 +++++++++++++++++++
+ 6 files changed, 115 insertions(+)
+
+commit 53f96acb7e7bbadaedacfd613c7c8cea3491eaf8
+Author: Christian Persch 
+Date:   2008-10-23 08:39:28 +0000
+
+    Bug 399364 – Implement properties
+    Add basic properties, and emit notifications when they change.
+    
+    svn path=/trunk/; revision=2128
+
+ src/vte.c | 1021 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 958 insertions(+), 63 deletions(-)
+
+commit 51b97b75f505a8b15ccf034a4c981b137c09549e
+Author: Christian Persch 
+Date:   2008-10-19 21:44:50 +0000
+
+    Add note to docs that all file descriptors except std{in,out,err} are
+    being closed in the child before exec(). Bug #320128.
+    
+    svn path=/trunk/; revision=2127
+
+ src/vte.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 879712998890e09606b88722cfa3765ee3d87870
+Author: Christian Persch 
+Date:   2008-10-19 13:51:38 +0000
+
+    Remove debug spew.
+    
+    svn path=/trunk/; revision=2126
+
+ src/vte.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 1f270f991a2eab20c42190abf4b5bedb6705522e
+Author: Christian Persch 
+Date:   2008-10-19 13:51:33 +0000
+
+    I hate ChangeLog.
+    
+    svn path=/trunk/; revision=2125
+
+ ChangeLog | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit 7d353726a84bd1ec000e57de7cf82d3fef56ee38
+Author: Christian Persch 
+Date:   2008-10-19 13:51:28 +0000
+
+    Bug 556328 – Document set-scroll-adjustment parameters
+    
+    svn path=/trunk/; revision=2124
+
+ src/vte.c | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+commit ac3b51ecfd995752f5bc2327713b5c448813252b
+Author: Djihed Afifi 
+Date:   2008-10-19 11:45:36 +0000
+
+    Updated Arabic Translation by Khaled Hosny.
+    
+    * Updated Arabic Translation by Khaled Hosny.
+    
+    svn path=/trunk/; revision=2123
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 77518ec1de91234080a78baf2af8cc223ce7a63b
+Author: Behdad Esfahbod 
+Date:   2008-10-15 16:48:26 +0000
+
+    Update doc coverage test from cairo.
+    
+    2008-10-15  Behdad Esfahbod  
+    
+            * doc/reference/Makefile.am:
+            * doc/reference/check-doc-coverage.sh:
+            * doc/reference/check.docs:
+            Update doc coverage test from cairo.
+    
+    
+    svn path=/trunk/; revision=2122
+
+ ChangeLog                           |  7 ++++++
+ doc/reference/Makefile.am           |  9 +++++--
+ doc/reference/check-doc-coverage.sh | 48 +++++++++++++++++++++++++++++++++++++
+ doc/reference/check.docs            | 39 ------------------------------
+ 4 files changed, 62 insertions(+), 41 deletions(-)
+
+commit 921ab3aa61a4a7cfaa845523fbab77288822445d
+Author: Behdad Esfahbod 
+Date:   2008-10-15 01:54:37 +0000
+
+    Invalidate cursor upon shape change.
+    
+    2008-10-14  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_set_cursor_shape):
+            Invalidate cursor upon shape change.
+    
+    
+    svn path=/trunk/; revision=2121
+
+ ChangeLog | 5 +++++
+ src/vte.c | 1 +
+ 2 files changed, 6 insertions(+)
+
+commit 0aea533027aafd26a4bf13e1245a719ab2bd9b04
+Author: Christian Persch 
+Date:   2008-10-14 23:11:26 +0000
+
+    Add new API to the python bindings.
+    
+    svn path=/trunk/; revision=2120
+
+ ChangeLog       |  4 ++++
+ python/vte.defs | 45 +++++++++++++++++++++++++++++++++++++++++----
+ 2 files changed, 45 insertions(+), 4 deletions(-)
+
+commit 6a93d0c685658ea1fab4daef0f999dbc2009e1c3
+Author: Behdad Esfahbod 
+Date:   2008-10-14 20:47:50 +0000
+
+    Remove VTE_CURSOR_OUTLINE in favor of VTE_LINE_WIDTH.
+    
+    2008-10-14  Behdad Esfahbod  
+    
+            * src/vte-private.h:
+            * src/vte.c (vte_terminal_draw_line), (vte_terminal_paint_cursor):
+            Remove VTE_CURSOR_OUTLINE in favor of VTE_LINE_WIDTH.
+    
+    
+    svn path=/trunk/; revision=2119
+
+ ChangeLog         |  6 ++++++
+ src/vte-private.h |  1 -
+ src/vte.c         | 18 +++++++++---------
+ 3 files changed, 15 insertions(+), 10 deletions(-)
+
+commit f33c993073d6cdc6c1c8123521b4efdaa4822b4a
+Author: Behdad Esfahbod 
+Date:   2008-10-14 20:39:44 +0000
+
+    Supposedly handle reverse video during cursor drawing.
+    
+    2008-10-14  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_paint_cursor):
+            Supposedly handle reverse video during cursor drawing.
+    
+    
+    svn path=/trunk/; revision=2118
+
+ ChangeLog | 5 +++++
+ src/vte.c | 7 ++++---
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+commit 61ec5d3cad460529acdee4e98f1f7d71e202b782
+Author: Behdad Esfahbod 
+Date:   2008-10-14 20:36:10 +0000
+
+    Move IM preedit string drawing into its own function for code clarity.
+    
+    2008-10-14  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_paint_im_preedit_string),
+            (vte_terminal_paint):
+            Move IM preedit string drawing into its own function for code
+            clarity.
+    
+    
+    svn path=/trunk/; revision=2117
+
+ ChangeLog |   7 +++
+ src/vte.c | 157 +++++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 90 insertions(+), 74 deletions(-)
+
+commit 5cff4182d680681d815760ec7c3bcfbb4b785d77
+Author: Behdad Esfahbod 
+Date:   2008-10-14 20:25:25 +0000
+
+    Bug 549835 – Feature Request: Configurable cursor appearance
+    
+    2008-10-14  Behdad Esfahbod  
+    
+            Bug 549835 – Feature Request: Configurable cursor appearance
+    
+            * src/vte.h:
+            New public api:
+    
+                    VteTerminalCursorShape
+                    vte_terminal_set_cursor_shape
+                    vte_terminal_get_cursor_shape
+    
+            * src/vte-private.h:
+            * src/vte.c (_vte_terminal_insert_char), (vte_terminal_init),
+            (vte_terminal_paint_cursor), (vte_terminal_paint),
+            (vte_terminal_set_cursor_shape), (vte_terminal_get_cursor_shape):
+            Implement new API.  Also clean up cursor drawing in general.
+    
+            * doc/reference/Makefile.am:
+            * doc/reference/tmpl/reaper.sgml:
+            * doc/reference/tmpl/vte-unused.sgml:
+            * doc/reference/tmpl/vte.sgml:
+            * doc/reference/vte-sections.txt:
+            Doc new symbols.  Also add some missing docs.
+    
+    
+    svn path=/trunk/; revision=2116
+
+ ChangeLog                          |  24 +++
+ doc/reference/Makefile.am          |   3 +
+ doc/reference/tmpl/reaper.sgml     |  32 ----
+ doc/reference/tmpl/vte-unused.sgml |  30 ++++
+ doc/reference/tmpl/vte.sgml        |  59 +++++-
+ doc/reference/vte-sections.txt     |  10 ++
+ src/vte-private.h                  |   3 +
+ src/vte.c                          | 360 +++++++++++++++++++++----------------
+ src/vte.h                          |  18 +-
+ 9 files changed, 346 insertions(+), 193 deletions(-)
+
+commit d1986f303449acd1ae0ad3d2fde37f3a65959e32
+Author: Christian Persch 
+Date:   2008-10-13 11:53:32 +0000
+
+    Add gobject property getter/setter.
+    
+    svn path=/trunk/; revision=2115
+
+ ChangeLog |  4 ++++
+ src/vte.c | 35 ++++++++++++++++++++++++++++++++++-
+ 2 files changed, 38 insertions(+), 1 deletion(-)
+
+commit 75e65a0fe737094613bdfe50fd759f2cac6982aa
+Author: Christian Persch 
+Date:   2008-10-13 11:46:18 +0000
+
+    Add ChangeLog entry.
+    
+    svn path=/trunk/; revision=2114
+
+ ChangeLog | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 9331adbf9c6f03e29b7b08500e1a99bf2c16937c
+Author: Christian Persch 
+Date:   2008-10-13 11:46:12 +0000
+
+    Fix missing prorotypes compiler warning in marshal.c.
+    
+    svn path=/trunk/; revision=2113
+
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 04f263af0a66c1bc15b43914b42c904a96f37d03
+Author: Christian Persch 
+Date:   2008-10-13 11:44:59 +0000
+
+    Add vte_terminal_get_pty().
+    
+    svn path=/trunk/; revision=2112
+
+ src/vte.c | 17 +++++++++++++++++
+ src/vte.h |  1 +
+ 2 files changed, 18 insertions(+)
+
+commit 05cad2fc7cef3ae9e6dd063a6f8933cde76a6af6
+Author: Christian Persch 
+Date:   2008-10-06 20:12:15 +0000
+
+    Bug 329108 – Please support setting X's URGENCY hint upon terminal beep
+    
+    svn path=/trunk/; revision=2111
+
+ doc/reference/tmpl/vte.sgml |  7 +++++++
+ src/vte.c                   | 11 +++++++++++
+ src/vte.h                   |  3 ++-
+ src/vteseq.c                |  2 ++
+ 4 files changed, 22 insertions(+), 1 deletion(-)
+
+commit 983bff721bc647fa7b3903d4828d056265cf66a8
+Author: Christian Persch 
+Date:   2008-10-06 20:12:10 +0000
+
+    Fix compiler warning about g_free() on a const pointer.
+    
+    svn path=/trunk/; revision=2110
+
+ ChangeLog     | 4 ++++
+ src/vteconv.c | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 77347af8208aaa02078e0eb650ec0c980ed6016f
+Author: Christian Persch 
+Date:   2008-10-06 20:12:05 +0000
+
+    Add new function to the python bindings.
+    
+    svn path=/trunk/; revision=2109
+
+ ChangeLog       |  6 ++++++
+ python/vte.defs | 10 ++++++++++
+ 2 files changed, 16 insertions(+)
+
+commit 91127a312b5c33c9d58facda49077c8b1a1d7a0a
+Author: Christian Persch 
+Date:   2008-10-06 20:12:00 +0000
+
+    Deprecate useless macros. Bug #539130.
+    
+    svn path=/trunk/; revision=2108
+
+ ChangeLog | 6 ++++++
+ src/vte.h | 8 ++++----
+ 2 files changed, 10 insertions(+), 4 deletions(-)
+
+commit da9f7b17746625525b1761379803d90fe83095c2
+Author: Christian Persch 
+Date:   2008-10-06 20:11:55 +0000
+
+    Add vte_terminal_get_child_exit_status() so we can get the child's exit status from withint the child-exited signal handlers. Bug #509204.
+    
+    svn path=/trunk/; revision=2107
+
+ ChangeLog         |  8 ++++++++
+ src/vte-private.h |  1 +
+ src/vte.c         | 26 ++++++++++++++++++++++++++
+ src/vte.h         |  2 ++
+ 4 files changed, 37 insertions(+)
+
+commit d8a852897eb7ed60ef5aad7be264f31d484ec36f
+Author: Christian Persch 
+Date:   2008-10-06 20:11:49 +0000
+
+    Bump version to 0.17.5.
+    
+    svn path=/trunk/; revision=2106
+
+ ChangeLog    | 4 ++++
+ configure.in | 4 ++--
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 6d1a9b4973ff32a7f15dc5eb7d06a41d5fb9d193 (tag: vte_0_17_4)
+Author: Christian Persch 
+Date:   2008-09-22 22:41:46 +0000
+
+    Version 0.17.4.
+    
+    svn path=/trunk/; revision=2104
+
+ NEWS         | 4 ++++
+ configure.in | 4 ++--
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 9dfdffe7083d739664aaa9a9d39080e57055f4c8
+Author: Leonardo Ferreira Fontenelle 
+Date:   2008-09-21 21:33:56 +0000
+
+    Fixed terminology in Brazilian Portuguese translation by Vladimir Melo.
+    
+    2008-09-21  Leonardo Ferreira Fontenelle  
+    
+            * pt_BR.po: Fixed terminology in Brazilian Portuguese translation by
+            Vladimir Melo.
+    
+    svn path=/trunk/; revision=2103
+
+ po/ChangeLog |  5 +++++
+ po/pt_BR.po  | 43 +++++++++++++++++++++----------------------
+ 2 files changed, 26 insertions(+), 22 deletions(-)
+
+commit 792f6408202ebfe840d7b33df70452b7b7bdc790
+Author: Mugurel Tudor 
+Date:   2008-09-21 21:23:37 +0000
+
+    Updated Romanian translation by Mişu Moldovan 
+    
+    2008-09-22  Mugurel Tudor  
+    
+            * ro.po: Updated Romanian translation by
+            Mişu Moldovan 
+    
+    svn path=/trunk/; revision=2102
+
+ po/ChangeLog |  5 +++++
+ po/ro.po     | 68 +++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 43 insertions(+), 30 deletions(-)
+
+commit afc352ee3267250ce043e6f09de44268ed35c99a
+Author: Djihed Afifi 
+Date:   2008-09-18 02:06:51 +0000
+
+    Updated Arabic Translation by Khaled Hosny.
+    
+    * Updated Arabic Translation by Khaled Hosny.
+    
+    svn path=/trunk/; revision=2101
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 5f4cd5aa22c2606a0bad57b39c50de7f83019b68
+Author: Luca Ferretti 
+Date:   2008-09-17 18:21:33 +0000
+
+    Updated Italian translation by Francesco Marletta.
+    
+    2008-09-17  Luca Ferretti  
+    
+            * it.po: Updated Italian translation by Francesco Marletta.
+    
+    svn path=/trunk/; revision=2100
+
+ po/ChangeLog |  4 ++++
+ po/it.po     | 54 +++++++++++++++++++++++++-----------------------------
+ 2 files changed, 29 insertions(+), 29 deletions(-)
+
+commit 96c65ee99cfb9a8e790492b2fc498171e666a6ed
+Author: Shankar Prasad 
+Date:   2008-09-15 10:48:27 +0000
+
+    updated kannada translation and ChangeLog
+    
+    svn path=/trunk/; revision=2099
+
+ po/ChangeLog |  4 +++
+ po/kn.po     | 92 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 53 insertions(+), 43 deletions(-)
+
+commit 24b4ad647d04efb2ed0119727a3dd6bb5e8c05e3
+Author: Djihed Afifi 
+Date:   2008-09-15 09:48:03 +0000
+
+    Updated Arabic Translation by Khaled Hosny.
+    
+    * Updated Arabic Translation by Khaled Hosny.
+    
+    svn path=/trunk/; revision=2098
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 25642a2991556c9260eed58f4443ebf725e7d81f
+Author: Duarte Loreto 
+Date:   2008-09-14 16:33:04 +0000
+
+    Updated Portuguese translation.
+    
+    2008-09-14  Duarte Loreto 
+    
+            * pt.po: Updated Portuguese translation.
+    
+    svn path=/trunk/; revision=2097
+
+ po/ChangeLog |  4 ++++
+ po/pt.po     | 60 ++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 34 insertions(+), 30 deletions(-)
+
+commit 15c8c1080589506eeec722032d5a8b0292e020e8
+Author: Manoj Kumar Giri 
+Date:   2008-09-10 07:54:25 +0000
+
+    Updated Oriya (or.po) Translation
+    
+    svn path=/trunk/; revision=2096
+
+ po/ChangeLog |  4 ++++
+ po/or.po     | 78 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 46 insertions(+), 36 deletions(-)
+
+commit 722550ac37d46549e865149be2220157634965cb
+Author: Praveen Arimbrathodiyil 
+Date:   2008-09-10 04:08:15 +0000
+
+    small correction
+    
+    svn path=/trunk/; revision=2095
+
+ po/ml.po | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
+
+commit 6545d58a8e6e9c7e683f8726158f0c9665396b11
+Author: Robert Sedak 
+Date:   2008-09-09 17:18:14 +0000
+
+    Update: Croatian Language
+    
+    svn path=/trunk/; revision=2094
+
+ po/ChangeLog |  3 +++
+ po/hr.po     | 74 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 43 insertions(+), 34 deletions(-)
+
+commit 34e10694b47a49961b67c96230fbf1823548f657 (tag: vte_0_17_3)
+Author: Christian Persch 
+Date:   2008-09-08 20:09:06 +0000
+
+    vte 0.17.3.
+    
+    svn path=/trunk/; revision=2092
+
+ ChangeLog                          |  7 +++++++
+ NEWS                               | 12 ++++++++++++
+ configure.in                       |  4 ++--
+ doc/reference/tmpl/reaper.sgml     | 32 ++++++++++++++++++++++++++++++++
+ doc/reference/tmpl/vte-unused.sgml | 30 ------------------------------
+ 5 files changed, 53 insertions(+), 32 deletions(-)
+
+commit 2698dbcc5c8805380c5fc77ca1928ec582c84728
+Author: Christian Persch 
+Date:   2008-09-07 17:53:11 +0000
+
+    Update python bindings.
+    
+            * python/vte.defs: Update python bindings.
+    
+    svn path=/trunk/; revision=2091
+
+ ChangeLog       |   4 ++
+ python/vte.defs | 127 +++++++++++++++++++++++++++++++++++++++++++-------------
+ 2 files changed, 101 insertions(+), 30 deletions(-)
+
+commit 0f3575738b510049d54e133a6a5a74070772ffd0
+Author: Sébastien Granjoux 
+Date:   2008-09-01 11:14:44 +0000
+
+    Bug 538344 – Anjuta hangs when program is executed in terminal
+    
+    2008-08-20  Sébastien Granjoux  
+    
+            Bug 538344 – Anjuta hangs when program is executed in terminal
+    
+            * src/vte.c: Ensure the output channel exists when we need to write.
+    
+    
+    svn path=/trunk/; revision=2090
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 5 ++++-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+commit 13bbce8161377ae4f9ff866fded76a795613dc9f
+Author: Goran Rakic 
+Date:   2008-08-25 14:57:20 +0000
+
+    Conversion from sr@Latn to sr@latin
+    
+    svn path=/trunk/; revision=2089
+
+ po/ChangeLog                   | 5 +++++
+ po/LINGUAS                     | 2 +-
+ po/{sr@Latn.po => sr@latin.po} | 0
+ 3 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 0e0aab333668dd11959b5ef0e8695dc1236c40bb
+Author: Christian Persch 
+Date:   2008-08-20 13:10:12 +0000
+
+    Plug a mem leak.
+    
+    svn path=/trunk/; revision=2088
+
+ ChangeLog | 5 +++++
+ src/vte.c | 4 +++-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 555d0d2a8e4d6f992789d6bd00137ce6b9f853e3
+Author: Chris Wilson 
+Date:   2008-08-15 20:11:58 +0000
+
+    fcntl(2) specifies that the flags argument is a long. Make it so.
+    
+    2008-08-15  Chris Wilson  
+    
+            * src/vte.c (vte_terminal_set_pty):
+            fcntl(2) specifies that the flags argument is a long. Make it so.
+    
+    
+    svn path=/trunk/; revision=2087
+
+ ChangeLog |  5 +++++
+ src/vte.c | 24 ++++++++++++------------
+ 2 files changed, 17 insertions(+), 12 deletions(-)
+
+commit e976391ce7dd68d4e66bf22194112772a099dbfd
+Author: Behdad Esfahbod 
+Date:   2008-08-14 00:00:38 +0000
+
+    Fix all "signed vs unsigned comparison" warnings.
+    
+    2008-08-13  Behdad Esfahbod  
+    
+            * src/vte-private.h:
+            * src/vte.c (vte_terminal_match_check_internal_vte),
+            (vte_terminal_ensure_cursor), (vte_terminal_set_colors),
+            (_vte_terminal_insert_char), (vte_terminal_feed),
+            (vte_terminal_key_press), (vte_terminal_match_hilite_update),
+            (vte_terminal_extend_selection):
+            * src/vteseq.c (vte_terminal_find_charcell),
+            (vte_sequence_handler_set_title_internal),
+            (vte_sequence_handler_decset_internal), (vte_sequence_handler_cb),
+            (vte_sequence_handler_cd), (vte_sequence_handler_ce),
+            (vte_sequence_handler_ec), (vte_sequence_handler_ta),
+            (vte_sequence_handler_set_mode),
+            (vte_sequence_handler_window_manipulation):
+            Fix all "signed vs unsigned comparison" warnings.
+    
+    
+    svn path=/trunk/; revision=2086
+
+ ChangeLog         | 17 +++++++++++++++++
+ src/vte-private.h |  4 ++--
+ src/vte.c         | 32 ++++++++++++++++----------------
+ src/vteseq.c      | 55 ++++++++++++++++++++++++++++---------------------------
+ 4 files changed, 63 insertions(+), 45 deletions(-)
+
+commit aabb10fb643c6625afbe7c369f8e67e3f8314861
+Author: Behdad Esfahbod 
+Date:   2008-08-13 22:42:47 +0000
+
+    Fix uninitialized cursor warning. Setting to NULL sounds right to me.
+    
+    2008-08-13  Behdad Esfahbod  
+    
+            * src/vte.c (regex_match_clear_cursor),
+            (vte_terminal_set_cursor_from_regex_match):
+            Fix uninitialized cursor warning.  Setting to NULL sounds
+            right to me.  ChPe?
+    
+    
+    svn path=/trunk/; revision=2085
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 8 +++++++-
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+commit 30213a63183d6f07589051469d80d406b698a8f3
+Author: Behdad Esfahbod 
+Date:   2008-08-13 22:37:22 +0000
+
+    Remove useless "inline" decorators. Gcc has been rightfully complaining.
+    
+    2008-08-13  Behdad Esfahbod  
+    
+            * src/vte.c: Remove useless "inline" decorators.  Gcc has been
+            rightfully complaining.
+    
+    
+    svn path=/trunk/; revision=2084
+
+ ChangeLog |  5 +++++
+ src/vte.c | 12 ++++++------
+ 2 files changed, 11 insertions(+), 6 deletions(-)
+
+commit 78e20d9e6ded635c1c60f84f4d8e0c9c5d553662
+Author: Behdad Esfahbod 
+Date:   2008-08-13 22:21:12 +0000
+
+    Bug 546940 – Crash when selecting text
+    
+    2008-08-13  Behdad Esfahbod  
+    
+            Bug 546940 – Crash when selecting text
+    
+            * src/vte.c (vte_terminal_extend_selection): Fix crash with 64-bit
+            systems.  Note to self:
+    
+                    unsigned int len = 0;
+                    long i = len - 1;
+                    assert (i < 0);
+    
+            fails on 64-bit systems.
+    
+    
+    svn path=/trunk/; revision=2083
+
+ ChangeLog | 13 +++++++++++++
+ src/vte.c | 17 +++++++++--------
+ 2 files changed, 22 insertions(+), 8 deletions(-)
+
+commit cc7d8be81cc044c23c406e02ed8bd7ce1045cda7
+Author: Djihed Afifi 
+Date:   2008-08-06 08:33:19 +0000
+
+    Updated Arabic Translation by Khaled Hosny.
+    
+    svn path=/trunk/; revision=2082
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit a6b2d703da2bbcfdc52dcdbf4494a9dc737cb47e (tag: vte_0_17_1)
+Author: Behdad Esfahbod 
+Date:   2008-08-05 10:30:38 +0000
+
+    Released vte-0.17.1.
+    
+    2008-08-05  Behdad Esfahbod  
+    
+            Released vte-0.17.1.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.17.1.
+            Bumped libtool version to 12:0:3.
+    
+    
+    svn path=/trunk/; revision=2080
+
+ ChangeLog    |  9 +++++++++
+ NEWS         | 27 +++++++++++++++++++++++++++
+ configure.in | 10 +++++-----
+ 3 files changed, 41 insertions(+), 5 deletions(-)
+
+commit 795f95181b797396950abe1e9f466313d9edd389
+Author: Behdad Esfahbod 
+Date:   2008-08-05 06:33:47 +0000
+
+    Bug 546366 – hard to select last tab char on a line
+    
+    2008-08-05  Behdad Esfahbod  
+    
+            Bug 546366 – hard to select last tab char on a line
+    
+            * src/vte.c (vte_terminal_extend_selection):
+            * src/vteseq.c (vte_sequence_handler_ta):
+            Handle fragment cells.
+    
+    
+    svn path=/trunk/; revision=2079
+
+ ChangeLog    |  8 ++++++++
+ src/vte.c    | 22 ++++++++--------------
+ src/vteseq.c |  2 +-
+ 3 files changed, 17 insertions(+), 15 deletions(-)
+
+commit b5c37ee01646dc533d978ca9708eb0d2a6ad1d28
+Author: Behdad Esfahbod 
+Date:   2008-08-05 05:51:08 +0000
+
+    Bug 545924 – tab characters not handled correctly after ncurses clear
+    
+    2008-08-05  Behdad Esfahbod  
+    
+            Bug 545924 – tab characters not handled correctly after ncurses clear
+            Patch from Patryk Zawadzki
+    
+            * src/vteseq.c (vte_sequence_handler_ta): Ignore empty cells at end of
+            line.
+    
+    
+    svn path=/trunk/; revision=2078
+
+ ChangeLog    |  8 ++++++++
+ src/vteseq.c | 16 ++++++++++++++++
+ 2 files changed, 24 insertions(+)
+
+commit 4eb7507c90c8803ebaa14dfbf9ed7c8186219b0e
+Author: Djihed Afifi 
+Date:   2008-07-29 01:37:38 +0000
+
+    Updated Arabic Translation by Khaled Hosny.
+    
+    svn path=/trunk/; revision=2077
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit a24eab7c0d927f35e37e72d1fe415433aeb32bab
+Author: Behdad Esfahbod 
+Date:   2008-07-13 23:03:01 +0000
+
+    Bug 542795 – VTE_CJK_WIDTH don't work
+    
+    2008-07-14  Behdad Esfahbod  
+    
+            Bug 542795 – VTE_CJK_WIDTH don't work
+    
+            * src/iso2022.c (_vte_iso2022_ambiguous_width): Fix VTE_CJK_WIDTH env
+            handling.
+    
+    
+    svn path=/trunk/; revision=2076
+
+ ChangeLog     | 7 +++++++
+ src/iso2022.c | 4 ++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 233a6fb058dab427e78bb4bbfa2763bd552acc14
+Author: Yannig MARCHEGAY 
+Date:   2008-07-02 15:09:02 +0000
+
+    Updated Occitan translation
+    
+    svn path=/trunk/; revision=2075
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 893f7473321bb1914c76b4e64f00a935083df15f
+Author: Yannig MARCHEGAY 
+Date:   2008-07-02 15:08:34 +0000
+
+    Updated Occitan translation
+    
+    svn path=/trunk/; revision=2074
+
+ po/oc.po | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+commit 19687441ca358e11e5f1334516862ba09cfe223c
+Author: Christian Persch 
+Date:   2008-06-27 19:05:10 +0000
+
+    Bug 399744 – Hide more font-aa implementation details
+    
+    svn path=/trunk/; revision=2073
+
+ ChangeLog    |  7 +++++++
+ src/vtexft.c | 12 +++++++++++-
+ 2 files changed, 18 insertions(+), 1 deletion(-)
+
+commit df24a29142fd8d825d3eb5ec123f3e83ea1c8e1e
+Author: Christian Persch 
+Date:   2008-06-27 16:51:18 +0000
+
+    Bug 510903 – use gtk-cursor-blink setting
+    
+    svn path=/trunk/; revision=2072
+
+ ChangeLog                      |  11 ++
+ doc/reference/tmpl/vte.sgml    |  18 ++++
+ doc/reference/vte-sections.txt |   2 +
+ src/vte-private.h              |  10 +-
+ src/vte.c                      | 236 ++++++++++++++++++++++++++++-------------
+ src/vte.h                      |  13 ++-
+ 6 files changed, 209 insertions(+), 81 deletions(-)
+
+commit 51a751d3515008aefd6080e827a7fe59d251d1fd
+Author: Christian Persch 
+Date:   2008-06-26 18:45:41 +0000
+
+    Remove duplicate declarations.
+    
+    svn path=/trunk/; revision=2071
+
+ ChangeLog | 5 +++++
+ src/vte.h | 2 --
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+commit 6f037ba50d22bb7d1d6c7acaf0fec7df824f489f
+Author: Christian Persch 
+Date:   2008-06-26 18:37:59 +0000
+
+    Fix the Use of intltool 0.40.0.
+    
+    svn path=/trunk/; revision=2070
+
+ ChangeLog   | 6 ++++++
+ Makefile.am | 5 ++---
+ autogen.sh  | 9 ++++++---
+ 3 files changed, 14 insertions(+), 6 deletions(-)
+
+commit af4cc7446b6d563baedbedc39d46d9911c5509c9
+Author: Christian Persch 
+Date:   2008-06-26 18:32:56 +0000
+
+    Disallow direct inclusion of vteversion.h.
+    
+    svn path=/trunk/; revision=2069
+
+ ChangeLog           | 5 +++++
+ src/vteversion.h.in | 4 ++++
+ 2 files changed, 9 insertions(+)
+
+commit c4b48e67fca6adb72ce5cba9c2ee3d0d4956a807
+Author: Christian Persch 
+Date:   2008-06-26 18:32:49 +0000
+
+    Use glib-mkenums to generate the enum types.
+    
+    svn path=/trunk/; revision=2068
+
+ ChangeLog                      | 10 ++++++++++
+ configure.in                   |  7 +++++++
+ doc/reference/Makefile.am      |  2 +-
+ src/Makefile.am                | 29 ++++++++++++++++++++++++-----
+ src/vte.c                      | 38 --------------------------------------
+ src/vte.h                      |  7 +++++--
+ src/vtetypebuiltins.c.template | 40 ++++++++++++++++++++++++++++++++++++++++
+ src/vtetypebuiltins.h.template | 28 ++++++++++++++++++++++++++++
+ 8 files changed, 115 insertions(+), 46 deletions(-)
+
+commit fd64778a2c3cb991f9cff661cf35fa3830282ed7
+Author: Christian Persch 
+Date:   2008-06-26 17:56:54 +0000
+
+    Replace more gtk type macros with the gobject ones. Bug #539130.
+    
+    svn path=/trunk/; revision=2067
+
+ ChangeLog       |  9 +++++++++
+ src/reaper.h    |  8 ++++----
+ src/vte.c       |  8 ++++----
+ src/vteaccess.h | 40 ++++++++++++++--------------------------
+ src/vtebg.h     |  8 ++++----
+ 5 files changed, 35 insertions(+), 38 deletions(-)
+
+commit b2d516f19a134b87cc79b1745da522cb2e78c0b2
+Author: Christian Persch 
+Date:   2008-06-25 16:51:19 +0000
+
+    Bug 540182 – crash in geany with vte trunk
+    Make sure that match_attributes always exist even if there haven't been any matches added.
+    
+    svn path=/trunk/; revision=2066
+
+ ChangeLog | 11 +++++++++--
+ src/vte.c | 10 ++++------
+ 2 files changed, 13 insertions(+), 8 deletions(-)
+
+commit 6cc1167abedd3254a480cb64361a33cdc2af3e5d
+Author: Christian Persch 
+Date:   2008-06-24 18:12:41 +0000
+
+    Force a redraw when changing the allow-bold property. Bug #535552.
+    
+    svn path=/trunk/; revision=2065
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 6 ++++++
+ 2 files changed, 12 insertions(+)
+
+commit a35f1d6978906b526d2e69b50e11bfb5b523388a
+Author: Christian Persch 
+Date:   2008-06-24 18:12:32 +0000
+
+    Bug 535469 – support named cursors on matches
+    
+    svn path=/trunk/; revision=2064
+
+ ChangeLog                      |   8 +++
+ doc/reference/tmpl/vte.sgml    |  10 +++
+ doc/reference/vte-sections.txt |   1 +
+ src/vte-private.h              |  15 ++++-
+ src/vte.c                      | 148 +++++++++++++++++++++++++++++------------
+ src/vte.h                      |   2 +
+ 6 files changed, 140 insertions(+), 44 deletions(-)
+
+commit 624a6898f8e1bfe0cd716a33efc34db6899cff75
+Author: Christian Persch 
+Date:   2008-06-24 18:12:23 +0000
+
+    Bug 418918 – Switch to GRegex
+    
+    svn path=/trunk/; revision=2063
+
+ ChangeLog                      |   9 +
+ doc/reference/tmpl/vte.sgml    |  11 ++
+ doc/reference/vte-sections.txt |   1 +
+ src/vte-private.h              |  16 +-
+ src/vte.c                      | 361 ++++++++++++++++++++++++++++++++++++++---
+ src/vte.h                      |   5 +-
+ 6 files changed, 376 insertions(+), 27 deletions(-)
+
+commit 5dd65933082dd70af93c9350ebc88c177fee7901
+Author: Christian Persch 
+Date:   2008-06-24 18:12:12 +0000
+
+    Implement the set_scroll_adjustments signal so one can add a VteTerminal to a GtkScrolledWindow. Bug #535467.
+    
+    svn path=/trunk/; revision=2062
+
+ ChangeLog                   |  7 +++++
+ doc/reference/tmpl/vte.sgml |  9 ++++++
+ src/vte.c                   | 67 +++++++++++++++++++++++++++++----------------
+ src/vte.h                   |  5 +++-
+ 4 files changed, 64 insertions(+), 24 deletions(-)
+
+commit 460fcb3becf82346c62cedfde23bace926b5b112
+Author: Christian Persch 
+Date:   2008-06-24 18:12:02 +0000
+
+    Bug 535468 – need version check macros
+    
+    svn path=/trunk/; revision=2061
+
+ ChangeLog                          | 12 ++++++++
+ configure.in                       | 26 +++++++++++++----
+ doc/reference/tmpl/vteversion.sgml | 59 ++++++++++++++++++++++++++++++++++++++
+ doc/reference/vte-sections.txt     | 10 +++++++
+ doc/reference/vte.types            |  1 +
+ src/Makefile.am                    |  6 ++--
+ src/vte.h                          |  2 ++
+ src/vteversion.h.in                | 31 ++++++++++++++++++++
+ 8 files changed, 139 insertions(+), 8 deletions(-)
+
+commit 089b2a4ec92e6c2b0ade68c38b2d41c55335023d
+Author: Kjartan Maraas 
+Date:   2008-06-21 04:23:28 +0000
+
+    Don't use GTK_CHECK* macros.
+    
+    2008-06-21  Kjartan Maraas  
+    
+            * src/vte.h: Don't use GTK_CHECK* macros.
+    
+    svn path=/trunk/; revision=2060
+
+ ChangeLog |  4 ++++
+ src/vte.h | 18 +++++++++---------
+ 2 files changed, 13 insertions(+), 9 deletions(-)
+
+commit 8023bb999cd894a16fabca46c6ace021a8b19933
+Author: Yannig MARCHEGAY 
+Date:   2008-06-15 07:46:49 +0000
+
+    Updated Occitan translation
+    
+    svn path=/trunk/; revision=2059
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit e1617b3e8fa52c51a1ff1b84b5c0966a1b797f6f
+Author: Yannig MARCHEGAY 
+Date:   2008-06-15 07:46:02 +0000
+
+    Updated Occitan translation
+    
+    svn path=/trunk/; revision=2058
+
+ po/oc.po | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+commit b325f47f4ff26ead5e8065d33814ca43f85167bc
+Author: Djihed Afifi 
+Date:   2008-06-11 21:42:42 +0000
+
+    Updated Arabic Translation by Khaled Hosny.
+    
+    svn path=/trunk/; revision=2057
+
+ po/ChangeLog |  4 ++++
+ po/ar.po     | 30 +++++++++++++-----------------
+ 2 files changed, 17 insertions(+), 17 deletions(-)
+
+commit b0491748ed63846200e01b458d5aa2f30b8d3bb7
+Author: Christian Persch 
+Date:   2008-06-04 18:57:24 +0000
+
+            Bug 515972 – Bold black is black in vte's default palette
+    
+            * src/vte.c: (vte_terminal_set_colors): Correctly set the value of
+            'bold black' in the palette. Patch by Santtu Lakkala.
+    
+    svn path=/trunk/; revision=2056
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 725da8b7117cc8539bfc8c946ebe4220a979c50c (tag: vte_0_16_14)
+Author: Behdad Esfahbod 
+Date:   2008-06-04 18:38:27 +0000
+
+    Released vte-0.16.14.
+    
+    2008-06-04  Behdad Esfahbod  
+    
+            Released vte-0.16.14.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.14.
+            Bumped libtool version to 11:18:2.
+    
+    
+    svn path=/trunk/; revision=2054
+
+ ChangeLog    |  9 +++++++++
+ NEWS         | 12 ++++++++++++
+ configure.in |  4 ++--
+ 3 files changed, 23 insertions(+), 2 deletions(-)
+
+commit 6cc2912d303cd13184ab14112787ff9557e83edd
+Author: Behdad Esfahbod 
+Date:   2008-06-04 18:30:20 +0000
+
+    Bug 536632 – vte build failure in ring.c:210: error: expected expression
+    
+    2008-06-04  Behdad Esfahbod  
+    
+            Bug 536632 – vte build failure in ring.c:210: error: expected
+            expression before 'do'
+    
+            * src/debug.h:
+            * src/ring.c:
+            * src/ring.h:
+            With latest glib (after bug #519026), g_error is expanding to
+            "do {...} while(0)" instead of "{...}".  This breaks build in
+            debugging mode.  Use g_critical instead.  Also add some
+            G_STMT_START/END to some macros.
+    
+    
+    svn path=/trunk/; revision=2053
+
+ ChangeLog   | 13 +++++++++++++
+ src/debug.h |  2 +-
+ src/ring.c  |  2 +-
+ src/ring.h  | 18 +++++++++---------
+ 4 files changed, 24 insertions(+), 11 deletions(-)
+
+commit 1102739ce33d9e0b29da553ec127396a4322ea55
+Author: Chris Wilson 
+Date:   2008-05-29 11:50:13 +0000
+
+    Replace previous commit with the better patch by Christian Persch.
+    
+    2008-05-29  Chris Wilson  
+    
+        * src/pty.c (merge_environ): Replace previous commit with the
+        better patch by Christian Persch.
+    
+    
+    svn path=/trunk/; revision=2052
+
+ ChangeLog | 5 +++++
+ src/pty.c | 9 +++------
+ 2 files changed, 8 insertions(+), 6 deletions(-)
+
+commit 697d6005bcb227f94389b444dec25246dc636602
+Author: Chris Wilson 
+Date:   2008-05-29 11:46:29 +0000
+
+    Fix bug in patch to use g_listenv() as it only returns the variable name
+    
+    2008-05-29  Chris Wilson  
+    
+        * src/pty.c (merge_environ): Fix bug in patch to use g_listenv()
+        as it only returns the variable name and we need to use g_getenv()
+        to retrieve its value.
+    
+    
+    svn path=/trunk/; revision=2051
+
+ ChangeLog | 6 ++++++
+ src/pty.c | 9 ++++-----
+ 2 files changed, 10 insertions(+), 5 deletions(-)
+
+commit bcddb79198f3a9591c0aa49fe36e82b281017447
+Author: Behdad Esfahbod 
+Date:   2008-05-28 00:38:15 +0000
+
+    Oops. Fix thinko in last commit.
+    
+    2008-05-27  Behdad Esfahbod  
+    
+            * src/iso2022.c (_vte_iso2022_ambiguous_width): Oops.  Fix thinko
+            in last commit.
+    
+    
+    svn path=/trunk/; revision=2050
+
+ ChangeLog     | 5 +++++
+ src/iso2022.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 6e0de06c28aeace78b017c6a23ae5f0afac0aa49
+Author: Behdad Esfahbod 
+Date:   2008-05-27 18:56:34 +0000
+
+    Bug 535022 – ambiguous width in utf8 locale
+    
+    2008-05-27  Behdad Esfahbod  
+    
+            Bug 535022 – ambiguous width in utf8 locale
+    
+            * src/iso2022.c (_vte_iso2022_ambiguous_width): Recognize
+            env var settings VTE_CJK_WIDTH=narrow and VTE_CJK_WIDTH=wide.
+            Any other value means "auto" based on locale, as it was doing
+            previously.
+    
+    
+    svn path=/trunk/; revision=2049
+
+ ChangeLog     |  9 +++++++++
+ src/iso2022.c | 11 +++++++++--
+ 2 files changed, 18 insertions(+), 2 deletions(-)
+
+commit 3e2d0ba9ffe54588e492c88da1b8352fd1a75d45
+Author: Behdad Esfahbod 
+Date:   2008-05-23 20:32:37 +0000
+
+    Update tmpls
+    
+    svn path=/trunk/; revision=2048
+
+ doc/reference/tmpl/reaper.sgml     | 32 --------------------------------
+ doc/reference/tmpl/vte-unused.sgml | 30 ++++++++++++++++++++++++++++++
+ 2 files changed, 30 insertions(+), 32 deletions(-)
+
+commit e66bae863d1f645c039c8ca390e5458d8622a230
+Author: Djihed Afifi 
+Date:   2008-05-22 23:00:52 +0000
+
+    Updated Arabic Translation by Djihed Afifi.
+    
+    svn path=/trunk/; revision=2047
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit c0d797cd0610dcf8954c7444101e0e30ad97c12e
+Author: Chris Wilson 
+Date:   2008-05-21 07:36:14 +0000
+
+    Silence compiler warning about using environ as a local variable name.
+    
+    2008-05-21  Chris Wilson  
+    
+        * src/pty.c (merge_environ): Silence compiler warning about using
+        environ as a local variable name.
+    
+    
+    svn path=/trunk/; revision=2046
+
+ ChangeLog |  5 +++++
+ src/pty.c | 13 +++++++------
+ 2 files changed, 12 insertions(+), 6 deletions(-)
+
+commit 6daf749a9a5aa37ff946d4142d9b4492fb25cc3e
+Author: Richard Hult 
+Date:   2008-05-21 07:32:36 +0000
+
+    Bug 534148 – Use g_listenv() instead of environ
+    
+    2008-05-21  Richard Hult  
+    
+        Bug 534148 – Use g_listenv() instead of environ
+    
+        * src/pty.c: (merge_environ): Use g_listenv() instead of
+        non-portable environ extern.
+    
+    
+    svn path=/trunk/; revision=2045
+
+ ChangeLog | 7 +++++++
+ src/pty.c | 6 ++++--
+ 2 files changed, 11 insertions(+), 2 deletions(-)
+
+commit b88d37fa384aec28dc272222adfcff73885fcd1e
+Author: Kjartan Maraas 
+Date:   2008-05-19 13:07:31 +0000
+
+    automake doesn't like to substitute more than one variable at a time.
+    
+    2008-05-19  Kjartan Maraas  
+    
+            * configure.in: automake doesn't like to substitute more
+            than one variable at a time.
+            * src/vtedraw.c: (_vte_draw_get_using_fontconfig):
+            * src/vtetc.c: (_vte_termcap_find_boolean):
+            Fix two compiler warnings.
+    
+    svn path=/trunk/; revision=2044
+
+ ChangeLog     | 8 ++++++++
+ configure.in  | 3 ++-
+ src/vtedraw.c | 2 +-
+ src/vtetc.c   | 2 +-
+ 4 files changed, 12 insertions(+), 3 deletions(-)
+
+commit 65b97373f0d1772f7191622d8136be9467e1cd69
+Author: Djihed Afifi 
+Date:   2008-05-19 01:17:13 +0000
+
+    Updated Arabic Translation by Djihed Afifi.
+    
+    svn path=/trunk/; revision=2043
+
+ po/ChangeLog |  4 ++++
+ po/ar.po     | 32 ++++++++++++++++----------------
+ 2 files changed, 20 insertions(+), 16 deletions(-)
+
+commit 22b930d866de5b1dd9d025e0c63bde3612d11d2d
+Author: Chris Wilson 
+Date:   2008-05-09 21:56:55 +0000
+
+    Add the text to draw to the debug output.
+    
+    2008-05-09  Chris Wilson  
+    
+        * src/vtedraw.c (_vte_draw_text):
+            Add the text to draw to the debug output.
+    
+    
+    svn path=/trunk/; revision=2042
+
+ ChangeLog     |  5 +++++
+ src/vtedraw.c | 17 +++++++++++++----
+ 2 files changed, 18 insertions(+), 4 deletions(-)
+
+commit a51119aca141b00564b680472d9cbb56311ec40e
+Author: Chris Wilson 
+Date:   2008-05-09 19:50:37 +0000
+
+    Fix "GLib-CRITICAL **: g_io_add_watch_full: assertion `channel != NULL'
+    
+    2008-05-09  Chris Wilson  
+    
+        Fix "GLib-CRITICAL **: g_io_add_watch_full: assertion
+                               `channel != NULL' failed"
+    
+        * src/debug.c (_vte_debug_parse_string):
+        * src/debug.h:
+        * src/vte-private.h:
+        * src/vte.c (vte_terminal_emit_adjustment_changed),
+        (_vte_terminal_adjust_adjustments_full),
+        (vte_terminal_scroll_lines), (vte_terminal_maybe_scroll_to_bottom),
+        (_vte_terminal_insert_char), (vte_terminal_catch_child_exited),
+        (mark_input_source_invalid), (_vte_terminal_connect_pty_read),
+        (mark_output_source_invalid), (_vte_terminal_connect_pty_write),
+        (_vte_terminal_disconnect_pty_read),
+        (_vte_terminal_disconnect_pty_write), (_vte_terminal_fork_basic),
+        (vte_terminal_eof), (_vte_terminal_enable_input_source),
+        (vte_terminal_io_read), (vte_terminal_handle_scroll),
+        (vte_terminal_finalize), (vte_terminal_class_init),
+        (vte_terminal_set_pty), (process_timeout), (update_repeat_timeout),
+        (update_timeout):
+        It was possible for _vte_terminal_enable_input_source() to be called
+        after the input closed with G_IO_HUP. The minimal change would just
+        have been to add a guard to check the pty_master was still valid
+        before reattaching the source. Instead I removed the redundant
+        duplication of the input and output channels and added lots of
+        debugging.
+    
+    
+    svn path=/trunk/; revision=2041
+
+ ChangeLog         |  28 +++++++++
+ src/debug.c       |   3 +
+ src/debug.h       |   3 +-
+ src/vte-private.h |   5 +-
+ src/vte.c         | 168 ++++++++++++++++++++++++++----------------------------
+ 5 files changed, 116 insertions(+), 91 deletions(-)
+
+commit ef4e36154eabf2d74bc1f48db8ef095cec02cbc5
+Author: Chris Wilson 
+Date:   2008-05-08 15:23:16 +0000
+
+    Bug 516869 – vte displays nothing on GTK+/DirectFB
+    
+    2008-05-08  Chris Wilson  
+    
+        Bug 516869 – vte displays nothing on GTK+/DirectFB
+    
+        Original patch by Jérémy Bobbio.
+    
+        * src/vte.c (vte_terminal_class_init), (update_regions),
+        (update_repeat_timeout), (update_timeout):
+        gdk_window_process_all_updates() is ineffective on the gtk+-directfb
+        and gtk+-quartz backends, so in order to process updates immediately
+        one must call gdk_window_process_updates() on the desired GdkWindows
+        instead.
+    
+    
+    svn path=/trunk/; revision=2040
+
+ ChangeLog | 13 +++++++++++++
+ src/vte.c |  9 ++++++++-
+ 2 files changed, 21 insertions(+), 1 deletion(-)
+
+commit 00caa22356c2810242af3b6a3677526ac8a60f33
+Author: Yair Hershkovitz 
+Date:   2008-04-20 15:58:09 +0000
+
+    updated hebrew translation
+    
+    svn path=/trunk/; revision=2039
+
+ po/ChangeLog |  4 ++++
+ po/he.po     | 40 +++++++++++++++++++++-------------------
+ 2 files changed, 25 insertions(+), 19 deletions(-)
+
+commit 68852ecef2ccb2fc02e4cc540c5ef775d056721a
+Author: Eskild Hustvedt 
+Date:   2008-03-31 13:45:23 +0000
+
+    Updated Norwegian Nynorsk translation
+    
+    svn path=/trunk/; revision=2038
+
+ po/ChangeLog |  4 ++++
+ po/nn.po     | 75 +++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 45 insertions(+), 34 deletions(-)
+
+commit 4c2e67286eee99b9a54805a7982a80228e0843f7
+Author: Baris Cicek 
+Date:   2008-03-31 11:31:54 +0000
+
+    Updated Turkish Translation
+    
+    svn path=/trunk/; revision=2037
+
+ po/ChangeLog |  4 ++++
+ po/tr.po     | 73 ++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 41 insertions(+), 36 deletions(-)
+
+commit c1755009386ff482a00fea751a04853dab3d28ce
+Author: Ani Peter 
+Date:   2008-03-11 04:41:13 +0000
+
+    Updated Malayalam Translation
+    
+    svn path=/trunk/; revision=2036
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 80ade1073c7f544cc88eafe2b3e9a8c82c7a041c
+Author: Ani Peter 
+Date:   2008-03-11 04:41:01 +0000
+
+    Updated Malayalam Translation
+    
+    svn path=/trunk/; revision=2035
+
+ po/ml.po | 99 +++++++++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 54 insertions(+), 45 deletions(-)
+
+commit 061d6d6a3cee533f6439a85fb6e5e137784c2efa (tag: vte_0_16_13)
+Author: Behdad Esfahbod 
+Date:   2008-03-10 20:32:45 +0000
+
+    Released vte-0.16.13.
+    
+    2008-03-10  Behdad Esfahbod  
+    
+            Released vte-0.16.13.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.13.
+            Bumped libtool version to 11:17:2.
+    
+    
+    svn path=/trunk/; revision=2033
+
+ ChangeLog    | 9 +++++++++
+ NEWS         | 8 ++++++++
+ configure.in | 4 ++--
+ 3 files changed, 19 insertions(+), 2 deletions(-)
+
+commit d1e9eb3d946938a6eeaa65032f23bd368a532ed0
+Author: Gabor Kelemen 
+Date:   2008-03-10 01:36:49 +0000
+
+    Translation updated
+    
+    2008-03-10  Gabor Kelemen  
+    
+            * hu.po: Translation updated
+    
+    
+    svn path=/trunk/; revision=2032
+
+ po/ChangeLog |  4 ++++
+ po/hu.po     | 59 ++++++++++++++++++++++++++++-------------------------------
+ 2 files changed, 32 insertions(+), 31 deletions(-)
+
+commit c98754ce7d9d0918a694b1c4fb304220b0ae72ba
+Author: Yannig MARCHEGAY 
+Date:   2008-03-08 09:34:15 +0000
+
+    Updated Occitan translation
+    
+    svn path=/trunk/; revision=2031
+
+ po/oc.po | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit bbc876ce14e5b2e57b6c317b6323fa83ef604d9f
+Author: Marcel Telka 
+Date:   2008-03-08 09:01:30 +0000
+
+    Updated Slovak translation.
+    
+    2008-03-08  Marcel Telka  
+    
+            * sk.po: Updated Slovak translation.
+    
+    svn path=/trunk/; revision=2030
+
+ po/ChangeLog |  4 ++++
+ po/sk.po     | 74 +++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 42 insertions(+), 36 deletions(-)
+
+commit 09d03d12fa7d9bf0f781acd8c57ba03b4dbf851d
+Author: Rahul Bhalerao 
+Date:   2008-03-03 16:18:00 +0000
+
+    Updated Marathi Translations.
+    
+    svn path=/trunk/; revision=2029
+
+ po/ChangeLog |  4 +++
+ po/mr.po     | 80 +++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 46 insertions(+), 38 deletions(-)
+
+commit 20261c75ac0d2b54e5bfdd1a0d1f062f9b0094d2
+Author: Behdad Esfahbod 
+Date:   2008-02-20 18:39:08 +0000
+
+    Bug 517709 – VTE's pty.c makes 4096 getrlimit calls when it only needs
+    
+    2008-02-20  Behdad Esfahbod  
+    
+            Bug 517709 – VTE's pty.c makes 4096 getrlimit calls when it only needs
+            one
+    
+            * src/pty.c (_vte_pty_start_helper): Only close fds 0, 1, and 2.
+            gnome-pty-helper closes all fds anyway.
+    
+    
+    svn path=/trunk/; revision=2028
+
+ ChangeLog | 8 ++++++++
+ src/pty.c | 9 ++++-----
+ 2 files changed, 12 insertions(+), 5 deletions(-)
+
+commit 29ec8603290a2dd158e85573ac1766a1efd069ab
+Author: Yannig MARCHEGAY 
+Date:   2008-02-19 21:33:40 +0000
+
+    Updated Occitan translation
+    
+    svn path=/trunk/; revision=2027
+
+ po/oc.po | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+commit a1cd441aa146c432397ec627b6053a01d5cb1df6
+Author: Petr Kovář 
+Date:   2008-02-16 15:25:41 +0000
+
+    cs.po: Updated Czech translation by Pavel Sefranek.
+    
+    svn path=/trunk/; revision=2026
+
+ po/ChangeLog |  4 ++++
+ po/cs.po     | 78 ++++++++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 48 insertions(+), 34 deletions(-)
+
+commit cf13ae591f4fa007903e09671967dc7d334dfdde
+Author: Pawan Chitrakar 
+Date:   2008-02-14 09:40:36 +0000
+
+    Updated Nepali Translation
+    
+    svn path=/trunk/; revision=2025
+
+ po/ChangeLog |   4 +++
+ po/ne.po     | 102 +++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 58 insertions(+), 48 deletions(-)
+
+commit 7b516616cb67b18e7512a20b1ea20c488c3ea2e5
+Author: Behdad Esfahbod 
+Date:   2008-02-08 19:50:41 +0000
+
+    Remove unneeded #include 
+    
+    2008-02-08  Behdad Esfahbod  
+    
+            * src/vte.c:
+            * src/vteapp.c:
+            * src/vtergb.c:
+            Remove unneeded #include 
+    
+    
+    svn path=/trunk/; revision=2024
+
+ ChangeLog    | 7 +++++++
+ src/vte.c    | 1 -
+ src/vteapp.c | 3 ---
+ src/vtergb.c | 1 -
+ 4 files changed, 7 insertions(+), 5 deletions(-)
+
+commit ffe449e246f87db68cc647c8928940a1141dccf2
+Author: Yannig MARCHEGAY 
+Date:   2008-02-04 12:20:50 +0000
+
+    Updated Occitan translation
+    
+    svn path=/trunk/; revision=2023
+
+ po/oc.po | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+commit 81e5e34d6efdfd9425682e7b5caa3bcec4b2a007
+Author: Djihed Afifi 
+Date:   2008-01-31 08:23:11 +0000
+
+    Updated Arabic Translation by Djihed Afifi.
+    
+    svn path=/trunk/; revision=2022
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 458d15993513afc79e750c89788e236635e63b71
+Author: Inaki Larranaga Murgoitio 
+Date:   2008-01-14 16:12:08 +0000
+
+    Updated Basque translation.
+    
+    2008-01-14  Inaki Larranaga Murgoitio  
+    
+            * eu.po: Updated Basque translation.
+    
+    
+    svn path=/trunk/; revision=2021
+
+ po/ChangeLog | 13 +++++++++----
+ po/eu.po     | 63 ++++++++++++++++++++++++++++--------------------------------
+ 2 files changed, 38 insertions(+), 38 deletions(-)
+
+commit c1d18de1ebc5f6b061e9578df418db3a5a04e981
+Author: Behdad Esfahbod 
+Date:   2008-01-09 20:48:55 +0000
+
+    Bug 449131 – Wrong gettext domain
+    
+    2008-01-09  Behdad Esfahbod  
+    
+            Bug 449131 – Wrong gettext domain
+    
+            * src/pty.c:
+            * src/reaper.c (vte_reaper_class_init):
+            * src/trie.c:
+            * src/vtebg.c (vte_bg_class_init):
+            * src/vteglyph.c:
+            Oops.  Fix all remaining ones too.
+    
+    
+    svn path=/trunk/; revision=2020
+
+ ChangeLog      | 11 +++++++++++
+ src/pty.c      |  7 +------
+ src/reaper.c   |  5 ++++-
+ src/trie.c     |  7 +------
+ src/vtebg.c    |  5 ++++-
+ src/vteglyph.c |  8 +-------
+ 6 files changed, 22 insertions(+), 21 deletions(-)
+
+commit c971ab2e546475a681f5df9f7e3e13e5dc089c06 (tag: vte_0_16_12)
+Author: Behdad Esfahbod 
+Date:   2008-01-07 21:51:00 +0000
+
+    Released vte-0.16.12.
+    
+    2008-01-07  Behdad Esfahbod  
+    
+            Released vte-0.16.12.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.12.
+            Bumped libtool version to 11:16:2.
+    .
+    
+    svn path=/trunk/; revision=2018
+
+ ChangeLog    | 9 +++++++++
+ NEWS         | 7 +++++++
+ configure.in | 4 ++--
+ 3 files changed, 18 insertions(+), 2 deletions(-)
+
+commit 5d00298851669b5112f3e9f620f64d6c139035fc
+Author: Yannig MARCHEGAY 
+Date:   2007-12-31 19:40:25 +0000
+
+    Updated Occitan translation
+    
+    svn path=/trunk/; revision=2017
+
+ po/ChangeLog |  5 ++++-
+ po/oc.po     | 45 +++++++++++++++++++++------------------------
+ 2 files changed, 25 insertions(+), 25 deletions(-)
+
+commit 3ed60bccd66dfbda6c2aa0ce3a5310b414d61e23
+Author: Chris Wilson 
+Date:   2007-12-21 08:57:28 +0000
+
+    Forget to save the ChangeLog entry before committing.
+    
+    
+    svn path=/trunk/; revision=2016
+
+ ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit db18d22ff40b71fd78236f3e549dd17c6040088d
+Author: Chris Wilson 
+Date:   2007-12-21 08:56:12 +0000
+
+    Bug 503164 – Drawing problems for VTE with gtk+-quartz
+    
+    2007-12-21  Chris Wilson  
+    
+        Bug 503164 – Drawing problems for VTE with gtk+-quartz
+    
+        * src/vte.c (vte_terminal_realize):
+        Continuing the saga, remove the fiddling with visibility state
+        during realize.
+    
+    
+    svn path=/trunk/; revision=2015
+
+ ChangeLog | 4 ++++
+ src/vte.c | 3 ---
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+commit f8980c6af417443b935ec27833ca18ab2028028d
+Author: Behdad Esfahbod 
+Date:   2007-12-18 07:27:11 +0000
+
+    Bug 449131 – Wrong gettext domain
+    
+    2007-12-18  Behdad Esfahbod  
+    
+            Bug 449131 – Wrong gettext domain
+    
+            * src/vte.c (vte_terminal_class_init): Use GETTEXT_DOMAIN in
+            bind_textdomain_codeset().
+    
+    
+    svn path=/trunk/; revision=2014
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 547529e9780b1341bd084f2491edd257f9b47293 (tag: vte_0_16_11)
+Author: Behdad Esfahbod 
+Date:   2007-12-17 18:45:58 +0000
+
+    Released vte-0.16.11.
+    
+    2007-12-17  Behdad Esfahbod  
+    
+            Released vte-0.16.11.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.11.
+            Bumped libtool version to 11:15:2.
+    .
+    
+    svn path=/trunk/; revision=2012
+
+ ChangeLog    | 9 +++++++++
+ NEWS         | 9 +++++++++
+ configure.in | 4 ++--
+ 3 files changed, 20 insertions(+), 2 deletions(-)
+
+commit bb591edae319a9c5228919307a3c21304f9b78cc
+Author: Chris Wilson 
+Date:   2007-12-17 13:27:39 +0000
+
+    Bug 503164 – Drawing problems for VTE with gtk+-quartz
+    
+    2007-12-17  Chris Wilson  
+    
+        Bug 503164 – Drawing problems for VTE with gtk+-quartz
+    
+        * src/vte.c (vte_terminal_init):
+        GdkQuartz does not generate GdkVisibilityNotify events and
+        so the terminal was never marked as unobscured, causing all
+        redraws to be discarded. Resolve this by initially setting the
+        terminal to be unobscured.
+    
+    
+    svn path=/trunk/; revision=2011
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c |  5 +++--
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+commit cf1dea5ec122dee4de1e85e352ac0d874679e88f
+Author: Behdad Esfahbod 
+Date:   2007-12-15 22:17:46 +0000
+
+    Fix typo in date.
+    
+    svn path=/trunk/; revision=2010
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit daca30a501ebac24e1d5fd98c31760e554f7c343
+Author: Behdad Esfahbod 
+Date:   2007-12-10 23:47:51 +0000
+
+    Bug 319687 – Pasting of text containing characters not in the terminal's
+    
+    2007-12-10  Behdad Esfahbod  
+    
+            Bug 319687 – Pasting of text containing characters not in the
+            terminal's encoding silently fails
+    
+            * src/vteconv.c (_vte_conv_open): Try to open converter with
+            transliteration.  Supported by GNU iconv and GLibc.
+    
+    
+    svn path=/trunk/; revision=2009
+
+ ChangeLog     | 8 ++++++++
+ src/vteconv.c | 7 ++++++-
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+commit 63f5b1e707d1fb450248c8cb335493aa5bb5b047 (tag: vte_0_16_10)
+Author: Behdad Esfahbod 
+Date:   2007-12-03 23:26:34 +0000
+
+    Released vte-0.16.10.
+    
+    2007-09-17  Behdad Esfahbod  
+    
+            Released vte-0.16.10.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.10.
+            Bumped libtool version to 11:14:2.
+    .
+    
+    svn path=/trunk/; revision=2007
+
+ ChangeLog    |  9 +++++++++
+ NEWS         | 33 +++++++++++++++++++++++++++++++++
+ configure.in |  4 ++--
+ 3 files changed, 44 insertions(+), 2 deletions(-)
+
+commit da8e37ff44c183bfc2b35846ad2ed25f85561edd
+Author: Chris Wilson 
+Date:   2007-12-03 11:00:08 +0000
+
+    Bug 497246 – Kill vte_iso2022_fragment_input
+    
+    2007-12-03  Chris Wilson  
+    
+        Bug 497246 – Kill vte_iso2022_fragment_input
+    
+        * src/iso2022.c (process_block), (_vte_iso2022_process):
+        Avoid the temporary allocation of the GArray holding the fragments
+        by processing each fragment as it is decyphered. This array is
+        allocated and grown for every single input chunk and is currently the
+        most frequent allocation made by vte.
+    
+    
+    svn path=/trunk/; revision=2006
+
+ ChangeLog     |  10 +++
+ src/iso2022.c | 272 ++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 142 insertions(+), 140 deletions(-)
+
+commit 947de5ebc2c050b337d15d03b90c319957ed4725
+Author: Chris Wilson 
+Date:   2007-12-03 10:41:49 +0000
+
+    Make is_cursor_key static.
+    
+    2007-12-03  Chris Wilson  
+    
+        * src/keymap.c: Make is_cursor_key static.
+    
+    
+    svn path=/trunk/; revision=2005
+
+ ChangeLog    | 4 ++++
+ src/keymap.c | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 8e2b518dc283781d8eca76c7bc5293d8049e083c
+Author: Behdad Esfahbod 
+Date:   2007-11-28 15:42:41 +0000
+
+    Fix distcheck.
+    
+    svn path=/trunk/; revision=2004
+
+ doc/reference/Makefile.am | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit c619908ba34f1cd82014dda34cc174001726aebd
+Author: Behdad Esfahbod 
+Date:   2007-11-28 14:00:21 +0000
+
+    Bug 412435 – Invalid variable name in Makefile.am
+    
+    2007-11-28  Behdad Esfahbod  
+    
+            Bug 412435 – Invalid variable name in Makefile.am
+    
+            * Makefile.am:
+            * configure.in:
+            * vte.spec.in:
+            Remove spec file and old convenience cvs make targets.
+    
+    
+    svn path=/trunk/; revision=2003
+
+ ChangeLog    |   9 +
+ Makefile.am  |  34 +---
+ configure.in |   1 -
+ vte.spec.in  | 596 -----------------------------------------------------------
+ 4 files changed, 10 insertions(+), 630 deletions(-)
+
+commit 1bb7abd1e685c3c797923445c5f0c5c25def19da
+Author: Behdad Esfahbod 
+Date:   2007-11-28 13:55:38 +0000
+
+    Bug 416561 – Rendering issue in VtePango
+    
+    2007-11-28  Behdad Esfahbod  
+    
+            Bug 416561 – Rendering issue in VtePango
+    
+            * src/vtepango.c (_vte_pango_draw_rectangle):
+            * src/vtepangox.c (_vte_pango_x_draw_rectangle):
+            gdk_draw_rectangle has slightly different semantics when
+            filling vs outlining.  Fix for that.
+    
+    
+    svn path=/trunk/; revision=2002
+
+ ChangeLog       | 9 +++++++++
+ src/vtepango.c  | 2 +-
+ src/vtepangox.c | 2 +-
+ 3 files changed, 11 insertions(+), 2 deletions(-)
+
+commit 7342439d31c138c8ea4db58694792f0d76bdb205
+Author: Behdad Esfahbod 
+Date:   2007-11-28 13:43:58 +0000
+
+    Bug 416558 – Rendering errors in VteFT2
+    
+    2007-11-28  Behdad Esfahbod  
+    
+            Bug 416558 – Rendering errors in VteFT2
+    
+            * src/vteft2.c (_vte_ft2_create): Disable Gtk+ double-buffering.
+    
+    
+    svn path=/trunk/; revision=2001
+
+ ChangeLog    | 6 ++++++
+ src/vteft2.c | 1 +
+ 2 files changed, 7 insertions(+)
+
+commit 3f805f36b4a7b04d27f10006b50e40315deed344
+Author: Behdad Esfahbod 
+Date:   2007-11-28 08:43:22 +0000
+
+    Add bugzilla address.
+    
+    svn path=/trunk/; revision=2000
+
+ README | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 02f28ec3d4e12776c4b4edd2984be29d74d815c5
+Author: Behdad Esfahbod 
+Date:   2007-11-28 08:41:59 +0000
+
+    Bug 403217 – Outdated README
+    
+    2007-11-28  Behdad Esfahbod  
+    
+            Bug 403217 – Outdated README
+    
+            * README: Rewrite.
+    
+    
+    svn path=/trunk/; revision=1999
+
+ ChangeLog |  6 ++++++
+ README    | 72 ++++++---------------------------------------------------------
+ 2 files changed, 12 insertions(+), 66 deletions(-)
+
+commit 364adbace135c4a97095876fba167f39e3cbedf5
+Author: Behdad Esfahbod 
+Date:   2007-11-27 12:36:18 +0000
+
+    Bug 118967 – single line scrolling with "Ctrl+Shift+ArrowUp/ArrowDown"
+    
+    2007-11-27  Behdad Esfahbod  
+    
+            Bug 118967 – single line scrolling with "Ctrl+Shift+ArrowUp/ArrowDown"
+            Patch from Mauricio and Mariano Suárez-Alvarez
+    
+            * src/vte.c (vte_terminal_scroll_lines),
+            (vte_terminal_scroll_pages), (vte_terminal_key_press):
+            Implement single-line scroll.
+    
+    
+    svn path=/trunk/; revision=1998
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 35 +++++++++++++++++++++++++++++++----
+ 2 files changed, 40 insertions(+), 4 deletions(-)
+
+commit c35a4a89b5bd9461b0b71532724a1d6e090f1ac9
+Author: Behdad Esfahbod 
+Date:   2007-11-27 11:05:26 +0000
+
+    Bug 353610 – Don't convert tab characters upon copying
+    
+    2007-11-27  Behdad Esfahbod  
+    
+            Bug 353610 – Don't convert tab characters upon copying
+    
+            * src/vte-private.h:
+            * src/vteseq.c (vte_sequence_handler_ta):
+            Smart tab handling to try to preserve tab character upong copying.
+            Also makes such smart tabs all-or-none selectable.
+    
+    
+    svn path=/trunk/; revision=1996
+
+ ChangeLog         |  9 +++++++++
+ src/vte-private.h | 10 ++++++----
+ src/vteseq.c      | 53 ++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 3 files changed, 63 insertions(+), 9 deletions(-)
+
+commit 01d3cf123dff70dbe60dfe025efb0810be0f15c3
+Author: Behdad Esfahbod 
+Date:   2007-11-27 10:27:07 +0000
+
+    Bug 499892 – strikethrough line is too high
+    
+    2007-11-27  Behdad Esfahbod  
+    
+            Bug 499892 – strikethrough line is too high
+    
+            * src/vte-private.h:
+            * src/vte.c (vte_terminal_apply_metrics), (vte_terminal_init),
+            (vte_terminal_draw_cells): Adjust underline/strikethrough thickness
+            and position based on pangofc's heuristics.
+    
+    
+    svn path=/trunk/; revision=1995
+
+ ChangeLog         |  9 +++++++++
+ src/vte-private.h |  4 ++++
+ src/vte.c         | 23 ++++++++++++++++-------
+ 3 files changed, 29 insertions(+), 7 deletions(-)
+
+commit d189aeaed54480f515429717a4f3b9e16102fafd
+Author: Behdad Esfahbod 
+Date:   2007-11-27 09:55:37 +0000
+
+    Make VTE_BACKEND=list list available backends to stderr.
+    
+    2007-11-27  Behdad Esfahbod  
+    
+            * src/vtedraw.c (_vte_draw_init_user): Make VTE_BACKEND=list list
+            available backends to stderr.
+    
+    
+    svn path=/trunk/; revision=1994
+
+ src/vteft2.c    | 2 +-
+ src/vtegl.c     | 2 +-
+ src/vtepango.c  | 2 +-
+ src/vtepangox.c | 2 +-
+ src/vtexft.c    | 2 +-
+ 5 files changed, 5 insertions(+), 5 deletions(-)
+
+commit e6ad1fa941d1e09a9dc996c8576c192c8f95b83a
+Author: Behdad Esfahbod 
+Date:   2007-11-27 08:39:58 +0000
+
+    Make VTE_BACKEND=list list available backends to stderr.
+    
+    2007-11-27  Behdad Esfahbod  
+    
+            * src/vtedraw.c (_vte_draw_init_user): Make VTE_BACKEND=list list
+            available backends to stderr.
+    
+    
+    svn path=/trunk/; revision=1993
+
+ ChangeLog     |  5 +++++
+ src/vtedraw.c | 22 ++++++++++++++++++++--
+ 2 files changed, 25 insertions(+), 2 deletions(-)
+
+commit 189ebe50ba75c213468348fa18cadf5e7a46390d
+Author: Behdad Esfahbod 
+Date:   2007-11-27 06:57:53 +0000
+
+    Bug 499891 – vte with opacity set, shows invisible chars
+    
+    2007-11-27  Behdad Esfahbod  
+    
+            Bug 499891 – vte with opacity set, shows invisible chars
+    
+            * src/vte.c (vte_terminal_draw_rows): Don't draw invisible chars.
+    
+    
+    svn path=/trunk/; revision=1992
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 10 ++++------
+ 2 files changed, 10 insertions(+), 6 deletions(-)
+
+commit fe8455ee4ee60614bd5d36c35f6aabafe6e0ddfa
+Author: Behdad Esfahbod 
+Date:   2007-11-27 06:40:24 +0000
+
+    Change opacity
+    
+    svn path=/trunk/; revision=1991
+
+ src/vteapp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 198bf1641dbf77f68a266aabe45b4b0642675d16
+Author: Behdad Esfahbod 
+Date:   2007-11-27 06:14:12 +0000
+
+    Bug 499896 – Alternate charset isn't an attribute, though we treat it as
+    
+    2007-11-27  Behdad Esfahbod  
+    
+            Bug 499896 – Alternate charset isn't an attribute, though we treat it
+            as one.
+    
+            * src/vte-private.h:
+            * src/vte.c (_vte_terminal_set_default_attributes),
+            (_vte_terminal_insert_char), (vte_terminal_reset):
+            * src/vteseq.c (vte_sequence_handler_ae),
+            (vte_sequence_handler_as):
+            Move cell.attr.alternate to screen->alternate_charset.
+    
+    
+    svn path=/trunk/; revision=1990
+
+ ChangeLog         | 12 ++++++++++++
+ src/vte-private.h |  4 ++--
+ src/vte.c         |  9 ++++-----
+ src/vteseq.c      |  4 ++--
+ 4 files changed, 20 insertions(+), 9 deletions(-)
+
+commit 760e6b2844dd4b04b7d4aa5692c8b547faf0c380
+Author: Behdad Esfahbod 
+Date:   2007-11-27 06:04:11 +0000
+
+    Bug 499893 – cell.attr.protect is unused
+    
+    2007-11-27  Behdad Esfahbod  
+    
+            Bug 499893 – cell.attr.protect is unused
+    
+            * src/vte-private.h:
+            * src/vte.c (_vte_terminal_set_default_attributes):
+            * src/vteseq.c (vte_sequence_handler_mp):
+            Comment out cell.attr.protect which is unused.
+    
+    
+    svn path=/trunk/; revision=1989
+
+ ChangeLog         | 9 +++++++++
+ src/vte-private.h | 4 +++-
+ src/vte.c         | 2 ++
+ src/vteseq.c      | 2 ++
+ 4 files changed, 16 insertions(+), 1 deletion(-)
+
+commit e2bcb0e1d84724c62f58e40e5f6f4c203591db9a
+Author: Behdad Esfahbod 
+Date:   2007-11-27 05:51:51 +0000
+
+    Minor comment fix.
+    
+    svn path=/trunk/; revision=1988
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 05dc462877584ca032eecfe1e7d9dfcd8458f2ce
+Author: Behdad Esfahbod 
+Date:   2007-11-27 05:50:07 +0000
+
+    Minor optimization, if one can call it that.
+    
+    2007-11-27  Behdad Esfahbod  
+    
+            * src/vte.c (_vte_invalidate_cell), (_vte_invalidate_cursor_once):
+            Minor optimization, if one can call it that.
+    
+    
+    svn path=/trunk/; revision=1987
+
+ ChangeLog | 5 +++++
+ src/vte.c | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 5bd016e7d3cb0d1e1f13ac5628318aaf3f6b5968
+Author: Sunil Mohan Adapa 
+Date:   2007-11-27 05:02:46 +0000
+
+    Added Telugu translation done by Matapathi Pramod .
+    
+    2007-11-27  Sunil Mohan Adapa  
+    
+            * LINGUAS, te.po: Added Telugu translation done by
+            Matapathi Pramod .
+    
+    
+    svn path=/trunk/; revision=1986
+
+ po/ChangeLog |   5 +++
+ po/LINGUAS   |   1 +
+ po/te.po     | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 120 insertions(+)
+
+commit 6ee45faa0377448d1dd735f2ac61106d3cd3f777
+Author: Behdad Esfahbod 
+Date:   2007-11-27 04:16:14 +0000
+
+    Fix doc syntax.
+    
+    2007-11-26  Behdad Esfahbod  
+    
+            * src/vte.c: Fix doc syntax.
+    
+    
+    svn path=/trunk/; revision=1985
+
+ ChangeLog | 4 ++++
+ src/vte.c | 4 ++--
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit ade83987cb3c84df7e84bf1f9718d8c4fee6c110
+Author: Behdad Esfahbod 
+Date:   2007-11-27 04:13:20 +0000
+
+    Revert previous change. For reason, see bug. Bug 491832 –
+    
+    2007-11-26  Behdad Esfahbod  
+    
+            Revert previous change.  For reason, see bug.
+            Bug 491832 – vte_terminal_get_text_range_maybe_wrapped always includes
+            trailing spaces
+    
+            * src/vte.c (vte_terminal_get_text_range_maybe_wrapped):
+            Don't trim space characters, just the empty space after lines,
+            like we used to.
+    
+    
+    svn path=/trunk/; revision=1984
+
+ ChangeLog | 12 +++++++++++-
+ src/vte.c |  2 +-
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+commit 6b903ba743eac7bfccf7a358a8bfe78647595354
+Author: Behdad Esfahbod 
+Date:   2007-11-27 04:06:19 +0000
+
+    Bug 491832 – vte_terminal_get_text_range_maybe_wrapped always includes
+    
+    2007-11-26  Behdad Esfahbod  
+    
+            Bug 491832 – vte_terminal_get_text_range_maybe_wrapped always includes
+            trailing spaces
+    
+            * src/vte.c (vte_terminal_get_text_range_maybe_wrapped):
+            Trip trailing space characters if asked to.
+    
+    
+    svn path=/trunk/; revision=1983
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit e2391dad4d18eb67a13d9fdc73b87044d7595b4c
+Author: Behdad Esfahbod 
+Date:   2007-11-24 01:47:07 +0000
+
+    Add script to check doc coverage is 100% on "make check".
+    
+    2007-11-23  Behdad Esfahbod  
+    
+            * doc/reference/Makefile.am:
+            * doc/reference/check.docs:
+            Add script to check doc coverage is 100% on "make check".
+    
+    
+    svn path=/trunk/; revision=1982
+
+ ChangeLog                 |  6 ++++++
+ doc/reference/Makefile.am |  4 ++++
+ doc/reference/check.docs  | 39 +++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 49 insertions(+)
+
+commit 63e502516a8f892bd7d987387f38361b423f6dcf
+Author: Behdad Esfahbod 
+Date:   2007-11-24 01:33:08 +0000
+
+    Bug 499287 – Fix doc coverage regression
+    
+    2007-11-23  Behdad Esfahbod  
+    
+            Bug 499287 – Fix doc coverage regression
+    
+            * doc/reference/tmpl/vte.sgml:
+            * doc/reference/vte-sections.txt:
+            Document undocumented symbols.
+    
+    
+    svn path=/trunk/; revision=1981
+
+ ChangeLog                      |  8 ++++++++
+ doc/reference/tmpl/vte.sgml    | 20 ++++++++++++++++++--
+ doc/reference/vte-sections.txt |  2 ++
+ 3 files changed, 28 insertions(+), 2 deletions(-)
+
+commit c65c01aff4862dabc4a0f46a75f045a7da870d8b
+Author: Yannig MARCHEGAY 
+Date:   2007-11-20 19:51:58 +0000
+
+    Updated Occitan translation
+    
+    svn path=/trunk/; revision=1980
+
+ po/oc.po | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+commit a691d03e4459b43e3f47033b4aedc888036277f8
+Author: Behdad Esfahbod 
+Date:   2007-11-18 22:09:21 +0000
+
+    s/CVS/SVN/
+    
+    svn path=/trunk/; revision=1979
+
+ autogen.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 49a0cdf11d75459c34131d409d4b8cf3f3090f81
+Author: Chris Wilson 
+Date:   2007-11-16 14:22:22 +0000
+
+    Tweak to read across chunk boundaries whilst still maintaining fairness
+    
+    2007-11-16  Chris Wilson  
+    
+        * src/vte.c (vte_terminal_io_read), (vte_terminal_init),
+        (process_timeout), (update_repeat_timeout), (update_timeout):
+            Tweak to read across chunk boundaries whilst still maintaining
+            fairness between multiple terminals and refresh rate targets.
+    
+    
+    svn path=/trunk/; revision=1978
+
+ ChangeLog |  7 +++++
+ src/vte.c | 97 ++++++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 63 insertions(+), 41 deletions(-)
+
+commit 3f6b10064b0fa9c363f2cfa5c254f0d9faf7fe9f
+Author: Chris Wilson 
+Date:   2007-11-16 11:22:02 +0000
+
+    Use stack allocation to hold small numbers of temporary gpointers.
+    
+    2007-11-16  Chris Wilson  
+    
+        * src/ring.c (_vte_ring_insert_preserve):
+            Use stack allocation to hold small numbers of temporary
+            gpointers.
+    
+    
+    svn path=/trunk/; revision=1977
+
+ ChangeLog  | 6 ++++++
+ src/ring.c | 8 ++++++--
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+commit e6c218707c792a2aa591e0c7625eebce0fc21e85
+Author: Chris Wilson 
+Date:   2007-11-16 11:21:05 +0000
+
+    Export _vte_row_data_free.
+    
+    2007-11-16  Chris Wilson  
+    
+        * src/vte-private.h:
+        * src/vte.c (_vte_free_row_data), (vte_terminal_reset_rowdata),
+        (vte_terminal_finalize), (vte_terminal_reset):
+            Export _vte_row_data_free.
+    
+        * src/vteseq.c (vte_remove_line_internal):
+            Cache the removed VteRowData - fixes the continual reallocation
+            of row data during the vim scrolling benchmark.
+    
+    
+    svn path=/trunk/; revision=1976
+
+ ChangeLog         | 11 +++++++++++
+ src/vte-private.h |  1 +
+ src/vte.c         | 21 +++++++++------------
+ src/vteseq.c      |  9 +++++++--
+ 4 files changed, 28 insertions(+), 14 deletions(-)
+
+commit bf8149c2709401aefa9720b870aaf3e46f35e259
+Author: Chris Wilson 
+Date:   2007-11-16 10:40:45 +0000
+
+    Delay pruning the chunks freelist until we finished processing all the
+    
+    2007-11-16  Chris Wilson  
+    
+        * src/vte.c (release_chunk), (prune_chunks),
+        (remove_from_active_list), (process_timeout),
+        (update_repeat_timeout):
+            Delay pruning the chunks freelist until we finished processing
+            all the incoming data. We were discarding the freelist far too
+            early and reduced the efficacy of the cache.
+    
+    
+    svn path=/trunk/; revision=1975
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 41 +++++++++++++++++++++++++++--------------
+ 2 files changed, 36 insertions(+), 14 deletions(-)
+
+commit c9cdd332e0c005cf6bb78e0153dbfdc29cd8db2d
+Author: Chris Wilson 
+Date:   2007-11-16 09:12:00 +0000
+
+    Remove redundant queries and cache the XRequest on the root window (saves
+    
+    2007-11-16  Chris Wilson  
+    
+        * src/vterdb.h:
+        * src/vterdb.c (_vte_rdb_get), (_vte_rdb_search), (_vte_rdb_quark),
+        (_vte_rdb_get_rgba), (_vte_rdb_get_hintstyle), (_vte_rdb_release):
+            Remove redundant queries and cache the XRequest on the root
+            window (saves a few round-trips during terminal construction).
+            Add a new function to free the cache.
+    
+        * src/vtefc.c (_vte_fc_defaults_from_rdb):
+            Release the cache after retrieving settings.
+    
+    
+    svn path=/trunk/; revision=1974
+
+ ChangeLog    | 12 +++++++++
+ src/vtefc.c  |  2 ++
+ src/vterdb.c | 82 ++++++++++++++++++++++++++++++++++--------------------------
+ src/vterdb.h |  1 +
+ 4 files changed, 62 insertions(+), 35 deletions(-)
+
+commit 4c37f2645675ea5004b955ca8260d8623994aeaa
+Author: Chris Wilson 
+Date:   2007-11-15 20:58:17 +0000
+
+    Similar for the leave notify, disable the match updating after hiding the
+    
+    2007-11-15  Chris Wilson  
+    
+        * src/vte.c (vte_terminal_focus_out):
+            Similar for the leave notify, disable the match updating after
+            hiding the cursor after the loss of focus.
+            However, do we really want to disable the hilighting whilst the
+            pointer may still be within the terminal?
+    
+    
+    svn path=/trunk/; revision=1973
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 6 ++++++
+ 2 files changed, 14 insertions(+)
+
+commit de9fb9f760b247d088f9d2b60fbd255b8050cbea
+Author: Chris Wilson 
+Date:   2007-11-15 20:51:30 +0000
+
+    Don't automatically reshow the hilight on receiving an enter event, but
+    
+    2007-11-15  Chris Wilson  
+    
+        * src/vte.c (vte_terminal_enter):
+            Don't automatically reshow the hilight on receiving an enter
+            event, but wait for the motion notify to update the cursor
+            co-ordinates, otherwise we may hilight something quite distant
+            from the cursor.
+    
+    
+    svn path=/trunk/; revision=1972
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 6 ------
+ 2 files changed, 8 insertions(+), 6 deletions(-)
+
+commit 4bab092bf89cd372c06f1b9a7a1c73b34f3b28eb
+Author: Chris Wilson 
+Date:   2007-11-15 20:43:55 +0000
+
+    Mark the cursor as invisible on leaving the terminal as this stops the
+    
+    2007-11-15  Chris Wilson  
+    
+        * src/vte.c (vte_terminal_leave):
+            Mark the cursor as invisible on leaving the terminal as this
+            stops the hilight matcher running whilst the cursor is absent.
+    
+    
+    svn path=/trunk/; revision=1971
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 5 +++++
+ 2 files changed, 11 insertions(+)
+
+commit c5c286ac2e1c9cacb41a3e217c3f41d9f30bae47
+Author: Kjartan Maraas 
+Date:   2007-11-13 21:37:31 +0000
+
+    Fix build
+    
+    svn path=/trunk/; revision=1970
+
+ po/sl.po | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 4558dd0d3ecc3f984029008c69bb768a14909f24
+Author: Matej Urbančič 
+Date:   2007-11-13 13:46:27 +0000
+
+    Updated Slovenian translation
+    
+    svn path=/trunk/; revision=1969
+
+ po/ChangeLog | 2328 +++++++++++++++++++++++++++++-----------------------------
+ po/sl.po     |   26 +-
+ 2 files changed, 1177 insertions(+), 1177 deletions(-)
+
+commit 3577d01782ccaeea287593883c4d1f332bcbd1a2
+Author: Behdad Esfahbod 
+Date:   2007-11-07 04:22:09 +0000
+
+    Allow NULL font argument. Can be used to set antialias without setting
+    
+    2007-11-06  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_set_font_from_string_full): Allow NULL
+            font argument.  Can be used to set antialias without setting font.
+    
+            * src/vteapp.c (main): Fix antialias handling which was borked when
+            moving to GOption.
+    
+    
+    svn path=/trunk/; revision=1968
+
+ ChangeLog    |  8 ++++++++
+ src/vte.c    |  6 +++---
+ src/vteapp.c | 14 ++++++--------
+ 3 files changed, 17 insertions(+), 11 deletions(-)
+
+commit abc1e6a1259a56cb123150896d289980b7c237ab
+Author: Behdad Esfahbod 
+Date:   2007-11-07 03:16:51 +0000
+
+    Bug 142640 – FcConfigSubstitute in place of _vte_fc_defaults_from_gtk to
+    
+    2007-11-06  Behdad Esfahbod  
+    
+            Bug 142640 – FcConfigSubstitute in place of _vte_fc_defaults_from_gtk
+            to get antialias and hinting value
+    
+            * src/vtefc.c (_vte_fc_defaults_from_gtk),
+            (_vte_fc_defaults_from_rdb): Replace _vte_fc_defaults_from_gtk() with
+            gtk_default_substitute() from Gtk+-2.6.  It's essentially the same
+            thing, but not overriding elements of the pattern already present.
+            Also remove a couple redundant calls.
+    
+    
+    svn path=/trunk/; revision=1967
+
+ ChangeLog   |  11 ++++
+ src/vtefc.c | 165 +++++++++++++++++++++++-------------------------------------
+ 2 files changed, 75 insertions(+), 101 deletions(-)
+
+commit cdf92cafafd64b67143c0ee1c742825f9a2b9600
+Author: Kjartan Maraas,,23491770 
+Date:   2007-11-02 12:25:30 +0000
+
+    Updated Norwegian bokmål translation.
+    
+    2007-11-02  Kjartan Maraas,,23491770  
+    
+            * nb.po: Updated Norwegian bokmål translation.
+    
+    svn path=/trunk/; revision=1966
+
+ po/ChangeLog | 4 ++++
+ po/nb.po     | 6 +++---
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+commit 6793973b27167e15084ed689a57baca0fa8d5d4c
+Author: Mohammad DAMT 
+Date:   2007-10-28 17:46:31 +0000
+
+    Update Indonesian translation by Huda Toriq .
+    
+    2007-10-28  Mohammad DAMT  
+    
+            * id.po: Update Indonesian translation by Huda Toriq .
+    
+    
+    svn path=/trunk/; revision=1964
+
+ po/ChangeLog |  5 ++++
+ po/id.po     | 76 +++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 47 insertions(+), 34 deletions(-)
+
+commit 1f782bd44feb64bb2e78349abb0636e51418ef3e
+Author: Djihed Afifi 
+Date:   2007-10-23 20:57:04 +0000
+
+    Updated Arabic Translation by Djihed Afifi.
+    
+    svn path=/trunk/; revision=1963
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit ecd055167f91b90a646d1dc51210340f762b801e
+Author: Djihed Afifi 
+Date:   2007-10-21 19:21:19 +0000
+
+    Updated Arabic Translation by Djihed Afifi.
+    
+    svn path=/trunk/; revision=1962
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit ff86da4cae59536722f72787920822bd1dc6e731
+Author: Djihed Afifi 
+Date:   2007-10-21 16:45:52 +0000
+
+    Updated Arabic Translation by Djihed Afifi.
+    
+    svn path=/trunk/; revision=1961
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 820434e27850b2c84cbbdee1ae43bf92d356cfb9
+Author: Matej Urbančič 
+Date:   2007-10-15 18:07:50 +0000
+
+    Updated Slovenian translation
+    
+    svn path=/trunk/; revision=1960
+
+ po/ChangeLog | 2314 +++++++++++++++++++++++++++++-----------------------------
+ po/sl.po     |  136 ++--
+ 2 files changed, 1220 insertions(+), 1230 deletions(-)
+
+commit 311d90af4c563b66c0ac17917ef2b5ffebd94187
+Author: Chris Wilson 
+Date:   2007-10-11 10:42:24 +0000
+
+    Bug 439384 – gnome-terminal on feisty crashes when giving wrong locale
+    
+    2007-10-11  Chris Wilson  
+    
+        Bug 439384 – gnome-terminal on feisty crashes when giving wrong locale environment
+    
+        * src/vte.c (vte_terminal_set_encoding):
+            Fallback to using UTF-8 as the locale encoding. This prevents
+            subsequent crashes but may display gibberish in the output.
+    
+    
+    svn path=/trunk/; revision=1959
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 3 ++-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+commit 33fe1ba1a36f43399853256c85870320eeb0d55a
+Author: Chris Wilson 
+Date:   2007-10-05 09:44:25 +0000
+
+    Bug 483642 – vte_terminal_feed crash when 8190 characters passed
+    
+    2007-10-05  Chris Wilson  
+    
+        Bug 483642 – vte_terminal_feed crash when 8190 characters passed
+    
+        * src/vte.c (vte_terminal_feed):
+            Break the feed data into chunks.
+    
+    
+    svn path=/trunk/; revision=1958
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 16 ++++++++++++++--
+ 2 files changed, 21 insertions(+), 2 deletions(-)
+
+commit da32ed9669a1aeab51cde232ec048e8275195683
+Author: Chris Wilson 
+Date:   2007-09-30 22:52:57 +0000
+
+    Skip retrieving the VteBg if the source is VTE_BG_SOURCE_NONE as we
+    
+    2007-09-30  Chris Wilson  
+    
+        * src/vtexft.c (_vte_xft_set_background_image):
+            Skip retrieving the VteBg if the source is VTE_BG_SOURCE_NONE
+            as we neither need it to listen for changes to the background
+            nor require it to load the pixmap (which is a no-op).
+    
+    
+    svn path=/trunk/; revision=1957
+
+ ChangeLog    |  7 +++++++
+ src/vtexft.c | 25 +++++++++++++++----------
+ 2 files changed, 22 insertions(+), 10 deletions(-)
+
+commit 0b3b2c14399420cd73073ab17b7bffb5d9279ecd
+Author: Chris Wilson 
+Date:   2007-09-30 22:48:46 +0000
+
+    Ensure the GdkPixmap is destroyed along with the VteXft context.
+    
+    2007-09-30  Chris Wilson  
+    
+        * src/vtexft.c (_vte_xft_destroy):
+            Ensure the GdkPixmap is destroyed along with the VteXft
+            context.
+    
+    
+    svn path=/trunk/; revision=1956
+
+ ChangeLog    | 6 ++++++
+ src/vtexft.c | 3 +++
+ 2 files changed, 9 insertions(+)
+
+commit bb4a9d348eaf147635b19674742ab945fd249bf5
+Author: Chris Wilson 
+Date:   2007-09-26 20:23:43 +0000
+
+    Improve the last ChangeLog entry.
+    
+    
+    svn path=/trunk/; revision=1955
+
+ ChangeLog | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 9fd1f501d36afe68050ab939b7639aa55cece90d
+Author: Chris Wilson 
+Date:   2007-09-26 20:17:16 +0000
+
+    I really must remember to run vttest more often. (And to work within
+    
+    2007-09-26  Chris Wilson  
+    
+        I really must remember to run vttest more often. (And to work within
+        git-svn.)
+    
+        * src/vte.c (vte_terminal_draw_rows):
+            Correct underlining for vttest.
+    
+    
+    svn path=/trunk/; revision=1954
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 17 +++++++----------
+ 2 files changed, 15 insertions(+), 10 deletions(-)
+
+commit 431ecb6710ffae56c73620001cac74a0a4ddbef9
+Author: Chris Wilson 
+Date:   2007-09-26 20:09:21 +0000
+
+    Bug 480735 – Underlining whitespace not reliable
+    
+    2007-09-26  Chris Wilson  
+    
+        Bug 480735 – Underlining whitespace not reliable
+    
+        Original one-liner by Steven Skovran.
+    
+        * src/vte.c (vte_terminal_draw_rows):
+            Do not try to over zealously skip whitespace. The goal is
+            to maintain the current run whilst avoiding adding spaces to
+            the glyph sequence - so check the cell fully for attribute
+            breaks and simply do not add it to the glyphs if it contains a
+            space.
+    
+    
+    svn path=/trunk/; revision=1953
+
+ ChangeLog | 13 +++++++++++++
+ src/vte.c | 19 +++++++++++--------
+ 2 files changed, 24 insertions(+), 8 deletions(-)
+
+commit eafd1b6d63613180f879861c75f97c45d1598c02
+Author: Khandakar Mujahidul Islam 
+Date:   2007-09-18 08:27:10 +0000
+
+    Updated Bengali Translation
+    
+    svn path=/trunk/; revision=1952
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 8da1e4bee0bf85633e5929249bdccf4a819c2701
+Author: Khandakar Mujahidul Islam 
+Date:   2007-09-18 08:26:56 +0000
+
+    Updated Bengali Translation
+    
+    svn path=/trunk/; revision=1951
+
+ po/bn.po | 74 +++++++++++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 43 insertions(+), 31 deletions(-)
+
+commit 173081d1e99c81455013af0a1a7f132e00ecfbcd (tag: vte_0_16_9)
+Author: Behdad Esfahbod 
+Date:   2007-09-17 22:10:29 +0000
+
+    Released vte-0.16.9.
+    
+    2007-09-17  Behdad Esfahbod  
+    
+            Released vte-0.16.9.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.9.
+            Bumped libtool version to 11:13:2.
+    
+    
+    svn path=/trunk/; revision=1949
+
+ ChangeLog    |  9 +++++++++
+ NEWS         | 14 ++++++++++++++
+ configure.in |  4 ++--
+ 3 files changed, 25 insertions(+), 2 deletions(-)
+
+commit 5c579ef4cd988de10eef69b1c7dce057a0ebf220
+Author: Djihed Afifi 
+Date:   2007-09-13 22:47:05 +0000
+
+    Updated Arabic Translation by Djihed Afifi.
+    
+    svn path=/trunk/; revision=1948
+
+ po/ChangeLog |  4 ++++
+ po/ar.po     | 45 +++++++++++++++++++--------------------------
+ 2 files changed, 23 insertions(+), 26 deletions(-)
+
+commit 15d7538f1a7131e79341fce3357cc3e499342e3a
+Author: Alexander Shopov 
+Date:   2007-09-11 08:57:58 +0000
+
+    Updated Bulgarian translation by Alexander Shopov 
+    
+    2007-09-11  Alexander Shopov  
+    
+            * bg.po: Updated Bulgarian translation by
+            Alexander Shopov 
+    
+    svn path=/trunk/; revision=1947
+
+ po/ChangeLog |  5 +++++
+ po/bg.po     | 10 +++++-----
+ 2 files changed, 10 insertions(+), 5 deletions(-)
+
+commit 5c3c49db0866a753c49cdef4aa55e5ea5a4801d4
+Author: Alexander Shopov 
+Date:   2007-09-11 08:55:00 +0000
+
+    Updated Bulgarian translation by Alexander Shopov 
+    
+    2007-09-11  Alexander Shopov  
+    
+            * bg.po: Updated Bulgarian translation by
+            Alexander Shopov 
+    
+    svn path=/trunk/; revision=1946
+
+ po/ChangeLog |  5 +++++
+ po/bg.po     | 47 +++++++++++++++++++++--------------------------
+ 2 files changed, 26 insertions(+), 26 deletions(-)
+
+commit b38efa6b0d7a87109064a5c4d87b046764ec8e2f
+Author: Behdad Esfahbod 
+Date:   2007-09-05 20:35:44 +0000
+
+    Wait for keypress when done, so one can do "vte -c ./vim.sh" and not lose
+    
+    2007-09-05  Behdad Esfahbod  
+    
+            * perf/vim.sh: Wait for keypress when done, so one can do
+            "vte -c ./vim.sh" and not lose the final numbers.
+    
+            * src/vtepango.c (_vte_pango_destroy), (_vte_pango_start),
+            (_vte_pango_end), (_vte_pango_set_background_color),
+            (_vte_pango_set_background_image), (_vte_pango_clear),
+            (_vte_pango_set_text_font), (_vte_pango_get_using_fontconfig),
+            (_vte_pango_draw_text), (_vte_pango_draw_has_char),
+            (_vte_pango_draw_rectangle), (_vte_pango_fill_rectangle),
+            (_vte_pango_set_scroll):  General cleanup.  Also implement
+            _vte_pango_draw_has_char() using
+            pango_layout_get_unknown_glyphs_count() when available.
+    
+    
+    svn path=/trunk/; revision=1945
+
+ ChangeLog      | 15 +++++++++++++++
+ perf/vim.sh    |  8 ++++++--
+ src/vtepango.c | 52 +++++++++++++++++++++++-----------------------------
+ 3 files changed, 44 insertions(+), 31 deletions(-)
+
+commit 7049c321cfa866c223edb36c52e916dd4320ecf1
+Author: Behdad Esfahbod 
+Date:   2007-09-02 05:15:30 +0000
+
+    Bug 469862 – Handling of wrapped links in gnome-terminal is broken
+    
+    2007-09-02  Behdad Esfahbod  
+    
+            Bug 469862 – Handling of wrapped links in gnome-terminal is broken
+    
+            * src/vteseq.c (vte_sequence_handler_ce): Reset soft_wrapped.
+    
+    
+    svn path=/trunk/; revision=1944
+
+ ChangeLog    | 6 ++++++
+ src/vteseq.c | 1 +
+ 2 files changed, 7 insertions(+)
+
+commit b9c65eb840521d6a49c62904dd5b5ae67b319cb2
+Author: Behdad Esfahbod 
+Date:   2007-09-02 05:14:41 +0000
+
+    Add a G_UNLIKELY()
+    
+    svn path=/trunk/; revision=1943
+
+ src/debug.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 63e545b8620955123a86856ebe61153a3911d6ca
+Author: Yannig MARCHEGAY 
+Date:   2007-09-01 20:12:23 +0000
+
+    Updated Occitan translation
+    
+    svn path=/trunk/; revision=1942
+
+ po/oc.po | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 80c1736fc58a57fd77600b31af23ff19bf7aeb6d
+Author: Chris Wilson 
+Date:   2007-09-01 08:44:29 +0000
+
+    cf Bug 469862 – Handling of wrapped links in gnome-terminal is broken
+    
+    2007-09-01  Chris Wilson  
+    
+        cf Bug 469862 – Handling of wrapped links in gnome-terminal is broken
+    
+        * src/vte.c (vte_terminal_get_text_range_maybe_wrapped):
+            Revert the last character is in last column check as that
+            behaviour is required to handle terminal resizing where the
+            screen contents are not reconstructed (e.g. bash).
+    
+    
+    svn path=/trunk/; revision=1941
+
+ ChangeLog | 9 +++++++++
+ src/vte.c | 3 +--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+commit 0fe5d9cc193b0dde1e08a64dda8df54e762f121b
+Author: Chris Wilson 
+Date:   2007-08-30 16:18:03 +0000
+
+    Bug 471901 – troubles with pad
+    
+    2007-08-30  Chris Wilson  
+    
+        Bug 471901 – troubles with pad
+    
+        * src/vte-private.h:
+        * src/vte.c (_vte_invalidate_cells), (vte_terminal_draw_rows),
+        (vte_terminal_paint): Don't abuse VTE_PAD_WIDTH.
+    
+    
+    svn path=/trunk/; revision=1940
+
+ ChangeLog         |  8 ++++++
+ src/vte-private.h |  1 +
+ src/vte.c         | 80 +++++++++++++++++++++----------------------------------
+ 3 files changed, 40 insertions(+), 49 deletions(-)
+
+commit 48ddee1d953a7386862fe6e71998d19d8584ce6b
+Author: Chris Wilson 
+Date:   2007-08-30 15:14:12 +0000
+
+    Add fixme comment about row->soft_wrap.
+    
+    svn path=/trunk/; revision=1939
+
+ src/vte.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit c03de1d0472b1a19a5363becc9db61e7757cfa99
+Author: Chris Wilson 
+Date:   2007-08-30 15:06:27 +0000
+
+    Bug 469862 – Handling of wrapped links in gnome-terminal is broken
+    
+    2007-08-30  Chris Wilson  
+    
+        Bug 469862 – Handling of wrapped links in gnome-terminal is broken
+    
+        * src/vte.c (vte_terminal_get_text_range_maybe_wrapped):
+            Check that the last character is in the last column before
+            adding a newline for autowrapped lines.
+    
+    
+    svn path=/trunk/; revision=1938
+
+ ChangeLog    |  8 ++++++++
+ src/vte.c    | 10 +++++++---
+ src/vteseq.c | 14 ++++++++------
+ 3 files changed, 23 insertions(+), 9 deletions(-)
+
+commit 5480e1f64f05905cadc4dce0a6b3cbac5b85eac2
+Author: Chris Wilson 
+Date:   2007-08-30 11:41:14 +0000
+
+    Add myself to the list, as Behdad had suggested some time ago.
+    
+    2007-08-30  Chris Wilson  
+    
+        * MAINTAINERS: Add myself to the list, as Behdad had suggested some
+        time ago.
+    
+    
+    svn path=/trunk/; revision=1937
+
+ ChangeLog   | 5 +++++
+ MAINTAINERS | 4 ++++
+ 2 files changed, 9 insertions(+)
+
+commit 46b7464576141d69bd0dce16409141cfb26a8225
+Author: Chris Wilson 
+Date:   2007-08-30 11:06:59 +0000
+
+    Bug 153265 – Handle Sun Cut, Copy, Paste keys Patch by Brian Cameron.
+    
+    2007-08-30  Chris Wilson  
+    
+        Bug 153265 – Handle Sun Cut, Copy, Paste keys
+        Patch by Brian Cameron.
+    
+        * doc/reference/tmpl/vte.sgml:
+        * src/vte.c (vte_terminal_class_init),
+        (vte_terminal_real_copy_clipboard), (vte_terminal_copy_clipboard),
+        (vte_terminal_real_paste_clipboard),
+        (vte_terminal_paste_clipboard):
+        * src/vte.h:
+            Add key bindings for the special function keys.
+    
+    
+    svn path=/trunk/; revision=1936
+
+ ChangeLog                   | 13 +++++++++
+ doc/reference/tmpl/vte.sgml | 14 +++++++++
+ src/vte.c                   | 69 +++++++++++++++++++++++++++++++++++++++------
+ src/vte.h                   |  4 +--
+ 4 files changed, 89 insertions(+), 11 deletions(-)
+
+commit 8fb0f61c29c521f85acc5f340d8a8f3b005926ed
+Author: Chris Wilson 
+Date:   2007-08-30 10:11:23 +0000
+
+    Bad manipulation of patches whilst attempting to apply the fix for Bug
+    
+    2007-08-30  Chris Wilson  
+    
+        * src/vte.c (vte_terminal_draw_rows): Bad manipulation of patches
+        whilst attempting to apply the fix for Bug 434230 - net result was
+        that the correct code was being circumvented.
+    
+    
+    svn path=/trunk/; revision=1935
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 1 -
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit c142f3a68c8cd5951319cba28bfe0ff33d7aa90e
+Author: Chris Wilson 
+Date:   2007-08-29 19:28:03 +0000
+
+    Quick grammar correction.
+    
+    svn path=/trunk/; revision=1934
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 400ae5a66202afea963149700d52ee2e9bd79b9a
+Author: Chris Wilson 
+Date:   2007-08-29 19:25:51 +0000
+
+    Bug 471484 – vteapp resize weirdness
+    
+    2007-08-29  Chris Wilson  
+    
+        Bug 471484 – vteapp resize weirdness
+    
+        * src/vteapp.c (main): Distinguish between setting the geometry and
+        disabling the use geometry hints. A regression when converting to
+        GOption based arguments.
+    
+    
+    svn path=/trunk/; revision=1933
+
+ ChangeLog    |  8 ++++++++
+ src/vteapp.c | 10 ++++++++--
+ 2 files changed, 16 insertions(+), 2 deletions(-)
+
+commit 85969d3324e6e946458e2ad6c68c23a9741bb15e
+Author: Behdad Esfahbod 
+Date:   2007-08-27 18:24:03 +0000
+
+    Bug 470690 – Typo at src/vtexft.c "appropiate" should be "appropriate"
+    
+    2007-08-27  Behdad Esfahbod  
+    
+            Bug 470690 – Typo at src/vtexft.c "appropiate" should be "appropriate"
+    
+            * src/vtexft.c (_vte_xft_open_font_for_char): Fix typo.
+    
+    
+    svn path=/trunk/; revision=1932
+
+ ChangeLog    | 6 ++++++
+ src/vtexft.c | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit 8dd24b4f8d9bab8185ba469e0d9f87dce132d231
+Author: Yannig MARCHEGAY 
+Date:   2007-08-21 11:17:39 +0000
+
+    Updated Occitan translation
+    
+    svn path=/trunk/; revision=1931
+
+ po/oc.po | 38 ++++++++++++++++----------------------
+ 1 file changed, 16 insertions(+), 22 deletions(-)
+
+commit a6ee90a4682ce40a464482ed0a791509ad9ab780
+Author: Yannig MARCHEGAY 
+Date:   2007-08-17 18:27:18 +0000
+
+    Updated Occitan translation
+    
+    svn path=/trunk/; revision=1930
+
+ po/oc.po | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ed565fcc7b3cccf8ddfaefc0ac38000bc212c25f
+Author: Adam Weinberger 
+Date:   2007-08-15 22:01:07 +0000
+
+    Updated Canadian English translation.
+    
+    2007-08-15  Adam Weinberger  
+    
+            * en_CA.po: Updated Canadian English translation.
+    
+    
+    
+    svn path=/trunk/; revision=1929
+
+ po/ChangeLog |  4 ++++
+ po/en_CA.po  | 65 ++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 37 insertions(+), 32 deletions(-)
+
+commit 26e576e1f0e44c6e3451691935173458d70a7787
+Author: Behdad Esfahbod 
+Date:   2007-08-07 22:46:32 +0000
+
+    Add Userid field, remove Guilherme.
+    
+    2007-08-07  Behdad Esfahbod  
+    
+            * MAINTAINERS: Add Userid field, remove Guilherme.
+    
+    
+    svn path=/trunk/; revision=1928
+
+ ChangeLog   | 4 ++++
+ MAINTAINERS | 3 +--
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+commit 14204428512fe70d1a484ec78f7bdc63dad7499a
+Author: Chris Wilson 
+Date:   2007-08-03 08:46:30 +0000
+
+    Bug 434230 – Spaces are not underlined Original patch by Santtu Lakkala.
+    
+    2007-08-03  Chris Wilson  
+    
+        Bug 434230 – Spaces are not underlined
+        Original patch by Santtu Lakkala.
+    
+        * src/vte.c (vte_terminal_draw_rows): Only skip cells if we do not
+        need to draw on top.
+    
+    
+    svn path=/trunk/; revision=1927
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 3 +++
+ 2 files changed, 11 insertions(+)
+
+commit 4e2857d6748335961ede2940b5f9f3397725686d
+Author: Chris Wilson 
+Date:   2007-08-03 08:41:26 +0000
+
+    Bug 450069 – vte crash on removing a terminal tab
+    
+    2007-08-03  Chris Wilson  
+    
+        Bug 450069 – vte crash on removing a terminal tab
+    
+        * src/vte.c (vte_terminal_emit_eof), (vte_terminal_queue_eof),
+        (vte_terminal_eof): Move the EOF emission to an idle handler so that
+        the source is inactive whilst the VteTerminal is finalized.
+    
+    
+    svn path=/trunk/; revision=1926
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 20 +++++++++++++++++---
+ 2 files changed, 25 insertions(+), 3 deletions(-)
+
+commit 7422b1d3bea8817ae1064041ede590eb256efff8 (tag: vte_0_16_8)
+Author: Behdad Esfahbod 
+Date:   2007-07-30 17:38:33 +0000
+
+    Released vte-0.16.8.
+    
+    2007-07-30  Behdad Esfahbod  
+    
+            Released vte-0.16.8.
+    
+            Quick followup release with no code changes, to fix missing
+            documentation index in the tarball.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.8.
+            Bumped libtool version to 11:12:2.
+    
+    
+    svn path=/trunk/; revision=1924
+
+ ChangeLog    | 12 ++++++++++++
+ NEWS         |  5 +++++
+ configure.in |  4 ++--
+ 3 files changed, 19 insertions(+), 2 deletions(-)
+
+commit 14297d259904f59ac742e1038469145c934bc662 (tag: vte_0_16_7)
+Author: Behdad Esfahbod 
+Date:   2007-07-27 21:39:31 +0000
+
+    Released vte-0.16.7.
+    
+    2007-07-27  Behdad Esfahbod  
+    
+            Released vte-0.16.7.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.7.
+            Bumped libtool version to 11:11:2.
+    
+    
+    svn path=/trunk/; revision=1922
+
+ ChangeLog    |  9 +++++++++
+ NEWS         | 13 +++++++++++++
+ configure.in |  4 ++--
+ 3 files changed, 24 insertions(+), 2 deletions(-)
+
+commit a2daa008340e58d724b44f43b5b7a2b3e899a32e
+Author: Behdad Esfahbod 
+Date:   2007-07-27 04:44:11 +0000
+
+    Bug 337252 – ALT + Arrow keys don't work in irssi through gnome-terminal
+    
+    2007-07-27  Behdad Esfahbod  
+    
+            Bug 337252 – ALT + Arrow keys don't work in irssi through gnome-terminal
+            Patch by James Bowes
+    
+            * src/keymap.c (_vte_keymap_map), (is_cursor_key),
+            (_vte_keymap_key_add_key_modifiers):
+            * src/keymap.h:
+            * src/vte.c (vte_terminal_key_press):
+            Only switch to CSI for some cursor keys when in cursor app mode.
+    
+    
+    svn path=/trunk/; revision=1921
+
+ ChangeLog    | 11 +++++++++++
+ src/keymap.c | 36 ++++++++++++++++++++++++++++++++++++
+ src/keymap.h |  1 +
+ src/vte.c    |  1 +
+ 4 files changed, 49 insertions(+)
+
+commit 0d0e051a9f076942fcd45086398d9f995bce6be0
+Author: Ilkka Tuohela 
+Date:   2007-07-16 16:11:13 +0000
+
+    Updated Finnish translation
+    
+    svn path=/trunk/; revision=1920
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit bafea8de7cb9db6ec9c4c4acedae4f0ab070639b
+Author: Felix I 
+Date:   2007-06-25 09:00:23 +0000
+
+    updated ta translation
+    
+    svn path=/trunk/; revision=1919
+
+ po/ChangeLog |  4 ++++
+ po/ta.po     | 74 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 43 insertions(+), 35 deletions(-)
+
+commit 78c628d69571384a672ed1fc86e8fb5b853e8343
+Author: Chris Wilson 
+Date:   2007-06-25 08:35:55 +0000
+
+    Bug 448259 – Mapping for Ctrl-_ Patch by Andrey Melnikov.
+    
+    2007-06-25  Chris Wilson  
+    
+        Bug 448259 – Mapping for Ctrl-_
+        Patch by Andrey Melnikov.
+    
+        * src/keymap.c: Add mapping for Ctrl-Minus.
+    
+    
+    svn path=/trunk/; revision=1918
+
+ ChangeLog    | 7 +++++++
+ src/keymap.c | 5 +++++
+ 2 files changed, 12 insertions(+)
+
+commit ac76377d88f46a34f9529eb45e4e610cd354e904
+Author: Chris Wilson 
+Date:   2007-06-25 08:23:39 +0000
+
+    Bug 449809 – use python-config to get python includes Patch by Sebastien
+    
+    2007-06-25  Chris Wilson  
+    
+        Bug 449809 – use python-config to get python includes
+        Patch by Sebastien Bacher.
+    
+        * acinclude.m4: prefer python-config where available.
+    
+    
+    svn path=/trunk/; revision=1917
+
+ ChangeLog    |  7 +++++++
+ acinclude.m4 | 10 +++++++---
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+commit 8491cf042c3945f039ea113a6e6fef683b782b8f
+Author: Chris Wilson 
+Date:   2007-06-25 07:58:41 +0000
+
+    Bug 450745 – VTE's response to CSI 2 1 t incorrectly formatted Patch by
+    
+    2007-06-25  Chris Wilson  
+    
+        Bug 450745 – VTE's response to CSI 2 1 t incorrectly formatted
+        Patch by Dale Sedivec.
+    
+        * src/vteseq.c (vte_sequence_handler_window_manipulation): Restore
+        the missing 'L'.
+    
+    
+    svn path=/trunk/; revision=1916
+
+ ChangeLog    | 8 ++++++++
+ src/vteseq.c | 4 ++--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+commit 267aa19e68b3b1439c686b57a4a3b6c7944ae4d0
+Author: Felix I 
+Date:   2007-06-22 11:09:45 +0000
+
+    updated si translation
+    
+    svn path=/trunk/; revision=1915
+
+ po/ChangeLog |   5 +++
+ po/LINGUAS   |   1 +
+ po/si.po     | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 122 insertions(+)
+
+commit 3306be169818e7dff9cac573d90426020576101a
+Author: Christian Persch 
+Date:   2007-06-21 20:29:56 +0000
+
+    Move libtool versioning to configure so you just have to update one file
+    
+    2007-06-21  Christian Persch  
+    
+            * configure.in:
+            * src/Makefile.am: Move libtool versioning to configure so you just
+            have to update one file for releasing. See bug #396265 comment 17.
+    
+    svn path=/trunk/; revision=1914
+
+ ChangeLog       |  6 ++++++
+ configure.in    | 17 +++++++++++++++++
+ src/Makefile.am | 12 +-----------
+ 3 files changed, 24 insertions(+), 11 deletions(-)
+
+commit 4184ee2cf58a388add2c4b2b0647e6cd9a1818c5 (tag: vte_0_16_6)
+Author: Behdad Esfahbod 
+Date:   2007-06-18 22:13:39 +0000
+
+    Released vte-0.16.6.
+    
+    2007-06-18  Behdad Esfahbod  
+    
+            Released vte-0.16.6.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.6.
+    
+            * src/Makefile.am: Bumped libtool version to 11:10:2.
+    
+    
+    svn path=/trunk/; revision=1912
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            |  8 ++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 20 insertions(+), 2 deletions(-)
+
+commit 39e69e2f047f1769cc4389ce9d1b77dfce46dfb6
+Author: Behdad Esfahbod 
+Date:   2007-06-18 22:01:13 +0000
+
+    Use AM_LDFLAGS instead of LDFLAGS
+    
+    svn path=/trunk/; revision=1911
+
+ python/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 41cce0e5c01db1db44349bdf217444629ffaa374
+Author: Chris Wilson 
+Date:   2007-06-12 20:31:52 +0000
+
+    Call gtk_widget_queue_resize() after updating row/column count.
+    
+    2007-06-12  Chris Wilson  
+    
+        * src/vte.c (vte_terminal_set_size): Call gtk_widget_queue_resize()
+        after updating row/column count.
+    
+    
+    svn path=/trunk/; revision=1910
+
+ ChangeLog |  5 +++++
+ src/vte.c | 15 +++++++++++++--
+ 2 files changed, 18 insertions(+), 2 deletions(-)
+
+commit ef87435fc27e1ceecf1405a91d41e6dbdeb0f5d4
+Author: Behdad Esfahbod 
+Date:   2007-06-11 21:37:30 +0000
+
+    Bug 372743 – vte_terminal_set_colors doesn't work as advertised
+    
+    2007-06-11  Behdad Esfahbod  
+    
+            Bug 372743 – vte_terminal_set_colors doesn't work as advertised
+    
+            * src/vte.c (vte_terminal_set_colors): Allow 24-color palettes.
+    
+    
+    svn path=/trunk/; revision=1909
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 1 +
+ 2 files changed, 7 insertions(+)
+
+commit 51acb6422b8dbc396ff1dc37be59b54486da047d
+Author: Behdad Esfahbod 
+Date:   2007-06-09 18:10:07 +0000
+
+    Bug 445620 – Some characters shows different in different locales. Patch
+    
+    2007-06-09  Behdad Esfahbod  
+    
+            Bug 445620 – Some characters shows different in different locales.
+            Patch from Zealot
+    
+            * src/iso2022.c (_vte_iso2022_state_set_codeset): Update ambiguous
+            width.
+    
+    
+    svn path=/trunk/; revision=1908
+
+ ChangeLog     | 8 ++++++++
+ src/iso2022.c | 1 +
+ 2 files changed, 9 insertions(+)
+
+commit e1e353ee5ef529bacaaee72e749c24b353af179a
+Author: Chris Wilson 
+Date:   2007-06-04 18:19:39 +0000
+
+    Retrospectively add the bug number.
+    
+    
+    svn path=/trunk/; revision=1907
+
+ ChangeLog | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 079bec7407bd1896a70ff88692d1a6b11976e0cb (tag: vte_0_16_5)
+Author: Behdad Esfahbod 
+Date:   2007-06-04 18:17:31 +0000
+
+    Released vte-0.16.5.
+    
+    2007-06-04  Behdad Esfahbod  
+    
+            Released vte-0.16.5.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.5.
+    
+            * src/Makefile.am: Bumped libtool version to 11:9:2.
+    
+    
+    svn path=/trunk/; revision=1905
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            |  5 +++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 17 insertions(+), 2 deletions(-)
+
+commit 52bc6496141ff4a3075cb42d3a2e20afc05977b2
+Author: Chris Wilson 
+Date:   2007-05-30 15:33:21 +0000
+
+    fcrozat pointed out 'some strange "underline" line where cursor is located
+    
+    2007-05-30  Chris Wilson  
+    
+        fcrozat pointed out 'some strange "underline" line where cursor is
+        located and blinking'.
+    
+        * src/vte.c (vte_terminal_draw_rows):
+            Continuation of the previous commit: catch a couple more locations
+            where we need to skip past the end of the line. The problem in
+            this case was we tried to use some uninitialised variables whilst
+            trying to draw the cell attributes.
+    
+    
+    svn path=/trunk/; revision=1904
+
+ ChangeLog | 11 +++++++++++
+ src/vte.c |  6 +++---
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+commit f7ede118f9b7cd6561f24d1526717e5da746ef6a (tag: vte_0_16_4)
+Author: Behdad Esfahbod 
+Date:   2007-05-28 22:22:19 +0000
+
+    Released vte-0.16.4.
+    
+    2007-05-28  Behdad Esfahbod  
+    
+            Released vte-0.16.4.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.4.
+    
+            * src/Makefile.am: Bumped libtool version to 11:8:2.
+    
+    
+    svn path=/trunk/; revision=1902
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            | 13 +++++++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 25 insertions(+), 2 deletions(-)
+
+commit bffdf19ea1c4ef71d07091ee269a6ee18cf1c8e6
+Author: Chris Wilson 
+Date:   2007-05-28 06:31:47 +0000
+
+    uws noted on IRC that 'vte trunk does strange thingies with colors'
+    
+    2007-05-28  Chris Wilson  
+    
+        uws noted on IRC that 'vte trunk does strange thingies with colors'
+    
+        * src/vte.c (vte_terminal_draw_rows):
+            When reaching the end-of-row be careful not to reset the
+            current text attributes (color, underlining, etc).
+    
+    
+    svn path=/trunk/; revision=1901
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 53 ++++++++++++++++++++++-------------------------------
+ 2 files changed, 30 insertions(+), 31 deletions(-)
+
+commit 1d31aab30cc04473dfe9484d2d307de565882bc4
+Author: Chris Wilson 
+Date:   2007-05-25 14:39:02 +0000
+
+    Only add the borders to the clear area.
+    
+    2007-05-25  Chris Wilson  
+    
+        * src/vte.c (vte_terminal_expand_region),
+        (vte_terminal_paint_area):
+            Only add the borders to the clear area.
+    
+    
+    svn path=/trunk/; revision=1900
+
+ ChangeLog |  8 +++++++-
+ src/vte.c | 49 ++++++++++++++++++++++++++++++-------------------
+ 2 files changed, 37 insertions(+), 20 deletions(-)
+
+commit fc8392634e8f77653dfc75a41662104c9dc5b22b
+Author: Chris Wilson 
+Date:   2007-05-23 16:08:09 +0000
+
+    Bug 429278 – Cursor drawn strangely in joe
+    
+    2007-05-23  Chris Wilson  
+    
+        Bug 429278 – Cursor drawn strangely in joe
+    
+        * src/vte.c (vte_terminal_expand_region),
+        (vte_terminal_paint_area):
+            Ensure the expanded regions are cell aligned.
+    
+    
+    svn path=/trunk/; revision=1899
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 13 +++++--------
+ 2 files changed, 13 insertions(+), 8 deletions(-)
+
+commit 9e8b375a1b84a2c18a2b622902e571f59fecfce6
+Author: Yannig MARCHEGAY 
+Date:   2007-05-23 15:21:06 +0000
+
+    Occitan first translation
+    
+    svn path=/trunk/; revision=1898
+
+ po/oc.po | 41 ++++++++++++++++++-----------------------
+ 1 file changed, 18 insertions(+), 23 deletions(-)
+
+commit e669eed1e87bddf7533e36980ed31246c3434f45
+Author: Chris Wilson 
+Date:   2007-05-23 12:40:31 +0000
+
+    Fixup ChangeLog entry.
+    
+    
+    svn path=/trunk/; revision=1897
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1f23ee3ac42d03e0101d1df78b0ee2676f8a8f95
+Author: Chris Wilson 
+Date:   2007-05-23 12:36:13 +0000
+
+    cf Bug 439247 – scrolling vim in full screen is painfully slow and takes
+    
+    2007-05-23  Chris Wilson  
+    
+        cf Bug 439247 – scrolling vim in full screen is painfully slow and takes up 100% of the cpu
+    
+        * src/vte.c (_vte_invalidate_cell), (vte_terminal_draw_rows):
+            Fix up the unwanted break of Glyph runs at the end-of-lines.
+    
+    
+    svn path=/trunk/; revision=1896
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 41 +++++++++++++++++++++++++----------------
+ 2 files changed, 32 insertions(+), 16 deletions(-)
+
+commit 984f92ee6df966b080c82331a6f6d67a54e16b43
+Author: Chris Wilson 
+Date:   2007-05-23 12:30:31 +0000
+
+    Bug 440475 – Display glitch with transparent backgroud
+    
+    2007-05-23  Chris Wilson  
+    
+        Bug 440475 – Display glitch with transparent backgroud
+    
+        * src/vte.c (vte_terminal_paint_area):
+            Apply the band-aid fix to clear the area that's about to be
+            repainted. The full solution will to be ensure that the regions
+            after expansion are cell-aligned.
+    
+    
+    svn path=/trunk/; revision=1895
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 11 ++++++-----
+ 2 files changed, 15 insertions(+), 5 deletions(-)
+
+commit 160ea09621654baa7ad33ab92f370ec0bcce227b
+Author: Chris Wilson 
+Date:   2007-05-22 08:40:16 +0000
+
+    Improve ChangeLog entry.
+    
+    
+    svn path=/trunk/; revision=1894
+
+ ChangeLog | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 8268e5723e9787bf6ff4ec85940b316bfabed159
+Author: Chris Wilson 
+Date:   2007-05-22 08:37:38 +0000
+
+    Bug 375112 – ctrl-key combinations yielding just key Original patch by
+    
+    2007-05-22  Chris Wilson  
+    
+        Bug 375112 – ctrl-key combinations yielding just key
+        Original patch by  and refactored by Loïc Minier.
+    
+        * src/vte.c (vte_translate_national_ctrlkeys),
+        (vte_terminal_key_press), (vte_terminal_scroll):
+            When cooking a string to pass through to the client obtain a
+            "raw" keyval.
+    
+    
+    svn path=/trunk/; revision=1893
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 36 +++++++++++++++++++++++++++++++++++-
+ 2 files changed, 45 insertions(+), 1 deletion(-)
+
+commit d042d4067453af8f84b31dc87d1d121fdc2aae12
+Author: Chris Wilson 
+Date:   2007-05-22 08:08:35 +0000
+
+    Bug 440377 – gnome-terminal cannot refresh terminal when accessibility
+    
+    2007-05-22  Chris Wilson  
+    
+        Bug 440377 – gnome-terminal cannot refresh terminal when accessibility enabled
+        Original patch by Li Yuan.
+    
+        * src/vteaccess.c (vte_terminal_accessible_focus_in),
+        (vte_terminal_accessible_focus_out),
+        (vte_terminal_accessible_visibility_notify):
+            Return FALSE rather than void...
+    
+    
+    svn path=/trunk/; revision=1892
+
+ ChangeLog       | 10 ++++++++++
+ src/vteaccess.c | 12 +++++++++---
+ 2 files changed, 19 insertions(+), 3 deletions(-)
+
+commit d57f09aba74aec47f3d538acb9e829201bdfe173
+Author: Chris Wilson 
+Date:   2007-05-17 20:14:46 +0000
+
+    Measure full screen scrolling performance.
+    
+    2007-05-17  Chris Wilson  
+    
+        * perf/scroll.vim:
+        * perf/vim.sh:
+            Measure full screen scrolling performance.
+    
+    
+    svn path=/trunk/; revision=1891
+
+ ChangeLog       |  6 ++++++
+ perf/scroll.vim | 27 +++++++++++++++++++++++++++
+ perf/vim.sh     |  1 +
+ 3 files changed, 34 insertions(+)
+
+commit 428ba2d3611d5162208b6d9087d1ec8621b5ca82
+Author: Chris Wilson 
+Date:   2007-05-15 15:13:03 +0000
+
+    kmaraas reported an issue on IRC where the scrollback was not being
+    
+    2007-05-15  Chris Wilson  
+    
+        kmaraas reported an issue on IRC where the scrollback was not being
+        updated correctly in the first tab when the terminal was resized via
+        a second tab.
+    
+        * src/vte.c (vte_terminal_size_allocate): Check whether we need to
+        recompute the visible lines due to a change in layout geometry.
+    
+    
+    svn path=/trunk/; revision=1890
+
+ ChangeLog | 9 +++++++++
+ src/vte.c | 6 ++++--
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+commit 7370864b91e76d7433da21e8e923c0ac4e7565bf
+Author: Yannig MARCHEGAY 
+Date:   2007-05-13 11:58:09 +0000
+
+    + Occitan
+    
+    svn path=/trunk/; revision=1889
+
+ po/LINGUAS | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 5751979a614fca00ad176de40b26685e52ab1cb1
+Author: Yannig MARCHEGAY 
+Date:   2007-05-13 11:57:46 +0000
+
+    Occitan first translation
+    
+    svn path=/trunk/; revision=1888
+
+ po/oc.po | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 126 insertions(+)
+
+commit 94b939236b9648ff3925260286d888c444d20df8
+Author: Chris Wilson 
+Date:   2007-04-27 09:33:01 +0000
+
+    Bug 433776 – gnome-terminal crashes when open preedit area Take 2.
+    
+    2007-04-27  Chris Wilson  
+    
+        Bug 433776 – gnome-terminal crashes when open preedit area
+        Take 2.
+    
+        * src/vte.c (vte_terminal_paint): The preedit_cursor is returned by
+        the input modules in characters not in bytes as assumed by the
+        validation.
+    
+    
+    svn path=/trunk/; revision=1887
+
+ ChangeLog | 9 +++++++++
+ src/vte.c | 9 +++------
+ 2 files changed, 12 insertions(+), 6 deletions(-)
+
+commit fdc4e3c5a569e843b08d6e712cea38fe7774a309
+Author: Chris Wilson 
+Date:   2007-04-27 09:05:56 +0000
+
+    Bug 433776 – gnome-terminal crashes when open preedit area
+    
+    2007-04-27  Chris Wilson  
+    
+        Bug 433776 – gnome-terminal crashes when open preedit area
+    
+        * src/vte.c (vte_terminal_paint): Use the validated cursor index.
+    
+    
+    svn path=/trunk/; revision=1886
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 19 +++++++------------
+ 2 files changed, 13 insertions(+), 12 deletions(-)
+
+commit 615e67e1f9c3fc4dba72d6da1c0260ac4cccecb3 (tag: vte_0_16_3)
+Author: Behdad Esfahbod 
+Date:   2007-04-27 07:22:01 +0000
+
+    Released vte-0.16.3.
+    
+    2007-04-27  Behdad Esfahbod  
+    
+            Released vte-0.16.3.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.3.
+    
+            * src/Makefile.am: Bumped libtool version to 11:7:2.
+    
+    
+    svn path=/trunk/; revision=1884
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            | 12 ++++++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 24 insertions(+), 2 deletions(-)
+
+commit 8c0715fb132b875b4630dab2b84bba3f316dbc36
+Author: Chris Wilson 
+Date:   2007-04-24 12:55:20 +0000
+
+    Reference the bug that was actually fixed.
+    
+    
+    svn path=/trunk/; revision=1883
+
+ ChangeLog | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit d808d549710699ca94442ca95b193b84251ac689
+Author: Chris Wilson 
+Date:   2007-04-24 09:47:06 +0000
+
+    Bug 429189 – Vte-WARNING's
+    
+    2007-04-24  Chris Wilson  
+    
+        Bug 429189 – Vte-WARNING's
+    
+        * src/vtexft.c (_vte_xft_open_font_for_char):
+            Convert the warning into a DEBUG.
+    
+    
+    svn path=/trunk/; revision=1882
+
+ ChangeLog    | 7 +++++++
+ src/vtexft.c | 4 +++-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+commit ec9b16efa993b0f12040c781e4446b5ba3862ec3
+Author: Chris Wilson 
+Date:   2007-04-24 08:36:41 +0000
+
+    As noted on Bug 414716, the convention is to use --enable-debug to enable
+    
+    2007-04-24  Chris Wilson  
+    
+        As noted on Bug 414716, the convention is to use --enable-debug
+        to enable extra debugging code.
+    
+        * configure.in:
+            s/debugging/debug/
+    
+    
+    svn path=/trunk/; revision=1881
+
+ ChangeLog    | 8 ++++++++
+ configure.in | 4 ++--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+commit b6eae8e5309834fa0f4ab5cbc3ae2275178cda29
+Author: Chris Wilson 
+Date:   2007-04-24 08:33:41 +0000
+
+    Bug 414716 – Refresh issue after changing workspaces
+    
+    2007-04-24  Chris Wilson  
+    
+        Bug 414716 – Refresh issue after changing workspaces
+    
+        * src/vte.c (vte_terminal_hierarchy_changed):
+            Do not respond to toplevel mapping events.
+    
+    
+    svn path=/trunk/; revision=1880
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 39 ---------------------------------------
+ 2 files changed, 7 insertions(+), 39 deletions(-)
+
+commit a569abe2fa825a56d8cdd0e4031e4a82d4403457 (tag: vte_0_16_2)
+Author: Behdad Esfahbod 
+Date:   2007-04-23 22:34:37 +0000
+
+    Released vte-0.16.2.
+    
+    2007-04-23  Behdad Esfahbod  
+    
+            Released vte-0.16.2.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.2.
+    
+            * src/Makefile.am: Bumped libtool version to 11:6:2.
+    
+    
+    svn path=/trunk/; revision=1878
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            |  8 ++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 20 insertions(+), 2 deletions(-)
+
+commit 4f1f875b87de00b595d05fe164b1a59cfb769a3c
+Author: Chris Wilson 
+Date:   2007-04-23 11:34:07 +0000
+
+    Bug 431799 – Regex highlighting is broken
+    
+    2007-04-23  Chris Wilson 
+    
+        Bug 431799 – Regex highlighting is broken
+    
+        * src/vte.c (vte_terminal_emit_contents_changed),
+        (vte_terminal_match_hilite_update), (process_timeout),
+        (update_repeat_timeout), (update_timeout):
+            Always emit any pending updates before redrawing. This
+            ensures for example that the match contents are updated
+            after a simple scroll event.
+    
+    
+    svn path=/trunk/; revision=1877
+
+ ChangeLog | 11 +++++++++++
+ src/vte.c | 24 +++++++++++++++++++-----
+ 2 files changed, 30 insertions(+), 5 deletions(-)
+
+commit b293b2cfd64c5bad6751c34137367ed7aaf5b854
+Author: Chris Wilson 
+Date:   2007-04-23 11:18:58 +0000
+
+    XftDrawSetClip(NULL) disables the clip mask XftDrawSetClipRectangles(NULL)
+    is a completely opaque clip mask, the exact opposite.
+    
+    
+    svn path=/trunk/; revision=1876
+
+ src/vtexft.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f9e23220a7a164b2f580c90c99e63baf2f3d4c44
+Author: Chris Wilson 
+Date:   2007-04-20 19:45:00 +0000
+
+    Optimise away the use of a clip mask for the common case of redrawing the
+    
+    2007-04-20  Chris Wilson  
+    
+        * src/vtexft.c (_vte_xft_start), (_vte_xft_clip):
+            Optimise away the use of a clip mask for the common case
+            of redrawing the whole terminal.
+    
+    
+    svn path=/trunk/; revision=1875
+
+ ChangeLog    |  6 ++++++
+ src/vtexft.c | 36 +++++++++++++++++++++++++-----------
+ 2 files changed, 31 insertions(+), 11 deletions(-)
+
+commit b63ed2abda9e121c409aa5942aceec7b2f3b86c6
+Author: Funda Wang 
+Date:   2007-04-19 00:37:18 +0000
+
+    Updated Simplified Chinese translation from Yang Zhang.
+    
+    svn path=/trunk/; revision=1874
+
+ po/ChangeLog |  4 ++++
+ po/zh_CN.po  | 73 ++++++++++++++++++++++++++++++++++++------------------------
+ 2 files changed, 48 insertions(+), 29 deletions(-)
+
+commit c78f2f74ce582e237f5f08278b009dfcc142a849
+Author: Behdad Esfahbod 
+Date:   2007-04-17 06:40:12 +0000
+
+    Consider ambiguous-width chars if VTE_CJK_WIDTH env var is set and we are
+    
+    2007-04-17  Behdad Esfahbod  
+    
+            * src/iso2022.c (_vte_iso2022_ambiguous_width): Consider
+            ambiguous-width chars if VTE_CJK_WIDTH env var is set and we are
+            under a CJK locale.
+    
+    
+    svn path=/trunk/; revision=1873
+
+ ChangeLog     | 6 ++++++
+ src/iso2022.c | 7 +++++++
+ 2 files changed, 13 insertions(+)
+
+commit e5acf7b41bea4c6b3c86c01e2b86696ae92b33cb (tag: vte_1_16_1)
+Author: Behdad Esfahbod 
+Date:   2007-04-09 17:50:38 +0000
+
+    Released vte-0.16.1.
+    
+    2007-03-12  Behdad Esfahbod  
+    
+            Released vte-0.16.1.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.1.
+    
+            * src/Makefile.am: Bumped libtool version to 11:5:2.
+    
+    
+    svn path=/trunk/; revision=1871
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            | 32 ++++++++++++++++++++++++++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 44 insertions(+), 2 deletions(-)
+
+commit 19894afc3a1b5cefe4d8c3c8395b352ead50c502
+Author: Ignacio Casal Quinteiro 
+Date:   2007-04-08 22:04:52 +0000
+
+    Updated Galician Translation
+    
+    svn path=/trunk/; revision=1870
+
+ po/ChangeLog |  4 ++++
+ po/gl.po     | 71 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 42 insertions(+), 33 deletions(-)
+
+commit 2acbec9d0d810d944f8123823a9746f8baad68cd
+Author: Chris Wilson 
+Date:   2007-04-06 10:27:26 +0000
+
+    Minor ChangeLog wording change.
+    
+    svn path=/trunk/; revision=1868
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1deeae58857fdf10da2438686ffa88ef8ad3c8d3
+Author: Chris Wilson 
+Date:   2007-04-06 10:26:11 +0000
+
+    Bug 426870 – vte often passes NUL to functions requiring valid unichar
+    
+    2007-04-06  Chris Wilson  
+    
+        Bug 426870 – vte often passes NUL to functions requiring valid unichar
+    
+        * src/vte.c (_vte_invalidate_cell), (_vte_invalidate_cursor_once),
+        (vte_terminal_paint):
+            Consistently guard for cell->c == '\0' before calling
+            _vte_draw_get_char_width.
+    
+    
+    svn path=/trunk/; revision=1867
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 16 ++++++++++------
+ 2 files changed, 19 insertions(+), 6 deletions(-)
+
+commit 04df4233a12d4801c22df3ff6ffde5b2f347f688
+Author: Chris Wilson 
+Date:   2007-04-06 09:58:09 +0000
+
+    Bug 419644 – Links do not get highlighted anymore Also see Bug 404757
+    
+    2007-04-06  Chris Wilson  
+    
+        Bug 419644 – Links do not get highlighted anymore
+        Also see Bug 404757 – URL matching doesn't work with PCRE
+    
+        * configure.in:
+            Kill --with-pcre as it changes the semantics of the API
+            and only causes confusion.
+    
+    
+    svn path=/trunk/; revision=1866
+
+ ChangeLog    |  9 +++++++++
+ configure.in | 17 -----------------
+ 2 files changed, 9 insertions(+), 17 deletions(-)
+
+commit 962d231f324013e659bb6bf5ebc08f08f2ca8309
+Author: Chris Wilson 
+Date:   2007-04-05 10:40:45 +0000
+
+    Bug 426541 – crash on IRM escape code
+    
+    2007-04-05  Chris Wilson  
+    
+        Bug 426541 – crash on IRM escape code
+    
+        * src/vte.c (vte_terminal_ensure_cursor),
+        (_vte_terminal_insert_char):
+            Mishandled insertion - we always extended the row for
+            inserts even though the row would automagically extend
+            for the inserted cells. This lead to referencing
+            uninitialised cells at the end of the row during painting.
+        * src/vte.c (vte_terminal_draw_rows):
+            Retrieve the cell before inspecting it.
+    
+    
+    svn path=/trunk/; revision=1865
+
+ ChangeLog | 17 +++++++++++++++--
+ src/vte.c | 24 ++++++++++++------------
+ 2 files changed, 27 insertions(+), 14 deletions(-)
+
+commit ca778f57c983bf7994563c9b0df1d28f3af024e2
+Author: Chris Wilson 
+Date:   2007-04-04 10:53:19 +0000
+
+    Bug 424184 – Make scroll wheel send Page Up/Down when it makes sense
+    
+    2007-04-04  Chris Wilson  
+    
+        Bug 424184 – Make scroll wheel send Page Up/Down when it makes sense
+    
+        Original patch by Shaun McCance and refined by Baris Cicek.
+    
+        * src/vte.c (vte_terminal_scroll):
+            Send cursor keypress instead of trying to scroll the
+            alternate screen in vain.
+    
+    
+    svn path=/trunk/; revision=1864
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 44 +++++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 49 insertions(+), 5 deletions(-)
+
+commit a6bb6a44d09688ac14d10694c283c1d11a146b04
+Author: Chris Wilson 
+Date:   2007-04-03 07:55:06 +0000
+
+    Bug 425767 – vte_terminal_set_color_highlight should test for NULL
+    
+    2007-04-03  Chris Wilson  
+    
+        Bug 425767 – vte_terminal_set_color_highlight should test for
+        NULL before _vte_debug_print
+    
+        * src/vte.c (vte_terminal_set_color_cursor),
+        (vte_terminal_set_color_highlight):
+            Differentiate between set/unset paths.
+    
+    
+    svn path=/trunk/; revision=1863
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 24 ++++++++++++++----------
+ 2 files changed, 23 insertions(+), 10 deletions(-)
+
+commit b0f2686e65352151ff8aab15b37005235bffc6e7
+Author: Inaki Larranaga Murgoitio 
+Date:   2007-03-31 17:30:22 +0000
+
+    Updated Basque translation.
+    
+    2007-03-31  Inaki Larranaga Murgoitio  
+    
+            * eu.po: Updated Basque translation.
+    
+    
+    svn path=/trunk/; revision=1862
+
+ po/ChangeLog |  4 ++++
+ po/eu.po     | 73 +++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 44 insertions(+), 33 deletions(-)
+
+commit 92e36b3d49413ac052f1c988757211600c90ed84
+Author: Claudio Saavedra 
+Date:   2007-03-30 17:32:42 +0000
+
+    Updated Spanish translation by Rodrigo M. Fombellida.
+    
+    2007-03-30  Claudio Saavedra  
+    
+            * es.po: Updated Spanish translation by Rodrigo M. Fombellida.
+    
+    
+    
+    svn path=/trunk/; revision=1861
+
+ po/ChangeLog |   4 +++
+ po/es.po     | 113 +++++++++++++++++++++++------------------------------------
+ 2 files changed, 48 insertions(+), 69 deletions(-)
+
+commit 6ed39db9b7e7c210666a42203fa6c1db0988590e
+Author: Ignacio Casal Quinteiro 
+Date:   2007-03-25 21:13:23 +0000
+
+    Updated Galician translation.
+    
+    svn path=/trunk/; revision=1860
+
+ po/ChangeLog |  4 ++++
+ po/gl.po     | 78 +++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 44 insertions(+), 38 deletions(-)
+
+commit aeaf1b3b79a9184a665d5e0a948b03717eb4c4a8
+Author: Chris Wilson 
+Date:   2007-03-25 14:06:43 +0000
+
+    Bug 422385 – vte appears at the top of the root window even when packed
+    
+    2007-03-25  Chris Wilson 
+    
+            Bug 422385 – vte appears at the top of the root window even when
+            packed at the bottom of it
+    
+            Patch by Dodji Seketeli.
+    
+            * src/vte.c (vte_terminal_size_allocate), (vte_terminal_realize):
+                    Honour the allocated position when realizing the widget.
+    
+    
+    svn path=/trunk/; revision=1858
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c |  6 +++---
+ 2 files changed, 13 insertions(+), 3 deletions(-)
+
+commit 21217e30ed9040b53ff531fca4411170e6a54c46
+Author: Chris Wilson 
+Date:   2007-03-22 12:10:09 +0000
+
+    Insert spaces into the Xft glyph stream to avoid the overhead of
+    
+    2007-03-22  Chris Wilson  
+    
+            * src/vtexft.c (_vte_xft_draw_text):
+                    Insert spaces into the Xft glyph stream to avoid the
+                    overhead of restarting a glyph sequence for every word.
+    
+    
+    svn path=/trunk/; revision=1857
+
+ ChangeLog    |  6 ++++++
+ src/vtexft.c | 36 ++++++++++++++++++++++++++++++++----
+ 2 files changed, 38 insertions(+), 4 deletions(-)
+
+commit 48fae69f26cef757e4b24198b5ec2bfc74fdd520
+Author: Chris Wilson 
+Date:   2007-03-21 12:38:02 +0000
+
+    Bug 420935 – glyph can be cropped with not fitting in a cell
+    
+    2007-03-21  Chris Wilson  
+    
+            Bug 420935 – glyph can be cropped with not fitting in a cell
+    
+            * src/vte.c (vte_terminal_paint):
+                    Don't redraw the invisible cursor
+                    - avoids nasty artifacts like clipping extra wide glyphs.
+    
+    
+    svn path=/trunk/; revision=1856
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 70 +++++++++++++++++++++++++++++++--------------------------------
+ 2 files changed, 43 insertions(+), 35 deletions(-)
+
+commit 73d0161e60567644e2e0ed50f52a0537e628affb
+Author: Pema Geyleg 
+Date:   2007-03-21 04:42:07 +0000
+
+    Updated Dzongkha Translation
+    
+    svn path=/trunk/; revision=1855
+
+ po/ChangeLog |  4 ++++
+ po/dz.po     | 75 ++++++++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 46 insertions(+), 33 deletions(-)
+
+commit 1c1128e26a33ac9ce9b30fdead6d9817ad1e17e4
+Author: Chris Wilson 
+Date:   2007-03-19 14:08:33 +0000
+
+    Leave 'contents-change' to the scroll handler.
+    
+    2007-03-19  Chris Wilson  
+    
+            * src/vte.c (vte_terminal_scroll_pages):
+                    Leave 'contents-change' to the scroll handler.
+    
+    
+    svn path=/trunk/; revision=1854
+
+ ChangeLog | 5 +++++
+ src/vte.c | 2 --
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+commit 4a7d25e1adfcb66a0687f00efe41b2f9a156c609
+Author: Chris Wilson 
+Date:   2007-03-19 10:51:09 +0000
+
+    Accidentally inverted an is-empty? check during the elimination of the
+    
+    2007-03-19  Chris Wilson  
+    
+            * src/vte.c (vte_terminal_extend_selection),
+            (vte_terminal_draw_rows):
+                    Accidentally inverted an is-empty? check during the
+                    elimination of the empty bitfield.
+    
+    
+    svn path=/trunk/; revision=1853
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 5 ++---
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+commit badce29ef7e7e30bc0b05e375594bd62eadb0cbb
+Author: Chris Wilson 
+Date:   2007-03-19 10:14:32 +0000
+
+    Bug 420067 – Does not handle expose events whilst processing unseen
+    
+    2007-03-19  Chris Wilson  
+    
+            Bug 420067 – Does not handle expose events whilst processing
+            unseen incoming data
+    
+            * src/vte.c (vte_terminal_expose):
+                    Handle the expose immediately if we are only processing
+                    incoming data (ie no redraws pending).
+    
+    
+    svn path=/trunk/; revision=1852
+
+ ChangeLog | 9 +++++++++
+ src/vte.c | 4 +++-
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+commit 2cc778da5dd507a139aeb7a0324c96bf186398d4
+Author: Laurent Dhima 
+Date:   2007-03-16 18:01:36 +0000
+
+    Updated Albanian translation.
+    
+    svn path=/trunk/; revision=1851
+
+ po/ChangeLog |  4 +++
+ po/sq.po     | 85 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 49 insertions(+), 40 deletions(-)
+
+commit fac7f53391ed453b9efb34a924004309535162a1
+Author: Chris Wilson 
+Date:   2007-03-16 11:55:36 +0000
+
+    Remove a chunk of code that was tried as a mutt band-aid long ago and was
+    
+    2007-03-16  Chris Wilson  
+    
+            * 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.
+    
+    
+    svn path=/trunk/; revision=1850
+
+ ChangeLog    | 6 ++++++
+ src/vteseq.c | 9 ---------
+ 2 files changed, 6 insertions(+), 9 deletions(-)
+
+commit b73b7e1536e4cf93688c7fabd98d1a2610550911
+Author: Chris Wilson 
+Date:   2007-03-16 11:48:32 +0000
+
+    Bug 415381 – Improve performance of vte_terminal_insert_char()
+    
+    2007-03-16  Chris Wilson  
+    
+            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):
+    
+    
+    svn path=/trunk/; revision=1849
+
+ ChangeLog         |  16 +++++++
+ src/vte-private.h |   4 +-
+ src/vte.c         | 133 ++++++++++++++++++++----------------------------------
+ src/vteseq.c      |   2 +-
+ 4 files changed, 68 insertions(+), 87 deletions(-)
+
+commit cda925578fd1314950623a909e76dec9fc0b432a
+Author: Chris Wilson 
+Date:   2007-03-16 11:40:55 +0000
+
+    cf Bug 415381 – Improve performance of vte_terminal_insert_char()
+    
+    2007-03-16  Chris Wilson  
+    
+            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:
+    
+    
+    svn path=/trunk/; revision=1848
+
+ ChangeLog         |  9 +++++++++
+ src/vte-private.h |  4 ++--
+ src/vte.c         | 24 +++++++++---------------
+ src/vteseq.c      | 44 ++++++++++++++++++++++----------------------
+ 4 files changed, 42 insertions(+), 39 deletions(-)
+
+commit 951f597495bf01b693ae1cd9abb09c78e6212244
+Author: Chris Wilson 
+Date:   2007-03-16 11:37:07 +0000
+
+    cf Bug 415381 – Improve performance of vte_terminal_insert_char()
+    
+    2007-03-16  Chris Wilson  
+    
+            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:
+    
+    
+    svn path=/trunk/; revision=1847
+
+ ChangeLog         |   8 ++
+ src/vte-private.h |  36 ++++-----
+ src/vte.c         | 224 +++++++++++++++++++++++++++---------------------------
+ src/vteseq.c      | 114 ++++++++++++++-------------
+ 4 files changed, 194 insertions(+), 188 deletions(-)
+
+commit 62aed61f89c15016f45416067dc6af5dae2dec89
+Author: Chris Wilson 
+Date:   2007-03-16 11:14:53 +0000
+
+    A couple more compilation fixes.
+    
+    svn path=/trunk/; revision=1846
+
+ src/vte.c    | 8 ++++----
+ src/vtegl.c  | 3 +--
+ src/vtexft.c | 4 +---
+ 3 files changed, 6 insertions(+), 9 deletions(-)
+
+commit 0ae6cc3971278263ff15bdd7ecf361a61bf1632b
+Author: Chris Wilson 
+Date:   2007-03-16 10:53:37 +0000
+
+    Missed a couple of chunks needed to compile!
+    
+    
+    svn path=/trunk/; revision=1845
+
+ src/vte-private.h |  2 +-
+ src/vte.c         | 13 ++++++-------
+ 2 files changed, 7 insertions(+), 8 deletions(-)
+
+commit 2233a6468f3b40e365a864042251c5b8662a6771
+Author: Chris Wilson 
+Date:   2007-03-16 10:51:58 +0000
+
+    Need to trigger update timeout rather than process timeout otherwise the
+    
+    2007-03-16  Chris Wilson  
+    
+            Need to trigger update timeout rather than process timeout
+            otherwise the background is not updated.
+    
+            * src/vte.c (vte_terminal_queue_adjustment_changed),
+            (vte_terminal_queue_adjustment_value_changed):
+    
+    
+    svn path=/trunk/; revision=1844
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 22 +++++++++++++---------
+ 2 files changed, 21 insertions(+), 9 deletions(-)
+
+commit 16ff2c576eba699bf7a1f80e4806bdd1c54173be
+Author: Chris Wilson 
+Date:   2007-03-16 10:47:31 +0000
+
+    Avoid some allocations.
+    
+    2007-03-16  Chris Wilson  
+    
+            * src/vtexft.c (_vte_xft_create), (_vte_xft_destroy),
+            (_vte_xft_start), (_vte_xft_end), (_vte_xft_clip),
+            (_vte_xft_clear): Avoid some allocations.
+    
+    
+    svn path=/trunk/; revision=1843
+
+ ChangeLog    |  6 ++++
+ src/vtexft.c | 93 ++++++++++++++++++++++++++----------------------------------
+ 2 files changed, 46 insertions(+), 53 deletions(-)
+
+commit a4cb981c34efb1086b7c1551e25df42605947297
+Author: Chris Wilson 
+Date:   2007-03-16 10:44:47 +0000
+
+    Bug 418073 – Opacity ignored for vtexft
+    
+    2007-03-16  Chris Wilson  
+    
+            Bug 418073 – Opacity ignored for vtexft
+    
+            * src/vte.c:
+            * src/vtedraw.c (_vte_draw_requires_clear):
+            * src/vtedraw.h:
+            * src/vteft2.c (_vte_ft2_set_background_image):
+            * src/vtegl.c (_vte_gl_create), (_vte_gl_set_background_image):
+            * src/vtepango.c (_vte_pango_set_background_image):
+            * src/vtepangox.c (_vte_pango_x_set_background_image):
+            * src/vtexft.c (_vte_xft_set_background_color),
+            (_vte_xft_set_background_image):
+                    Flood fill the backing pixmap if we need to change it's
+                    opacity as well.
+    
+    
+    svn path=/trunk/; revision=1842
+
+ ChangeLog       | 18 ++++++++++++++++++
+ src/vte.c       |  2 +-
+ src/vtedraw.c   |  4 ++--
+ src/vtedraw.h   |  4 ++--
+ src/vteft2.c    |  2 +-
+ src/vtegl.c     |  2 +-
+ src/vtepango.c  |  4 ++--
+ src/vtepangox.c |  4 ++--
+ src/vtexft.c    |  7 +++++--
+ 9 files changed, 34 insertions(+), 13 deletions(-)
+
+commit 0323293dbad98bcabc8ef79ee04a98f41c6307ac
+Author: Chris Wilson 
+Date:   2007-03-16 10:37:32 +0000
+
+    Bug 418910 – Asymmetric scrolling with mouse wheel
+    
+    2007-03-16  Chris Wilson  
+    
+            Bug 418910 – Asymmetric scrolling with mouse wheel
+    
+            * configure.in:
+            * src/vte.c: Round-up the delta before applying to ensure consistency
+            between up and down.
+    
+    
+    svn path=/trunk/; revision=1841
+
+ ChangeLog    |  6 ++++++
+ configure.in |  1 +
+ src/vte.c    | 15 ++++++++-------
+ 3 files changed, 15 insertions(+), 7 deletions(-)
+
+commit efdb21202b7fda649fc4e25d5039e0181152da10
+Author: Chris Wilson 
+Date:   2007-03-16 10:26:12 +0000
+
+    Refactor some common code.
+    
+    2007-03-16  Chris Wilson  
+    
+            * src/vte.c (vte_terminal_catch_child_exited), (vte_terminal_eof),
+            (vte_terminal_process_incoming): Refactor some common code.
+    
+    
+    svn path=/trunk/; revision=1840
+
+ ChangeLog |   5 +++
+ src/vte.c | 114 ++++++++++++++++++++++++++++----------------------------------
+ 2 files changed, 56 insertions(+), 63 deletions(-)
+
+commit 6121477a73bfb822b244f2e7dace419e97c8dabc
+Author: Chris Wilson 
+Date:   2007-03-16 10:19:42 +0000
+
+    Bug 416634 – Rendering glitch as autowrapped chars are outside
+    
+    2007-03-16  Chris Wilson  
+    
+            Bug 416634 – Rendering glitch as autowrapped chars are outside invalidated bbox
+    
+            * src/vte.c (_vte_terminal_insert_char),
+            (vte_terminal_process_incoming): Correctly update bbox after
+            autowrapping.
+    
+    
+    svn path=/trunk/; revision=1839
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 35 +++++++++++++++++++++++++++++++++--
+ 2 files changed, 41 insertions(+), 2 deletions(-)
+
+commit a4166ac0a77f3ffd544d130216aa4e4d09586ff8
+Author: Chris Wilson 
+Date:   2007-03-16 10:15:53 +0000
+
+    Bug 416635 – Rendering glitch: double draw of line below exposed region
+    
+    2007-03-16  Chris Wilson  
+    
+            Bug 416635 – Rendering glitch: double draw of line below exposed region
+    
+            * src/vte.c (vte_terminal_expand_region),
+            (vte_terminal_paint_area): Kill a couple of off-by-ones.
+    
+    
+    svn path=/trunk/; revision=1838
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 10 ++++------
+ 2 files changed, 11 insertions(+), 6 deletions(-)
+
+commit c92e744f31e97c825a9b62b628993d7d61e8ba90
+Author: Chris Wilson 
+Date:   2007-03-16 10:11:04 +0000
+
+    Bug 418588 – Invalid read when drawing preedit cursor
+    
+    2007-03-16  Chris Wilson  
+    
+            Bug 418588 – Invalid read when drawing preedit cursor
+    
+            * src/vte.c (vte_terminal_paint):
+                    No need to read what is drawn and furthermore isn't allocated.
+    
+    
+    svn path=/trunk/; revision=1837
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 12 ------------
+ 2 files changed, 7 insertions(+), 12 deletions(-)
+
+commit 8fcef563eb841bca377e1e54eb87ddc181e77935
+Author: Chris Wilson 
+Date:   2007-03-16 10:09:05 +0000
+
+    Bug 417652 – Scrolling bug exposed by nvi
+    
+    2007-03-16  Chris Wilson  
+    
+            Bug 417652 – Scrolling bug exposed by nvi
+    
+            * src/vte.c (vte_terminal_insert_rows), (_vte_terminal_ensure_row),
+            (vte_terminal_ensure_cursor), (_vte_terminal_update_insert_delta):
+                    Ensure the rows before updating the insert delta and refactor
+                    the common code.
+    
+    
+    svn path=/trunk/; revision=1836
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 55 ++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 37 insertions(+), 27 deletions(-)
+
+commit c153f7658423037d86cedbe4e29b5c0426dfa23d
+Author: Chris Wilson 
+Date:   2007-03-16 10:04:03 +0000
+
+    Bug 417301 – Terminal widgets don't respond to DPI changes
+    
+    2007-03-16  Chris Wilson  
+    
+            Bug 417301 – Terminal widgets don't respond to DPI changes
+    
+            * src/vte.c (vte_terminal_fc_settings_changed): Force a font reload
+            after XFT settings have changed.
+    
+    
+    svn path=/trunk/; revision=1835
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 11 ++++++++++-
+ 2 files changed, 17 insertions(+), 1 deletion(-)
+
+commit 6e2f5d59cf01cb7afd7954b03dec2c16d76b358a (tag: vte_0_16_0)
+Author: Behdad Esfahbod 
+Date:   2007-03-12 23:31:27 +0000
+
+    Released vte-0.16.0.
+    
+    2007-03-12  Behdad Esfahbod  
+    
+            Released vte-0.16.0.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.16.0.
+    
+            * src/Makefile.am: Bumped libtool version to 11:4:2.
+    
+    
+    svn path=/trunk/; revision=1833
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            |  8 ++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 20 insertions(+), 2 deletions(-)
+
+commit 61d35acde10c49eff72bc36f0e137aed906f9613
+Author: Luca Ferretti 
+Date:   2007-03-12 07:47:36 +0000
+
+    Updated Italian translation by Francesco Marletta.
+    
+    2007-03-12  Luca Ferretti  
+    
+            * it.po: Updated Italian translation by Francesco Marletta.
+    
+    
+    svn path=/trunk/; revision=1832
+
+ po/ChangeLog |  4 +++
+ po/it.po     | 97 ++++++++++++++++++++++--------------------------------------
+ 2 files changed, 39 insertions(+), 62 deletions(-)
+
+commit d82a2f2df75285a83708a4a35268fd3a319be134
+Author: Danilo Šegan 
+Date:   2007-03-10 18:57:27 +0000
+
+    Updated Serbian translation.
+    
+    svn path=/trunk/; revision=1831
+
+ po/ChangeLog  |  4 +++
+ po/sr.po      | 78 ++++++++++++++++++++++++++++-----------------------
+ po/sr@Latn.po | 89 ++++++++++++++++++++++++++++++++---------------------------
+ 3 files changed, 97 insertions(+), 74 deletions(-)
+
+commit 2b448ff232e9c8abb7dc27ae804f8ca2dd255f9a
+Author: Leonid Kanter 
+Date:   2007-03-10 17:19:55 +0000
+
+    Updated Russian translation
+    
+    svn path=/trunk/; revision=1830
+
+ po/ChangeLog |   4 ++
+ po/ru.po     | 126 ++++++++++++++++++++++-------------------------------------
+ 2 files changed, 51 insertions(+), 79 deletions(-)
+
+commit 1bc367e67dea70d9e4f576285a397bbb4e13191c
+Author: Ihar Hrachyshka 
+Date:   2007-03-10 00:39:21 +0000
+
+    Fixed Belarusian Latin translation.
+    
+    svn path=/trunk/; revision=1829
+
+ po/ChangeLog   |  6 +++++-
+ po/be@latin.po | 16 ++++++++--------
+ 2 files changed, 13 insertions(+), 9 deletions(-)
+
+commit 045b15b2e6bc6d467efa3aaf0c4c205861358cc3
+Author: Ihar Hrachyshka 
+Date:   2007-03-09 13:49:14 +0000
+
+    Fixed wrong credentials.
+    
+    svn path=/trunk/; revision=1828
+
+ po/ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3745030f963586ec141806c0b6266ad180d5211c
+Author: Ihar Hrachyshka 
+Date:   2007-03-09 13:46:08 +0000
+
+    be@latin.po: Added Belarusian Latin translation by Ales Navicki.
+    
+    svn path=/trunk/; revision=1827
+
+ po/ChangeLog   |   4 ++
+ po/LINGUAS     |   1 +
+ po/be@latin.po | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 127 insertions(+)
+
+commit 0c72bb1ce18fe16769f3606580e331138ded6abb
+Author: Gabor Kelemen 
+Date:   2007-03-09 13:31:00 +0000
+
+    Translation updated.
+    
+    2007-03-09  Gabor Kelemen  
+    
+            * hu.po: Translation updated.
+    
+    svn path=/trunk/; revision=1826
+
+ po/ChangeLog |  4 ++++
+ po/hu.po     | 38 +++++++++++++++++++++-----------------
+ 2 files changed, 25 insertions(+), 17 deletions(-)
+
+commit ebf2da0ef20065471f49d6c54afd2f135f8d0f8e
+Author: Gintautas Miliauskas 
+Date:   2007-03-07 20:16:01 +0000
+
+    Updated Lithuanian translation.
+    
+    2007-03-07  Gintautas Miliauskas  
+    
+            * lt.po: Updated Lithuanian translation.
+    
+    
+    
+    svn path=/trunk/; revision=1825
+
+ po/ChangeLog |  4 ++++
+ po/lt.po     | 48 +++++++++++++++++++++++++-----------------------
+ 2 files changed, 29 insertions(+), 23 deletions(-)
+
+commit 8651c1b2ee2f3550f0be9805152697da07171a8c
+Author: Takeshi AIHANA 
+Date:   2007-03-07 14:53:12 +0000
+
+    Updated Japanese translation.
+    
+    2007-03-07  Takeshi AIHANA 
+    
+            * ja.po: Updated Japanese translation.
+    
+    svn path=/trunk/; revision=1824
+
+ po/ChangeLog |  4 ++++
+ po/ja.po     | 47 ++++++++++++++++++++++++++---------------------
+ 2 files changed, 30 insertions(+), 21 deletions(-)
+
+commit 0b1e25475ec1c69adee7b5b9c2cb01b91cc3710b
+Author: Jovan Naumovski 
+Date:   2007-03-06 18:29:32 +0000
+
+    2007-03-06 Jovan Naumovski  *mk.po: Updated Macedonian translation.
+    
+    svn path=/trunk/; revision=1823
+
+ po/ChangeLog |  4 +++
+ po/mk.po     | 83 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 49 insertions(+), 38 deletions(-)
+
+commit cf7bb8e3391ea014738b1633044bfd436eee97b9
+Author: David Lodge 
+Date:   2007-03-06 12:47:37 +0000
+
+    Updated en_GB translation
+    
+    svn path=/trunk/; revision=1822
+
+ po/ChangeLog |  4 ++++
+ po/en_GB.po  | 48 ++++++++++++++++++++++++++----------------------
+ 2 files changed, 30 insertions(+), 22 deletions(-)
+
+commit 12e084dd9ed1e72bde4bc4db603454257af203b3
+Author: Chris Wilson 
+Date:   2007-03-06 00:29:39 +0000
+
+    More work to match mutt's behaviour under xterm.
+    
+    2007-03-06  Chris Wilson  
+    
+            * src/vteseq.c (vte_sequence_handler_cm), (vte_sequence_handler_sf):
+                    More work to match mutt's behaviour under xterm.
+    
+    
+    svn path=/trunk/; revision=1821
+
+ ChangeLog     |  5 +++++
+ src/vtedraw.c |  2 +-
+ src/vteseq.c  | 29 +++++++++--------------------
+ 3 files changed, 15 insertions(+), 21 deletions(-)
+
+commit 32641950c83f0ac3a52f5dd7e5251a4c649c6d8d
+Author: Chris Wilson 
+Date:   2007-03-05 23:20:30 +0000
+
+    Use the process estimate to load balance between multiple active
+    
+    2007-03-05  Chris Wilson  
+    
+            * src/vte.c (vte_terminal_io_read):
+                    Use the process estimate to load balance between multiple
+                    active terminals.
+    
+    
+    svn path=/trunk/; revision=1820
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 4 ++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 014ea56bf1a6def3aad75e30bf4099756a1e2a43
+Author: Chris Wilson 
+Date:   2007-03-05 22:21:58 +0000
+
+    Tweak the fill of painted cells to match mutt's behaviour under xterm.
+    
+    2007-03-05  Chris Wilson  
+    
+            * src/vteseq.c (vte_sequence_handler_cm),
+            (vte_sequence_handler_dc), (vte_sequence_handler_sf),
+            (vte_sequence_handler_cursor_character_absolute):
+                    Tweak the fill of painted cells to match mutt's behaviour
+                    under xterm.
+    
+    
+    svn path=/trunk/; revision=1819
+
+ ChangeLog    |  8 ++++++++
+ src/vte.c    |  4 ++--
+ src/vteseq.c | 39 ++++++++++++++++++++++++++++++++++++++-
+ 3 files changed, 48 insertions(+), 3 deletions(-)
+
+commit ea79a823aca2baf353945e2176d5e4500de8db6d
+Author: Chris Wilson 
+Date:   2007-03-05 21:17:42 +0000
+
+    Bug 414716 – gnome-terminal-2.17.92: terminal window dies...
+    
+    2007-03-05  Chris Wilson  
+    
+            Bug 414716 – gnome-terminal-2.17.92: terminal window dies...
+    
+            * src/vte.c (vte_terminal_map_toplevel),
+            (vte_terminal_hierarchy_changed):
+                    Force the visibility state to unobscured after the toplevel is
+                    remapped.
+    
+    
+    svn path=/trunk/; revision=1818
+
+ ChangeLog    |  9 +++++++++
+ src/vte.c    | 23 +++++++++++++++++++++++
+ src/vteseq.c |  3 ++-
+ 3 files changed, 34 insertions(+), 1 deletion(-)
+
+commit 9ddd2072aeea4000981f70e2a7302ca12471aa1b
+Author: Chris Wilson 
+Date:   2007-03-05 21:03:41 +0000
+
+    Note to self: Never try to optimize away the redraw.
+    
+    2007-03-05  Chris Wilson  
+    
+            * src/vte.c (vte_terminal_size_allocate):
+                    Note to self: Never try to optimize away the redraw.
+    
+    
+    svn path=/trunk/; revision=1817
+
+ ChangeLog | 5 +++++
+ src/vte.c | 7 -------
+ 2 files changed, 5 insertions(+), 7 deletions(-)
+
+commit be8ace2edd7f872065c3f26ea3149ae18ba45f72
+Author: Chris Wilson 
+Date:   2007-03-05 20:09:25 +0000
+
+    Touch up whitespace in debug output.
+    
+    2007-03-05  Chris Wilson  
+    
+            * src/vte.c (_vte_terminal_insert_char):
+            * src/vtedraw.c (_vte_draw_text), (_vte_draw_char),
+            (_vte_draw_fill_rectangle), (_vte_draw_draw_rectangle):
+                    Touch up whitespace in debug output.
+    
+    
+    svn path=/trunk/; revision=1816
+
+ ChangeLog     | 7 +++++++
+ src/vte.c     | 2 +-
+ src/vtedraw.c | 8 ++++----
+ 3 files changed, 12 insertions(+), 5 deletions(-)
+
+commit 7098429bc2137224371b4a8b75eb006e115cecd2
+Author: Chris Wilson 
+Date:   2007-03-05 19:50:03 +0000
+
+    Make sure the invalidated_all flag is cleared in the expose event if we
+    
+    2007-03-05  Chris Wilson  
+    
+            * src/vte.c (_vte_invalidate_cells), (vte_terminal_set_visibility),
+            (vte_terminal_paint_area), (vte_terminal_expose):
+                    Make sure the invalidated_all flag is cleared in the expose
+                    event if we handle it immediately.
+    
+    
+    svn path=/trunk/; revision=1815
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 14 ++++++++++----
+ 2 files changed, 17 insertions(+), 4 deletions(-)
+
+commit 9facb328b7be42ac7bf4c4fd2a90f5d3db1a4219
+Author: Chris Wilson 
+Date:   2007-03-05 19:05:59 +0000
+
+    Fixup invalidation to end-of-line.
+    
+    2007-03-05  Chris Wilson  
+    
+            * src/vteseq.c (vte_sequence_handler_ce),
+            (vte_sequence_handler_clear_current_line):
+                    Fixup invalidation to end-of-line.
+    
+    
+    svn path=/trunk/; revision=1814
+
+ ChangeLog    |  6 ++++++
+ src/vteseq.c | 13 +++++--------
+ 2 files changed, 11 insertions(+), 8 deletions(-)
+
+commit b07d7fed6725088d52368b39e88083e136899f39
+Author: Chris Wilson 
+Date:   2007-03-05 16:58:04 +0000
+
+    cf Bug 414586 – Terminal screen blinks when menu is opened for the first
+    
+    2007-03-05  Chris Wilson  
+    
+            cf Bug 414586 – Terminal screen blinks when menu is opened for the first time
+    
+            * src/vte.c (vte_terminal_draw_rows), (vte_terminal_expand_region):
+                    Include the window padding when painting the cell backgrounds.
+    
+    
+    svn path=/trunk/; revision=1813
+
+ ChangeLog |  7 ++++++
+ src/vte.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++---------------
+ 2 files changed, 64 insertions(+), 17 deletions(-)
+
+commit 8faa8c912c5b5164c2e9b1b26f7858729c4019a7
+Author: Chris Wilson 
+Date:   2007-03-05 15:48:02 +0000
+
+    trivial compiler warning from last commit
+    
+    svn path=/trunk/; revision=1812
+
+ src/vtedraw.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit ffdc14a771993d18473f406bf73d37e1b0f8806a
+Author: Chris Wilson 
+Date:   2007-03-05 15:35:01 +0000
+
+    Bug 414586 – Terminal screen blinks when menu is opened for the first
+    
+    2007-03-05  Chris Wilson  
+    
+            Bug 414586 – Terminal screen blinks when menu is opened for the first time
+    
+            Avoid resetting the window background colour when the style is reset.
+            Avoid clearing the window if we are using a simple color and double
+            bufferring (i.e when we know we are using a pre-cleared pixmap).
+    
+            * src/vte-private.h:
+            * src/vte.c (vte_terminal_init), (vte_terminal_size_allocate),
+            (vte_terminal_unrealize), (vte_terminal_realize),
+            (vte_terminal_paint_area), (vte_terminal_expose),
+            (vte_terminal_class_init), (vte_terminal_background_update):
+            * src/vtedraw.c (_vte_draw_has_background_image):
+            * src/vtedraw.h:
+            * src/vteft2.c (_vte_ft2_set_background_image):
+            * src/vtegl.c (_vte_gl_set_background_image):
+            * src/vtepango.c (_vte_pango_set_background_image):
+            * src/vtepangox.c (_vte_pango_x_set_background_image):
+    
+    
+    svn path=/trunk/; revision=1811
+
+ ChangeLog         | 21 +++++++++++++++++++++
+ src/vte-private.h |  1 +
+ src/vte.c         | 54 +++++++++++++++++++++++++++++++++++++++---------------
+ src/vtedraw.c     |  7 +++++++
+ src/vtedraw.h     |  2 ++
+ src/vteft2.c      |  1 +
+ src/vtegl.c       |  1 +
+ src/vtepango.c    |  3 +++
+ src/vtepangox.c   |  3 +++
+ src/vtexft.c      |  3 +++
+ 10 files changed, 81 insertions(+), 15 deletions(-)
+
+commit 91be4067a9112a2e19a3084d3b1393dc8067392d
+Author: Ilkka Tuohela 
+Date:   2007-03-05 15:05:46 +0000
+
+    Updated Finnish translation
+    
+    svn path=/trunk/; revision=1810
+
+ po/ChangeLog |  4 ++++
+ po/fi.po     | 36 ++++++++++++++++++++----------------
+ 2 files changed, 24 insertions(+), 16 deletions(-)
+
+commit e4eb60788f093e8ca1fbeb52c4bed4e6573d49b7
+Author: Ankitkumar Rameshchandra Patel 
+Date:   2007-03-05 14:43:38 +0000
+
+    Updated Translation
+    
+    svn path=/trunk/; revision=1809
+
+ po/ChangeLog |  4 ++++
+ po/gu.po     | 78 ++++++++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 48 insertions(+), 34 deletions(-)
+
+commit 32a9ad735618dac47ebdaa8b52e4b6e0d9aa4640
+Author: Chris Wilson 
+Date:   2007-03-05 14:23:08 +0000
+
+    Bug 414586 – Terminal screen blinks when menu is opened for the first
+    
+    2007-03-05  Chris Wilson  
+    
+            Bug 414586 – Terminal screen blinks when menu is opened for the first time
+    
+            * src/vte.c (_vte_invalidate_cells), (_vte_invalidate_all),
+            (vte_terminal_expose), (add_update_timeout):
+                    Juggle the handling of external exposes/invalidates to avoid
+                    delays in refreshing the display when we are idle.
+    
+    
+    svn path=/trunk/; revision=1808
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 62 +++++++++++++++++++++++++++++++-------------------------------
+ 2 files changed, 40 insertions(+), 31 deletions(-)
+
+commit 2ec854aa5f576cc0e03ab893768ef3dea4019b06
+Author: Simos Xenitellis 
+Date:   2007-03-05 13:55:31 +0000
+
+    Updated Greek translation
+    
+    svn path=/trunk/; revision=1807
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit a0ff645837ff137d96c152da65e03148bd54d640
+Author: Simos Xenitellis 
+Date:   2007-03-05 13:54:18 +0000
+
+    Updated Greek translation
+    
+    svn path=/trunk/; revision=1806
+
+ po/el.po | 67 ++++++++++++++++++++++++++++++++++++----------------------------
+ 1 file changed, 38 insertions(+), 29 deletions(-)
+
+commit 28d00b425e844acea7dec71e011c922f1a4a7ef9
+Author: Chris Wilson 
+Date:   2007-03-05 12:26:57 +0000
+
+    cf Bug 414586 – Terminal screen blinks when menu is opened for the first
+    
+    2007-03-05  Chris Wilson  
+    
+            cf Bug 414586 – Terminal screen blinks when menu is opened for the first time
+    
+            * src/vte.c (_vte_invalidate_cells), (vte_terminal_init),
+            (vte_terminal_expand_region), (vte_terminal_paint_area):
+                    After enlarging the expand region make sure the dirty area
+                    includes the border for edge cells.
+    
+    
+    svn path=/trunk/; revision=1805
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 58 ++++++++++++++++++++++++++++++++++++----------------------
+ 2 files changed, 45 insertions(+), 22 deletions(-)
+
+commit 9b97915f00ce32c243c343920de3c332cb3e28f0
+Author: Josep Puigdemont i Casamajó 
+Date:   2007-03-05 01:58:52 +0000
+
+    Updated Catalan translation.
+    
+    svn path=/trunk/; revision=1804
+
+ po/ChangeLog |  4 ++++
+ po/ca.po     | 40 +++++++++++++++++++++++-----------------
+ 2 files changed, 27 insertions(+), 17 deletions(-)
+
+commit b1605f6235c542bfb83ecceea90bcf653b378963
+Author: Peter Bach 
+Date:   2007-03-04 20:19:55 +0000
+
+    Updated Danish translation
+    
+    svn path=/trunk/; revision=1803
+
+ po/ChangeLog |  4 ++++
+ po/da.po     | 38 +++++++++++++++++++++-----------------
+ 2 files changed, 25 insertions(+), 17 deletions(-)
+
+commit 6f039ef2b0cadf7dd07c4d664b2fa45c6205a607
+Author: Chris Wilson 
+Date:   2007-03-04 16:37:27 +0000
+
+    cf Bug 414586 – Terminal screen blinks when menu is opened for the first
+    
+    2007-03-04  Chris Wilson  
+    
+            cf Bug 414586 – Terminal screen blinks when menu is opened for the first time
+    
+            Distinguish between internal update requests and external. If we
+            need to update due to a user action (such as adjusting the background
+            or color palette) do not impose a futher delay.
+    
+            Tidy the color palette modification code to not trigger invalidates if
+            we do not actually modify the palette.
+    
+            * src/vte-private.h:
+            * src/vte.c (vte_terminal_set_color_internal),
+            (vte_terminal_set_color_bold), (vte_terminal_set_color_dim),
+            (vte_terminal_set_color_foreground),
+            (vte_terminal_set_color_background),
+            (vte_terminal_set_color_cursor),
+            (vte_terminal_set_color_highlight), (vte_terminal_set_colors),
+            (root_pixmap_changed_cb), (vte_terminal_set_background_saturation),
+            (vte_terminal_set_background_tint_color), (add_update_timeout):
+            * src/vteseq.c (vte_sequence_handler_ce),
+            (vte_sequence_handler_clear_current_line),
+            (vte_sequence_handler_clear_above_current):
+    
+    
+    svn path=/trunk/; revision=1802
+
+ ChangeLog         |  24 ++++++++++++
+ src/vte-private.h |   2 +-
+ src/vte.c         | 115 ++++++++++++++++++++++++++++++++++++++++--------------
+ src/vteseq.c      |  21 +++++-----
+ 4 files changed, 123 insertions(+), 39 deletions(-)
+
+commit 318c714437d9f81f79690f9766d61a741b855242
+Author: Chao-Hsiung Liao 
+Date:   2007-03-04 00:07:11 +0000
+
+    Updated Traditional Chinese translation(Hong Kong). Updated Traditional
+    
+    
+    2007-03-04  Chao-Hsiung Liao  
+    
+            * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+            * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+    
+    
+    svn path=/trunk/; revision=1801
+
+ po/ChangeLog |  5 ++++
+ po/zh_HK.po  | 88 +++++++++++++++++++++++++++++++++---------------------------
+ po/zh_TW.po  | 82 ++++++++++++++++++++++++++++++-------------------------
+ 3 files changed, 100 insertions(+), 75 deletions(-)
+
+commit 94f8041cbed2ac4369cd4a9d829fef6d867f1435
+Author: Wouter Bolsterlee 
+Date:   2007-03-03 12:35:48 +0000
+
+    Dutch translation updated by Wouter Bolsterlee.
+    
+    2007-03-03  Wouter Bolsterlee  
+    
+            * nl.po: Dutch translation updated by Wouter Bolsterlee.
+    
+    svn path=/trunk/; revision=1800
+
+ po/ChangeLog | 52 +++++++++++++++++++++++--------------------
+ po/nl.po     | 72 ++++++++++++++++++++++++++++++++++++------------------------
+ 2 files changed, 71 insertions(+), 53 deletions(-)
+
+commit 45d6f8a7685521bbd8ba45388211b2388192d64c
+Author: Chris Wilson 
+Date:   2007-03-02 12:54:05 +0000
+
+    Bug 413068 – new line added to tab when opened
+    
+    2007-03-02  Chris Wilson  
+    
+            Bug 413068 – new line added to tab when opened
+    
+            * src/vte.c (vte_terminal_size_allocate):
+                    Replace the ill-conceived attempt (delta could not be
+                    negative, so insert_delta or scroll_delta would not become
+                    negative either) by only considering changes wrt to the number
+                    of visible lines.
+    
+    
+    svn path=/trunk/; revision=1799
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 20 +++++++-------------
+ 2 files changed, 17 insertions(+), 13 deletions(-)
+
+commit 1531fce6bf48a24ea4294af130422eee3401cb81
+Author: Chris Wilson 
+Date:   2007-03-02 12:34:21 +0000
+
+    Bug 413068 – new line added to tab when opened
+    
+    2007-03-02  Chris Wilson  
+    
+            Bug 413068 – new line added to tab when opened
+    
+            * src/vte.c (_vte_terminal_insert_char):
+                    Improve debug output.
+            * src/vte.c (vte_terminal_size_allocate):
+                    Be careful that we don't force insert_delta or scroll_delta
+                    to become negative.
+    
+    
+    svn path=/trunk/; revision=1798
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 28 ++++++++++++++++++++--------
+ 2 files changed, 30 insertions(+), 8 deletions(-)
+
+commit 11c5763c6b9e584a06a2fdc7945837b5d8aa638d
+Author: Ihar Hrachyshka 
+Date:   2007-03-01 19:13:38 +0000
+
+    be.po: Updated Belarusian translation.
+    
+    svn path=/trunk/; revision=1797
+
+ po/ChangeLog |  4 ++++
+ po/be.po     | 48 ++++++++++++++++++++++++++----------------------
+ 2 files changed, 30 insertions(+), 22 deletions(-)
+
+commit d5ced7389f7235ada9794b97ea8678b58899b7db (tag: vte_0_15_6)
+Author: Behdad Esfahbod 
+Date:   2007-03-01 16:21:39 +0000
+
+    Released vte-0.15.6.
+    
+    2007-03-01  Behdad Esfahbod  
+    
+            Released vte-0.15.6.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.15.6.
+    
+            * src/Makefile.am: Bumped libtool version to 11:3:2.
+    
+    
+    svn path=/trunk/; revision=1795
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            | 12 ++++++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 24 insertions(+), 2 deletions(-)
+
+commit d365c60b2dde84a5f251b3a8af2be26dd240a533
+Author: Runa Bhattacharjee 
+Date:   2007-03-01 13:54:16 +0000
+
+    Added Changelog Entry for Bengali India translation updation
+    
+    svn path=/trunk/; revision=1794
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit fe2de849b248afa68e226bad076790d3a4319e4d
+Author: Runa Bhattacharjee 
+Date:   2007-03-01 13:53:41 +0000
+
+    Updated Bengali India Translation
+    
+    svn path=/trunk/; revision=1793
+
+ po/bn_IN.po | 63 +++++++++++++++++++++++++++++++++++--------------------------
+ 1 file changed, 36 insertions(+), 27 deletions(-)
+
+commit dcb7fd974bea5fe49d4f5b0344ebdaffc6d7bae1
+Author: Chris Wilson 
+Date:   2007-03-01 12:58:47 +0000
+
+    Tweak the clear widths to include the pixel widening due to psuedo-bold.
+    
+    2007-03-01  Chris Wilson  
+    
+            * src/vte.c (vte_terminal_draw_cells), (vte_terminal_draw_rows),
+            (vte_terminal_paint):
+                    Tweak the clear widths to include the pixel widening due to
+                    psuedo-bold.
+    
+    
+    svn path=/trunk/; revision=1792
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 7 +++++--
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+commit 5dbdc4d84c313ce1aa69723e6ecc584bcc172454
+Author: Chris Wilson 
+Date:   2007-03-01 10:54:38 +0000
+
+    trivial readability improvement
+    
+    svn path=/trunk/; revision=1791
+
+ src/vte.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 839c35d254d4e905fff331ae2b0733a76f05fff4
+Author: Chris Wilson 
+Date:   2007-03-01 10:50:45 +0000
+
+    Be more careful when filling in gaps.
+    
+    2007-03-01  Chris Wilson  
+    
+            * src/vte-private.h:
+            * src/vte.c (_vte_terminal_ensure_row),
+            (vte_terminal_ensure_cursor), (_vte_terminal_insert_char):
+            * src/vteseq.c (vte_sequence_handler_ta):
+                    Be more careful when filling in gaps.
+    
+    
+    svn path=/trunk/; revision=1790
+
+ ChangeLog         |   8 ++++
+ src/vte-private.h |   1 -
+ src/vte.c         | 120 +++++++++++++++++++++++++-----------------------------
+ src/vteseq.c      |  11 +++--
+ 4 files changed, 71 insertions(+), 69 deletions(-)
+
+commit cea448a26705776ad4de156480e6c7e8d4a9de22
+Author: Maxim Dziumanenko 
+Date:   2007-03-01 10:12:57 +0000
+
+    Update Ukrainian translation.
+    
+    2007-03-01 Maxim Dziumanenko 
+    
+            * Update Ukrainian translation.
+    
+    
+    svn path=/trunk/; revision=1789
+
+ po/ChangeLog |  4 ++++
+ po/uk.po     | 68 +++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 41 insertions(+), 31 deletions(-)
+
+commit fb8c66adab006dc51567dc043ad4d3a9471872a3
+Author: Chris Wilson 
+Date:   2007-03-01 09:50:38 +0000
+
+    Fix X11 headers / libraries detection on bi-arch systems. Patch by
+    
+    2007-03-01  Chris Wilson  
+    
+            Fix X11 headers / libraries detection on bi-arch systems.
+            Patch by Frederic Crozat.
+    
+            * configure.in:
+                    Check for x_includes before ac_x_includes, and similary for
+                    ac_x_libraries.
+    
+    
+    svn path=/trunk/; revision=1788
+
+ ChangeLog    | 9 +++++++++
+ configure.in | 6 +++++-
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+commit e76f76be61f5c533e54c0820361765437ef75b8e
+Author: Chris Wilson 
+Date:   2007-03-01 00:29:52 +0000
+
+    Bug 410534 – Slow content scrolling, takes 100% of CPU.
+    
+    2007-03-01  Chris Wilson  
+    
+            Bug 410534 – Slow content scrolling, takes 100% of CPU.
+    
+            * src/vtexft.c:
+                    Further reduce the cap to 80 after more testing on the
+                    broken fglrx driver.
+    
+    
+    svn path=/trunk/; revision=1787
+
+ ChangeLog    | 8 ++++++++
+ src/vtexft.c | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit 8baeec89102035fcea162cfe3ca6fc0a04cfa778
+Author: Chris Wilson 
+Date:   2007-02-28 23:51:50 +0000
+
+    Bug 413068 – new line added to tab when opened
+    
+    2007-02-28  Chris Wilson  
+    
+            Bug 413068 – new line added to tab when opened
+    
+            * src/vte.c (vte_terminal_ensure_font), (vte_terminal_realize):
+                    Beware when no font is set before the first request...
+                    Make sure that at least the default font is set.
+    
+    
+    svn path=/trunk/; revision=1786
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 36 +++++++++++++++++++-----------------
+ 2 files changed, 27 insertions(+), 17 deletions(-)
+
+commit 0bd7c180ce944078dac26641bc1279b0a38f08ed
+Author: Chris Wilson 
+Date:   2007-02-28 23:09:25 +0000
+
+    Bug 413262 – Incorrectly coloured tabs
+    
+    2007-02-28  Chris Wilson  
+    
+            Bug 413262 – Incorrectly coloured tabs
+    
+            * src/vte-private.h:
+            * src/vte.c (vte_terminal_ensure_cursor),
+            (_vte_terminal_ensure_cursor), (_vte_terminal_insert_char),
+            (_vte_terminal_feed_chunks), (vte_terminal_set_scrollback_lines):
+            * src/vteseq.c (vte_sequence_handler_ta),
+            (vte_sequence_handler_request_terminal_parameters),
+            (vte_sequence_handler_return_terminal_status),
+            (vte_sequence_handler_send_primary_device_attributes):
+                    Fill the tab in the current color, else it will be filled at
+    
+    
+    svn path=/trunk/; revision=1785
+
+ ChangeLog         | 15 +++++++++++++++
+ src/vte-private.h |  1 +
+ src/vte.c         | 25 ++++++++++++-------------
+ src/vteseq.c      | 20 ++++++++++++++------
+ 4 files changed, 42 insertions(+), 19 deletions(-)
+
+commit fb6ea2f5aadde4b6f839c7f755572550c01e5c5a
+Author: Chris Wilson 
+Date:   2007-02-28 21:11:41 +0000
+
+    tidy the ChangeLog
+    
+    svn path=/trunk/; revision=1784
+
+ ChangeLog | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+commit fc51bff17bffd8d4bbf41589d2ca11fba21dbeef
+Author: Chris Wilson 
+Date:   2007-02-28 21:00:24 +0000
+
+    Bug 413102 – Incorrect highlighting in vim
+    
+    2007-02-28  Chris Wilson  
+    
+            Bug 413102 – Incorrect highlighting in vim
+    
+            * src/vte-private.h
+            * src/vte.c  (_vte_terminal_ensure_row),
+            (_vte_terminal_insert_char):
+            * src/vteseq.c  (vte_sequence_handler_cb),
+            (vte_sequence_handler_ce), (vte_sequence_handler_cr),
+            (vte_sequence_handler_ec), (vte_sequence_handler_sf):
+                    Paint the row background when scrolling, this more closely
+                    matches xterm's behaviour.
+    
+    
+    svn path=/trunk/; revision=1783
+
+ ChangeLog         | 13 +++++++++++++
+ src/vte-private.h |  2 +-
+ src/vte.c         | 49 +++++++++++++++++++++++++++++++++++++++++++++++--
+ src/vteseq.c      | 28 ++++++++++++----------------
+ 4 files changed, 73 insertions(+), 19 deletions(-)
+
+commit 8de7d6cd7c0829e932deb78d0627a3ce417053b0
+Author: Artur Flinta 
+Date:   2007-02-28 20:40:37 +0000
+
+    Updated Polish translation by GNOME PL Team.
+    
+    2007-02-28  Artur Flinta  
+    
+            * pl.po: Updated Polish translation by GNOME PL Team.
+    
+    
+    svn path=/trunk/; revision=1782
+
+ po/ChangeLog |  4 ++++
+ po/pl.po     | 35 ++++++++++++++++++++---------------
+ 2 files changed, 24 insertions(+), 15 deletions(-)
+
+commit 6e08e0cb2c2f55abb3a3e5913c7714d74677fd51
+Author: Chris Wilson 
+Date:   2007-02-28 18:28:39 +0000
+
+    Bug 413158 – Cursor trails
+    
+    2007-02-28  Chris Wilson  
+    
+            Bug 413158 – Cursor trails
+    
+            * src/vte.c  (_vte_invalidate_cell):
+                    _vte_invalidate_cell() can be called to invalidate any visible
+                    cell so issue the invalidate even for blank cells.
+    
+    
+    svn path=/trunk/; revision=1781
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 35 +++++++++++++++--------------------
+ 2 files changed, 23 insertions(+), 20 deletions(-)
+
+commit a3f967250fac3613f6ef18a85e87a07bd07f3121
+Author: Chris Wilson 
+Date:   2007-02-28 17:35:44 +0000
+
+    Correct the OBO in the number of columns ensured.
+    
+    2007-02-28  Chris Wilson  
+    
+            * src/vte.c  (_vte_terminal_insert_char):
+                    Correct the OBO in the number of columns ensured.
+    
+    
+    svn path=/trunk/; revision=1780
+
+ ChangeLog | 5 +++++
+ src/vte.c | 3 ++-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit 01f898dad853ad62e86026569391990727160faf
+Author: Djihed Afifi 
+Date:   2007-02-28 16:56:17 +0000
+
+    Updated Arabic Translation by Djihed Afifi.
+    
+    svn path=/trunk/; revision=1779
+
+ po/ChangeLog |  4 ++++
+ po/ar.po     | 45 +++++++++++++++++++++++++++------------------
+ 2 files changed, 31 insertions(+), 18 deletions(-)
+
+commit a8d2ecb1ce63d9504382343053c45a620ae9ccef
+Author: Chris Wilson 
+Date:   2007-02-28 15:38:29 +0000
+
+    Bug 413078 – Crash during opening a new tab whilst scrolling
+    
+    2007-02-28  Chris Wilson  
+    
+            Bug 413078 – Crash during opening a new tab whilst scrolling
+    
+            During input processing it was possible to both remove the timeout and
+            then add a new one. The currently running timeout would believe that
+            it was to continue since the terminal was still active, and so *two*
+            timeouts would be scheduled. Occasionally the second timeout would be
+            called after the first had finished all the work, resulting in the
+            second timeout trying to access a NULL active_terminal list.
+    
+            * src/vte.c  (add_update_timeout), (remove_from_active_list),
+            (vte_terminal_add_process_timeout), (need_processing),
+            (process_timeout), (update_repeat_timeout), (update_timeout):
+                    Watch for recursive g_source_remove() from within timeouts.
+    
+    
+    svn path=/trunk/; revision=1778
+
+ ChangeLog | 16 ++++++++++++++++
+ src/vte.c | 44 ++++++++++++++++++++++++++++++++++++--------
+ 2 files changed, 52 insertions(+), 8 deletions(-)
+
+commit 884d186a7cbe1a5488ade41a4c7e76753a5be2a2
+Author: Chris Wilson 
+Date:   2007-02-28 13:03:38 +0000
+
+    Bug 410534 – Slow content scrolling, takes 100% of CPU.
+    
+    2007-02-28  Chris Wilson  
+    
+            Bug 410534 – Slow content scrolling, takes 100% of CPU.
+    
+            Submitting long glyph runs was causing a dramatic (10x) slow down
+            in the fglrx xserver.
+    
+            * src/vtedraw.h
+            * src/vtexft.c  (_vte_xft_draw_text):
+                    Cap the max glyph run length to 300.
+    
+    
+    svn path=/trunk/; revision=1777
+
+ ChangeLog     | 11 +++++++++++
+ src/vtedraw.h |  2 +-
+ src/vtexft.c  | 12 ++++++++++--
+ 3 files changed, 22 insertions(+), 3 deletions(-)
+
+commit 7e29eee18ece4f89be83258cc55601292a431979
+Author: Chris Wilson 
+Date:   2007-02-28 10:18:32 +0000
+
+    Bug 412717 – Crash when opening a new tab with window maximized
+    
+    2007-02-28  Chris Wilson  
+    
+            Bug 412717 – Crash when opening a new tab with window maximized
+    
+            * src/vte.c  (vte_terminal_size_allocate):
+                    We didn't carefully check the values we were clamping the
+                    cursor to and ended up setting it to -1...  Don't do that!
+    
+    
+    svn path=/trunk/; revision=1776
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 3 ++-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+commit 08d31f14023b9e7b7ca6ff66ce41dfe39199c952
+Author: Chris Wilson 
+Date:   2007-02-27 19:06:02 +0000
+
+    Consistently guard against the snapshot being NULL.
+    
+    2007-02-27  Chris Wilson  
+    
+            * src/vteaccess.c  (vte_terminal_accessible_text_scrolled):
+                    Consistently guard against the snapshot being NULL.
+    
+    
+    svn path=/trunk/; revision=1775
+
+ ChangeLog       |  5 +++++
+ src/vteaccess.c | 70 ++++++++++++++++++++++++++++++++-------------------------
+ 2 files changed, 45 insertions(+), 30 deletions(-)
+
+commit 68ceaca8f594e7379df45940114a4f65d13a21ce (tag: vte_0_15_5)
+Author: Behdad Esfahbod 
+Date:   2007-02-27 18:30:29 +0000
+
+    Released vte-0.15.5.
+    
+    2007-02-27  Behdad Esfahbod  
+    
+            Released vte-0.15.5.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.15.5.
+    
+            * src/Makefile.am: Bumped libtool version to 11:2:2.
+    
+    
+    svn path=/trunk/; revision=1773
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            | 10 ++++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 22 insertions(+), 2 deletions(-)
+
+commit cd85f3fe8680c7ac98366ef015b6ea89e0c00324
+Author: Gintautas Miliauskas 
+Date:   2007-02-27 14:51:04 +0000
+
+    Updated Lithuanian translation.
+    
+    2007-02-27  Gintautas Miliauskas  
+    
+            * lt.po: Updated Lithuanian translation.
+    
+    
+    svn path=/trunk/; revision=1772
+
+ po/ChangeLog |  4 ++++
+ po/lt.po     | 63 ++++++++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 40 insertions(+), 27 deletions(-)
+
+commit f4b6dcc5ebc85b0f8db6d3a3833420507cce34f7
+Author: Priit Laes 
+Date:   2007-02-27 13:41:01 +0000
+
+    Updated Estonian translation by Ivar Smolin .
+    
+    2007-02-27  Priit Laes  
+    
+            * et.po: Updated Estonian translation by Ivar Smolin .
+    
+    svn path=/trunk/; revision=1771
+
+ po/ChangeLog |  4 ++++
+ po/et.po     | 41 +++++++++++++++++++++++------------------
+ 2 files changed, 27 insertions(+), 18 deletions(-)
+
+commit 88bdbffc45efcff6d612fb40e4a382c16a16c822
+Author: Chris Wilson 
+Date:   2007-02-27 12:16:37 +0000
+
+    minor whitespace
+    
+    svn path=/trunk/; revision=1770
+
+ src/vte.c | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+commit 9eccc6f8fae64b5bd28d8de26272b47f6d85a786
+Author: Chris Wilson 
+Date:   2007-02-27 11:49:56 +0000
+
+    Bug 412562 – Crash in vte_terminal_match_hilite_update
+    
+    2007-02-27  Chris Wilson  
+    
+            Bug 412562 – Crash in vte_terminal_match_hilite_update
+    
+            * src/vte.c  (vte_terminal_match_check_internal),
+            (vte_terminal_process_incoming), (_vte_terminal_feed_chunks),
+            (vte_terminal_paste_cb), (vte_terminal_match_hilite_update),
+            (vte_terminal_copy_cb):
+                    Fixup a few 64bit-isms, notably format strings and an
+                    undesired unsigned integer promotion causing this crash.
+    
+    
+    svn path=/trunk/; revision=1769
+
+ ChangeLog | 11 +++++++++++
+ src/vte.c | 59 ++++++++++++++++++++++++++++++++++++-----------------------
+ 2 files changed, 47 insertions(+), 23 deletions(-)
+
+commit 3886ecd4854f2c55c861e0a2e1e6da95c2fb6bf7
+Author: Chris Wilson 
+Date:   2007-02-27 10:42:57 +0000
+
+    whitespace between ChangeLog entries
+    
+    svn path=/trunk/; revision=1768
+
+ ChangeLog | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 226bb59731c29dd2e08c20f54d64db9e97d3549b
+Author: Chris Wilson 
+Date:   2007-02-27 10:42:27 +0000
+
+    Bug 410986 – Fails to build with -z defs
+    
+    2007-02-27  Chris Wilson  
+    
+            Bug 410986 – Fails to build with -z defs
+    
+            If you link the vtemodule.so to libpython, then programs importing
+            vte will have the symbols twice in memory: one set from python and
+            the other from libpython.
+    
+            * configure.in:
+            * python/Makefile.am:
+                    Remove PYTHON_LIBS from linking vtemodule.so.
+                    Convert unresolved symbol errors into warnings so that
+                    building with -Wl,-z,defs continues to work. This is a
+                    *hack* as it hides real errors if you are updating
+                    vte.{def,override}.
+    
+    
+    svn path=/trunk/; revision=1767
+
+ ChangeLog          | 17 +++++++++++++++++
+ configure.in       | 23 +++++++++++++++++++++++
+ python/Makefile.am |  6 +++++-
+ 3 files changed, 45 insertions(+), 1 deletion(-)
+
+commit 854cc5c5038cdabf73e8898a5c0b25364b01a03a
+Author: Chris Wilson 
+Date:   2007-02-27 00:55:44 +0000
+
+    Avoid some computations whilst drawing text.
+    
+    2007-02-27  Chris Wilson  
+    
+            * src/vtexft.c  (_vte_xft_open_font_for_char),
+            (_vte_xft_font_for_char), (_vte_xft_compute_char_width),
+            (_vte_xft_char_width), (_vte_xft_start), (_vte_xft_get_char_width),
+            (_vte_xft_draw_text):
+                    Avoid some computations whilst drawing text.
+    
+    
+    svn path=/trunk/; revision=1766
+
+ ChangeLog    |   8 ++++
+ src/vtexft.c | 152 +++++++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 92 insertions(+), 68 deletions(-)
+
+commit 106d4ffedb96b12ebd7fee050796c858773d0669 (tag: vte_0_15_4)
+Author: Behdad Esfahbod 
+Date:   2007-02-26 21:54:32 +0000
+
+    Released vte-0.15.4.
+    
+    2007-02-26  Behdad Esfahbod  
+    
+            Released vte-0.15.4.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.15.4.
+    
+            * src/Makefile.am: Bumped libtool version to 11:1:2.
+    
+    
+    svn path=/trunk/; revision=1764
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            | 28 ++++++++++++++++++++++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 40 insertions(+), 2 deletions(-)
+
+commit 7da79f11f4a591986bba428bbb00bb427c7a41ad
+Author: Chris Wilson 
+Date:   2007-02-26 21:34:01 +0000
+
+    Bug 410986 – Fails to build with -z defs
+    
+    2007-02-26  Chris Wilson  
+    
+            Bug 410986 – Fails to build with -z defs
+    
+            The forgotten half - the python module also fails to link.
+    
+            * acinclude.m4:
+            * python/Makefile.am:
+                    Add PYTHON_LIBS pointing to the customary location and
+                    remember to include them when compiling vtemodule.so.
+    
+    
+    svn path=/trunk/; revision=1763
+
+ ChangeLog          | 11 +++++++++++
+ acinclude.m4       |  2 ++
+ python/Makefile.am |  2 +-
+ 3 files changed, 14 insertions(+), 1 deletion(-)
+
+commit 47c6e35de305edaf30cc0544641da9bea87c0779
+Author: Chris Wilson 
+Date:   2007-02-26 20:13:37 +0000
+
+    kill the debugging g_print
+    
+    svn path=/trunk/; revision=1762
+
+ src/vte.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit bafc83787b47085e4a569c5d50de63a17ca04e05
+Author: Chris Wilson 
+Date:   2007-02-26 19:48:55 +0000
+
+    fixup a missing colon in the ChangeLog entry
+    
+    svn path=/trunk/; revision=1761
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9d6668fe9b2e11fe74253fda36d292aa9a6694d2
+Author: Chris Wilson 
+Date:   2007-02-26 19:45:23 +0000
+
+    Bug 412361 – Yet another mouse selection regression... Part 2.
+    
+    2007-02-26  Chris Wilson  
+    
+            Bug 412361 – Yet another mouse selection regression...
+            Part 2.
+    
+            * src/vte.c: (vte_terminal_queue_adjustment_value_changed),
+            (_vte_terminal_adjust_adjustments_full),
+            (vte_terminal_scroll_pages), (vte_terminal_autoscroll),
+            (vte_terminal_size_allocate), (vte_terminal_scroll):
+                    We implicitly used a bit of sanity checking when setting the
+                    adjustment value. Ensure the value really is within the
+                    adjustment range before updating scroll_delta.
+    
+    
+    svn path=/trunk/; revision=1760
+
+ ChangeLog | 13 +++++++++++++
+ src/vte.c | 24 ++++++++++++++----------
+ 2 files changed, 27 insertions(+), 10 deletions(-)
+
+commit e793408175ebf9b511eaa24140e4e0117506262a
+Author: Chris Wilson 
+Date:   2007-02-26 19:24:09 +0000
+
+    Bug 412361 – Yet another mouse selection regression... Part 1.
+    
+    2007-02-26  Chris Wilson  
+    
+            Bug 412361 – Yet another mouse selection regression...
+            Part 1.
+    
+            * src/vte.c: (vte_terminal_draw_rows):
+                    Restore drawing of the selection below the text.
+    
+    
+    svn path=/trunk/; revision=1759
+
+ ChangeLog |   8 ++++
+ src/vte.c | 144 +++++++++++++++++++++++++++++++++++++-------------------------
+ 2 files changed, 94 insertions(+), 58 deletions(-)
+
+commit b0a2454d9bebb581a7278c9ae3cf5196a66aa89e
+Author: Chris Wilson 
+Date:   2007-02-26 18:05:53 +0000
+
+    Update max number of processable bytes each time we call
+    
+    2007-02-26  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_class_init), (time_process_incoming),
+            (process_timeout), (update_repeat_timeout), (update_timeout):
+                    Update max number of processable bytes each time we call
+                    vte_terminal_process_incoming().
+    
+    
+    svn path=/trunk/; revision=1758
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 44 ++++++++++++++++++++++++++++++++++----------
+ 2 files changed, 41 insertions(+), 10 deletions(-)
+
+commit 8986971552ec8217dc79c441f5158886603fc78f
+Author: Chris Wilson 
+Date:   2007-02-26 17:38:24 +0000
+
+    Refactor the common code.
+    
+    2007-02-26  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_emit_adjustment_changed),
+            (_vte_terminal_adjust_adjustments_full),
+                    Refactor the common code.
+    
+    
+    svn path=/trunk/; revision=1757
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 63 ++++++++-------------------------------------------------------
+ 2 files changed, 14 insertions(+), 55 deletions(-)
+
+commit 80adf34e589f0b98c685207b1d02bc57cd09fdde
+Author: Chris Wilson 
+Date:   2007-02-26 17:27:40 +0000
+
+    Push a couple of NULL checks to the callers so to be able to move them
+    
+    2007-02-26  Chris Wilson  
+    
+            Push a couple of NULL checks to the callers so to be able to move them
+            outside of the inner-most loops.
+    
+            * src/vte.c: (_vte_row_data_find_charcell), (_vte_invalidate_cell),
+            (_vte_terminal_adjust_adjustments),
+            (vte_terminal_get_text_range_maybe_wrapped), (find_start_column),
+            (find_end_column), (vte_terminal_draw_rows):
+    
+    
+    svn path=/trunk/; revision=1756
+
+ ChangeLog |  10 +++
+ src/vte.c | 254 +++++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 152 insertions(+), 112 deletions(-)
+
+commit 9913d51385075992e753b358276611051b56fd1c
+Author: Chris Wilson 
+Date:   2007-02-26 15:47:35 +0000
+
+    Some applications, such as cat, dump as much data to the terminal as
+    
+    2007-02-26  Chris Wilson  
+    
+            Some applications, such as cat, dump as much data to the terminal as
+            possible. In these scenarios it is likely that we will read data from
+            the child much faster than we can process it and the refresh will
+            stutter.
+    
+            The ideal solution would be to speed up the data processing so that
+            this overrun was impossible. However, the approach taken here is to
+            estimate how much data we can actually process in our time slice and
+            to stop reading once we have sufficient data.
+    
+            * src/vte-private.h:
+            * src/vte.c: (_vte_invalidate_all),
+            (vte_terminal_emit_contents_changed),
+            (vte_terminal_match_contents_clear),
+            (vte_terminal_match_contents_refresh),
+            (vte_terminal_emit_adjustment_changed),
+            (_vte_terminal_adjust_adjustments), (vte_terminal_scroll_pages),
+            (vte_terminal_catch_child_exited), (vte_terminal_eof),
+            (vte_terminal_process_incoming), (vte_terminal_io_read),
+            (vte_terminal_handle_scroll), (vte_terminal_init),
+            (vte_terminal_size_allocate), (need_processing), (process_timeout),
+            (update_repeat_timeout), (update_timeout):
+            * src/vteseq.c: (vte_sequence_handler_decset_internal):
+    
+    
+    svn path=/trunk/; revision=1755
+
+ ChangeLog         |  26 ++++++++
+ src/vte-private.h |   4 +-
+ src/vte.c         | 184 ++++++++++++++++++++++++++++--------------------------
+ src/vteseq.c      |   1 -
+ 4 files changed, 124 insertions(+), 91 deletions(-)
+
+commit 4a97568d88997a1b1046de05277d58f7a239c267
+Author: Chris Wilson 
+Date:   2007-02-26 10:25:09 +0000
+
+    Bug 411000 – Orca repeats old text in gnome-terminal
+    
+    2007-02-26  Chris Wilson  
+    
+            Bug 411000 – Orca repeats old text in gnome-terminal
+    
+            The deferred handling of the window scrolling had the unfortunate
+            side-effect of postponing the accessibility 'text-scrolled' signal
+            until after the 'text-inserted' signal. This caused vteaccess to
+            determine that the whole window had been modified and cause orca to
+            reread the entire screen.
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_emit_contents_changed),
+            (_vte_terminal_queue_contents_changed),
+            (vte_terminal_emit_cursor_moved),
+            (vte_terminal_queue_cursor_moved), (vte_terminal_scroll_pages),
+            (vte_terminal_eof), (vte_terminal_emit_pending_text_signals),
+            (vte_terminal_process_incoming), (vte_terminal_handle_scroll),
+            (vte_terminal_size_allocate), (vte_terminal_unrealize),
+            (vte_terminal_emit_pending_signals):
+            * src/vteaccess.c: (emit_text_caret_moved),
+            (emit_text_changed_insert), (emit_text_changed_delete):
+            * src/vteseq.c: (vte_sequence_handler_decset_internal):
+                    Restore the order of the ally signals. However, Bug 372777
+                    remains unresolved.
+    
+    
+    svn path=/trunk/; revision=1754
+
+ ChangeLog         | 25 +++++++++++++++++++++
+ src/vte-private.h |  5 ++++-
+ src/vte.c         | 67 +++++++++++++++++++++++++++++++++++++++----------------
+ src/vteaccess.c   |  6 ++---
+ src/vteseq.c      |  2 +-
+ 5 files changed, 81 insertions(+), 24 deletions(-)
+
+commit 550b55875ea57b63d1164a1120decb55f55333a6
+Author: Chris Wilson 
+Date:   2007-02-26 09:29:27 +0000
+
+    Eeek, correctly compute the buffer length when we no longer aim to fill
+    
+    2007-02-26  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_io_read):
+                    Eeek, correctly compute the buffer length when we no longer
+                    aim to fill it.
+    
+    
+    svn path=/trunk/; revision=1753
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit 95a70342cef9cdf261c2c1a6688615a7c5af561f
+Author: Chris Wilson 
+Date:   2007-02-26 09:27:41 +0000
+
+    Use a separate debug flag for the ally interface.
+    
+    2007-02-26  Chris Wilson  
+    
+            Use a separate debug flag for the ally interface.
+    
+            * src/debug.c: (_vte_debug_parse_string):
+            * src/debug.h:
+            * src/vteaccess.c:
+            (vte_terminal_accessible_update_private_data_if_needed),
+            (vte_terminal_accessible_invalidate_cursor),
+            (vte_terminal_accessible_finalize),
+            (vte_terminal_accessible_get_text),
+            (vte_terminal_accessible_get_text_somewhere),
+            (vte_terminal_accessible_text_init),
+            (vte_terminal_accessible_component_init),
+            (vte_terminal_accessible_action_init),
+            (vte_terminal_accessible_factory_new):
+    
+    
+    svn path=/trunk/; revision=1752
+
+ ChangeLog       | 17 +++++++++++++++++
+ src/debug.c     |  3 +++
+ src/debug.h     |  3 ++-
+ src/vteaccess.c | 34 +++++++++++++++++-----------------
+ 4 files changed, 39 insertions(+), 18 deletions(-)
+
+commit 5e6ab181a9942335f2633ef375cd91b25120de1c
+Author: Chris Wilson 
+Date:   2007-02-26 08:59:01 +0000
+
+    And finally clamp the maximum number of bytes transferred in a single
+    
+    2007-02-26  Chris Wilson  
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_io_read):
+                    And finally clamp the maximum number of bytes transferred in
+                    a single chunk.
+    
+    
+    svn path=/trunk/; revision=1751
+
+ ChangeLog         | 7 +++++++
+ src/vte-private.h | 1 +
+ src/vte.c         | 1 +
+ 3 files changed, 9 insertions(+)
+
+commit 0ad8279def2a2e6fb3f0b9bf35c39ce82652c64b
+Author: Alexander Shopov 
+Date:   2007-02-25 21:50:08 +0000
+
+    Updated Bulgarian translation by Alexander Shopov 
+    
+    2007-02-25  Alexander Shopov  
+    
+            * bg.po: Updated Bulgarian translation by
+            Alexander Shopov 
+    
+    svn path=/trunk/; revision=1750
+
+ po/ChangeLog |  5 +++++
+ po/bg.po     | 30 ++++++++++++++++++------------
+ 2 files changed, 23 insertions(+), 12 deletions(-)
+
+commit 6f3a9d33bf79932c6de677dd55cc31d797a6579a
+Author: Stéphane Raimbault 
+Date:   2007-02-25 20:47:55 +0000
+
+    Updated French translation by Cyprien Le Pannérer.
+    
+    2007-02-25  Stéphane Raimbault  
+    
+            * fr.po: Updated French translation by Cyprien Le Pannérer.
+    
+    svn path=/trunk/; revision=1749
+
+ po/ChangeLog |  4 ++++
+ po/fr.po     | 43 +++++++++++++++++++++++++------------------
+ 2 files changed, 29 insertions(+), 18 deletions(-)
+
+commit 5cb72496620962980489e80e556aa90a905b589d
+Author: Duarte Loreto 
+Date:   2007-02-25 17:15:03 +0000
+
+    Updated Portuguese translation.
+    
+    2007-02-25  Duarte Loreto 
+    
+            * pt.po: Updated Portuguese translation.
+    
+    svn path=/trunk/; revision=1748
+
+ po/ChangeLog |  4 ++++
+ po/pt.po     | 41 +++++++++++++++++++++++------------------
+ 2 files changed, 27 insertions(+), 18 deletions(-)
+
+commit 17b63654ece9e244f8877e98d89a60861f35d642
+Author: Gabor Kelemen 
+Date:   2007-02-25 09:07:22 +0000
+
+    Translation updated.
+    
+    2007-02-25  Gabor Kelemen  
+    
+            * hu.po: Translation updated.
+    
+    svn path=/trunk/; revision=1747
+
+ po/ChangeLog |  4 ++++
+ po/hu.po     | 71 ++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 40 insertions(+), 35 deletions(-)
+
+commit 1583ce2933361d116c82901726ce962381a54c30
+Author: Changwoo Ryu 
+Date:   2007-02-24 21:52:29 +0000
+
+    Updated Korean translation.
+    
+    2007-02-25  Changwoo Ryu  
+    
+            * ko.po: Updated Korean translation.
+    
+    svn path=/trunk/; revision=1746
+
+ po/ChangeLog |   4 ++
+ po/ko.po     | 119 +++++++++++++++++++++++++----------------------------------
+ 2 files changed, 54 insertions(+), 69 deletions(-)
+
+commit 6096fbe69262516c4b1cfd8abdb40f6be7bf3fc9
+Author: Nguyen Thai Ngoc Duy 
+Date:   2007-02-24 11:38:58 +0000
+
+    Updated vi.po
+    
+    svn path=/trunk/; revision=1745
+
+ po/ChangeLog |  4 ++++
+ po/vi.po     | 68 ++++++++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 43 insertions(+), 29 deletions(-)
+
+commit 387064eef67af0e4c84666b7eb892db1626a3b5a
+Author: Chris Wilson 
+Date:   2007-02-24 11:29:59 +0000
+
+    Hint that the compiler should inline vte_terminal_determine_colors().
+    
+    2007-02-24  Chris Wilson  
+    
+            * src/vte.c:
+                    Hint that the compiler should inline
+                    vte_terminal_determine_colors().
+    
+    
+    svn path=/trunk/; revision=1744
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit 00f2d286a7795004a8591742eab788f1ad424cec
+Author: Chris Wilson 
+Date:   2007-02-24 11:09:49 +0000
+
+    cf Bug 410534 – Slow content scrolling, takes 100% of CPU. cf Bug 410463
+    
+    2007-02-24  Chris Wilson  
+    
+            cf Bug 410534 – Slow content scrolling, takes 100% of CPU.
+            cf Bug 410463 – Poor interactive performance with multiple terminals
+    
+            * src/vte.c: (vte_terminal_io_read):
+                    Do not loop whilst reading in a backlog of child data - should
+                    help prevent monopolisation of vte by a single child and make
+                    vte more responsive to user input on slower computers.
+    
+    
+    svn path=/trunk/; revision=1743
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 43 +++++++++++++++----------------------------
+ 2 files changed, 25 insertions(+), 28 deletions(-)
+
+commit 414043d45fc2b51430557c4ac575651468ff9500
+Author: Leonardo Ferreira Fontenelle 
+Date:   2007-02-24 03:28:10 +0000
+
+    Updated Brazilian Portuguese translation by Lucas Mazzardo Veloso
+    
+    2007-02-24  Leonardo Ferreira Fontenelle  
+    
+            * pt_BR.po: Updated Brazilian Portuguese translation by Lucas Mazzardo
+            Veloso .
+    
+    svn path=/trunk/; revision=1742
+
+ po/ChangeLog |  5 +++++
+ po/pt_BR.po  | 41 ++++++++++++++++++++++++-----------------
+ 2 files changed, 29 insertions(+), 17 deletions(-)
+
+commit 704c26231fd3d03f396a3b6c2997605d251384ae
+Author: Chris Wilson 
+Date:   2007-02-24 00:43:43 +0000
+
+    missed the scroll_delta on the external conversion
+    
+    svn path=/trunk/; revision=1741
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit fabc7a725dbca8be89edcc490c65f8060ab31d69
+Author: Chris Wilson 
+Date:   2007-02-24 00:40:13 +0000
+
+    whoops, that was meant to test show_match before rendering the hilite
+    
+    svn path=/trunk/; revision=1740
+
+ src/vte.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 3d2d95f14d68ca6f9fd00512bd240165d7a5ffd3
+Author: Chris Wilson 
+Date:   2007-02-24 00:31:29 +0000
+
+    Bug 159078 – slow highlight
+    
+    2007-02-24  Chris Wilson  
+    
+            Bug 159078 – slow highlight
+    
+            Do not update the match hilite during a selection-drag.
+            Record unsuccesful regex matches, so we can quickly determine whether
+            the cursor is still inside the blank region.
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_match_check_internal),
+            (rowcol_inside_match), (vte_terminal_match_check),
+            (_vte_terminal_set_pointer_visible),
+            (vte_terminal_match_hilite_clear),
+            (vte_terminal_match_hilite_show), (vte_terminal_match_hilite_hide),
+            (vte_terminal_match_hilite_update), (vte_terminal_match_hilite),
+            (vte_terminal_motion_notify), (vte_terminal_button_press),
+            (vte_terminal_focus_in), (vte_terminal_focus_out),
+            (vte_terminal_enter), (vte_terminal_leave), (vte_terminal_init),
+            (vte_terminal_unrealize), (vte_terminal_draw_rows),
+            (vte_terminal_paint):
+    
+    
+    svn path=/trunk/; revision=1739
+
+ ChangeLog         |  21 ++++++
+ src/vte-private.h |   4 +-
+ src/vte.c         | 208 ++++++++++++++++++++++++++++++++++++++++++------------
+ src/vtexft.c      |   7 +-
+ 4 files changed, 189 insertions(+), 51 deletions(-)
+
+commit 5e833e3796c867152ab1345e16d06e4c35d5d3fa
+Author: Chris Wilson 
+Date:   2007-02-23 21:14:55 +0000
+
+    A couple of compiler warnings and avoid unnecessary arithmetic.
+    
+    2007-02-23  Chris Wilson  
+    
+            A couple of compiler warnings and avoid unnecessary arithmetic.
+    
+            * src/vte.c: (_vte_terminal_set_default_attributes),
+            (find_start_column), (find_end_column),
+            (vte_terminal_start_selection), (vte_terminal_extend_selection),
+            (vte_terminal_draw_rows), (vte_terminal_paint):
+            * src/vtexft.c: (_vte_xft_font_open), (_vte_xft_font_for_char),
+            (_vte_xft_char_width), (_vte_xft_unlock_fonts), (_vte_xft_start),
+            (_vte_xft_clip), (_vte_xft_set_text_font), (_vte_xft_draw_text):
+    
+    
+    svn path=/trunk/; revision=1738
+
+ ChangeLog    | 12 ++++++++++++
+ src/vte.c    | 52 +++++++++++++++++++++++++---------------------------
+ src/vtexft.c | 46 +++++++++++++++++++---------------------------
+ 3 files changed, 56 insertions(+), 54 deletions(-)
+
+commit 2914a06ebea030f7cc87e01ab4cb3c4f397ed976
+Author: Kjartan Maraas 
+Date:   2007-02-23 21:01:56 +0000
+
+    Updated Norwegian bokmål translation.
+    
+    2007-02-23  Kjartan Maraas  
+    
+            * nb.po: Updated Norwegian bokmål translation.
+    
+    svn path=/trunk/; revision=1737
+
+ po/ChangeLog |  4 ++++
+ po/nb.po     | 64 +++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 39 insertions(+), 29 deletions(-)
+
+commit f163b4389d4e9a01b1aa41c356c40d9b624dbce9
+Author: Andre Klapper 
+Date:   2007-02-23 20:06:54 +0000
+
+    Updated German translation.
+    
+    2007-02-23  Andre Klapper  
+    
+            * de.po: Updated German translation.
+    
+    
+    svn path=/trunk/; revision=1736
+
+ po/ChangeLog |  4 ++++
+ po/de.po     | 36 +++++++++++++++++++++---------------
+ 2 files changed, 25 insertions(+), 15 deletions(-)
+
+commit 26deb3f942b4916864f8ba81397c5c0456d93e6a
+Author: Chris Wilson 
+Date:   2007-02-23 19:00:29 +0000
+
+    Bug 411276 – SVN trunk compilation error Part 2.
+    
+    2007-02-23  Chris Wilson  
+    
+            Bug 411276 – SVN trunk compilation error
+            Part 2.
+    
+            * configure.in:
+                    Check that the header file defines FcStrFree before checking
+                    for the availability of the function. Complete hack, but
+                    appears to work.
+    
+    
+    svn path=/trunk/; revision=1735
+
+ ChangeLog    | 10 ++++++++++
+ configure.in | 10 +++++++++-
+ 2 files changed, 19 insertions(+), 1 deletion(-)
+
+commit 39eb40adc143e140be920ba39777780bb06daf1f
+Author: Chris Wilson 
+Date:   2007-02-23 18:15:29 +0000
+
+    Bug 411276 – SVN trunk compilation error
+    
+    2007-02-23  Chris Wilson  
+    
+            Bug 411276 – SVN trunk compilation error
+    
+            * configure.in:
+                    Ubuntu Edgy appears to have a broken fontconfig-dev package
+                    where the function is exported from the library but is missing
+                    the corresponding prototypes.
+                    So we reorder the determination of the compilation flags
+                    before checking for available functions in the hope that the
+                    tests will then match the results at compile time.
+    
+    
+    svn path=/trunk/; revision=1734
+
+ ChangeLog    |  12 ++++
+ configure.in | 192 ++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 110 insertions(+), 94 deletions(-)
+
+commit 728c62c88fd6475ba02f07a36672a26431d1eda0
+Author: Chris Wilson 
+Date:   2007-02-23 16:10:30 +0000
+
+    Prevent a deadlock on recursively grabbing the gdk_mutex.
+    
+    2007-02-23  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_io_read):
+                    Prevent a deadlock on recursively grabbing the gdk_mutex.
+    
+    
+    svn path=/trunk/; revision=1733
+
+ ChangeLog |  5 +++++
+ src/vte.c | 11 ++++++++---
+ 2 files changed, 13 insertions(+), 3 deletions(-)
+
+commit 0e510fe7354ac3987f0c0b10521768063eb40560
+Author: Chris Wilson 
+Date:   2007-02-23 16:02:29 +0000
+
+    only set in the input active flag if we actually read in data
+    
+    svn path=/trunk/; revision=1732
+
+ src/vte.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 7d683f4c600ab76f90899dde4e5e49307931e182
+Author: Chris Wilson 
+Date:   2007-02-23 15:51:25 +0000
+
+    missing cancellations from previous patch
+    
+    svn path=/trunk/; revision=1731
+
+ src/vte.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 3bad172349963d030ffcacca90585fb9b3b93bcd
+Author: Chris Wilson 
+Date:   2007-02-23 15:49:23 +0000
+
+    Heuristic to avoid a read when it's likely to just return EAGAIN.
+    
+    2007-02-23  Chris Wilson  
+    
+            Heuristic to avoid a read when it's likely to just return EAGAIN.
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_io_read), (process_timeout),
+            (update_repeat_timeout), (update_timeout):
+    
+    
+    svn path=/trunk/; revision=1730
+
+ ChangeLog         |  8 ++++++++
+ src/vte-private.h |  1 +
+ src/vte.c         | 23 +++++++++++++++++------
+ 3 files changed, 26 insertions(+), 6 deletions(-)
+
+commit 713bb7322e8e012deccabe331b21a5b9a60864ba
+Author: Chris Wilson 
+Date:   2007-02-23 13:21:02 +0000
+
+    Add a new debug flag to monitor draw operations. Don't issue individual
+    
+    2007-02-23  Chris Wilson  
+    
+            Add a new debug flag to monitor draw operations.
+            Don't issue individual glyphs for is_local_graphic() in the middle of
+            a run.
+    
+            * src/debug.c: (_vte_debug_parse_string):
+            * src/debug.h:
+            * src/vte.c: (vte_terminal_unichar_is_local_graphic),
+            (vte_terminal_draw_rows), (vte_terminal_paint):
+            * src/vtedraw.c: (_vte_draw_init_user), (_vte_draw_init_default),
+            (_vte_draw_new), (_vte_draw_free), (_vte_draw_get_visual),
+            (_vte_draw_get_colormap), (_vte_draw_start), (_vte_draw_end),
+            (_vte_draw_set_background_color), (_vte_draw_set_background_image),
+            (_vte_draw_requires_repaint), (_vte_draw_clip), (_vte_draw_clear),
+            (_vte_draw_set_text_font), (_vte_draw_get_text_width),
+            (_vte_draw_get_text_height), (_vte_draw_get_text_ascent),
+            (_vte_draw_get_char_width), (_vte_draw_get_using_fontconfig),
+            (_vte_draw_text), (_vte_draw_char), (_vte_draw_has_char),
+            (_vte_draw_fill_rectangle), (_vte_draw_draw_rectangle),
+            (_vte_draw_set_scroll):
+            * src/vtedraw.h:
+            * src/vteft2.c: (_vte_ft2_draw_has_char):
+            * src/vtegl.c: (_vte_gl_draw_has_char):
+            * src/vtepango.c: (_vte_pango_draw_has_char):
+            * src/vtepangox.c: (_vte_pango_x_draw_has_char):
+            * src/vteskel.c: (_vte_skel_draw_has_char):
+            * src/vtexft.c: (_vte_xft_draw_has_char):
+    
+    
+    svn path=/trunk/; revision=1729
+
+ ChangeLog       |  29 +++++++
+ src/debug.c     |   3 +
+ src/debug.h     |   3 +-
+ src/vte.c       |  46 +++++++----
+ src/vtedraw.c   | 252 +++++++++++++++++++++++++++++++++-----------------------
+ src/vtedraw.h   |   2 +
+ src/vteft2.c    |  16 ++++
+ src/vtegl.c     |  16 ++++
+ src/vtepango.c  |   7 ++
+ src/vtepangox.c |   8 ++
+ src/vteskel.c   |   7 ++
+ src/vtexft.c    |  16 ++++
+ 12 files changed, 281 insertions(+), 124 deletions(-)
+
+commit 2b0e46223ad2952192f3aa7d2e18b0f636f843f4
+Author: Chris Wilson 
+Date:   2007-02-23 12:24:55 +0000
+
+    Don't break a glyph run for a graphic, issue the draw and continue.
+    
+    2007-02-23  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_draw_rows):
+                    Don't break a glyph run for a graphic, issue the draw
+                    and continue.
+    
+    
+    svn path=/trunk/; revision=1728
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 20 ++++++++++++++++----
+ 2 files changed, 22 insertions(+), 4 deletions(-)
+
+commit 7e2654510c7fe848162021a698ddba2b90cf7d59
+Author: Chris Wilson 
+Date:   2007-02-23 11:23:55 +0000
+
+    Cache the font metrics on the vte_xft_font, avoids having to remeasure
+    
+    2007-02-23  Chris Wilson  
+    
+            Cache the font metrics on the vte_xft_font, avoids having to remeasure
+            when opening a new terminal.
+    
+            * src/vtexft.c: (_vte_xft_font_open), (_vte_xft_set_text_font):
+    
+    
+    svn path=/trunk/; revision=1727
+
+ ChangeLog    |   7 +++
+ src/vtexft.c | 175 ++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 103 insertions(+), 79 deletions(-)
+
+commit 4074098e6fc909d6ae0dfe027303ac9887a10809
+Author: Daniel Nylander 
+Date:   2007-02-23 11:07:48 +0000
+
+    sv.po: Swedish translation updated
+    
+    svn path=/trunk/; revision=1726
+
+ po/ChangeLog |  4 ++++
+ po/sv.po     | 48 ++++++++++++++++++++++++++----------------------
+ 2 files changed, 30 insertions(+), 22 deletions(-)
+
+commit f8a9f3061c250df61eca14dae46f82417dc42974
+Author: Chris Wilson 
+Date:   2007-02-23 10:38:25 +0000
+
+    Gtk+ style whitespace.
+    
+    
+    svn path=/trunk/; revision=1725
+
+ src/vtexft.c | 277 +++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 138 insertions(+), 139 deletions(-)
+
+commit 94d80e84a70f7a995d87cc0655a2a0bdb68a192e
+Author: Chris Wilson 
+Date:   2007-02-23 10:31:41 +0000
+
+    Share XftFonts between terminal backends and preserve faces from the
+    
+    2007-02-23  Chris Wilson  
+    
+            Share XftFonts between terminal backends and preserve faces from the
+            previous draw - helps prevents font cache thrashing inside libXft.
+    
+            * src/vtexft.c: (_vte_xft_font_hash), (_vte_xft_font_equal),
+            (_vte_xft_font_open), (_vte_xft_font_close),
+            (_vte_xft_font_for_char), (_vte_xft_unlock_fonts),
+            (_vte_xft_destroy), (_vte_xft_start), (_vte_xft_end),
+            (ptr_array_zeroed_new), (_vte_xft_set_text_font),
+            (_vte_xft_get_char_width), (_vte_xft_draw_text),
+            (_vte_xft_draw_char):
+    
+    
+    svn path=/trunk/; revision=1724
+
+ ChangeLog    |  13 ++++
+ src/vte.c    |   4 +-
+ src/vtexft.c | 218 ++++++++++++++++++++++++++++++++++++++++++-----------------
+ 3 files changed, 172 insertions(+), 63 deletions(-)
+
+commit 64f20a84331a2041cabc124e5872a75fd91cd31b
+Author: Theppitak Karoonboonyanan 
+Date:   2007-02-23 06:15:19 +0000
+
+    Updated Thai translation.
+    
+            * th.po: Updated Thai translation.
+    
+    
+    svn path=/trunk/; revision=1723
+
+ po/ChangeLog |  4 ++++
+ po/th.po     | 44 ++++++++++++++++++++++++--------------------
+ 2 files changed, 28 insertions(+), 20 deletions(-)
+
+commit 501e4ac85ce7448a56e7f2fa0c6215d0e5dfef26
+Author: Chris Wilson 
+Date:   2007-02-22 21:52:28 +0000
+
+    Bug 410986 – Fails to build with -z defs Patch by Loïc Minier.
+    
+    2007-02-22  Chris Wilson  
+    
+            Bug 410986 – Fails to build with -z defs
+            Patch by Loïc Minier.
+    
+            * src/Makefile.am:
+                    Add FreeType to the libs.
+    
+    
+    svn path=/trunk/; revision=1722
+
+ ChangeLog       | 8 ++++++++
+ src/Makefile.am | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit 8857022e7d29a2bb02f589ed0077705927f8c7b3
+Author: Chris Wilson 
+Date:   2007-02-22 17:49:44 +0000
+
+    Return in the face of error as we appear to hit this in the wild.
+    
+    2007-02-22  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_send):
+                    Return in the face of error as we appear to hit this in the
+                    wild.
+    
+    
+    svn path=/trunk/; revision=1721
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 10 ++++++----
+ 2 files changed, 12 insertions(+), 4 deletions(-)
+
+commit 307a95c978f9ad6c8b29deecd27c54ce36609950
+Author: Chris Wilson 
+Date:   2007-02-22 17:29:19 +0000
+
+    ChangeLog typos
+    
+    svn path=/trunk/; revision=1720
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7106d026c5db11543764082606c5447ccde25b9e
+Author: Chris Wilson 
+Date:   2007-02-22 17:28:41 +0000
+
+    Bug 410819 – slider not correctly positioned after calling less
+    
+    2007-02-22  Chris Wilson  
+    
+            Bug 410819 – slider not correctly positioned after calling less
+    
+            * src/vte.c: (_vte_terminal_adjust_adjustments),
+            (_vte_terminal_adjust_adjustments_full),
+            (vte_terminal_maybe_scroll_to_top), (vte_terminal_size_allocate),
+            (vte_terminal_set_scrollback_lines):
+            * src/vteseq.c: (vte_sequence_handler_decset_internal):
+                    Fixup a lost of issues with changing the number of scroll back
+                    lines, such as missing value_changed signals for the
+                    scrollbar and a couple of missing CLAMPs.
+    
+    
+    svn path=/trunk/; revision=1719
+
+ ChangeLog    | 13 +++++++++++
+ src/vte.c    | 74 ++++++++++++++++++++++++++++++++++++------------------------
+ src/vteseq.c |  3 +++
+ 3 files changed, 61 insertions(+), 29 deletions(-)
+
+commit fd3ffb8989d073db4079921fa6cac91d505d30e8
+Author: Alexander Shopov 
+Date:   2007-02-22 06:18:08 +0000
+
+    Updated Bulgarian translation by Alexander Shopov 
+    
+    2007-02-22  Alexander Shopov  
+    
+            * bg.po: Updated Bulgarian translation by
+            Alexander Shopov 
+    
+    svn path=/trunk/; revision=1718
+
+ po/ChangeLog |  5 ++++
+ po/bg.po     | 81 +++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 47 insertions(+), 39 deletions(-)
+
+commit 66fc0365dadffa77c032ab6185eb672af30eba31
+Author: Chris Wilson 
+Date:   2007-02-22 01:08:32 +0000
+
+    After adjusting the current profile, the last line gets chomped.
+    
+    2007-02-22  Chris Wilson  
+    
+            After adjusting the current profile, the last line gets chomped.
+    
+            * src/vte.c: (vte_terminal_set_scrollback_lines):
+    
+    
+    svn path=/trunk/; revision=1717
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 5 +++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 7b160c1c82642f889cdfc72b4ba20cbc6f9af475
+Author: Chris Wilson 
+Date:   2007-02-21 23:30:39 +0000
+
+    cf Bug 410534 – Slow content scrolling, takes 100% of CPU.
+    
+    2007-02-21  Chris Wilson  
+    
+            cf Bug 410534 – Slow content scrolling, takes 100% of CPU.
+    
+            * src/vte.c: (vte_terminal_scroll),
+            (vte_terminal_set_scrollback_lines):
+                    Operate on scroll delta directly as adjustment->value updates
+                    are not instantaneous and we may have several scroll events
+                    before the next update.
+    
+    
+    svn path=/trunk/; revision=1716
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 22 ++++++++++------------
+ 2 files changed, 20 insertions(+), 12 deletions(-)
+
+commit 807b83906e19ecb22e17107e1bbc8a8e5567ce9c
+Author: Chris Wilson 
+Date:   2007-02-21 23:06:30 +0000
+
+    Bug 410463 – Poor interactive performance with multiple terminals
+    
+    2007-02-21  Chris Wilson  
+    
+            Bug 410463 – Poor interactive performance with multiple terminals
+    
+            * src/vte.c: (vte_terminal_io_read), (process_timeout),
+            (update_repeat_timeout):
+                    When multiple terminals are active, poll the IO sources
+                    from within the process/display timeout (akin to
+                    interrupt mitigation).
+                    Return to normal interrupts when we only have a single active
+                    terminal - so we don't sacrifice high performance.
+    
+    
+    svn path=/trunk/; revision=1715
+
+ ChangeLog | 12 ++++++++++++
+ src/vte.c | 20 +++++++++++++++++++-
+ 2 files changed, 31 insertions(+), 1 deletion(-)
+
+commit f56d6009a642389ccc6c544dada62d5e6f878770
+Author: Peter Bach 
+Date:   2007-02-21 21:10:15 +0000
+
+    Updated Danish translation
+    
+    svn path=/trunk/; revision=1714
+
+ po/ChangeLog |  4 ++++
+ po/da.po     | 78 +++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 47 insertions(+), 35 deletions(-)
+
+commit 80dc9064f403a4db1afd8e93480d5d421726cd45
+Author: Chris Wilson 
+Date:   2007-02-21 18:42:30 +0000
+
+    A small bit of callgrinding, avoid the modulus inside
+    
+    2007-02-21  Chris Wilson  
+    
+            A small bit of callgrinding, avoid the modulus inside
+            vte_terminal_ensure_cursor() by caching the last row_data.
+    
+            * src/iso2022.c: (process_cdata):
+            * src/ring.c: (_vte_ring_new), (_vte_ring_insert),
+            (_vte_ring_insert_preserve), (_vte_ring_remove):
+            * src/ring.h:
+            * src/table.c: (_vte_table_match):
+            * src/vte.c: (_vte_terminal_ensure_cursor),
+            (_vte_terminal_insert_char), (vte_terminal_process_incoming):
+    
+    
+    svn path=/trunk/; revision=1713
+
+ ChangeLog     | 13 ++++++++
+ src/iso2022.c | 11 +++----
+ src/ring.c    | 29 +++++++++++++++---
+ src/ring.h    | 10 ++++--
+ src/table.c   | 12 ++++----
+ src/vte.c     | 97 +++++++++++++++++++++++++++++++----------------------------
+ 6 files changed, 107 insertions(+), 65 deletions(-)
+
+commit beba8f7b96e83ee43d42cb56b04fa7e59091d029
+Author: Chris Wilson 
+Date:   2007-02-21 17:22:30 +0000
+
+    Trivial little script that counts to a large number.
+    
+    svn path=/trunk/; revision=1712
+
+ perf/inc.sh | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+commit d4b27d3d7d14836972d03f778e16c0e001c51c2d
+Author: Hendrik Richter 
+Date:   2007-02-21 11:33:13 +0000
+
+    Updated German translation.
+    
+    2007-02-21  Hendrik Richter  
+    
+            * de.po: Updated German translation.
+    
+    svn path=/trunk/; revision=1711
+
+ po/ChangeLog |  4 ++++
+ po/de.po     | 65 +++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 40 insertions(+), 29 deletions(-)
+
+commit d7d7d2910dad2c095c24b3984a7ebfe3d29c34df
+Author: Chris Wilson 
+Date:   2007-02-21 10:40:37 +0000
+
+    Callgrind strikes again... Inserting a char is a rare operation
+    
+    2007-02-21  Chris Wilson  
+    
+            Callgrind strikes again...
+            Inserting a char is a rare operation (especially in the scrolling
+            benchmark!) so only read the old cell during an insert. This wins
+            about 5% during a hexdump.
+    
+            * src/iso2022.c: (_vte_iso2022_find_nextctl),
+            (_vte_iso2022_fragment_input), (process_cdata):
+            * src/vte.c: (_vte_terminal_insert_char):
+            * src/vteseq.c: (vte_sequence_handler_sf):
+    
+    
+    svn path=/trunk/; revision=1710
+
+ ChangeLog     | 12 +++++++++++
+ src/iso2022.c | 41 ++++++++++++++++++-------------------
+ src/vte.c     | 66 ++++++++++++++++++++---------------------------------------
+ src/vteseq.c  |  2 --
+ 4 files changed, 54 insertions(+), 67 deletions(-)
+
+commit 6406d0b4606be0f84ee78f2b17e2820ca2b29c0e
+Author: Chris Wilson 
+Date:   2007-02-21 01:25:30 +0000
+
+    RedHat Bug 113195: First line displayed incorrectly if prompt changes
+    
+    2007-02-21  Chris Wilson  
+    
+            RedHat Bug 113195: First line displayed incorrectly if prompt changes background color
+    
+            e.g. PS1='\e[46m[\u@\h:\w]\e[m \e[45m'
+            The issue is when we insert a char on a new row and the background is
+            not the default, we fill the entire row with the *current* colour.
+            This behaviour is incorrect, and the fix is to fill to the end of the
+            line on a carriage return.
+    
+            * src/vte-private.h:
+            * src/vte.c: (_vte_terminal_ensure_cursor),
+            (_vte_terminal_insert_char), (vte_terminal_process_incoming),
+            (vte_terminal_send):
+            * src/vteseq.c: (vte_sequence_handler_ce),
+            (vte_sequence_handler_cr), (vte_sequence_handler_cs),
+            (vte_sequence_handler_cS),
+            (vte_sequence_handler_cursor_lower_left),
+            (vte_sequence_handler_dc), (vte_sequence_handler_ic),
+            (vte_sequence_handler_sf):
+    
+    
+    svn path=/trunk/; revision=1709
+
+ ChangeLog         |  21 +++++++++++
+ src/vte-private.h |   1 -
+ src/vte.c         | 104 +++++++++++++++++-------------------------------------
+ src/vteseq.c      |  44 ++++++++++++-----------
+ 4 files changed, 77 insertions(+), 93 deletions(-)
+
+commit 1781474c681a30b60429754dc5595fe1c1f8da22
+Author: Artur Flinta 
+Date:   2007-02-20 23:24:51 +0000
+
+    Updated Polish translation by GNOME PL Team.
+    
+    2007-02-21  Artur Flinta  
+    
+            * pl.po: Updated Polish translation by GNOME PL Team.
+    
+    
+    svn path=/trunk/; revision=1708
+
+ po/ChangeLog |  4 ++++
+ po/pl.po     | 54 ++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 32 insertions(+), 26 deletions(-)
+
+commit 46333c9867ccabd661c8c01b0e806e7adbbe7bd8
+Author: Chris Wilson 
+Date:   2007-02-20 23:03:35 +0000
+
+    RedHat Bug 123845: gnome-terminal not parsing cursor position escape
+    
+    2007-02-20  Chris Wilson  
+    
+             RedHat Bug 123845: gnome-terminal not parsing cursor position escape sequence properly
+    
+            * src/caps.c:
+            * src/vteseq.c: (vte_sequence_handler_cm):
+                    Add 'ESC [ Pn H' to cursor-position and provide default
+                    values.
+    
+    
+    svn path=/trunk/; revision=1707
+
+ ChangeLog    |  9 +++++++++
+ src/caps.c   |  1 +
+ src/vteseq.c | 21 ++++++++++++---------
+ 3 files changed, 22 insertions(+), 9 deletions(-)
+
+commit 83f80298b69e6a66b82c361025d7785fc4f9a7a9
+Author: Leonardo Ferreira Fontenelle 
+Date:   2007-02-20 00:55:57 +0000
+
+    Updated Brazilian Portuguese translation.
+    
+    2007-02-19  Leonardo Ferreira Fontenelle  
+    
+            * pt_BR.po: Updated Brazilian Portuguese translation.
+    
+    svn path=/trunk/; revision=1706
+
+ po/ChangeLog |  4 +++
+ po/pt_BR.po  | 80 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 47 insertions(+), 37 deletions(-)
+
+commit 1a1634d2c6792059cf2de9917c77b5fa9efddec0
+Author: Chris Wilson 
+Date:   2007-02-20 00:01:28 +0000
+
+    Bug 409055 – Terminal stays blank
+    
+    2007-02-19  Chris Wilson  
+    
+            Bug 409055 – Terminal stays blank
+    
+            Due to GTK+ coallescing of XExposeEvents it was possible for our
+            GdkExposeEvent to arrive before the GdkVisibilityEvent associated with
+            the mapping of our toplevel and so we discarded the event as we
+            believed we were still unviewable.
+    
+            * src/vte.c: (_vte_invalidate_cells), (vte_terminal_expose),
+            (reset_update_regions):
+                    Assume that all GdkExposeEvents have been checked for
+                    suitability before delivery. We know this true for locally
+                    generated expose events which are extensively checked during
+                    invalidation, and we presume that X will not generate expose
+                    events on unmapped or otherwise unviewable windows.
+    
+    
+    svn path=/trunk/; revision=1705
+
+ ChangeLog | 17 +++++++++++++++++
+ src/vte.c | 41 ++++++++++++++++++++---------------------
+ 2 files changed, 37 insertions(+), 21 deletions(-)
+
+commit a1f56b97b89dc1c1cbd177ed6b521d80701f6045
+Author: Chris Wilson 
+Date:   2007-02-19 21:26:59 +0000
+
+    Dead code elimination.
+    
+    2007-02-19  Chris Wilson  
+    
+            * src/vte.c: (_vte_terminal_adjust_adjustments),
+            (_vte_terminal_adjust_adjustments_full):
+                    Dead code elimination.
+    
+    
+    svn path=/trunk/; revision=1704
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 18 ------------------
+ 2 files changed, 6 insertions(+), 18 deletions(-)
+
+commit 503597c87626d7dae2cc647b3e6dc5619bf150dd
+Author: Chris Wilson 
+Date:   2007-02-19 20:55:17 +0000
+
+    A simple script to dump a fixed amount of random data to the terminal.
+    
+    2007-02-19  Chris Wilson  
+    
+            * perf/random.sh:
+                    A simple script to dump a fixed amount of random data to the
+                    terminal.
+    
+    
+    svn path=/trunk/; revision=1703
+
+ ChangeLog      | 6 ++++++
+ perf/random.sh | 3 +++
+ 2 files changed, 9 insertions(+)
+
+commit 4790d005efd075f8208d870a2cfe83d5bca7276e
+Author: Chris Wilson 
+Date:   2007-02-19 20:22:29 +0000
+
+    A few more trivial incremental improvements.
+    
+    2007-02-19  Chris Wilson  
+    
+            A few more trivial incremental improvements.
+    
+            * src/Makefile.am:
+            * src/iso2022.c: (_vte_iso2022_map_get):
+                    Switch to a VteTree.
+            * src/vte.c: (_vte_terminal_update_insert_delta),
+            (_vte_terminal_insert_char):
+                    No need to ensure the cursor when scrolling, only before
+                    insertions.
+            * src/vtexft.c: (_vte_xft_font_open), (_vte_xft_font_close),
+            (_vte_xft_font_for_char), (_vte_xft_end):
+                    Lock the face over the entire expose.
+    
+    
+    svn path=/trunk/; revision=1702
+
+ ChangeLog       | 15 +++++++++++++
+ src/Makefile.am |  6 +++++-
+ src/iso2022.c   | 67 ++++++++++++++++++++++++++++++---------------------------
+ src/vte.c       | 20 ++++++-----------
+ src/vtexft.c    | 41 ++++++++++++++++++++++++++++++++---
+ 5 files changed, 99 insertions(+), 50 deletions(-)
+
+commit 106e6365a71068637ae7b6e0d533f4819ca4bdcc
+Author: Chris Wilson 
+Date:   2007-02-19 17:34:08 +0000
+
+    Improve handling of parallel 'cat /dev/urandom' - notably a crasher in the
+    
+    2007-02-19  Chris Wilson  
+    
+            Improve handling of parallel 'cat /dev/urandom' - notably a crasher
+            in the table matcher, repeated g_getenv processing and wasted time
+            in g_tree_lookup.
+    
+            * src/iso2022.c: (_vte_iso2022_ambiguous_width_guess),
+            (_vte_iso2022_map_init), (_vte_iso2022_map_get),
+            (process_8_bit_sequence), (process_cdata),
+            (_vte_iso2022_process_single), (_vte_iso2022_process):
+            * src/table.c: (_vte_table_match):
+            * src/vte-private.h:
+    
+    
+    svn path=/trunk/; revision=1701
+
+ ChangeLog         | 13 ++++++++
+ src/iso2022.c     | 88 ++++++++++++++++++++++++++-----------------------------
+ src/table.c       |  8 ++---
+ src/vte-private.h |  4 +--
+ 4 files changed, 61 insertions(+), 52 deletions(-)
+
+commit 92eb97daf593c1d447f1bdb6ac43734b662d10b3
+Author: Chris Wilson 
+Date:   2007-02-19 16:43:06 +0000
+
+    In conjunction with the previous fix, since the terminal can be removed
+    
+    2007-02-19  Chris Wilson  
+    
+            * src/vte.c: (update_timeout):
+                    In conjunction with the previous fix, since the terminal
+                    can be removed from the active list by
+                    vte_terminal_process_incoming() we need to be careful whilst
+                    iterating along the active list.
+    
+    
+    svn path=/trunk/; revision=1700
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 6 ++++--
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+commit 2741c86680b5dc6f7c44cbd1a1c9fd50112e8bfd
+Author: Chris Wilson 
+Date:   2007-02-19 16:32:01 +0000
+
+     ickle: hi.. our kernel hacker just found a nice reproducible
+    
+    2007-02-19  Chris Wilson  
+    
+             ickle: hi.. our kernel hacker just found a nice reproducible
+                    crash in vte :)
+             oh, joy
+             very easy to reproduce
+                    cat /dev/urandom
+                    wait 2 or 3S
+                    then press Ctrl-Shift-T to open a new tab
+                    => crash
+    
+            * src/vte.c: (process_timeout), (update_repeat_timeout):
+                    vte_terminal_process_incoming() can trigger a terminal reset
+                    which will remove the terminal from the active list, and then
+                    we attempt to remove it again after handling the incoming
+                    data. The fix is simple - don't delete the link if the the
+                    terminal is no longer active.
+    
+    
+    svn path=/trunk/; revision=1699
+
+ ChangeLog | 18 ++++++++++++++++++
+ src/vte.c | 18 ++++++++++++------
+ 2 files changed, 30 insertions(+), 6 deletions(-)
+
+commit cf0fb7920f04f8e42a55fa795d7f9b1844212821
+Author: Chris Wilson 
+Date:   2007-02-19 15:11:31 +0000
+
+    As noticed on bug 409055, we do not receive a visibility-notify event when
+    
+    2007-02-19  Chris Wilson  
+    
+            As noticed on bug 409055, we do not receive a visibility-notify
+            event when we switch workspaces (or even when the window is iconified).
+            The workaround for this is to watch for our toplevel being unmapped
+            and set the fully-obscured flag.
+    
+            * src/vte.c: (vte_terminal_configure_toplevel),
+            (vte_terminal_unmap_toplevel), (vte_terminal_hierarchy_changed),
+            (vte_terminal_set_visibility), (vte_terminal_visibility_notify):
+    
+    
+    svn path=/trunk/; revision=1698
+
+ ChangeLog | 11 +++++++++++
+ src/vte.c | 56 ++++++++++++++++++++++++++++++++++++++++----------------
+ 2 files changed, 51 insertions(+), 16 deletions(-)
+
+commit b4992b6d191eb4fb8806a0aa527244e4a31d58a0
+Author: Chris Wilson 
+Date:   2007-02-19 12:05:38 +0000
+
+    Add the visibility state to the debug output.
+    
+    2007-02-19  Chris Wilson  
+    
+            * src/vte.c: (visibility_state_str),
+            (vte_terminal_visibility_notify), (vte_terminal_init),
+            (vte_terminal_realize):
+                    Add the visibility state to the debug output.
+    
+    
+    svn path=/trunk/; revision=1697
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 32 +++++++++++++++++++++++---------
+ 2 files changed, 30 insertions(+), 9 deletions(-)
+
+commit 4172d95cb93212898d76513c2a7851cf56441eeb
+Author: Chris Wilson 
+Date:   2007-02-19 10:24:57 +0000
+
+    Add the configuration details to config.log as well.
+    
+    2007-02-19  Chris Wilson  
+    
+            * configure.in:
+                    Add the configuration details to config.log as well.
+    
+    
+    svn path=/trunk/; revision=1696
+
+ ChangeLog    | 5 +++++
+ configure.in | 9 +++++++--
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+commit bd1b365df62aaa0c13f30c9540a2e895d364f045
+Author: Chris Wilson 
+Date:   2007-02-19 09:48:32 +0000
+
+    Bug 409241 – gnome-terminal crashed with SIGSEGV in
+    
+    2007-02-19  Chris Wilson  
+    
+            Bug 409241 – gnome-terminal crashed with SIGSEGV in vte_terminal_draw_graphic()
+    
+            * src/vte.c: (vte_terminal_paint):
+                    Lookup fore/back colours before attempting to draw the graphic
+                    character behind the unfocused cursor.
+    
+    
+    svn path=/trunk/; revision=1695
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 10 +++++-----
+ 2 files changed, 13 insertions(+), 5 deletions(-)
+
+commit 9b942a0267e95ff19ab137559cd069b41b730b5a
+Author: Chris Wilson 
+Date:   2007-02-19 09:25:22 +0000
+
+    Add VTE_DEBUG_EVENT info.
+    
+    2007-02-19  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_visibility_notify):
+                    Add VTE_DEBUG_EVENT info.
+    
+    
+    svn path=/trunk/; revision=1694
+
+ ChangeLog | 5 +++++
+ src/vte.c | 6 ++++++
+ 2 files changed, 11 insertions(+)
+
+commit c46666b8242919c39c0752100cd8742fc0982d3a
+Author: Priit Laes 
+Date:   2007-02-18 10:02:30 +0000
+
+    Updated Estonian translation by Ivar Smolin .
+    
+    2007-02-18  Priit Laes  
+    
+            * et.po: Updated Estonian translation by Ivar Smolin .
+    
+    svn path=/trunk/; revision=1693
+
+ po/ChangeLog |  4 ++++
+ po/et.po     | 67 +++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 39 insertions(+), 32 deletions(-)
+
+commit a398804b7feec0fb03a03451c2a7804b9356c3b6
+Author: Takeshi AIHANA 
+Date:   2007-02-16 23:43:03 +0000
+
+    Updated Japanese translation.
+    
+    2007-02-17  Takeshi AIHANA 
+    
+            * ja.po: Updated Japanese translation.
+    
+    svn path=/trunk/; revision=1692
+
+ po/ChangeLog |  4 ++++
+ po/ja.po     | 68 +++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 39 insertions(+), 33 deletions(-)
+
+commit cccb71086babba14b64fd9c779d96748a0234da6
+Author: Chris Wilson 
+Date:   2007-02-16 14:11:42 +0000
+
+    Argh! The actual ChangeLog entry for the previous commit.
+    
+    svn path=/trunk/; revision=1691
+
+ ChangeLog | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit 73021c8e3cb4cbcf2768bcd5c29a8665458d6b8b
+Author: Chris Wilson 
+Date:   2007-02-16 14:08:58 +0000
+
+    Bug 407945 – "GNOME" Terminal" regression after "vte" update when using
+    
+    2007-02-16  Chris Wilson  
+    
+            Bug 407945 – "GNOME" Terminal" regression after "vte" update when using "csh"
+    
+            When passing multiple versions of the same environment
+            variable to execve (i.e g_spawn) the result is undefined.
+            So we solve the ambiguity by using the application passed env to
+            override values from the current environment.
+    
+            * src/pty.c: (collect_variables), (merge_environ),
+            (_vte_pty_run_on_pty):
+    
+    
+    svn path=/trunk/; revision=1690
+
+ ChangeLog |  7 +++++++
+ src/pty.c | 57 +++++++++++++++++++++++++++++++++++++++++++++------------
+ 2 files changed, 52 insertions(+), 12 deletions(-)
+
+commit b55651f6faa018937802b38ba3f1429b5c3a2005
+Author: Chris Wilson 
+Date:   2007-02-16 10:57:31 +0000
+
+    Bug 408536 – trouble compiling vte 0.15.3
+    
+    2007-02-16  Chris Wilson  
+    
+            Bug 408536 – trouble compiling vte 0.15.3
+    
+            * configure.in:
+            * src/vtefc.c: (_vte_fc_patterns_from_pango_font_desc):
+                    Check for availability of FcStrFree() - only used for
+                    debugging purposes so we can live without it.
+    
+    
+    svn path=/trunk/; revision=1689
+
+ ChangeLog    | 9 +++++++++
+ configure.in | 9 +++++++++
+ src/vtefc.c  | 4 ++++
+ 3 files changed, 22 insertions(+)
+
+commit 6098cf74cdf324c0fdb826ff1fd4df98b88b60de
+Author: Chris Wilson 
+Date:   2007-02-15 11:56:49 +0000
+
+    Guard against a missing default number of rows or columns inside the
+    
+    2007-02-15  Chris Wilson  
+    
+            Guard against a missing default number of rows or columns
+            inside the termcap.
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_set_emulation), (vte_terminal_init):
+    
+    
+    svn path=/trunk/; revision=1688
+
+ ChangeLog         |  8 ++++++++
+ src/vte-private.h |  2 ++
+ src/vte.c         | 13 ++++++++++---
+ 3 files changed, 20 insertions(+), 3 deletions(-)
+
+commit 2d1fef27219bef094bdd04cb585c848c1215fd36
+Author: Chris Wilson 
+Date:   2007-02-15 08:19:27 +0000
+
+    Bug 408040 – vte automagic hyperlinks Patch by Gilles Dartiguelongue.
+    
+    2007-02-15  Chris Wilson  
+    
+            Bug 408040 – vte automagic hyperlinks
+            Patch by Gilles Dartiguelongue.
+    
+            * src/vteapp.c:
+                    Correct the typo in the nntp protocol matcher.
+    
+    
+    svn path=/trunk/; revision=1687
+
+ ChangeLog    | 8 ++++++++
+ src/vteapp.c | 4 ++--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+commit 8b036e7c225d43345d82008bfc5ba6725d71128d
+Author: Duarte Loreto 
+Date:   2007-02-15 01:24:09 +0000
+
+    Updated Portuguese translation.
+    
+    2007-02-15  Duarte Loreto 
+    
+            * pt.po: Updated Portuguese translation.
+    
+    svn path=/trunk/; revision=1686
+
+ po/ChangeLog |  4 ++++
+ po/pt.po     | 67 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 40 insertions(+), 31 deletions(-)
+
+commit b80a9798602233a081464fdd390eb3534e3b3bbb
+Author: Amanpreet Singh Alam 
+Date:   2007-02-15 00:34:31 +0000
+
+    updating for Punjabi
+    
+    svn path=/trunk/; revision=1685
+
+ po/pa.po | 98 +++++++++++++++++++++++++++++++++-------------------------------
+ 1 file changed, 51 insertions(+), 47 deletions(-)
+
+commit 48a52da16aa0441747bb8bf7724b9c6f7f682b49
+Author: Daniel Nylander 
+Date:   2007-02-14 22:40:30 +0000
+
+    sv.po: Swedish translation updated
+    
+    svn path=/trunk/; revision=1684
+
+ po/ChangeLog |  4 +++
+ po/sv.po     | 95 ++++++++++++++++++++++++++++--------------------------------
+ 2 files changed, 48 insertions(+), 51 deletions(-)
+
+commit 31e2986dca529750c385054e64baf46321f2ac30
+Author: Chris Wilson 
+Date:   2007-02-14 16:38:08 +0000
+
+    Add Damien's name to the ChangeLog as he was one who did all the hard work.
+    
+    
+    svn path=/trunk/; revision=1683
+
+ ChangeLog | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 086654fb2e81ad7dada38cc43776233510c9eba0
+Author: Chris Wilson 
+Date:   2007-02-14 16:36:15 +0000
+
+    Bug 407839 – Use of environ breaks build on Solaris
+    
+    2007-02-14  Chris Wilson  
+    
+            Bug 407839 – Use of environ breaks build on Solaris
+    
+            * src/pty.c:
+                    extern char **environ - glibc was 'conveniently' declaring
+                    it for us...
+    
+    
+    svn path=/trunk/; revision=1682
+
+ ChangeLog | 8 ++++++++
+ src/pty.c | 6 ++++--
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+commit eec5e1ba2ba41c43726b828c5dabdc6453e2bfc8
+Author: Yair Hershkovitz 
+Date:   2007-02-14 14:08:10 +0000
+
+    updated hebrew translation
+    
+    svn path=/trunk/; revision=1681
+
+ po/ChangeLog |  4 ++++
+ po/he.po     | 65 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 39 insertions(+), 30 deletions(-)
+
+commit 78a5644a40c0cfed1f74a2844646141561a2c710
+Author: Chris Wilson 
+Date:   2007-02-13 10:14:58 +0000
+
+    uws reported that scrolling inside screen with a status line was broken.
+    
+    2007-02-13  Chris Wilson  
+    
+            uws reported that scrolling inside screen with a status line was
+            broken. Indeed any scrolling inside an alternative screen was broken,
+            e.g. plain vim would not always update the topmost line. The issue was
+            the interaction with the deferred value-changed signal emission and
+            failing to correctly maintain the current scroll_delta. The fix is
+            that we always now apply changes to the scroll_delta and swap
+            scroll_delta with adjustment->value before the deferred signal
+            emission to correctly trigger the handle_scroll().
+    
+            * src/vte-private.h:
+            * src/vte.c: (_vte_invalidate_cells),
+            (vte_terminal_emit_adjustment_changed),
+            (vte_terminal_queue_adjustment_value_changed),
+            (_vte_terminal_adjust_adjustments),
+            (_vte_terminal_adjust_adjustments_full),
+            (vte_terminal_maybe_scroll_to_bottom),
+            (vte_terminal_process_incoming), (vte_terminal_extend_selection),
+            (vte_terminal_handle_scroll), (vte_terminal_set_scrollback_lines):
+            * src/vteseq.c: (vte_sequence_handler_sf):
+    
+    
+    svn path=/trunk/; revision=1680
+
+ ChangeLog         | 22 ++++++++++++++++++
+ src/vte-private.h |  1 -
+ src/vte.c         | 67 +++++++++++++++++++++++++++++++------------------------
+ src/vteseq.c      | 10 ---------
+ 4 files changed, 60 insertions(+), 40 deletions(-)
+
+commit 51ec6a83743a6f93445f8bd10fcaed4c80e62f6c
+Author: Chris Wilson 
+Date:   2007-02-13 08:51:37 +0000
+
+    Bug 407358 – regression in mouse selection
+    
+    2007-02-13  Chris Wilson  
+    
+            Bug 407358 – regression in mouse selection
+    
+            * src/vte.c: (vte_terminal_motion_notify):
+                    When outside the terminal we used an uninitialised variable to
+                    determine the mouse tracking mode.
+    
+    
+    svn path=/trunk/; revision=1679
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 15 ++++++++-------
+ 2 files changed, 16 insertions(+), 7 deletions(-)
+
+commit 05c6997a2d188fdfba05f074ae473913db8ec50c (tag: vte_0_15_3)
+Author: Behdad Esfahbod 
+Date:   2007-02-13 05:02:16 +0000
+
+    Released vte-0.15.3.
+    
+    2007-02-12  Behdad Esfahbod  
+    
+            Released vte-0.15.3.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.15.3.
+    
+            * src/Makefile.am: Bumped libtool version to 11:0:2.
+    
+    
+    svn path=/trunk/; revision=1677
+
+ ChangeLog       | 10 +++++++++
+ NEWS            | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  6 +++---
+ 4 files changed, 79 insertions(+), 4 deletions(-)
+
+commit d00f6be542887348cae7c1c92b538f39655fccd4
+Author: Chris Wilson 
+Date:   2007-02-12 17:50:22 +0000
+
+    Restore autoscroll behaviour.
+    
+    2007-02-12  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_extend_selection),
+            (vte_terminal_motion_notify):
+                    Restore autoscroll behaviour.
+    
+    
+    svn path=/trunk/; revision=1676
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 34 ++++++++++++++++++++--------------
+ 2 files changed, 26 insertions(+), 14 deletions(-)
+
+commit ff3baedb1feaeac07c4d41963caabb3404448fce
+Author: Chris Wilson 
+Date:   2007-02-12 17:35:48 +0000
+
+    Invalidate the selected region when starting in select-word or select-line
+    
+    2007-02-12  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_start_selection):
+                    Invalidate the selected region when starting in
+                    select-word or select-line mode.
+    
+    
+    svn path=/trunk/; revision=1675
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 10 ++++++++++
+ 2 files changed, 16 insertions(+)
+
+commit afd7d6ce9ef7c3f67fc01df7fe262820cf751a84
+Author: Chris Wilson 
+Date:   2007-02-12 17:19:33 +0000
+
+    Restore double-click to select word behaviour, broken by r1671 as the
+    
+    2007-02-12  Chris Wilson  
+    
+            Restore double-click to select word behaviour, broken by r1671 as
+            the second click occurs in the same place as the first (obviously!).
+    
+            * src/vte.c: (vte_terminal_extend_selection),
+            (vte_terminal_autoscroll), (vte_terminal_motion_notify),
+            (vte_terminal_button_press):
+    
+    
+    svn path=/trunk/; revision=1674
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 17 +++++++++--------
+ 2 files changed, 18 insertions(+), 8 deletions(-)
+
+commit cc25041ed39cb173986c2d6b7ec9b546226c45a5
+Author: Chris Wilson 
+Date:   2007-02-12 16:37:41 +0000
+
+    Bug 407091 – vte_terminal_fork_command() env argument changed semantic
+    
+    2007-02-12  Chris Wilson  
+    
+            Bug 407091 – vte_terminal_fork_command() env argument changed semantic in 0.15.2
+            Original patch by Michael Vogt.
+    
+            * src/pty.c: (_vte_pty_run_on_pty):
+                    Copy the current environment into the child's.
+    
+    
+    svn path=/trunk/; revision=1673
+
+ ChangeLog |  8 ++++++++
+ src/pty.c | 48 ++++++++++++++++++++++++++++++++----------------
+ 2 files changed, 40 insertions(+), 16 deletions(-)
+
+commit 9225efa38d0f685bf8ab4ad6f730b55a824bee43
+Author: Ilkka Tuohela 
+Date:   2007-02-12 16:26:06 +0000
+
+    Updated Finnish translation
+    
+    svn path=/trunk/; revision=1672
+
+ po/ChangeLog |  4 ++++
+ po/fi.po     | 61 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 37 insertions(+), 28 deletions(-)
+
+commit 9b1ebc2cc663b935bf8994bf5d21952441a4f34b
+Author: Chris Wilson 
+Date:   2007-02-11 18:52:57 +0000
+
+    Improve ChangeLog grammar for last entry
+    
+    svn path=/trunk/; revision=1671
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ed71458192cb72a76ae2f0658f2f3f64f34d5db2
+Author: Chris Wilson 
+Date:   2007-02-11 18:51:41 +0000
+
+    Bug 323393 – Hyper-sensitive selection
+    
+    2007-02-11  Chris Wilson  
+    
+            Bug 323393 – Hyper-sensitive selection
+    
+            * src/vte.c: (vte_terminal_extend_selection):
+                    Don't start (or update) the selection until you have
+                    move off the current cell (character).
+    
+    
+    svn path=/trunk/; revision=1670
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 12 +++++++++++-
+ 2 files changed, 19 insertions(+), 1 deletion(-)
+
+commit 27bdcfcf116ba09540100e1c9e4e37058cbee0ef
+Author: Chris Wilson 
+Date:   2007-02-11 18:31:20 +0000
+
+    Eliminate dead code from last commit.
+    
+    
+    svn path=/trunk/; revision=1669
+
+ src/vte.c | 12 +++---------
+ 1 file changed, 3 insertions(+), 9 deletions(-)
+
+commit 211b8c3fd9395992baf00f18b9ff0e6141039e0f
+Author: Chris Wilson 
+Date:   2007-02-11 18:20:01 +0000
+
+    Bug 406763 – Selecting double-wide characters
+    
+    2007-02-11  Chris Wilson  
+    
+            Bug 406763 – Selecting double-wide characters
+    
+            * src/vte.c: (start_column), (end_column),
+            (vte_terminal_start_selection), (vte_terminal_extend_selection),
+            (vte_terminal_draw_rows):
+                    Extend selection to include fragment cells i.e. double-wide
+                    characters.
+    
+    
+    svn path=/trunk/; revision=1668
+
+ ChangeLog | 10 +++++++++
+ src/vte.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++--------------
+ 2 files changed, 65 insertions(+), 16 deletions(-)
+
+commit 1977853482af88000cd868f97d75f21b73fa5e77
+Author: Ihar Hrachyshka 
+Date:   2007-02-11 15:55:55 +0000
+
+    be.po: Updated Belarusian translation.
+    
+    svn path=/trunk/; revision=1667
+
+ po/ChangeLog |  4 ++++
+ po/be.po     | 77 +++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 44 insertions(+), 37 deletions(-)
+
+commit 82aae53f5f6df2b3711f2562416f2bf94610998e
+Author: Theppitak Karoonboonyanan 
+Date:   2007-02-11 09:26:56 +0000
+
+    Added Thai translation.
+    
+            * th.po: Added Thai translation.
+    
+    
+    svn path=/trunk/; revision=1666
+
+ po/ChangeLog |  4 ++++
+ po/th.po     | 66 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 39 insertions(+), 31 deletions(-)
+
+commit db8c3398dded800a9570f7b3004b5c4161089344
+Author: Chris Wilson 
+Date:   2007-02-10 21:12:54 +0000
+
+    Have a separate adjust_adjustments for when we know that the page size and
+    
+    2007-02-10  Chris Wilson  
+    
+            Have a separate adjust_adjustments for when we know that the page
+            size and step lengths may have changed.
+    
+            * src/vte.c: (_vte_terminal_adjust_adjustments),
+            (_vte_terminal_adjust_adjustments_full),
+            (vte_terminal_set_scrollback_lines), (vte_terminal_reset):
+    
+    
+    svn path=/trunk/; revision=1665
+
+ ChangeLog |  9 ++++++++
+ src/vte.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
+ 2 files changed, 83 insertions(+), 4 deletions(-)
+
+commit e1e03bfea1cdec959d7fe151c45a68bef74d0d19
+Author: Chris Wilson 
+Date:   2007-02-10 01:18:14 +0000
+
+    Prevent the display of garbage after resizing and switching between
+    
+    2007-02-10  Chris Wilson  
+    
+            * src/vte.c: (_vte_terminal_adjust_adjustments),
+            (vte_terminal_size_allocate), (vte_terminal_set_scrollback_lines):
+                    Prevent the display of garbage after resizing and switching
+                    between alternate screens.
+                    However, instead of displaying garbage after the cursor, we
+                    lose some data above the current scroll delta, should we have
+                    a full history.  Bizarre.
+    
+    
+    svn path=/trunk/; revision=1664
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 28 ++++++++++++++++++++--------
+ 2 files changed, 30 insertions(+), 8 deletions(-)
+
+commit 0298c00f6fc3ecc8704ed5a73180b2dcfa43804c
+Author: Chris Wilson 
+Date:   2007-02-09 22:26:03 +0000
+
+    Do not allow to scroll past the last line after reducing scrollback lines.
+    
+    2007-02-09  Chris Wilson  
+    
+            * src/vte.c: (_vte_terminal_adjust_adjustments):
+                    Do not allow to scroll past the last line after reducing
+                    scrollback lines.
+            * src/vtexft.c: (_vte_xft_set_text_font):
+                    Ensure a fallback height is set.
+    
+    
+    svn path=/trunk/; revision=1663
+
+ ChangeLog    | 8 ++++++++
+ src/vte.c    | 8 ++++----
+ src/vtexft.c | 3 +++
+ 3 files changed, 15 insertions(+), 4 deletions(-)
+
+commit 315d4022bdf7d966bdd4d3494ad0653cf232655b
+Author: Chris Wilson 
+Date:   2007-02-09 20:42:36 +0000
+
+    Reuse VteRowData whilst in the row.
+    
+    2007-02-09  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_get_text_range_maybe_wrapped):
+                    Reuse VteRowData whilst in the row.
+    
+    
+    svn path=/trunk/; revision=1662
+
+ ChangeLog | 5 +++++
+ src/vte.c | 7 ++++---
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+commit 324b43bd592e0b7598eb3b895247a0234cf42e57
+Author: Stéphane Raimbault 
+Date:   2007-02-09 19:22:06 +0000
+
+    Updated French translation by Jonathan Ernst and Stéphane Raimbault.
+    
+    2007-02-09  Stéphane Raimbault  
+    
+            * fr.po: Updated French translation by Jonathan Ernst and Stéphane
+            Raimbault.
+    
+    svn path=/trunk/; revision=1661
+
+ po/ChangeLog |  5 +++++
+ po/fr.po     | 70 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 42 insertions(+), 33 deletions(-)
+
+commit 406b4112f009278210bfed3d5b02ffe87e53f506
+Author: Chris Wilson 
+Date:   2007-02-09 19:03:13 +0000
+
+    Remove the incomplete ChangeLog entry
+    
+    svn path=/trunk/; revision=1660
+
+ ChangeLog | 10 ----------
+ 1 file changed, 10 deletions(-)
+
+commit fc9491db2c696d3fdf04c6305722a578991f2dab
+Author: Chris Wilson 
+Date:   2007-02-09 19:02:51 +0000
+
+    Rework to reduce number of times mutex is taken and shorten the hold.
+    
+    2007-02-09  Chris Wilson  
+    
+            Rework to reduce number of times mutex is taken and shorten the hold.
+    
+            * src/vte.c: (vte_terminal_queue_adjustment_changed),
+            (vte_terminal_queue_adjustment_value_changed),
+            (vte_terminal_io_read), (vte_terminal_paint),
+            (vte_terminal_add_process_timeout), (vte_terminal_is_processing),
+            (vte_terminal_start_processing):
+    
+    
+    svn path=/trunk/; revision=1659
+
+ ChangeLog | 20 ++++++++++++++++++++
+ src/vte.c | 44 +++++++++++++++++++++-----------------------
+ 2 files changed, 41 insertions(+), 23 deletions(-)
+
+commit 1b2331370cddeb42e37ac7d9cfbbe6968969139d
+Author: Djihed Afifi 
+Date:   2007-02-09 17:37:21 +0000
+
+    Updated Arabic Translation.
+    
+    svn path=/trunk/; revision=1658
+
+ po/ChangeLog |  4 ++++
+ po/ar.po     | 47 ++++++++++++++++++++++++-----------------------
+ 2 files changed, 28 insertions(+), 23 deletions(-)
+
+commit ed0571e099a5288ee4ca769b5f16165910346711
+Author: Chris Wilson 
+Date:   2007-02-09 15:42:27 +0000
+
+    A number of small bug fixes... - do not override the user setting of
+    
+    2007-02-09  Chris Wilson  
+    
+            A number of small bug fixes...
+            - do not override the user setting of scrollback lines with the
+            terminal size.
+            - only set the current screen rather than both and so reset the
+            scrollback lines when we switch between normal and alternate.
+            - do not invalidate inside set_scrollback lines as setting does not
+            actually modify the on-screen contents.
+            - push the scroll-adjustment to the post-processing emission.
+            - queue timeouts on value change (should be a no-op)
+            - reorder emission so that scrolling occurs before invalidating the
+            window (ie so that the scroll happens this cycle, not next).
+    
+            Still unsolved: the clamping of the cursor when switching between
+            alternate screens.
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_emit_adjustment_changed),
+            (vte_terminal_queue_adjustment_changed),
+            (vte_terminal_queue_adjustment_value_changed),
+            (_vte_terminal_adjust_adjustments), (vte_terminal_scroll_pages),
+            (vte_terminal_maybe_scroll_to_top),
+            (vte_terminal_maybe_scroll_to_bottom),
+            (_vte_terminal_ensure_cursor), (_vte_terminal_update_insert_delta),
+            (vte_terminal_process_incoming), (vte_terminal_extend_selection),
+            (vte_terminal_autoscroll), (vte_terminal_handle_scroll),
+            (vte_terminal_size_allocate), (vte_terminal_scroll),
+            (vte_terminal_background_update),
+            (vte_terminal_queue_background_update),
+            (vte_terminal_set_scrollback_lines), (vte_terminal_reset),
+            (add_process_timeout), (vte_terminal_add_process_timeout),
+            (vte_terminal_start_processing), (update_repeat_timeout),
+            (update_timeout):
+            * src/vteseq.c: (vte_sequence_handler_scroll_up_or_down),
+            (vte_sequence_handler_decset_internal), (vte_sequence_handler_al),
+            (vte_sequence_handler_dl), (vte_sequence_handler_sf),
+            (vte_sequence_handler_sr), (vte_sequence_handler_clear_screen),
+            (vte_sequence_handler_cursor_character_absolute),
+            (vte_sequence_handler_insert_lines),
+            (vte_sequence_handler_delete_lines),
+            (vte_sequence_handler_screen_alignment_test):
+    
+    
+    svn path=/trunk/; revision=1657
+
+ ChangeLog         |  43 ++++++++++
+ src/vte-private.h |   3 +-
+ src/vte.c         | 245 +++++++++++++++++++++++++-----------------------------
+ src/vteseq.c      |  34 ++++----
+ 4 files changed, 175 insertions(+), 150 deletions(-)
+
+commit 677f408192eb94bc12acd3fb259fc0d832f36aa4
+Author: David Lodge 
+Date:   2007-02-09 12:26:52 +0000
+
+    Updated (British) English translation
+    
+    svn path=/trunk/; revision=1656
+
+ po/ChangeLog |  4 ++++
+ po/en_GB.po  | 69 +++++++++++++++++++++++++++++++++++-------------------------
+ 2 files changed, 44 insertions(+), 29 deletions(-)
+
+commit 9edec5976463f7730393e2cfcfd714dc22dad1c7
+Author: Josep Puigdemont i Casamajó 
+Date:   2007-02-09 01:24:26 +0000
+
+    Updated Catalan translation.
+    
+    svn path=/trunk/; revision=1655
+
+ po/ChangeLog |  4 ++++
+ po/ca.po     | 71 +++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 43 insertions(+), 32 deletions(-)
+
+commit a1fdc00df38d789aeb646098039b60e07dc70135
+Author: Chris Wilson 
+Date:   2007-02-08 23:41:55 +0000
+
+    whitespace
+    
+    2007-02-08  Chris Wilson  
+    
+            * src/vteapp.c: (main): whitespace
+    
+    
+    svn path=/trunk/; revision=1654
+
+ ChangeLog    |  4 ++++
+ src/vteapp.c | 31 +++++++++++++++----------------
+ 2 files changed, 19 insertions(+), 16 deletions(-)
+
+commit 66669bb79539819035041c526be2ba10e70dc2c9
+Author: Chris Wilson 
+Date:   2007-02-08 23:38:36 +0000
+
+    Bug 363597 – Scrollback in profile dialog doesn't work
+    
+    2007-02-08  Chris Wilson  
+    
+            Bug 363597 – Scrollback in profile dialog doesn't work
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_init),
+                    Only use SCROLLBACK_MIN during initialisation, so rename it
+                    to SCROLLBACK_INIT.
+            (vte_terminal_set_scrollback_lines):
+                    Remove MAX(lines, SCROLLBACK_MIN) and update code comments
+                    to reduce confusion.
+    
+    
+    svn path=/trunk/; revision=1653
+
+ ChangeLog         | 12 ++++++++++++
+ src/vte-private.h |  2 +-
+ src/vte.c         |  9 ++++-----
+ 3 files changed, 17 insertions(+), 6 deletions(-)
+
+commit f7965513089c1c3e0d736c1fc1f558a387822a9f
+Author: Mariano Suárez-Alvarez 
+Date:   2007-02-08 21:48:06 +0000
+
+    do something useful with --geometry.
+    
+    2007-02-08  Mariano Suárez-Alvarez  
+    
+            * src/vteapp.c(main): do something useful with --geometry.
+    
+    
+    
+    svn path=/trunk/; revision=1652
+
+ ChangeLog    |  4 ++++
+ src/vteapp.c | 18 ++++++++++++++----
+ 2 files changed, 18 insertions(+), 4 deletions(-)
+
+commit 2248057a2a30e0af2403b7ada2374317e2c16ea4
+Author: Djihed Afifi 
+Date:   2007-02-08 20:10:28 +0000
+
+    Updated Arabic Translation.
+    
+    svn path=/trunk/; revision=1651
+
+ po/ChangeLog |  4 ++++
+ po/ar.po     | 46 ++++++++++++++++++++++------------------------
+ 2 files changed, 26 insertions(+), 24 deletions(-)
+
+commit b3ada446dc6e9554689375ac7b1f67c3c47b889b
+Author: Chris Wilson 
+Date:   2007-02-08 17:34:40 +0000
+
+    Use gtk_widget_get_(screen|display) which will itself return a default if
+    
+    2007-02-08  Chris Wilson  
+    
+            Use gtk_widget_get_(screen|display) which will itself return a default
+            if not currently attached.
+    
+            * src/vtedraw.c: (_vte_draw_get_colormap):
+            * src/vtefc.c: (_vte_fc_defaults_from_gtk):
+            * src/vtegl.c: (_vte_gl_check), (_vte_gl_create),
+            (_vte_gl_destroy), (_vte_gl_start), (_vte_gl_end), (_vte_gl_clear),
+            (_vte_gl_draw_text), (_vte_gl_rectangle):
+            * src/vterdb.c: (_vte_rdb_get):
+            * src/vteseq.c: (vte_sequence_handler_window_manipulation):
+    
+    
+    svn path=/trunk/; revision=1650
+
+ ChangeLog     | 13 +++++++++++
+ configure.in  |  2 +-
+ src/vtedraw.c |  6 +----
+ src/vtefc.c   | 15 ++++--------
+ src/vtegl.c   | 74 +++++++++++++++++++----------------------------------------
+ src/vterdb.c  |  6 ++---
+ src/vteseq.c  |  6 +----
+ 7 files changed, 46 insertions(+), 76 deletions(-)
+
+commit 15d58f1309f45e3eb02a7e46cd74440170b13b78
+Author: Chris Wilson 
+Date:   2007-02-08 14:06:53 +0000
+
+    Some more callgrinding - kill a little bit of overhead.
+    
+    2007-02-08  Chris Wilson  
+    
+            Some more callgrinding - kill a little bit of overhead.
+    
+            * src/iso2022.c: (_vte_iso2022_sequence_length),
+            (_vte_iso2022_fragment_input), (process_control):
+            * src/matcher.c: (_vte_matcher_free_params_array):
+            * src/vteconv.c: (_vte_conv):
+    
+    
+    svn path=/trunk/; revision=1649
+
+ ChangeLog     |   9 ++++++
+ src/iso2022.c | 102 +++++++++++++++++++++++++++++++++++++++++++++-------------
+ src/matcher.c |   8 ++---
+ src/vteconv.c |  11 +++----
+ 4 files changed, 98 insertions(+), 32 deletions(-)
+
+commit 385746c4b6bc1afb008e719aa7846106255e0e81
+Author: Chris Wilson 
+Date:   2007-02-07 16:57:57 +0000
+
+    Actually return whether or not we found the char in _vte_xft_font_for_char
+    
+    2007-02-07  Chris Wilson  
+    
+            Actually return whether or not we found the char in
+            _vte_xft_font_for_char - saves having to double check afterwards!
+    
+            * src/vtexft.c: (_vte_xft_font_for_char), (_vte_xft_set_text_font),
+            (_vte_xft_draw_text):
+    
+    
+    svn path=/trunk/; revision=1648
+
+ ChangeLog    |  8 +++++
+ src/vtexft.c | 97 ++++++++++++++++++++----------------------------------------
+ 2 files changed, 40 insertions(+), 65 deletions(-)
+
+commit 7111e266695e7b8ef2daa6e0c6508cfe58154aed
+Author: Chris Wilson 
+Date:   2007-02-07 16:03:30 +0000
+
+    As spotted perusing roxterm, we fail to redraw after changing the text
+    
+    2007-02-07  Chris Wilson  
+    
+            As spotted perusing roxterm, we fail to redraw after changing the text
+            colour.
+    
+            * src/vte.c: (vte_terminal_set_color_internal):
+                    Remember to invalidate all!
+    
+    
+    svn path=/trunk/; revision=1647
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 3 +++
+ 2 files changed, 11 insertions(+)
+
+commit 4d59212a11ca8157d3a49f2b0e85230c2bb73a3b
+Author: Chris Wilson 
+Date:   2007-02-07 10:15:51 +0000
+
+    Scan for newlines before and after the current row to find the entire line
+    
+    2007-02-07  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_match_check_internal):
+                    Scan for newlines before and after the current row
+                    to find the entire line in case of soft-wrapping.
+    
+    
+    svn path=/trunk/; revision=1646
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 12 ++++++++++--
+ 2 files changed, 16 insertions(+), 2 deletions(-)
+
+commit 523d88614c859385c3430130ae49c5bba11683fe
+Author: Chris Wilson 
+Date:   2007-02-07 09:49:20 +0000
+
+    Bug 345344 – Pattern matching is inefficient Bug 324246 – Performance
+    
+    2007-02-07  Chris Wilson  
+    
+            Bug 345344 – Pattern matching is inefficient
+            Bug 324246 – Performance degredation with large numbers of highlighted addresses/URLs
+    
+            * src/vte.c: (vte_terminal_match_check_internal):
+                    Trim the searched string down to the row containing the
+                    pointer. During a mutt session this drops the time consumed by
+                    regexec from ~30% to ~2%.
+                    Note: multi-line regexes are now unsupported!
+    
+    
+    svn path=/trunk/; revision=1645
+
+ ChangeLog |  11 ++++++
+ src/vte.c | 125 ++++++++++++++++++++++++++++++++++++++++----------------------
+ 2 files changed, 92 insertions(+), 44 deletions(-)
+
+commit ecc00ed00303b06fb764a8beb092ea56fb7968e6
+Author: Chris Wilson 
+Date:   2007-02-07 00:45:02 +0000
+
+    Avoid the strlen when possible.
+    
+    2007-02-07  Chris Wilson  
+    
+            * src/vteseq.c: (_vte_sequence_get_handler):
+                    Avoid the strlen when possible.
+    
+    
+    svn path=/trunk/; revision=1644
+
+ ChangeLog    | 5 +++++
+ src/vteseq.c | 6 +++---
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+commit 941e00dee9b6ab5168ae0b6226794758734528a4
+Author: Chris Wilson 
+Date:   2007-02-07 00:07:40 +0000
+
+    Some cleanups and a bug...
+    
+    2007-02-07  Chris Wilson  
+    
+            Some cleanups and a bug...
+    
+            vte_terminal_match_hilite() compared the current cell to the last
+            mouse position without a floor().
+    
+            * src/vte.c: (vte_terminal_process_incoming),
+            (vte_terminal_match_hilite), (vte_terminal_select_all),
+            (vte_terminal_select_none), (vte_terminal_motion_notify),
+            (vte_terminal_button_press):
+    
+    
+    svn path=/trunk/; revision=1643
+
+ ChangeLog | 12 ++++++++++++
+ src/vte.c | 67 +++++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 47 insertions(+), 32 deletions(-)
+
+commit c7ee539681e4bc62474acf51ea97136b7ffcfaec
+Author: Chris Wilson 
+Date:   2007-02-06 22:29:39 +0000
+
+    Bug 86119 – "select all" feature Original patch by Simone Gotti.
+    
+    2007-02-06  Chris Wilson  
+    
+            Bug 86119 – "select all" feature
+            Original patch by Simone Gotti.
+    
+            * src/vte.c: (vte_terminal_select_all), (vte_terminal_select_none):
+            * src/vte.h:
+                    Add 2 new API entry points to select the entire contents
+                    and clear the current selection.
+    
+    
+    svn path=/trunk/; revision=1642
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vte.h |  4 ++++
+ 3 files changed, 75 insertions(+)
+
+commit 40d798732f1f59d4dc6f4e635ae0466ddb96d7f0
+Author: Chris Wilson 
+Date:   2007-02-06 22:02:22 +0000
+
+    Bug 342059 – ASCII escape sequences don't work as expected Correction by
+    
+    2007-02-06  Chris Wilson 
+    
+            Bug 342059 – ASCII escape sequences don't work as expected
+            Correction by Mariano Suárez-Alvarez.
+    
+            * src/vteseq.c: (vte_sequence_handler_cursor_character_absolute):
+                    OBO on the parameter.
+    
+    
+    svn path=/trunk/; revision=1641
+
+ ChangeLog    | 8 ++++++++
+ src/vteseq.c | 4 ++--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+commit e8788fb343b122f77dcb087c3644633d59649fbe
+Author: Chris Wilson 
+Date:   2007-02-06 21:47:58 +0000
+
+    Bug 342059 – ASCII escape sequences don't work as expected Patch by
+    
+    2007-02-06  Chris Wilson  
+    
+            Bug 342059 – ASCII escape sequences don't work as expected
+            Patch by Mariano Suárez-Alvarez.
+    
+            * src/vteseq.c: (vte_sequence_handler_cursor_character_absolute):
+                    Provide a default value.
+    
+    
+    svn path=/trunk/; revision=1640
+
+ ChangeLog    |  8 ++++++++
+ src/vteseq.c | 21 +++++++++++++++++++--
+ 2 files changed, 27 insertions(+), 2 deletions(-)
+
+commit 8d0525d71c15affc86448ba204bcddd94f1dbf56
+Author: Chris Wilson 
+Date:   2007-02-06 19:02:38 +0000
+
+    And finally as noted on bug 324246#c8 hide the hilite when the mouse
+    
+    2007-02-06  Chris Wilson  
+    
+            And finally as noted on bug 324246#c8 hide the hilite when the mouse
+            leaves the terminal (show again when it enters and let motion-notify
+            correct it later).
+    
+            * src/vte.c: (vte_terminal_enter), (vte_terminal_leave),
+            (vte_terminal_realize), (vte_terminal_class_init):
+    
+    
+    svn path=/trunk/; revision=1639
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 39 +++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 46 insertions(+), 2 deletions(-)
+
+commit 1cb4420af95031508802786ea876a86ab1bc61e7
+Author: Chris Wilson 
+Date:   2007-02-06 18:43:19 +0000
+
+    As noted on bug 324246#c8, hide the hilite when the focus disappears. On
+    
+    2007-02-06  Chris Wilson  
+    
+            As noted on bug 324246#c8, hide the hilite when the focus disappears.
+            On focus restore the match for the last mouse coordinates and let
+            motion-notify take care of the rest.
+    
+            * src/vte.c: (vte_terminal_match_hilite_update),
+            (vte_terminal_match_hilite), (vte_terminal_focus_in):
+    
+    
+    svn path=/trunk/; revision=1638
+
+ ChangeLog |  6 ++++--
+ src/vte.c | 53 +++++++++++++++++++++++++++++++++++------------------
+ 2 files changed, 39 insertions(+), 20 deletions(-)
+
+commit 35d8895c49716e77b91c74bab75089ba6a6e3540
+Author: Chris Wilson 
+Date:   2007-02-06 18:35:02 +0000
+
+    As noted on bug 324246#c8, hide the hilite when the focus disappears.
+    
+    2007-02-06  Chris Wilson  
+    
+            As noted on bug 324246#c8, hide the hilite when the focus disappears.
+            Depend upon motion-notify events to show the hilite.
+    
+            * src/vte.c: (vte_terminal_focus_out):
+    
+    
+    svn path=/trunk/; revision=1637
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 1 +
+ 2 files changed, 8 insertions(+)
+
+commit e972b042a3901d1f0f9e1059a391330c799a58df
+Author: Chris Wilson 
+Date:   2007-02-06 16:49:41 +0000
+
+    Convert the exposed rectangles to cells and remerge them.
+    
+    2007-02-06  Chris Wilson  
+    
+            Convert the exposed rectangles to cells and remerge them.
+    
+            * src/vte.c: (vte_terminal_expand_region),
+            (vte_terminal_paint_area), (vte_terminal_paint):
+    
+    
+    svn path=/trunk/; revision=1636
+
+ ChangeLog |  7 ++++++
+ src/vte.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
+ 2 files changed, 73 insertions(+), 9 deletions(-)
+
+commit bcb9cce88b1ac694c42f72a875fc8de4707fe5bf
+Author: Chris Wilson 
+Date:   2007-02-06 14:05:26 +0000
+
+    As noted on Bug 401052#c13, vte fails to completely clear the cell's
+    
+    2007-02-06  Chris Wilson  
+    
+            As noted on Bug 401052#c13, vte fails to completely clear the cell's
+            previous contents.
+    
+            * src/vte.c: (_vte_invalidate_cells):
+                    Grow the invalidate region by a single pixel to accomodate
+                    antialiased pseudo-bold characters.
+    
+    
+    svn path=/trunk/; revision=1635
+
+ ChangeLog | 9 +++++++++
+ src/vte.c | 8 ++++----
+ 2 files changed, 13 insertions(+), 4 deletions(-)
+
+commit 2e35e0e588ceb00b3b4196ca63c6f5d37611d17f
+Author: Chris Wilson 
+Date:   2007-02-06 14:03:33 +0000
+
+    Move status_line_changed to post-processing emission.
+    
+    2007-02-06  Chris Wilson  
+    
+            Move status_line_changed to post-processing emission.
+    
+            * src/vte-private.h:
+            * src/vte.c: (_vte_terminal_insert_char), (vte_terminal_reset),
+            (vte_terminal_emit_pending_signals):
+            * src/vteseq.c: (vte_sequence_handler_ts):
+    
+    
+    svn path=/trunk/; revision=1634
+
+ ChangeLog         |  9 +++++++++
+ src/vte-private.h |  2 +-
+ src/vte.c         | 11 +++++++++--
+ src/vteseq.c      |  2 +-
+ 4 files changed, 20 insertions(+), 4 deletions(-)
+
+commit 1ed564c990e5d793ce102f9ee9dbb5d67045c070
+Author: Chris Wilson 
+Date:   2007-02-06 11:31:48 +0000
+
+    Clamp down on needless invalidates during selection.
+    
+    2007-02-06  Chris Wilson  
+    
+            Clamp down on needless invalidates during selection.
+    
+            As commented on in Bug 401052#c10
+    
+            * src/vte.c: (_vte_invalidate_region), (vte_terminal_deselect_all),
+            (vte_terminal_match_hilite_clear), (vte_terminal_start_selection),
+            (vte_terminal_extend_selection):
+    
+    
+    svn path=/trunk/; revision=1633
+
+ ChangeLog |  10 +++++
+ src/vte.c | 128 ++++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 76 insertions(+), 62 deletions(-)
+
+commit 93592983597e5bec9df8e61637f65c9cbffddeb8
+Author: Chris Wilson 
+Date:   2007-02-06 10:27:52 +0000
+
+    Don't needlessly break the text run on a space if we are not drawing cell
+    
+    2007-02-06  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_draw_rows):
+                    Don't needlessly break the text run on a space if we are
+                    not drawing cell attributes.
+    
+    
+    svn path=/trunk/; revision=1632
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 12 +++++++++++-
+ 2 files changed, 17 insertions(+), 1 deletion(-)
+
+commit 2b125a856e2afee11252bdb75ed420f08fc721d1
+Author: Chris Wilson 
+Date:   2007-02-06 08:49:56 +0000
+
+    One more G_UNLIKELY Avoid expensive hiliting if the pointer is not in the
+    
+    2007-02-06  Chris Wilson  
+    
+            * src/iso2022.c: (_vte_iso2022_is_ambiguous_ht):
+                    One more G_UNLIKELY
+            * src/vte.c: (vte_terminal_match_hilite),
+            (vte_terminal_motion_notify):
+                    Avoid expensive hiliting if the pointer is not in the window.
+            * src/vteregex.c: (_vte_regex_exec):
+                    Prefer g_new(x,n) over g_malloc(sizeof(x)*n)
+    
+    
+    svn path=/trunk/; revision=1631
+
+ ChangeLog      | 10 ++++++++++
+ src/iso2022.c  |  2 +-
+ src/vte.c      | 20 +++++++++++++++++++-
+ src/vteregex.c |  2 +-
+ 4 files changed, 31 insertions(+), 3 deletions(-)
+
+commit 7fb0dfdb947d98ff2aa2e01266f3517df2c24b9a
+Author: Chris Wilson 
+Date:   2007-02-05 23:22:56 +0000
+
+    Simple to script to scroll UTF-8 text.
+    
+    svn path=/trunk/; revision=1630
+
+ perf/utf8.sh | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+commit e8a2e72779bf6701e10d73354818d1734d2f6d12
+Author: Chris Wilson 
+Date:   2007-02-05 21:55:38 +0000
+
+    Bug 404757 – URL matching doesn't work with PCRE
+    
+    2007-02-05  Chris Wilson  
+    
+            Bug 404757 – URL matching doesn't work with PCRE
+    
+            * configure.in:
+                    mention the inconsistency in the help string and default to no.
+    
+    
+    svn path=/trunk/; revision=1629
+
+ ChangeLog    | 7 +++++++
+ configure.in | 4 ++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 102053e8c98dfa69450c5d8b3e85a5570a5eab0c
+Author: Chris Wilson 
+Date:   2007-02-05 17:09:27 +0000
+
+    Don't draw cell attributes across spaces.
+    
+    2007-02-05  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_draw_rows):
+                    Don't draw cell attributes across spaces.
+    
+    
+    svn path=/trunk/; revision=1628
+
+ ChangeLog |  5 +++++
+ src/vte.c | 10 ++++++----
+ 2 files changed, 11 insertions(+), 4 deletions(-)
+
+commit 5ef6ed835427ef0eefa3b2f3694bbed53d208991
+Author: Chris Wilson 
+Date:   2007-02-05 16:05:20 +0000
+
+    A couple more G_LIKELYs.
+    
+    2007-02-05  Chris Wilson  
+    
+            * src/vte.c: (_vte_terminal_insert_char):
+                    A couple more G_LIKELYs.
+    
+    
+    svn path=/trunk/; revision=1627
+
+ ChangeLog | 5 +++++
+ src/vte.c | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit be36839768c3a3ec2d6734dce47b96fdda248bbc
+Author: Chris Wilson 
+Date:   2007-02-05 13:55:55 +0000
+
+    Bug 403028 – decset mode 12 = blinking cursor
+    
+    2007-02-05  Chris Wilson  
+    
+            Bug 403028 – decset mode 12 = blinking cursor
+    
+            * src/vteseq.c: (vte_sequence_handler_decset_internal):
+                    Following convention, disallow the application's control
+                    over the blinking cursor in favour of the user's setting.
+    
+    
+    svn path=/trunk/; revision=1626
+
+ ChangeLog    | 8 ++++++++
+ src/vteseq.c | 2 ++
+ 2 files changed, 10 insertions(+)
+
+commit 25007669b49652093e6d14699e5d5a4b15a77ce8
+Author: Chris Wilson 
+Date:   2007-02-05 13:38:56 +0000
+
+    Some more small callgrind tweaks - well into the law of diminishing
+    
+    2007-02-05  Chris Wilson  
+    
+            Some more small callgrind tweaks - well into the law of diminishing
+            returns.
+    
+            * src/iso2022.c: (_vte_iso2022_is_ambiguous_ht),
+            (_vte_iso2022_is_ambiguous), (process_8_bit_sequence),
+            (process_cdata), (_vte_iso2022_unichar_width):
+            * src/matcher.c: (_vte_matcher_free_params_array):
+            * src/vte.c: (vte_terminal_process_incoming):
+    
+    
+    svn path=/trunk/; revision=1625
+
+ ChangeLog     | 11 +++++++++++
+ src/iso2022.c | 37 +++++++++++++++++++++----------------
+ src/matcher.c |  3 +--
+ src/vte.c     |  3 +--
+ 4 files changed, 34 insertions(+), 20 deletions(-)
+
+commit 589e6df7291dae65b02fe9223f40c916e2c4ade7
+Author: Chris Wilson 
+Date:   2007-02-05 12:33:49 +0000
+
+    Beware the trivial change. Handle reuse of GValueArray correctly.
+    
+    2007-02-05  Chris Wilson  
+    
+            Beware the trivial change. Handle reuse of GValueArray correctly.
+    
+            * src/matcher.c: (_vte_matcher_match):
+            * src/table.c: (_vte_table_match):
+            * src/trie.c: (_vte_trie_match):
+            * src/vte.c: (vte_terminal_process_incoming):
+    
+    
+    svn path=/trunk/; revision=1624
+
+ ChangeLog     |  9 +++++++++
+ src/matcher.c |  2 +-
+ src/table.c   |  4 ++--
+ src/trie.c    | 17 +++++++++--------
+ src/vte.c     | 14 ++++++++------
+ 5 files changed, 29 insertions(+), 17 deletions(-)
+
+commit 94ce0b006861d54d8e683e2cec93d79be28908c5
+Author: Chris Wilson 
+Date:   2007-02-05 12:15:36 +0000
+
+    And kill the leak as vte_table_match erroneously cleared its output
+    
+    2007-02-05  Chris Wilson  
+    
+            * src/table.c: (_vte_table_match):
+                    And kill the leak as vte_table_match erroneously cleared
+                    its output arguments.
+    
+    
+    svn path=/trunk/; revision=1623
+
+ ChangeLog   | 6 ++++++
+ src/table.c | 6 +++---
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+commit 8109c64664cf26422e9efb3256f665d5b5214c58
+Author: Chris Wilson 
+Date:   2007-02-05 10:47:28 +0000
+
+    The continual reallocation of GValueArray is the last trivially avoidable
+    
+    2007-02-05  Chris Wilson  
+    
+            The continual reallocation of GValueArray is the last trivially
+            avoidable g_realloc.
+    
+            * src/interpret.c: (main):
+            * src/matcher.c: (_vte_matcher_create), (_vte_matcher_destroy),
+            (_vte_matcher_match), (_vte_matcher_free_params_array):
+            * src/matcher.h:
+            * src/table.c: (_vte_table_extract_string):
+            * src/trie.c: (_vte_trie_matchx), (_vte_trie_match), (main):
+            * src/vte.c: (vte_terminal_process_incoming):
+    
+    
+    svn path=/trunk/; revision=1622
+
+ ChangeLog       | 13 +++++++++++++
+ src/interpret.c |  2 +-
+ src/matcher.c   | 32 ++++++++++++++++++++++----------
+ src/matcher.h   |  2 +-
+ src/table.c     | 13 ++++++-------
+ src/trie.c      | 48 +++++++++++++++++++++++++-----------------------
+ src/vte.c       |  3 ++-
+ 7 files changed, 70 insertions(+), 43 deletions(-)
+
+commit 95d056d80bf4da8e18e3ed059b6eed1c957aa2fa
+Author: Chris Wilson 
+Date:   2007-02-05 09:54:57 +0000
+
+    Missed an important compiler warning.
+    
+    2007-02-05  Chris Wilson  
+    
+            * src/ring.c: (_vte_ring_insert):
+                    Missed an important compiler warning.
+    
+    
+    svn path=/trunk/; revision=1621
+
+ ChangeLog  | 5 +++++
+ src/ring.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit b307bc5c424787b557df9c69c1f92a7c45c558a8
+Author: Chris Wilson 
+Date:   2007-02-05 09:46:43 +0000
+
+    cf Bug 342338 – suffers from memory fragmentation
+    
+    2007-02-05  Chris Wilson  
+    
+            cf Bug 342338 – suffers from memory fragmentation
+    
+            Reuse the last VteRowData instead of immediately freeing it. Avoids
+            recreating and *regrowing* a new GArray on the heap.
+    
+            In the simple scrolling benchmarks this can boost performance by as
+            much as 10%!
+    
+            * src/ring.c: (_vte_ring_insert), (_vte_ring_insert_preserve),
+            (_vte_ring_remove), (_vte_ring_append):
+            * src/ring.h:
+            * src/vte-private.h:
+            * src/vte.c: (_vte_reset_row_data), (_vte_terminal_ensure_cursor),
+            (_vte_terminal_insert_char), (vte_terminal_reset_rowdata):
+            * src/vteseq.c: (vte_insert_line_internal),
+            (vte_sequence_handler_scroll_up_or_down),
+            (vte_sequence_handler_cd), (vte_sequence_handler_sf),
+            (vte_sequence_handler_clear_screen),
+            (vte_sequence_handler_screen_alignment_test):
+    
+    
+    svn path=/trunk/; revision=1620
+
+ ChangeLog         | 22 ++++++++++++++++
+ src/ring.c        | 71 +++++++++++++++++++++++++------------------------
+ src/ring.h        |  8 +++---
+ src/vte-private.h |  2 ++
+ src/vte.c         | 44 ++++++++++++++++++++++++-------
+ src/vteseq.c      | 79 ++++++++++++++++++++++++++++++++++++++++++-------------
+ 6 files changed, 159 insertions(+), 67 deletions(-)
+
+commit 285ebd25406bd8188e6da16f3290aa4682629b92
+Author: Chris Wilson 
+Date:   2007-02-04 22:22:58 +0000
+
+    A few more compiler warnings.
+    
+    2007-02-04  Chris Wilson  
+    
+            A few more compiler warnings.
+    
+            * src/buffer.c: (_vte_buffer_peek_gstring):
+            * src/iso2022.c: (process_control):
+            * src/vteft2.c: (_vte_ft2_set_text_font):
+            * src/vteseq.c: (vte_sequence_handler_set_title_internal):
+            * src/vtetc.c: (_vte_termcap_parse_file):
+    
+    
+    svn path=/trunk/; revision=1619
+
+ ChangeLog     | 10 ++++++++++
+ src/buffer.c  |  2 +-
+ src/iso2022.c |  8 +-------
+ src/vteft2.c  |  2 +-
+ src/vteseq.c  |  6 +++---
+ src/vtetc.c   |  2 +-
+ 6 files changed, 17 insertions(+), 13 deletions(-)
+
+commit ee4147edf2bff9a844a5b1e2f1c17fc5f988afa0
+Author: Chris Wilson 
+Date:   2007-02-04 21:53:01 +0000
+
+    Bug 106618 – CJK 'fixed width' font and 's p a c e d o u t' issue
+    
+    2007-02-04  Chris Wilson  
+    
+            Bug 106618 – CJK 'fixed width' font and 's p a c e d o u t' issue
+    
+            * src/vtedraw.h:
+            * src/vteglyph.c: (_vte_glyph_cache_set_font_description):
+            * src/vtepango.c: (_vte_pango_set_text_font):
+            * src/vtepangox.c: (_vte_pango_x_set_text_font):
+            * src/vtexft.c: (_vte_xft_set_text_font):
+                    Detect a change in font between wide-chars and recheck for a
+                    fixed-width estimate.
+    
+    
+    svn path=/trunk/; revision=1618
+
+ ChangeLog       | 12 ++++++++++++
+ src/vtedraw.h   |  7 ++++++-
+ src/vteglyph.c  | 24 ++++++++++++++++++++----
+ src/vtepango.c  |  5 +++--
+ src/vtepangox.c |  5 +++--
+ src/vtexft.c    | 23 +++++++++++++++++++----
+ 6 files changed, 63 insertions(+), 13 deletions(-)
+
+commit 71b1922740896554509a64e77c4f3598a2031b71
+Author: Chris Wilson 
+Date:   2007-02-04 21:44:35 +0000
+
+    Revert the accidentally applied patch for bug 324246. patch said is was
+    trying to reverse a revered patch - it lied.
+    
+    svn path=/trunk/; revision=1617
+
+ src/vte.c | 14 +-------------
+ 1 file changed, 1 insertion(+), 13 deletions(-)
+
+commit 65eeaaa02a838e4309133628055fd93fe2b60210
+Author: Chris Wilson 
+Date:   2007-02-04 21:40:44 +0000
+
+    Micro-opts.
+    
+    2007-02-04  Chris Wilson  
+    
+            Micro-opts.
+    
+            * src/table.c: (_vte_table_match):
+                    No need set to NULL.
+            * src/vte.c: (_vte_terminal_ensure_cursor):
+                    If we have added some rows, the last is the current.
+    
+    
+    svn path=/trunk/; revision=1616
+
+ ChangeLog   |  9 +++++++++
+ src/table.c |  2 +-
+ src/vte.c   | 10 +++++-----
+ 3 files changed, 15 insertions(+), 6 deletions(-)
+
+commit 936abce0f37e25033f92660d5496e726828d656d
+Author: Chris Wilson 
+Date:   2007-02-04 20:19:08 +0000
+
+    Move window/icon title changed to the post-processing emission - helps
+    
+    2007-02-04  Chris Wilson  
+    
+            Move window/icon title changed to the post-processing emission - helps
+            with the artificial benchmark of replaying a recorded jhbuild script.
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_finalize),
+            (vte_terminal_emit_icon_title_changed),
+            (vte_terminal_emit_window_title_changed),
+            (vte_terminal_emit_pending_signals):
+            * src/vteseq.c: (vte_sequence_handler_set_title_internal):
+    
+    
+    svn path=/trunk/; revision=1615
+
+ ChangeLog         | 12 ++++++++++++
+ src/vte-private.h |  4 ++++
+ src/vte.c         | 48 +++++++++++++++++++++++++++++++++++++++++++++---
+ src/vteseq.c      | 36 ++++++------------------------------
+ 4 files changed, 67 insertions(+), 33 deletions(-)
+
+commit 69c2c22f9be0c9e28f3ca4512ada0cb299783634
+Author: Chris Wilson 
+Date:   2007-02-04 18:58:09 +0000
+
+    Broke clear-to-end-of-line by lowering the number of cells appended,
+    
+    2007-02-04  Chris Wilson  
+    
+            Broke clear-to-end-of-line by lowering the number of cells appended,
+            instead of the number of cells invalidated.
+    
+            * src/vte.c: (vte_terminal_draw_rows):
+            * src/vteseq.c: (vte_sequence_handler_ce):
+    
+    
+    svn path=/trunk/; revision=1614
+
+ ChangeLog    |  8 ++++++++
+ src/vte.c    | 13 ++++++-------
+ src/vteseq.c |  2 +-
+ 3 files changed, 15 insertions(+), 8 deletions(-)
+
+commit 0d4331ffbeea7a92d68525b55205f1ae1a6b1fe4
+Author: Chris Wilson 
+Date:   2007-02-04 17:40:03 +0000
+
+    Spelling corrections.
+    
+    
+    svn path=/trunk/; revision=1613
+
+ ChangeLog | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 2ddb77285675c657d704e4bfb1431167088b4fff
+Author: Chris Wilson 
+Date:   2007-02-04 16:18:44 +0000
+
+    cf Bug 83285 – Treacle-slow scrolling in gnome-terminal on unaccelerated
+    
+    2007-02-04  Chris Wilson  
+    
+            cf Bug 83285 – Treacle-slow scrolling in gnome-terminal on unaccelerated X server
+    
+            Another chunk of performance improvements - the majority focussing on
+            reducing the amount of work down per interrupt (input data from
+            child).
+    
+            To handle reads without addition copies VTE_INPUT_CHUNK_SIZE chunks
+            are allocated on demand and filled from read with no further copy -
+            previously the read was into a local buffer and then immediately
+            copied into a _vte_buffer.
+            _vte_iso2022_process() is then adjusted to use a ptr+length, rather
+            than a _vte_buffer and is called for every input chunk (taking special
+            care over the boundary cases).
+    
+            * src/interpret.c: (main):
+            * src/iso2022.c: (_vte_iso2022_fragment_input),
+            (process_8_bit_sequence), (process_cdata), (_vte_iso2022_process):
+            * src/iso2022.h:
+            * src/vte-private.h:
+            * src/vte.c: (get_chunk), (release_chunk), (prune_chunks),
+            (_vte_incoming_chunks_release), (_vte_incoming_chunks_length),
+            (_vte_incoming_chunks_count), (_vte_incoming_chunks_reverse),
+            (vte_terminal_match_check_internal), (_vte_terminal_ensure_cursor),
+            (vte_terminal_set_colors), (_vte_terminal_insert_char),
+            (vte_terminal_catch_child_exited), (vte_terminal_eof),
+            (vte_terminal_process_incoming), (_vte_terminal_feed_chunks),
+            (vte_terminal_io_read), (vte_terminal_feed), (vte_terminal_send),
+            (vte_terminal_init), (vte_terminal_finalize), (vte_terminal_reset),
+            (remove_from_active_list), (need_processing), (update_regions),
+            (update_repeat_timeout):
+            * src/vte.h:
+            * src/vteseq.c: (vte_sequence_handler_cb),
+            (vte_sequence_handler_ce), (vte_sequence_handler_ec):
+    
+    
+    
+    svn path=/trunk/; revision=1612
+
+ ChangeLog         |  36 +++++
+ src/interpret.c   |   3 +-
+ src/iso2022.c     |  61 ++++---
+ src/iso2022.h     |   5 +-
+ src/vte-private.h |   9 +-
+ src/vte.c         | 476 +++++++++++++++++++++++++++++++++++++++---------------
+ src/vte.h         |   1 -
+ src/vteseq.c      |  17 +-
+ 8 files changed, 425 insertions(+), 183 deletions(-)
+
+commit d5defbeda929f31723f2a571e0f387d11d7c15e0
+Author: Chris Wilson 
+Date:   2007-02-04 16:06:50 +0000
+
+    Store whether the codeset is ambiguous in a state variable, rather than
+    
+    2007-02-04  Chris Wilson  
+    
+            Store whether the codeset is ambiguous in a state variable,
+            rather than every processing loop.
+    
+            * src/iso2022.c: (_vte_iso2022_is_ambiguous),
+            (_vte_iso2022_state_new), (_vte_iso2022_find_nextctl):
+    
+    
+    svn path=/trunk/; revision=1611
+
+ ChangeLog     |  8 ++++++++
+ src/iso2022.c | 18 ++++++++----------
+ 2 files changed, 16 insertions(+), 10 deletions(-)
+
+commit 5e903c991928a6f3d111f9604e85618d78bfe930
+Author: Chris Wilson 
+Date:   2007-02-04 16:03:39 +0000
+
+    Remove zero-initialisers after g_slice_new0(). Print out the width range.
+    
+    2007-02-04  Chris Wilson  
+    
+            * src/vtexft.c: (_vte_xft_create), (_vte_xft_destroy):
+                    Remove zero-initialisers after g_slice_new0().
+            * src/vtexft.c :(_vte_xft_set_text_font):
+                    Print out the width range.
+    
+    
+    svn path=/trunk/; revision=1610
+
+ ChangeLog    |  7 +++++++
+ src/vtexft.c | 23 +++++++++++------------
+ 2 files changed, 18 insertions(+), 12 deletions(-)
+
+commit 8099a6296069fafcbf8d5879704b401ea9ae374b
+Author: Chris Wilson 
+Date:   2007-02-04 16:01:15 +0000
+
+    Missing space between -Wflags.
+    
+    2007-02-04  Chris Wilson  
+    
+            * configure.in:
+                    Missing space between -Wflags.
+    
+    
+    svn path=/trunk/; revision=1609
+
+ ChangeLog    | 5 +++++
+ configure.in | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 2bb339aaaae27e50956cf0bb71bb3c87a72707a5
+Author: Chris Wilson 
+Date:   2007-02-04 16:00:20 +0000
+
+    Eliminate the temporary g_sliced parameter list, in favour of on-stack
+    
+    2007-02-04  Chris Wilson  
+    
+            Eliminate the temporary g_sliced parameter list,
+            in favour of on-stack list.
+    
+            * src/table.c: (_vte_table_arginfo_head_init),
+            (_vte_table_arginfo_alloc), (_vte_table_arginfo_head_revert),
+            (_vte_table_arginfo_head_reverse),
+            (_vte_table_arginfo_head_finalize), (_vte_table_addi),
+            (_vte_table_matchi), (_vte_table_extract_string),
+            (_vte_table_match):
+    
+    
+    svn path=/trunk/; revision=1608
+
+ ChangeLog   |  12 ++++
+ src/table.c | 205 +++++++++++++++++++++++++++++++++++++-----------------------
+ 2 files changed, 140 insertions(+), 77 deletions(-)
+
+commit ed896a8f250dbfbe065e711e2557919a4e403d1d
+Author: Chris Wilson 
+Date:   2007-02-02 12:37:13 +0000
+
+    Dump the chosen fonts to VTE_DEBUG_MISC. Print out the font metrics ala
+    
+    2007-02-02  Chris Wilson  
+    
+            * src/vtefc.c: (_vte_fc_patterns_from_pango_font_desc):
+                    Dump the chosen fonts to VTE_DEBUG_MISC.
+            * src/vteft2.c: (_vte_ft2_set_text_font):
+                    Print out the font metrics ala vtexft.c
+    
+    
+    svn path=/trunk/; revision=1607
+
+ ChangeLog    |  7 +++++++
+ src/vtefc.c  | 11 +++++++++++
+ src/vteft2.c |  5 +++++
+ 3 files changed, 23 insertions(+)
+
+commit 38870b35c051b21d6ce9aa3ed9c34cc9d9051271
+Author: Chris Wilson 
+Date:   2007-02-02 12:27:03 +0000
+
+    Bug 322241 – Please switch to pkg-config to check for freetype
+    
+    2007-02-02  Chris Wilson  
+    
+            Bug 322241 – Please switch to pkg-config to check for freetype
+    
+            * configure.in:
+                    Prefer to use the freetype2.pc if available.
+    
+    
+    svn path=/trunk/; revision=1606
+
+ ChangeLog    |  7 +++++++
+ configure.in | 10 +++++++---
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+commit 05b0b2d1f64a6c9208930e43f2b81ec5106c50e7
+Author: Chris Wilson 
+Date:   2007-02-02 12:12:08 +0000
+
+    Bug 322240 – Usage of pkg-config privates header
+    
+    2007-02-02  Chris Wilson  
+    
+            Bug 322240 – Usage of pkg-config privates header
+    
+            * vte.pc.in:
+                    Move @FT2_LIBS@ to Libs.private.
+    
+    
+    svn path=/trunk/; revision=1605
+
+ ChangeLog | 7 +++++++
+ vte.pc.in | 3 ++-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit 1d2b8bf16d531efd4d649daf4a09b3f68514fac4
+Author: Chris Wilson 
+Date:   2007-02-01 23:26:45 +0000
+
+    cf Bug 403275 – crash in Terminal: I was typing reset on th...
+    
+    2007-02-01  Chris Wilson  
+    
+            cf Bug 403275 – crash in Terminal: I was typing reset on th...
+    
+            Not the crash, just a freeze found whilst trying to reproduce the
+            bug on trunk.
+    
+            * src/vte.c: (remove_from_active_list):
+                    Don't remove the terminal from the active list if it still
+                    has pending redraws.
+    
+            * src/vte.c: (process_timeout), (update_timeout):
+                    Reorder the loop to remove the terminal from the active list
+                    if it no longer needs processing.
+    
+    
+    svn path=/trunk/; revision=1604
+
+ ChangeLog | 15 +++++++++++++++
+ src/vte.c | 12 +++++++-----
+ 2 files changed, 22 insertions(+), 5 deletions(-)
+
+commit 40584615bfa12c0c3dba969f11dea6fb63617fb5
+Author: Chris Wilson 
+Date:   2007-02-01 22:46:02 +0000
+
+    Extract the bits the test needs out of debian.vim.
+    
+    2007-02-01  Chris Wilson  
+    
+            * perf/scroll.vim:
+                    Extract the bits the test needs out of debian.vim.
+    
+    
+    svn path=/trunk/; revision=1603
+
+ ChangeLog       |  5 +++++
+ perf/scroll.vim | 11 ++++++++++-
+ 2 files changed, 15 insertions(+), 1 deletion(-)
+
+commit c83dd80e28ef70bbfb8423e976086a79c038533b
+Author: Chris Wilson 
+Date:   2007-02-01 16:20:23 +0000
+
+    As spotted on bug 399617c8, we convert an array of unichars to a string
+    
+    2007-02-01  Chris Wilson  
+    
+            As spotted on bug 399617c8, we convert an array of unichars to a
+            string and then iterate over the string interpreting bytes as
+            unichars.
+    
+            * src/table.c: (_vte_table_extract_numbers):
+                    Dispense with the temporary string and process the unichar
+                    array directly.
+    
+    
+    svn path=/trunk/; revision=1602
+
+ ChangeLog   | 10 ++++++++++
+ src/table.c | 21 ++++++---------------
+ 2 files changed, 16 insertions(+), 15 deletions(-)
+
+commit 5e11ab51348ff7bb01e0afac8058c044bc6750bb
+Author: Chris Wilson 
+Date:   2007-02-01 10:31:04 +0000
+
+    Bug 403159 – XftDrawSetClipRectangles() silently fails on ppc->i386
+    
+    2007-02-01  Chris Wilson 
+    
+            Bug 403159 – XftDrawSetClipRectangles() silently fails on ppc->i386
+    
+            * src/vtexft.c: (_vte_xft_clip):
+                    Precompute clip offsets.
+    
+    
+    svn path=/trunk/; revision=1601
+
+ ChangeLog    | 7 +++++++
+ src/vtexft.c | 9 ++++++---
+ 2 files changed, 13 insertions(+), 3 deletions(-)
+
+commit 31b9530f77e559b507960e9090ae8ff37deeb0cc
+Author: Chris Wilson 
+Date:   2007-02-01 00:32:13 +0000
+
+    Bug 382245 – __PyGtk_API multiply defined in python module
+    
+    2007-02-01  Chris Wilson  
+    
+            Bug 382245 – __PyGtk_API multiply defined in python module
+    
+            * configure.in:
+                    Add -fno-common to MAYBE_WARN in order to catch future
+                    errors of this type.
+            * python/vte.override:
+                    Define PYGTK_NO_IMPORT.
+    
+    
+    svn path=/trunk/; revision=1600
+
+ ChangeLog           | 10 ++++++++++
+ configure.in        |  3 ++-
+ python/vte.override |  1 +
+ 3 files changed, 13 insertions(+), 1 deletion(-)
+
+commit 086175a78cd41fd877e8182e2be25071b73c490d
+Author: Chris Wilson 
+Date:   2007-01-31 23:15:11 +0000
+
+    Bug 155687 – Scroll region \E[NN;MMr should set cursor to home
+    
+    2007-01-31  Chris Wilson  
+    
+            Bug 155687 – Scroll region \E[NN;MMr should set cursor to home
+    
+            Patch originally by Michele Baldessari.
+    
+            * src/vteseq.c: (vte_sequence_handler_cs):
+                    Move the cursor to (0,0) rather than clamping the cursor to
+                    be inside the scroll region.
+    
+    
+    svn path=/trunk/; revision=1599
+
+ ChangeLog    | 10 ++++++++++
+ src/vteseq.c |  6 ++----
+ 2 files changed, 12 insertions(+), 4 deletions(-)
+
+commit f66bd6eba689911aa939a017601777b9a738cbf6
+Author: Chris Wilson 
+Date:   2007-01-31 22:22:53 +0000
+
+    In a few places the contents of a GValue were being used without checking
+    
+    2007-01-31  Chris Wilson  
+    
+            In a few places the contents of a GValue were being used without
+            checking that they were of the expected type.
+    
+            cf Bug 117945 which mentions stack corruption inside
+            vte_sequence_handler_delete_lines() - one of the corrected instances.
+    
+            * src/vteseq.c: (vte_sequence_handler_al),
+            (vte_sequence_handler_cs), (vte_sequence_handler_cS),
+            (vte_sequence_handler_dl),
+            (vte_sequence_handler_character_attributes),
+            (vte_sequence_handler_insert_lines),
+            (vte_sequence_handler_delete_lines),
+            (vte_sequence_handler_device_status_report),
+            (vte_sequence_handler_dec_device_status_report):
+                    Check that the GValue holds a long before dereference.
+    
+    
+    svn path=/trunk/; revision=1598
+
+ ChangeLog    |  18 +++++
+ src/vteseq.c | 216 ++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 135 insertions(+), 99 deletions(-)
+
+commit 469132e1784df0ff7d0751b532806d5ebbf5acb9
+Author: Chris Wilson 
+Date:   2007-01-31 21:07:46 +0000
+
+    Back to the old-style io loop as _vte_buffer_append() is too slow - on a
+    
+    2007-01-31  Chris Wilson 
+    
+            Back to the old-style io loop as _vte_buffer_append() is too slow - on
+            a slow system the read can fill before the data is copied (even more
+            apparent under valgrind).
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_io_read):
+    
+    
+    svn path=/trunk/; revision=1597
+
+ ChangeLog         |  9 +++++++++
+ src/vte-private.h |  2 +-
+ src/vte.c         | 17 +++++++++++------
+ 3 files changed, 21 insertions(+), 7 deletions(-)
+
+commit edcf192995f5ca7daabfea981e23ff30a1500271
+Author: Chris Wilson 
+Date:   2007-01-31 19:50:59 +0000
+
+    Use the display stashed inside the font and not the default display!
+    
+    2007-01-31  Chris Wilson  
+    
+            Use the display stashed inside the font and not the default display!
+    
+            * src/vtexft.c: (_vte_xft_char_exists), (_vte_xft_text_extents),
+            (_vte_xft_font_open), (_vte_xft_font_close),
+            (_vte_xft_font_for_char), (_vte_xft_draw_text):
+    
+    
+    svn path=/trunk/; revision=1596
+
+ ChangeLog    |  8 ++++++++
+ src/vtexft.c | 36 ++++++++++--------------------------
+ 2 files changed, 18 insertions(+), 26 deletions(-)
+
+commit e382c37eb053b6bdea1f293d9aa93fac4e36f519
+Author: Chris Wilson 
+Date:   2007-01-31 19:02:10 +0000
+
+    A mixed bag of cleanups.
+    
+    2007-01-31  Chris Wilson  
+    
+            A mixed bag of cleanups.
+    
+            * configure.in:
+            * src/pty.c: (_vte_pty_set_utf8):
+                    Test for existence of tc[sg]etattr.
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_emit_adjustment_changed),
+            (vte_terminal_queue_adjustment_changed),
+            (vte_terminal_set_color_internal), (vte_terminal_handle_sequence),
+            (_vte_terminal_enable_input_source), (vte_terminal_io_read),
+            (vte_terminal_init), (vte_terminal_unrealize),
+            (vte_terminal_finalize), (vte_terminal_background_update),
+            (vte_terminal_queue_background_update),
+            (vte_terminal_emit_pending_signals), (process_timeout),
+            (update_repeat_timeout), (update_timeout):
+                    Move idle signal emission to display handlers.
+            * src/vtedraw.h:
+                    Add '&' to the single width characters.
+            * src/vteseq.c: (_vte_sequence_get_handler):
+            * src/vteseq.h:
+                    Drop the extraneous GQuark parameter.
+            * src/vtexft.c: (_vte_xft_set_text_font):
+                    Avoid use of strlen for a compile-time fixed length string.
+    
+    
+    svn path=/trunk/; revision=1595
+
+ ChangeLog         |  26 +++++++++++
+ configure.in      |   2 +-
+ src/pty.c         |  14 +++---
+ src/vte-private.h |   4 +-
+ src/vte.c         | 137 ++++++++++++++++++++++++++++--------------------------
+ src/vtedraw.h     |   2 +-
+ src/vteseq.c      |   3 +-
+ src/vteseq.h      |   3 +-
+ src/vtexft.c      |   2 +-
+ 9 files changed, 111 insertions(+), 82 deletions(-)
+
+commit 7134bd1fe35596343ef2b919e7ef14a5e1bc6a6c
+Author: Chris Wilson 
+Date:   2007-01-31 15:37:04 +0000
+
+    Dropped a most important '!' during last merge.
+    
+    
+    svn path=/trunk/; revision=1594
+
+ src/vte.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit c9280a87e0f27b3caf3948196a7cf5f78b06d7f0
+Author: Chris Wilson 
+Date:   2007-01-31 15:01:36 +0000
+
+    Bug 147784 – cursor unvisible under mouse highlight
+    
+    2007-01-31  Chris Wilson  
+    
+            Bug 147784 – cursor unvisible under mouse highlight
+    
+            Original patch by Chris Health
+    
+            * src/vte.c: (vte_terminal_paint):
+                    Reverse cursor color if it is in the selected region and draw
+                    it as an outline.
+    
+    
+    svn path=/trunk/; revision=1593
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 53 ++++++++++++++++++++++++++++++++++-------------------
+ 2 files changed, 44 insertions(+), 19 deletions(-)
+
+commit dfd5c7d73b0bca978bc47d5b697ba3ea6ccf668b
+Author: Chris Wilson 
+Date:   2007-01-31 13:50:56 +0000
+
+    Bug 368894 – crash in Terminal: I started gnome-terminal...
+    
+    2007-01-31  Chris Wilson  
+    
+            Bug 368894 – crash in Terminal: I started gnome-terminal...
+    
+            * src/vtebg.c: (vte_bg_cache_search), (vte_bg_get_pixmap),
+            (vte_bg_get_pixbuf):
+                    When retrieving a cached pixmap check that the visual
+                    matches the current request.
+    
+    
+    svn path=/trunk/; revision=1592
+
+ ChangeLog   |  9 +++++++++
+ src/vtebg.c | 12 ++++++++----
+ 2 files changed, 17 insertions(+), 4 deletions(-)
+
+commit ccf4b8470fba1441eceb54f4ec5e8410863bf9c9
+Author: Chris Wilson 
+Date:   2007-01-31 13:32:05 +0000
+
+    Use gdk_error_trap_{push,pop} around raw Xft calls - about a path outside
+    
+    2007-01-31  Chris Wilson  
+    
+            Use gdk_error_trap_{push,pop} around raw Xft calls - about a
+            path outside of vte_draw_{begin,end}.
+    
+            * src/vtexft.c: (_vte_xft_set_text_font):
+    
+    
+    svn path=/trunk/; revision=1591
+
+ ChangeLog    | 7 +++++++
+ src/vtexft.c | 4 ++++
+ 2 files changed, 11 insertions(+)
+
+commit 9105d7d5bbcc70bfab88840f262b5efe40e75cb0
+Author: Chris Wilson 
+Date:   2007-01-31 13:27:17 +0000
+
+    Use gdk_error_trap_{push,pop} around raw X11 and Xft calls. cf Bug 368894.
+    
+    2007-01-31  Chris Wilson  
+    
+            Use gdk_error_trap_{push,pop} around raw X11 and Xft calls.
+            cf Bug 368894.
+    
+            * src/vtexft.c: (_vte_xft_font_for_char), (_vte_xft_start),
+            (_vte_xft_end):
+    
+    
+    svn path=/trunk/; revision=1590
+
+ ChangeLog    |  8 ++++++++
+ src/vtexft.c | 22 ++++++++++------------
+ 2 files changed, 18 insertions(+), 12 deletions(-)
+
+commit 6d4d2801a11d56fcf92896b0bab3f2de8c9fd377
+Author: Chris Wilson 
+Date:   2007-01-31 12:33:56 +0000
+
+    Use gperf to calculate a more optimal vte_sequence_get_handler(). This
+    
+    2007-01-31  Chris Wilson  
+    
+            Use gperf to calculate a more optimal vte_sequence_get_handler().
+            This reduces vte_sequence_get_handler() from ~13% of the runtime
+            during 'seq 1 1e6' to ~.5% (cumulative).
+    
+            * src/Makefile.am:
+            * src/vteseq-2.c: (vteseq_2_hash), (vteseq_2_lookup):
+            * src/vteseq-2.gperf:
+            * src/vteseq-n.c: (vteseq_n_hash), (vteseq_n_lookup):
+            * src/vteseq-n.gperf:
+            * src/vteseq.c: (_vte_sequence_get_handler):
+    
+    
+    svn path=/trunk/; revision=1589
+
+ ChangeLog          |   13 +
+ src/Makefile.am    |   11 +
+ src/vteseq-2.c     | 1246 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vteseq-2.gperf |  274 ++++++++++++
+ src/vteseq-n.c     |  815 ++++++++++++++++++++++++++++++++++
+ src/vteseq-n.gperf |  111 +++++
+ src/vteseq.c       |   61 +--
+ 7 files changed, 2476 insertions(+), 55 deletions(-)
+
+commit e427710779ab6d2dbd28f392a300b30311620705
+Author: Chris Wilson 
+Date:   2007-01-31 11:05:24 +0000
+
+    And the ChangeLog entry for the last commit. Grrr.
+    
+    svn path=/trunk/; revision=1588
+
+ ChangeLog | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+commit 87693a8b96dd1516e25d791208c5e8d764f4ee46
+Author: Chris Wilson 
+Date:   2007-01-31 10:59:42 +0000
+
+    Rudimentary vim scrolling benchmark.
+    
+    2007-01-31  Chris Wilson  
+    
+            Rudimentary vim scrolling benchmark.
+    
+            * perf/Makefile.am:
+            * perf/UTF-8-demo.txt:
+            * perf/scroll.vim:
+            * perf/vim.sh:
+    
+    
+    svn path=/trunk/; revision=1587
+
+ perf/Makefile.am    |   3 +
+ perf/UTF-8-demo.txt | 212 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ perf/scroll.vim     |  32 ++++++++
+ perf/vim.sh         |   7 ++
+ 4 files changed, 254 insertions(+)
+
+commit d860aa616596055c0c64a47c9255f294e700429e
+Author: Chris Wilson 
+Date:   2007-01-30 19:43:06 +0000
+
+    Bug 402329 – Rendering problem with underlines and cursor
+    
+    2007-01-30  Chris Wilson  
+    
+            Bug 402329 – Rendering problem with underlines and cursor
+    
+            * src/vte.c: (vte_terminal_paint):
+                    Check hilite state when redrawing character under cursor.
+    
+    
+    svn path=/trunk/; revision=1586
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 22 ++++++++++++++++++++--
+ 2 files changed, 27 insertions(+), 2 deletions(-)
+
+commit 60cd6a884d3dddafac9342fdfdb12ebe58dc7cc5
+Author: Chris Wilson 
+Date:   2007-01-30 17:52:12 +0000
+
+    fix trivial compile error in last commit
+    
+    svn path=/trunk/; revision=1585
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b48efa17a8fc1671f64a3fe96f8178b4ffd3a98b
+Author: Chris Wilson 
+Date:   2007-01-30 17:45:04 +0000
+
+    Clean up the read IO loop.
+    
+    2007-01-29  Chris Wilson  
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_io_read):
+                    Clean up the read IO loop.
+    
+    
+    svn path=/trunk/; revision=1584
+
+ ChangeLog         |  6 ++++++
+ src/vte-private.h |  2 +-
+ src/vte.c         | 39 ++++++++++++++++++---------------------
+ 3 files changed, 25 insertions(+), 22 deletions(-)
+
+commit a180e29a504fa25240d3208a5470cfa875678f25 (tag: vte_0_14_2)
+Author: Chris Wilson 
+Date:   2007-01-29 17:46:12 +0000
+
+    NULL return from pcre_study() does not necessarily mean an error occurred.
+    
+    2007-01-29  Chris Wilson  
+    
+            NULL return from pcre_study() does not necessarily mean an error
+            occurred.
+    
+            * src/vteregex.c: (_vte_regex_compile), (_vte_regex_exec):
+    
+    
+    svn path=/trunk/; revision=1580
+
+ ChangeLog      | 7 +++++++
+ src/vteregex.c | 6 +++---
+ 2 files changed, 10 insertions(+), 3 deletions(-)
+
+commit 63ef7cf260fe280afd0b5d5ca99aea38bf8931bf
+Author: Chris Wilson 
+Date:   2007-01-29 17:34:32 +0000
+
+    Kill a couple more compiler warnings.
+    
+    2007-01-29  Chris Wilson  
+    
+            * src/vte.c: (_vte_terminal_set_pointer_visible),
+            (_vte_terminal_fudge_pango_colors):
+                    Kill a couple more compiler warnings.
+    
+    
+    svn path=/trunk/; revision=1579
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 5 ++---
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+commit 9814f9e5cb46a98f1ee7abf18d8d2074e686796b
+Author: Chris Wilson 
+Date:   2007-01-29 17:14:57 +0000
+
+    Bug 336105 – gnome-terminal crashes when termcap not found
+    
+    2007-01-29  Chris Wilson  
+    
+            Bug 336105 – gnome-terminal crashes when termcap not found
+    
+            * src/matcher.c: (_vte_matcher_init):
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_set_default_tabstops),
+            (vte_terminal_key_press), (vte_terminal_set_emulation),
+            (_vte_terminal_inline_error_message), (vte_terminal_set_termcap),
+            (vte_terminal_init), (vte_terminal_finalize),
+            (vte_terminal_draw_cells):
+                    Detect and issue an inline warning when we fail
+                    to load a termcap.
+    
+    
+    svn path=/trunk/; revision=1578
+
+ ChangeLog         |  14 ++++++
+ src/matcher.c     |  53 ++++++++++++-----------
+ src/vte-private.h |   2 +
+ src/vte.c         | 127 +++++++++++++++++++++++++++++++++---------------------
+ 4 files changed, 123 insertions(+), 73 deletions(-)
+
+commit 4deb919b44bdf2af9b0fb7c333b56e44ad64406c
+Author: Chris Wilson 
+Date:   2007-01-29 16:47:17 +0000
+
+    Tighten the invalidated cells.
+    
+    2007-01-29  Chris Wilson  
+    
+            Tighten the invalidated cells.
+    
+            * src/vte.c: (_vte_terminal_select_text):
+            * src/vteseq.c: (vte_sequence_handler_cb):
+    
+    
+    svn path=/trunk/; revision=1577
+
+ ChangeLog    |  7 +++++
+ src/vte.c    | 91 ++++++++++++++++++++++++++++++------------------------------
+ src/vteseq.c |  2 +-
+ 3 files changed, 53 insertions(+), 47 deletions(-)
+
+commit 136c800352d416d7c4257b211653a4412173b4e3
+Author: Chris Wilson 
+Date:   2007-01-29 16:20:47 +0000
+
+    More compiler warnings.
+    
+    2007-01-29  Chris Wilson  
+    
+            More compiler warnings.
+    
+            * src/vtepangox.c: (_vte_pango_x_set_text_font),
+            (_vte_pango_x_draw_text):
+            * src/vteregex.c: (_vte_regex_exec):
+    
+    
+    svn path=/trunk/; revision=1576
+
+ ChangeLog       |  8 ++++++++
+ src/vtepangox.c |  5 ++---
+ src/vteregex.c  | 26 +++++++++++++-------------
+ 3 files changed, 23 insertions(+), 16 deletions(-)
+
+commit 4458f91bcb21c9bec6584b2d9ff2efff6d8b6f8d
+Author: Chris Wilson 
+Date:   2007-01-29 16:12:24 +0000
+
+    Whitespace touch-up.
+    
+    svn path=/trunk/; revision=1575
+
+ configure.in | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+commit 20763c0f09f499c33da5ac368beed75afb34e152
+Author: Chris Wilson 
+Date:   2007-01-29 16:09:02 +0000
+
+    Detect availability of PCRE.
+    
+    2007-01-29  Chris Wilson  
+    
+            Detect availability of PCRE.
+    
+            * configure.in:
+            * src/Makefile.am:
+    
+    
+    svn path=/trunk/; revision=1574
+
+ ChangeLog       |  7 +++++++
+ configure.in    | 16 ++++++++++++++++
+ src/Makefile.am |  4 ++--
+ 3 files changed, 25 insertions(+), 2 deletions(-)
+
+commit e1ecd0b2aa1391728dae48539b70c04c68b66371
+Author: Chris Wilson 
+Date:   2007-01-29 15:21:20 +0000
+
+    Improve handling of multi-row clears.
+    
+    2007-01-29  Chris Wilson  
+    
+            Improve handling of multi-row clears.
+    
+            * src/vte.c: (vte_terminal_draw_cells), (vte_terminal_draw_rows),
+            (vte_terminal_paint):
+    
+    
+    svn path=/trunk/; revision=1573
+
+ ChangeLog |   7 ++++
+ src/vte.c | 112 +++++++++++++++++++++++---------------------------------------
+ 2 files changed, 49 insertions(+), 70 deletions(-)
+
+commit 7707048400d6e77e63c31fc17eadeec51f0028c9
+Author: Chris Wilson 
+Date:   2007-01-29 14:53:34 +0000
+
+    Add debugging flags for printing out cells contents and attributes as they
+    
+    2007-01-29  Chris Wilson 
+    
+            Add debugging flags for printing out cells contents and attributes as
+            they are rendered.
+    
+            * src/debug.c: (_vte_debug_parse_string):
+            * src/debug.h:
+            * src/vte.c: (vte_terminal_draw_cells):
+    
+    
+    svn path=/trunk/; revision=1572
+
+ ChangeLog    |  9 +++++++++
+ src/debug.c  |  3 +++
+ src/debug.h  |  3 ++-
+ src/vte.c    | 11 +++++++++++
+ src/vteft2.c |  2 +-
+ src/vtexft.c |  2 +-
+ 6 files changed, 27 insertions(+), 3 deletions(-)
+
+commit 55ffe367655986fac869408447c7f6527e085e6d
+Author: Chris Wilson 
+Date:   2007-01-29 14:41:24 +0000
+
+    another small missing compare from last commit
+    
+    svn path=/trunk/; revision=1571
+
+ src/vte.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 301ab762f28f108d652cbb4fafbcd4a4991e74b3
+Author: Chris Wilson 
+Date:   2007-01-29 14:40:09 +0000
+
+    small missing compare from last commit
+    
+    svn path=/trunk/; revision=1570
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7a2047f1d42891731b7badbeecff41c70b7a5404
+Author: Chris Wilson 
+Date:   2007-01-29 14:36:51 +0000
+
+    Don't issue glyph items for blank cells.
+    
+    2007-01-29  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_draw_rows):
+                    Don't issue glyph items for blank cells.
+    
+    
+    svn path=/trunk/; revision=1569
+
+ ChangeLog |  5 +++++
+ src/vte.c | 54 +++++++++++++++++++++++++++++++-----------------------
+ 2 files changed, 36 insertions(+), 23 deletions(-)
+
+commit 39039a31520471520cac6e5ce642827cc33e74c6
+Author: Chris Wilson 
+Date:   2007-01-29 13:30:50 +0000
+
+    Add -Wshadow to MAYBE_WARN
+    
+    2007-01-29  Chris Wilson  
+    
+            * configure.in:
+                    Add -Wshadow to MAYBE_WARN
+            * src/ring.c: (_vte_ring_remove):
+            * src/table.c: (_vte_table_matchi):
+            * src/vtedraw.c: (_vte_draw_clip):
+            * src/vteskel.c:
+                    Clean up some compiler warnings.
+    
+    
+    svn path=/trunk/; revision=1568
+
+ ChangeLog     | 10 ++++++++++
+ configure.in  |  2 +-
+ src/ring.c    |  2 +-
+ src/table.c   |  9 +++++----
+ src/vtedraw.c |  2 +-
+ src/vteskel.c |  2 +-
+ 6 files changed, 19 insertions(+), 8 deletions(-)
+
+commit 541b505fd9b945f4f2838fc0ff82e3ea23783d7b
+Author: Chris Wilson 
+Date:   2007-01-29 13:21:30 +0000
+
+    Add the NULL clip func to the skeleton function table.
+    
+    2007-01-29  Chris Wilson  
+    
+            * src/vteskel.c:
+                    Add the NULL clip func to the skeleton function table.
+    
+    
+    svn path=/trunk/; revision=1567
+
+ ChangeLog     | 5 +++++
+ src/vteskel.c | 1 +
+ 2 files changed, 6 insertions(+)
+
+commit 08b8edba642cd09a8ab32ca3dec289df537374f3
+Author: Chris Wilson 
+Date:   2007-01-29 13:06:20 +0000
+
+    Update match hilite before showing the pointer as the choice of cursor
+    
+    2007-01-29  Chris Wilson  
+    
+            Update match hilite before showing the pointer as the choice of
+            cursor depends on whether the pointer is above a matched region.
+    
+            * src/vte.c: (vte_terminal_motion_notify),
+            (vte_terminal_button_press), (vte_terminal_button_release):
+    
+    
+    svn path=/trunk/; revision=1566
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 32 +++++++++++++++++---------------
+ 2 files changed, 25 insertions(+), 15 deletions(-)
+
+commit 345f7d53277d1e29f768bc8e163c148000e3f83c
+Author: Chris Wilson 
+Date:   2007-01-29 12:45:17 +0000
+
+    missed the ChangeLog entry
+    
+    svn path=/trunk/; revision=1565
+
+ ChangeLog | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit ac1b3dd29d8110aa1fa645bef4f847abfa825263
+Author: Chris Wilson 
+Date:   2007-01-29 12:38:55 +0000
+
+    Only update the matched region if we move the pointer outside of the
+    
+    2007-01-29  Chris Wilson  
+    
+            Only update the matched region if we move the pointer outside of the
+            currently matched region.
+            And only invalidate the cells underneath the matched region.
+    
+            * src/vte.c: (_vte_invalidate_region),
+            (vte_terminal_match_hilite_clear), (cursor_inside_match),
+            (vte_terminal_match_hilite), (vte_terminal_draw_rows):
+    
+    
+    svn path=/trunk/; revision=1564
+
+ ChangeLog |  8 ++++++
+ src/vte.c | 96 ++++++++++++++++++++++++++++++++++++++++++++-------------------
+ 2 files changed, 75 insertions(+), 29 deletions(-)
+
+commit 3642bbe5eee21d433e0c76b0432dd53a1c3e8e94
+Author: Chris Wilson 
+Date:   2007-01-29 11:45:00 +0000
+
+    Fix a memleak.
+    
+    2007-01-29  Chris Wilson  
+    
+            * src/table.c: (_vte_table_free):
+                    Fix a memleak.
+    
+    
+    svn path=/trunk/; revision=1563
+
+ ChangeLog   | 5 +++++
+ src/table.c | 3 +++
+ 2 files changed, 8 insertions(+)
+
+commit fb7c1e15c6ccab35857820ca95e1a6c99c2fa06e
+Author: Chris Wilson 
+Date:   2007-01-29 11:00:47 +0000
+
+    ==26147== 2,895 (352 direct, 2,543 indirect) bytes in 22 blocks are
+    
+    2007-01-29  Chris Wilson  
+    
+            ==26147== 2,895 (352 direct, 2,543 indirect) bytes in 22 blocks are definitely lost in loss record 107 of 170
+            ==26147==    at 0x4021380: malloc (vg_replace_malloc.c:149)
+            ==26147==    by 0x4E85965: g_malloc (gmem.c:131)
+            ==26147==    by 0x4E95537: g_slice_alloc (gslice.c:777)
+            ==26147==    by 0x4E7C255: g_list_prepend (glist.c:95)
+            ==26147==    by 0x428B887: vte_terminal_feed (vte.c:10991)
+            ==26147==    by 0x429DD20: vte_terminal_io_read (vte.c:3214)
+            ==26147==    by 0x4EA7A8C: g_io_unix_dispatch (giounix.c:162)
+            ==26147==    by 0x4E7E481: g_main_context_dispatch (gmain.c:2045)
+            ==26147==    by 0x4E8145E: g_main_context_iterate (gmain.c:2677)
+            ==26147==    by 0x4E81808: g_main_loop_run (gmain.c:2881)
+            ==26147==    by 0x45BA503: gtk_main (gtkmain.c:1148)
+            ==26147==    by 0x805F7A3: main (terminal.c:1773)
+    
+            * src/vte.c: (remove_from_active_list), (process_timeout),
+            (update_repeat_timeout):
+                    g_list_delete_link() is the one that actually frees the link.
+                    s/g_list_remove_link/g_list_delete_link/.
+    
+    
+    svn path=/trunk/; revision=1562
+
+ ChangeLog | 21 +++++++++++++++++++++
+ src/vte.c |  6 +++---
+ 2 files changed, 24 insertions(+), 3 deletions(-)
+
+commit ba77eff2c8b3d5ad653a1c715a9c300fc7d56957
+Author: Chris Wilson 
+Date:   2007-01-29 10:59:01 +0000
+
+    ==26147== Conditional jump or move depends on uninitialised value(s)
+    
+    2007-01-29  Chris Wilson  
+    
+            ==26147== Conditional jump or move depends on uninitialised value(s)
+            ==26147==    at 0x42AB9F7: _vte_rdb_search (vterdb.c:95)
+            ==26147==    by 0x42ABB40: _vte_rdb_quark (vterdb.c:201)
+            ==26147==    by 0x42ABB9F: _vte_rdb_get_hintstyle (vterdb.c:241)
+            ==26147==    by 0x42A7952: _vte_fc_patterns_from_pango_font_desc (vtefc.c:302)
+            ==26147==    by 0x42B4E9B: _vte_xft_set_text_font (vtexft.c:103)
+            ==26147==    by 0x42A6BE5: _vte_draw_set_text_font (vtedraw.c:258)
+            ==26147==    by 0x428C62B: vte_terminal_ensure_font (vte.c:5963)
+            ==26147==    by 0x4290295: vte_terminal_size_request (vte.c:6613)
+            ==26147==    by 0x4E25228: g_cclosure_marshal_VOID__BOXED (gmarshal.c:566)
+            ==26147==    by 0x4E17038: g_type_class_meta_marshal (gclosure.c:567)
+            ==26147==    by 0x4E188FC: g_closure_invoke (gclosure.c:490)
+            ==26147==    by 0x4E29779: signal_emit_unlocked_R (gsignal.c:2370)
+            ==26147==
+    
+            * src/vterdb.c: (_vte_rdb_get):
+                    Check the result of the get_property_string before using the
+                    returned values.
+    
+    
+    svn path=/trunk/; revision=1561
+
+ ChangeLog    | 21 +++++++++++++++++++++
+ src/vterdb.c | 12 ++++++------
+ 2 files changed, 27 insertions(+), 6 deletions(-)
+
+commit 9a0a78fa5ea84e91c5d440d701eec8780e5daa78
+Author: Chris Wilson 
+Date:   2007-01-29 09:42:55 +0000
+
+    back out the "innoculous, little" change
+    
+    svn path=/trunk/; revision=1560
+
+ src/vte.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 17a656976fbbf5be1843c54b079e46ef77be21aa
+Author: Chris Wilson 
+Date:   2007-01-29 09:29:52 +0000
+
+    Merge draw_cells() with the background clear, as generating items for many
+    
+    2007-01-29  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_draw_cells), (vte_terminal_draw_rows):
+                    Merge draw_cells() with the background clear, as generating
+                    items for many rows and then splitting again in draw cells is
+                    simply inefficient.
+    
+    
+    svn path=/trunk/; revision=1559
+
+ ChangeLog | 11 ++++++--
+ src/vte.c | 89 ++++++++++++++++-----------------------------------------------
+ 2 files changed, 31 insertions(+), 69 deletions(-)
+
+commit 464919dcb403e72ecb064b3c19e2f278264d4c5b
+Author: Chris Wilson 
+Date:   2007-01-28 22:55:18 +0000
+
+    Bug 401215 – Multi-pass renderering
+    
+    2007-01-28  Chris Wilson  
+    
+            Bug 401215 – Multi-pass renderering
+    
+            * src/vte.c: (vte_terminal_draw_cells), (vte_terminal_clear_cells),
+            (vte_terminal_draw_cells_with_attributes),
+            (vte_terminal_draw_rows), (vte_terminal_paint):
+                    Break the draw_rows() loop into two passes - first clear the
+                    background and second render the text.
+                    Add another function based on draw_cells() that just clears the
+                    background and make clearing the background optional in
+                    draw_cells() - updating callers accordingly.
+                    Adventurous souls are required to clean up draw_rows().
+    
+    
+    svn path=/trunk/; revision=1558
+
+ ChangeLog |  14 +++++
+ src/vte.c | 184 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 183 insertions(+), 15 deletions(-)
+
+commit 77bc976748412206136316800c5092d3a5e72b2e
+Author: Chris Wilson 
+Date:   2007-01-27 21:25:19 +0000
+
+    Fix compilation *with* debugging enable. Grrr.
+    
+    2007-01-27  Chris Wilson  
+    
+            Fix compilation *with* debugging enable.
+            Grrr.
+    
+            * src/keymap.c: (_vte_keysym_print):
+    
+    
+    svn path=/trunk/; revision=1557
+
+ ChangeLog    |  7 +++++++
+ src/keymap.c | 18 +++++++++---------
+ 2 files changed, 16 insertions(+), 9 deletions(-)
+
+commit b2f17a431aa9ca64f9143e97610e2ff83f9247c7
+Author: Chris Wilson 
+Date:   2007-01-27 18:33:55 +0000
+
+    Fix compilation without debugging enable.
+    
+    2007-01-27  Chris Wilson  
+    
+            Fix compilation without debugging enable.
+    
+            * src/keymap.c: (_vte_keysym_print), (_vte_keymap_map):
+            * src/vte.c: (display_control_sequence):
+            * src/vteapp.c: (main):
+    
+    
+    svn path=/trunk/; revision=1556
+
+ ChangeLog    |   8 ++++
+ src/keymap.c | 121 +++++++++++++++++++++++++++++++++++------------------------
+ src/vte.c    |   4 +-
+ src/vteapp.c |   2 -
+ 4 files changed, 82 insertions(+), 53 deletions(-)
+
+commit f17c947d6b3ce470f65d32b28349532804f8f4c5
+Author: Chris Wilson 
+Date:   2007-01-26 23:03:56 +0000
+
+    Provide a safe fallback for non-C99 compilers (well actually anything that
+    
+    2007-01-26  Chris Wilson  
+    
+            * src/debug.h:
+                    Provide a safe fallback for non-C99 compilers (well actually
+                    anything that isn't a recent gcc at the moment).
+    
+    
+    svn path=/trunk/; revision=1555
+
+ ChangeLog   |  6 ++++++
+ src/debug.h | 14 ++++++++++++++
+ 2 files changed, 20 insertions(+)
+
+commit 1814e0b3bac34f5347b38df011adeb901a249dd9
+Author: Chris Wilson 
+Date:   2007-01-26 22:49:39 +0000
+
+    Update ChangeLog to include original author.
+    
+    
+    svn path=/trunk/; revision=1554
+
+ ChangeLog | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit d6c99f12da7c00a9c52ef752df37ce6bb5c8e467
+Author: Chris Wilson 
+Date:   2007-01-26 22:42:52 +0000
+
+    Bug 157267 – _vte_terminal_fudge_pango_colors() breaks Japanese input
+    
+    2007-01-26  Chris Wilson  
+    
+            Bug 157267 – _vte_terminal_fudge_pango_colors() breaks Japanese input style
+    
+            * src/vte.c: (_vte_terminal_fudge_pango_colors):
+                    Check the attributes for each cell rather than assuming the
+                    pango attributes (and cell attributes) are the same for the
+                    whole string.
+    
+    
+    svn path=/trunk/; revision=1553
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 63 +++++++++++++++++++++++++++++++++++++++++++++------------------
+ 2 files changed, 54 insertions(+), 18 deletions(-)
+
+commit 24f2395dade2d8334e34f6e7f2252cd4d102d8b3
+Author: Chris Wilson 
+Date:   2007-01-26 21:40:45 +0000
+
+    Iterating over all queued exposures and drawing on top of the flash does
+    
+    2007-01-26  Chris Wilson  
+    
+            * src/vteseq.c: (vte_sequence_handler_vb):
+                    Iterating over all queued exposures and drawing on top of the
+                    flash does not sense. Simply flush the draw.
+    
+    
+    svn path=/trunk/; revision=1552
+
+ ChangeLog    | 6 ++++++
+ src/vteseq.c | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit 124a489f0781fb0b7eb96cf814aa3b5f68db318c
+Author: Chris Wilson 
+Date:   2007-01-26 21:24:24 +0000
+
+    s/_VTE_DEBUG_ON/_VTE_DEBUG_IF/ and don't include the code block inside the
+    
+    2007-01-26  Chris Wilson  
+    
+            s/_VTE_DEBUG_ON/_VTE_DEBUG_IF/ and don't include
+            the code block inside the macro.
+    
+            * src/debug.h:
+            * src/iso2022.c: (process_control), (_vte_iso2022_process):
+            * src/keymap.c: (_vte_keymap_map):
+            * src/matcher.c: (_vte_matcher_init):
+            * src/pty.c: (_vte_pty_run_on_pty):
+            * src/table.c: (_vte_table_addi), (_vte_table_matchi),
+            (_vte_table_extract_numbers), (_vte_table_match):
+            * src/trie.c: (_vte_trie_addx):
+            * src/vte.c: (vte_terminal_match_check_internal),
+            (vte_terminal_match_check), (vte_terminal_handle_sequence),
+            (vte_terminal_catch_child_exited), (vte_terminal_process_incoming),
+            (vte_terminal_io_write), (vte_terminal_send),
+            (vte_terminal_key_press), (vte_terminal_copy_cb),
+            (vte_terminal_set_font_full), (vte_terminal_realize),
+            (vte_terminal_paint), (vte_terminal_scroll):
+            * src/vteapp.c: (main):
+            * src/vtebg.c: (vte_bg_root_pixmap):
+    
+    
+    svn path=/trunk/; revision=1551
+
+ ChangeLog     |  23 ++++++++
+ src/debug.h   |   8 ++-
+ src/iso2022.c |   8 +--
+ src/keymap.c  |   8 +--
+ src/matcher.c |   4 +-
+ src/pty.c     |   4 +-
+ src/table.c   | 167 +++++++++++++++++++++++++++++++++-------------------------
+ src/trie.c    |   4 +-
+ src/vte.c     |  96 ++++++++++++++++-----------------
+ src/vteapp.c  |   4 +-
+ src/vtebg.c   |   8 +--
+ 11 files changed, 189 insertions(+), 145 deletions(-)
+
+commit f3d61703c42e8f98f9011fbaa40f3d149a0cc1d4
+Author: Chris Wilson 
+Date:   2007-01-26 21:08:55 +0000
+
+    Bug 400834 – Use a global display/process timeout
+    
+    2007-01-26  Chris Wilson  
+    
+            Bug 400834 – Use a global display/process timeout
+    
+            Currently each terminal uses it own display timeout. Given that
+            typical usage is several active terminals, there is an immediate
+            advantage (context switches, fairness, smoothness) to using a single
+            common timeout.
+    
+            * src/debug.c: (_vte_debug_parse_string):
+            * src/debug.h:
+                    Add VTE_DEBUG_TIMEOUT
+            * src/vte-private.h:
+            * src/vte.c: (update_regions), (_vte_invalidate_cells),
+            (_vte_invalidate_all), (vte_terminal_init),
+            (vte_terminal_class_init), (add_update_timeout),
+            (remove_from_active_list), (remove_update_timeout),
+            (add_process_timeout), (vte_terminal_stop_processing),
+            (vte_terminal_is_processing), (process_timeout),
+            (update_repeat_timeout), (update_timeout):
+                    Modify to use a global timeout rather than individual
+                    private timeouts.
+    
+    
+    svn path=/trunk/; revision=1550
+
+ ChangeLog         |  23 +++++
+ src/debug.c       |   3 +
+ src/debug.h       |   3 +-
+ src/vte-private.h |   5 +-
+ src/vte.c         | 254 +++++++++++++++++++++++++++++++++++++++---------------
+ 5 files changed, 213 insertions(+), 75 deletions(-)
+
+commit c88af9417d2414bc843058585592c71632e57a2e
+Author: Chris Wilson 
+Date:   2007-01-26 21:04:19 +0000
+
+    Unable to set background scrolling mode from cmdline due to variable name
+    
+    2007-01-26  Chris Wilson  
+    
+            Unable to set background scrolling mode from cmdline due to variable
+            name confusion.
+    
+            * src/vteapp.c: (main):
+                    --scroll should set scroll=TRUE rather than cursor=TRUE!
+    
+    
+    svn path=/trunk/; revision=1549
+
+ ChangeLog    | 8 ++++++++
+ src/vteapp.c | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit ff948c92ee3406bd63c9e44072faa76b1daff216
+Author: Chris Wilson 
+Date:   2007-01-26 20:57:15 +0000
+
+    Bug 401082 – double-draw issue
+    
+    2007-01-26  Chris Wilson  
+    
+            Bug 401082 – double-draw issue
+    
+            The main cause of this bug was not expanding the cleared area to cover
+            all the cells affected by the draw and forgetting to offset the clear
+            by VTE_PAD_WIDTH.
+    
+            To counter the performance hit due to the expanded repaint area, each
+            backend is presented with the opportunity to apply a clip to the
+            exposed region before painting.
+    
+            This also fixes bug 333157,
+    
+            * src/vte.c: (_vte_invalidate_cells), (vte_terminal_paint_area),
+            (vte_terminal_paint):
+            * src/vtedraw.c: (_vte_draw_clip):
+            * src/vtedraw.h:
+            * src/vteft2.c: (_vte_ft2_end), (_vte_ft2_clip):
+            * src/vtegl.c:
+            * src/vtepango.c: (_vte_pango_clip):
+            * src/vtepangox.c: (_vte_pango_x_clip):
+            * src/vtexft.c: (_vte_xft_clip), (_vte_xft_draw_text):
+    
+    
+    svn path=/trunk/; revision=1548
+
+ ChangeLog       | 24 ++++++++++++++++++++++++
+ src/vte.c       | 57 +++++++++++++++++++++++++++++++++------------------------
+ src/vtedraw.c   | 11 +++++++++++
+ src/vtedraw.h   |  2 ++
+ src/vteft2.c    | 10 ++++++++++
+ src/vtegl.c     |  1 +
+ src/vtepango.c  |  8 ++++++++
+ src/vtepangox.c |  8 ++++++++
+ src/vtexft.c    | 28 +++++++++++++++++++++++++++-
+ 9 files changed, 124 insertions(+), 25 deletions(-)
+
+commit a4607597bfee73da5bdb18e0c658e85ae2b6b350
+Author: Chris Wilson 
+Date:   2007-01-26 18:33:45 +0000
+
+    Tighten the _vte_invalidate_cells() to only those that we potentially
+    
+    2007-01-26  Chris Wilson  
+    
+            * src/vte.c: (vte_terminal_match_hilite):
+            * src/vteseq.c: (vte_sequence_handler_ce),
+            (vte_sequence_handler_dc), (vte_sequence_handler_ec):
+                    Tighten the _vte_invalidate_cells() to only those that
+                    we potentially modify.
+    
+    
+    svn path=/trunk/; revision=1547
+
+ ChangeLog    |  8 ++++++++
+ src/vte.c    | 23 +++++++++++++++++------
+ src/vteseq.c | 10 +++++++---
+ 3 files changed, 32 insertions(+), 9 deletions(-)
+
+commit 189d1f5b28f5a25021ae252b74e1747beff1e3e0
+Author: Chris Wilson 
+Date:   2007-01-26 17:52:10 +0000
+
+    Remove the surplus new line.
+    
+    svn path=/trunk/; revision=1546
+
+ ChangeLog | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit feaaa1dd7640940ca4ebbc76b8dc4c1d281cba72
+Author: Chris Wilson 
+Date:   2007-01-26 17:35:41 +0000
+
+    Remove the additional pixel inter-character spacing. Compactness over
+    
+    2007-01-26  Chris Wilson  
+    
+            * src/vtexft.c: (_vte_xft_set_text_font):
+                    Remove the additional pixel inter-character spacing.
+                    Compactness over clarity ;)
+    
+    
+    svn path=/trunk/; revision=1545
+
+ ChangeLog    | 7 +++++++
+ src/vtexft.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 764f40ae65b2a07403a602f946f23fb0e1214877
+Author: Chris Wilson 
+Date:   2007-01-26 17:13:20 +0000
+
+    Apply a one pixel fudge to the Xft character position and width. This
+    
+    2007-01-26  Chris Wilson  
+    
+            Apply a one pixel fudge to the Xft character position and width.
+            This greatly improves text appearance and hides the misrendering of
+            pseudo-bold characters.
+            cf bugs 317691, 333157.
+    
+            * src/vte.c: (vte_terminal_paint):
+                    Increase the cursor size to fit around the cell.
+            * src/vtexft.c: (_vte_xft_set_text_font), (_vte_xft_draw_text):
+                    Fudge the Xft font positioning.
+    
+    
+    svn path=/trunk/; revision=1544
+
+ ChangeLog    | 12 ++++++++++++
+ src/vte.c    | 15 ++++++++-------
+ src/vtexft.c |  6 ++++--
+ 3 files changed, 24 insertions(+), 9 deletions(-)
+
+commit 03cd2e083db58be53a8c9a4c3236e56865ece236
+Author: Chris Wilson 
+Date:   2007-01-26 16:18:07 +0000
+
+    Bug 318307 – Cursor colour changes to foreground when unfocused
+    
+    2007-01-26  Chris Wilson 
+    
+            Bug 318307 – Cursor colour changes to foreground when unfocused
+    
+            Whilst setting the colour, tweak the position of the rectangle, and
+            extended the invalidate region to account for the OBO nature of bold
+            font.
+    
+            * src/vte.c: (_vte_invalidate_cells):
+                    Include the padding to accomodate cell effects.
+            * src/vte.c: (vte_terminal_paint):
+                    Use the cursor color for the rectangle when unfocused.
+    
+    
+    svn path=/trunk/; revision=1543
+
+ ChangeLog | 13 +++++++++++
+ src/vte.c | 74 +++++++++++++++++++++++++--------------------------------------
+ 2 files changed, 42 insertions(+), 45 deletions(-)
+
+commit e2c6f62d11bf42f18128272b95202477795338e0
+Author: Behdad Esfahbod 
+Date:   2007-01-26 16:04:38 +0000
+
+    Correctly handle visibility events: set invalidated_all to FALSE, and
+    
+    2007-01-26  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_visibility_notify): Correctly handle
+            visibility events: set invalidated_all to FALSE, and invalidate_all
+            if fully unobscured.
+    
+    
+    svn path=/trunk/; revision=1542
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 16 ++++++++++------
+ 2 files changed, 16 insertions(+), 6 deletions(-)
+
+commit 841db8a764cb8da8f6ce1e9d53286a61ca742669
+Author: Behdad Esfahbod 
+Date:   2007-01-26 15:58:58 +0000
+
+    Make sure we redraw after becoming unobscured. There still is a bug that
+    
+    2007-01-26  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_visibility_notify): Make sure we redraw
+            after becoming unobscured.  There still is a bug that I've not found,
+            but after obscuring the widget and coming back, a first redraw
+            happens, but no update after that.
+    
+    
+    svn path=/trunk/; revision=1541
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 6 +++++-
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+commit 52efe629728970467f7b3fc21af03533775e42e3
+Author: Chris Wilson 
+Date:   2007-01-26 15:01:09 +0000
+
+    Occasionally we generate an exposed area which is computed as 0x0 cells.
+    
+    2007-01-26  Chris Wilson 
+    
+            * src/vte.c: (vte_terminal_draw_area):
+                    Occasionally we generate an exposed area which is computed
+                    as 0x0 cells. Discard early, before we spend an infinity
+                    drawing nothing.
+    
+    
+    svn path=/trunk/; revision=1540
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 6 ++++++
+ 2 files changed, 13 insertions(+)
+
+commit d2dc82343a348aa22402c03b2a1677b6b73f7d5f
+Author: Chris Wilson 
+Date:   2007-01-26 14:30:30 +0000
+
+    Janitorial work - near elimination of #ifdef VTE_DEBUG from within
+    
+    2007-01-26  Chris Wilson 
+    
+            Janitorial work - near elimination of #ifdef VTE_DEBUG from within
+            functions, trimming over a thousand lines of code.
+    
+            We introduce a _vte_debug_print macro to cover the more common
+            occurrence of printing a message at a certain debug level.
+            And a _VTE_DEBUG_ON for a conditional code block.
+    
+            src/debug.h     |   11
+            src/iso2022.c   |  201 ++-------
+            src/keymap.c    |   41 -
+            src/matcher.c   |   24 -
+            src/pty.c       |  134 +-----
+            src/reaper.c    |   21
+            src/ring.c      |   78 +--
+            src/table.c     |   11
+            src/trie.c      |   19
+            src/vte.c       | 1187 ++++++++++---------------------------------------
+            src/vteaccess.c |  198 +++------
+            src/vteapp.c    |   21
+            src/vtebg.c     |   43 --
+            src/vteconv.c   |   60 +-
+            src/vteconv.h   |   12
+            src/vtedraw.c   |    6
+            src/vtefc.c     |    4
+            src/vteft2.c    |    5
+            src/vteglyph.c  |   27 -
+            src/vtepango.c  |   11
+            src/vtepangox.c |    7
+            src/vteregex.c  |    2
+            src/vteseq.c    |  385 +++++-------------
+            src/vtexft.c    |   26 -
+            24 files changed, 789 insertions(+), 1745 deletions(-)
+    
+    
+    svn path=/trunk/; revision=1539
+
+ ChangeLog       |  168 ++++++++
+ src/debug.h     |   11 +
+ src/iso2022.c   |  201 +++-------
+ src/keymap.c    |   41 +-
+ src/matcher.c   |   24 +-
+ src/pty.c       |  134 ++-----
+ src/reaper.c    |   21 +-
+ src/ring.c      |   78 ++--
+ src/table.c     |   11 +-
+ src/trie.c      |   19 +-
+ src/vte.c       | 1187 ++++++++++++++++---------------------------------------
+ src/vteaccess.c |  198 ++++------
+ src/vteapp.c    |   21 +-
+ src/vtebg.c     |   43 +-
+ src/vteconv.c   |   60 +--
+ src/vteconv.h   |   12 +-
+ src/vtedraw.c   |    6 +-
+ src/vtefc.c     |    4 +-
+ src/vteft2.c    |    5 +-
+ src/vteglyph.c  |   27 +-
+ src/vtepango.c  |   11 +-
+ src/vtepangox.c |    7 +-
+ src/vteregex.c  |    2 +-
+ src/vteseq.c    |  385 ++++++------------
+ src/vtexft.c    |   26 +-
+ 25 files changed, 957 insertions(+), 1745 deletions(-)
+
+commit b01b8d2fe3e37a6d6f333c27a8890dfb49295a69
+Author: Chris Wilson 
+Date:   2007-01-26 09:51:35 +0000
+
+    ChangeLog: s/with/without/
+    
+    svn path=/trunk/; revision=1538
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 604573e2f487ec6bbe423b5c73bb2b6dde08375c
+Author: Chris Wilson 
+Date:   2007-01-26 09:50:23 +0000
+
+    Bug 317449 – The cursor disappears when clicking on windows above
+    
+    2007-01-26  Chris Wilson 
+    
+            Bug 317449 – The cursor disappears when clicking on windows above gnome-terminal
+    
+            Enter a command that causes partial obscuration of the terminal,
+            though it must cover the cursor. Close the new window, observe the
+            pointer disappears.
+    
+            The issue is that we hide the pointer whilst typing and show it after
+            receiving a mouse movement. However in this case we steal the pointer
+            away from the terminal with any mouse events and the cursor remains
+            invisible.
+    
+            * src/vte.c: (vte_terminal_focus_in):
+                    Ensure the mouse pointer is visible on focus-in.
+    
+    
+    svn path=/trunk/; revision=1537
+
+ ChangeLog | 16 ++++++++++++++++
+ src/vte.c |  1 +
+ 2 files changed, 17 insertions(+)
+
+commit 279999ff11683b4d00733df4ddbccc4c5d2ae5f9
+Author: Chris Wilson 
+Date:   2007-01-26 01:45:13 +0000
+
+    Spend half an hour a day killing warnings...
+    
+    2007-01-26  Chris Wilson 
+    
+            Spend half an hour a day killing warnings...
+    
+            * configure.in:
+                    Remove -Wswitch-enum from MAYBE_WARN. I am that lazy.
+            * src/buffer.c:
+            * src/iso2022.c: (_vte_iso2022_is_ambiguous),
+            (_vte_iso2022_ambiguous_width), (_vte_iso2022_map_get),
+            (_vte_iso2022_find_nextctl), (_vte_iso2022_sequence_length),
+            (_vte_iso2022_fragment_input), (process_8_bit_sequence),
+            (process_cdata), (_vte_iso2022_process_single), (process_control),
+            (_vte_iso2022_process):
+            * src/keymap.c: (_vte_keymap_map):
+            * src/table.c:
+            * src/trie.c: (char_class_none_extract),
+            (char_class_digit_extract), (char_class_multi_extract),
+            (char_class_any_extract), (unichar_snlen), (unichar_sncmp),
+            (char_class_string_extract), (_vte_trie_addx), (_vte_trie_add),
+            (_vte_trie_matchx), (_vte_trie_match), (_vte_trie_printx),
+            (_vte_trie_print), (convert_mbstowcs), (main):
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_find_charcell),
+            (_vte_row_data_find_charcell), (vte_terminal_emit_commit),
+            (vte_terminal_match_clear_all), (vte_terminal_match_remove),
+            (vte_terminal_match_add), (vte_terminal_match_set_cursor),
+            (vte_terminal_match_check_internal), (vte_terminal_set_colors),
+            (vte_terminal_emit_pending_text_signals),
+            (vte_terminal_is_word_char), (vte_terminal_finalize),
+            (vte_terminal_realize), (_vte_terminal_map_pango_color),
+            (_vte_terminal_apply_pango_attr),
+            (_vte_terminal_translate_pango_cells),
+            (vte_terminal_set_scrollback_lines):
+            * src/vteseq.c: (vte_sequence_handler_decset_internal):
+                    Fixup compiler warnings, mostly of the type mixing signed and
+                    unsigned compares and pointers.
+    
+    
+    svn path=/trunk/; revision=1536
+
+ ChangeLog         | 37 +++++++++++++++++++++++++++++
+ configure.in      |  6 +++--
+ src/buffer.c      |  4 ++++
+ src/iso2022.c     | 69 +++++++++++++++++++++++++++----------------------------
+ src/keymap.c      |  2 +-
+ src/table.c       |  2 +-
+ src/trie.c        | 67 ++++++++++++++++++++++++++---------------------------
+ src/vte-private.h |  6 ++---
+ src/vte.c         | 47 ++++++++++++++++++-------------------
+ src/vteseq.c      |  2 +-
+ 10 files changed, 142 insertions(+), 100 deletions(-)
+
+commit ae4d016994e2c7301c75baed821d8ec5f2a1ffc4
+Author: Chris Wilson 
+Date:   2007-01-25 23:56:42 +0000
+
+    Use the GDestroyNotify to mark the source as invalid. Protect ensure fonts
+    
+    2007-01-25  Chris Wilson 
+    
+            * src/vte.c: (mark_input_source_invalid),
+            (_vte_terminal_connect_pty_read), (mark_output_source_invalid),
+            (_vte_terminal_connect_pty_write):
+                    Use the GDestroyNotify to mark the source as invalid.
+            * src/vte.c: (vte_terminal_ensure_font):
+                    Protect ensure fonts against the VteDraw being destroyed.
+            * src/vte.c: (vte_terminal_realize):
+                    Reorder code to setup the style before the fonts.
+            * src/vte.c: (vte_terminal_class_init):
+                    The ->show() handler was redundant.
+    
+    
+    svn path=/trunk/; revision=1535
+
+ ChangeLog | 13 +++++++++++++
+ src/vte.c | 59 +++++++++++++++++++++--------------------------------------
+ 2 files changed, 34 insertions(+), 38 deletions(-)
+
+commit 9cb1f1bfb3b7378d0c22ee0e924c1c3186f2b17b
+Author: Behdad Esfahbod 
+Date:   2007-01-25 21:44:35 +0000
+
+    Replace most of checks for terminal->pvt->visibility_state ==
+    
+    2007-01-25  Behdad Esfahbod  
+    
+            * src/vte.c (_vte_terminal_set_default_attributes),
+            (_vte_invalidate_cells), (_vte_invalidate_all),
+            (_vte_invalidate_cell), (_vte_invalidate_cursor_once),
+            (vte_terminal_visibility_notify), (vte_terminal_handle_scroll):
+            Replace most of checks for terminal->pvt->visibility_state ==
+            GDK_VISIBILITY_FULLY_OBSCURED by terminal->pvt->invalidated_all, and
+            adapt.
+    
+    
+    svn path=/trunk/; revision=1534
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 34 +++++++++++-----------------------
+ 2 files changed, 21 insertions(+), 23 deletions(-)
+
+commit ff52397ee2888dd6f3ccab0187a6cc38c9fd47f9
+Author: Chris Wilson 
+Date:   2007-01-25 21:26:21 +0000
+
+    Bug 400759 – update problem with vte trunk
+    
+    2007-01-25  Chris Wilson 
+    
+            Bug 400759 – update problem with vte trunk
+    
+            Otherwise known as the I can't count bug.
+    
+            The number of rows and columns to paint were not properly taking
+            account of the discrete nature of the cells ie although the floor(x)
+            moved the start to the left by one, the extra cell was not being added
+            to the width.
+    
+            Also since the howmany() macro is pulled from , it can
+            not be guarranteed to exist on all platforms. So in that case, provide
+            a local copy.
+    
+            * src/vte.c: (vte_terminal_draw_area):
+                    Calculate the width as the distance between the explicity
+                    calculated start and end cells.
+    
+    
+    svn path=/trunk/; revision=1533
+
+ ChangeLog | 19 +++++++++++++++++++
+ src/vte.c | 20 ++++++++++++--------
+ 2 files changed, 31 insertions(+), 8 deletions(-)
+
+commit d075b7525832da68e607a04ec0c9ebe2a7968476
+Author: Chris Wilson 
+Date:   2007-01-25 17:42:44 +0000
+
+    Bug 400671 – crash in Terminal: detaching of tabs
+    
+    2007-01-25  Chris Wilson 
+    
+            Bug 400671 – crash in Terminal: detaching of tabs
+    
+            The fontdirty flag needed to be set on unrealize to ensure the fonts
+            get set on the VteDraw should the terminal be realized again (e.g
+            drag'n'dropping).
+    
+            * src/vte.c: (vte_terminal_unrealize):
+                    Set the fontdirty flag to TRUE.
+            * src/vtexft.c: (_vte_xft_set_text_font),
+            (_vte_xft_get_char_width), (_vte_xft_draw_text),
+            (_vte_xft_draw_char):
+                    Add safe guards to avoid dereferencing a NULL font as it
+                    is possible for _vte_xft_font_open() to fail.
+    
+    
+    svn path=/trunk/; revision=1532
+
+ ChangeLog    | 16 ++++++++++++++++
+ src/vte.c    |  2 +-
+ src/vtexft.c | 22 +++++++++++++++++-----
+ 3 files changed, 34 insertions(+), 6 deletions(-)
+
+commit 657bd399d53d6082520201200e90b033dc4aa33c
+Author: Chris Wilson 
+Date:   2007-01-25 16:53:10 +0000
+
+    Modify the language in the last entry to try and avoid confusion between UTF-8 lookups and a simple ASCII lookup.
+    
+    
+    svn path=/trunk/; revision=1531
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 58c407e2c9b988fe92915b56b8c28549f55dd155
+Author: Chris Wilson 
+Date:   2007-01-25 16:49:45 +0000
+
+    Bug 399137 – UTF-8 problem in VteAccess
+    
+    2007-01-25  Chris Wilson 
+    
+            Bug 399137 – UTF-8 problem in VteAccess
+    
+            Improve the UTF-8 string handling within vteaccess.c
+            A long and fraught history to this apparently simple change.
+            Many thanks to Joanmarie Diggs and Rich Burridge for testing the
+            patches and ensuring they caused no regressions in the ally interface.
+    
+            * src/vteaccess.c: (emit_text_changed_insert),
+            (emit_text_changed_delete):
+                    Use g_utf8_pointer_to_offset() rather than open coding.
+            * src/vteaccess.c: (vte_terminal_accessible_text_modified):
+                    Convert the caret into a byte offset before performing the
+                    string lookup.
+                    Iterate backwards over the string using a g_utf8_prev_char,
+                    and g_utf8_get_char.
+    
+    
+    svn path=/trunk/; revision=1530
+
+ ChangeLog       | 18 +++++++++++++++
+ src/vteaccess.c | 70 +++++++++++++++++++++++++--------------------------------
+ 2 files changed, 48 insertions(+), 40 deletions(-)
+
+commit 0acb0e006749729904133ed113788c46773545ec
+Author: Chris Wilson 
+Date:   2007-01-25 16:30:45 +0000
+
+    Bug 400493 – Mouse selection seriously broken
+    
+    2007-01-25  Chris Wilson 
+    
+            Bug 400493 – Mouse selection seriously broken
+    
+            The rendering of non-text attributes, e.g highlight, backgrounds,
+            underlines, was broken by the change to multi-row run of glyphs. This
+            was most apparent when selecting regions with a mouse.
+    
+            * src/vte.c: (_vte_invalidate_cursor_once),
+            (vte_terminal_extend_selection),
+            (vte_terminal_draw_rows), (vte_terminal_draw_area),
+            (vte_terminal_paint):
+                    Some janitorial work (a memleak, whitespace, improving debug
+                    messages, comments).
+            * src/vte.c: (vte_terminal_draw_cells):
+                    Loop over cells and draw attributes for groups of cells on
+                    each row.
+    
+    
+    svn path=/trunk/; revision=1529
+
+ ChangeLog |  18 +++++
+ src/vte.c | 269 ++++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 157 insertions(+), 130 deletions(-)
+
+commit 2c0c41904eff8b91b7221738f29106a5a5b6fb75
+Author: Chris Wilson 
+Date:   2007-01-25 09:36:07 +0000
+
+    Bug 400438 – _vte_invalidate_all triggered on GDK_VISIBILITY_UNOBSCURED
+    
+    2007-01-25  Chris Wilson 
+    
+            Bug 400438 – _vte_invalidate_all triggered on GDK_VISIBILITY_UNOBSCURED
+    
+            * src/vte.c: (vte_terminal_visibility_notify):
+                    Only force an _vte_invalidate_all if we can trivially detect
+                    that we have switch from fully obscured to fully unobscured.
+                    Otherwise, we will just handle the GDK expose in the normal
+                    manner.
+            * src/vte.c: (vte_terminal_expose):
+                    Check the event area to see if we can use _vte_invalidate_all,
+                    has a slight benefit of discarding further exposed area
+                    processing.
+    
+    
+    svn path=/trunk/; revision=1528
+
+ ChangeLog | 15 +++++++++++++++
+ src/vte.c | 23 +++++++++++++++++------
+ 2 files changed, 32 insertions(+), 6 deletions(-)
+
+commit 62982b274e08900461b78632feebdbadb576c2c3
+Author: Chris Wilson 
+Date:   2007-01-25 09:31:27 +0000
+
+    Rewrite last pair of ChangeLog entries to better explain what was found and what was fixed.
+    
+    
+    svn path=/trunk/; revision=1527
+
+ ChangeLog | 19 +++++++++++++++----
+ 1 file changed, 15 insertions(+), 4 deletions(-)
+
+commit 8cfa0558104d50b00f6e9a49f2833b0d4329f2f4
+Author: Chris Wilson 
+Date:   2007-01-25 00:40:11 +0000
+
+    Notice how effective GDK's expose event coalescing is...
+    
+    2007-01-25  Chris Wilson 
+    
+            Notice how effective GDK's expose event coalescing is...
+    
+                    * src/vte.c: (vte_terminal_draw_area), (vte_terminal_paint),
+                            (vte_terminal_expose):
+                                                    Paint the exposed rects not the clipbox!
+    
+    
+    svn path=/trunk/; revision=1526
+
+ ChangeLog |  15 +++++++++
+ src/vte.c | 113 +++++++++++++++++++++++++++++++++++++++++++-------------------
+ 2 files changed, 93 insertions(+), 35 deletions(-)
+
+commit 91690b2a952db2580e0227558400718efefa1d59
+Author: Chris Wilson 
+Date:   2007-01-24 23:13:31 +0000
+
+    Improve morale, spell moral correctly.
+    
+    svn path=/trunk/; revision=1525
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c8467b55192a519ad2bc21f55395415de37646ab
+Author: Chris Wilson 
+Date:   2007-01-24 23:10:36 +0000
+
+    cf Bug 400072 – Handling of ; in control sequences
+    
+    2007-01-24  Chris Wilson 
+    
+            cf Bug 400072 – Handling of ; in control sequences
+    
+            Morale of the story: wait until the morning.
+            Revert r1512, the mistaken attempt at parsing '\e[;30m'.
+    
+            * src/table.c: (_vte_table_addi), (_vte_table_matchi),
+            (_vte_table_match):
+    
+    
+    svn path=/trunk/; revision=1524
+
+ ChangeLog   | 10 ++++++++++
+ src/table.c | 42 +++++++++++++++++-------------------------
+ 2 files changed, 27 insertions(+), 25 deletions(-)
+
+commit ebfcfa21bfdfee57a3215f18de4a623ec1176ce3
+Author: Chris Wilson 
+Date:   2007-01-24 23:03:14 +0000
+
+    cf Bug 399617 – Avoid memory allocations during an expose event.
+    
+    2007-01-24  Chris Wilson 
+    
+            cf Bug 399617 – Avoid memory allocations during an expose event.
+    
+            Currently we cannot generate long glyph runs due to the text
+            painting being broken up into single rows and setting a low
+            max run cap. The benefit of longer runs is the backends can
+            do more caching within a run and potentially generate fewer
+            render calls and/or less network traffic.
+    
+            In the simple test case, this increased the performance of a
+            remote hexdump by 10%.
+    
+            * src/vte.c: (vte_terminal_draw_rows), (vte_terminal_paint):
+                    Scan entired exposed area for glyph runs.
+            * src/vtedraw.h:
+                    Increase VTE_DRAW_MAX_LENGTH
+            * src/vtexft.c: (_vte_xft_draw_text):
+                    Create GlyphSpecs rather than CharFontSpecs, saves a
+                    conversion and potential malloc inside libXft, and our
+                    own malloc.
+    
+    
+    svn path=/trunk/; revision=1523
+
+ ChangeLog     |  22 ++++
+ src/vte.c     | 327 +++++++++++++++++++++++++++++++---------------------------
+ src/vtedraw.h |   4 +-
+ src/vtexft.c  | 152 ++++++++++++++-------------
+ 4 files changed, 279 insertions(+), 226 deletions(-)
+
+commit 1b887a2a0e7f59e95baa3531d6bb3b5a5a281dba
+Author: Chris Wilson 
+Date:   2007-01-24 22:41:15 +0000
+
+    Bug 147495 – screen flicker when opening new terminal windows
+    
+    2007-01-24  Chris Wilson 
+    
+            Bug 147495 – screen flicker when opening new terminal windows
+    
+            Last in a series of work to reduce extraneous redraws. I no longer
+            see the flicker when opening a white terminal.
+    
+            * src/vte.c: (_vte_terminal_scroll_region):
+                    Detect when we can just invalidate all.
+            * src/vte.c: (_vte_terminal_fork_basic):
+                    Don't force an unnecessary redraw.
+    
+    
+    svn path=/trunk/; revision=1522
+
+ ChangeLog | 12 ++++++++++++
+ src/vte.c |  5 ++---
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+commit daa0e11f90bad38e2519a6ff52222912f993ba2b
+Author: Chris Wilson 
+Date:   2007-01-24 22:31:54 +0000
+
+    Add a missing '\n' to the debug printerr. Initialize the row count to
+    
+    2007-01-24  Chris Wilson 
+    
+            * src/vte.c: (vte_terminal_set_emulation):
+                    Add a missing '\n' to the debug printerr.
+            * src/vte.c: (vte_terminal_init):
+                    Initialize the row count to VTE_MIN_SCROLLBACK (was to 0
+                    first and then later within the same function to
+                    VTE_MIN_SCROLLBACK).
+    
+    
+    svn path=/trunk/; revision=1521
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 16 +++++++---------
+ 2 files changed, 16 insertions(+), 9 deletions(-)
+
+commit 6141a3fa97864e1dc8fb826d50f331cbe541a7a5
+Author: Chris Wilson 
+Date:   2007-01-24 22:17:47 +0000
+
+    Bug 334755 – Incomplete information from vte_terminal_get_font
+    
+    2007-01-24  Chris Wilson 
+    
+            Bug 334755 – Incomplete information from vte_terminal_get_font
+    
+            In many situations the font_desc stored in the terminal is incomplete.
+            _vte_fc_transcribe_from_pango_font_description() automagically fills
+            in default values for the backends but this is hidden from the
+            application. By filling in default values up front from the widget
+            font description control is returned to the application and theme
+            designers.
+    
+            Patch by Pedro de Medeiros.
+            Also cf bug 335269.
+    
+            * src/vte.c: (vte_terminal_set_font_full):
+                    Pull default font description from widget.
+            * src/vtefc.c: (_vte_fc_transcribe_from_pango_font_description):
+                    Remove default values.
+    
+    
+    svn path=/trunk/; revision=1520
+
+ ChangeLog   | 19 +++++++++++++++++++
+ src/vte.c   | 14 +++++++-------
+ src/vtefc.c | 41 ++++++++++++-----------------------------
+ 3 files changed, 38 insertions(+), 36 deletions(-)
+
+commit 7ab6e418f588659d11ff739a2b2805fabe5be4fc
+Author: Chris Wilson 
+Date:   2007-01-24 20:37:19 +0000
+
+    Bug 400184 – _vte_pty_open declaration mismatch - breaks on Solaris
+    
+    2007-01-24  Chris Wilson 
+    
+            Bug 400184 – _vte_pty_open declaration mismatch - breaks on Solaris
+            actually revealed a faux-pas in the conversion of the public
+            interfaces to GPid - that it broke the ABI.
+    
+            However, the intention is to remove the exposed pid_t, cf bug 400333.
+    
+            * python/vte.defs:
+            * python/vte.override:
+            * src/pty.c: (_vte_pty_open):
+            * src/pty.h:
+            * src/vte.c: (_vte_terminal_fork_basic), (vte_terminal_forkpty):
+            * src/vte.h:
+                    Revert the exposed GPids back to pid_t.
+    
+    
+    svn path=/trunk/; revision=1519
+
+ ChangeLog           | 16 ++++++++++++++++
+ python/vte.defs     |  4 ++--
+ python/vte.override |  4 ++--
+ src/pty.c           | 15 ++++++++++-----
+ src/pty.h           |  3 +--
+ src/vte.c           | 14 +++++---------
+ src/vte.h           |  6 ++++--
+ 7 files changed, 40 insertions(+), 22 deletions(-)
+
+commit 7d898d6f6055c2c8a18b407eb50e7652b3a52b9f
+Author: Chris Wilson 
+Date:   2007-01-24 16:30:02 +0000
+
+    ==25123== Invalid read of size 1 ==25123== at 0x4055992:
+    
+    2007-01-24  Chris Wilson 
+    
+            ==25123== Invalid read of size 1
+            ==25123==    at 0x4055992: vte_terminal_accessible_text_modified (vteaccess.c:497)
+            ==25123==    by 0x46A1248: g_cclosure_marshal_VOID__VOID (gmarshal.c:77)
+            ==25123==    by 0x4693EAA: g_closure_invoke (gclosure.c:490)
+            ==25123==    by 0x46A4972: signal_emit_unlocked_R (gsignal.c:2440)
+            ==25123==    by 0x46A5E96: g_signal_emit_valist (gsignal.c:2199)
+            ==25123==    by 0x46A85ED: g_signal_emit_by_name (gsignal.c:2267)
+            ==25123==    by 0x403E9E2: _vte_terminal_emit_text_inserted (vte.c:863)
+            ==25123==    by 0x40517EF: vte_terminal_process_incoming (vte.c:3032)
+            ==25123==    by 0x40522B5: update_repeat_timeout (vte.c:11332)
+    
+            * src/vteaccess.c: (vte_terminal_accessible_text_modified):
+                    Check that the caret is inside the old string before
+                    accessing.
+    
+    
+    svn path=/trunk/; revision=1518
+
+ ChangeLog       | 17 +++++++++++++++++
+ src/vteaccess.c | 12 +++++++-----
+ 2 files changed, 24 insertions(+), 5 deletions(-)
+
+commit 8d735a2d00e3b50860dd23fbe0e63e4ea0772b74
+Author: Chris Wilson 
+Date:   2007-01-24 16:23:42 +0000
+
+    Revert changes in conjunction with bug 399137 back to r1487, which
+    
+    2007-01-24  Chris Wilson 
+    
+            Revert changes in conjunction with bug 399137 back to r1487,
+            which contains Rich Burridge's fix for bug 397724.
+    
+            * src/vteaccess.c: (emit_text_changed_insert),
+            (emit_text_changed_delete),
+            (vte_terminal_accessible_text_modified):
+    
+    
+    svn path=/trunk/; revision=1517
+
+ ChangeLog       |  9 +++++++
+ src/vteaccess.c | 73 ++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 47 insertions(+), 35 deletions(-)
+
+commit a8d1c20f2b3b5d92d2fb50f3e35a28b11c8660ed
+Author: Chris Wilson 
+Date:   2007-01-24 15:58:00 +0000
+
+    Valgrind pointed out a couple of places where we tried to access before
+    
+    2007-01-24  Chris Wilson 
+    
+            * src/vteaccess.c: (vte_terminal_accessible_text_modified):
+                    Valgrind pointed out a couple of places where we tried to
+                    access before the start of the string.
+    
+    
+    svn path=/trunk/; revision=1516
+
+ ChangeLog       |  6 ++++++
+ src/vteaccess.c | 36 ++++++++++++++++++++----------------
+ 2 files changed, 26 insertions(+), 16 deletions(-)
+
+commit 1fcb3ef370accd3b59eeae5538cf05244dd215f1
+Author: Chris Wilson 
+Date:   2007-01-24 15:56:22 +0000
+
+    Revert the last accidental overcommit.
+    
+    svn path=/trunk/; revision=1515
+
+ ChangeLog       |   6 -
+ src/table.c     | 139 +++++++++++------------
+ src/vte.c       | 345 ++++++++++++++++++++++++++------------------------------
+ src/vteaccess.c |  36 +++---
+ src/vteapp.c    |   4 -
+ src/vtedraw.h   |   4 +-
+ src/vtefc.c     |  41 +++++--
+ src/vtexft.c    | 156 ++++++++++++-------------
+ 8 files changed, 345 insertions(+), 386 deletions(-)
+
+commit 81ce92cb007827246122117c7dcb4a38ba78bd87
+Author: Chris Wilson 
+Date:   2007-01-24 15:51:40 +0000
+
+    Valgrind pointed out a couple of places where we tried to access before
+    
+    2007-01-24  Chris Wilson 
+    
+            * src/vteaccess.c: (vte_terminal_accessible_text_modified):
+                    Valgrind pointed out a couple of places where we tried to
+                    access before the start of the string.
+    
+    
+    svn path=/trunk/; revision=1514
+
+ ChangeLog       |   6 +
+ src/table.c     | 139 ++++++++++++-----------
+ src/vte.c       | 345 ++++++++++++++++++++++++++++++--------------------------
+ src/vteaccess.c |  36 +++---
+ src/vteapp.c    |   4 +
+ src/vtedraw.h   |   4 +-
+ src/vtefc.c     |  41 ++-----
+ src/vtexft.c    | 152 +++++++++++++------------
+ 8 files changed, 384 insertions(+), 343 deletions(-)
+
+commit 65e7b4c5838004367a0cbcc8149a43b5cea8077c
+Author: Chris Wilson 
+Date:   2007-01-24 14:31:19 +0000
+
+    Bug 400184 – _vte_pty_open declaration mismatch - breaks on Solaris
+    
+    2007-01-24  Chris Wilson 
+    
+            Bug 400184 – _vte_pty_open declaration mismatch - breaks on Solaris
+    
+            Patch by Damien Carbery.
+    
+            * src/pty.h:
+                    Update prototype to match new definition.
+    
+    
+    svn path=/trunk/; revision=1513
+
+ ChangeLog | 9 +++++++++
+ src/pty.h | 2 +-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+commit 684b2ff5cb4b6c3eede196d237d099f066e595e5
+Author: Chris Wilson 
+Date:   2007-01-24 02:54:03 +0000
+
+     hm, vte is not matching «ESC [ ; 7 m» :/
+    
+    2007-01-24  Chris Wilson 
+    
+             hm, vte is not matching «ESC [ ; 7 m» :/
+    
+            * src/table.c: (_vte_table_addi), (_vte_table_matchi),
+            (_vte_table_match):
+                    s/GList/GSList/
+                    g_slist_append -> g_slist_reverse(g_slist_prepend)
+                    And finally add the subtable to handle the leading ';'
+                    in the variable length parameters.
+    
+    
+    svn path=/trunk/; revision=1512
+
+ ChangeLog   | 11 +++++++++++
+ src/table.c | 42 +++++++++++++++++++++++++-----------------
+ 2 files changed, 36 insertions(+), 17 deletions(-)
+
+commit ad5b91ba4d9bab3690e6dc8646623d6c31234809
+Author: Chris Wilson 
+Date:   2007-01-23 13:01:00 +0000
+
+    A couple of minor buggets.
+    
+    2007-01-23  Chris Wilson 
+    
+            A couple of minor buggets.
+    
+            * src/iso2022.c: (_vte_iso2022_state_set_codeset):
+                    Use g_intern_string() instead of from_quark(to_quark(str))
+            * src/vtepango.c: (_vte_pango_create), (_vte_pango_destroy),
+            (_vte_pango_start), (_vte_pango_end), (_vte_pango_set_text_font):
+                    Use the widget pango context (we're guarranteed to have a
+                    screen by this point) and don't unref it!
+                    Inspired by Pedro de Medeiros in Bug 335269.
+    
+    
+    svn path=/trunk/; revision=1511
+
+ ChangeLog      | 12 ++++++++++++
+ src/iso2022.c  |  2 +-
+ src/vtepango.c | 28 +++-------------------------
+ 3 files changed, 16 insertions(+), 26 deletions(-)
+
+commit 64c9b97f3dbed04003bb1a6a5727a878c171f7b8
+Author: Chris Wilson 
+Date:   2007-01-23 10:09:44 +0000
+
+    Regression on Bug 123591: mkdir /tmp/aa; cd /tmp/aa; bash; cd ..; rmdir aa
+    
+    2007-01-23  Chris Wilson 
+    
+            Regression on Bug 123591:
+                    mkdir /tmp/aa; cd /tmp/aa; bash; cd ..; rmdir aa
+                    Open a new tab in g-t -> Failure.
+    
+            * src/pty.c: (_vte_pty_run_on_pty):
+                    Check the error return from g_spawn and try again with the
+                    pwd if it reports that the child could not change directory.
+    
+    
+    svn path=/trunk/; revision=1510
+
+ ChangeLog | 10 ++++++++++
+ src/pty.c | 18 ++++++++++++++++++
+ 2 files changed, 28 insertions(+)
+
+commit 49021e4b66f9d0bf3b8ab8e40a8087e9f2fa986e
+Author: Chris Wilson 
+Date:   2007-01-23 09:47:56 +0000
+
+    Add all g_spawn parameters to VTE_DEBUG_MISC output.
+    
+    2007-01-23  Chris Wilson 
+    
+            * src/pty.c: (_vte_pty_run_on_pty):
+                    Add all g_spawn parameters to VTE_DEBUG_MISC output.
+    
+    
+    svn path=/trunk/; revision=1509
+
+ ChangeLog |  5 +++++
+ src/pty.c | 45 +++++++++++++++++++++++++++++++--------------
+ 2 files changed, 36 insertions(+), 14 deletions(-)
+
+commit d19cf7456ab2d6ba37caa4720271d85bddb8172b
+Author: Behdad Esfahbod 
+Date:   2007-01-23 01:34:13 +0000
+
+    Fix version number in NEWS
+    
+    svn path=/trunk/; revision=1507
+
+ NEWS | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5819378701e0fb85ff2f5482216e10db91a655ca (tag: vte_0_15_2)
+Author: Behdad Esfahbod 
+Date:   2007-01-23 00:54:01 +0000
+
+    Released vte-0.15.2.
+    
+    2007-01-22  Behdad Esfahbod  
+    
+            Released vte-0.15.2.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.15.2.
+    
+            * src/Makefile.am: Bumped libtool version to 10:9:1.
+    
+    
+    svn path=/trunk/; revision=1505
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 67 insertions(+), 2 deletions(-)
+
+commit d3cae283a93c3a7df7f611ad6a8f50991943173d
+Author: Chris Wilson 
+Date:   2007-01-22 22:15:22 +0000
+
+    Bug 399137 - continuation.
+    
+    2007-01-22  Chris Wilson 
+    
+            Bug 399137 - continuation.
+    
+            * src/vteaccess.c: (vte_terminal_accessible_text_modified):
+                    Classic bug:
+                            clen = cp - old
+                    rather than the more correct
+                            clen = cp - current
+    
+    
+    svn path=/trunk/; revision=1504
+
+ ChangeLog       | 10 ++++++++++
+ src/vteaccess.c |  2 +-
+ 2 files changed, 11 insertions(+), 1 deletion(-)
+
+commit 7cc6b5148f46647a9ebf1cc35ace5c410f13e3d7
+Author: Chris Wilson 
+Date:   2007-01-22 21:52:57 +0000
+
+    Don't try to perform gdk operations on unrealized windows.
+    
+    2007-01-22  Chris Wilson 
+    
+            * src/vteapp.c: (char_size_changed), (char_size_realized), (main):
+                    Don't try to perform gdk operations on unrealized windows.
+    
+    
+    svn path=/trunk/; revision=1503
+
+ ChangeLog    |  5 +++++
+ src/vteapp.c | 46 ++++++++++++++++++++++++++++++++++++++++++----
+ 2 files changed, 47 insertions(+), 4 deletions(-)
+
+commit a22146e09ce78155eb90b5d9724e178be4b982cd
+Author: Chris Wilson 
+Date:   2007-01-22 21:51:58 +0000
+
+    Print out the argument vector for VTE_DEBUG_MISC.
+    
+    2007-01-22  Chris Wilson 
+    
+            * src/pty.c: (_vte_pty_run_on_pty):
+                    Print out the argument vector for VTE_DEBUG_MISC.
+    
+    
+    svn path=/trunk/; revision=1502
+
+ ChangeLog |  5 +++++
+ src/pty.c | 11 +++++++++++
+ 2 files changed, 16 insertions(+)
+
+commit d9ce70ee3d33d7f03b5bc54c24d5f9268dc2b1d4
+Author: Chris Wilson 
+Date:   2007-01-22 21:31:07 +0000
+
+    Protect against g_strv_length(NULL)
+    
+    2007-01-22  Chris Wilson 
+    
+            * src/pty.c: (_vte_pty_run_on_pty):
+                    Protect against g_strv_length(NULL)
+    
+    
+    svn path=/trunk/; revision=1501
+
+ ChangeLog | 5 +++++
+ src/pty.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 83c14ae94c5fde5f6ff8f0b3774a551e31def4d1
+Author: Chris Wilson 
+Date:   2007-01-22 20:50:37 +0000
+
+    Improve the changelog entry for the previous commit.
+    
+    svn path=/trunk/; revision=1500
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3aa224d696f2918faf9dfbc554d1314f786c341a
+Author: Chris Wilson 
+Date:   2007-01-22 20:48:14 +0000
+
+    Bug 399137 - continuation.
+    
+    2007-01-22  Chris Wilson 
+    
+            Bug 399137 - continuation.
+    
+            * src/vteaccess.c: (vte_terminal_accessible_text_modified):
+                    After walking back along the UTF-8 string, remember to update
+                    string lengths that are use to detect insertions and
+                    deletions!
+    
+    
+    svn path=/trunk/; revision=1499
+
+ ChangeLog       | 9 +++++++++
+ src/vteaccess.c | 3 +++
+ 2 files changed, 12 insertions(+)
+
+commit 8e2e9280df9f1b1e54b9556100a2a85f2af9966a
+Author: Chris Wilson 
+Date:   2007-01-22 19:51:16 +0000
+
+    If the caret is at the end of the buffer, then it set past the end of the
+    
+    2007-01-22  Chris Wilson 
+    
+            If the caret is at the end of the buffer, then it set past the
+            end of the offset array - do not use this as a lookup!
+    
+            * src/vteaccess.c: (vte_terminal_accessible_text_modified):
+                    If the caret points to past the last character, set the
+                    offset to the string's NUL terminator.
+    
+    
+    svn path=/trunk/; revision=1498
+
+ ChangeLog       | 9 +++++++++
+ src/vteaccess.c | 9 +++++++--
+ 2 files changed, 16 insertions(+), 2 deletions(-)
+
+commit ff8cd236b46db35290954b80071b860218927a4e
+Author: Chris Wilson 
+Date:   2007-01-22 19:20:47 +0000
+
+    Earlier configure.in update introduced a trailing ']', pair it with its
+    
+    2007-01-22  Chris Wilson 
+    
+            * configure.in:
+                    Earlier configure.in update introduced a trailing ']', pair
+                    it with its '['
+    
+    
+    svn path=/trunk/; revision=1497
+
+ ChangeLog    | 7 +++++++
+ configure.in | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit d32482cfb6cc31f456904b5c5a43d55a7364d45e
+Author: Chris Wilson 
+Date:   2007-01-22 18:27:45 +0000
+
+    Bug 132316 – terminal widget's context menu posting isn't exposed as an
+    
+    2007-01-22  Chris Wilson 
+    
+            Bug 132316 – terminal widget's context menu posting isn't exposed as an AtkAction
+    
+            Original patch by 
+    
+            * src/vteaccess.c: (vte_terminal_accessible_free_private_data),
+            (vte_terminal_accessible_component_init),
+            (vte_terminal_accessible_do_action),
+            (vte_terminal_accessible_get_n_actions),
+            (vte_terminal_accessible_action_get_description),
+            (vte_terminal_accessible_action_get_name),
+            (vte_terminal_accessible_action_get_keybinding),
+            (vte_terminal_accessible_action_set_description),
+            (vte_terminal_accessible_action_init),
+            (vte_terminal_accessible_get_type):
+                    Remove grab_focus and defer to the parent's implementation.
+                    Add an AtkAction iface.
+    
+    
+    svn path=/trunk/; revision=1496
+
+ ChangeLog       |  19 +++++++
+ src/vteaccess.c | 163 +++++++++++++++++++++++++++++++++++++++++++++++++-------
+ 2 files changed, 164 insertions(+), 18 deletions(-)
+
+commit fc07977497ad5d13dc45ebe094715d057e3efbb2
+Author: Chris Wilson 
+Date:   2007-01-22 18:04:17 +0000
+
+    Bug 156161 – AccessibleText_getTextAtOffset returns wrong values in
+    
+    2007-01-22  Chris Wilson 
+    
+            Bug 156161 – AccessibleText_getTextAtOffset returns wrong values in gnome-terminal
+    
+            The code for ATK_TEXT_BOUNDARY_WORD_START and
+            ATK_TEXT_BOUNDARY_WORD_END is the same.
+    
+            Patch by 
+    
+            * src/vteaccess.c: (vte_terminal_accessible_get_text_somewhere):
+                    Actually provide an implementation for
+                    ATK_TEXT_BOUNDARY_WORD_END.
+    
+    
+    svn path=/trunk/; revision=1495
+
+ ChangeLog       | 13 ++++++++
+ src/vteaccess.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 104 insertions(+), 1 deletion(-)
+
+commit 9847a75a4a8bbc54a39be23a0b9f58be56af4f15
+Author: Chris Wilson 
+Date:   2007-01-22 17:51:45 +0000
+
+    Bug 399137 – UTF-8 problem in VteAccess
+    
+    2007-01-22  Chris Wilson 
+    
+            Bug 399137 – UTF-8 problem in VteAccess
+    
+            * src/vteaccess.c: (emit_text_changed_insert),
+            (emit_text_changed_delete):
+                    use g_utf8_pointer_to_offset() instead of open coding
+            (vte_terminal_accessible_update_private_data_if_needed):
+                    add the number of UTF-8 characters to the debug output.
+            (vte_terminal_accessible_text_modified):
+                    iterate backwards over the UTF-8 string using
+                    g_utf8_prev_char() and convert the caret into a byte offset
+                    before it as such.
+    
+    
+    svn path=/trunk/; revision=1494
+
+ ChangeLog       | 14 +++++++++++++
+ src/vteaccess.c | 63 +++++++++++++++++++++++----------------------------------
+ 2 files changed, 39 insertions(+), 38 deletions(-)
+
+commit 758e6a5cb998c527cafce10292f7f3b0aed57de5
+Author: Chris Wilson 
+Date:   2007-01-22 17:25:28 +0000
+
+    Bug 123591 – vte_terminal_fork_command succeeds even when it does not
+    
+    2007-01-22  Chris Wilson 
+    
+            Bug 123591 – vte_terminal_fork_command succeeds even when it does not
+    
+            * python/vte.defs:
+            * python/vte.override:
+            * src/reaper.c: (vte_reaper_child_watch_cb):
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_catch_child_exited),
+            (_vte_terminal_fork_basic), (vte_terminal_forkpty):
+            * src/vte.h:
+            * src/vteapp.c:
+                    s/pid_t/GPid/ portable variant, no API/ABI implications
+            * src/pty.c: (vte_pty_child_setup), (_vte_pty_run_on_pty),
+            (_vte_pty_fork_on_pty_name), (_vte_pty_fork_on_pty_fd),
+            (_vte_pty_open_unix98), (_vte_pty_pipe_open), (n_read), (n_write),
+            (_vte_pty_start_helper), (_vte_pty_open_with_helper),
+            (_vte_pty_open), (main):
+                    Replace custom fork() and pipe based syncrohonisation scheme
+                    with g_spawn_async_with_pipes() as it actually handles all
+                    failure modes correctly, and gives us overtures of portability.
+    
+    
+    svn path=/trunk/; revision=1493
+
+ ChangeLog           |  23 ++
+ python/vte.defs     |   4 +-
+ python/vte.override |   4 +-
+ src/pty.c           | 711 +++++++++++++++++++++-------------------------------
+ src/reaper.c        |   1 +
+ src/vte-private.h   |   2 +-
+ src/vte.c           |  30 ++-
+ src/vte.h           |  10 +-
+ src/vteapp.c        |   1 +
+ 9 files changed, 345 insertions(+), 441 deletions(-)
+
+commit 59bbbea8be0cbfdd075419b8e248eb64f957341b
+Author: Chris Wilson 
+Date:   2007-01-22 14:23:39 +0000
+
+    Hack'n'slash my way through doing a bit of weeding.
+    
+    2007-01-22  Chris Wilson 
+    
+            Hack'n'slash my way through doing a bit of weeding.
+    
+            Fixed:
+            - Bug 345514 – -no-undefined doesn't work with latest libtool
+            - Bug 162003 – vte configure.in X checking can fail
+                         – though this may cause other regressions!
+            - Bug 314669 – Please specialize AC_PATH_XTRA
+    
+            * configure.in:
+                    Export LIBTOOL_EXPORT_OPTIONS for -no-undefined on windos.
+                    Add to rather than override X_CFLAGS, X_LIBS
+                    AC_PATH_XTRA - Find X11 using XFlush() rather than XtMalloc().
+                    Print configuration details.
+            * src/Makefile.am:
+                    Conditional compilation of backends.
+    
+    
+    svn path=/trunk/; revision=1492
+
+ ChangeLog       |  18 ++++
+ configure.in    | 280 +++++++++++++++++++++++++++++++++++++-------------------
+ src/Makefile.am |  15 ++-
+ 3 files changed, 214 insertions(+), 99 deletions(-)
+
+commit 72c097e9efee36892b5a99461338b7064bb7df61
+Author: Chris Wilson 
+Date:   2007-01-22 10:57:17 +0000
+
+    Bug 389538 – crash in Terminal: nothing
+    
+    2007-01-22  Chris Wilson 
+    
+            Bug 389538 – crash in Terminal: nothing
+    
+            * src/vteaccess.c: (vte_terminal_accessible_get_text):
+                    Guard against negative length strings.
+    
+    
+    svn path=/trunk/; revision=1491
+
+ ChangeLog       |  7 +++++++
+ src/vteaccess.c | 10 +++++++---
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+commit 1cc474c585fc8dd04f72e7f8913d339cc2782850
+Author: Chris Wilson 
+Date:   2007-01-22 01:32:25 +0000
+
+    Fixup changelog to include patch author.
+    
+    svn path=/trunk/; revision=1490
+
+ ChangeLog | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 629175567fcce27bda9f77db177d0b187a346d98
+Author: Chris Wilson 
+Date:   2007-01-22 01:31:01 +0000
+
+    Bug 161479 – Scroll wheel generates Release events
+    
+    2007-01-22  Chris Wilson 
+    
+            Bug 161479 – Scroll wheel generates Release events
+    
+            vte sends release events on scroll but xterm doesn't which breaks
+            mc among others.
+    
+            * src/vte.c: (vte_terminal_scroll):
+                    Remove the offending release event.
+    
+    
+    svn path=/trunk/; revision=1489
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 10 ----------
+ 2 files changed, 10 insertions(+), 10 deletions(-)
+
+commit 9c70a15321c4f01cc87728c76958780eb58a2050
+Author: Chris Wilson 
+Date:   2007-01-20 21:54:28 +0000
+
+     ickle: sparse complains about dubious 1 bit bitfields if you use
+    
+    2007-01-20  Chris Wilson 
+    
+             ickle: sparse complains about dubious 1 bit bitfields
+                    if you use gboolean instead of guint
+             so s/gboolean/guint at line 166 and 174
+             unless that changes the API, of course...
+             it doesn't
+             gboolean a:1 is not very correct anyways
+             ickle: we've done the same change in other modules
+             if I do it quick, behdad might not even notice ;)
+    
+            * src/vte.h:
+                    Convert signed single bit field to unsigned. The code
+                    was setting it to 1 anyhow (and not -1 as the type indicated).
+    
+    
+    svn path=/trunk/; revision=1488
+
+ ChangeLog | 15 +++++++++++++++
+ src/vte.h |  4 ++--
+ 2 files changed, 17 insertions(+), 2 deletions(-)
+
+commit 633016c80df82f651e3add9f947fcaacb4fc427e
+Author: Chris Wilson 
+Date:   2007-01-20 10:10:10 +0000
+
+    Bug 398602 – Build Failure
+    
+    2007-01-20  Chris Wilson 
+    
+            Bug 398602 – Build Failure
+    
+            * src/vte.c: (vte_terminal_expose):
+                    Fixup typo. [Grrr. Must get git-svn back into sync]
+    
+    
+    svn path=/trunk/; revision=1487
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 79d26ffe5a243c69742c88217eb25e6653ce88e5
+Author: Rich Burridge 
+Date:   2007-01-20 01:52:29 +0000
+
+    Fixed bug #397724 - Orca incorrect echo's certain input in gnome-terminal
+    
+            * src/vteaccess.c:
+            Fixed bug #397724 - Orca incorrect echo's certain input in
+            gnome-terminal when key echo is set to off (on Ubuntu Feisty).
+    
+    svn path=/trunk/; revision=1486
+
+ ChangeLog       | 6 ++++++
+ src/vteaccess.c | 7 +++++--
+ 2 files changed, 11 insertions(+), 2 deletions(-)
+
+commit e4655c4d8dd5e2d07c8a9999fe386a84129bcc0e
+Author: Chris Wilson 
+Date:   2007-01-20 01:49:16 +0000
+
+    Also if the entire terminal is invalidated, do not add more GTK+ exposes
+    
+    2007-01-20  Chris Wilson 
+    
+            * src/vte.c: (vte_terminal_expose):
+                    Also if the entire terminal is invalidated,
+                    do not add more GTK+ exposes to it.
+    
+    
+    svn path=/trunk/; revision=1485
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 8 +++++---
+ 2 files changed, 11 insertions(+), 3 deletions(-)
+
+commit bc286a1432fccbe8cb553e290e4dad329010ae37
+Author: Chris Wilson 
+Date:   2007-01-20 01:44:46 +0000
+
+    Track when we have invalidated the entire terminal and skip adding new
+    
+    2007-01-20  Chris Wilson 
+    
+            Track when we have invalidated the entire terminal and skip adding
+            new regions when possible.
+    
+            * src/vte-private.h:
+            * src/vte.c: (update_regions), (_vte_invalidate_cells),
+            (_vte_invalidate_all), (vte_terminal_size_allocate),
+            (reset_update_regions):
+    
+    
+    svn path=/trunk/; revision=1484
+
+ ChangeLog         | 10 ++++++++++
+ src/vte-private.h |  2 +-
+ src/vte.c         | 40 ++++++++++++++++++++++++++++++++--------
+ 3 files changed, 43 insertions(+), 9 deletions(-)
+
+commit bcaa0d3c3ad7a9d04aafa25c079bd3eb8fd4bea3
+Author: Chris Wilson 
+Date:   2007-01-20 01:25:42 +0000
+
+    Bug 398244 – Gnome-terminal opens a huge sized window
+    
+    2007-01-20  Chris Wilson 
+    
+            Bug 398244 – Gnome-terminal opens a huge sized window
+    
+            * src/vte.c: (vte_terminal_ensure_font),
+            (vte_terminal_set_font_full), (vte_terminal_size_request),
+            (vte_terminal_realize), (vte_terminal_get_char_width),
+            (vte_terminal_get_char_height), (vte_terminal_get_char_descent),
+            (vte_terminal_get_char_ascent):
+                    Ensure the font metrics are calculated before use.
+    
+    
+    svn path=/trunk/; revision=1483
+
+ ChangeLog | 11 ++++++++++
+ src/vte.c | 75 ++++++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 54 insertions(+), 32 deletions(-)
+
+commit b8bb41c7919cf09e3a5cce954c85ca4883344b95
+Author: Chris Wilson 
+Date:   2007-01-19 21:48:30 +0000
+
+    Do not invalidate the old cursor position if it was not visible.
+    
+    2007-01-19  Chris Wilson 
+    
+            * src/vte.c: (vte_terminal_process_incoming):
+                    Do not invalidate the old cursor position if it was not
+                    visible.
+    
+    
+    svn path=/trunk/; revision=1482
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 3 ++-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 08ede26752979d9e20f2c4ec0efa1a94eb781b41
+Author: Chris Wilson 
+Date:   2007-01-19 21:22:23 +0000
+
+    Make sure ->process_timeout is set to VTE_INVALID_SOURCE on all paths that
+    
+    2007-01-19  Chris Wilson 
+    
+            * src/vte.c: (process_timeout):
+                    Make sure ->process_timeout is set to VTE_INVALID_SOURCE on
+                    all paths that remove the timeout.
+    
+    
+    svn path=/trunk/; revision=1481
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 10 +++++-----
+ 2 files changed, 11 insertions(+), 5 deletions(-)
+
+commit 251b0bde344e603d1bbef541250715090f607592
+Author: Chris Wilson 
+Date:   2007-01-19 19:38:50 +0000
+
+    Add <> to mark boundaries of process_timeout().
+    
+    2007-01-19  Chris Wilson  
+    
+            Add <> to mark boundaries of process_timeout().
+    
+            * src/vte.c: (vte_terminal_class_init), (process_timeout):
+    
+    
+    svn path=/trunk/; revision=1480
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 18 ++++++++++++++++--
+ 2 files changed, 22 insertions(+), 2 deletions(-)
+
+commit 34669c058fb355eacb3dcd959912153effaa1b47
+Author: Chris Wilson 
+Date:   2007-01-19 17:48:39 +0000
+
+    Remove a bit of redundant text in the printout from the last commit.
+    
+    svn path=/trunk/; revision=1479
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d7a3c8149db52bde44491cd4667bfd2368daea71
+Author: Chris Wilson 
+Date:   2007-01-19 17:47:35 +0000
+
+    Add {},[] to mark boundaries of update_timeout() and notice that the
+    
+    2007-01-19  Chris Wilson  
+    
+            Add {},[] to mark boundaries of update_timeout() and notice that
+            the display limited update_timeout was not dying.
+    
+            * src/vte.c: (vte_terminal_class_init), (update_repeat_timeout),
+            (update_timeout):
+    
+    
+    svn path=/trunk/; revision=1478
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 31 +++++++++++++++++++++++++++++--
+ 2 files changed, 37 insertions(+), 2 deletions(-)
+
+commit 40e65756c3571b24a4896fe6bfcfbeee666dd07a
+Author: Chris Wilson 
+Date:   2007-01-19 17:31:36 +0000
+
+    Small cleanup: - protect remove_process_timeout against an invalid source.
+    
+    2007-01-19  Chris Wilson 
+    
+            * src/vte.c: (vte_terminal_realize), (remove_process_timeout):
+                    Small cleanup:
+                     - protect remove_process_timeout against an invalid source.
+                     - move static prototypes into common block.
+                     - gdk_window_show() is done in map not realize.
+    
+    
+    svn path=/trunk/; revision=1477
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 14 ++++++++------
+ 2 files changed, 16 insertions(+), 6 deletions(-)
+
+commit 876b419f1106886501845b882aa5e5024e5c8191
+Author: Chris Wilson 
+Date:   2007-01-19 16:56:58 +0000
+
+    Introduce a bit of slack in the bbox check to allow for a small of amount
+    
+    2007-01-19  Chris Wilson 
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_process_incoming):
+                    Introduce a bit of slack in the bbox check to allow
+                    for a small of amount of cursor motion e.g. due to line
+                    scrolling. This turns the long sequence of
+                    '(?!?!??? ... ????!)'
+                    during a hexdump into the better behaved
+                    '.(?!?!?!??!)-+=.(?!?!??!)-+=........'. Although it is
+                    puzzling why we now how have a block of IO and then two quick
+                    display upates...
+    
+    
+    svn path=/trunk/; revision=1476
+
+ ChangeLog         | 13 +++++++++++++
+ src/vte-private.h |  1 +
+ src/vte.c         |  8 ++++----
+ 3 files changed, 18 insertions(+), 4 deletions(-)
+
+commit 198e67bf3dbc376b60a710271a1be0db3e11e408
+Author: Chris Wilson 
+Date:   2007-01-19 16:31:59 +0000
+
+    Repeat _vte_terminal_process_incoming until we have drained the incoming
+    
+    2007-01-19  Chris Wilson 
+    
+            * src/vte.c: (process_timeout), (update_repeat_timeout),
+            (update_timeout):
+                    Repeat _vte_terminal_process_incoming until we have drained
+                    the incoming buffers or we can handle no more. Fixes a
+                    problem where the display wouldn't update if we hadn't
+                    processed enough data (e.g. on startup, displaying the first
+                    prompt). This bug corresponds with the sequence
+                    '*-+=..()?!(?!?!?!)-+=' below, which now reads
+                    '*-+=..()(?!?!?!)-+='
+    
+    
+    svn path=/trunk/; revision=1475
+
+ ChangeLog | 12 ++++++++++++
+ src/vte.c | 30 +++++++++++++++++++-----------
+ 2 files changed, 31 insertions(+), 11 deletions(-)
+
+commit 99a36a042102e320143dade3ba1574310ee66d08
+Author: Chris Wilson 
+Date:   2007-01-19 15:26:57 +0000
+
+    "%ld" for cursor indices.
+    
+    2007-01-19  Chris Wilson 
+    
+            * src/vte.c: (_vte_invalidate_cursor_once):
+                    "%ld" for cursor indices.
+    
+    
+    svn path=/trunk/; revision=1474
+
+ ChangeLog | 5 +++++
+ src/vte.c | 6 ++----
+ 2 files changed, 7 insertions(+), 4 deletions(-)
+
+commit 78f7a5f85b7297c320ab92a425e9c7df99d2c212
+Author: Chris Wilson 
+Date:   2007-01-19 15:24:30 +0000
+
+    Cursor indices are long.
+    
+    2007-01-19  Chris Wilson 
+    
+            * src/vte.c: (_vte_invalidate_cells),
+            (_vte_invalidate_cursor_once):
+                    Cursor indices are long.
+    
+    
+    svn path=/trunk/; revision=1473
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 5 +++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+commit a2886cc03276143105f780689b587dedd493dde6
+Author: Chris Wilson 
+Date:   2007-01-19 15:20:19 +0000
+
+    Cursor indices are long. Prepend the GTK+ generated expose if we already
+    
+    2007-01-19  Chris Wilson 
+    
+            * src/vte-private.h:
+            * src/vte.c: (_vte_invalidate_cell):
+                    Cursor indices are long.
+            * src/vte.c: (_vte_terminal_expose):
+                    Prepend the GTK+ generated expose if we already have an
+                    display update pending.
+    
+    
+    svn path=/trunk/; revision=1472
+
+ ChangeLog         |  9 +++++++++
+ src/vte-private.h |  2 +-
+ src/vte.c         | 19 ++++++++++++++-----
+ 3 files changed, 24 insertions(+), 6 deletions(-)
+
+commit 12d98d8c8bf1b53bb2b68a758e7b68043be35a10
+Author: Chris Wilson 
+Date:   2007-01-19 15:02:25 +0000
+
+    Add a new debug flag to visualize the work flow. VTE_DEBUG_FLAGS=work
+    
+    2007-01-19  Chris Wilson 
+    
+            Add a new debug flag to visualize the work flow.
+            VTE_DEBUG_FLAGS=work generates output like:
+            Debugging work flow (top input to bottom output):
+              .  _vte_terminal_process_incoming
+              (  start _vte_terminal_process_incoming
+              ?  _vte_invalidate_cells (call)
+              !  _vte_invalidate_cells (dirty)
+              *  _vte_invalidate_all
+              )  end _vte_terminal_process_incoming
+              -  gdk_window_process_all_updates
+              +  vte_terminal_expose
+              =  vte_terminal_paint
+            *?!**+=*-+=..()?!(?!?!?!)-+=?!-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.().(?!?!?!)-+=.().(?!?!?!)-+=.().().(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!)-+=.............................................................................................................................................................................................................................................................................(?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????!??!)-+=.......................................................................
+    
+            Which tells me I have two bugs to track:
+                    1. the initial '..()' is a missing invalidate.
+                    2. '(?!?!????????????????????!??!)' is not very efficient.
+    
+            * src/debug.c: (_vte_debug_parse_string):
+            * src/debug.h:
+            * src/vte.c: (update_regions), (_vte_invalidate_cells),
+            (_vte_invalidate_all), (vte_terminal_process_incoming),
+            (vte_terminal_io_read), (vte_terminal_paint),
+            (vte_terminal_expose), (vte_terminal_class_init):
+                    Add VTE_DEBUG_WORK
+    
+    
+    svn path=/trunk/; revision=1471
+
+ ChangeLog   | 28 ++++++++++++++++++++++++
+ src/debug.c |  3 +++
+ src/debug.h |  5 +++--
+ src/vte.c   | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++--------
+ 4 files changed, 98 insertions(+), 11 deletions(-)
+
+commit d061fc52911fd4a5e77982f993923198a27b65e8
+Author: Chris Wilson 
+Date:   2007-01-19 12:24:02 +0000
+
+    Bug 398150 – cursor leaves trail behind in vim
+    
+    2007-01-19  Chris Wilson 
+    
+            Bug 398150 – cursor leaves trail behind in vim
+    
+            * src/vte-private.h:
+            * src/vte.c: (_vte_invalidate_cell),
+            (vte_terminal_process_incoming):
+            * src/vteseq.c: (vte_sequence_handler_decset_internal):
+                    Invalidate the old cursor position if we detect the cursor
+                    moved during the sequence or if the cursor changed state.
+    
+    
+    svn path=/trunk/; revision=1470
+
+ ChangeLog         | 11 +++++++++++
+ src/vte-private.h |  1 +
+ src/vte.c         | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++----
+ src/vteseq.c      |  5 -----
+ 4 files changed, 62 insertions(+), 9 deletions(-)
+
+commit d78519b31ec6a5c8c38820ac2ba4864cc9e0acca
+Author: Chris Wilson 
+Date:   2007-01-19 10:10:10 +0000
+
+    Missing $(X_CFLAGS)
+    
+    2007-01-19  Chris Wilson 
+    
+            * src/Makefile.am:
+                    Missing $(X_CFLAGS)
+    
+    
+    svn path=/trunk/; revision=1469
+
+ ChangeLog       | 5 +++++
+ src/Makefile.am | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 48c3b16e6c0470edf5ceae155a32d8ce36244968
+Author: Chris Wilson 
+Date:   2007-01-19 10:07:58 +0000
+
+    missed from last commit
+    
+    svn path=/trunk/; revision=1468
+
+ ChangeLog | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 87449145eb0da8989be00a497aac68d19a7bb6db
+Author: Chris Wilson 
+Date:   2007-01-19 09:30:54 +0000
+
+    Bug 398243 – Crash
+    
+    2007-01-19  Chris Wilson 
+    
+            Bug 398243 – Crash
+    
+            * src/vtebg.c: (vte_bg_cache_prune_int):
+                    Use the return from g_list_delete_link to maintain the list
+                    head.
+    
+    
+    svn path=/trunk/; revision=1467
+
+ src/vtebg.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit dfbaae24245375fa7fca8d3b38d7ff387bbeba01
+Author: Chris Wilson 
+Date:   2007-01-18 22:39:36 +0000
+
+    Check that the start of the invalid region is on screen.
+    
+    2007-01-18  Chris Wilson 
+    
+            * src/vte.c: (_vte_invalidate_cells):
+                    Check that the start of the invalid region is on screen.
+    
+    
+    svn path=/trunk/; revision=1466
+
+ ChangeLog | 5 +++++
+ src/vte.c | 6 ++++++
+ 2 files changed, 11 insertions(+)
+
+commit 725f61ecda29fcd44acf45ec0e3c8f1bbb39252f
+Author: Chris Wilson 
+Date:   2007-01-18 22:03:00 +0000
+
+    Bug 398116 – lags behind when widget not visible
+    
+    2007-01-18  Chris Wilson 
+    
+            Bug 398116 – lags behind when widget not visible
+    
+            * src/vte.c: (vte_terminal_handle_scroll):
+                    During the spring clean, I converted a few GTK_WIDGET_REALIZED()
+                    checks to GTK_WIDGET_DRAWABLE()+visibility check.
+                    Unfortunately, it broke keeping the scroll delta in sync with
+                    the insert delta. Sync the pair, then perform the check before
+                    making updates on the visible area.
+    
+    
+    svn path=/trunk/; revision=1465
+
+ ChangeLog | 11 +++++++++++
+ src/vte.c | 13 +++++++------
+ 2 files changed, 18 insertions(+), 6 deletions(-)
+
+commit a3eef86e9564a3add70b45390b24ad5f24f8bad3
+Author: Chris Wilson 
+Date:   2007-01-18 19:09:42 +0000
+
+    Bug 398083 – background not painted correctly when starting up
+    
+    2007-01-18  Chris Wilson 
+    
+            Bug 398083 – background not painted correctly when starting up
+    
+            * src/vte.c: (_vte_invalidate_all):
+                    Compute drawable area in window co-ordinates and not widget
+                    co-ordinates.
+    
+    
+    svn path=/trunk/; revision=1464
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 7 ++++++-
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+commit e332a0d91deb6ecb05d16f16b243a366dc7d9974
+Author: Chris Wilson 
+Date:   2007-01-18 18:54:02 +0000
+
+    Small bit of logic inversion that would have tried to paint on unmapped
+    
+    2007-01-18  Chris Wilson 
+    
+            * src/vte.c: (vte_terminal_expose):
+                    Small bit of logic inversion that would have tried to paint
+                    on unmapped and invisible widgets.
+    
+    
+    svn path=/trunk/; revision=1463
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 4 ++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 879db418d7347ebe3c11e9bdb42ce19306d61044
+Author: Chris Wilson 
+Date:   2007-01-18 16:45:25 +0000
+
+    And the corresponding overrides. [The downsides of losing track of which
+    
+    2007-01-18  Chris Wilson 
+            And the corresponding overrides. [The downsides of losing track of
+            which machine you are working on.]
+    
+            * python/vte.override:
+                    Add (get_text_include_trailing_spaces)
+    
+    
+    svn path=/trunk/; revision=1462
+
+ ChangeLog           |  7 +++++
+ python/vte.override | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 96 insertions(+)
+
+commit 581c8626bc17fb1b4e47774b59d927f1154f2c92
+Author: Chris Wilson 
+Date:   2007-01-18 16:43:16 +0000
+
+    Add missing export of vte_terminal_get_text_include_trailing_spaces,
+    
+    2007-01-18  Chris Wilson 
+    
+            Add missing export of vte_terminal_get_text_include_trailing_spaces,
+            needed for building a simple testcase for Bug 397724.
+            vte.defs needs a bit of love...
+    
+            * python/vte.defs:
+                    Add (get_text_include_trailing_spaces)
+    
+    
+    svn path=/trunk/; revision=1461
+
+ ChangeLog       | 9 +++++++++
+ python/vte.defs | 9 +++++++++
+ 2 files changed, 18 insertions(+)
+
+commit d04bb3e3fa59f8b1b6fc690513e282110caf077b
+Author: Chris Wilson 
+Date:   2007-01-18 15:44:09 +0000
+
+    Fix a couple of compiler warnings.
+    
+    2007-01-18  Chris Wilson 
+    
+            * src/vterdb.c: (_vte_rdb_search), (_vte_rdb_boolean):
+                    Fix a couple of compiler warnings.
+    
+    
+    svn path=/trunk/; revision=1460
+
+ ChangeLog    | 5 +++++
+ src/vterdb.c | 8 ++++----
+ 2 files changed, 9 insertions(+), 4 deletions(-)
+
+commit 7519b3e4fca7d284a229693efb74f46cd456c9d3
+Author: Chris Wilson 
+Date:   2007-01-18 15:33:03 +0000
+
+    Delete some dead code.
+    
+    2007-01-18  Chris Wilson 
+    
+            * src/vte.c: (vte_terminal_process_incoming):
+                    Delete some dead code.
+    
+    
+    svn path=/trunk/; revision=1459
+
+ ChangeLog | 5 +++++
+ src/vte.c | 5 -----
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+commit 8ec33f53f0079f4855db2165f1ecca64880d8b0d
+Author: Chris Wilson 
+Date:   2007-01-18 15:30:55 +0000
+
+    Restore --enable-debugging.
+    
+    2007-01-18  Chris Wilson 
+    
+            * configure.in:
+                    Restore --enable-debugging.
+    
+    
+    svn path=/trunk/; revision=1458
+
+ ChangeLog    | 5 +++++
+ configure.in | 5 +++++
+ 2 files changed, 10 insertions(+)
+
+commit 233a2332176975f1c578a07ab45b6bec792088fc
+Author: Chris Wilson 
+Date:   2007-01-18 11:13:10 +0000
+
+    Copy Behdad's MAYBE_WARN comprehensive set of warnings from Cairo, and
+    
+    2007-01-18  Chris Wilson  
+    
+            Copy Behdad's MAYBE_WARN comprehensive set of warnings from Cairo,
+            and fixup the immediate compilation failures.
+    
+            * configure.in:
+                    Iterate over a list of warnings and check that they are valid
+                    for the compiler.
+    
+            * src/debug.c: (_vte_debug_on):
+                    Kill fflush() [redundant with g_printerr].
+    
+    
+    svn path=/trunk/; revision=1457
+
+ ChangeLog    | 12 ++++++++
+ configure.in | 90 +++++++++++++++++++++++++++++++++++++++++++++---------------
+ src/debug.c  |  3 --
+ 3 files changed, 80 insertions(+), 25 deletions(-)
+
+commit 8dbf931060cd7cf3d5684e913bb8d3f2faeb86c6
+Author: Behdad Esfahbod 
+Date:   2007-01-18 10:09:27 +0000
+
+    Don't call AC_CANONICAL_HOST. Libtool calls it already.
+    
+    2007-01-18  Behdad Esfahbod  
+    
+            * configure.in: Don't call AC_CANONICAL_HOST.  Libtool calls it
+            already.
+    
+            * src/Makefile.am: Don't build extra, test, programs by default.
+            Speeds build up.
+    
+    
+    svn path=/trunk/; revision=1456
+
+ ChangeLog       | 8 ++++++++
+ configure.in    | 1 -
+ src/Makefile.am | 2 +-
+ 3 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 0eabcc042fd65cd52bcf3c56bd154dd40c1e15ec
+Author: Behdad Esfahbod 
+Date:   2007-01-18 10:04:53 +0000
+
+    Fix loop-optimization warnings.
+    
+    2007-01-18  Behdad Esfahbod  
+    
+            * src/ring.c (_vte_ring_insert_preserve):
+            * src/vte.c (vte_terminal_paint):
+            Fix loop-optimization warnings.
+    
+    
+    svn path=/trunk/; revision=1455
+
+ ChangeLog  | 6 ++++++
+ src/ring.c | 4 ++--
+ src/vte.c  | 2 +-
+ 3 files changed, 9 insertions(+), 3 deletions(-)
+
+commit 6d9d4a07aa8e202d67b93b2a7e10ec84f7963c09
+Author: Behdad Esfahbod 
+Date:   2007-01-18 09:46:13 +0000
+
+    Fix more warnings.
+    
+    2007-01-18  Behdad Esfahbod  
+    
+            * src/ssfe.c (cleanupexit), (barf):
+            * src/vtebg.c (vte_bg_cache_prune_int):
+            * src/vtetc.c (main):
+            Fix more warnings.
+    
+    
+    svn path=/trunk/; revision=1454
+
+ ChangeLog   | 7 +++++++
+ src/ssfe.c  | 4 ++--
+ src/vtebg.c | 2 +-
+ src/vtetc.c | 6 +++---
+ 4 files changed, 13 insertions(+), 6 deletions(-)
+
+commit dd0498666a3f4c6f763bdf9bbe6d9ff84b894966
+Author: Behdad Esfahbod 
+Date:   2007-01-18 09:38:41 +0000
+
+    Fix int vs long int mismatches in printf args.
+    
+    2007-01-18  Behdad Esfahbod  
+    
+            * src/table.c (main):
+            * src/trie.c (_vte_trie_addx), (main):
+            * src/utf8echo.c (main):
+            Fix int vs long int mismatches in printf args.
+    
+    
+    svn path=/trunk/; revision=1453
+
+ ChangeLog      |  7 +++++++
+ src/table.c    |  2 +-
+ src/trie.c     | 36 ++++++++++++++++++------------------
+ src/utf8echo.c |  2 +-
+ 4 files changed, 27 insertions(+), 20 deletions(-)
+
+commit baef8d76f5dc0a70b3c7e4ba1be585d1961141a8
+Author: Behdad Esfahbod 
+Date:   2007-01-18 09:30:06 +0000
+
+    Remove unused variables.
+    
+    2007-01-18  Behdad Esfahbod  
+    
+            * src/iso2022.c (_vte_iso2022_find_nextctl):
+            * src/reaper.c (vte_reaper_finalize):
+            * src/vte.c (_vte_terminal_insert_char), (vte_terminal_key_press),
+            (vte_terminal_init), (vte_terminal_size_allocate):
+            * src/vteapp.c (main):
+            * src/vtedraw.c (_vte_draw_init_default):
+            * src/vteglyph.c (_vte_glyph_cache_free):
+            * src/vtergb.c (_vte_rgb_copy):
+            * src/vtexft.c (_vte_xft_font_for_char):
+            Remove unused variables.
+    
+    
+    svn path=/trunk/; revision=1452
+
+ ChangeLog      | 13 +++++++++++++
+ src/iso2022.c  |  1 -
+ src/reaper.c   |  1 -
+ src/vte.c      |  8 +-------
+ src/vteapp.c   |  2 ++
+ src/vtedraw.c  |  1 -
+ src/vteglyph.c |  1 -
+ src/vtergb.c   |  1 -
+ src/vtexft.c   |  1 -
+ 9 files changed, 16 insertions(+), 13 deletions(-)
+
+commit 06baf6d464bbfb165c1d5b8cc93aae6dbb7d6503
+Author: Chris Wilson 
+Date:   2007-01-18 02:46:11 +0000
+
+    Bug 161342 revisited. Reset the box to +-inf and not the current cursor,
+    
+    2007-01-18  Chris Wilson  
+    
+            Bug 161342 revisited. Reset the box to +-inf and not the current
+            cursor, otherwise you just reproduce the slow behaviour (an overly
+            large invalidation area).
+    
+            * src/vte.c: (vte_terminal_process_incoming):
+                    Reset bbox to +-inf.
+    
+    
+    svn path=/trunk/; revision=1451
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 16 ++++++++--------
+ 2 files changed, 17 insertions(+), 8 deletions(-)
+
+commit 9c88d1c90efce33386fcca58736903e58d481ebd
+Author: Chris Wilson 
+Date:   2007-01-17 22:00:53 +0000
+
+    Second breakage: VTE_INVALID_SOURCE !=0 and calling
+    
+    2007-01-17  Chris Wilson  
+    
+            Second breakage: VTE_INVALID_SOURCE !=0 and calling
+            vte_terminal_set_scrollback_lines with lines == ->scrollback_lines
+            is not a nop.
+    
+            * src/vte.c: (vte_terminal_background_update),
+            (vte_terminal_queue_background_update):
+                    VTE_INVALID_SOURCE != 0
+            (vte_terminal_set_scrollback_lines):
+                    reset the rowdata everytime.
+    
+    
+    svn path=/trunk/; revision=1450
+
+ ChangeLog | 12 ++++++++++++
+ src/vte.c |  7 ++-----
+ 2 files changed, 14 insertions(+), 5 deletions(-)
+
+commit 867645ccd8d6ccad5982825ef85451abb639d483
+Author: Chris Wilson 
+Date:   2007-01-17 21:57:43 +0000
+
+    Bug 397414 - port vteapp to GOption
+    
+    2007-01-17  Chris Wilson  
+    
+            Bug 397414 - port vteapp to GOption
+    
+            * src/vteapp.c: (main):
+                    Translation of getopt switch to GOptionEntry[].
+                    Missing help for --geometry.
+    
+    
+    svn path=/trunk/; revision=1449
+
+ ChangeLog    |   8 ++
+ src/vteapp.c | 401 ++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 211 insertions(+), 198 deletions(-)
+
+commit 5f4d07a9778eedbbbc267fb57869cefc15874812
+Author: Chris Wilson 
+Date:   2007-01-17 21:11:24 +0000
+
+    First breakage spotted: the realized flag is set too late in the realize
+    
+    2007-01-17  Chris Wilson  
+    
+            First breakage spotted: the realized flag is set too late in
+            the realize handler. Note to self: not everybody uses a black
+            background.
+    
+            * src/vte.c: (vte_terminal_realize):
+                    Restore GTK_WIDGET_SET_FLAGS(REALIZED)
+    
+    
+    svn path=/trunk/; revision=1448
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 11 +++++------
+ 2 files changed, 14 insertions(+), 6 deletions(-)
+
+commit aca77a8bd471d1fc7d343c0006148da8b543c14c
+Author: Chris Wilson 
+Date:   2007-01-17 18:28:58 +0000
+
+    Bug 395373 - Allow the user to specify backend priorities.
+    
+    2007-01-17  Chris Wilson  
+    
+            Bug 395373 - Allow the user to specify backend priorities.
+    
+            * src/vtedraw.c: (_vte_draw_init_user), (_vte_draw_init_default),
+            (_vte_draw_new):
+                    Scan $ENV{VTE_BACKEND} for the user's preferred backend
+                    and failover to the first working backend.
+                    Discard checking VTE_USE_*
+    
+            * src/vtedraw.h:
+            * src/vteft2.c:
+            * src/vteft2.h:
+            * src/vtegl.c:
+            * src/vtegl.h:
+            * src/vtepango.c:
+            * src/vtepango.h:
+            * src/vtepangox.c:
+            * src/vtepangox.h:
+            * src/vteskel.c: (_vte_skel_check), (_vte_skel_create),
+            (_vte_skel_destroy), (_vte_skel_start):
+            * src/vteskel.h:
+            * src/vtexft.c:
+            * src/vtexft.h:
+                    Remove the environment variable field, drop the "Vte" prefix
+                    from the backend names and make the exported structure const.
+    
+    
+    svn path=/trunk/; revision=1447
+
+ ChangeLog       | 27 ++++++++++++++++++
+ src/vtedraw.c   | 86 ++++++++++++++++++++++++++++++++++++++++++---------------
+ src/vtedraw.h   |  4 +--
+ src/vteft2.c    |  4 +--
+ src/vteft2.h    |  2 +-
+ src/vtegl.c     |  4 +--
+ src/vtegl.h     |  2 +-
+ src/vtepango.c  |  4 +--
+ src/vtepango.h  |  2 +-
+ src/vtepangox.c |  4 +--
+ src/vtepangox.h |  2 +-
+ src/vteskel.c   | 29 ++++---------------
+ src/vteskel.h   |  2 +-
+ src/vtexft.c    |  4 +--
+ src/vtexft.h    |  2 +-
+ 15 files changed, 113 insertions(+), 65 deletions(-)
+
+commit 2007589313e4a9bbad44b91d79dfd2b109166eca
+Author: Chris Wilson 
+Date:   2007-01-17 18:10:49 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/iso2022.c: (_vte_iso2022_is_ambiguous):
+            * src/vte-private.h:
+            * src/vte.c: (_vte_terminal_set_default_attributes),
+            (vte_terminal_set_default_tabstops), (vte_terminal_set_encoding),
+            (vte_terminal_set_opacity), (vte_terminal_set_default_colors),
+            (vte_terminal_emit_pending_text_signals),
+            (vte_terminal_feed_child_using_modes),
+            (vte_terminal_hierarchy_changed),
+            (vte_terminal_send_mouse_button_internal),
+            (vte_terminal_maybe_send_mouse_drag), (vte_terminal_set_font),
+            (vte_terminal_set_font_from_string), (vte_terminal_set_size),
+            (vte_terminal_handle_scroll), (vte_terminal_set_scroll_adjustment),
+            (vte_terminal_set_emulation), (vte_terminal_set_termcap),
+            (vte_terminal_init), (vte_terminal_size_allocate),
+            (vte_terminal_unrealize), (vte_terminal_finalize),
+            (vte_terminal_realize), (vte_terminal_determine_colors),
+            (vte_terminal_background_update),
+            (vte_terminal_queue_background_update),
+            (vte_terminal_set_background_transparent),
+            (vte_terminal_set_cursor_blinks),
+            (vte_terminal_set_scrollback_lines), (vte_terminal_reset),
+            (vte_terminal_set_pty):
+            * src/vteseq.c: (vte_sequence_handler_st),
+            (vte_sequence_handler_vb),
+            (vte_sequence_handler_device_status_report),
+            (vte_sequence_handler_dec_device_status_report),
+            (vte_sequence_handler_window_manipulation):
+                    Janitorial work to improve code readability and small
+                    micro-optimisations, such as use the length returned by
+                    g_snprintf rather then calling strlen on the result or just
+                    using a constant string.
+    
+    
+    svn path=/trunk/; revision=1446
+
+ ChangeLog         |  36 +++++++++
+ src/iso2022.c     |   2 +-
+ src/vte-private.h |   3 +-
+ src/vte.c         | 226 ++++++++++++++++++++++++++++--------------------------
+ src/vteseq.c      | 102 ++++++++++++------------
+ 5 files changed, 202 insertions(+), 167 deletions(-)
+
+commit 8d819414955071192d09f416aa9040ce3bd230f1
+Author: Chris Wilson 
+Date:   2007-01-17 18:07:37 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/ring.h:
+                    Make the debug checks conditional on VTE_DEBUG.
+    
+    
+    svn path=/trunk/; revision=1445
+
+ ChangeLog  | 7 +++++++
+ src/ring.h | 5 +++++
+ 2 files changed, 12 insertions(+)
+
+commit c900468b1c4f178d04424f182836bf058ad61b08
+Author: Chris Wilson 
+Date:   2007-01-17 18:06:56 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/matcher.c: (_vte_matcher_add), (_vte_matcher_create),
+            (_vte_matcher_destroy), (_vte_matcher_new), (_vte_matcher_match),
+            (_vte_matcher_print):
+            * src/matcher.h:
+            * src/table.c: (_vte_table_new):
+            * src/table.h:
+            * src/trie.c: (_vte_trie_new):
+            * src/trie.h:
+                    _vte_match_match() is called extremely frequently, and the
+                    switch shows up on the profiles. Replace the switch with a
+                    function pointer obtained by introducing function tables for
+                    the matcher implementations.
+    
+    
+    svn path=/trunk/; revision=1444
+
+ ChangeLog     | 17 +++++++++++++
+ src/matcher.c | 78 ++++++++++++++++-------------------------------------------
+ src/matcher.h | 23 ++++++++++++++++++
+ src/table.c   | 14 ++++++++++-
+ src/table.h   |  2 ++
+ src/trie.c    | 14 ++++++++++-
+ src/trie.h    |  2 ++
+ 7 files changed, 91 insertions(+), 59 deletions(-)
+
+commit f5801a4790d57af56dff270c11ebe5438f283ca7
+Author: Chris Wilson 
+Date:   2007-01-17 18:04:46 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_terminal_set_font_full), (vte_terminal_realize):
+                    Don't load a font until the terminal is realized.
+                    Saves decoding 2 or 3 fonts before g-t is mapped.
+    
+    
+    svn path=/trunk/; revision=1443
+
+ ChangeLog         |  9 ++++++++
+ src/vte-private.h |  1 +
+ src/vte.c         | 62 +++++++++++++++++++++++++++++++++++--------------------
+ 3 files changed, 50 insertions(+), 22 deletions(-)
+
+commit 736cd9069881445f07940f20800ac1a7be3a4bef
+Author: Chris Wilson 
+Date:   2007-01-17 18:03:33 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/vteseq.c: (vte_g_array_fill):
+                    Micro-optimise the loop.
+    
+    
+    svn path=/trunk/; revision=1442
+
+ ChangeLog    | 7 +++++++
+ src/vteseq.c | 5 +++--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+commit 3258a9a629ff722be1da2c32cfa996bc2596ee82
+Author: Chris Wilson 
+Date:   2007-01-17 18:02:44 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/vteft2.c: (_vte_ft2_create), (_vte_ft2_start),
+            (_vte_ft2_end), (update_bbox), (_vte_ft2_set_text_font),
+            (_vte_ft2_draw_text):
+            * src/vtergb.c: (_vte_rgb_buffer_new), (_vte_rgb_buffer_resize),
+            (_vte_rgb_draw_color_rgb), (_vte_rgb_copy):
+            * src/vtergb.h:
+                    Reuse converted glyphs within a run.
+    
+    
+    svn path=/trunk/; revision=1441
+
+ ChangeLog    | 12 +++++++++++
+ src/vteft2.c | 61 ++++++++++++++++++++++++++---------------------------
+ src/vtergb.c | 68 ++++++++++++++++++++++++++++++++++++++++++++----------------
+ src/vtergb.h |  2 ++
+ 4 files changed, 95 insertions(+), 48 deletions(-)
+
+commit d09749def08e9b2485fd6bca6962c6be2e2d203a
+Author: Chris Wilson 
+Date:   2007-01-17 18:01:44 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/vteconv.c: (_vte_conv_utf8_strlen), (_vte_conv):
+                    Micro-optimise the loops.
+    
+    
+    svn path=/trunk/; revision=1440
+
+ ChangeLog     |  7 +++++++
+ src/vteconv.c | 33 +++++++++++++--------------------
+ 2 files changed, 20 insertions(+), 20 deletions(-)
+
+commit c06f39b7c406ff785b9cdd84d5554a916e9a6660
+Author: Chris Wilson 
+Date:   2007-01-17 18:00:51 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/vteglyph.c: (_vte_glyph_free), (_vte_cached_glyph_free),
+            (_vte_glyph_cache_new), (_vte_glyph_cache_free),
+            (_vte_glyph_cache_set_font_description),
+            (_vte_glyph_cache_has_char), (_vte_glyph_remap_char),
+            (_vte_glyph_get_uncached), (_vte_glyph_get), (_vte_glyph_draw):
+            * src/vteglyph.h:
+                    Avoid the double glyph lookup in _vte_glyph_get and
+                    replace the tree with a hash.
+    
+    
+    svn path=/trunk/; revision=1439
+
+ ChangeLog      | 13 ++++++++
+ src/vteglyph.c | 93 ++++++++++++++++++++++++----------------------------------
+ src/vteglyph.h |  2 +-
+ 3 files changed, 52 insertions(+), 56 deletions(-)
+
+commit 24a1c9033fa36e79e8d1a5caee4d1bf22774b50c
+Author: Chris Wilson 
+Date:   2007-01-17 17:58:56 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/iso2022.c: (_vte_iso2022_state_new),
+            (_vte_iso2022_state_free), (_vte_iso2022_state_set_codeset):
+            * src/trie.c: (_vte_trie_add), (convert_mbstowcs):
+            * src/utf8echo.c: (main):
+            * src/vte.c: (vte_terminal_set_encoding), (vte_terminal_send),
+            (vte_terminal_init), (vte_terminal_finalize),
+            (vte_terminal_set_word_chars):
+            * src/vteconv.c: (_vte_conv_open), (_vte_conv_close), (_vte_conv):
+            * src/vteconv.h:
+            * src/vteseq.c: (vte_sequence_handler_set_title_internal):
+                    s/(VteConv)-1/VTE_INVALID_CONV/
+    
+    
+    svn path=/trunk/; revision=1438
+
+ ChangeLog      | 16 ++++++++++++++++
+ src/iso2022.c  | 10 +++++-----
+ src/trie.c     |  4 ++--
+ src/utf8echo.c |  2 +-
+ src/vte.c      | 14 +++++++-------
+ src/vteconv.c  |  6 +++---
+ src/vteconv.h  |  1 +
+ src/vteseq.c   |  2 +-
+ 8 files changed, 36 insertions(+), 19 deletions(-)
+
+commit 0de19093d8b5d24c4ded623e938d7a1ffb21214b
+Author: Chris Wilson 
+Date:   2007-01-17 17:58:01 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/vte.c: (_vte_new_row_data), (_vte_new_row_data_sized),
+            (_vte_terminal_find_row_data), (_vte_row_data_find_charcell),
+            (vte_line_is_wrappable), (vte_terminal_extend_selection),
+            (vte_terminal_draw_row):
+                    Refactor vte_find_row_data to simplify and improve
+                    some logic.
+    
+    
+    svn path=/trunk/; revision=1437
+
+ ChangeLog |  11 ++++
+ src/vte.c | 192 ++++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 111 insertions(+), 92 deletions(-)
+
+commit cbb43c93086847789a92faa03d6837f2ef24df63
+Author: Chris Wilson 
+Date:   2007-01-17 17:56:49 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/vte.c: (vte_g_array_fill), (vte_terminal_emit_commit),
+            (_vte_terminal_ensure_cursor), (_vte_terminal_insert_char),
+            (_vte_terminal_fork_basic), (vte_terminal_process_incoming),
+            (vte_terminal_key_press), (vte_terminal_visibility_notify),
+            (vte_terminal_apply_metrics), (vte_terminal_paint),
+            (vte_terminal_expose):
+                    Callgrind driven rewrite of critical loops.
+    
+    
+    svn path=/trunk/; revision=1436
+
+ ChangeLog |  12 ++++
+ src/vte.c | 196 +++++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 115 insertions(+), 93 deletions(-)
+
+commit b599a37352fc35337fad518b6866e95c7e248445
+Author: Chris Wilson 
+Date:   2007-01-17 17:55:03 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/vte-private.h:
+            * src/vte.c: (_vte_terminal_connect_pty_write),
+            (_vte_terminal_disconnect_pty_write), (vte_terminal_io_read),
+            (vte_terminal_feed), (vte_terminal_feed_child_binary),
+            (vte_terminal_init), (vte_terminal_unrealize),
+            (add_process_timeout), (add_update_timeout),
+            (remove_process_timeout), (vte_terminal_stop_processing),
+            (vte_terminal_is_processing), (vte_terminal_start_processing),
+            (process_timeout), (update_repeat_timeout), (update_timeout):
+                    The rate-limiting step is the display update - we do not need
+                    to process input faster than we are displaying it. So use the
+                    update display timeout to process new input (and dirty some
+                    more pixels).
+    
+    
+    svn path=/trunk/; revision=1435
+
+ ChangeLog         |  19 +++++
+ src/vte-private.h |   5 +-
+ src/vte.c         | 244 +++++++++++++++++++++---------------------------------
+ 3 files changed, 116 insertions(+), 152 deletions(-)
+
+commit 9e9d2c65c1687d10d3d83ab13ecbe203ba36ae18
+Author: Chris Wilson 
+Date:   2007-01-17 17:49:23 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/interpret.c: (main):
+            * src/iso2022.c: (_vte_iso2022_fragment_input),
+            (_vte_iso2022_process), (main):
+            * src/vte.c: (vte_terminal_match_contents_refresh),
+            (vte_terminal_process_incoming), (vte_terminal_init),
+            (vte_terminal_set_word_chars):
+            * src/vteaccess.c:
+            (vte_terminal_accessible_update_private_data_if_needed):
+            * src/vtefc.c: (_vte_fc_patterns_from_pango_font_desc):
+            * src/vtefc.h:
+            * src/vteglyph.c: (_vte_glyph_cache_new), (_vte_glyph_cache_free),
+            (_vte_glyph_cache_set_font_description):
+            * src/vteglyph.h:
+            * src/vteregex.c: (_vte_regex_sort_matches):
+            * src/vtexft.c: (_vte_xft_font_open), (_vte_xft_font_close),
+            (_vte_xft_font_for_char):
+                    s/g_array_new(TRUE, TRUE/g_array_new(FALSE, FALSE/
+                    All uses of GArray respect their lengths and do not
+                    zero-termination or untouched members to be cleared.
+    
+    
+    svn path=/trunk/; revision=1434
+
+ ChangeLog       | 24 ++++++++++++++++++++++++
+ src/interpret.c |  2 +-
+ src/iso2022.c   | 15 +++++++++------
+ src/vte.c       | 10 +++++-----
+ src/vteaccess.c |  9 +++------
+ src/vtefc.c     |  6 +++---
+ src/vtefc.h     |  2 +-
+ src/vteglyph.c  | 20 +++++++++-----------
+ src/vteglyph.h  |  2 +-
+ src/vteregex.c  |  2 +-
+ src/vtexft.c    | 49 ++++++++++++++++++++++---------------------------
+ 11 files changed, 79 insertions(+), 62 deletions(-)
+
+commit 7c070ed56f33e131f618b5929fe9dbb0e6a27d76
+Author: Chris Wilson 
+Date:   2007-01-17 17:46:52 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/iso2022.c: (_vte_iso2022_state_free):
+            * src/matcher.c: (_vte_matcher_free_params_array):
+            * src/ring.c: (_vte_ring_free):
+            * src/table.c: (_vte_table_free):
+            * src/trie.c: (_vte_trie_match):
+            * src/vte.c: (_vte_terminal_match_contents_clear),
+            (_vte_terminal_fork_basic),
+            (vte_terminal_get_text_range_maybe_wrapped), (vte_terminal_copy),
+            (vte_terminal_finalize), (vte_terminal_draw_cells_with_attributes):
+            * src/vteaccess.c: (vte_terminal_accessible_free_private_data):
+            * src/vtebg.c: (vte_bg_root_pixmap), (vte_bg_cache_item_free):
+            * src/vteconv.c: (_vte_conv_close):
+            * src/vtedraw.c: (_vte_draw_free):
+            * src/vteft2.c: (_vte_ft2_destroy):
+            * src/vtegl.c: (_vte_gl_destroy):
+            * src/vteglyph.c: (_vte_glyph_cache_free):
+            * src/vtepango.c: (_vte_pango_destroy):
+            * src/vtepangox.c: (_vte_pango_x_destroy):
+            * src/vtergb.c: (_vte_rgb_buffer_new), (_vte_rgb_buffer_free):
+            * src/vteseq.c: (vte_sequence_handler_se),
+            (vte_sequence_handler_so):
+            * src/vteskel.c: (_vte_skel_destroy):
+            * src/vtexft.c: (_vte_xft_font_close), (_vte_xft_destroy):
+                    Do not zero memory in destructors, as glib will zero all
+                    freed memory if G_DEBUG=gc-friendly.
+    
+    
+    svn path=/trunk/; revision=1433
+
+ ChangeLog       | 30 +++++++++++++++++++++++++
+ src/iso2022.c   | 15 -------------
+ src/matcher.c   |  6 +----
+ src/ring.c      |  5 -----
+ src/table.c     |  3 ---
+ src/trie.c      |  6 +----
+ src/vte.c       | 70 ++++++---------------------------------------------------
+ src/vteaccess.c |  4 ----
+ src/vtebg.c     | 12 ++--------
+ src/vteconv.c   |  9 --------
+ src/vtedraw.c   |  4 ----
+ src/vteft2.c    |  4 ----
+ src/vtegl.c     | 12 ----------
+ src/vteglyph.c  | 15 ++-----------
+ src/vtepango.c  | 10 ---------
+ src/vtepangox.c | 10 ---------
+ src/vtergb.c    | 11 ++-------
+ src/vteseq.c    | 40 +++++++++------------------------
+ src/vteskel.c   |  6 -----
+ src/vtexft.c    | 20 -----------------
+ 20 files changed, 55 insertions(+), 237 deletions(-)
+
+commit 097a0979e15cb02c93da0f166b29451f6104175a
+Author: Chris Wilson 
+Date:   2007-01-17 17:45:20 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/reaper.c: (vte_reaper_add_child), (vte_reaper_init),
+            (vte_reaper_constructor), (vte_reaper_finalize),
+            (vte_reaper_class_init), (vte_reaper_get), (main):
+            * src/vte.c: (G_DEFINE_TYPE_WITH_CODE), (_vte_terminal_fork_basic),
+            (vte_terminal_key_press), (vte_terminal_init), (vte_terminal_show),
+            (vte_terminal_finalize), (vte_terminal_get_accessible),
+            (vte_terminal_class_init):
+            * src/vteaccess.c: (vte_terminal_initialize),
+            (vte_terminal_accessible_finalize),
+            (vte_terminal_accessible_class_init),
+            (vte_terminal_accessible_get_type),
+            (vte_terminal_accessible_factory_init),
+            (vte_terminal_accessible_factory_new):
+            * src/vtebg.c: (vte_bg_native_new), (vte_bg_finalize),
+            (vte_bg_class_init), (vte_bg_init), (vte_bg_get_for_screen),
+            (vte_bg_cache_item_free), (vte_bg_cache_prune_int),
+            (_vte_bg_resize_pixbuf), (vte_bg_set_root_pixmap),
+            (vte_bg_cache_add), (vte_bg_cache_search), (vte_bg_get_pixmap),
+            (vte_bg_get_pixbuf):
+                    Use GObject boiler-plate code (G_DEFINE_TYPE),
+                    as opposed to open coding.
+    
+    
+    svn path=/trunk/; revision=1432
+
+ ChangeLog       |  26 +++++++
+ src/reaper.c    |  91 ++++++++---------------
+ src/vte.c       |  96 ++++++++----------------
+ src/vteaccess.c | 141 ++++++++++++++----------------------
+ src/vtebg.c     | 221 +++++++++++++++++++++++++++-----------------------------
+ 5 files changed, 248 insertions(+), 327 deletions(-)
+
+commit ee14604f30ecfaaaf7aa4f99962cdef1470bcc24
+Author: Chris Wilson 
+Date:   2007-01-17 17:43:17 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/vte-private.h:
+            * src/vte.c: (vte_free_row_data), (vte_g_array_fill),
+            (vte_terminal_find_charcell), (vte_terminal_preedit_width),
+            (vte_terminal_preedit_length), (_vte_invalidate_cursor_once),
+            (vte_invalidate_cursor_periodic), (vte_terminal_deselect_all),
+            (vte_terminal_set_default_tabstops),
+            (vte_terminal_match_contents_refresh), (vte_terminal_cursor_new),
+            (vte_terminal_match_check_internal),
+            (vte_terminal_emit_adjustment_changed),
+            (vte_terminal_queue_adjustment_changed),
+            (vte_terminal_scroll_pages), (vte_terminal_maybe_scroll_to_top),
+            (vte_terminal_maybe_scroll_to_bottom),
+            (_vte_terminal_set_pointer_visible), (vte_terminal_new),
+            (vte_terminal_set_color_internal), (vte_terminal_set_color_bold),
+            (vte_terminal_set_color_dim), (vte_terminal_set_color_foreground),
+            (vte_terminal_set_color_background),
+            (vte_terminal_set_color_cursor),
+            (vte_terminal_set_color_highlight), (vte_terminal_handle_sequence),
+            (vte_terminal_catch_child_exited),
+            (_vte_terminal_connect_pty_read),
+            (_vte_terminal_connect_pty_write), (_vte_terminal_fork_basic),
+            (vte_terminal_eof), (vte_terminal_im_reset),
+            (vte_terminal_process_incoming), (vte_terminal_io_read),
+            (vte_terminal_io_write), (vte_terminal_send),
+            (vte_terminal_im_commit), (vte_terminal_im_preedit_start),
+            (vte_terminal_im_preedit_end), (vte_terminal_im_preedit_changed),
+            (vte_terminal_configure_toplevel),
+            (vte_terminal_hierarchy_changed), (vte_terminal_style_changed),
+            (add_cursor_timeout), (vte_terminal_key_press), (vte_same_class),
+            (vte_line_is_wrappable), (vte_terminal_paste_cb),
+            (vte_terminal_send_mouse_button_internal),
+            (vte_terminal_maybe_send_mouse_drag), (vte_terminal_clear_cb),
+            (vte_terminal_copy_cb),
+            (vte_terminal_get_text_range_maybe_wrapped),
+            (vte_terminal_clipboard_get), (vte_terminal_copy),
+            (vte_terminal_paste), (vte_terminal_autoscroll),
+            (vte_terminal_start_autoscroll), (vte_terminal_motion_notify),
+            (vte_terminal_button_press), (vte_terminal_button_release),
+            (vte_terminal_focus_in), (vte_terminal_focus_out),
+            (vte_terminal_visibility_notify), (vte_terminal_apply_metrics),
+            (vte_terminal_set_font_full), (vte_terminal_refresh_size),
+            (vte_terminal_handle_scroll), (vte_terminal_set_scroll_adjustment),
+            (vte_terminal_connect_xft_settings),
+            (vte_terminal_disconnect_xft_settings),
+            (_vte_terminal_codeset_changed_cb), (vte_terminal_init),
+            (vte_terminal_size_request), (vte_terminal_size_allocate),
+            (vte_terminal_show), (root_pixmap_changed_cb),
+            (vte_terminal_unrealize), (vte_terminal_finalize),
+            (vte_terminal_realize), (vte_terminal_determine_colors),
+            (vte_terminal_paint), (vte_terminal_expose), (vte_terminal_scroll),
+            (vte_terminal_get_accessible), (vte_terminal_im_append_menuitems),
+            (vte_terminal_background_update),
+            (vte_terminal_queue_background_update),
+            (vte_terminal_set_background_image),
+            (vte_terminal_set_background_image_file),
+            (vte_terminal_set_cursor_blinks), (vte_terminal_reset),
+            (vte_terminal_set_pty):
+            * src/vteaccess.c: (vte_terminal_initialize),
+            (vte_terminal_accessible_finalize):
+            * src/vtedraw.c: (_vte_draw_new), (_vte_draw_free),
+            (_vte_draw_start), (_vte_draw_end):
+            * src/vtefc.c: (_vte_fc_transcribe_from_pango_font_description),
+            (_vte_fc_defaults_from_gtk), (_vte_fc_connect_settings_changes),
+            (_vte_fc_disconnect_settings_changes):
+            * src/vteft2.c: (_vte_ft2_destroy),
+            (_vte_ft2_set_background_image), (_vte_ft2_clear):
+            * src/vtegl.c: (_vte_gl_destroy), (_vte_gl_set_background_image),
+            (_vte_gl_clear):
+            * src/vtepango.c: (_vte_pango_destroy), (_vte_pango_start),
+            (_vte_pango_end), (_vte_pango_set_background_image),
+            (_vte_pango_set_text_font):
+            * src/vtepangox.c: (_vte_pango_x_destroy), (_vte_pango_x_start),
+            (_vte_pango_x_end), (_vte_pango_x_set_background_image),
+            (_vte_pango_x_set_text_font):
+            * src/vterdb.c: (_vte_rdb_get):
+            * src/vteseq.c: (vte_sequence_handler_scroll_up_or_down),
+            (vte_sequence_handler_set_title_internal), (vte_terminal_beep),
+            (vte_sequence_handler_do), (vte_sequence_handler_sf),
+            (vte_sequence_handler_sr), (vte_sequence_handler_vb),
+            (vte_sequence_handler_window_manipulation):
+            * src/vteskel.c: (_vte_skel_destroy):
+            * src/vtetree.c: (_vte_tree_new), (_vte_tree_destroy):
+            * src/vtexft.c: (_vte_xft_set_background_image), (_vte_xft_clear):
+                    Remove superfluous checks and run-time checked type casts.
+    
+    
+    svn path=/trunk/; revision=1431
+
+ ChangeLog         |  89 +++++++++
+ src/vte-private.h |   2 +-
+ src/vte.c         | 550 +++++++++++++++++-------------------------------------
+ src/vteaccess.c   |  68 +++----
+ src/vtedraw.c     |  10 +-
+ src/vtefc.c       |  18 +-
+ src/vteft2.c      |  10 +-
+ src/vtegl.c       |  10 +-
+ src/vtepango.c    |  50 ++---
+ src/vtepangox.c   |  56 +++---
+ src/vterdb.c      |   4 +-
+ src/vteseq.c      |  26 +--
+ src/vteskel.c     |   4 +-
+ src/vtetree.c     |   4 +-
+ src/vtexft.c      |   8 +-
+ 15 files changed, 394 insertions(+), 515 deletions(-)
+
+commit 2c0c0eafd9681470b399c9e813e19ca27acf3b2b
+Author: Chris Wilson 
+Date:   2007-01-17 17:41:36 +0000
+
+    As part of Bug 397439.
+    
+    2007-01-17  Chris Wilson  
+    
+            As part of Bug 397439.
+    
+            * src/debug.c:
+            * src/iso2022.c: (_vte_iso2022_ambiguous_width_guess),
+            (_vte_iso2022_state_new), (_vte_iso2022_state_set_codeset),
+            (process_8_bit_sequence), (process_cdata), (process_control),
+            (_vte_iso2022_process):
+            * src/keymap.c: (_vte_keymap_map):
+            * src/matcher.c: (_vte_matcher_init), (_vte_matcher_create),
+            (_vte_matcher_destroy):
+            * src/pty.c: (_vte_pty_run_on_pty), (_vte_pty_fork_on_pty_name),
+            (_vte_pty_fork_on_pty_fd), (_vte_pty_set_size),
+            (_vte_pty_get_size), (_vte_pty_ptsname), (_vte_pty_open_unix98),
+            (_vte_pty_open_with_helper), (_vte_pty_open), (main):
+            * src/reaper.c: (vte_reaper_emit_signal),
+            (vte_reaper_child_watch_cb), (vte_reaper_init),
+            (vte_reaper_finalize):
+            * src/reflect.c: (text_changed_insert), (text_changed_delete):
+            * src/ring.c: (_vte_ring_insert), (_vte_ring_insert_preserve),
+            (_vte_ring_remove), (scrolled_off), (main):
+            * src/slowcat.c: (main):
+            * src/table.c: (_vte_table_printi), (_vte_table_print):
+            * src/trie.c: (char_class_string_extract):
+            * src/vte.c: (_vte_invalidate_cursor_once),
+            (vte_terminal_emit_selection_changed), (vte_terminal_emit_commit),
+            (vte_terminal_emit_emulation_changed),
+            (vte_terminal_emit_encoding_changed),
+            (vte_terminal_emit_child_exited),
+            (_vte_terminal_emit_contents_changed),
+            (vte_terminal_emit_cursor_moved), (vte_terminal_emit_eof),
+            (vte_terminal_emit_char_size_changed),
+            (_vte_terminal_emit_status_line_changed),
+            (vte_terminal_emit_increase_font_size),
+            (vte_terminal_emit_decrease_font_size),
+            (_vte_terminal_emit_text_inserted),
+            (_vte_terminal_emit_text_deleted),
+            (vte_terminal_emit_text_modified),
+            (vte_terminal_emit_text_scrolled), (vte_terminal_deselect_all),
+            (vte_terminal_match_check_internal), (vte_terminal_match_check),
+            (vte_terminal_emit_adjustment_changed),
+            (vte_terminal_queue_adjustment_changed),
+            (_vte_terminal_adjust_adjustments), (vte_terminal_scroll_pages),
+            (vte_terminal_maybe_scroll_to_bottom), (vte_terminal_set_encoding),
+            (_vte_terminal_set_pointer_visible), (vte_terminal_new),
+            (vte_terminal_generate_bold), (_vte_terminal_insert_char),
+            (display_control_sequence), (vte_terminal_fork_command),
+            (vte_terminal_emit_pending_text_signals),
+            (vte_terminal_process_incoming), (vte_terminal_io_write),
+            (vte_terminal_send), (vte_terminal_im_commit),
+            (vte_terminal_im_preedit_start), (vte_terminal_im_preedit_end),
+            (vte_terminal_im_preedit_changed),
+            (vte_terminal_configure_toplevel),
+            (vte_terminal_hierarchy_changed), (vte_terminal_style_changed),
+            (vte_terminal_key_press), (vte_terminal_paste_cb),
+            (vte_terminal_match_hilite_clear), (vte_terminal_match_hilite),
+            (vte_terminal_clear_cb), (vte_terminal_copy_cb),
+            (vte_terminal_copy), (vte_terminal_paste),
+            (vte_terminal_start_selection), (vte_terminal_extend_selection),
+            (vte_terminal_autoscroll), (vte_terminal_motion_notify),
+            (vte_terminal_button_press), (vte_terminal_button_release),
+            (vte_terminal_focus_in), (vte_terminal_focus_out),
+            (vte_terminal_set_font_full), (vte_terminal_set_size),
+            (vte_terminal_handle_scroll), (vte_terminal_set_emulation),
+            (vte_terminal_set_termcap), (vte_terminal_reset_rowdata),
+            (vte_terminal_fc_settings_changed), (vte_terminal_init),
+            (vte_terminal_size_request), (vte_terminal_size_allocate),
+            (vte_terminal_show), (vte_terminal_unrealize),
+            (vte_terminal_finalize), (vte_terminal_realize),
+            (vte_terminal_draw_cells), (_vte_terminal_map_pango_color),
+            (vte_terminal_paint), (vte_terminal_scroll),
+            (vte_terminal_class_init), (vte_terminal_get_type),
+            (vte_terminal_copy_clipboard), (vte_terminal_paste_clipboard),
+            (vte_terminal_copy_primary), (vte_terminal_paste_primary),
+            (vte_terminal_background_update),
+            (vte_terminal_queue_background_update),
+            (vte_terminal_set_background_saturation),
+            (vte_terminal_set_background_tint_color),
+            (vte_terminal_set_background_transparent),
+            (vte_terminal_set_background_image),
+            (vte_terminal_set_background_image_file),
+            (vte_terminal_set_word_chars):
+            * src/vteaccess.c: (emit_text_caret_moved),
+            (emit_text_changed_insert), (emit_text_changed_delete),
+            (vte_terminal_accessible_update_private_data_if_needed),
+            (vte_terminal_accessible_invalidate_cursor),
+            (vte_terminal_accessible_finalize),
+            (vte_terminal_accessible_get_text),
+            (vte_terminal_accessible_get_text_somewhere),
+            (vte_terminal_accessible_text_init),
+            (vte_terminal_accessible_component_init),
+            (vte_terminal_accessible_factory_new):
+            * src/vteapp.c: (main):
+            * src/vtebg.c: (vte_bg_root_pixmap), (_vte_bg_resize_pixbuf):
+            * src/vtedraw.c: (_vte_draw_new):
+            * src/vtepango.c: (_vte_pango_set_text_font):
+            * src/vtepangox.c: (_vte_pango_x_set_text_font):
+            * src/vteseq.c: (vte_terminal_emit_deiconify_window),
+            (vte_terminal_emit_iconify_window),
+            (vte_terminal_emit_icon_title_changed),
+            (vte_terminal_emit_window_title_changed),
+            (vte_terminal_emit_raise_window), (vte_terminal_emit_lower_window),
+            (vte_terminal_emit_maximize_window),
+            (vte_terminal_emit_refresh_window),
+            (vte_terminal_emit_restore_window),
+            (vte_terminal_emit_move_window), (vte_terminal_emit_resize_window),
+            (vte_sequence_handler_set_title_internal),
+            (vte_sequence_handler_decset_internal), (vte_sequence_handler_bt),
+            (vte_sequence_handler_application_keypad),
+            (vte_sequence_handler_normal_keypad),
+            (vte_sequence_handler_window_manipulation):
+            * src/vtetc.c: (main):
+            * src/vtexft.c: (_vte_xft_set_text_font):
+                    s/fprintf(stderr,/g_printerr(/
+    
+    
+    
+    svn path=/trunk/; revision=1430
+
+ ChangeLog       | 116 ++++++++++++++++++++++
+ src/debug.c     |   1 -
+ src/iso2022.c   |  74 +++++++-------
+ src/keymap.c    |  60 ++++++-----
+ src/matcher.c   |  11 +-
+ src/pty.c       |  52 +++++-----
+ src/reaper.c    |   8 +-
+ src/reflect.c   |   6 +-
+ src/ring.c      |  52 +++++-----
+ src/slowcat.c   |   2 +-
+ src/table.c     |   4 +-
+ src/trie.c      |   2 +-
+ src/vte.c       | 303 ++++++++++++++++++++++++++++----------------------------
+ src/vteaccess.c |  34 +++----
+ src/vteapp.c    |   4 +-
+ src/vtebg.c     |   4 +-
+ src/vtedraw.c   |   2 +-
+ src/vtepango.c  |   2 +-
+ src/vtepangox.c |   2 +-
+ src/vteseq.c    |  96 +++++++++---------
+ src/vtetc.c     |   4 +-
+ src/vtexft.c    |   2 +-
+ 22 files changed, 476 insertions(+), 365 deletions(-)
+
+commit 38a457f890a73873c3b6314a96c77678f56fafb9
+Author: Chris Wilson 
+Date:   2007-01-17 17:32:38 +0000
+
+    Only invalidate groups of inserted chars and not the whole bbox. This
+    
+    2007-01-17  Chris Wilson  
+    
+            Only invalidate groups of inserted chars and not the whole bbox.
+            This speeds up applications like vim which maintain a status line
+            at the bottom of the screen. Fixes bug 161342.
+    
+            * src/vte-private.h:
+            * src/vte.c: (update_regions), (_vte_invalidate_cells),
+            (_vte_invalidate_all), (_vte_terminal_scroll_region),
+            (vte_terminal_process_incoming), (reset_update_regions),
+            (remove_update_timeout), (update_repeat_timeout), (update_timeout):
+    
+    
+    svn path=/trunk/; revision=1429
+
+ ChangeLog         |  12 ++++
+ src/vte-private.h |   2 +-
+ src/vte.c         | 207 +++++++++++++++++++++++++++++++++---------------------
+ 3 files changed, 141 insertions(+), 80 deletions(-)
+
+commit 650bf5cc513a23eedd5be92576b5d634a8c27c28
+Author: Behdad Esfahbod 
+Date:   2007-01-15 23:37:45 +0000
+
+    Bug 387171 – vte fails to install on FreeBSD due to missing header Patch
+    
+    2007-01-15  Behdad Esfahbod  
+    
+            Bug 387171 – vte fails to install on FreeBSD due to missing header
+            Patch from Roy Marples
+    
+            * src/vteseq.c: #include 
+    
+    
+    svn path=/trunk/; revision=1428
+
+ ChangeLog    | 7 +++++++
+ src/vteseq.c | 1 +
+ 2 files changed, 8 insertions(+)
+
+commit 499b55eebb9647308c575813d863c0e10e45a68f
+Author: Behdad Esfahbod 
+Date:   2007-01-15 18:20:34 +0000
+
+    Bug 396831 – Unable to compile without X Patch from Chris Wilson
+    
+    2007-01-15  Behdad Esfahbod  
+    
+            Bug 396831 – Unable to compile without X
+            Patch from Chris Wilson
+    
+            * src/vtebg.c (_vte_bg_display_sync), (vte_bg_root_pixmap): Add stubs.
+    
+    
+    svn path=/trunk/; revision=1427
+
+ ChangeLog   |  7 +++++++
+ src/vtebg.c | 10 ++++++++++
+ 2 files changed, 17 insertions(+)
+
+commit 04bfc12f0a66c9e6d57b488468c6f77532876848
+Author: Ryan Lortie 
+Date:   2007-01-10 01:18:47 +0000
+
+    Bug 394890 – Segfault when running vte or gnome-terminal
+    
+    2007-01-09  Ryan Lortie  
+    
+            Bug 394890 – Segfault when running vte or gnome-terminal
+    
+            * src/vtetc.c (_vte_termcap_find_string): change 'int' to 'gssize' to
+            match previous fixup.  Hopefully that does it. :)
+    
+    
+    svn path=/trunk/; revision=1426
+
+ ChangeLog   | 7 +++++++
+ src/vtetc.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 91024830d19ceb0a0338cc944477d01fca3d9fc3
+Author: Behdad Esfahbod 
+Date:   2007-01-09 03:32:25 +0000
+
+    Remove .cvsignore files (moved to svn:ignore prop)
+    
+    svn path=/trunk/; revision=1424
+
+ .cvsignore                  | 34 ----------------------------------
+ doc/.cvsignore              |  2 --
+ doc/openi18n/.cvsignore     |  3 ---
+ doc/reference/.cvsignore    | 21 ---------------------
+ gnome-pty-helper/.cvsignore | 19 -------------------
+ po/.cvsignore               | 12 ------------
+ python/.cvsignore           |  3 ---
+ src/.cvsignore              | 29 -----------------------------
+ termcaps/.cvsignore         |  2 --
+ 9 files changed, 125 deletions(-)
+
+commit b944a903a3bff70ea9e155a5bcce2f80dffd0f43 (tag: vte_0_15_1)
+Author: Behdad Esfahbod 
+Date:   2007-01-09 00:03:58 +0000
+
+    Released vte-0.15.1.
+    
+    2007-01-08  Behdad Esfahbod  
+    
+            Released vte-0.15.1.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.15.1.
+    
+            * src/Makefile.am: Bumped libtool version to 10:8:1.
+    
+    
+    svn path=/trunk/; revision=1422
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            |  9 +++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 21 insertions(+), 2 deletions(-)
+
+commit 00062d4e4d42a1d230893b8da3affe6901551a9c
+Author: Ryan Lortie 
+Date:   2006-12-29 09:53:16 +0000
+
+    Small fix to the previous patch.
+    
+    2006-12-29  Ryan Lortie  
+    
+            Small fix to the previous patch.
+    
+            * src/vtetc.c (_vte_termcap_find_string_length): 'int' is not the same
+            as 'gssize' on 64bit platforms, causing compile errors.
+
+ ChangeLog   | 7 +++++++
+ src/vtetc.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 2c7dcf1812cc58d044edd7f065c0b1cfed00247f
+Author: Djihed Afifi 
+Date:   2006-12-27 22:51:38 +0000
+
+    Updated Arabic Translation.
+
+ po/ChangeLog | 4 ++++
+ po/ar.po     | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 673b596469398389c61e98ea83e52c4c30319731
+Author: Ryan Lortie 
+Date:   2006-12-27 21:17:05 +0000
+
+    Bug 354061 – Excessive use of strlen by _vte_termcap_create
+    
+    2006-12-27  Ryan Lortie  
+    
+            Bug 354061 – Excessive use of strlen by _vte_termcap_create
+    
+            * src/vtetc.c: near-complete rewrite to use a GMappedFile rather than
+            reading a line at a time with excessive strlen/realloc use.
+    
+            * str/matcher.c: this shouldn't be calling the strip code as the
+            strings it has are already unescaped.
+
+ ChangeLog     |   10 +
+ src/matcher.c |   16 +-
+ src/vtetc.c   | 1309 +++++++++++++++++++++++++--------------------------------
+ 3 files changed, 586 insertions(+), 749 deletions(-)
+
+commit 9f1df4993cc4c92c5a989e4337e08429b730c7fc
+Author: Ryan Lortie 
+Date:   2006-12-27 21:10:34 +0000
+
+    Bug 387475 – Gtk-Warning spew in gnome-terminal
+    
+    2006-12-27  Ryan Lortie  
+    
+            Bug 387475 – Gtk-Warning spew in gnome-terminal
+    
+            Problem introduced by fix to bug 356552.
+    
+            * src/vte.c (vte_invalidate_cursor_periodic): Add a temporary backward
+            compatibility hack to prevent GObject from spewing warnings about
+            missing GtkSettings properties in old GTK versions.
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 27 ++++++++++++++++++++++++---
+ 2 files changed, 34 insertions(+), 3 deletions(-)
+
+commit 4bb0946b36d7906425fbebb2472bdf4ba3964caa
+Author: Djihed Afifi 
+Date:   2006-12-24 21:53:12 +0000
+
+    Updated Arabic Translation.
+
+ po/ChangeLog |  4 ++++
+ po/ar.po     | 18 +++++++++---------
+ 2 files changed, 13 insertions(+), 9 deletions(-)
+
+commit b702bfd308e1dbce88987a6529a62207125969d8
+Author: Behdad Esfahbod 
+Date:   2006-12-20 18:34:29 +0000
+
+    Bug 387482 – Variable modified in signal handler should be volatile
+    
+    2006-12-20  Behdad Esfahbod  
+    
+            Bug 387482 – Variable modified in signal handler should be volatile
+            Patch from Bastien Nocera
+    
+            * gnome-pty-helper/gnome-pty-helper.c: Make variable "done" volatile.
+
+ ChangeLog                           | 7 +++++++
+ gnome-pty-helper/gnome-pty-helper.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 528dc1831cfe1b4d6916e3520da9ee4d81d135f9
+Author: Raivis Dejus 
+Date:   2006-12-19 14:36:31 +0000
+
+    Updated Latvian Translation.
+    
+    2006-12-19  Raivis Dejus 
+    
+            * lv.po: Updated Latvian Translation.
+
+ po/ChangeLog |  4 ++++
+ po/lv.po     | 59 +++++++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 37 insertions(+), 26 deletions(-)
+
+commit 798313aeae10d5165472f993bc6dfde4ab9adeac
+Author: Behdad Esfahbod 
+Date:   2006-12-08 21:48:40 +0000
+
+    Red Hat Bug 218626: "last -ad" print junk in last column
+    
+    2006-12-08  Behdad Esfahbod  
+    
+            Red Hat Bug 218626: "last -ad" print junk in last column
+    
+            * gnome-pty-helper/gnome-utmp.c (write_logout_record),
+            (write_login_record): Don't gettimeofday directly into ut.ut_tv.
+            That overruns on x86_64.
+
+ ChangeLog                     |  8 ++++++++
+ gnome-pty-helper/gnome-utmp.c | 10 ++++++++--
+ 2 files changed, 16 insertions(+), 2 deletions(-)
+
+commit 7a400dc0a3e7e8ac88fc359597a98ce43e1c18ea (tag: vte_0_15_0)
+Author: Behdad Esfahbod 
+Date:   2006-12-05 23:01:17 +0000
+
+    Released vte-0.15.0.
+    
+    2006-12-05  Behdad Esfahbod  
+    
+            Released vte-0.15.0.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.15.0.
+    
+            * src/Makefile.am: Bumped libtool version to 10:7:1.
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            |  7 +++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 19 insertions(+), 2 deletions(-)
+
+commit f807d1d8e4d78e51889c2b69e697d5f0c6db81c0
+Author: Ryan Lortie 
+Date:   2006-12-05 22:28:39 +0000
+
+    Bug 356552 – cursor timeout runs all the time
+    
+    2006-12-05  Ryan Lortie  
+    
+            Bug 356552 – cursor timeout runs all the time
+    
+            * src/vte-private.h: Rework how cursor blinking works.
+            * src/vte.c: Rework how cursor blinking works.  Only register the
+            cursor blink callback when cursor blink is enabled and the window
+            is focused.
+
+ ChangeLog         |   9 +++
+ src/vte-private.h |   3 +-
+ src/vte.c         | 201 +++++++++++++++++++++++++++---------------------------
+ 3 files changed, 111 insertions(+), 102 deletions(-)
+
+commit 12954eec3737d881e04c12ec503ee58581148e78
+Author: Wouter Bolsterlee 
+Date:   2006-11-19 18:48:54 +0000
+
+    Translation updated by GNOME PL Team.
+    
+    2006-11-19  Wouter Bolsterlee  
+    
+            * pl.po: Translation updated by GNOME PL Team.
+
+ po/ChangeLog |  4 ++++
+ po/pl.po     | 47 +++++++++++++++++++++++++----------------------
+ 2 files changed, 29 insertions(+), 22 deletions(-)
+
+commit 6a3b2e9b9d7697980723d3462af1fc4bc1e75846
+Author: Djihed Afifi 
+Date:   2006-11-18 20:30:11 +0000
+
+    Updated Arabic Translation.  QA'ed by Khaled Hosny
+
+ po/ChangeLog |  4 ++++
+ po/ar.po     | 22 +++++++++++-----------
+ 2 files changed, 15 insertions(+), 11 deletions(-)
+
+commit e229967d4abcdabf1c2a4edd0763d9d6fd061b27
+Author: Mariano Suárez-Alvarez 
+Date:   2006-11-17 00:51:03 +0000
+
+    Bug 307396 – Mouse scroll mode not controllable
+    
+    2006-11-16 Mariano Suárez-Alvarez 
+    
+            Bug 307396 – Mouse scroll mode not controllable
+    
+            * src/vte.c(vte_terminal_scroll): make the scrollwheel scroll by tenths of
+            a screen (or 1 line, whichever is bigger) instead of half screens.
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 4 ++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 43b1051c010848db001ccc668d39f7b5169f33ea
+Author: Mariano Suárez-Alvarez 
+Date:   2006-11-16 19:46:01 +0000
+
+    Bug 356602 – const cast warning fixes for libvte Patch by Ryan Lortie
+    
+    2006-11-16 Mariano Suárez-Alvarez 
+    
+            Bug 356602 – const cast warning fixes for libvte
+            Patch by Ryan Lortie (desrt)
+    
+            * src/matcher.h: Use const char * where appropriate.
+            * src/matcher.c: Use const char * where appropriate.  Cast g_strdup
+            to (GCacheDupFunc) to avoid a warning.
+            * src/vtetc.h: Use const char * where appropriate.
+            * src/vtetc.c: Use const char * where appropriate.  Cast g_strdup
+            to (GCacheDupFunc) to avoid a warning.
+            * src/vte.c: Use const char * where appropriate.
+
+ ChangeLog     | 17 +++++++++++++++--
+ src/matcher.c |  9 +++++----
+ src/matcher.h |  2 +-
+ src/vte.c     | 15 ++++++++-------
+ src/vtetc.c   |  7 ++++---
+ src/vtetc.h   |  2 +-
+ 6 files changed, 34 insertions(+), 18 deletions(-)
+
+commit 133c9933b89f3f964d9b844a408a7044f76fb51a
+Author: Djihed Afifi 
+Date:   2006-11-06 12:58:04 +0000
+
+    Added/Updated Arabic Translation.
+
+ po/ChangeLog |  4 ++++
+ po/ar.po     | 29 ++++++++++++++++-------------
+ 2 files changed, 20 insertions(+), 13 deletions(-)
+
+commit 7658723e808f3ddd6f76885cb2e1fa40efae9e79
+Author: Rich Burridge 
+Date:   2006-11-01 20:53:58 +0000
+
+    Fixed bug #150858 - In gnome-terminal, the deleted character is reported
+    
+            * src/vteaccess.c:
+              Fixed bug #150858 - In gnome-terminal, the deleted character
+              is reported as "space".
+
+ ChangeLog       |  6 ++++++
+ src/vteaccess.c | 23 +++++++++++++++++++++++
+ 2 files changed, 29 insertions(+)
+
+commit 9b523e876a5b4f02973f2fea2f8d011f2075488a
+Author: Djihed Afifi 
+Date:   2006-10-30 10:13:46 +0000
+
+    Added/Updated Arabic Translation.
+
+ po/ChangeLog |  4 ++++
+ po/ar.po     | 55 +++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 33 insertions(+), 26 deletions(-)
+
+commit ff2c6d2b7b91453bbc9b9bd016e0a083518b032e
+Author: Christophe Merlet 
+Date:   2006-10-22 09:17:38 +0000
+
+    Updated French translation.
+
+ po/ChangeLog |  4 ++++
+ po/fr.po     | 33 +++++++++++++++++++--------------
+ 2 files changed, 23 insertions(+), 14 deletions(-)
+
+commit c9bd03658fd7ec4b7d9dc60948472fdffe7b5070
+Author: Mariano Suárez-Alvarez 
+Date:   2006-10-17 04:34:40 +0000
+
+    Fix a changelog entry ;-)
+
+ ChangeLog | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit 86b1ccbceaf8b66ab54d6f0dcbb05673f2e868ec
+Author: Behdad Esfahbod 
+Date:   2006-10-13 14:33:04 +0000
+
+    Include vteseq.c
+    
+    2006-10-13  Behdad Esfahbod  
+    
+            * po/POTFILES.in: Include vteseq.c
+
+ ChangeLog      | 4 ++++
+ po/POTFILES.in | 1 +
+ 2 files changed, 5 insertions(+)
+
+commit a2c8d9d9fa460cfd0a68d035d578ca134412b305
+Author: Behdad Esfahbod 
+Date:   2006-10-13 14:31:57 +0000
+
+    Remove Nalin.
+
+ MAINTAINERS | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 027618696701afcb9306161a452a6824900d10fe
+Author: Behdad Esfahbod 
+Date:   2006-10-12 22:55:23 +0000
+
+    NOSPAM Nalin's address.
+
+ AUTHORS | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1f7f3005f24120c260fc2a383841deba32d2e78b
+Author: Mariano Suárez-Alvarez 
+Date:   2006-10-11 04:42:57 +0000
+
+    Bug 337252 – ALT + Arrow keys don't work in irssi through gnome-terminal
+    
+    2006-10-11  Mariano Suárez-Alvarez  
+    
+            Bug 337252 – ALT + Arrow keys don't work in irssi through gnome-terminal
+    
+            * src/keymap.c (_vte_keymap_key_add_key_modifiers): Match the (newer)
+            xterm behavior when reporting modifiers to things running in a terminal.
+
+ ChangeLog    | 7 +++++++
+ src/keymap.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit eebc586eb9f97214634b412b1eea9bd0295dd28a (tag: vte_0_14_1)
+Author: Behdad Esfahbod 
+Date:   2006-10-02 21:02:33 +0000
+
+    Released vte-0.14.1.
+    
+    2006-10-02  Behdad Esfahbod  
+    
+            Released vte-0.14.1.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.14.1.
+    
+            * src/Makefile.am: Bumped libtool version to 10:6:1.
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            | 12 ++++++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 24 insertions(+), 2 deletions(-)
+
+commit 659e0bc92aa43838e532dadf8dbad79b25e16779
+Author: Behdad Esfahbod 
+Date:   2006-10-02 20:44:44 +0000
+
+    Bug 358344 – autoscroll only works one way in fullscreen [PATCH] Patch
+    
+    2006-10-02  Behdad Esfahbod  
+    
+            Bug 358344 – autoscroll only works one way in fullscreen [PATCH]
+            Patch by Egmont Koblinger
+    
+            * src/vte.c (vte_terminal_autoscroll),
+            (vte_terminal_motion_notify): Fix forward autoscrolling in fullscreen
+            mode.
+
+ ChangeLog | 9 +++++++++
+ src/vte.c | 6 +++---
+ 2 files changed, 12 insertions(+), 3 deletions(-)
+
+commit bd3d2802159b051aea079b7f98e3a72cedaefd45
+Author: Behdad Esfahbod 
+Date:   2006-09-20 14:43:07 +0000
+
+    Bug 353756 – font setting cleanup
+    
+    2006-09-20  Behdad Esfahbod  
+    
+            Bug 353756 – font setting cleanup
+    
+            * src/vte.c (vte_terminal_set_font_full): Use 'monospace' family if no
+            font is set on a terminal widget
+    
+            * src/vte.c (vte_terminal_set_font_from_string_full): Don't
+            g_return_if_fail(strlen(name) > 0).  An empty string is a perfectly
+            valid pango font description string.
+    
+            * src/vte.c (vte_terminal_show): Make sure we have a font loaded.
+    
+            * src/vteapp.c (main): Don't fallback on "Monospace 12".  Let the
+            widget decide what font to use if no font is set.
+
+ ChangeLog    | 16 ++++++++++++++++
+ src/vte.c    | 12 +++++++++---
+ src/vteapp.c |  7 +++----
+ 3 files changed, 28 insertions(+), 7 deletions(-)
+
+commit 6e26f51398dbcaee25c248a069050f6798a15ed1
+Author: Ryan Lortie 
+Date:   2006-09-18 20:20:42 +0000
+
+    Bug 356616 – libvte broken with new autotools
+    
+    2006-09-18  Ryan Lortie  
+    
+            Bug 356616 – libvte broken with new autotools
+    
+            * configure.in:
+            * src/Makefile.am: Fix broken variable substitution for newer
+            versions of automake.
+
+ ChangeLog       |  8 ++++++++
+ configure.in    | 24 ------------------------
+ src/Makefile.am |  6 +++++-
+ 3 files changed, 13 insertions(+), 25 deletions(-)
+
+commit f3e6bfce782dc30116cd095c76b2825010c131cb
+Author: Behdad Esfahbod 
+Date:   2006-09-13 21:58:26 +0000
+
+    Bug 354024 – Suppress multiple warnings for missing control sequence
+    
+    2006-09-13  Behdad Esfahbod  
+    
+            Bug 354024 – Suppress multiple warnings for missing control sequence
+            handlers
+            Patch from Chris Wilson
+    
+            * src/vte.c (vte_terminal_handle_sequence): Suppress multiple warnings
+            for missing control sequence handlers in non-debugging builds.
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 12 +++++++++++-
+ 2 files changed, 20 insertions(+), 1 deletion(-)
+
+commit 60a649f43c63cf55cd8829a4a755bbe43e4a9418
+Author: Behdad Esfahbod 
+Date:   2006-09-13 21:52:35 +0000
+
+    Bug 354620 – vte-0.14.0: undefined C code Patch from Ales Nosek
+    
+    2006-09-13  Behdad Esfahbod  
+    
+            Bug 354620 – vte-0.14.0: undefined C code
+            Patch from Ales Nosek
+    
+            * src/ssfe.c (inschar), (dokbdchar): Replace "*(tmp+1)=(*tmp--);"
+            with something well-defined.
+
+ ChangeLog  | 8 ++++++++
+ src/ssfe.c | 9 ++++++---
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+commit 20dc6211ef45c751cb0674cdb998807f64a5fa71
+Author: Behdad Esfahbod 
+Date:   2006-09-08 17:02:55 +0000
+
+    Define G_LOG_DOMAIN=Vte.
+    
+    2006-09-08  Behdad Esfahbod  
+    
+            * src/Makefile.am: Define G_LOG_DOMAIN=Vte.
+
+ ChangeLog       | 4 ++++
+ src/Makefile.am | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit eb80a6a1c8c4295c3083e225cd6953d567544b1e (tag: vte_0_14_0)
+Author: Behdad Esfahbod 
+Date:   2006-09-04 22:08:35 +0000
+
+    Released vte-0.14.0.
+    
+    2006-09-04  Behdad Esfahbod  
+    
+            Released vte-0.14.0.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.14.0.
+    
+            * src/Makefile.am: Bumped libtool version to 10:5:1.
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            |  4 ++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 16 insertions(+), 2 deletions(-)
+
+commit a83cf6602673312d368e246ad534316756c869cc
+Author: Mugurel Tudor 
+Date:   2006-09-04 07:49:10 +0000
+
+    Updated Romanian translation by Mişu Moldovan 
+    
+    2006-09-04  Mugurel Tudor  
+    
+            * ro.po: Updated Romanian translation by
+            Mişu Moldovan 
+
+ po/ChangeLog |  5 +++++
+ po/ro.po     | 61 ++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 35 insertions(+), 31 deletions(-)
+
+commit 5331a9411507c591244b9d14d68c1fc171669a2b
+Author: Behdad Esfahbod 
+Date:   2006-08-31 20:03:12 +0000
+
+    Minor doc syntax update.
+    
+    2006-08-31  Behdad Esfahbod  
+    
+            * src/pty.c:
+            * src/ring.c:
+            * src/trie.c:
+            * src/vte.c:
+            * src/vtebg.c:
+            * src/vteseq.c (vte_sequence_handler_ta):
+            * src/vtetc.c:
+            Minor doc syntax update.
+
+ ChangeLog    | 11 +++++++
+ src/pty.c    |  8 ++---
+ src/ring.c   |  6 ++--
+ src/trie.c   |  4 +--
+ src/vte.c    | 98 ++++++++++++++++++++++++++++++------------------------------
+ src/vtebg.c  |  2 +-
+ src/vteseq.c |  5 +++-
+ src/vtetc.c  |  2 +-
+ 8 files changed, 75 insertions(+), 61 deletions(-)
+
+commit 9a2974a6d3af4e54c0e0c00cca9630babdbac9aa
+Author: Behdad Esfahbod 
+Date:   2006-08-28 20:04:12 +0000
+
+    Remove leftover debugging statement.
+
+ src/vte.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit de3d2fe6df531a409715455c225b47ad45d05f19
+Author: Behdad Esfahbod 
+Date:   2006-08-27 01:01:01 +0000
+
+    Followup on the fix for bug 350236. It was causing empty lines not to be
+    
+    2006-08-26  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_get_text_range_maybe_wrapped): Followup on
+            the fix for bug 350236.  It was causing empty lines not to be copied.
+
+ ChangeLog | 5 +++++
+ src/vte.c | 5 +++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 8368d9f771e5e0e9151cd5007f2836e3d5bd0aba (tag: vte_0_13_7)
+Author: Behdad Esfahbod 
+Date:   2006-08-24 21:40:30 +0000
+
+    Update NEWS
+
+ NEWS | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit d17b882caade98cdf66df6cfc63fa48241f0df1f
+Author: Behdad Esfahbod 
+Date:   2006-08-24 21:40:00 +0000
+
+    Stuff this before the release.
+    2006-08-24  Behdad Esfahbod  
+            Bug 352365 – font caching problem for not-found glyphs
+            * src/vtexft.c (_vte_xft_font_for_char): Add caching on a missing
+            path.  This only affects the second time a character is looked up.
+            * src/vtexft.c (_vte_xft_font_close), (_vte_xft_font_for_char),
+            (_vte_xft_char_width): Remove g_assert()'s that are not needed, as
+            we will definitely crash pretty soon if the assertion is not true
+            anyway.
+
+ ChangeLog    | 12 ++++++++++++
+ src/vtexft.c | 22 ++++------------------
+ 2 files changed, 16 insertions(+), 18 deletions(-)
+
+commit a9fa041c8d644096cfcf18d153eddea9292bcf76
+Author: Behdad Esfahbod 
+Date:   2006-08-24 20:40:53 +0000
+
+    Released vte-0.13.7.
+    
+    2006-08-24  Behdad Esfahbod  
+    
+            Released vte-0.13.7.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.13.7.
+    
+            * src/Makefile.am: Bumped libtool version to 10:4:1.
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            |  6 ++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 18 insertions(+), 2 deletions(-)
+
+commit 614b185ae23d9dfef634019474fdcd7d3c60d003
+Author: Behdad Esfahbod 
+Date:   2006-08-24 20:33:10 +0000
+
+    Bug 350236 – Cannot copy text containing invalid character sequences
+    
+    2006-08-24  Behdad Esfahbod  
+    
+            Bug 350236 – Cannot copy text containing invalid character sequences
+    
+            * src/vte.c (vte_terminal_get_text_range_maybe_wrapped): Fix another
+            bug in my rewritten selection code, that was assuming that
+            last_nonempty character is one byte long.
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 12 ++++++------
+ 2 files changed, 14 insertions(+), 6 deletions(-)
+
+commit e9ff27c2c601f7f298220f22c8f2712efc417969
+Author: Behdad Esfahbod 
+Date:   2006-08-24 19:59:09 +0000
+
+    Bug 352439 – URL highlighting seriously broken
+    
+    2006-08-24  Behdad Esfahbod  
+    
+            Bug 352439 – URL highlighting seriously broken
+    
+            * src/vte.c (vte_terminal_get_text_range_maybe_wrapped): Followup to
+            changes made for bug 350623.  Put back the g_array_set_size(), in the
+            correct place this time.
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 17 +++++++++++------
+ 2 files changed, 19 insertions(+), 6 deletions(-)
+
+commit 5d86d31d2dfc5bd23c5a084e0df22353f17ace93
+Author: Behdad Esfahbod 
+Date:   2006-08-23 04:01:13 +0000
+
+    Bug 351494 – Gnome-terminal doesn't kills bash on tab close Patch from
+    
+    2006-08-22  Behdad Esfahbod  
+    
+            Bug 351494 – Gnome-terminal doesn't kills bash on tab close
+            Patch from Aivars Kalvans
+    
+            * src/vte.c (vte_terminal_unrealize): Undo the change from bug 348814.
+            Dispose draw in unrealize again, but also set has_fonts to FALSE.
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 7 +++++++
+ 2 files changed, 15 insertions(+)
+
+commit ac95f5c08ca4d7f55622035a8ef8c4aa82c9c671 (tag: vte_0_13_6)
+Author: Behdad Esfahbod 
+Date:   2006-08-21 03:36:10 +0000
+
+    Released vte-0.13.6.
+    
+    2006-08-20  Behdad Esfahbod  
+    
+            Released vte-0.13.6.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.13.6.
+    
+            * src/Makefile.am: Bumped libtool version to 10:3:1.
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            |  6 ++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 18 insertions(+), 2 deletions(-)
+
+commit 8e9557c901b30a27df6fc882c0e3304f86f0eeee
+Author: Behdad Esfahbod 
+Date:   2006-08-17 21:33:07 +0000
+
+    Bug 351696 – crash on Terminal
+    
+    2006-08-17  Behdad Esfahbod  
+    
+            Bug 351696 – crash on Terminal
+    
+            * src/vteseq.c (vte_sequence_handler_set_title_internal): Check
+            ->window is not NULL before setting icon/window title.
+
+ ChangeLog    | 7 +++++++
+ src/vteseq.c | 6 ++++--
+ 2 files changed, 11 insertions(+), 2 deletions(-)
+
+commit 3d775ed18d2f591eb34a68df6e08d509035e98ed
+Author: Willie Walker 
+Date:   2006-08-16 21:40:42 +0000
+
+    Bug 350623 – Accessible text getTextAtOffset is broken
+    
+    2006-08-16  Willie Walker 
+    
+            Bug 350623 – Accessible text getTextAtOffset is broken
+    
+            * src/vte.c (vte_terminal_get_text_range_maybe_wrapped): Do not
+            resize array before calling vte_g_array_fill since it
+            nullifies any effect vte_g_array_fill will have.
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 1 -
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit e22dd9e33cc8469102111a62e494f44476fc6709
+Author: Behdad Esfahbod 
+Date:   2006-08-16 21:38:31 +0000
+
+    Make sure attr.column is initialized.
+    
+    2006-08-16  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_get_text_range_maybe_wrapped): Make sure
+            attr.column is initialized.
+
+ ChangeLog | 5 +++++
+ src/vte.c | 1 +
+ 2 files changed, 6 insertions(+)
+
+commit 3ef54209f6936bd1a5a7ee75c286fa9b22cfff5f
+Author: Gabor Kelemen 
+Date:   2006-08-16 02:36:10 +0000
+
+    Translation updated.
+    
+    2006-08-16  Gabor Kelemen  
+    
+            * hu.po: Translation updated.
+
+ po/ChangeLog |  4 ++++
+ po/hu.po     | 41 +++++++++++++++++++++--------------------
+ 2 files changed, 25 insertions(+), 20 deletions(-)
+
+commit 5bbb05368a76d8598ec38748cba3a6c1d70f47ab
+Author: Inaki Larranaga 
+Date:   2006-08-07 16:14:49 +0000
+
+    Updated Basque translation.
+    
+    2006-08-07  Inaki Larranaga  
+    
+            * eu.po: Updated Basque translation.
+
+ po/ChangeLog |  4 ++++
+ po/eu.po     | 47 +++++++++++++++++++++++------------------------
+ 2 files changed, 27 insertions(+), 24 deletions(-)
+
+commit f2579a0d139c57e1a17dcb2d95b0b155c6e27d88
+Author: Ani Peter 
+Date:   2006-08-05 11:14:30 +0000
+
+    Updated Malayalam tranlstaion
+
+ po/ChangeLog |  4 +++
+ po/ml.po     | 93 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 53 insertions(+), 44 deletions(-)
+
+commit 570343ff860f09840a88d7bc60c99a1bae88328c
+Author: Runa Bhattacharjee 
+Date:   2006-08-02 12:35:17 +0000
+
+    Added Entry for Bengali India Translation Updation
+
+ po/ChangeLog |  4 ++++
+ po/bn_IN.po  | 70 ++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 39 insertions(+), 35 deletions(-)
+
+commit 272827ca55d743ad173da5edd86e0ac41c31dc10 (tag: vte_0_13_5)
+Author: Behdad Esfahbod 
+Date:   2006-07-31 19:48:16 +0000
+
+    Released vte-0.13.5.
+    
+    2006-07-31  Behdad Esfahbod  
+    
+            Released vte-0.13.5.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.13.5.
+    
+            * src/Makefile.am: Bumped libtool version to 10:2:1.
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            |  6 ++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 18 insertions(+), 2 deletions(-)
+
+commit 84b4d31a6a4729e5e80577d77a07bea705c10dc7
+Author: Behdad Esfahbod 
+Date:   2006-07-30 23:32:49 +0000
+
+    Bug 158200 – terminal backspace behavior not set to UTF-8 mode Based on
+    
+    2006-07-30  Behdad Esfahbod  
+    
+            Bug 158200 – terminal backspace behavior not set to UTF-8 mode
+            Based on patch from Egmont Koblinger
+    
+            * src/vte.c (_vte_terminal_setup_utf8),
+            (vte_terminal_set_encoding), (_vte_terminal_fork_basic),
+            (vte_terminal_set_pty): Make sure UTF-8 state is correctly set
+            when pty changes.
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 12 ++++++++++--
+ 2 files changed, 20 insertions(+), 2 deletions(-)
+
+commit 5a42042fd8b6a1ebf395b9b4a748118572e825bc
+Author: Behdad Esfahbod 
+Date:   2006-07-27 19:46:13 +0000
+
+    Bug 348814 – crash on Terminal Patch from Aivars Kalvans
+    
+    2006-07-27  Behdad Esfahbod  
+    
+            Bug 348814 – crash on Terminal
+            Patch from Aivars Kalvans
+    
+            * src/vte.c (vte_terminal_unrealize): Do not dispose draw in
+            unrealize.
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 6 ------
+ 2 files changed, 8 insertions(+), 6 deletions(-)
+
+commit 3e84bce2afc53eebc4c680e6fd3546bc516a2f4a (tag: vte_0_13_4)
+Author: Behdad Esfahbod 
+Date:   2006-07-24 22:20:26 +0000
+
+    Released vte-0.13.4.
+    
+    2006-07-24  Behdad Esfahbod  
+    
+            Released vte-0.13.4.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.13.4.
+    
+            * src/Makefile.am: Bumped libtool version to 10:1:1.
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            |  9 +++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 21 insertions(+), 2 deletions(-)
+
+commit ac2ab12e4886ae01cc040b1f419be7a813cf5af5
+Author: Behdad Esfahbod 
+Date:   2006-07-24 21:59:23 +0000
+
+    Bug 336947 – [patch] Redundant vte_terminal_set_font_full() calls Patch
+    
+    2006-07-24  Behdad Esfahbod  
+    
+            Bug 336947 – [patch] Redundant vte_terminal_set_font_full() calls
+            Patch from Aivars Kalvans
+    
+            * src/vte-private.h:
+            * src/vte.c (vte_terminal_set_font_full), (vte_terminal_init),
+            (vte_terminal_realize):
+            AVoid redundant set_font_full and invalidate_all calls.
+
+ ChangeLog         | 10 ++++++++++
+ src/vte-private.h |  2 ++
+ src/vte.c         | 31 +++++++++++++++++--------------
+ 3 files changed, 29 insertions(+), 14 deletions(-)
+
+commit 65ca8c65442401dcf5bcba6548ae80527b4bc254
+Author: Behdad Esfahbod 
+Date:   2006-07-24 21:23:38 +0000
+
+    Fix typo in comments.
+
+ src/vte.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f8fd3e39e77ade11f6c2b121b42f9626a0ae1afd
+Author: Behdad Esfahbod 
+Date:   2006-07-19 20:30:24 +0000
+
+    Bug 134800 – gnome-termnal hung up when input by ATOK Patch from
+    
+    2006-07-19  Behdad Esfahbod  
+    
+            Bug 134800 – gnome-termnal hung up when input by ATOK
+            Patch from Yukihiro Nakai  
+    
+            * src/vte.c (vte_terminal_unrealize): Delay _vte_draw_free().
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 12 ++++++------
+ 2 files changed, 13 insertions(+), 6 deletions(-)
+
+commit c0098ff647aeee1db841b6da7e5393b6d956a212
+Author: Behdad Esfahbod 
+Date:   2006-07-19 17:21:07 +0000
+
+    Oops. Fix selection that I broke recently.
+    
+    2006-07-19  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_extend_selection):  Oops.  Fix selection
+            that I broke recently.
+
+ ChangeLog | 5 +++++
+ src/vte.c | 8 ++++----
+ 2 files changed, 9 insertions(+), 4 deletions(-)
+
+commit 7229f8b39048f56e41c807459b0cad80d2e8ee13
+Author: Behdad Esfahbod 
+Date:   2006-07-11 15:52:08 +0000
+
+    Bug 339983 – gnome-pty-helper should log username Patch from Brian
+    
+    2006-07-11  Behdad Esfahbod  
+    
+            Bug 339983 – gnome-pty-helper should log username
+            Patch from Brian Cameron
+    
+            * gnome-pty-helper/gnome-pty-helper.c (pty_remove), (shutdown_pty),
+            (pty_add), (open_ptys):
+            * gnome-pty-helper/gnome-pty.h:
+            * gnome-pty-helper/gnome-utmp.c (write_logout_record):
+            Log username if system supports it.
+
+ ChangeLog                           | 11 +++++++++++
+ gnome-pty-helper/gnome-pty-helper.c |  9 ++++++---
+ gnome-pty-helper/gnome-pty.h        |  2 +-
+ gnome-pty-helper/gnome-utmp.c       |  8 +++++++-
+ 4 files changed, 25 insertions(+), 5 deletions(-)
+
+commit 659837c1c875d99689e8d8fbe1b1898b3c4bd725 (tag: vte_0_13_3)
+Author: Behdad Esfahbod 
+Date:   2006-07-11 01:00:25 +0000
+
+    Released vte-0.13.3.
+    
+    2006-07-10  Behdad Esfahbod  
+    
+            Released vte-0.13.3.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.13.3.
+    
+            * src/Makefile.am: Bumped libtool version to 10:0:1.
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            | 16 ++++++++++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  6 +++---
+ 4 files changed, 30 insertions(+), 4 deletions(-)
+
+commit 327ecef62f383483245b10ca9d12831f5cb91b76
+Author: Behdad Esfahbod 
+Date:   2006-07-11 00:59:21 +0000
+
+    Bug 141985 – vte does not respond to 'CSI 2 1 t' or 'CSI 2 0 t' with the
+    
+    2006-07-10  Behdad Esfahbod  
+    
+            Bug 141985 – vte does not respond to 'CSI 2 1 t' or 'CSI 2 0 t' with
+            the correct window/icon title
+            Patch from Mariano Suárez-Alvarez
+    
+            * src/vte.c (vte_terminal_realize), src/vteseq.c
+            * (vte_sequence_handler_set_title_internal): Set window/icon titles.
+
+ ChangeLog    | 9 +++++++++
+ src/vte.c    | 4 ++++
+ src/vteseq.c | 2 ++
+ 3 files changed, 15 insertions(+)
+
+commit c72bdb798ef3afbf18627f0929a418f88d5e41d3
+Author: Behdad Esfahbod 
+Date:   2006-07-11 00:48:30 +0000
+
+    Bug 121904 – copy-paste of empty line Bug 25290 – Small UI tweak to
+    
+    2006-07-10  Behdad Esfahbod  
+    
+            Bug 121904 – copy-paste of empty line
+            Bug 25290 – Small UI tweak to select-by-word (only select only letter
+            at a time for non-word characters)
+            Bug 339986 – Patch to select localized strings exactly
+    
+            * src/vte-private.h:
+            * src/vte.c (_vte_terminal_set_default_attributes),
+            (_vte_terminal_insert_char), (vte_terminal_is_word_char),
+            (vte_same_class), (vte_terminal_get_text_range_maybe_wrapped),
+            (vte_terminal_extend_selection):
+            * src/vteseq.c (vte_sequence_handler_screen_alignment_test):
+            Fix a bunch of selection-related issues.  We now recognize explicitly
+            put space at the end of lines, and copy/paste it.  The other change is
+            that non-wordchar characters are not grouped together.  Also fixes the
+            fallback on Unicode properties that I added two commits ago.
+
+ ChangeLog         |  18 +++++
+ src/vte-private.h |  10 ++-
+ src/vte.c         | 201 ++++++++++++++++++++++--------------------------------
+ src/vteseq.c      |   1 +
+ 4 files changed, 109 insertions(+), 121 deletions(-)
+
+commit b36b7c6c76f70e64f6213e326d343e2c285bb1e9
+Author: Behdad Esfahbod 
+Date:   2006-07-10 19:16:00 +0000
+
+    Bug 311855 – Race in vte leads to blocking of input. Patch from Kalle
+    
+    2006-07-10  Behdad Esfahbod  
+    
+            Bug 311855 – Race in vte leads to blocking of input.
+            Patch from Kalle Raiskila
+    
+            * src/vte-private.h:
+            * src/vte.c (_vte_terminal_connect_pty_write),
+            (_vte_terminal_disconnect_pty_write), (vte_terminal_init):
+            Use a mutex for pty_output_source.
+
+ ChangeLog         | 10 ++++++++++
+ src/vte-private.h |  1 +
+ src/vte.c         |  5 +++++
+ 3 files changed, 16 insertions(+)
+
+commit 313c5613d97a06a830c424bf568b11fd29685f05
+Author: Behdad Esfahbod 
+Date:   2006-07-10 18:40:56 +0000
+
+    Bug 339986 – Patch to select localized strings exactly Patch from Takao
+    
+    2006-07-10  Behdad Esfahbod  
+    
+            Bug 339986 – Patch to select localized strings exactly
+            Patch from Takao Fujiwara
+    
+            * src/vte.c (vte_terminal_is_word_char): Fall back on Unicode
+            properties for non-ASCII characters or when no array is set.
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 38 +++++++++++++++++++++++---------------
+ 2 files changed, 31 insertions(+), 15 deletions(-)
+
+commit 330d3d6bef131b49308cef9b2dc02a78e1a0c9af
+Author: Behdad Esfahbod 
+Date:   2006-07-10 18:28:32 +0000
+
+    Bug 342396 – Ctrl-space sends " ", not NUL.
+    
+    2006-07-10  Behdad Esfahbod  
+    
+            Bug 342396 – Ctrl-space sends " ", not NUL.
+    
+            * src/keymap.c (_vte_keymap_map): Fix keymap lookup bug that I
+            introduced during the char*->char[] work on 2006-04-18.
+
+ ChangeLog    | 7 +++++++
+ src/keymap.c | 6 +++---
+ 2 files changed, 10 insertions(+), 3 deletions(-)
+
+commit f3f8eafd9190378f0639ef507024d966d9638dcc
+Author: Behdad Esfahbod 
+Date:   2006-07-10 16:57:41 +0000
+
+    Bug 345377 – real transparency Patch from Kristian Høgsberg 
+    
+            Bug 345377 – real transparency
+            Patch from Kristian Høgsberg 
+    
+            * doc/reference/tmpl/vte.sgml:
+            * doc/reference/vte-sections.txt:
+            * python/vte.defs:
+            * src/vte-private.h:
+            * src/vte.c (vte_terminal_set_opacity), (vte_terminal_init),
+            (vte_terminal_background_update):
+            * src/vte.h:
+            * src/vteapp.c (main):
+            * src/vtedraw.c (_vte_draw_set_background_color):
+            * src/vtedraw.h:
+            * src/vteft2.c (_vte_ft2_set_background_color):
+            * src/vtegl.c (_vte_gl_set_background_color):
+            * src/vtepango.c (_vte_pango_set_background_color):
+            * src/vtepangox.c (_vte_pango_x_set_background_color):
+            * src/vteskel.c (_vte_skel_set_background_color):
+            * src/vtexft.c (_vte_xft_create), (_vte_xft_set_background_color),
+            (_vte_xft_clear):
+            Add vte_terminal_set_opacity().
+
+ ChangeLog                      | 24 ++++++++++++++++++++++++
+ doc/reference/tmpl/vte.sgml    |  9 +++++++++
+ doc/reference/vte-sections.txt |  1 +
+ python/unrealize.py            |  2 +-
+ python/vte-demo.py             |  2 +-
+ python/vte.defs                |  9 +++++++++
+ src/vte-private.h              |  1 +
+ src/vte.c                      | 19 ++++++++++++++++++-
+ src/vte.h                      |  1 +
+ src/vteapp.c                   |  9 +++++++++
+ src/vtedraw.c                  |  6 ++++--
+ src/vtedraw.h                  |  6 ++++--
+ src/vteft2.c                   |  2 +-
+ src/vtegl.c                    |  2 +-
+ src/vtepango.c                 |  2 +-
+ src/vtepangox.c                |  2 +-
+ src/vteskel.c                  |  4 +++-
+ src/vtexft.c                   | 14 +++++++++-----
+ 18 files changed, 98 insertions(+), 17 deletions(-)
+
+commit 1eded1ef1441436e1de4972c23aee4e12f70017e
+Author: Swapnil Hajare 
+Date:   2006-07-07 19:26:12 +0000
+
+    mr.po: Added Marathi translation.
+    LINGUAS: Added entry for Marathi (mr) in language list.
+
+ po/ChangeLog |   5 +++
+ po/LINGUAS   |   1 +
+ po/mr.po     | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 119 insertions(+)
+
+commit af7fb4765c676dc5ec5e3605197858b660b22bc7
+Author: Behdad Esfahbod 
+Date:   2006-07-05 06:38:47 +0000
+
+    Allow _vte_debug_.* into exported symbols.
+    
+    2006-07-05  Behdad Esfahbod  
+    
+            * src/Makefile.am: Allow _vte_debug_.* into exported symbols.
+
+ ChangeLog       | 4 ++++
+ src/Makefile.am | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 2fb5b6721154db82d9107f1c4874f6759e060390
+Author: Runa Bhattacharjee 
+Date:   2006-07-03 14:21:06 +0000
+
+    Added entry for addition of  bengali India (bn_IN) translation and to LINGUAS
+
+ po/ChangeLog | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 9bce93fc6d7534bbc27d9c10d550d5fd8b9fe4b6
+Author: Runa Bhattacharjee 
+Date:   2006-07-03 14:20:53 +0000
+
+    Added bengali India (bn_IN)
+
+ po/LINGUAS | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 70d2f5022fcac923d315e6afcd5dca40a176b3fd
+Author: Runa Bhattacharjee 
+Date:   2006-07-03 14:20:14 +0000
+
+    Added Bengali India Translation
+
+ po/bn_IN.po | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 116 insertions(+)
+
+commit 9f75f3590a07ce434593509ce33cf555fcf0a7a3
+Author: Benoît Dejean 
+Date:   2006-07-01 10:16:47 +0000
+
+    Updated French translation.
+    
+    2006-07-01  Benoît Dejean  
+    
+            * fr.po: Updated French translation.
+
+ po/ChangeLog |   4 +++
+ po/fr.po     | 104 ++++++++++++++++++-----------------------------------------
+ 2 files changed, 36 insertions(+), 72 deletions(-)
+
+commit 459fb97cdd78272d4b69e2ec47aaae0df88287ed
+Author: Thomas Vander Stichele 
+Date:   2006-06-29 20:55:28 +0000
+
+    moap ignore
+
+ gnome-pty-helper/.cvsignore | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit f0942403fa42ac6ba22a7e8e2fc1ed2fce7f848a
+Author: Rajesh Ranjan 
+Date:   2006-06-26 05:43:52 +0000
+
+    Updated Translation
+
+ po/ChangeLog |  4 ++++
+ po/hi.po     | 39 ++++++++++++++++++++-------------------
+ 2 files changed, 24 insertions(+), 19 deletions(-)
+
+commit bee91f747c6025295b5d2ee99e4368da1384132e
+Author: Behdad Esfahbod 
+Date:   2006-06-21 08:35:41 +0000
+
+    Bug 345514 – -no-undefined doesn't work with latest libtool
+    
+    2006-06-21  Behdad Esfahbod  
+    
+            Bug 345514 – -no-undefined doesn't work with latest libtool
+    
+            * src/Makefile.am: Remove -no-undefined.
+
+ ChangeLog       | 6 ++++++
+ src/Makefile.am | 3 +--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 015d6e8dbbb8fb4729fbb168e6a15a4b3b9268a9 (tag: vte_0_13_2)
+Author: Behdad Esfahbod 
+Date:   2006-06-12 19:23:37 +0000
+
+    Released vte-0.13.2.
+    
+    2006-06-12  Behdad Esfahbod  
+    
+            Released vte-0.13.2.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.13.2.
+    
+            * src/Makefile.am: Bumped libtool version to 9:2:0.
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            | 17 +++++++++++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 29 insertions(+), 2 deletions(-)
+
+commit c5a0b19ca37617d87c765ab2b6cb47f4cc786e8f
+Author: Behdad Esfahbod 
+Date:   2006-06-12 17:42:07 +0000
+
+    Bug 344666 – Problems with *_CFLAGS and *_LDFLAGS in makefiles Patch
+    
+    2006-06-12  Behdad Esfahbod  
+    
+            Bug 344666 – Problems with *_CFLAGS and *_LDFLAGS in makefiles
+            Patch from Stepan Kasal .
+    
+            * src/Makefile.am (AM_CFLAGS, AM_LDFLAGS, *_CFLAGS, *_LDADD):
+            Replace @FOO@ references by $(FOO), remove redundant (or buggy)
+            occurences of `@CFLAGS@'.
+            * gnome-pty-helper/Makefile.am (AM_CFLAGS, AM_LDFLAGS): Likewise.
+            * python/Makefile.am (vtemodule_la_CFLAGS): Likewise.
+            * src/Makefile.am (AM_CFLAGS): Add $(FT2_CFLAGS).
+
+ ChangeLog                    | 12 +++++++
+ gnome-pty-helper/Makefile.am |  4 +--
+ python/Makefile.am           |  4 +--
+ src/Makefile.am              | 82 ++++++++++++++++++++++----------------------
+ termcaps/Makefile.am         |  8 ++---
+ 5 files changed, 61 insertions(+), 49 deletions(-)
+
+commit 2b0c90c9430070d3420204253d316d4361a6e775
+Author: Behdad Esfahbod 
+Date:   2006-06-08 22:22:03 +0000
+
+    Fix typo which may have been causing things like crashes. Reported by
+    
+    2006-06-08  Behdad Esfahbod  
+    
+            * src/vte.c (remove_display_timeout): Fix typo which may have been
+            causing things like crashes.  Reported by muntyan.  Also reordered
+            some code around update_timeout for better matching the current
+            timeouts in style.
+
+ ChangeLog         |   7 +++
+ src/vte-private.h |   2 +-
+ src/vte.c         | 128 +++++++++++++++++++++++++++++-------------------------
+ 3 files changed, 76 insertions(+), 61 deletions(-)
+
+commit 14eda4d86401762c88040af70c4259a09b6c4614
+Author: Behdad Esfahbod 
+Date:   2006-06-07 16:46:39 +0000
+
+    Bug 339529 – gnome-terminal (vte) crashes when detatched window is
+    
+    2006-06-07  Behdad Esfahbod  
+    
+            Bug 339529 – gnome-terminal (vte) crashes when detatched window is
+            closed
+    
+            * src/vte.c (vte_invalidate_region): Bail out if terminal->window is
+            NULL.
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 5 ++++-
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+commit 24536e9b33000952996361aa6f27bdec540fd274
+Author: Behdad Esfahbod 
+Date:   2006-05-28 02:39:10 +0000
+
+    Bug 342549 – uninitialized var (coverity) Patch from Paolo Borelli.
+    
+    2006-05-27  Behdad Esfahbod  
+    
+            Bug 342549 – uninitialized var (coverity)
+            Patch from Paolo Borelli.
+    
+            * src/vte.c (vte_cell_is_selected): Remove uninitialized var ret.
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 7 ++-----
+ 2 files changed, 10 insertions(+), 5 deletions(-)
+
+commit 7656d1fa9d7ccb931a35e955fcd90f5fb3144830
+Author: Behdad Esfahbod 
+Date:   2006-05-28 02:36:16 +0000
+
+    Bug 342082 – vte_invalidate_region() may check whether terminal is
+    
+    2006-05-27  Behdad Esfahbod  
+    
+            Bug 342082 – vte_invalidate_region() may check whether terminal is
+            realiazed or not
+    
+            * src/vte.c (vte_invalidate_region): Return if not realized.
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 3 +++
+ 2 files changed, 10 insertions(+)
+
+commit ab42a7f4c04ba4a19b4b11948589834877fe410f
+Author: Behdad Esfahbod 
+Date:   2006-05-22 04:41:16 +0000
+
+    Bug 340363 – vte Cygwin build fixes Patch from Cygwin Ports maintainer
+    
+    2006-05-22  Behdad Esfahbod  
+    
+            Bug 340363 – vte Cygwin build fixes
+            Patch from Cygwin Ports maintainer
+    
+            * configure.in, src/keymap.c, src/pty.c, src/ssfe.c, src/trie.c,
+            src/utf8echo.c, src/vte.c, src/vteseq.c, src/vtetc.c: Check and
+            include syslimits.h and ncurses/curses.h
+
+ ChangeLog      |  9 +++++++++
+ configure.in   | 15 +++++++++------
+ src/keymap.c   |  6 ++++++
+ src/pty.c      |  3 +++
+ src/ssfe.c     |  6 ++++++
+ src/trie.c     |  3 +++
+ src/utf8echo.c |  3 +++
+ src/vte.c      |  3 +++
+ src/vteseq.c   |  4 ++++
+ src/vtetc.c    |  3 +++
+ 10 files changed, 49 insertions(+), 6 deletions(-)
+
+commit 438e60054d0bd4cdb3593ffee473e13c3ee01463
+Author: Behdad Esfahbod 
+Date:   2006-05-22 04:36:06 +0000
+
+    Bug 341793 – vte.h doesn't need to include X11/Xlib.h Patch from Kouhei
+    
+    2006-05-22  Behdad Esfahbod  
+    
+            Bug 341793 – vte.h doesn't need to include X11/Xlib.h
+            Patch from Kouhei Sutou
+    
+            * src/vte.h: Don't #include 
+
+ ChangeLog | 7 +++++++
+ src/vte.h | 1 -
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit 8214dc7494e5d01e805837d9b2f5fa0cc96e944e
+Author: Wouter Bolsterlee 
+Date:   2006-05-17 11:55:59 +0000
+
+    Require intltool 0.35.0 to have translations in the dist tarballs.
+    
+    2006-05-17  Wouter Bolsterlee  
+    
+            * configure.in: Require intltool 0.35.0 to have
+            translations in the dist tarballs.
+
+ ChangeLog    | 5 +++++
+ configure.in | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 3e45d5d8733c0e96694bcd65e59e5a26bec80328 (tag: vte_0_13_1)
+Author: Behdad Esfahbod 
+Date:   2006-05-17 09:21:35 +0000
+
+    Released vte-0.13.1.
+    
+    2006-05-17  Behdad Esfahbod  
+    
+            Released vte-0.13.1.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.13.1.
+    
+            * src/Makefile.am: Bumped libtool version to 9:1:0.
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            |  9 +++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  2 +-
+ 4 files changed, 21 insertions(+), 2 deletions(-)
+
+commit 9081c956e1b1b88069d09ccbcdb2b3adbd7028b1
+Author: Behdad Esfahbod 
+Date:   2006-05-14 23:37:23 +0000
+
+    Add vim and emacs footers for UTF-8.
+    
+    2006-05-14  Behdad Esfahbod  
+    
+            * NEWS, ChangeLog: Add vim and emacs footers for UTF-8.
+
+ ChangeLog | 58 +++++++++++++++++++++++++++++++---------------------------
+ NEWS      | 53 +++++++++++++++++++++++++++++------------------------
+ 2 files changed, 60 insertions(+), 51 deletions(-)
+
+commit bcf90856af0ffe1d353754fea4e0716ca73fc30b
+Author: Stepan Kasal 
+Date:   2006-05-12 20:46:22 +0000
+
+    Changed the UTF-8 dashes to plain ascii "-".
+    
+    * NEWS, ChangeLog: Changed the UTF-8 dashes to plain ascii "-".
+
+ ChangeLog | 54 +++++++++++++++++++++++++++++-------------------------
+ NEWS      | 48 ++++++++++++++++++++++++------------------------
+ 2 files changed, 53 insertions(+), 49 deletions(-)
+
+commit 7e774bdbd374ca2d991d7e7899a66d2cff056b50
+Author: Behdad Esfahbod 
+Date:   2006-04-28 01:53:27 +0000
+
+    Bug 339980 – nativeecho needs glib in LDADD to build on Solaris Patch
+    
+    2006-04-27  Behdad Esfahbod  
+    
+            Bug 339980 – nativeecho needs glib in LDADD to build on Solaris
+            Patch from Brian Cameron.
+    
+            * src/Makefile.am: Fix it.
+
+ ChangeLog       | 7 +++++++
+ src/Makefile.am | 4 ++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+commit aa4374e245af06314555a8e5fc8e148bba5979b5
+Author: Behdad Esfahbod 
+Date:   2006-04-27 01:08:52 +0000
+
+    Bug 331803 – style needs to be attached/detached to the window on
+    
+    2006-04-26  Behdad Esfahbod  
+    
+            Bug 331803 – style needs to be attached/detached to the window on
+            realize/unrealize
+            Patch from Benjamin Berg  .
+    
+            * src/vte.c: (vte_terminal_unrealize), (vte_terminal_realize):
+            attach and detach the style of the terminal widget.
+
+ ChangeLog | 9 +++++++++
+ src/vte.c | 5 +++++
+ 2 files changed, 14 insertions(+)
+
+commit 6fbe46ba07be8d871131381914624ec79f47b4ef
+Author: Behdad Esfahbod 
+Date:   2006-04-25 11:12:10 +0000
+
+    Pass -no-undefined linker flag.
+    
+    2006-04-25  Behdad Esfahbod  
+    
+            * src/Makefile.am: Pass -no-undefined linker flag.
+
+ ChangeLog       | 4 ++++
+ src/Makefile.am | 3 ++-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit eda77708ba72edf1641678e055a7cd923fff6e36 (tag: vte_0_13_0)
+Author: Behdad Esfahbod 
+Date:   2006-04-23 21:21:02 +0000
+
+    Released vte-0.13.0.
+    
+    2006-04-23  Behdad Esfahbod  
+    
+            Released vte-0.13.0.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.13.0.
+    
+            * src/Makefile.am: Bumped libtool version to 9:0:0.
+
+ ChangeLog       | 10 ++++++++++
+ NEWS            | 31 +++++++++++++++++++++++++++++++
+ configure.in    |  2 +-
+ src/Makefile.am |  4 ++--
+ 4 files changed, 44 insertions(+), 3 deletions(-)
+
+commit ce4935574b8b5aa252663488cc1c237658ea8f3c
+Author: Behdad Esfahbod 
+Date:   2006-04-23 09:02:19 +0000
+
+    Minor.
+
+ src/vte.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+commit 1375bfe7189dc1a316ebee510175baf48fcee0cd
+Author: Behdad Esfahbod 
+Date:   2006-04-23 08:39:08 +0000
+
+    Bug 339448 – selection doesn't respect hard newlines
+    
+    2006-04-23  Behdad Esfahbod  
+    
+            Bug 339448 – selection doesn't respect hard newlines
+    
+            * src/vte.c (vte_terminal_get_text_range_maybe_wrapped): Add newline
+            to the end of each line that is not soft-wrapped.
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 22 +++++++++-------------
+ 2 files changed, 16 insertions(+), 13 deletions(-)
+
+commit 9a70a1fea66d11a81415bdc082679a6d586ff7cc
+Author: Behdad Esfahbod 
+Date:   2006-04-23 07:36:54 +0000
+
+    Bug 148720 # Word selection erroneously captures text from next line Patch
+    
+    2006-04-23  Behdad Esfahbod  
+    
+            Bug 148720 # Word selection erroneously captures text from next line
+            Patch from Chris Heath.
+    
+            * src/vteseq.c (vte_sequence_handler_cd), (vte_sequence_handler_ce),
+            (vte_sequence_handler_clear_current_line),
+            (vte_sequence_handler_clear_above_current): Reset soft_wrapped flag.
+
+ ChangeLog    | 9 +++++++++
+ src/vteseq.c | 4 ++++
+ 2 files changed, 13 insertions(+)
+
+commit 7598aa25c12af4e90f564ad27b78a24472297790
+Author: Behdad Esfahbod 
+Date:   2006-04-23 07:27:28 +0000
+
+    Bug 126376 # Uncoinditional definition of _XOPEN_SOURCE breaks build on
+    
+    2006-04-23  Behdad Esfahbod  
+    
+            Bug 126376 # Uncoinditional definition of _XOPEN_SOURCE breaks build
+            on NetBSD
+            Patch from Dan Winship.
+    
+            * configure.in:
+            * gnome-pty-helper/configure.in: Define XOPEN_SOURCE on solaris only.
+
+ ChangeLog                     |  9 +++++++++
+ configure.in                  | 12 +++++++++---
+ gnome-pty-helper/configure.in | 12 +++++++++---
+ 3 files changed, 27 insertions(+), 6 deletions(-)
+
+commit c7aa70a7eb639973d4b119f2ae6b057d12717474
+Author: Behdad Esfahbod 
+Date:   2006-04-23 07:20:48 +0000
+
+    Bug 97719 # Selection: double/triple click doesn't cross line boundaries
+    
+    2006-04-23  Behdad Esfahbod  
+    
+            Bug 97719 # Selection: double/triple click doesn't cross line boundaries
+            Patch from Chris Heath.
+    
+            * src/vte.c (vte_same_class): Fix problem with selecting whitespace
+            from adjacent lines, on word selection.
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 58 ++++++++++++++++++++++++++++++++++------------------------
+ 2 files changed, 42 insertions(+), 24 deletions(-)
+
+commit a8bc53b8d18bba85b09b3b8fbf59f8e223bbfb3b
+Author: Behdad Esfahbod 
+Date:   2006-04-22 21:31:05 +0000
+
+    Bug 160782 # Vte isn't multi-screen safe Patch from Benedikt Meurer.
+    
+    2006-04-22  Behdad Esfahbod  
+    
+            Bug 160782 # Vte isn't multi-screen safe
+            Patch from Benedikt Meurer.
+    
+            * src/vte.c (vte_terminal_unrealize), (vte_terminal_realize):
+            * src/vtebg.c (vte_bg_native_new), (_vte_bg_display_sync),
+            (vte_bg_root_pixmap), (vte_bg_get_for_screen), (vte_bg_init),
+            (vte_bg_get_pixmap), (vte_bg_get_pixbuf):
+            * src/vtebg.h:
+            * src/vteft2.c (_vte_ft2_set_background_image):
+            * src/vtegl.c (_vte_gl_set_background_image):
+            * src/vtepango.c (_vte_pango_set_background_image):
+            * src/vtepangox.c (_vte_pango_x_set_background_image):
+            * src/vtexft.c (_vte_xft_set_background_image): Handle per-screen
+            backgrounds.
+
+ ChangeLog       | 17 +++++++++++++++
+ src/vte.c       |  8 ++++++--
+ src/vtebg.c     | 64 ++++++++++++++++++++++++++++-----------------------------
+ src/vtebg.h     |  3 ++-
+ src/vteft2.c    |  6 +++++-
+ src/vtegl.c     |  6 +++++-
+ src/vtepango.c  |  6 +++++-
+ src/vtepangox.c |  6 +++++-
+ src/vtexft.c    |  5 ++++-
+ 9 files changed, 80 insertions(+), 41 deletions(-)
+
+commit d59d4f25fb27dc9b3e342764944d1fac18629d4a
+Author: Behdad Esfahbod 
+Date:   2006-04-22 20:40:51 +0000
+
+    Remove obsolete #ifde GTK_CHECK_VERSION(2,2,0) checks.
+    
+    2006-04-22  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_cursor_new), (vte_terminal_clipboard_get):
+            * src/vteapp.c (take_xconsole_ownership):
+            * src/vtebg.c (vte_bg_native_new), (_vte_bg_display_sync),
+            (vte_bg_root_pixmap):
+            * src/vtedraw.c (_vte_draw_get_colormap):
+            * src/vtefc.c (_vte_fc_transcribe_from_pango_font_description),
+            (_vte_fc_defaults_from_gtk):
+            * src/vtepango.c (_vte_pango_start), (_vte_pango_set_text_font):
+            * src/vtepangox.c (_vte_pango_x_set_text_font):
+            * src/vterdb.c (_vte_rdb_get):
+            * src/vteseq.c (vte_terminal_beep),
+            (vte_sequence_handler_window_manipulation):
+            * src/vtexft.c (_vte_xft_char_exists), (_vte_xft_text_extents),
+            (_vte_xft_font_open):
+            * src/vtegl.c: Remove obsolete #ifde GTK_CHECK_VERSION(2,2,0) checks.
+
+ ChangeLog       | 18 ++++++++++++++++++
+ src/vte.c       | 12 ------------
+ src/vteapp.c    |  4 ----
+ src/vtebg.c     | 12 ------------
+ src/vtedraw.c   |  8 --------
+ src/vtefc.c     | 12 ------------
+ src/vtegl.c     |  2 --
+ src/vtepango.c  | 12 ------------
+ src/vtepangox.c |  4 ----
+ src/vterdb.c    | 10 +---------
+ src/vteseq.c    | 11 -----------
+ src/vtexft.c    | 12 ------------
+ 12 files changed, 19 insertions(+), 98 deletions(-)
+
+commit 9c905141e37d69f86f5a46292c62e2f56fb3d501
+Author: Behdad Esfahbod 
+Date:   2006-04-22 20:21:31 +0000
+
+    Bug 330441 – Remove libzvt support Patch from Guilherme de S. Pastore
+    
+    2006-04-22  Behdad Esfahbod  
+    
+            Bug 330441 – Remove libzvt support
+            Patch from Guilherme de S. Pastore  
+    
+            * configure.in, src/Makefile.am, src/reflect.c: remove remnants
+            from the old, broken, and unmaintained libzvt.
+
+ ChangeLog       |   8 ++++
+ configure.in    |  11 ------
+ src/Makefile.am |  11 +-----
+ src/reflect.c   | 114 --------------------------------------------------------
+ 4 files changed, 9 insertions(+), 135 deletions(-)
+
+commit ef5a0801e925eacc3e47f77e2e38b4b1beb7a8b7
+Author: Behdad Esfahbod 
+Date:   2006-04-21 06:31:05 +0000
+
+    Bug 328850 – Crash when pasting selection
+    
+    2006-04-21  Behdad Esfahbod  
+    
+            Bug 328850 – Crash when pasting selection
+    
+            * src/vte.c: Protect against passing NULL selection to strcmp.
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 4 ++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 1565149ec0da07a1088e6a956d29e7244bbe22e9
+Author: Behdad Esfahbod 
+Date:   2006-04-20 11:01:51 +0000
+
+    Misc fixes and updates.
+    
+    2006-04-20  Behdad Esfahbod  
+    
+            * doc/reference/tmpl/internals.sgml:
+            * doc/reference/tmpl/reaper.sgml:
+            * doc/reference/tmpl/vte-unused.sgml:
+            * doc/reference/tmpl/vte.sgml:
+            * doc/reference/tmpl/vteaccess.sgml:
+            * doc/reference/vte-sections.txt: Misc fixes and updates.
+    
+            * python/vte.defs:
+            * python/vte.override: Updates.
+    
+            Bug 160134 – mouse events occurring past column 95 are not passed
+            through to terminal application
+            Based on patch from Sean Estabrooks.
+    
+            * src/vte.h:
+            * src/vte.c (vte_terminal_feed_child_binary): New public function.
+    
+            * src/vte.c (vte_terminal_send_mouse_button_internal),
+            (vte_terminal_maybe_send_mouse_drag): Use feed_child_binary.
+
+ ChangeLog                          | 22 ++++++++++++++++
+ doc/reference/tmpl/internals.sgml  |  6 ++++-
+ doc/reference/tmpl/reaper.sgml     |  5 ++--
+ doc/reference/tmpl/vte-unused.sgml |  4 ---
+ doc/reference/tmpl/vte.sgml        | 33 +++++++++++-------------
+ doc/reference/tmpl/vteaccess.sgml  |  7 ++++-
+ doc/reference/vte-sections.txt     |  1 +
+ python/vte.defs                    | 27 ++++++++++++-------
+ python/vte.override                | 50 +++++++++++++++++++++++++++++++++++
+ src/vte.c                          | 53 +++++++++++++++++++++++++++++++-------
+ src/vte.h                          |  4 +--
+ 11 files changed, 165 insertions(+), 47 deletions(-)
+
+commit 431eba9f61c04aef891f224fa1fa7d1bd9e56200
+Author: Behdad Esfahbod 
+Date:   2006-04-20 01:01:31 +0000
+
+    Bug 135230 – Feature request to attach VTE to existing pty Based on
+    
+    2006-04-19  Behdad Esfahbod  
+    
+            Bug 135230 – Feature request to attach VTE to existing pty
+            Based on patch from eric@brouhaha.com, John Swensen, and
+            Chris Moller  
+    
+            * src/vte.c:
+            * src/vte.h:
+            * python/vte.defs:
+            * doc/reference/vte-sections.txt: Added vte_terminal_set_pty().
+
+ ChangeLog                      | 11 +++++++++++
+ doc/reference/tmpl/vte.sgml    | 11 +++++++++++
+ doc/reference/vte-sections.txt |  1 +
+ python/vte.defs                | 10 ++++++++++
+ src/vte.c                      | 39 +++++++++++++++++++++++++++++++++++++++
+ src/vte.h                      |  4 ++++
+ 6 files changed, 76 insertions(+)
+
+commit f5a7397bfa56a3659f77ddce7aafb352b50e9252
+Author: Behdad Esfahbod 
+Date:   2006-04-19 00:04:13 +0000
+
+    AC_PROG_INTLTOOL -> IT_PROG_INTLTOOL
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit e4eb0288d0ef482704f9141d23bc5e0f65b185b8
+Author: Behdad Esfahbod 
+Date:   2006-04-18 23:24:48 +0000
+
+    Bug 337442 – [patch] Reduce .plt section
+    
+    2006-04-18  Behdad Esfahbod  
+    
+            Bug 337442 – [patch] Reduce .plt section
+    
+            * src/Makefile.am: Pass export-symbols-regex to libtool.
+
+ ChangeLog       | 6 ++++++
+ src/Makefile.am | 4 +++-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit dca0f59d08dd3e9eaff6bdac551e2a05560e0661
+Author: Behdad Esfahbod 
+Date:   2006-04-18 23:08:03 +0000
+
+    Doc improvements.
+
+ doc/reference/tmpl/vte.sgml    | 12 ++++++++++++
+ doc/reference/vte-sections.txt |  2 ++
+ 2 files changed, 14 insertions(+)
+
+commit 4876b6439712ca851e77318dc3e6ba6965a61e3e
+Author: Behdad Esfahbod 
+Date:   2006-04-18 22:50:30 +0000
+
+    Remove the #ident strings.
+
+ src/buffer.c      | 1 -
+ src/buffer.h      | 1 -
+ src/caps.c        | 1 -
+ src/caps.h        | 1 -
+ src/debug.c       | 1 -
+ src/debug.h       | 1 -
+ src/dumpkeys.c    | 1 -
+ src/interpret.c   | 1 -
+ src/iso2022.c     | 1 -
+ src/iso2022.h     | 1 -
+ src/iso8859mode.c | 1 -
+ src/matcher.c     | 1 -
+ src/matcher.h     | 1 -
+ src/mev.c         | 1 -
+ src/nativeecho.c  | 1 -
+ src/pty.c         | 1 -
+ src/pty.h         | 1 -
+ src/reaper.c      | 1 -
+ src/reaper.h      | 1 -
+ src/reflect.c     | 1 -
+ src/ring.c        | 1 -
+ src/ring.h        | 1 -
+ src/slowcat.c     | 1 -
+ src/table.c       | 1 -
+ src/table.h       | 1 -
+ src/trie.c        | 1 -
+ src/trie.h        | 1 -
+ src/utf8echo.c    | 1 -
+ src/utf8mode.c    | 1 -
+ src/vte.h         | 1 -
+ src/vteaccess.c   | 1 -
+ src/vteaccess.h   | 1 -
+ src/vteapp.c      | 1 -
+ src/vtebg.c       | 1 -
+ src/vtebg.h       | 1 -
+ src/vteconv.c     | 1 -
+ src/vteconv.h     | 1 -
+ src/vtedraw.c     | 1 -
+ src/vtedraw.h     | 1 -
+ src/vtefc.c       | 1 -
+ src/vtefc.h       | 1 -
+ src/vteft2.c      | 1 -
+ src/vteft2.h      | 1 -
+ src/vtegl.c       | 1 -
+ src/vtegl.h       | 1 -
+ src/vteglyph.c    | 1 -
+ src/vteglyph.h    | 1 -
+ src/vteint.h      | 1 -
+ src/vtepango.c    | 1 -
+ src/vtepango.h    | 1 -
+ src/vtepangox.c   | 1 -
+ src/vtepangox.h   | 1 -
+ src/vterdb.c      | 1 -
+ src/vterdb.h      | 1 -
+ src/vteregex.c    | 1 -
+ src/vteregex.h    | 1 -
+ src/vtergb.c      | 1 -
+ src/vtergb.h      | 1 -
+ src/vteseq.c      | 1 -
+ src/vteskel.c     | 1 -
+ src/vteskel.h     | 1 -
+ src/vtetc.c       | 1 -
+ src/vtetc.h       | 1 -
+ src/vtetree.h     | 1 -
+ src/vtexft.c      | 1 -
+ src/vtexft.h      | 1 -
+ 66 files changed, 66 deletions(-)
+
+commit f8a9447f37e686b23fd7e185dfe5fdbc866d0e7f
+Author: Behdad Esfahbod 
+Date:   2006-04-18 22:41:03 +0000
+
+    Make some data structures const by changing char * to char [].
+    
+    2006-04-18  Behdad Esfahbod  
+    
+            * src/caps.c (_vte_capability_init), src/caps.h:
+            * src/keymap.c (_vte_keymap_map), src/keymap.h: Make some data
+            structures const by changing char * to char [].
+    
+            * src/vte.c (vte_update_delay_timeout), (vte_update_timeout),
+            (vte_terminal_extend_selection), (_vte_terminal_fudge_pango_colors):
+            Fix warnings and adapt to above changes.
+
+ ChangeLog         |   10 +
+ src/caps.c        |   14 +-
+ src/caps.h        |    5 +-
+ src/keymap.c      | 1004 ++++++++++++++++++++++++++---------------------------
+ src/keymap.h      |    4 +-
+ src/matcher.c     |    2 +-
+ src/vte-private.h |   10 +-
+ src/vte.c         |   14 +-
+ 8 files changed, 532 insertions(+), 531 deletions(-)
+
+commit 749b51696d1a41c59268d43467219549479c550e
+Author: Behdad Esfahbod 
+Date:   2006-04-18 21:08:01 +0000
+
+    Use intltool 0.34.90 format.
+    
+    2006-04-18  Behdad Esfahbod  
+    
+            * configure.in, po/LINGUAS: Use intltool 0.34.90 format.
+
+ ChangeLog    |  4 ++++
+ configure.in |  5 +---
+ po/LINGUAS   | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 3 files changed, 81 insertions(+), 5 deletions(-)
+
+commit e759046ad0b13b8da503b552c29787f9ef3eda28
+Author: Kjartan Maraas 
+Date:   2006-04-18 08:34:34 +0000
+
+    Remove obsolete entry for no_NO And the translation.
+    
+    2006-04-18  Kjartan Maraas  
+    
+            * LINGUAS: Remove obsolete entry for no_NO
+            * no.po: And the translation.
+
+ po/ChangeLog |   5 +++
+ po/LINGUAS   |   2 +-
+ po/no.po     | 111 -----------------------------------------------------------
+ 3 files changed, 6 insertions(+), 112 deletions(-)
+
+commit 9f75cf1de6ba6a73e37b211d403f965fd4d45194
+Author: Behdad Esfahbod 
+Date:   2006-04-12 11:24:46 +0000
+
+    Bug 142247 – use of uninitialized value
+    
+    2006-04-12  Behdad Esfahbod  
+    
+            Bug 142247 – use of uninitialized value
+    
+            * src/pty.c: Initialize the arbitrary byte that we send on the pipe
+            to zero.
+
+ ChangeLog | 7 +++++++
+ src/pty.c | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 122e9fd5c3d5c11062bc5c118736e9ef2c0f9d55
+Author: Behdad Esfahbod 
+Date:   2006-04-12 10:23:58 +0000
+
+    Minor.
+
+ ChangeLog | 2 ++
+ src/vte.c | 2 +-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+commit f4d0e7f3fb9b30d6069d1b266bdb0a3d419e1ac5
+Author: Behdad Esfahbod 
+Date:   2006-04-12 07:27:37 +0000
+
+    Try to use the font first for all graphic characters. This results in
+    
+    2006-04-12  Behdad Esfahbod  
+    
+            * src/vte.c: Try to use the font first for all graphic characters.
+            This results in better looking graphics with modern fonts.
+
+ ChangeLog         |  5 ++++
+ src/vte-private.h |  2 --
+ src/vte.c         | 83 ++++---------------------------------------------------
+ 3 files changed, 11 insertions(+), 79 deletions(-)
+
+commit 7fa096eab829056fa6fb7ccce0f57b389de51fa0
+Author: Behdad Esfahbod 
+Date:   2006-04-12 07:22:34 +0000
+
+    Bug 144456 – UK pound currency symbol rendered incorrectly
+    
+    2006-04-12  Behdad Esfahbod  
+    
+            Bug 144456 – UK pound currency symbol rendered incorrectly
+    
+            * src/vte.c: Offset characters drawn in draw_graphic for padding.
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 4 ++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 72cf2178d72461baf59a54a42a45f88cbc4d3346
+Author: Behdad Esfahbod 
+Date:   2006-04-12 06:40:05 +0000
+
+    Bug 307403 – xticker doublefree
+    
+    2006-04-12  Behdad Esfahbod  
+    
+            Bug 307403 – xticker doublefree
+    
+            * src/xticker.c: Avoid double free.
+
+ ChangeLog     | 6 ++++++
+ src/xticker.c | 7 ++++---
+ 2 files changed, 10 insertions(+), 3 deletions(-)
+
+commit 80ab2f7f151b00bd2f807e8a0c8a6c01a1184bf8
+Author: Behdad Esfahbod 
+Date:   2006-04-10 06:52:51 +0000
+
+    Bug 337877 – Patch to use po/LINGUAS Patch from Michiel Sikkes.
+    
+    2006-04-10  Behdad Esfahbod  
+    
+            Bug 337877 – Patch to use po/LINGUAS
+            Patch from Michiel Sikkes.
+    
+            * configure.in, po/LINGUAS: Move list of translations to po/LINGUAS.
+
+ ChangeLog    | 7 +++++++
+ configure.in | 3 ++-
+ po/LINGUAS   | 3 +++
+ 3 files changed, 12 insertions(+), 1 deletion(-)
+
+commit 7bf79df561c6d373e6778cbc88af002c3ab95054
+Author: Behdad Esfahbod 
+Date:   2006-04-06 21:42:14 +0000
+
+    Bug 337552 – Insufficient version requirement for gtk+
+    
+    2006-04-06  Behdad Esfahbod  
+    
+            Bug 337552 – Insufficient version requirement for gtk+
+    
+            * configure.in: Depend on Gtk+ 2.6.
+
+ ChangeLog    |  6 ++++++
+ configure.in | 11 +++--------
+ 2 files changed, 9 insertions(+), 8 deletions(-)
+
+commit 739a0b91fac0fddd05295da0a8eb2ff54b2a2f11
+Author: Priit Laes 
+Date:   2006-04-05 15:00:25 +0000
+
+    Translation updated by Ivar Smolin.
+    
+    2006-04-05  Priit Laes  
+    
+            * et.po: Translation updated by Ivar Smolin.
+
+ po/ChangeLog |  4 ++++
+ po/et.po     | 68 +++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 41 insertions(+), 31 deletions(-)
+
+commit 32eb3a96eb13dbb54e09f846eb754c52d39b84e3
+Author: Behdad Esfahbod 
+Date:   2006-04-01 02:09:14 +0000
+
+    .
+
+ .cvsignore    | 7 ++++++-
+ po/.cvsignore | 1 +
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit 30ea398ba25b8c3ee9e15b25afc2c03225ba9761
+Author: Behdad Esfahbod 
+Date:   2006-03-31 04:15:49 +0000
+
+    Bug 168251 – add support for 256 colors terminals Patch from
+    
+    2006-03-30  Behdad Esfahbod  
+    
+            Bug 168251 – add support for 256 colors terminals
+            Patch from dann@godzilla.ics.uci.edu.
+    
+            * src/vte-private.h, src/vte.c, src/vteseq.c: Implement support
+            for 256 colors.
+
+ ChangeLog         |   8 +++
+ src/vte-private.h |  26 +++++-----
+ src/vte.c         | 148 +++++++++++++++++++++++++-----------------------------
+ src/vteseq.c      |  39 ++++++++++++--
+ 4 files changed, 124 insertions(+), 97 deletions(-)
+
+commit bf8f8c15c4f2c0f7ad615c85e2698a92b536fe1a
+Author: Behdad Esfahbod 
+Date:   2006-03-31 03:57:57 +0000
+
+    Bug 120276 – Wishlist: Support Rectangular Selection Patch from Pedro de
+    
+    2006-03-30  Behdad Esfahbod  
+    
+            Bug 120276 – Wishlist: Support Rectangular Selection
+            Patch from Pedro de Medeiros.
+    
+            * src/vte.c, src/vte-private.h: Implement block (rectangular)
+            selection using ctrl+mouse.
+
+ ChangeLog         |   8 +++++
+ src/vte-private.h |   2 ++
+ src/vte.c         | 103 +++++++++++++++++++++++++++++++++++++++++++++---------
+ 3 files changed, 96 insertions(+), 17 deletions(-)
+
+commit 24bb4db74a8e09f6c1a80422f25fab65433197bb
+Author: Behdad Esfahbod 
+Date:   2006-03-31 03:51:07 +0000
+
+    Bug 336117 – [patch] Use g_slice API Patch from Aivars Kalvans.
+    
+    2006-03-30  Behdad Esfahbod  
+    
+            Bug 336117 – [patch] Use g_slice API
+            Patch from Aivars Kalvans.
+    
+            * src/*.c: Use g_slice instead of g_malloc for structs.
+            Also, replace g_string_new("") with g_string_new(NULL).
+
+ ChangeLog       |  8 +++++
+ configure.in    |  2 +-
+ src/buffer.c    |  4 +--
+ src/iso2022.c   |  8 ++---
+ src/matcher.c   |  4 +--
+ src/reflect.c   |  2 +-
+ src/ring.c      |  4 +--
+ src/table.c     | 18 ++++++------
+ src/trie.c      |  4 +--
+ src/vte.c       | 12 ++++----
+ src/vteaccess.c |  4 +--
+ src/vteconv.c   |  4 +--
+ src/vtedraw.c   |  4 +--
+ src/vteft2.c    |  4 +--
+ src/vtegl.c     |  4 +--
+ src/vteglyph.c  |  4 +--
+ src/vtepango.c  |  6 ++--
+ src/vtepangox.c |  6 ++--
+ src/vteregex.c  | 20 ++++++-------
+ src/vteskel.c   |  4 +--
+ src/vtetc.c     | 90 +++++++++++++++++++++++++--------------------------------
+ src/vtexft.c    | 11 +++----
+ 22 files changed, 110 insertions(+), 117 deletions(-)
+
+commit 3a497bbf82003a216046c4f66f0fe467745ee788 (tag: vte_0_12_branchpoint)
+Author: Behdad Esfahbod 
+Date:   2006-03-31 00:32:13 +0000
+
+    Branchpoint for vte-0-12.
+    
+    2006-03-30  Behdad Esfahbod  
+    
+            Branchpoint for vte-0-12.
+
+ ChangeLog | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit b5219e70cf617cf7903a57cf9c03fe44349b349d
+Author: Guntupalli Karunakar 
+Date:   2006-03-30 15:01:12 +0000
+
+    Added Dzongkha translation
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   4 ++
+ po/dz.po     | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 131 insertions(+), 1 deletion(-)
+
+commit 35237f2f3c9a8ba3e52dd0dc9b577cad6dceb569
+Author: Behdad Esfahbod 
+Date:   2006-03-27 01:55:17 +0000
+
+    Bug 336128 # vim scrolling issues - emulation errors
+    
+    2006-03-26  Behdad Esfahbod  
+    
+            Bug 336128 # vim scrolling issues - emulation errors
+    
+            * src/vteseq.c (vte_sequence_handler_sf): Update start and end
+            when updating insert_delta.
+
+ ChangeLog    |  7 +++++++
+ src/vteseq.c | 11 ++++++-----
+ 2 files changed, 13 insertions(+), 5 deletions(-)
+
+commit 67131d5fc1344bb3f1dfef5796dd9f8a13b831c7
+Author: Vladimer Sichinava 
+Date:   2006-03-18 02:10:01 +0000
+
+    Update Georgian translation
+
+ po/ka.po | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit e1bd736274af19101cb07f72a56306e6d0ef5393
+Author: Behdad Esfahbod 
+Date:   2006-03-15 11:02:59 +0000
+
+    Bug 334385 – Use intltool
+    
+    2006-03-15  Behdad Esfahbod  
+    
+            Bug 334385 – Use intltool
+    
+            * Makefile.am, configure.in: Add intltool support.
+    
+            * src/iso2022.c, src/reaper.c, src/vteaccess.c, src/vteapp.c,
+            src/vtebg.c, src/vtexft.c, src/vte.c: Include glib/gi18n-lib.h
+            instead of #ifdefing gettext stuff.
+    
+            * src/vte.c (vte_terminal_class_init): Use GETTEXT_PACKAGE instead
+            of PACKAGE in bindgettextdomain.
+
+ ChangeLog       | 13 +++++++++++++
+ Makefile.am     |  5 ++++-
+ configure.in    |  9 ++++++---
+ src/iso2022.c   |  9 +--------
+ src/reaper.c    | 10 +---------
+ src/vte.c       |  3 ++-
+ src/vteaccess.c |  7 +------
+ src/vteapp.c    |  8 +-------
+ src/vtebg.c     |  8 +-------
+ src/vtexft.c    |  8 +-------
+ 10 files changed, 31 insertions(+), 49 deletions(-)
+
+commit c746aa5bf1ff72eee324811989216e8351a88ee3
+Author: Behdad Esfahbod 
+Date:   2006-03-14 11:05:24 +0000
+
+    More tweaks to the previous changes. Reported by dholbach again.
+    
+    2006-03-14  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_size_allocate): More tweaks to the
+            previous changes.  Reported by dholbach again.
+
+ ChangeLog |  7 ++++++-
+ src/vte.c | 50 +++++++++++++++++++++-----------------------------
+ 2 files changed, 27 insertions(+), 30 deletions(-)
+
+commit 6988cdf18b96e0f42eb9c95f8e501305a2cc2f0d
+Author: Behdad Esfahbod 
+Date:   2006-03-13 11:47:22 +0000
+
+    Put the stuff changed in previous commit in their original order. Problem
+    
+    2006-03-13  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_size_allocate): Put the stuff changed in
+            previous commit in their original order.  Problem reported by
+            dholback.
+
+ ChangeLog | 10 ++++++++--
+ src/vte.c | 26 ++++++++++++++++----------
+ 2 files changed, 24 insertions(+), 12 deletions(-)
+
+commit 361ec0090f5132bac972477db6a07ed40c82cb8f
+Author: Behdad Esfahbod 
+Date:   2006-03-13 05:46:01 +0000
+
+    Bug 104841 – scrolling doesn't work inside "screen" windows
+    
+    2006-03-08  Behdad Esfahbod  
+    
+            Bug 104841 – scrolling doesn't work inside "screen" windows
+    
+            * src/vte.c (vte_terminal_size_allocate): Fix restricted scrolling
+            region readjustment.  Moreover, do not do unnecessary updates when
+            number of rows & columns has not changed.
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 56 +++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 35 insertions(+), 29 deletions(-)
+
+commit eb4c9403f8dc29e54c458f8f35624a5b41674cc6
+Author: Behdad Esfahbod 
+Date:   2006-03-13 05:43:32 +0000
+
+    Bug 333768 – vteapp debug stuff should be conditional Patch from Egmont
+    
+    2006-03-08  Behdad Esfahbod  
+    
+            Bug 333768 – vteapp debug stuff should be conditional
+            Patch from Egmont Koblinger.
+    
+            * src/vteapp.c: Make pwd and setting env vars conditional on debug.
+
+ ChangeLog    | 7 +++++++
+ src/vteapp.c | 8 +++++++-
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+commit ce1b7692e1f22c24e13f308f01ee31ea0ba7eb2d (tag: vte_1_12_0)
+Author: Behdad Esfahbod 
+Date:   2006-03-13 05:33:26 +0000
+
+    Released vte-0.12.0.
+    
+    2006-03-08  Behdad Esfahbod  
+    
+            Released vte-0.12.0.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.12.0.
+
+ ChangeLog     |  8 ++++++++
+ NEWS          |  2 ++
+ configure.in  |  2 +-
+ po/am.po      | 27 +++++++++++----------------
+ po/ang.po     | 27 +++++++++++----------------
+ po/ar.po      | 30 ++++++++++++++----------------
+ po/az.po      | 30 ++++++++++++++----------------
+ po/be.po      | 30 ++++++++++++++----------------
+ po/bg.po      | 30 ++++++++++++++----------------
+ po/bn.po      | 30 ++++++++++++++----------------
+ po/bs.po      | 30 ++++++++++++++----------------
+ po/ca.po      | 30 ++++++++++++++----------------
+ po/cs.po      | 30 ++++++++++++++----------------
+ po/cy.po      | 30 ++++++++++++++----------------
+ po/da.po      | 30 ++++++++++++++----------------
+ po/de.po      | 30 ++++++++++++++----------------
+ po/el.po      | 30 ++++++++++++++----------------
+ po/en_CA.po   | 30 ++++++++++++++----------------
+ po/en_GB.po   | 30 ++++++++++++++----------------
+ po/es.po      | 30 ++++++++++++++----------------
+ po/et.po      | 30 ++++++++++++++----------------
+ po/eu.po      | 30 ++++++++++++++----------------
+ po/fa.po      |  2 +-
+ po/fi.po      | 30 ++++++++++++++----------------
+ po/fr.po      | 30 ++++++++++++++----------------
+ po/ga.po      | 27 +++++++++++----------------
+ po/gl.po      | 30 ++++++++++++++----------------
+ po/gu.po      | 30 ++++++++++++++----------------
+ po/he.po      | 30 ++++++++++++++----------------
+ po/hi.po      | 30 ++++++++++++++----------------
+ po/hr.po      | 30 ++++++++++++++----------------
+ po/hu.po      | 30 ++++++++++++++----------------
+ po/id.po      | 30 ++++++++++++++----------------
+ po/is.po      | 30 ++++++++++++++----------------
+ po/it.po      | 30 ++++++++++++++----------------
+ po/ja.po      | 30 ++++++++++++++----------------
+ po/ka.po      | 30 ++++++++++++++----------------
+ po/kn.po      | 45 ++++++++++++++++++++++-----------------------
+ po/ko.po      | 30 ++++++++++++++----------------
+ po/ku.po      | 45 +++++++++++++++++++--------------------------
+ po/ky.po      | 30 ++++++++++++++----------------
+ po/li.po      | 30 ++++++++++++++----------------
+ po/lt.po      | 30 ++++++++++++++----------------
+ po/lv.po      | 44 ++++++++++++++++++++++----------------------
+ po/mi.po      | 27 +++++++++++----------------
+ po/mk.po      | 30 ++++++++++++++----------------
+ po/ml.po      | 27 +++++++++++----------------
+ po/mn.po      | 30 ++++++++++++++----------------
+ po/ms.po      | 30 ++++++++++++++----------------
+ po/nb.po      | 30 ++++++++++++++----------------
+ po/ne.po      | 30 ++++++++++++++----------------
+ po/nl.po      | 30 ++++++++++++++----------------
+ po/nn.po      | 30 ++++++++++++++----------------
+ po/no.po      | 30 ++++++++++++++----------------
+ po/or.po      | 30 ++++++++++++++----------------
+ po/pa.po      | 30 ++++++++++++++----------------
+ po/pl.po      | 30 ++++++++++++++----------------
+ po/pt.po      | 30 ++++++++++++++----------------
+ po/pt_BR.po   | 30 ++++++++++++++----------------
+ po/ro.po      | 30 ++++++++++++++----------------
+ po/ru.po      | 30 ++++++++++++++----------------
+ po/rw.po      | 31 +++++++++++++++----------------
+ po/sk.po      | 30 ++++++++++++++----------------
+ po/sl.po      | 30 ++++++++++++++----------------
+ po/sq.po      | 30 ++++++++++++++----------------
+ po/sr.po      | 30 ++++++++++++++----------------
+ po/sr@Latn.po | 30 ++++++++++++++----------------
+ po/sv.po      | 30 ++++++++++++++----------------
+ po/ta.po      | 30 ++++++++++++++----------------
+ po/th.po      | 30 ++++++++++++++----------------
+ po/tr.po      | 30 ++++++++++++++----------------
+ po/ug.po      | 30 ++++++++++++++----------------
+ po/uk.po      | 30 ++++++++++++++----------------
+ po/vi.po      | 30 ++++++++++++++----------------
+ po/wa.po      | 30 ++++++++++++++----------------
+ po/xh.po      | 30 ++++++++++++++----------------
+ po/zh_CN.po   | 30 ++++++++++++++----------------
+ po/zh_HK.po   | 39 +++++++++++++++++++--------------------
+ po/zh_TW.po   | 39 +++++++++++++++++++--------------------
+ 79 files changed, 1079 insertions(+), 1233 deletions(-)
+
+commit 5c3e4026fac29c5c8024c6c13a9542a9207c99ee
+Author: Kwok-Koon Cheung 
+Date:   2006-03-09 01:33:37 +0000
+
+    update header info
+
+ po/kn.po | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 1605865137784af059d22f07e07b4df5941a8a90
+Author: Kwok-Koon Cheung 
+Date:   2006-03-09 01:24:50 +0000
+
+    Really fixed kn.po this time
+
+ ChangeLog    | 5 +++++
+ configure.in | 2 +-
+ po/ChangeLog | 4 ++++
+ po/kn.po     | 7 +++----
+ 4 files changed, 13 insertions(+), 5 deletions(-)
+
+commit 80f7abbff13e05a4c7e0b337361e722138d18071
+Author: Behdad Esfahbod 
+Date:   2006-03-08 22:21:24 +0000
+
+    Removed kn from ALL_LINGUAS, as it was breaking the build.
+    
+            * configure.in: Removed kn from ALL_LINGUAS, as it was breaking
+            the build.
+
+ ChangeLog    | 3 +++
+ configure.in | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit 8be612163d22a80845e92f3a91bfdc90eaa02bae (tag: vte_0_11_21)
+Author: Behdad Esfahbod 
+Date:   2006-03-08 22:13:46 +0000
+
+    Released vte-0.11.21.
+    
+    2006-03-08  Behdad Esfahbod  
+    
+            Released vte-0.11.21.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.11.21.
+
+ ChangeLog    | 8 ++++++++
+ NEWS         | 6 ++++++
+ configure.in | 2 +-
+ 3 files changed, 15 insertions(+), 1 deletion(-)
+
+commit 121c11338dee9f748cc5a7dfc4f47bab114b7b78
+Author: Behdad Esfahbod 
+Date:   2006-03-08 20:31:13 +0000
+
+    Fix vte_update_timeout repeat to 25ms. (bug #333776, Egmont Koblinger)
+    
+    2006-03-08  Behdad Esfahbod  
+    
+            * src/vte.c, src/vte-private.h: Fix vte_update_timeout repeat to
+            25ms. (bug #333776, Egmont Koblinger)
+
+ ChangeLog         | 5 +++++
+ src/vte-private.h | 1 +
+ src/vte.c         | 2 +-
+ 3 files changed, 7 insertions(+), 1 deletion(-)
+
+commit 1ac0068119ebff08ebc7eb66eae8f5264529531d
+Author: Abel Cheung 
+Date:   2006-03-07 21:14:39 +0000
+
+    Added "kn" "zh_HK" to ALL_LINGUAS.
+    
+    2006-03-07  Abel Cheung  
+    
+            * configure.in: Added "kn" "zh_HK" to ALL_LINGUAS.
+
+ ChangeLog    | 4 ++++
+ configure.in | 5 +----
+ 2 files changed, 5 insertions(+), 4 deletions(-)
+
+commit d30d72a4614e885eee0b32c0d597bf4c91313a1b
+Author: Kwok-Koon Cheung 
+Date:   2006-03-07 21:12:02 +0000
+
+    Updated Chinese (Taiwan) translation. New Chinese (Hong Kong) translation.
+    
+            * zh_TW.po: Updated Chinese (Taiwan) translation.
+            * zh_HK.po: New Chinese (Hong Kong) translation.
+
+ po/ChangeLog |   5 +++
+ po/zh_HK.po  | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ po/zh_TW.po  |  99 +++++++++++++++++++---------------------------------
+ 3 files changed, 152 insertions(+), 64 deletions(-)
+
+commit 95c7891534f03b458af7881fe8b3d315fc43deae
+Author: Behdad Esfahbod 
+Date:   2006-03-01 01:44:40 +0000
+
+    Step up COALESCE_TIMEOUT and DISPLAY_TIMEOUT from 2ms to 10ms. This is
+    
+    2006-02-28  Behdad Esfahbod  
+    
+            * src/vte-private.h: Step up COALESCE_TIMEOUT and DISPLAY_TIMEOUT
+            from 2ms to 10ms.  This is more compatible with the updated timeout
+            that we are doing at around 25ms.
+
+ ChangeLog         |  6 ++++++
+ src/vte-private.h | 11 ++++++-----
+ src/vte.c         |  2 +-
+ 3 files changed, 13 insertions(+), 6 deletions(-)
+
+commit 985b6d715b4c303db6ec005816cce7c4ef8c7a93
+Author: Guilherme de S. Pastore 
+Date:   2006-02-28 09:39:16 +0000
+
+    19:17     behdad: km_sleep, fatalerror-: you guys, please add yourself to vte/MAINTAINERS
+
+ MAINTAINERS | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit f1612d012fe1fa41ef9aeb589840dbf48b948070
+Author: Clytie Siddall 
+Date:   2006-02-28 05:22:12 +0000
+
+    lv.po: Updated Latvian translation.
+
+ po/ChangeLog |   4 +++
+ po/lv.po     | 104 +++++++++++++++++++++--------------------------------------
+ 2 files changed, 40 insertions(+), 68 deletions(-)
+
+commit cdc91c6c767848bf4eeee8762e4d937b3283ccd4
+Author: Behdad Esfahbod 
+Date:   2006-02-28 03:28:59 +0000
+
+    Added.
+    
+    2006-02-27  Behdad Esfahbod  
+    
+            * MAINTAINERS: Added.
+
+ ChangeLog   | 4 ++++
+ HACKING     | 9 +++------
+ MAINTAINERS | 4 ++++
+ Makefile.am | 2 +-
+ 4 files changed, 12 insertions(+), 7 deletions(-)
+
+commit c72e9fd4e383a946374c3f9d8f561d46c357a377 (tag: vte_0_11_20)
+Author: Behdad Esfahbod 
+Date:   2006-02-26 00:13:39 +0000
+
+    Released vte-0.11.20.
+    
+    2006-02-25  Behdad Esfahbod  
+    
+            Released vte-0.11.20.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.11.20.
+
+ ChangeLog    | 8 ++++++++
+ NEWS         | 3 +++
+ configure.in | 2 +-
+ po/fa.po     | 4 ++--
+ 4 files changed, 14 insertions(+), 3 deletions(-)
+
+commit a8dc95d35d179748f5b32e876241044647c86185
+Author: Behdad Esfahbod 
+Date:   2006-02-25 23:20:42 +0000
+
+    Rever the patch to optimize memory usage by releasing fonts that aren't
+    
+    2006-02-25  Behdad Esfahbod  
+    
+            * src/vtexft.c: (_vte_xft_font_for_char): Rever the patch to
+            optimize memory usage by releasing fonts that aren't needed early.
+            Because that was inserting destroyed fonts into cache. Closes bug
+            #332580 and reverts bug #309322.
+
+ ChangeLog    |  7 +++++++
+ src/vtexft.c | 22 ++++++----------------
+ 2 files changed, 13 insertions(+), 16 deletions(-)
+
+commit 075456ee218b973c7b4aa102ef1d40cee46b7972 (tag: vte_0_11_19)
+Author: Behdad Esfahbod 
+Date:   2006-02-25 09:17:01 +0000
+
+    Released vte-0.11.19.
+    
+    2006-02-25  Behdad Esfahbod  
+    
+            Released vte-0.11.19.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.11.19.
+
+ ChangeLog    |  8 ++++++++
+ NEWS         |  8 ++++++++
+ configure.in |  2 +-
+ po/fa.po     | 18 +++++++++---------
+ 4 files changed, 26 insertions(+), 10 deletions(-)
+
+commit 2ada5623c5c2aacd2648c773f590d2664c96c00a
+Author: Behdad Esfahbod 
+Date:   2006-02-17 12:38:42 +0000
+
+    Make shift+insert paste PRIMARY and ctrl+shift+insert paste CLIPBOARD
+    
+    2006-02-17  Behdad Esfahbod  
+    
+            * src/vte.c: Make shift+insert paste PRIMARY and ctrl+shift+insert
+            paste CLIPBOARD (switched them. bug #123844)
+
+ ChangeLog | 5 +++++
+ src/vte.c | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 37aff2e7951558fbc06d580be1886302cc3c7de1
+Author: Behdad Esfahbod 
+Date:   2006-02-17 12:31:08 +0000
+
+    Better update-timeout handling. Always delay updates a bit. Schedule
+    
+    2006-02-17  Behdad Esfahbod  
+    
+            * src/vte.c: Better update-timeout handling.  Always delay updates
+            a bit.  Schedule updates as G_PRIORITY_DEFAULT_IDLE.  And, set delay
+            as the number of lines, in milliseconds.
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 71 +++++++++++++++++++++++++++++++++++++++++++--------------------
+ 2 files changed, 55 insertions(+), 22 deletions(-)
+
+commit d5274a05e5fe49fb34901adb1c0988437d6a9348
+Author: Behdad Esfahbod 
+Date:   2006-02-14 22:18:49 +0000
+
+    Return 0. (bug #331178)
+    
+    2006-02-14  Behdad Esfahbod  
+    
+            * src/vteseq-gen.c (main): Return 0.  (bug #331178)
+
+ ChangeLog           | 4 ++++
+ python/cat.py       | 2 +-
+ python/unrealize.py | 2 +-
+ src/vteseq-gen.c    | 2 ++
+ 4 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 226ba9f308b60790a762b6a2ed312b737a828433
+Author: Behdad Esfahbod 
+Date:   2006-02-14 09:00:32 +0000
+
+    Use getpwnam to correctly log multiple users with the same UID. (bug
+    
+    2006-02-14  Behdad Esfahbod  
+    
+            * gnome-pty-helper/gnome-pty-helper.c (main): Use getpwnam to
+            correctly log multiple users with the same UID. (bug #319564,
+            patch from Laszlo (Laca) Peter.
+
+ ChangeLog                           |  6 ++++++
+ gnome-pty-helper/gnome-pty-helper.c | 16 +++++++++++++++-
+ 2 files changed, 21 insertions(+), 1 deletion(-)
+
+commit 46cdab5bf7357f8e502cbe4f8ce7bd03f543cb9e
+Author: Behdad Esfahbod 
+Date:   2006-02-14 05:50:28 +0000
+
+    Only discontinue timer if nothing was updated in the last cycle.
+    
+    2006-02-13  Behdad Esfahbod  
+    
+            * src/vte.c (update_timeout): Only discontinue timer if nothing
+            was updated in the last cycle.
+
+ ChangeLog | 5 +++++
+ src/vte.c | 8 ++++++--
+ 2 files changed, 11 insertions(+), 2 deletions(-)
+
+commit 7bcb1977db20099d686099802efd1fbf393c92ee
+Author: Behdad Esfahbod 
+Date:   2006-02-13 22:24:17 +0000
+
+    Fix race condition when shutdown_helper may be called again from the
+    
+    2006-02-13  Behdad Esfahbod  
+    
+            * gnome-pty-helper/gnome-pty-helper.c: Fix race condition when
+            shutdown_helper may be called again from the signal handler when
+            it's already running. (bug #331056)
+
+ ChangeLog                           |  6 ++++++
+ gnome-pty-helper/ChangeLog          |  1 +
+ gnome-pty-helper/gnome-pty-helper.c | 18 +++++++++++-------
+ 3 files changed, 18 insertions(+), 7 deletions(-)
+
+commit cf6368c0aa47983547772669e4d9f7f462b7a0ba
+Author: Behdad Esfahbod 
+Date:   2006-02-13 21:31:18 +0000
+
+    Do not prepend X_LIBS and X_CFLAGS to LIBS and CFLAGS. (bug #331021,
+    
+    2006-02-13  Behdad Esfahbod  
+    
+            * configure.in: Do not prepend X_LIBS and X_CFLAGS to LIBS and
+            CFLAGS. (bug #331021, Sylvain BERTRAND)
+
+ ChangeLog    | 5 +++++
+ configure.in | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 4faae4ba893d5ed822ce7066e11e8bb163b29b0b
+Author: Behdad Esfahbod 
+Date:   2006-02-13 20:50:14 +0000
+
+    Handle Ctrl+Shift+Insert to paste PRIMARY.
+    
+    2006-02-13  Behdad Esfahbod  
+    
+            * src/vte.c (vte_terminal_key_press): Handle Ctrl+Shift+Insert to
+            paste PRIMARY.
+
+ ChangeLog |  5 +++++
+ src/vte.c | 12 +++++++++---
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+commit b93f42ff246c70ed6743240a5a3892121262edbb (tag: vte_0_11_18)
+Author: Behdad Esfahbod 
+Date:   2006-02-11 20:04:30 +0000
+
+    Released vte-0.11.18.
+    
+    2006-02-11  Behdad Esfahbod  
+    
+            Released vte-0.11.18.
+    
+            * NEWS: Updated.
+    
+            * configure.in: Bumped version to 0.11.18.
+
+ ChangeLog    |  8 ++++++++
+ NEWS         | 14 ++++++++++++++
+ configure.in |  2 +-
+ po/fa.po     |  2 +-
+ 4 files changed, 24 insertions(+), 2 deletions(-)
+
+commit 89b9d8fab395d84160c26d9f0e5cee0270177c81
+Author: Behdad Esfahbod 
+Date:   2006-02-11 18:29:06 +0000
+
+    Change INVALID_CODEPOINT from 0xFFFF to 0xFFFD. (bug #317235, Egmont
+    
+    2006-02-11  Behdad Esfahbod  
+    
+            * src/iso2022.c: Change INVALID_CODEPOINT from 0xFFFF to 0xFFFD.
+            (bug #317235, Egmont Koblinger)
+
+ ChangeLog     | 5 +++++
+ src/iso2022.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 4e9d18e1b95676972e16f70b81c332cc41564d9f
+Author: Behdad Esfahbod 
+Date:   2006-02-11 18:24:52 +0000
+
+    Guard more against off values.
+    
+    2006-02-11  Behdad Esfahbod  
+    
+            * src/vte.c (_vte_invalidate_cells): Guard more against off values.
+
+ ChangeLog |  4 ++++
+ po/fa.po  |  2 +-
+ src/vte.c | 14 +++++++-------
+ 3 files changed, 12 insertions(+), 8 deletions(-)
+
+commit a4b4fa1ccbcf269e87256f52c075889b3bc54e7b
+Author: Behdad Esfahbod 
+Date:   2006-02-11 05:07:23 +0000
+
+    vte-overrides.txt should be in CVS in fact.
+
+ doc/reference/Makefile.am       | 2 +-
+ doc/reference/vte-overrides.txt | 0
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+
+commit a567da4ddf37ba503a5bfde9fea8d20c5fede18a
+Author: Behdad Esfahbod 
+Date:   2006-02-11 05:04:34 +0000
+
+    Added more MAINTAINERCLEANFILES.
+
+ Makefile.am               | 1 +
+ doc/reference/Makefile.am | 2 ++
+ 2 files changed, 3 insertions(+)
+
+commit 3eb98191b6c546b21657246870dcf4b334e0f131
+Author: Behdad Esfahbod 
+Date:   2006-02-11 04:56:09 +0000
+
+    Added MAINTAINERCLEANFILES.
+
+ Makefile.am                  | 20 ++++++++++++++++++++
+ gnome-pty-helper/Makefile.am |  9 +++++++++
+ 2 files changed, 29 insertions(+)
+
+commit e95ea25427129cc711c2b7337a9f0b502a24ede7
+Author: Behdad Esfahbod 
+Date:   2006-02-11 04:45:33 +0000
+
+    Update the build infrastructure. make distcheck works now!
+    
+    2006-02-10  Behdad Esfahbod  
+    
+            Update the build infrastructure.  make distcheck works now!
+    
+            * autogen.sh: Use a generic autogen.sh that uses gnome-common.
+    
+            * configure.in: Simplify gtk-doc stuff.  Update to newer syntax.
+    
+            * Makefile.am, src/Makefile.am, doc/reference/Makefile.am: Updated.
+
+ .cvsignore                  |   5 +
+ ChangeLog                   |  10 ++
+ Makefile.am                 |   2 +
+ autogen.sh                  | 121 +++---------------------
+ configure.in                |  70 ++------------
+ doc/reference/Makefile.am   | 225 ++++++++++----------------------------------
+ gnome-pty-helper/.cvsignore |   2 +
+ po/fa.po                    |  25 ++---
+ python/vte-demo.py          |   2 +-
+ src/Makefile.am             |   1 +
+ vte.spec => vte.spec.in     |   2 +-
+ 11 files changed, 105 insertions(+), 360 deletions(-)
+
+commit 2f710f0f5ff8efe8f2dc2d4601da5c4eaa6716a6
+Author: Behdad Esfahbod 
+Date:   2006-02-10 09:30:23 +0000
+
+    Throttle invalidating to at most 40 times per second, using a timeout.
+    
+    2006-02-10  Behdad Esfahbod  
+    
+            * src/vte.c (_vte_invalidate_cells): Throttle invalidating to at most
+            40 times per second, using a timeout.
+
+ ChangeLog         |  5 +++++
+ src/vte-private.h |  3 +++
+ src/vte.c         | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 3 files changed, 58 insertions(+), 2 deletions(-)
+
+commit bd9905c897449014f31753318593588bff7bfff1
+Author: Behdad Esfahbod 
+Date:   2006-02-10 09:25:56 +0000
+
+    Removed the huge sequence handler table. Changed to use the compact tables
+    
+    2006-02-10  Behdad Esfahbod  
+    
+            * src/vteseq.c: Removed the huge sequence handler table.  Changed to
+            use the compact tables in vteseq-table.h.
+    
+            * src/vteseq-gen.c: Generator containing the table removed from above,
+            that generates compact tables.
+    
+            * src/vteseq-table.h: Table generated by above.  Can be regenerated
+            using make.
+    
+            * src/Makefile.am: Adjusted.
+    
+            * src/vteapp.c: Set default font to Monospace instead of Sans.
+
+ ChangeLog          |  15 ++
+ src/.cvsignore     |   1 +
+ src/Makefile.am    |   5 +
+ src/vteapp.c       |   2 +-
+ src/vteseq-gen.c   | 505 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vteseq-table.h | 388 ++++++++++++++++++++++++++++++++++++++++
+ src/vteseq.c       | 484 ++++++--------------------------------------------
+ 7 files changed, 966 insertions(+), 434 deletions(-)
+
+commit 26b84670316fb249aa4671a11f979bb468f2913b
+Author: Behdad Esfahbod 
+Date:   2006-02-10 08:02:48 +0000
+
+    Allocate terminal->pvt using GObject private data.
+    
+    2006-02-10  Behdad Esfahbod  
+    
+            * src/vte.c: Allocate terminal->pvt using GObject private data.
+
+ ChangeLog |   4 +++
+ src/vte.c | 114 ++++++--------------------------------------------------------
+ 2 files changed, 14 insertions(+), 104 deletions(-)
+
+commit f3d79059c30b8a89fc1409ea63ee23c19823e8e3
+Author: Behdad Esfahbod 
+Date:   2006-02-10 07:58:28 +0000
+
+    Moved all sequence handler codes into a separate file.
+    
+    2006-02-10  Behdad Esfahbod  
+    
+            Moved all sequence handler codes into a separate file.
+    
+            * src/vte.c: Stuff moved to other files.
+    
+            * src/vte-private.h: Includes all struct definitions from vte.c.
+    
+            * src/vteseq.c, src/vteseq.h, src/vteseq-list.h: The sequence
+            handlers are all here now.
+
+ ChangeLog         |   11 +
+ src/Makefile.am   |    4 +
+ src/vte-private.h |  385 +++++
+ src/vte.c         | 4986 ++---------------------------------------------------
+ src/vteseq-list.h |  122 ++
+ src/vteseq.c      | 4462 +++++++++++++++++++++++++++++++++++++++++++++++
+ src/vteseq.h      |   40 +
+ 7 files changed, 5156 insertions(+), 4854 deletions(-)
+
+commit e11441c2d9390f3e9645c162b8b1ae9a10a78a63
+Author: Behdad Esfahbod 
+Date:   2006-02-09 22:31:03 +0000
+
+    Make a couple debug messages conditional on DEBUG_MISC.
+    
+    2006-02-09  Behdad Esfahbod  
+    
+            * src/vteapp.c: Make a couple debug messages conditional on
+            DEBUG_MISC.
+
+ ChangeLog    |  5 +++++
+ src/vteapp.c | 12 ++++++++++--
+ 2 files changed, 15 insertions(+), 2 deletions(-)
+
+commit 1a07b922fe717e0b8144d5249e38153538e6aeea
+Author: Behdad Esfahbod 
+Date:   2006-02-03 14:34:10 +0000
+
+    Warning cleanup. A couple were actually bugs.
+    
+    2006-02-03  Behdad Esfahbod  
+    
+            * src/vte.c: Warning cleanup.  A couple were actually bugs.
+    
+            * src/vteapp.c: No need to run $SHELL by default.  Handled
+            by vte.c now.  A bug was causing nothing to be run...
+
+ ChangeLog    |  7 +++++++
+ src/vte.c    | 28 +++++++++++++++++-----------
+ src/vteapp.c |  2 +-
+ 3 files changed, 25 insertions(+), 12 deletions(-)
+
+commit 5d005b24d8f1496641c0f81f0995e1f9ae643b85
+Author: Behdad Esfahbod 
+Date:   2006-02-03 13:27:27 +0000
+
+    Add the debug flag TRIE for printing out the trie (previous was using
+    
+    2006-02-03  Behdad Esfahbod  
+    
+            * src/debug.c, src/debug.h, src/matcher.c: Add the debug
+            flag TRIE for printing out the trie (previous was using
+            MISC.)
+    
+            * src/vte.c (vte_invalidate_cells): Update row_count and
+            column_count when clamping their respective _start values.
+    
+            * src/vte.c (vte_terminal_extend_selection,
+            * _vte_terminal_select_text):
+            Pass row_count to vte_invalidate_cells(), instead of row_stop.
+    
+            * src/vteapp.c: Run $SHELL by default.
+
+ ChangeLog                         | 14 ++++++++++++++
+ doc/reference/tmpl/internals.sgml |  2 --
+ src/debug.c                       |  3 +++
+ src/debug.h                       |  3 ++-
+ src/matcher.c                     |  2 +-
+ src/vte.c                         | 27 ++++++++++++++++-----------
+ src/vteapp.c                      |  2 +-
+ src/vtedraw.c                     | 14 +++++++-------
+ 8 files changed, 44 insertions(+), 23 deletions(-)
+
+commit 1785a75abdb32c5e889526d41e54bd7b336e23b5
+Author: Behdad Esfahbod 
+Date:   2006-02-02 03:43:16 +0000
+
+    Added to CVS.
+    
+    2006-02-01  Behdad Esfahbod  
+    
+            * doc/reference/tmpl/internals.sgml: Added to CVS.
+    
+            * vte/src/vte.c: Fix selection vs. primary that have been
+            borked forever. Closes bug #123844.
+
+ ChangeLog                          |  7 +++++
+ doc/reference/.cvsignore           |  1 +
+ doc/reference/tmpl/internals.sgml  | 18 +++++++++++++
+ doc/reference/tmpl/reaper.sgml     |  3 ---
+ doc/reference/tmpl/vte-unused.sgml |  4 +++
+ doc/reference/tmpl/vte.sgml        |  3 ---
+ doc/reference/tmpl/vteaccess.sgml  |  3 ---
+ src/keymap.c                       |  2 +-
+ src/vte.c                          | 54 ++++++++++++++++++++++++++------------
+ 9 files changed, 68 insertions(+), 27 deletions(-)
+
+commit 14310a352215434f45d24584bc34156ee922d639
+Author: Guilherme de S. Pastore 
+Date:   2006-01-30 12:23:49 +0000
+
+    applied patch from Tomas Mraz to fix a double free. Closes bug #161337.
+    
+    * src/trie.c: applied patch from Tomas Mraz to fix a double
+      free. Closes bug #161337.
+
+ ChangeLog  |  5 +++++
+ src/trie.c | 10 +++++++---
+ 2 files changed, 12 insertions(+), 3 deletions(-)
+
+commit 154c33179ee3d9de0bdf3416dabea3cdead0ebdc
+Author: Erdal Ronahi 
+Date:   2006-01-30 01:08:08 +0000
+
+    Added initial Kurdish translations.
+
+ ChangeLog    |   4 ++
+ configure.in |   5 ++-
+ po/ChangeLog |   4 ++
+ po/ku.po     | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 130 insertions(+), 1 deletion(-)
+
+commit 72fcd8154eaf51afaec22fc9e336e078a9c45c26
+Author: Guilherme de S. Pastore 
+Date:   2006-01-28 20:23:52 +0000
+
+    add -DG_DISABLE_ASSERT to CFLAGS. updated. bumped version to 0.11.17. only
+    
+    * src/Makefile.am: add -DG_DISABLE_ASSERT to CFLAGS.
+    * NEWS: updated.
+    * vte.spec: bumped version to 0.11.17.
+    * src/vte.c: only try to guess the user's shell when actually
+      forking, so we avoid unnecessary work if the application
+      already has to do that itself.
+
+ ChangeLog       | 14 ++++++++++++++
+ NEWS            | 13 +++++++++++--
+ src/Makefile.am |  2 +-
+ src/vte.c       | 58 +++++++++++++++++++++++++++++++--------------------------
+ vte.spec        |  2 +-
+ 5 files changed, 59 insertions(+), 30 deletions(-)
+
+commit 93d57b0c02afb1510bad099c3cf4da4f10f03ab9
+Author: Kjartan Maraas 
+Date:   2006-01-15 22:34:33 +0000
+
+    Fix the build after the previous commit. And update the NEWS file a bit
+
+ NEWS      | 2 ++
+ src/vte.c | 2 +-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+commit 923b824fd9f75accb05585b740b628f40aea7ebc
+Author: Guilherme de S. Pastore 
+Date:   2006-01-15 21:09:41 +0000
+
+    applied patch from kmaraas to replace g_return* with g_assert in static functions
+
+ ChangeLog       |   5 ++
+ src/ring.c      |   2 +-
+ src/vte.c       | 198 ++++++++++++++++++++++++++++----------------------------
+ src/vteaccess.c | 104 +++++++++++++++--------------
+ src/vteapp.c    |  18 +++---
+ src/vtetc.c     |  12 ++--
+ src/vtexft.c    |  30 ++++-----
+ 7 files changed, 186 insertions(+), 183 deletions(-)
+
+commit ac0e2cad69de1134949764b5793c9737e1a92cd3
+Author: Guilherme de S. Pastore 
+Date:   2006-01-14 13:31:35 +0000
+
+    install more than *.html, based on the patch from Ed Catmur. Closes bug
+    
+    * doc/reference/Makefile.am: install more than *.html, based on the
+      patch from Ed Catmur. Closes bug #321909.
+
+ ChangeLog                 | 5 +++++
+ doc/reference/Makefile.am | 6 ++----
+ 2 files changed, 7 insertions(+), 4 deletions(-)
+
+commit a18578af735cb07eafaa98cb3e6d66be4fa1c9bc
+Author: Olav Vitters 
+Date:   2006-01-14 13:10:33 +0000
+
+    Support save and restore cursor position using \033[s and \033[u. Reported
+    
+    2006-01-14  Olav Vitters  
+    
+    * src/caps.c: Support save and restore cursor position using \033[s
+    and \033[u. Reported by Dag Wieers. Fixes bug 170032.
+
+ ChangeLog  | 5 +++++
+ src/caps.c | 2 ++
+ 2 files changed, 7 insertions(+)
+
+commit e0bc53fbe3b3ffa56099e8f807764184ea2df69f
+Author: Olav Vitters 
+Date:   2005-12-31 11:27:56 +0000
+
+    Backup patch from Steve Langasek. It needs pkg-config changes.
+    
+    2005-12-31  Olav Vitters  
+    
+    * vte.pc.in: Backup patch from Steve Langasek. It needs pkg-config
+    changes.
+
+ ChangeLog | 5 +++++
+ vte.pc.in | 5 ++---
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+commit c83369c96f5d1f83fd3c346a6a6e7b7edcf67448
+Author: Kjartan Maraas 
+Date:   2005-12-13 14:21:54 +0000
+
+    Flush after release
+
+ po/am.po      | 22 +++++++++++-----------
+ po/ang.po     | 22 +++++++++++-----------
+ po/ar.po      | 22 +++++++++++-----------
+ po/az.po      | 22 +++++++++++-----------
+ po/be.po      | 22 +++++++++++-----------
+ po/bg.po      | 22 +++++++++++-----------
+ po/bn.po      | 41 ++++++++++++++++++++---------------------
+ po/bs.po      | 22 +++++++++++-----------
+ po/ca.po      | 41 ++++++++++++++++++++---------------------
+ po/cs.po      | 22 +++++++++++-----------
+ po/cy.po      | 22 +++++++++++-----------
+ po/da.po      | 22 +++++++++++-----------
+ po/de.po      | 22 +++++++++++-----------
+ po/el.po      | 22 +++++++++++-----------
+ po/en_CA.po   | 22 +++++++++++-----------
+ po/en_GB.po   | 22 +++++++++++-----------
+ po/es.po      | 22 +++++++++++-----------
+ po/et.po      | 22 +++++++++++-----------
+ po/eu.po      | 22 +++++++++++-----------
+ po/fa.po      | 22 +++++++++++-----------
+ po/fi.po      | 22 +++++++++++-----------
+ po/fr.po      | 22 +++++++++++-----------
+ po/ga.po      | 22 +++++++++++-----------
+ po/gl.po      | 22 +++++++++++-----------
+ po/gu.po      | 22 +++++++++++-----------
+ po/he.po      | 22 +++++++++++-----------
+ po/hi.po      | 22 +++++++++++-----------
+ po/hr.po      | 22 +++++++++++-----------
+ po/hu.po      | 45 ++++++++++++++++++++++-----------------------
+ po/id.po      | 22 +++++++++++-----------
+ po/is.po      | 22 +++++++++++-----------
+ po/it.po      | 22 +++++++++++-----------
+ po/ja.po      | 22 +++++++++++-----------
+ po/ka.po      | 22 +++++++++++-----------
+ po/ko.po      | 22 +++++++++++-----------
+ po/ky.po      | 42 ++++++++++++++++++++----------------------
+ po/li.po      | 22 +++++++++++-----------
+ po/lt.po      | 22 +++++++++++-----------
+ po/lv.po      | 22 +++++++++++-----------
+ po/mi.po      | 22 +++++++++++-----------
+ po/mk.po      | 22 +++++++++++-----------
+ po/ml.po      | 22 +++++++++++-----------
+ po/mn.po      | 22 +++++++++++-----------
+ po/ms.po      | 22 +++++++++++-----------
+ po/nb.po      | 22 +++++++++++-----------
+ po/ne.po      | 22 +++++++++++-----------
+ po/nl.po      | 22 +++++++++++-----------
+ po/nn.po      | 22 +++++++++++-----------
+ po/no.po      | 22 +++++++++++-----------
+ po/or.po      | 22 +++++++++++-----------
+ po/pa.po      | 22 +++++++++++-----------
+ po/pl.po      | 22 +++++++++++-----------
+ po/pt.po      | 22 +++++++++++-----------
+ po/pt_BR.po   | 22 +++++++++++-----------
+ po/ro.po      | 22 +++++++++++-----------
+ po/ru.po      | 22 +++++++++++-----------
+ po/rw.po      | 22 +++++++++++-----------
+ po/sk.po      | 22 +++++++++++-----------
+ po/sl.po      | 22 +++++++++++-----------
+ po/sq.po      | 22 +++++++++++-----------
+ po/sr.po      | 22 +++++++++++-----------
+ po/sr@Latn.po | 22 +++++++++++-----------
+ po/sv.po      | 22 +++++++++++-----------
+ po/ta.po      | 22 +++++++++++-----------
+ po/th.po      | 22 +++++++++++-----------
+ po/tr.po      | 22 +++++++++++-----------
+ po/ug.po      | 22 +++++++++++-----------
+ po/uk.po      | 22 +++++++++++-----------
+ po/vi.po      | 22 +++++++++++-----------
+ po/wa.po      | 22 +++++++++++-----------
+ po/xh.po      | 22 +++++++++++-----------
+ po/zh_CN.po   | 22 +++++++++++-----------
+ po/zh_TW.po   | 22 +++++++++++-----------
+ 73 files changed, 841 insertions(+), 846 deletions(-)
+
+commit 34db0ffe7696fd255fa5a4fa03ed090fdf7a3be5 (tag: vte_0_11_16)
+Author: Kjartan Maraas 
+Date:   2005-12-12 18:49:50 +0000
+
+    Update for 0.11.16
+
+ NEWS | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 008dbeb4e5520c12a2f99956ebbfbc6bbf44c3b5
+Author: Kjartan Maraas 
+Date:   2005-12-12 18:46:15 +0000
+
+    Cleanups for the pkg-config file. Patch from Steve Langasek. Closes bug
+    
+    2005-12-12  Kjartan Maraas  
+    
+            * vte.pc.in: Cleanups for the pkg-config file.
+            Patch from Steve Langasek. Closes bug #322240.
+
+ ChangeLog | 5 +++++
+ vte.pc.in | 5 +++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit a57992dd24aa27bafd9df03c70d175cb74b43c0c
+Author: Kjartan Maraas 
+Date:   2005-12-12 18:42:21 +0000
+
+    python-vte seems to have a small bug in the override file that prevents
+    
+    2005-12-12  Kjartan Maraas  
+    
+            * python/vte.override: python-vte seems to have a small bug in
+            the override file that prevents the forkpty() method to be generated.
+            The attached patch fixes this problem. Patch from Michael Vogt.
+            Closes bug #169201.
+
+ ChangeLog           | 7 +++++++
+ python/vte.override | 2 ++
+ 2 files changed, 9 insertions(+)
+
+commit a44035e91dffdbeb3613d56234c74bb6d8483368
+Author: Kjartan Maraas 
+Date:   2005-11-30 00:32:25 +0000
+
+    Remove some unused code. (vte_terminal_process_incoming): Don't emit
+    
+    2005-11-30  Kjartan Maraas  
+    
+            * src/vte.c: (vte_terminal_preedit_length): Remove some
+            unused code.
+            (vte_terminal_process_incoming): Don't emit signals for every
+            character that's output. Patch from Padraig O'Briain. Huge
+            performance gain when a11y is activated.
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 6 ------
+ 2 files changed, 8 insertions(+), 6 deletions(-)
+
+commit b27d00bb421f9c24c6294d156d671656ffe47078
+Author: Timur Jamakeev 
+Date:   2005-11-16 12:56:59 +0000
+
+    Added 'ky' to ALL_LINGUAS
+    
+    2005-11-16  Timur Jamakeev  
+    
+            * configure.in: Added 'ky' to ALL_LINGUAS
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit ba4ea5666d9efbd48025e378e3c50b8fcc632bc9
+Author: Timur Jamakeev 
+Date:   2005-11-16 12:51:38 +0000
+
+    *** empty log message ***
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 4f284b826aa84e3856e2c078f7922123163dd2de
+Author: Timur Jamakeev 
+Date:   2005-11-16 12:49:12 +0000
+
+    Kirghiz translation added.
+    
+    2005-11-16  Timur Jamakeev  
+    
+            * ky.po: Kirghiz translation added.
+
+ po/ky.po | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 117 insertions(+)
+
+commit c3c4b97bc788db03578a98f3613de8c6a4ecc71a
+Author: Kjartan Maraas 
+Date:   2005-11-08 20:18:51 +0000
+
+    Update.
+    
+    2005-11-08  Kjartan Maraas  
+    
+            * NEWS: Update.
+            * Makefile.am:
+            * autogen.sh:
+            * configure.in:
+            * python/Makefile.am:
+            I'm attaching a patch that modernizes the python binding
+            build stuff. Notably, it excludes python/vte.c from the dist.
+            Right now as it stands, the file is disted, which means people's
+            builds will not work unless they build against pygtk 2.8,
+            which makes this bug somewhat important. Patch from Manish Sing
+            Closes bug #320931.
+
+ ChangeLog          | 14 ++++++++++++++
+ Makefile.am        |  2 +-
+ NEWS               |  5 +++++
+ autogen.sh         |  1 -
+ configure.in       | 12 ++++++++++--
+ python/Makefile.am | 19 +++++++++++++++----
+ 6 files changed, 45 insertions(+), 8 deletions(-)
+
+commit ec5ac1c6d58b791eb8c8069fb329baf37c1ed8a0
+Author: Bill Haneman 
+Date:   2005-11-01 17:20:41 +0000
+
+    Fix for crasher bug #153405.  Patch from Padraig O'Briain.
+
+ ChangeLog       | 8 ++++++++
+ src/vteaccess.c | 9 +++++++++
+ 2 files changed, 17 insertions(+)
+
+commit 69940ef016e1825e26ab48cbbaf635c94adc31c0
+Author: Kjartan Maraas 
+Date:   2005-10-30 12:47:48 +0000
+
+    Remove this ancient file
+
+ MESSAGE-OF-DOOM | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit b55d0887747595e4317c75cc89899d695092f858
+Author: Kjartan Maraas 
+Date:   2005-10-02 09:59:42 +0000
+
+    Fix gdk warnings. Patch from Michele Baldessari. Closes bug #309025.
+    
+    2005-10-02  Kjartan Maraas  
+    
+            * src/vtebg.c: (_vte_property_get_pixmaps):
+            * src/vterdb.c: (_vte_property_get_string):
+            Fix gdk warnings. Patch from Michele Baldessari.
+            Closes bug #309025.
+
+ ChangeLog    | 7 +++++++
+ src/vtebg.c  | 2 +-
+ src/vterdb.c | 2 +-
+ 3 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 1a5f3494d79672ffaae08ee01fbe30f2f525ec4f
+Author: Runa Bhattacharjee 
+Date:   2005-10-01 09:56:59 +0000
+
+    Added entry for Bengali (bn) Translation updation:10/01
+
+ po/ChangeLog | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 2c06d463e073b932cff34aca0abe31c8f78a88fd
+Author: Runa Bhattacharjee 
+Date:   2005-10-01 09:56:43 +0000
+
+    Updated Bengali (bn) Translaion:10/01
+
+ po/bn.po | 109 ++++++++++++++++++++++++---------------------------------------
+ 1 file changed, 41 insertions(+), 68 deletions(-)
+
+commit 7768de1457224fcb168f0cf9f1622a633dd0e5cb
+Author: Kjartan Maraas 
+Date:   2005-09-16 20:14:29 +0000
+
+    Optimize memory usage by releasing fonts that aren't needed early. Patch
+    
+    2005-09-16  Kjartan Maraas  
+    
+            * src/vtexft.c: (_vte_xft_font_for_char): Optimize memory
+            usage by releasing fonts that aren't needed early. Patch
+            from Mike Hearn. Closes bug #309322.
+
+ ChangeLog    |  6 ++++++
+ src/vtexft.c | 22 ++++++++++++++++------
+ 2 files changed, 22 insertions(+), 6 deletions(-)
+
+commit 659f4c735aaea14d2ee44614677759c884800cd1
+Author: Josep Puigdemont i Casamajó 
+Date:   2005-09-03 23:19:43 +0000
+
+    Fixed some typos and strings.
+
+ po/ca.po | 45 +++++++++++++++++++++++----------------------
+ 1 file changed, 23 insertions(+), 22 deletions(-)
+
+commit f32e845ad41b4accde05a0922cdf132757bb0259
+Author: Gabor Kelemen 
+Date:   2005-08-23 21:24:19 +0000
+
+    Hungarian translation updated.
+    
+    2005-08-23  Gabor Kelemen  
+    
+            * hu.po: Hungarian translation updated.
+
+ po/ChangeLog |  4 ++++
+ po/hu.po     | 62 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 37 insertions(+), 29 deletions(-)
+
+commit ba7f65167f760776fa13d2da93e1ac02ee87de4d
+Author: Kjartan Maraas 
+Date:   2005-08-23 09:49:57 +0000
+
+    Post release bump
+
+ vte.spec | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c9e038e096dab5750bcce8578169cc572e9f9140 (tag: vte_0_11_15)
+Author: Kjartan Maraas 
+Date:   2005-08-13 11:56:37 +0000
+
+    Updates
+
+ NEWS | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit d1252cd3f30c75d659345e0c6d862b24cccbbc57
+Author: Kjartan Maraas 
+Date:   2005-08-13 11:55:18 +0000
+
+    Make VTE work on NetBSD, OpenBSD (sparc and macppc). Reported by Adrian
+    
+    2005-08-13  Kjartan Maraas  
+    
+            * gnome-pty-helper/gnome-pty-helper.c: (init_msg_pass):
+            Make VTE work on NetBSD, OpenBSD (sparc and macppc).
+            Reported by Adrian Bunk, patches by Dan Winship and
+            Rich Edelman. Closes bug #126554.
+
+ ChangeLog                           | 7 +++++++
+ gnome-pty-helper/gnome-pty-helper.c | 5 +++--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+commit 35517238968cffeb113930724ff041cf5c215cd9
+Author: Kjartan Maraas 
+Date:   2005-08-12 19:51:50 +0000
+
+    Don't crash if there's no termcap file. Michele Baldessari Closes bug
+    
+    2005-08-12  Kjartan Maraas  
+    
+            * src/vtetc.c: (_vte_termcap_destroy): Don't crash
+            if there's no termcap file. Michele Baldessari
+            Closes bug #312260.
+
+ ChangeLog   | 6 ++++++
+ src/vtetc.c | 3 +++
+ 2 files changed, 9 insertions(+)
+
+commit 680352b0c408751ed1a1f65023abc67bc02cfd85
+Author: Kjartan Maraas 
+Date:   2005-08-12 14:23:45 +0000
+
+    Update
+
+ NEWS | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 5958b32ac31daa2c44a9d714dd31e09f5d9931b1
+Author: Kjartan Maraas 
+Date:   2005-08-12 14:21:46 +0000
+
+    Correct test for recvmsg(). Patch from Robert Basch. Closes bug #304815
+    
+    2005-08-12  Kjartan Maraas  
+    
+            * configure.in: Correct test for recvmsg(). Patch from
+            Robert Basch. Closes bug #304815 and possibly bug #122055.
+
+ ChangeLog    | 5 +++++
+ configure.in | 6 +++++-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+commit 1764fa0e5285ea68832390a496b1a8d08a3a9cbb
+Author: Kjartan Maraas 
+Date:   2005-08-10 13:29:12 +0000
+
+    Patch from: Padraig O'Briain  Closes bug #113590.
+    
+    2004-08-10  Kjartan Maraas  
+    
+            Patch from: Padraig O'Briain  
+            Closes bug #113590.
+    
+            * src/vte.c, src/vteint.h:
+            Add new functions to support accessible text selection:
+            _vte_terminal_get_selection, _vte_terminal_get_start_selection,
+            _vte_terminal_get_end_selection, _vte_terminal_select_text,
+            _vte_terminal_remove_selection
+            * src/vteaccess.c:
+            (xy_from_offset): Fix for offset being entire text.
+            (vte_terminal_accessibility_selection_changed): VteTerminal's
+            selection-changed signal handler which emits text-selection-changed
+            signal.
+            (vte_terminal_accessible_initialize): Connect to VteTerminal's
+            selection-changed signal.
+            (vte_terminal_accessible_get_n_selections) Add implementation.
+            (vte_terminal_accessible_get_selection) Add implementation.
+            (vte_terminal_accessible_add_selection) Add implementation.
+            (vte_terminal_accessible_remove_selection) Add implementation.
+            (vte_terminal_accessible_set_selection) Add implementation.
+
+ ChangeLog       |  23 ++++++++++
+ src/vte.c       |  72 ++++++++++++++++++++++++++++++
+ src/vteaccess.c | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++------
+ src/vteint.h    |   5 +++
+ 4 files changed, 221 insertions(+), 13 deletions(-)
+
+commit 04cf2d759988367fd2264cd46ced44ac2a5ce73a
+Author: Kjartan Maraas 
+Date:   2005-08-04 23:36:09 +0000
+
+    Clean up utmp/wtmp under vncserver if things fall apart under the
+    
+    2005-08-05  Kjartan Maraas  
+    
+            * gnome-pty-helper/gnome-pty-helper.c: (exit_handler), (main):
+            Clean up utmp/wtmp under vncserver if things fall apart under
+            the terminal. (Dave Lehman). Closes bug #312373
+
+ ChangeLog                           |  6 ++++++
+ gnome-pty-helper/gnome-pty-helper.c | 11 +++++++++++
+ 2 files changed, 17 insertions(+)
+
+commit 9996a03619e7b7693de1e82a99fc7a87ec4c41a5
+Author: Kjartan Maraas 
+Date:   2005-08-03 07:57:47 +0000
+
+    Post release bump
+
+ vte.spec | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 95ba54bc3db83c2eab09062b782956a8be410cd2
+Author: Kjartan Maraas 
+Date:   2005-08-03 07:57:17 +0000
+
+    Flush these after release
+
+ po/am.po      | 21 +++++++++++----------
+ po/ang.po     | 21 +++++++++++----------
+ po/ar.po      | 21 +++++++++++----------
+ po/az.po      | 21 +++++++++++----------
+ po/be.po      | 21 +++++++++++----------
+ po/bg.po      | 41 ++++++++++++++++++++---------------------
+ po/bn.po      | 21 +++++++++++----------
+ po/bs.po      | 21 +++++++++++----------
+ po/ca.po      | 21 +++++++++++----------
+ po/cs.po      | 21 +++++++++++----------
+ po/cy.po      | 21 +++++++++++----------
+ po/da.po      | 21 +++++++++++----------
+ po/de.po      | 21 +++++++++++----------
+ po/el.po      | 21 +++++++++++----------
+ po/en_CA.po   | 21 +++++++++++----------
+ po/en_GB.po   | 21 +++++++++++----------
+ po/es.po      | 21 +++++++++++----------
+ po/et.po      | 21 +++++++++++----------
+ po/eu.po      | 21 +++++++++++----------
+ po/fa.po      | 21 +++++++++++----------
+ po/fi.po      | 21 +++++++++++----------
+ po/fr.po      | 21 +++++++++++----------
+ po/ga.po      | 21 +++++++++++----------
+ po/gl.po      | 42 +++++++++++++++++++++---------------------
+ po/gu.po      | 21 +++++++++++----------
+ po/he.po      | 21 +++++++++++----------
+ po/hi.po      | 21 +++++++++++----------
+ po/hr.po      | 21 +++++++++++----------
+ po/hu.po      | 21 +++++++++++----------
+ po/id.po      | 23 ++++++++++++-----------
+ po/is.po      | 21 +++++++++++----------
+ po/it.po      | 21 +++++++++++----------
+ po/ja.po      | 21 +++++++++++----------
+ po/ka.po      | 21 +++++++++++----------
+ po/ko.po      | 21 +++++++++++----------
+ po/li.po      | 21 +++++++++++----------
+ po/lt.po      | 21 +++++++++++----------
+ po/lv.po      | 21 +++++++++++----------
+ po/mi.po      | 21 +++++++++++----------
+ po/mk.po      | 21 +++++++++++----------
+ po/ml.po      | 21 +++++++++++----------
+ po/mn.po      | 21 +++++++++++----------
+ po/ms.po      | 21 +++++++++++----------
+ po/nb.po      | 21 +++++++++++----------
+ po/ne.po      | 21 +++++++++++----------
+ po/nl.po      | 21 +++++++++++----------
+ po/nn.po      | 21 +++++++++++----------
+ po/no.po      | 21 +++++++++++----------
+ po/or.po      | 21 +++++++++++----------
+ po/pa.po      | 21 +++++++++++----------
+ po/pl.po      | 21 +++++++++++----------
+ po/pt.po      | 21 +++++++++++----------
+ po/pt_BR.po   | 21 +++++++++++----------
+ po/ro.po      | 21 +++++++++++----------
+ po/ru.po      | 21 +++++++++++----------
+ po/rw.po      | 21 +++++++++++----------
+ po/sk.po      | 21 +++++++++++----------
+ po/sl.po      | 21 +++++++++++----------
+ po/sq.po      | 21 +++++++++++----------
+ po/sr.po      | 21 +++++++++++----------
+ po/sr@Latn.po | 21 +++++++++++----------
+ po/sv.po      | 21 +++++++++++----------
+ po/ta.po      | 21 +++++++++++----------
+ po/th.po      | 45 ++++++++++++++++++++++-----------------------
+ po/tr.po      | 21 +++++++++++----------
+ po/ug.po      | 52 +++++++++++++++++++++++++++-------------------------
+ po/uk.po      | 21 +++++++++++----------
+ po/vi.po      | 21 +++++++++++----------
+ po/wa.po      | 21 +++++++++++----------
+ po/xh.po      | 42 +++++++++++++++++++++---------------------
+ po/zh_CN.po   | 21 +++++++++++----------
+ po/zh_TW.po   | 42 +++++++++++++++++++++---------------------
+ 72 files changed, 859 insertions(+), 793 deletions(-)
+
+commit 3550cad3d43b505e695cf4a9b05692b4dd12488b
+Author: Kjartan Maraas 
+Date:   2005-08-03 07:52:01 +0000
+
+    Update
+
+ NEWS | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 6b284ae20498040a78359c3acf477190ef3800f4
+Author: Alexander Shopov 
+Date:   2005-07-28 07:45:55 +0000
+
+    Updated Bulgarian translation by Yavor Doganov 
+    
+    2005-07-28  Alexander Shopov  
+    
+            * bg.po: Updated Bulgarian translation by
+            Yavor Doganov 
+
+ po/ChangeLog |   9 +++--
+ po/bg.po     | 109 ++++++++++++++++++++++-------------------------------------
+ 2 files changed, 47 insertions(+), 71 deletions(-)
+
+commit b6b599cf9451cac41a26ef11e97b997f073e6c8f
+Author: Olav Vitters 
+Date:   2005-07-26 15:16:25 +0000
+
+    Correct patch provider; change Loïc Minier to Ethan Glasser-Camp.
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5e92d3203b712ab672ced617a2d8edf492184904
+Author: Michele Baldessari 
+Date:   2005-07-26 14:43:04 +0000
+
+    pyg_boxed_get should be on item not py_palette. Reported with fix by Loïc
+    
+    2005-07-26  Michele Baldessari  
+    
+            * python/vte.override (_wrap_vte_terminal_set_colors):
+            pyg_boxed_get should be on item not py_palette.
+            Reported with fix by Loïc Minier 
+            Closes bug #311570
+
+ ChangeLog           | 7 +++++++
+ python/vte.override | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 3be10ecbae7a54bb97788ce3e53bd14aa25b374b
+Author: Michele Baldessari 
+Date:   2005-07-25 08:49:42 +0000
+
+    Initialize PangoContext * data->ctx with NULL. Closes bug #126262
+    
+    2005-07-25  Michele Baldessari  
+    
+            * src/vtepango.c (_vte_pango_create): Initialize
+            PangoContext * data->ctx with NULL. Closes bug #126262
+
+ ChangeLog      | 5 +++++
+ NEWS           | 3 +++
+ src/vtepango.c | 1 +
+ 3 files changed, 9 insertions(+)
+
+commit e33085bbd21e2da027c68def3a47710bc39d37fd
+Author: Danilo Šegan 
+Date:   2005-07-21 21:31:18 +0000
+
+    Fix bug #149925: add comment for translators.
+    
+    
+    Fix bug #149925: add comment for translators.
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 1 +
+ 2 files changed, 8 insertions(+)
+
+commit 096becaac3f36491c36563a5f7167a567954f9cc
+Author: Matthias Clasen 
+Date:   2005-07-07 19:00:21 +0000
+
+    Unset the user data on the gdk window.
+    
+    2005-07-07  Matthias Clasen  
+    
+            * src/vte.c (vte_terminal_unrealize): Unset the user data
+            on the gdk window.
+
+ ChangeLog | 5 +++++
+ src/vte.c | 2 ++
+ 2 files changed, 7 insertions(+)
+
+commit e01f40abe5f8e499640d29a8e781d484522f80be
+Author: Kwok-Koon Cheung 
+Date:   2005-06-23 01:22:17 +0000
+
+    fix language team reference
+
+ po/ChangeLog |  4 ++++
+ po/zh_TW.po  | 47 ++++++++++++++++++++++++-----------------------
+ 2 files changed, 28 insertions(+), 23 deletions(-)
+
+commit 8446f71979f37b18d4db920f74bf0334cea94792
+Author: Theppitak Karoonboonyanan 
+Date:   2005-06-15 04:02:00 +0000
+
+    Added 'th' (Thai) to ALL_LINGUAS. Added Thai translation.
+    
+    2005-06-15  Theppitak Karoonboonyanan  
+    
+            * configure.in: Added 'th' (Thai) to ALL_LINGUAS.
+            * po/th.po: Added Thai translation.
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   4 ++
+ po/th.po     | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 126 insertions(+), 1 deletion(-)
+
+commit 1168ca49dd0d7c1e2f8d1c77434f9c798d6f9286
+Author: Kjartan Maraas 
+Date:   2005-06-11 21:05:07 +0000
+
+    Update some.
+    
+    2005-06-11  Kjartan Maraas  
+    
+            * NEWS: Update some.
+            * doc/reference/tmpl/reaper.sgml:
+            * doc/reference/tmpl/vte-unused.sgml:
+            * doc/reference/tmpl/vte.sgml:
+            * doc/reference/tmpl/vteaccess.sgml: Docs updates.
+            * src/vte.c: (vte_terminal_init), (vte_terminal_finalize),
+            (vte_terminal_get_accessible), (vte_terminal_class_init):
+            Apply patch from Padraig O'Briain 
+            to fix a crash. Closes bug #119913.
+
+ ChangeLog                          | 12 ++++++++
+ NEWS                               |  3 ++
+ doc/reference/tmpl/reaper.sgml     |  3 ++
+ doc/reference/tmpl/vte-unused.sgml |  8 ++---
+ doc/reference/tmpl/vte.sgml        |  3 ++
+ doc/reference/tmpl/vteaccess.sgml  |  3 ++
+ src/vte.c                          | 60 ++++++++++++++++++++------------------
+ 7 files changed, 59 insertions(+), 33 deletions(-)
+
+commit 141d956b5a678fbb0a43938e8909c7c66646a840
+Author: Kjartan Maraas 
+Date:   2005-06-09 21:36:31 +0000
+
+    Fix a crash when reparenting. Closes bug #169326. Patch from Michele
+    
+    2005-06-09  Kjartan Maraas  
+    
+            * src/vte.c: (vte_terminal_style_changed):
+            Fix a crash when reparenting. Closes bug #169326.
+            Patch from Michele Baldessari.
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 10 ++++++++++
+ 2 files changed, 16 insertions(+)
+
+commit 29a57471b73aa43e163144ebc3592094bc27bc31
+Author: Ignacio Casal Quinteiro 
+Date:   2005-06-05 18:28:50 +0000
+
+    *** empty log message ***
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   4 +++
+ po/gl.po     | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 125 insertions(+), 1 deletion(-)
+
+commit 2985a128bd3708439faa1e240460db31661d7839
+Author: Kostas Papadimas 
+Date:   2005-05-11 11:38:28 +0000
+
+    Updated Greek Translation.
+
+ po/ChangeLog | 4 ++++
+ po/el.po     | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 46a597ff979045ecb6e7e9a2a39c8d6f5fff6513
+Author: Manish Singh 
+Date:   2005-05-08 23:55:58 +0000
+
+    Fix spelling of my name
+
+ NEWS | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a1e846b27f37255bbdce5efd2e73166e4073032a
+Author: Kjartan Maraas 
+Date:   2005-04-29 20:17:41 +0000
+
+    Final bits of the memory reduction patch from Aivars Kalvans. bug #160993
+    
+    2005-04-29  Kjartan Maraas  
+    
+            * src/table.c: (_vte_table_literal_new), (_vte_table_free),
+            (_vte_table_addi), (_vte_table_matchi), (_vte_table_match),
+            (_vte_table_printi): Final bits of the memory reduction patch
+            from Aivars Kalvans. bug #160993 comment #9
+            * src/vte.c: (vte_terminal_scroll_region): Patch from Egmont
+            Koblinger to fix some scrolling issues. bug #164153
+            * vte.spec: Bump version.
+
+ ChangeLog   |  10 ++++++
+ src/table.c | 102 ++++++++++++++++++++++++++++++++++++++++++------------------
+ src/vte.c   |  45 ++++++---------------------
+ vte.spec    |   2 +-
+ 4 files changed, 91 insertions(+), 68 deletions(-)
+
+commit bda4553263bbdfa77da4a65d9cb77fa8801d8000 (tag: vte_0_11_13)
+Author: Kjartan Maraas 
+Date:   2005-04-29 20:07:32 +0000
+
+    Forgot this
+
+ NEWS | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+commit d254d664d3408ad688f3a8c62224bd188bdd5fdb
+Author: Pablo Saratxaga 
+Date:   2005-04-19 14:49:26 +0000
+
+    updated Walloon file
+
+ po/ChangeLog | 24 ++++++++++++++----------
+ po/wa.po     | 43 ++++++++++++++++++++++---------------------
+ 2 files changed, 36 insertions(+), 31 deletions(-)
+
+commit a6ae830ccca18e36717b2bc9e5c969befdd16bf4
+Author: Abduxukur Abdurixit 
+Date:   2005-04-08 08:22:48 +0000
+
+    *** empty log message ***
+
+ po/ChangeLog |  4 ++++
+ po/ug.po     | 32 ++++++++++++++++----------------
+ 2 files changed, 20 insertions(+), 16 deletions(-)
+
+commit 9b67c3bdfeeffbba5470751091e305da60ea97ee
+Author: Abduxukur Abdurixit 
+Date:   2005-04-07 13:17:35 +0000
+
+    *** empty log message ***
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   4 +++
+ po/ug.po     | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 125 insertions(+), 1 deletion(-)
+
+commit 1e3d355fbb1940791f873fdb30202f2ac2d8674b
+Author: Adi Attar 
+Date:   2005-04-01 09:51:47 +0000
+
+    Added Xhosa translation. Added "xh" to ALL_LINGUAS.
+    
+    2005-04-01  Adi Attar  
+    
+            * xh.po: Added Xhosa translation.
+            * configure.in: Added "xh" to ALL_LINGUAS.
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   4 +++
+ po/xh.po     | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 124 insertions(+), 1 deletion(-)
+
+commit 44fa68f109629ebde4a6711edc174bf4f1a98999
+Author: Steven Michael Murphy 
+Date:   2005-04-01 02:00:44 +0000
+
+    Added new Language, Kinyarwanda (rw), to this package
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   4 ++
+ po/rw.po     | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 133 insertions(+), 1 deletion(-)
+
+commit 139d9029a5182ff25a3989d27af5705fe18ab8fd
+Author: Kjartan Maraas 
+Date:   2005-03-29 17:38:13 +0000
+
+    Use head -n 1 instead of head -1 to avoid warning about the latter being
+    
+    2005-03-29  Kjartan Maraas  
+    
+            * autogen.sh: Use head -n 1 instead of head -1 to avoid
+            warning about the latter being deprecated in newer versions.
+            Reported by Ali Akcaagac. Closes bug #156022.
+            * vte.spec: Bump version
+
+ ChangeLog  | 7 +++++++
+ autogen.sh | 2 +-
+ vte.spec   | 2 +-
+ 3 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 2d04086b48b7a9f7d53c543803cb23fc622a9f57
+Author: Manish Singh 
+Date:   2005-03-17 06:43:44 +0000
+
+    Remove stray underscores so python module works again. Fixes bug #150760.
+    
+    2005-03-16  Manish Singh  
+    
+            * python/vtemodule.c: Remove stray underscores so python module
+            works again. Fixes bug #150760.
+
+ ChangeLog          | 5 +++++
+ python/vtemodule.c | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 2d54e9baa0c26c15b6333d8898a1174dd91faf12
+Author: Adam Weinberger 
+Date:   2005-03-17 05:28:12 +0000
+
+    Updated Canadian English translation.
+    
+    
+            * en_CA.po: Updated Canadian English translation.
+
+ po/ChangeLog | 4 ++++
+ po/en_CA.po  | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit afe74e992b6be8f08d33cedeb93494d0fe852354
+Author: Kjartan Maraas 
+Date:   2005-03-14 14:43:47 +0000
+
+    Add patch for excessive memory consumption when opening new tabs. This
+    
+    2005-03-14  Kjartan Maraas  
+    
+            * src/Makefile.am:
+            * src/interpret.c: (main):
+            * src/matcher.c: (_vte_matcher_add), (_vte_matcher_init),
+            (_vte_matcher_create), (_vte_matcher_destroy), (_vte_matcher_new),
+            (_vte_matcher_free):
+            * src/matcher.h:
+            * src/vte.c: (vte_terminal_set_emulation), (vte_terminal_init):
+            * src/vtetc.c: (_vte_termcap_create), (_vte_termcap_destroy),
+            (_vte_termcap_new), (_vte_termcap_free):
+            * src/vtetc.h: Add patch for excessive memory consumption when
+            opening new tabs. This patch makes struct _vte_matcher and
+            struct _vte_termcap shared between terminals and should reduce
+            memory consumption with multiple tabs a lot. Patch from Aivars
+            Kalvans . From bug #160993.
+
+ ChangeLog       |  17 +++++
+ src/Makefile.am |  50 ++++++++-----
+ src/interpret.c |  25 +------
+ src/matcher.c   | 219 +++++++++++++++++++++++++++++++++++++++++++++-----------
+ src/matcher.h   |  11 ++-
+ src/vte.c       |  72 +------------------
+ src/vtetc.c     |  69 ++++++++++++++----
+ src/vtetc.h     |   2 +-
+ 8 files changed, 292 insertions(+), 173 deletions(-)
+
+commit 1613c7756b040bf1ce49f04d71ecc7c1eb8967b3
+Author: Kjartan Maraas 
+Date:   2005-03-14 14:33:35 +0000
+
+    Back out one of the fedora patches since it apparently causes
+    
+    2005-03-14  Kjartan Maraas  
+    
+            * src/vte.c: (vte_terminal_scroll_region),
+            (vte_sequence_handler_al), (vte_sequence_handler_dl),
+            (vte_sequence_handler_sr), (vte_sequence_handler_insert_lines),
+            (vte_sequence_handler_delete_lines), (vte_terminal_handle_scroll):
+            Back out one of the fedora patches since it apparently causes
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 34 +++++++++++++---------------------
+ 2 files changed, 23 insertions(+), 21 deletions(-)
+
+commit afa929ff6f72bbc0a27ea7daa262a61637ac4bc4
+Author: Ahmad Riza H Nst 
+Date:   2005-03-08 12:15:45 +0000
+
+    Updated Indonesian Translation
+    
+    2005-03-08  Ahmad Riza H Nst  
+    
+            * id.po: Updated Indonesian Translation
+
+ po/ChangeLog |  4 ++++
+ po/id.po     | 34 +++++++++++++++++-----------------
+ 2 files changed, 21 insertions(+), 17 deletions(-)
+
+commit 804be42932991f70998348e07bdbc47d93796287 (tag: vte_0_11_12)
+Author: Kjartan Maraas 
+Date:   2005-03-03 06:40:44 +0000
+
+    Fix the crash in minicom when resizing the window. Closes bug #163814.
+    
+    2005-03-02  Kjartan Maraas  
+    
+            * src/vte.c: (vte_terminal_process_incoming): Fix the
+            crash in minicom when resizing the window. Closes
+            bug #163814. Also adjust the coalesce and display timeouts.
+            This makes g-t and xterm behave just about the same visually
+            but g-t is still a bit faster when using the same font and
+            utf8.
+
+ doc/reference/tmpl/reaper.sgml     |  3 --
+ doc/reference/tmpl/vte-unused.sgml |  4 +++
+ doc/reference/tmpl/vte.sgml        |  3 --
+ doc/reference/tmpl/vteaccess.sgml  |  3 --
+ po/am.po                           | 12 ++++----
+ po/ang.po                          | 12 ++++----
+ po/ar.po                           | 12 ++++----
+ po/az.po                           | 12 ++++----
+ po/be.po                           | 12 ++++----
+ po/bg.po                           | 12 ++++----
+ po/bn.po                           | 12 ++++----
+ po/bs.po                           | 12 ++++----
+ po/ca.po                           | 12 ++++----
+ po/cs.po                           | 12 ++++----
+ po/cy.po                           | 12 ++++----
+ po/da.po                           | 12 ++++----
+ po/de.po                           | 12 ++++----
+ po/el.po                           | 12 ++++----
+ po/en_CA.po                        | 12 ++++----
+ po/en_GB.po                        | 12 ++++----
+ po/es.po                           | 12 ++++----
+ po/et.po                           | 12 ++++----
+ po/eu.po                           | 12 ++++----
+ po/fa.po                           | 12 ++++----
+ po/fi.po                           | 12 ++++----
+ po/fr.po                           | 12 ++++----
+ po/ga.po                           | 12 ++++----
+ po/gu.po                           | 12 ++++----
+ po/he.po                           | 12 ++++----
+ po/hi.po                           | 12 ++++----
+ po/hr.po                           | 12 ++++----
+ po/hu.po                           | 12 ++++----
+ po/id.po                           | 12 ++++----
+ po/is.po                           | 12 ++++----
+ po/it.po                           | 12 ++++----
+ po/ja.po                           | 12 ++++----
+ po/ka.po                           | 12 ++++----
+ po/ko.po                           | 12 ++++----
+ po/li.po                           | 12 ++++----
+ po/lt.po                           | 12 ++++----
+ po/lv.po                           | 12 ++++----
+ po/mi.po                           | 12 ++++----
+ po/mk.po                           | 12 ++++----
+ po/ml.po                           | 12 ++++----
+ po/mn.po                           | 12 ++++----
+ po/ms.po                           | 12 ++++----
+ po/nb.po                           | 12 ++++----
+ po/ne.po                           | 12 ++++----
+ po/nl.po                           | 12 ++++----
+ po/nn.po                           | 12 ++++----
+ po/no.po                           | 12 ++++----
+ po/or.po                           | 12 ++++----
+ po/pa.po                           | 12 ++++----
+ po/pl.po                           | 12 ++++----
+ po/pt.po                           | 12 ++++----
+ po/pt_BR.po                        | 12 ++++----
+ po/ro.po                           | 12 ++++----
+ po/ru.po                           | 12 ++++----
+ po/sk.po                           | 12 ++++----
+ po/sl.po                           | 12 ++++----
+ po/sq.po                           | 12 ++++----
+ po/sr.po                           | 12 ++++----
+ po/sr@Latn.po                      | 12 ++++----
+ po/sv.po                           | 12 ++++----
+ po/ta.po                           | 12 ++++----
+ po/tr.po                           | 12 ++++----
+ po/uk.po                           | 12 ++++----
+ po/vi.po                           | 12 ++++----
+ po/wa.po                           | 12 ++++----
+ po/zh_CN.po                        | 12 ++++----
+ po/zh_TW.po                        | 12 ++++----
+ src/vte.c                          | 59 +++++++++++++++-----------------------
+ 72 files changed, 429 insertions(+), 447 deletions(-)
+
+commit 6b25dce295e409828f34821f53fa4f3052e5da00
+Author: Kjartan Maraas 
+Date:   2005-03-02 23:12:27 +0000
+
+    Update
+
+ NEWS | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 6e02617db3907c47cf5128a011b2ae31fe10b9cb
+Author: Kjartan Maraas 
+Date:   2005-03-02 22:52:18 +0000
+
+    Revert previous pending release team approval
+
+ src/vte.c | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+commit 69dd207f235306920a0fa98ba712d9b9775d55e2
+Author: Kjartan Maraas 
+Date:   2005-03-02 22:48:57 +0000
+
+    Fix the crash in minicom when resizing the window. Closes bug #163814.
+    
+    2005-03-02  Kjartan Maraas  
+    
+            * src/vte.c: (vte_terminal_process_incoming): Fix the
+            crash in minicom when resizing the window. Closes
+            bug #163814. Also adjust the coalesce and display timeouts.
+            This makes g-t and xterm behave just about the same visually
+            but g-t is still a bit faster when using the same font and
+            utf8.
+
+ ChangeLog     |  9 +++++++++
+ NEWS          | 18 ++++++++++++++++++
+ po/am.po      | 30 +++++++++++++++---------------
+ po/ang.po     | 28 ++++++++++++++--------------
+ po/ar.po      | 30 +++++++++++++++---------------
+ po/az.po      | 30 +++++++++++++++---------------
+ po/be.po      | 30 +++++++++++++++---------------
+ po/bg.po      | 40 ++++++++++++++++++++--------------------
+ po/bn.po      | 30 +++++++++++++++---------------
+ po/bs.po      | 29 ++++++++++++++---------------
+ po/ca.po      | 30 +++++++++++++++---------------
+ po/cs.po      | 30 +++++++++++++++---------------
+ po/cy.po      | 30 +++++++++++++++---------------
+ po/da.po      | 30 +++++++++++++++---------------
+ po/de.po      | 30 +++++++++++++++---------------
+ po/el.po      | 30 +++++++++++++++---------------
+ po/en_CA.po   | 28 ++++++++++++++--------------
+ po/en_GB.po   | 30 +++++++++++++++---------------
+ po/es.po      | 34 +++++++++++++++++-----------------
+ po/et.po      | 29 ++++++++++++++---------------
+ po/eu.po      | 29 ++++++++++++++---------------
+ po/fa.po      | 30 +++++++++++++++---------------
+ po/fi.po      | 30 +++++++++++++++---------------
+ po/fr.po      | 30 +++++++++++++++---------------
+ po/ga.po      | 30 +++++++++++++++---------------
+ po/gu.po      | 30 +++++++++++++++---------------
+ po/he.po      | 30 +++++++++++++++---------------
+ po/hi.po      | 29 ++++++++++++++---------------
+ po/hr.po      | 30 +++++++++++++++---------------
+ po/hu.po      | 28 ++++++++++++++--------------
+ po/id.po      | 30 +++++++++++++++---------------
+ po/is.po      | 30 +++++++++++++++---------------
+ po/it.po      | 30 +++++++++++++++---------------
+ po/ja.po      | 30 +++++++++++++++---------------
+ po/ka.po      | 46 ++++++++++++++++++++++++----------------------
+ po/ko.po      | 30 +++++++++++++++---------------
+ po/li.po      | 30 +++++++++++++++---------------
+ po/lt.po      | 30 +++++++++++++++---------------
+ po/lv.po      | 30 +++++++++++++++---------------
+ po/mi.po      | 53 ++++++++++++++++++++++-------------------------------
+ po/mk.po      | 30 +++++++++++++++---------------
+ po/ml.po      | 30 +++++++++++++++---------------
+ po/mn.po      | 30 +++++++++++++++---------------
+ po/ms.po      | 30 +++++++++++++++---------------
+ po/nb.po      | 30 +++++++++++++++---------------
+ po/ne.po      | 30 +++++++++++++++---------------
+ po/nl.po      | 30 +++++++++++++++---------------
+ po/nn.po      | 30 +++++++++++++++---------------
+ po/no.po      | 30 +++++++++++++++---------------
+ po/or.po      | 28 ++++++++++++++--------------
+ po/pa.po      | 31 +++++++++++++++----------------
+ po/pl.po      | 30 +++++++++++++++---------------
+ po/pt.po      | 30 +++++++++++++++---------------
+ po/pt_BR.po   | 30 +++++++++++++++---------------
+ po/ro.po      | 30 +++++++++++++++---------------
+ po/ru.po      | 30 +++++++++++++++---------------
+ po/sk.po      | 30 +++++++++++++++---------------
+ po/sl.po      | 30 +++++++++++++++---------------
+ po/sq.po      | 28 ++++++++++++++--------------
+ po/sr.po      | 30 +++++++++++++++---------------
+ po/sr@Latn.po | 30 +++++++++++++++---------------
+ po/sv.po      | 30 +++++++++++++++---------------
+ po/ta.po      | 35 +++++++++++++++++++----------------
+ po/tr.po      | 30 +++++++++++++++---------------
+ po/uk.po      | 30 +++++++++++++++---------------
+ po/vi.po      | 30 +++++++++++++++---------------
+ po/wa.po      | 30 +++++++++++++++---------------
+ po/zh_CN.po   | 30 +++++++++++++++---------------
+ po/zh_TW.po   | 30 +++++++++++++++---------------
+ src/vte.c     | 15 ++-------------
+ 70 files changed, 1052 insertions(+), 1045 deletions(-)
+
+commit 936365d5565c1174a7c8d4a24235db44a70f4407
+Author: Kjartan Maraas 
+Date:   2005-03-02 08:48:59 +0000
+
+    Add vtetree.[ch] Don't use a GArray but use calloc'ed memory to speed up
+    
+    2005-03-02  Kjartan Maraas  
+    
+            * src/Makefile.am: Add vtetree.[ch]
+            * src/vte.c: (vte_terminal_draw_row): Don't use a GArray
+            but use calloc'ed memory to speed up things further.
+            From bug #137864. Patch from Benjamin Otte.
+            * src/vtetree.c: (_vte_tree_new), (_vte_tree_destroy),
+            (_vte_tree_insert), (_vte_tree_lookup): New file
+            * src/vtetree.h: New file
+            * src/vtexft.c: (_vte_xft_font_open), (_vte_xft_font_close),
+            (_vte_xft_font_for_char), (_vte_xft_char_width): Use the new
+            functions to speed up things. From bug #137864. Patch from
+            Benjamin Otte. There are still two patches in there that don't
+            apply cleanly any more. Will look at those later.
+            * vte.spec: Bump version.
+
+ ChangeLog       | 16 +++++++++++++++
+ src/Makefile.am |  2 ++
+ src/vte.c       | 23 +++++++++-------------
+ src/vtetree.c   | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vtetree.h   | 51 ++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vtexft.c    | 23 +++++++++++-----------
+ vte.spec        |  2 +-
+ 7 files changed, 151 insertions(+), 26 deletions(-)
+
+commit cea8ff59881258d16942aa6402c0ab10e110e4c8
+Author: Kjartan Maraas 
+Date:   2005-02-28 21:38:59 +0000
+
+    Patch from Mariano to make vte claim to be the right type terminal. Closes
+    
+    2005-02-28  Kjartan Maraas  
+    
+            * src/vte.c: (vte_sequence_handler_send_primary_device_attributes):
+            Patch from Mariano to make vte claim to be the right type terminal.
+            Closes bug #130671.
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit 106a3de0551d19d467f99fdfeaf8b6fc3d4fbb43
+Author: Kjartan Maraas 
+Date:   2005-02-28 21:32:01 +0000
+
+    Apply fix from Fedora package for performance problems. Closes bug
+    
+    2005-02-28  Kjartan Maraas  
+    
+            * src/iso2022.c: (_vte_iso2022_is_ambiguous),
+            (_vte_iso2022_find_nextctl):
+            * src/uniwidths:
+            * src/vte.c: (vte_terminal_catch_child_exited), (vte_terminal_eof),
+            (vte_terminal_process_incoming), (vte_terminal_feed),
+            (vte_terminal_init), (vte_terminal_finalize), (vte_terminal_reset),
+            (add_display_timeout), (add_coalesce_timeout),
+            (remove_display_timeout), (remove_coalesce_timeout),
+            (vte_terminal_stop_processing), (vte_terminal_start_processing),
+            (vte_terminal_is_processing), (display_timeout),
+            (coalesce_timeout):
+            * src/vtexft.c: (_vte_xft_drawcharfontspec), (_vte_xft_draw_text):
+            Apply fix from Fedora package for performance problems. Closes
+            bug #143914. Patch was written by Søren Sandmann.
+
+ ChangeLog     |  17 +++++
+ src/iso2022.c |  66 ++++++++++---------
+ src/uniwidths |   7 ++
+ src/vte.c     | 208 +++++++++++++++++++++++++++++++++++++---------------------
+ src/vtexft.c  |   5 +-
+ 5 files changed, 194 insertions(+), 109 deletions(-)
+
+commit b2a0ee1a33ec460994058fd43bd45a43d1641d83
+Author: Kjartan Maraas 
+Date:   2005-02-28 21:12:19 +0000
+
+    Fix for problem with redrawing when scrolling back then forward Closes bug
+    
+    2005-02-28  Kjartan Maraas  
+    
+            * src/vte.c: (vte_terminal_scroll_region): Fix for
+            problem with redrawing when scrolling back then forward
+            Closes bug #122150. Patch from Benjamin Otte.
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 4 ++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 2736ad1804d9f363e0b4752a267a8087f7b096ad
+Author: Kjartan Maraas 
+Date:   2005-02-28 20:46:10 +0000
+
+    Fix a crash when trying to use input methods. From Fedora. Closes bug
+    
+    2005-02-28  Kjartan Maraas  
+    
+            * src/vte.c: (vte_terminal_unrealize): Fix a crash
+            when trying to use input methods. From Fedora.
+            Closes bug #168213.
+
+ ChangeLog | 8 +++++++-
+ src/vte.c | 3 +++
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+commit e6192592b53997f3105f6ad0e1a654bad0cb5ec1
+Author: Kjartan Maraas 
+Date:   2005-02-28 20:43:59 +0000
+
+    Another patch from fedora. Make sure the screen is fully redrawn before
+    
+    2005-02-28  Kjartan Maraas  
+    
+            * src/vte.c: (vte_terminal_scroll_region),
+            (vte_sequence_handler_al), (vte_sequence_handler_dl),
+            (vte_sequence_handler_sr), (vte_sequence_handler_insert_lines),
+            (vte_sequence_handler_delete_lines), (vte_terminal_handle_scroll):
+            Another patch from fedora. Make sure the screen is fully redrawn
+            before scrolling. Apparently this patch has some issues, but those
+            were found to be small enough to apply in Fedora, so I guess
+            the same holds true here.
+
+ ChangeLog | 11 +++++++++++
+ src/vte.c | 34 +++++++++++++++++++++-------------
+ 2 files changed, 32 insertions(+), 13 deletions(-)
+
+commit 74cf9b23a55b774b3f523ecff19bff620de0e0fb
+Author: Kjartan Maraas 
+Date:   2005-02-28 20:12:05 +0000
+
+    Apply another patch from Fedora. This should fix some screen corruption
+    
+    2005-02-28  Kjartan Maraas  
+    
+            * src/iso2022.c: (_vte_iso2022_process): Apply another
+            patch from Fedora. This should fix some screen corruption
+            with multibyte charsets. Closes bug #168211 and possibly
+            others.
+
+ ChangeLog     |  7 +++++++
+ src/iso2022.c | 44 ++++++++++++++++++++++----------------------
+ 2 files changed, 29 insertions(+), 22 deletions(-)
+
+commit 0fea362d1c10cce35571595fe4df87c5d491406f
+Author: Kjartan Maraas 
+Date:   2005-02-28 20:09:08 +0000
+
+    Apply patch from Fedora to fix some scrolling issues. Closes bug #168210
+    
+    2005-02-28  Kjartan Maraas  
+    
+            * src/vte.c: (vte_terminal_adjust_adjustments),
+            (vte_terminal_maybe_scroll_to_bottom),
+            (vte_terminal_update_insert_delta), (vte_terminal_handle_scroll),
+            (vte_terminal_set_scroll_adjustment), (vte_terminal_size_allocate):
+            Apply patch from Fedora to fix some scrolling issues. Closes
+            bug #168210 and possibly others.
+
+ ChangeLog |   9 +++++
+ src/vte.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 111 insertions(+), 9 deletions(-)
+
+commit 164300788a340ba8040c8c3afbda5adab3c2553f
+Author: Amanpreet Singh Alam 
+Date:   2005-02-23 05:16:59 +0000
+
+    update by amanpreetalam@yahoo.com
+
+ po/pa.po | 45 +++++++++++++++++++++++----------------------
+ 1 file changed, 23 insertions(+), 22 deletions(-)
+
+commit f65f2fd679b6ef1bef19a60a8c60da34c08de7cd
+Author: Kjartan Maraas 
+Date:   2005-02-15 11:48:43 +0000
+
+    Fix black backgrounds in new terminals. Fix from Jon Nettleton 
+    
+            * src/vte.c: (vte_terminal_visibility_notify): Fix black
+            backgrounds in new terminals. Fix from Jon Nettleton
+            . Closes bug #125364. Has been
+            in Fedora Core for months already.
+
+ ChangeLog | 7 +++++++
+ src/vte.c | 6 +++++-
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+commit 885b8c7eca0ac35a8aeb31ad74f27d3deb99ee1e
+Author: Kjartan Maraas 
+Date:   2005-02-15 11:29:24 +0000
+
+    Fix keypad behaviour to be like xterm. Closes bug #128099. Fix is from
+    
+    2005-02-15  Kjartan Maraas  
+    
+            * src/keymap.c: (_vte_keymap_map): Fix keypad behaviour
+            to be like xterm. Closes bug #128099. Fix is from
+             and has been used in Fedora the last
+            three months at least.
+
+ ChangeLog    |  7 +++++++
+ src/keymap.c | 14 ++++++++++++--
+ 2 files changed, 19 insertions(+), 2 deletions(-)
+
+commit 1bd149cf1e4fef742e6206b5db793585a639ee8f
+Author: Kjartan Maraas 
+Date:   2005-02-15 10:56:16 +0000
+
+    Don't include  here. It breaks building on AIX and can cause
+    
+    2005-02-15  Kjartan Maraas  
+    
+            * src/vteregex.h: Don't include  here. It breaks
+            building on AIX and can cause problems for l10n. Closes
+            bug #161352.
+
+ ChangeLog      | 6 ++++++
+ src/vteregex.h | 1 -
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 78463f2909c3deafd8ff9c66eeab0c539c2547d0
+Author: Kjartan Maraas 
+Date:   2005-02-15 08:49:23 +0000
+
+    Fix build on NetBSD and Darwin. Patch from Adrian Bunk 
+    
+            * src/dumpkeys.c: Fix build on NetBSD and Darwin.
+            Patch from Adrian Bunk . Closes
+            bug #126377.
+
+ ChangeLog                         | 6 ++++++
+ doc/reference/tmpl/reaper.sgml    | 5 +++++
+ doc/reference/tmpl/vte.sgml       | 3 +++
+ doc/reference/tmpl/vteaccess.sgml | 3 +++
+ src/dumpkeys.c                    | 4 +++-
+ 5 files changed, 20 insertions(+), 1 deletion(-)
+
+commit 079ff4919bdae0215929e2c7ac82e502836a3235
+Author: Priit Laes 
+Date:   2005-02-02 16:32:57 +0000
+
+    Translation updated by Ivar Smolin.
+    
+    2005-02-02  Priit Laes  
+    
+            * et.po: Translation updated by Ivar Smolin.
+
+ po/ChangeLog |  4 ++++
+ po/et.po     | 29 +++++++++++++++--------------
+ 2 files changed, 19 insertions(+), 14 deletions(-)
+
+commit 9ec41d61f8167414fc72a3641097d081b3ace455
+Author: Priit Laes 
+Date:   2005-01-20 14:40:23 +0000
+
+    Translation updated by Allan Sims.
+    
+    2005-01-20  Priit Laes  
+    
+            * et.po: Translation updated by Allan Sims.
+
+ po/ChangeLog |  4 ++++
+ po/et.po     | 24 ++++++++++++------------
+ 2 files changed, 16 insertions(+), 12 deletions(-)
+
+commit 123cc653845a9e984b8da26b34fc329f4ed0e252
+Author: Rajesh Ranjan 
+Date:   2004-12-14 07:00:38 +0000
+
+    vte revision
+
+ po/hi.po | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+commit 6321a4f2a86ea20bb47dec53e4bb833afac573e9
+Author: Rajesh Ranjan 
+Date:   2004-12-08 04:33:26 +0000
+
+    rev
+
+ po/hi.po | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+commit 686f9e662bb78846f07115e80712c671966ec3c2
+Author: Rajesh Ranjan 
+Date:   2004-12-07 07:06:14 +0000
+
+    hi
+
+ ChangeLog    | 2 ++
+ configure.in | 2 +-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+commit e3c1a43676987c11342e8f26d596cbb1967f0bfe
+Author: Rajesh Ranjan 
+Date:   2004-12-07 06:58:36 +0000
+
+    add hindi file
+
+ po/hi.po | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 114 insertions(+)
+
+commit 223f81868d98f7a024c9ad1acf16cd8186265b53
+Author: Nalin Dahyabhai 
+Date:   2004-11-17 00:32:01 +0000
+
+    silence a couple of warnings by expecting a GIOCondition instead of a
+    
+    * src/vte.c(vte_terminal_io_read,vte_terminal_io_write): silence a couple of
+            warnings by expecting a GIOCondition instead of a GtkInputCondition
+            as a parameter.
+
+ ChangeLog | 5 +++++
+ src/vte.c | 8 ++++----
+ 2 files changed, 9 insertions(+), 4 deletions(-)
+
+commit 7f3d3b207272c86af768420da60981bccc018f6c
+Author: Nalin Dahyabhai 
+Date:   2004-11-17 00:25:53 +0000
+
+    accept more, newer versions of autoconf/automake. Treat autoconf >= 3 as
+    
+    * autogen.sh: accept more, newer versions of autoconf/automake.  Treat autoconf
+            >= 3 as acceptable instead of just > 3.
+
+ ChangeLog  |  4 ++++
+ autogen.sh | 12 +++++-------
+ 2 files changed, 9 insertions(+), 7 deletions(-)
+
+commit 2949c51354ba4d1b59051d9a7eaa44133d06db03
+Author: Nalin Dahyabhai 
+Date:   2004-11-17 00:23:44 +0000
+
+    add. add. add. add. add. expand "%m" locally so that we can distinguish
+    
+    * src/vte.c(vte_terminal_sequence_handler_scroll_up_or_down): add.
+    * src/vte.c(vte_terminal_sequence_handler_scroll_up_once): add.
+    * src/vte.c(vte_terminal_sequence_handler_scroll_down_once): add.
+    * src/vte.c(vte_terminal_sequence_handler_scroll_up): add.
+    * src/vte.c(vte_terminal_sequence_handler_scroll_down): add.
+    * src/table.c(_vte_table_addi): expand "%m" locally so that we can distinguish
+            between control sequences which differ only in the number of numeric
+            arguments they expect.  This means we have a new upper limit on the
+            length of a numeric argument list we'll recognize.
+    * src/caps.c(_vte_xterm_capability_strings): remove alternates for strings
+            which include '%m' as a specifier -- that's handled at the matching
+            layer now.
+    * src/vte.c(vte_terminal_paste_cb): drop the supplied data if it isn't valid
+            UTF-8 (Red Hat #119099).
+    * src/keymap.c(_vte_keymap_map): try xterm variants if we're xterm, not the
+            other way around.
+
+ ChangeLog    |  18 +++++++
+ src/caps.c   |  10 ----
+ src/keymap.c |   2 +-
+ src/table.c  | 160 +++++++++++++++++++++++++++++++++++++----------------------
+ src/vte.c    | 107 +++++++++++++++++++++++++++++++++++++--
+ 5 files changed, 224 insertions(+), 73 deletions(-)
+
+commit 2f99b80d9cc23851980ff209291c48898b526ff6
+Author: Mətin Əmirov 
+Date:   2004-10-11 17:30:17 +0000
+
+    Added ka to ALL_LINGUAS.
+    
+    2004-10-11  Mətin Əmirov  
+    
+            * configure.in: Added ka to ALL_LINGUAS.
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c4f0942e2705e20567971f518fb42c0af7fd8646
+Author: Mətin Əmirov 
+Date:   2004-10-11 17:30:13 +0000
+
+    Translation added by Aiet Kolkhi.
+    
+    2004-10-11  Mətin Əmirov  
+    
+            * ka.po: Translation added by Aiet Kolkhi.
+
+ po/ChangeLog |   4 ++
+ po/ka.po     | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 121 insertions(+)
+
+commit 7e0c6e370a8e02fdd61e1918456042cb95960b13
+Author: David Lodge 
+Date:   2004-10-06 18:59:46 +0000
+
+    Added Old English translation. Added ang to ALL_LINGUAS
+    
+    2004-10-06  David Lodge 
+    
+            * ang.po: Added Old English translation.
+            * configure.in: Added ang to ALL_LINGUAS
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   4 +++
+ po/ang.po    | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 122 insertions(+), 1 deletion(-)
+
+commit d93f9f7a56897caccb90c7c669fb4b9c8afcf782
+Author: Adam Weinberger 
+Date:   2004-09-08 07:28:46 +0000
+
+    Updated Canadian English translation.
+    
+    
+            * en_CA.po: Updated Canadian English translation.
+
+ po/ChangeLog |  4 ++++
+ po/en_CA.po  | 37 +++++++++++++++++++------------------
+ 2 files changed, 23 insertions(+), 18 deletions(-)
+
+commit 90726a592bbc8178332a031022c4b8d050dabf67
+Author: Francisco Javier F. Serrador 
+Date:   2004-08-28 15:58:20 +0000
+
+    Updated Spanish translation
+    
+    2004-08-28  Francisco Javier F. Serrador  
+    
+            * es.po: Updated Spanish translation
+
+ po/ChangeLog |  4 ++++
+ po/es.po     | 25 ++++++++++++++-----------
+ 2 files changed, 18 insertions(+), 11 deletions(-)
+
+commit 347d80694a2544a943d7f13d251f175503b606b5
+Author: Laszlo Dvornik 
+Date:   2004-08-28 12:33:54 +0000
+
+    Updated Hungarian translation.
+    
+    2004-08-28  Laszlo Dvornik  
+    
+            * hu.po: Updated Hungarian translation.
+
+ po/ChangeLog |  4 ++++
+ po/hu.po     | 57 +++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 33 insertions(+), 28 deletions(-)
+
+commit 3aba5fb2e57bb38f75f27c116e9c222afec779ad
+Author: Laurent Dhima 
+Date:   2004-08-20 17:03:04 +0000
+
+    Updated Albanian translation.
+    
+    2004-08-20  Laurent Dhima  
+    
+            * sq.po: Updated Albanian translation.
+
+ po/ChangeLog | 4 ++++
+ po/sq.po     | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 5de1e489113069677af76af350da72c37402a12b
+Author: Kjartan Maraas 
+Date:   2004-08-18 17:28:53 +0000
+
+    Added «nb» to ALL_LINGUAS.
+    
+    2004-08-18  Kjartan Maraas  
+    
+            * configure.in: Added «nb» to ALL_LINGUAS.
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit c509534e41326ea1437f18dc7281db7a2c06b27f
+Author: Kjartan Maraas 
+Date:   2004-08-18 17:28:05 +0000
+
+    Added this.
+    
+    2004-08-18  Kjartan Maraas  
+    
+    
+            * nb.po: Added this.
+
+ po/ChangeLog |   5 +++
+ po/nb.po     | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 117 insertions(+)
+
+commit d5a816662d8bea1e57abd39b9a67a5e7258bee57
+Author: Laurent Dhima 
+Date:   2004-08-18 11:08:27 +0000
+
+    Updated Albanian translation.
+    
+    2004-08-18  Laurent Dhima  
+    
+            * sq.po: Updated Albanian translation.
+
+ po/ChangeLog | 4 ++++
+ po/sq.po     | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 4dee776a00edde218ba6e9ba5ba7c62a1f8fc9a1
+Author: Christian Rose 
+Date:   2004-08-16 21:52:27 +0000
+
+    Added "bs" to ALL_LINGUAS. Added Bosnian translation by Kemal Sanjta
+    
+    2004-08-16  Christian Rose  
+    
+            * configure.in: Added "bs" to ALL_LINGUAS.
+            * po/bs.po: Added Bosnian translation by
+            Kemal Sanjta .
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/bs.po     | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 125 insertions(+), 1 deletion(-)
+
+commit 38011c436c18822c5dc2b4b16efa74617906817c
+Author: Tommi Vainikainen 
+Date:   2004-08-13 19:46:17 +0000
+
+    Unified po headers for Finnish Team
+
+ po/ChangeLog | 4 ++++
+ po/fi.po     | 3 +--
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+commit c71cee561f061949b2ff1fde11d1883ba1c053b2
+Author: Gora Mohanty 
+Date:   2004-08-12 20:30:53 +0000
+
+    configure.in: Added "or" to ALL_LINGUAS.
+    po/or.po: Updated Oriya translation.
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   4 +++
+ po/or.po     | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 123 insertions(+), 1 deletion(-)
+
+commit 85a8e4b2375c728ef517c0379a5c622be96a13cb
+Author: Amanpreet Singh Alam 
+Date:   2004-08-09 09:56:47 +0000
+
+    check
+
+ po/pa.po | 33 ++++++++++++++++++---------------
+ 1 file changed, 18 insertions(+), 15 deletions(-)
+
+commit fcb527f0819543daf941772aa66798c310cb4fbf
+Author: Dinesh Nadarajah 
+Date:   2004-07-17 14:29:56 +0000
+
+    2004-07-17 Dinesh Nadarajah
+    
+    
+    
+    2004-07-17 Dinesh Nadarajah
+    
+            ta.po: Added Tamil Translation
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   4 +++
+ po/ta.po     | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 120 insertions(+), 1 deletion(-)
+
+commit 775f24c9131219f3da774af984414cd7d55e3461
+Author: Iñaki Larrañaga 
+Date:   2004-06-28 21:49:58 +0000
+
+    Updated Basque translation.
+    
+    2004-06-28  Iñaki Larrañaga  
+    
+            * eu.po: Updated Basque translation.
+
+ po/ChangeLog |  4 ++++
+ po/eu.po     | 72 +++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 41 insertions(+), 35 deletions(-)
+
+commit 2524421c2f6e3b121a8c7598b4dd47b00a96cf03
+Author: Laurent Dhima 
+Date:   2004-06-28 15:17:40 +0000
+
+    Translation updated.
+    
+    2004-06-28  Laurent Dhima  
+    
+            * sq.po: Translation updated.
+
+ po/ChangeLog |  4 ++++
+ po/sq.po     | 22 +++++++++++-----------
+ 2 files changed, 15 insertions(+), 11 deletions(-)
+
+commit a59add9ec3169afdc76903d67e4c5b391debe0ff
+Author: John C Barstow 
+Date:   2004-06-26 07:41:10 +0000
+
+    Added mi to ALL_LINGUAS.
+    
+    2004-06-26  John C Barstow  
+    
+            * configure.in: Added mi to ALL_LINGUAS.
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit eace4a5340a460a3a92b38920735414d6cf92317
+Author: John C Barstow 
+Date:   2004-06-26 07:41:08 +0000
+
+    Translation added.
+    
+    2004-06-26  John C Barstow  
+    
+            * mi.po: Translation added.
+
+ po/ChangeLog |   4 ++
+ po/mi.po     | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 130 insertions(+)
+
+commit d3d586b1669bbb7b4ccf3f777a4fd33c785c2c07
+Author: Thomas Vander Stichele 
+Date:   2004-05-30 09:51:39 +0000
+
+    add ignore files
+
+ .cvsignore                  |  1 +
+ doc/.cvsignore              |  2 ++
+ doc/openi18n/.cvsignore     |  3 +++
+ doc/reference/.cvsignore    | 20 ++++++++++++++++++++
+ gnome-pty-helper/.cvsignore | 12 ++++++++++++
+ python/.cvsignore           |  3 +++
+ termcaps/.cvsignore         |  2 ++
+ 7 files changed, 43 insertions(+)
+
+commit c90b8d3668b4f3d56b026852a96c9ef5deffbf9d
+Author: Thomas Vander Stichele 
+Date:   2004-05-30 09:50:59 +0000
+
+    add ignore files
+
+ .cvsignore | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+commit f93b85640ced394999f314c1ed2317ba755013b3
+Author: Alexander Shopov 
+Date:   2004-05-25 11:39:11 +0000
+
+    Updated Bulgarian translation by Vladimir "Kaladan" Petkov
+    
+    2004-05-25  Alexander Shopov  
+    
+            * bg.po: Updated Bulgarian translation by
+            Vladimir "Kaladan" Petkov 
+
+ po/ChangeLog |  5 +++++
+ po/bg.po     | 53 ++++++++++++++++++++++++++---------------------------
+ 2 files changed, 31 insertions(+), 27 deletions(-)
+
+commit b7e32d1da79ca11bd9a8106ca3114ce631251a33 (tag: vte_0_11_11)
+Author: Nalin Dahyabhai 
+Date:   2004-05-02 06:43:01 +0000
+
+    pass the global reaper in as data when adding the child source, not the
+    
+    * src/reaper.c(vte_reaper_add_child): pass the global reaper in as data when
+            adding the child source, not the terminal which called us.  Stop
+            accepting a data argument, because we'd discard it anyway.  Return the
+            ID of the source which is added, if that happens.
+    * configure.in: define VTE_INVALID_SOURCE for internal use.
+
+ ChangeLog    |  7 +++++++
+ configure.in |  1 +
+ src/reaper.c | 27 +++++++++++++++++++++++----
+ src/reaper.h |  2 +-
+ src/vte.c    |  3 +--
+ 5 files changed, 33 insertions(+), 7 deletions(-)
+
+commit 8a96cb750fab81b8f4516e80bc2e6d8cb38bd039
+Author: Nalin Dahyabhai 
+Date:   2004-05-01 15:43:05 +0000
+
+    add pointers to info on bidirectional text and shaping.
+    
+    * README: add pointers to info on bidirectional text and shaping.
+
+ ChangeLog | 3 +++
+ README    | 8 ++++++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 37e1d5101094ba96d5e38fadd0364236325a16bc
+Author: Nalin Dahyabhai 
+Date:   2004-05-01 07:12:51 +0000
+
+    add a parameter to control whether or not trailing whitespace is trimmed
+    
+    * src/vte.c(vte_terminal_get_text_maybe_wrapped): add a parameter to control
+            whether or not trailing whitespace is trimmed (padraig.obriain,
+            #141148).
+    * src/vte.c,src/vte.h(vte_terminal_get_text_include_trailing_spaces): add as a
+            wrapper for the new vte_terminal_get_text_maybe_wrapped()
+            (padraig.obriain, #141148).
+    * src/vteaccess.c(vte_terminal_accessible_update_private_d): use
+            vte_terminal_get_text_include_trailing_spaces to ensure that we get
+            trailing spaces (padraig.obriain, #141148).
+    * src/vte.c(vte_terminal_insert_char): clean up some autowrap stuff.
+
+ ChangeLog                              | 12 +++++
+ gnome-pty-helper/gnome-login-support.c | 38 ++++++++--------
+ gnome-pty-helper/gnome-pty-helper.c    | 68 ++++++++++++++--------------
+ gnome-pty-helper/gnome-utmp.c          | 30 ++++++-------
+ src/pty.c                              |  2 +-
+ src/vte.c                              | 81 +++++++++++++++++++++++++---------
+ src/vte.h                              |  7 +++
+ src/vteaccess.c                        | 34 +++++++-------
+ 8 files changed, 166 insertions(+), 106 deletions(-)
+
+commit c4a25900091c436d3d629d3bf53d653117d0322b
+Author: Nalin Dahyabhai 
+Date:   2004-04-30 18:48:18 +0000
+
+    declare the defaultemulation variable as one kind of variable, not that
+    
+    * vte.pc.in, vte-uninstalled.pc.in: declare the defaultemulation variable as
+            one kind of variable, not that other kind (#141515).
+
+ ChangeLog             | 4 ++++
+ vte-uninstalled.pc.in | 3 ++-
+ vte.pc.in             | 3 ++-
+ 3 files changed, 8 insertions(+), 2 deletions(-)
+
+commit b2025190de68a6d92be926c2324ab9ea98eb9242
+Author: Nalin Dahyabhai 
+Date:   2004-04-30 06:06:44 +0000
+
+    complete selection if we were selecting, not just if Shift is held down
+    
+    * src/vte.c(vte_terminal_button_release): complete selection if we were
+            selecting, not just if Shift is held down (allows Press Shift, Press
+            Button, Release Shift, Release Button in addition to already-recognized
+            Press Shift, Press Button, Release Button, Release Shift) (#121905).
+    * vte.spec: buildrequire gtk-doc, manually copy png images at install-time.
+
+ ChangeLog | 8 ++++++++
+ src/vte.c | 3 +--
+ vte.spec  | 6 +++++-
+ 3 files changed, 14 insertions(+), 3 deletions(-)
+
+commit ff40403f43fb72f296dfd3a4237ed69fd61fcdef
+Author: Nalin Dahyabhai 
+Date:   2004-04-30 02:59:39 +0000
+
+    documentation updates. note that we just proxy for glib 2.4 child_watch
+    
+    * src/vte.c, NEWS, doc/reference/vte-sections.txt,
+            doc/reference/tmpl/vte-unused.sgml: documentation updates.
+    * doc/reference/tmpl/reaper.sgml: note that we just proxy for glib 2.4
+            child_watch functionality, if present.
+    * NEWS: update summary.
+
+ ChangeLog                          |  6 +++++
+ NEWS                               | 14 ++++++++++
+ doc/reference/tmpl/reaper.sgml     |  4 ++-
+ doc/reference/tmpl/vte-unused.sgml | 15 +++++++++++
+ doc/reference/vte-sections.txt     | 55 ++++++++++++++++++++++++++++++++++++++
+ po/am.po                           | 26 +++++++++---------
+ po/ar.po                           | 26 +++++++++---------
+ po/az.po                           | 26 +++++++++---------
+ po/be.po                           | 26 +++++++++---------
+ po/bg.po                           | 26 +++++++++---------
+ po/bn.po                           | 26 +++++++++---------
+ po/ca.po                           | 26 +++++++++---------
+ po/cs.po                           | 26 +++++++++---------
+ po/cy.po                           | 26 +++++++++---------
+ po/da.po                           | 26 +++++++++---------
+ po/de.po                           | 26 +++++++++---------
+ po/el.po                           | 26 +++++++++---------
+ po/en_CA.po                        | 26 +++++++++---------
+ po/en_GB.po                        | 26 +++++++++---------
+ po/es.po                           | 26 +++++++++---------
+ po/et.po                           | 26 +++++++++---------
+ po/eu.po                           | 26 +++++++++---------
+ po/fa.po                           | 26 +++++++++---------
+ po/fi.po                           | 26 +++++++++---------
+ po/fr.po                           | 26 +++++++++---------
+ po/ga.po                           | 26 +++++++++---------
+ po/gu.po                           | 26 +++++++++---------
+ po/he.po                           | 26 +++++++++---------
+ po/hr.po                           | 26 +++++++++---------
+ po/hu.po                           | 26 +++++++++---------
+ po/id.po                           | 26 +++++++++---------
+ po/is.po                           | 26 +++++++++---------
+ po/it.po                           | 26 +++++++++---------
+ po/ja.po                           | 26 +++++++++---------
+ po/ko.po                           | 26 +++++++++---------
+ po/li.po                           | 26 +++++++++---------
+ po/lt.po                           | 26 +++++++++---------
+ po/lv.po                           | 26 +++++++++---------
+ po/mk.po                           | 26 +++++++++---------
+ po/ml.po                           | 26 +++++++++---------
+ po/mn.po                           | 26 +++++++++---------
+ po/ms.po                           | 26 +++++++++---------
+ po/ne.po                           | 26 +++++++++---------
+ po/nl.po                           | 26 +++++++++---------
+ po/nn.po                           | 26 +++++++++---------
+ po/no.po                           | 26 +++++++++---------
+ po/pa.po                           | 26 +++++++++---------
+ po/pl.po                           | 26 +++++++++---------
+ po/pt.po                           | 26 +++++++++---------
+ po/pt_BR.po                        | 26 +++++++++---------
+ po/ro.po                           | 26 +++++++++---------
+ po/ru.po                           | 26 +++++++++---------
+ po/sk.po                           | 26 +++++++++---------
+ po/sl.po                           | 26 +++++++++---------
+ po/sq.po                           | 26 +++++++++---------
+ po/sr.po                           | 26 +++++++++---------
+ po/sr@Latn.po                      | 26 +++++++++---------
+ po/sv.po                           | 26 +++++++++---------
+ po/tr.po                           | 26 +++++++++---------
+ po/uk.po                           | 26 +++++++++---------
+ po/vi.po                           | 26 +++++++++---------
+ po/wa.po                           | 26 +++++++++---------
+ po/zh_CN.po                        | 26 +++++++++---------
+ po/zh_TW.po                        | 26 +++++++++---------
+ src/vte.c                          |  6 ++---
+ 65 files changed, 863 insertions(+), 771 deletions(-)
+
+commit 8646f68a8f2b35005082482173b15e5e95b9dc01
+Author: Nalin Dahyabhai 
+Date:   2004-04-30 02:41:55 +0000
+
+    include get_default_emulation binding.
+    
+    * python/vte.defs: include get_default_emulation binding.
+
+ ChangeLog       |  3 +++
+ python/vte.defs | 12 +++++++++---
+ 2 files changed, 12 insertions(+), 3 deletions(-)
+
+commit 60a64be27fa33cc249fa87deed6963905031c5e8
+Author: Nalin Dahyabhai 
+Date:   2004-04-30 02:22:06 +0000
+
+    update version to 0.11.11
+    
+    * vte.spec: update version to 0.11.11
+
+ ChangeLog | 3 +++
+ vte.spec  | 7 +++++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 3da9acb379a440d41d1a4fc897f409e930f7ab56
+Author: Nalin Dahyabhai 
+Date:   2004-04-30 02:16:25 +0000
+
+    don't unref our accessible peer; it may be accessed while we're
+    
+    * src/vte.c(vte_terminal_unrealize): don't unref our accessible peer; it may be
+            accessed while we're unrealized, causing it to be destroyed and
+            re-created needlessly (#128049).
+    * src/vte.c(vte_terminal_finalize): unref our accessible peer.
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 32 ++++++++++++++++----------------
+ 2 files changed, 22 insertions(+), 16 deletions(-)
+
+commit e0f3c599ddc35517b16a12820c0af9a381fb2a23
+Author: Nalin Dahyabhai 
+Date:   2004-04-30 02:02:56 +0000
+
+    don't clear the child's PID early, so that we'll SIGHUP it properly (the
+    
+    * src/vte.c(vte_terminal_finalize): don't clear the child's PID early, so that
+            we'll SIGHUP it properly (the kernel should do that anyway, but...)
+            (#128291).
+
+ ChangeLog | 5 +++++
+ src/vte.c | 1 -
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 03404a368f9f23dade35ed81b54e27255e04b29e
+Author: Nalin Dahyabhai 
+Date:   2004-04-30 01:39:17 +0000
+
+    only deselect the current selection if just-inserted text affected the
+    
+    * src/vte.c(vte_terminal_insert_char): only deselect the current selection if
+            just-inserted text affected the selected region of the screen (#135259).
+
+ ChangeLog |  5 +++++
+ src/vte.c | 27 +++++++++++++++++++++++----
+ 2 files changed, 28 insertions(+), 4 deletions(-)
+
+commit cf8e7d95067df980ac8ebc8e5716905f231eebc7
+Author: Nalin Dahyabhai 
+Date:   2004-04-30 01:16:53 +0000
+
+    assorted updates. check for  include  if
+    
+    * README: assorted updates.
+    * configure.in: check for 
+    * src/pty.c: include  if found (#141392).
+    * src/dumpkeys.c, src/mev.c, src/pty.c, src/ssfe.c, src/vte.c: do the same.
+    * doc/reference/vte-sections.txt: add several functions which are new but
+            which weren't in the generated docs before.
+    * doc/reference/vte-unused.txt: sort.
+
+ ChangeLog                      | 10 +++++++
+ README                         | 23 ++++++++++------
+ configure.in                   |  3 ++-
+ doc/reference/tmpl/reaper.sgml |  9 +++++++
+ doc/reference/tmpl/vte.sgml    | 61 ++++++++++++++++++++++++++++++++++++++++++
+ doc/reference/vte-sections.txt |  7 +++++
+ src/Makefile.am                |  4 +--
+ src/dumpkeys.c                 |  5 ++++
+ src/mev.c                      |  5 ++++
+ src/pty.c                      |  6 +++++
+ src/ssfe.c                     |  7 ++++-
+ src/vte.c                      | 17 +++++++-----
+ src/vte.h                      |  4 +--
+ 13 files changed, 140 insertions(+), 21 deletions(-)
+
+commit c2453e484d3f53b5b5c7abbeca1b6d56d204e370
+Author: Nalin Dahyabhai 
+Date:   2004-04-30 00:31:39 +0000
+
+    remove stray debug printfs.
+    
+    * src/vte.c(vte_terminal_scroll_region): remove stray debug printfs.
+
+ ChangeLog | 3 +++
+ src/vte.c | 1 -
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+commit 934340170f404f7c4993f447cdca80543c5e018d
+Author: Nalin Dahyabhai 
+Date:   2004-04-30 00:25:52 +0000
+
+    add a --with-default-emulation argument (part of #115750). Use
+    
+    * configure.in: add a --with-default-emulation argument (part of #115750).  Use
+            AS_HELP_STRING wherever we need help strings.
+    * vte.pc.in, vte-uninstalled.pc.in: add DefaultEmulation variable
+    * vte.spec: specify "xterm" as the default-emulation, even though it's the
+            default default
+    * termcaps/Makefile.am: build and install the default emulation's
+            termcap, assuming it's some kind of xterm variant.
+    * src/keymap.c(_vte_keymap_map): check for xterm-xfree86 definitions
+            if the terminal type includes xterm, not if it exactly matches xterm
+    * src/reaper.c(vte_reaper_add_child): add.  The glib 2.4 SIGCHLD watcher
+            requires us to register particular PIDs for monitoring, so now we
+            require applications to do so.
+    * src/reaper.c(vte_reaper_child_watch_cb): add.
+    * src/reaper.c(vte_reaper_init): Don't hook the SIGCHLD handler if we're
+            running under glib 2.4, expect to use the g_child_watch mechanism.
+    * src/vte.c: remove hard-coded definition of VTE_DEFAULT_EMULATION, to be
+            picked up from config.h instead.
+    * src/vte.c(vte_sequence_handler_cs): remove stray debug printfs.
+    * src/vte.c(vte_terminal_insert_char): only do what we were doing for xn if LP
+            was also set (#141445).
+    * src/vte.c(vte_terminal_get_default_emulation): add.
+    * src/vte.c(_vte_terminal_fork_basic): call vte_reaper_add_child for new
+            children.
+
+ ChangeLog             | 26 ++++++++++++++++++++++++++
+ configure.in          | 26 +++++++++++++++++---------
+ src/keymap.c          |  2 +-
+ src/reaper.c          | 40 ++++++++++++++++++++++++++++++++++++++++
+ src/reaper.h          |  1 +
+ src/vte.c             | 31 ++++++++++++++++++++++++-------
+ src/vte.h             |  1 +
+ termcaps/Makefile.am  |  5 ++++-
+ vte-uninstalled.pc.in |  1 +
+ vte.pc.in             |  1 +
+ vte.spec              |  2 +-
+ 11 files changed, 117 insertions(+), 19 deletions(-)
+
+commit bcee3ff9c9301daf6383447828b8ac940fd6f95a
+Author: Nalin Dahyabhai 
+Date:   2004-04-27 20:48:17 +0000
+
+    more clearly document what the argv and envv arguments are expected to
+    
+    * src/vte.c(vte_terminal_fork_command): more clearly document what the argv
+            and envv arguments are expected to contain (#127979).
+    * src/vte.c(vte_terminal_insert_char): attempt to more closely match the
+            behavior of am and xn on terminals -- if am is set {if xn is set,
+            autowrap should only happen before a character is output, and then only
+            if it's a graphic character, otherwise we autowrap after a character is
+            output}
+
+ ChangeLog     |  9 +++++++
+ src/slowcat.c | 63 ++++++++++++++++++++++++++++++++-----------------
+ src/vte.c     | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------
+ 3 files changed, 117 insertions(+), 30 deletions(-)
+
+commit 68774f88fd845781f942443f99ec30e92a1765ac
+Author: Nalin Dahyabhai 
+Date:   2004-04-22 03:44:54 +0000
+
+    also trim back lines which are nothing but whitespace (#140765).
+    
+    * src/vte.c(vte_terminal_get_text_range_maybe_wrapped): also trim back lines
+            which are nothing but whitespace (#140765).
+    * src/vte.c(vte_terminal_configure_toplevel): invalidate the whole window if
+            we're "transparent", because we don't get expose events unless some
+            portion of our area came out from behind something else, but we still
+            need to repaint it (#122243).
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 18 +++++++++++++++++-
+ 2 files changed, 25 insertions(+), 1 deletion(-)
+
+commit bc403a3836f9eb2caadb40062c0f36d5b4f5d50f
+Author: Nalin Dahyabhai 
+Date:   2004-04-20 06:35:43 +0000
+
+    document the child-exited signal. document the emulation-changed and
+    
+    * doc/reference/tmpl/reaper.sgml: document the child-exited signal.
+    * doc/reference/tmpl/vte.sgml: document the emulation-changed and
+            encoding-changed signals.
+    One hundred percent*.  ONE HUNDRED PERCENT* I TELL YOU!
+    
+    * Except for the unused bits.
+
+ ChangeLog                          |   5 +
+ doc/reference/tmpl/reaper.sgml     |   4 +-
+ doc/reference/tmpl/vte-unused.sgml | 157 +++++++++++++++++++++++++++
+ doc/reference/tmpl/vte.sgml        |   7 +-
+ po/am.po                           |  39 +++----
+ po/ar.po                           |  29 +++--
+ po/az.po                           |  26 ++---
+ po/be.po                           |  37 ++++---
+ po/bg.po                           |  39 +++----
+ po/bn.po                           |  39 +++----
+ po/ca.po                           |  39 +++----
+ po/cs.po                           |  26 ++---
+ po/cy.po                           |  45 ++++----
+ po/da.po                           |  39 +++----
+ po/de.po                           |  37 +++----
+ po/el.po                           |  34 +++---
+ po/en_CA.po                        |  28 ++---
+ po/en_GB.po                        |  26 ++---
+ po/es.po                           |  36 +++----
+ po/et.po                           |  38 +++----
+ po/eu.po                           |  28 ++---
+ po/fa.po                           |  26 ++---
+ po/fi.po                           |  36 +++----
+ po/fr.po                           |  36 +++----
+ po/ga.po                           |  26 ++---
+ po/gu.po                           |  26 ++---
+ po/he.po                           |  37 ++++---
+ po/hr.po                           |  35 +++---
+ po/hu.po                           |  27 ++---
+ po/id.po                           |  39 +++----
+ po/is.po                           |  39 +++----
+ po/it.po                           |  37 +++----
+ po/ja.po                           |  36 +++----
+ po/ko.po                           |  32 +++---
+ po/li.po                           |  37 +++----
+ po/lt.po                           |  29 +++--
+ po/lv.po                           |  39 +++----
+ po/mk.po                           |  37 ++++---
+ po/ml.po                           |  39 +++----
+ po/mn.po                           |  33 +++---
+ po/ms.po                           |  66 +++++-------
+ po/ne.po                           | 216 ++++++++++++++++++-------------------
+ po/nl.po                           |  36 +++----
+ po/nn.po                           |  27 +++--
+ po/no.po                           |  33 +++---
+ po/pa.po                           |  26 ++---
+ po/pl.po                           |  37 +++----
+ po/pt.po                           |  28 ++---
+ po/pt_BR.po                        |  32 +++---
+ po/ro.po                           |  26 ++---
+ po/ru.po                           |  29 ++---
+ po/sk.po                           |  33 +++---
+ po/sl.po                           |  34 +++---
+ po/sq.po                           |  36 +++----
+ po/sr.po                           |  38 +++----
+ po/sr@Latn.po                      |  38 +++----
+ po/sv.po                           |  39 +++----
+ po/tr.po                           |  27 +++--
+ po/uk.po                           |  32 +++---
+ po/vi.po                           |  33 +++---
+ po/wa.po                           |  42 ++++----
+ po/zh_CN.po                        |  36 +++----
+ po/zh_TW.po                        |  34 +++---
+ src/Makefile.am                    |   4 +-
+ src/vtebg.c                        |  10 +-
+ 65 files changed, 1277 insertions(+), 1119 deletions(-)
+
+commit d7e1045596a8cb452d2649dee7b9638f5f50194b
+Author: Nalin Dahyabhai 
+Date:   2004-04-20 05:54:34 +0000
+
+    add rule for generating vte-uninstall.pc (Gman, #136129) add (Gman,
+    
+    * Makefile.am: add rule for generating vte-uninstall.pc (Gman, #136129)
+    * vte-uninstalled.pc.in: add (Gman, #136129)
+
+ ChangeLog             |  4 ++++
+ Makefile.am           |  2 +-
+ configure.in          |  1 +
+ vte-uninstalled.pc.in | 11 +++++++++++
+ 4 files changed, 17 insertions(+), 1 deletion(-)
+
+commit 684d3ec3b22a52c97c5e14cdd44de8aebfb6297b
+Author: Nalin Dahyabhai 
+Date:   2004-04-20 05:40:56 +0000
+
+    don't steal keys from the input method. toggle the IUTF8 flag, if it was
+    
+    * src/vte.c(vte_terminal_key_press): don't steal keys from the input method.
+    * src/pty.c(_vte_pty_set_utf8): toggle the IUTF8 flag, if it was defined at
+            compile-time (maybe for #129317).
+
+ ChangeLog |  4 ++++
+ src/pty.c |  3 ---
+ src/vte.c | 57 +++++++++++++++++++++++++++++++++++++++++++--------------
+ 3 files changed, 47 insertions(+), 17 deletions(-)
+
+commit d0c8c47dfb5d908ee22a735bc6ea80b943933630
+Author: Nalin Dahyabhai 
+Date:   2004-04-20 05:37:50 +0000
+
+    toggle the IUTF8 flag, if it was defined at compile-time (maybe for
+    
+    * src/pty.c(_vte_pty_set_utf8): toggle the IUTF8 flag, if it was defined at
+            compile-time (maybe for #129317).
+    * src/vte.c(vte_terminal_set_encoding): call _vte_pty_set_utf8.
+    * src/vte.h (vte_terminal_anti_alias_get_type): declare.
+    * src/vtebg.c(vte_bg_get_pixmap): Optimisation to fix the ridiculous
+            amount of time required to render solid colour or extremely small
+            image tiled backgrounds.  This fixes bug #123903.  (desrt)
+    * src/vtebg.c(vte_bg_root_pixmap): move resize code into a separate
+            function.
+    * src/vtebg.c(vte_bg_get_pixmap): Resize all image sources, in case
+            we're using a very small image file for the background.
+    * python/Makefile.am: move python module to site-packages/gtk-2.0,
+            which is added to the search path only by pygtk 2 (#92252).
+
+ ChangeLog          | 17 +++++++++++++
+ python/Makefile.am |  4 +--
+ src/pty.c          | 39 +++++++++++++++++++++++++---
+ src/pty.h          |  3 +++
+ src/vte.c          |  2 ++
+ src/vte.h          |  1 +
+ src/vtebg.c        | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 7 files changed, 135 insertions(+), 5 deletions(-)
+
+commit a335c65bbbde6ced343b24c470e4219174decdb5
+Author: Nalin Dahyabhai 
+Date:   2004-04-20 05:28:17 +0000
+
+    define a modulename override so that the Terminal class is registered in
+    
+    * python/vte.override: define a modulename override so that the Terminal class
+            is registered in the proper namespace so that python's help() builtin
+            sees the Terminal class (#130267).
+
+ ChangeLog           | 5 +++++
+ python/vte.defs     | 7 ++++++-
+ python/vte.override | 2 ++
+ 3 files changed, 13 insertions(+), 1 deletion(-)
+
+commit 8eca214bcb9bcbbfd2d56cc289f3da69d2ef7387
+Author: Nalin Dahyabhai 
+Date:   2004-04-20 05:22:54 +0000
+
+    add, for the sake of bindings.
+    
+    * src/vte.c(vte_terminal_anti_alias_get_type): add, for the sake of bindings.
+
+ ChangeLog          |  4 ++++
+ python/vte.defs    | 33 +++++++++++++++++++++++++++++++++
+ python/vtemodule.c |  1 +
+ src/vte.c          | 17 +++++++++++++++++
+ src/vte.h          |  5 ++++-
+ 5 files changed, 59 insertions(+), 1 deletion(-)
+
+commit e393cfc59f5f1e5c85ab5470448547d99c379212
+Author: Nalin Dahyabhai 
+Date:   2004-04-20 05:18:45 +0000
+
+    call GtkWidget's key_press_event callback for keys, in case GtkWidget has
+    
+    * src/vte.c(vte_terminal_key_press): call GtkWidget's key_press_event callback
+            for keys, in case GtkWidget has pre-programmed behavior for that key
+            (#133878).
+    * configure.in, gnome-pty-helper/configure.in: quote names of defined functions
+            (#133222).
+    * configure.in: make compilation of gnome-pty-helper actually conditional
+            (#133077).
+    * src/vte.c(vte_terminal_process_incoming): Doh #132610, actually call
+            vte_terminal_emit_contents_changed() when the contents change.
+
+ ChangeLog                     | 11 +++++++++++
+ Makefile.am                   |  5 ++++-
+ acinclude.m4                  |  4 ++--
+ configure.in                  |  1 +
+ gnome-pty-helper/acinclude.m4 |  2 +-
+ python/vtemodule.c            |  4 ++--
+ src/Makefile.am               |  1 +
+ src/vte.c                     | 12 ++++++++++++
+ 8 files changed, 34 insertions(+), 6 deletions(-)
+
+commit 4493df7203a80c12175cfb5a4a723669ee165816
+Author: Nalin Dahyabhai 
+Date:   2004-04-20 05:16:56 +0000
+
+    Add (#134429). take a VteTerminalAntiAlias argument. take a
+    
+    * src/vte.h, src/vte.c (vte_terminal_set_font_full): Add (#134429).
+    * src/vteglyph.c(_vte_glyph_cache_set_font_description): take a
+            VteTerminalAntiAlias argument.
+    * src/vteft2.c, src/vtegl.c, src/pango.c, src/pango.x, src/vtexft.c
+            (*_set_text_font): take a VteTerminalAntiAlias argument.
+
+ ChangeLog       |  7 +++++
+ src/vte.c       | 84 ++++++++++++++++++++++++++++++++++++++++++++++-----------
+ src/vte.h       | 13 +++++++++
+ src/vteapp.c    | 21 ++++++++++++---
+ src/vtedraw.c   |  5 ++--
+ src/vtedraw.h   |  8 ++++--
+ src/vtefc.c     | 46 ++++++++++++++++++++++++++-----
+ src/vtefc.h     |  2 ++
+ src/vteft2.c    |  5 ++--
+ src/vtegl.c     |  4 ++-
+ src/vteglyph.c  |  5 +++-
+ src/vteglyph.h  |  1 +
+ src/vtepango.c  |  3 ++-
+ src/vtepangox.c |  3 ++-
+ src/vterdb.c    |  2 ++
+ src/vteskel.c   |  3 ++-
+ src/vtexft.c    | 12 +++++----
+ 17 files changed, 183 insertions(+), 41 deletions(-)
+
+commit d3f6530caea122b7be6823565fa036e6badbfe50
+Author: Nalin Dahyabhai 
+Date:   2004-04-20 05:12:59 +0000
+
+    Added default signal handlers to VteTerminalClass (#137961). [NOTE: ABI
+    
+    * src/vte.h src/vte.c: Added default signal handlers to VteTerminalClass
+            (#137961).  [NOTE: ABI change.]
+    * src/vte.c(vte_terminal_configure_toplevel): don't re-invalidate everything,
+            apparently unnecessary (#122243).  Might need to back this out if I
+            ever remember what specific combination of software and versions
+            prompted its addition in the first place.
+    * src/vte.c(vte_terminal_class_init): tell gettext that messages retrieved
+            from this domain should be returned in UTF-8 (#139542).
+
+ ChangeLog    | 14 ++++++++-
+ configure.in |  1 +
+ src/vte.c    | 93 ++++++++++++++++++++++++++++++++++++++++--------------------
+ src/vte.h    | 41 +++++++++++++++++++++++++++
+ 4 files changed, 117 insertions(+), 32 deletions(-)
+
+commit bb25286687af0061c88ac58f66706a381c5c09a9
+Author: Nalin Dahyabhai 
+Date:   2004-04-20 05:08:43 +0000
+
+    don't disable use of deprecated APIs unless asked to do so. add Meta case
+    
+    * configure.in: don't disable use of deprecated APIs unless asked to do so.
+    * src/keymap.c(_vte_keymap_GDK_space): add Meta case (gafton).
+    * src/vtefc.c(_vte_fc_width_from_pango_stretch): add.
+    * src/vtefc.c(_vte_fc_transcribe_from_pango_font_description): handle
+      PangoStretch characteristics using _vte_fc_width_from_pango_stretch.
+    * src/vteregex.c: add random comments.
+    * src/vte.c(VteTerminal): track the "xn" terminal attribute.
+
+ ChangeLog                      |  16 +-
+ Makefile.am                    |   3 +
+ configure.in                   |   3 +
+ doc/reference/tmpl/reaper.sgml |  16 +-
+ doc/reference/tmpl/vte.sgml    | 420 ++++++++++++++++++++---------------------
+ src/keymap.c                   |   3 +
+ src/reflect.c                  |  18 ++
+ src/vte.c                      |   5 +
+ src/vtefc.c                    |  49 ++++-
+ src/vteregex.c                 |  13 ++
+ 10 files changed, 322 insertions(+), 224 deletions(-)
+
+commit 76d50af169334060e5f839698c39345c5efba3fa
+Author: Guntupalli Karunakar 
+Date:   2004-04-10 09:38:27 +0000
+
+    added gujarati translation
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/gu.po     | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 122 insertions(+), 1 deletion(-)
+
+commit 01061a7d846b83ae406e8bdbe93b88e44a451615
+Author: Gareth Owen 
+Date:   2004-03-20 16:59:57 +0000
+
+    Added British translation
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   4 +++
+ po/en_GB.po  | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 122 insertions(+), 1 deletion(-)
+
+commit c6715f04849493c74030b2962b6cc3d11f8a909e
+Author: Mugurel Tudor 
+Date:   2004-03-18 21:31:23 +0000
+
+    Updated Romanian translation by Misu Moldovan 
+    
+    2004-03-18  Mugurel Tudor  
+    
+            * ro.po: Updated Romanian translation
+            by Misu Moldovan 
+
+ po/ChangeLog |  5 +++++
+ po/ro.po     | 58 +++++++++++++++++++++++++---------------------------------
+ 2 files changed, 30 insertions(+), 33 deletions(-)
+
+commit 00fc9d68adc68204c5b4a8ffafcfec409500171f
+Author: Nikos Charonitakis 
+Date:   2004-03-14 23:42:56 +0000
+
+    Updated Greek translation
+
+ po/ChangeLog |  4 +++
+ po/el.po     | 82 +++++++++++++++++++-----------------------------------------
+ 2 files changed, 30 insertions(+), 56 deletions(-)
+
+commit bdc3d3de104a426e01b7e74e03388629d3c4099c
+Author: Alexander Winston 
+Date:   2004-03-10 22:12:38 +0000
+
+    Added en_CA to ALL_LINGUAS.
+    
+    2004-03-10  Alexander Winston  
+    
+            * configure.in: Added en_CA to ALL_LINGUAS.
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit f59d9d6b1ea0ced7d1d434e0a24dabcbabc12f4f
+Author: Yuri Syrota 
+Date:   2004-03-10 15:44:20 +0000
+
+    Updated Ukrainian translation
+
+ po/ChangeLog |  4 ++++
+ po/uk.po     | 39 ++++++++++++++++++++-------------------
+ 2 files changed, 24 insertions(+), 19 deletions(-)
+
+commit f7294335cb044224853e1cc5a8caa1f7afeaf26f
+Author: Alexander Winston 
+Date:   2004-03-10 04:01:12 +0000
+
+    Added Canadian English translation at "19 translated messages" status.
+    
+    2004-03-09  Alexander Winston  
+    
+            * en_CA.po: Added Canadian English translation at "19 translated
+            messages" status.
+
+ po/ChangeLog |   5 +++
+ po/en_CA.po  | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 118 insertions(+)
+
+commit 5413cc6645c64153fdfbe2f2e3342276fac7a741
+Author: Mətin Əmirov 
+Date:   2004-03-06 20:42:09 +0000
+
+    Translation updated.
+    
+    2004-03-06  Mətin Əmirov  
+    
+            * az.po: Translation updated.
+
+ po/ChangeLog |  4 ++++
+ po/az.po     | 10 +++++-----
+ 2 files changed, 9 insertions(+), 5 deletions(-)
+
+commit ff4fbe8701473e0a1f041875c6de4bab32b085a4
+Author: Guntupalli Karunakar 
+Date:   2004-03-04 09:41:53 +0000
+
+    Added Punjabi translation
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/pa.po     | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 123 insertions(+), 1 deletion(-)
+
+commit f97dca76f2d3709aa19994dab379042a3e210c79
+Author: Görkem Çetin 
+Date:   2004-03-01 05:04:40 +0000
+
+    CVS_SILENT
+
+ po/tr.po | 73 ++++++++++++++++++++++------------------------------------------
+ 1 file changed, 25 insertions(+), 48 deletions(-)
+
+commit 9d5550277d2fdf8fd0b7cdb9d06df70713da8206
+Author: Laurent Dhima 
+Date:   2004-02-23 09:42:38 +0000
+
+    Revised Albanian translation
+    
+    * sq.po: Revised Albanian translation
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit f82631a02f02a3b556bd2d6d9bd8ee6579c92f2f
+Author: Laurent Dhima 
+Date:   2004-02-23 09:40:40 +0000
+
+    Korrigjime
+
+ po/sq.po | 28 +++++++++++++---------------
+ 1 file changed, 13 insertions(+), 15 deletions(-)
+
+commit e294a40d174c07ba5a5d0e6eaef634786a7f9079
+Author: Kwok-Koon Cheung 
+Date:   2004-02-23 00:46:19 +0000
+
+    Fix kn.po header
+
+ po/ChangeLog | 6 +++++-
+ po/kn.po     | 2 +-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 85140f1282385dc155b978f4c49f498d05b75d74
+Author: Denis Lackovic 
+Date:   2004-02-07 21:41:35 +0000
+
+    *** empty log message ***
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ po/ChangeLog | 4 ++++
+ po/hr.po     | 8 ++++----
+ 4 files changed, 13 insertions(+), 5 deletions(-)
+
+commit 779ee126f4f768f1cc6435fc476b87f48430cdd9
+Author: Martin Kretzschmar 
+Date:   2004-02-02 20:41:33 +0000
+
+    use gtk-doc in xml-mode.
+    
+    * docs/reference/Makefile.am: use gtk-doc in xml-mode.
+    
+    * docs/reference/vte-docs.sgml: sgml->xml, update to DocBook XML
+    4.1.2 DTD (fixes Bug #132945)
+
+ ChangeLog                   |  7 +++++++
+ doc/reference/Makefile.am   |  8 ++++----
+ doc/reference/vte-docs.sgml | 25 ++++++++++++++-----------
+ 3 files changed, 25 insertions(+), 15 deletions(-)
+
+commit e0fe18764a7ee603ff99dbf5fea0255dc8af652e
+Author: Laurent Dhima 
+Date:   2004-02-02 15:04:46 +0000
+
+    Updated Albanian translation
+    
+    * sq.po: Updated Albanian translation
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 0c31cf5c2a5877ab4cf696c4c4a2edfa400e073c
+Author: Laurent Dhima 
+Date:   2004-02-02 15:03:30 +0000
+
+    Updated
+
+ po/sq.po | 53 +++++++++++------------------------------------------
+ 1 file changed, 11 insertions(+), 42 deletions(-)
+
+commit fa623bb77d42e806a0e74f5b732263df9337cc29
+Author: Alastair McKinstry 
+Date:   2004-02-02 10:10:27 +0000
+
+    Added Irish translation
+
+ ChangeLog    |   5 +++
+ configure.in |   2 +-
+ po/ChangeLog |   4 +++
+ po/ga.po     | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 123 insertions(+), 1 deletion(-)
+
+commit 0771398195dddf5aba89477cb30ef5f76bdfeb7b
+Author: Mətin Əmirov 
+Date:   2004-01-31 19:16:14 +0000
+
+    Translation updated.
+    
+    2004-01-31  Mətin Əmirov  
+    
+            * az.po: Translation updated.
+
+ po/ChangeLog |  4 ++++
+ po/az.po     | 32 ++++++++++++++++----------------
+ 2 files changed, 20 insertions(+), 16 deletions(-)
+
+commit 3655aad027b04b16acee664ef5c629f4b07bad91
+Author: Miloslav Trmac 
+Date:   2004-01-28 11:41:41 +0000
+
+    Fixed Czech translation
+
+ po/ChangeLog |  4 ++++
+ po/cs.po     | 46 ++++++++++++++++++++++++----------------------
+ 2 files changed, 28 insertions(+), 22 deletions(-)
+
+commit 052419a211095720e46f4697c3efaec745ef1b82
+Author: Åsmund Skjæveland 
+Date:   2004-01-27 09:24:33 +0000
+
+    Added 'nn' to ALL_LINGUAS Added Norwegian Nynorsk translation.
+    
+    2004-01-27  Åsmund Skjæveland  
+    
+            * configure.in: Added 'nn' to ALL_LINGUAS
+            * po/nn.po: Added Norwegian Nynorsk translation.
+
+ ChangeLog    |   9 +++--
+ configure.in |   2 +-
+ po/ChangeLog |   8 +++--
+ po/nn.po     | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 129 insertions(+), 5 deletions(-)
+
+commit 067189059bfea170068cfa0c291fdfe89e6cd595
+Author: Roozbeh Pournader 
+Date:   2004-01-03 16:39:30 +0000
+
+    Updated Persian translation.
+    
+    2004-01-03  Roozbeh Pournader  
+    
+            * fa.po: Updated Persian translation.
+
+ po/ChangeLog |  4 ++++
+ po/fa.po     | 50 +++++++++++++++++++++++++-------------------------
+ 2 files changed, 29 insertions(+), 25 deletions(-)
+
+commit 1b5b3fa53d3699dc00b2a942c083b3f6c8d4c04c
+Author: Duarte Loreto 
+Date:   2004-01-02 22:57:18 +0000
+
+    Revised Portuguese translation.
+    
+    2004-01-02  Duarte Loreto 
+    
+            * pt.po: Revised Portuguese translation.
+
+ po/ChangeLog |  4 +++
+ po/pt.po     | 89 ++++++++++++++++++++----------------------------------------
+ 2 files changed, 33 insertions(+), 60 deletions(-)
+
+commit c75c923b42e7bcb0df95ffd9ffa6dd43c3015426
+Author: Görkem Çetin 
+Date:   2003-12-28 21:05:40 +0000
+
+    CVS_SILENT
+
+ po/tr.po | 39 ++++++++++++++++++++-------------------
+ 1 file changed, 20 insertions(+), 19 deletions(-)
+
+commit cb4431ef509871590b0f9fca9ea3ce60ef708b16
+Author: Arafat Medini 
+Date:   2003-12-20 15:53:27 +0000
+
+    Added Arabic translation
+    
+    
+    2003-12-20  Arafat Medini 
+    
+            * ar.po: Added Arabic translation
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   4 +++
+ po/ar.po     | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 125 insertions(+), 1 deletion(-)
+
+commit 580046c70f07b977ebf5aea26360434cc9feae73
+Author: Tivo Leedjrv 
+Date:   2003-12-10 21:40:07 +0000
+
+    Added et to ALL_LINGUAS.
+    
+    2003-12-10  Tivo Leedjrv  
+    
+            * configure.in: Added et to ALL_LINGUAS.
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit e6671b0e4f3f037bf207be019f52d4cde032f259
+Author: Tivo Leedjrv 
+Date:   2003-12-10 21:39:25 +0000
+
+    Added Estonian translation by Allan Sims .
+    
+    2003-12-10  Tivo Leedjrv  
+    
+            * et.po: Added Estonian translation
+            by Allan Sims .
+
+ po/ChangeLog |   5 +++
+ po/et.po     | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 118 insertions(+)
+
+commit 2660fc0592cbde61a52558f5d2f883f90a0eff7e
+Author: Iñaki Larrañaga 
+Date:   2003-12-06 12:22:42 +0000
+
+    Added "eu" (Basque) to ALL_LINGUAS.
+    
+    
+    2003-12-06  Iñaki Larrañaga  
+    
+            * configure.in: Added "eu" (Basque) to ALL_LINGUAS.
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 08aac74397faf9d0f7f1a6082b99baf0970c4585
+Author: Iñaki Larrañaga 
+Date:   2003-12-06 12:19:29 +0000
+
+    Added Basque (eu) translation by Alberto Fernandez .
+    
+    
+    2003-12-06  Iñaki Larrañaga  
+    
+            * eu.po: Added Basque (eu) translation by
+            Alberto Fernandez .
+
+ po/ChangeLog |   5 +++
+ po/eu.po     | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 121 insertions(+)
+
+commit 975b0852249604153eb2922a2ffdb61250f8f327
+Author: Dmitry Mastrukov 
+Date:   2003-11-18 04:57:27 +0000
+
+    ru.po: Updated Russian translation from Russian team .
+
+ po/ChangeLog |   5 ++
+ po/ru.po     | 199 +++++++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 115 insertions(+), 89 deletions(-)
+
+commit 4368ab204d5870fd30cb5b8af9c47f68243a0280
+Author: Dmitry Mastrukov 
+Date:   2003-11-14 05:56:44 +0000
+
+    ru.po: Updated Russian translation from Russian team .
+
+ po/ChangeLog |   5 ++
+ po/ru.po     | 159 ++++++++++++++++++++++++++---------------------------------
+ 2 files changed, 74 insertions(+), 90 deletions(-)
+
+commit f6577c41d7f2a0e44efff8e88cca3c558c5c18bb
+Author: Denis Lackovic 
+Date:   2003-11-10 16:04:34 +0000
+
+    croatian translations updated
+
+ po/hr.po | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 93dbe845c3d5075255a7f1959f2df1fd389f40d7
+Author: Denis Lackovic 
+Date:   2003-11-07 18:21:52 +0000
+
+    croatian translations added
+
+ po/hr.po | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 112 insertions(+)
+
+commit a9fc418979a75179b20e622232e684e616a5df05
+Author: Yogeesh MB 
+Date:   2003-10-17 07:15:35 +0000
+
+    Added Kannada translations
+
+ po/ChangeLog |   4 +++
+ po/kn.po     | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 118 insertions(+)
+
+commit 2d825d132ed09cc298bc09f553ef6915fe12734d
+Author: Christian Rose 
+Date:   2003-10-14 10:46:15 +0000
+
+    Added "ne" to ALL_LINGUAS. Added Nepali translation by Pawan Chitrakar
+    
+    2003-10-14  Christian Rose  
+    
+            * configure.in: Added "ne" to ALL_LINGUAS.
+            * po/ne.po: Added Nepali translation by
+            Pawan Chitrakar .
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/ne.po     | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 118 insertions(+), 1 deletion(-)
+
+commit ae74f4da61fc65a80842df7539ae6120a3d03d29
+Author: Žygimantas Beručka 
+Date:   2003-10-07 13:02:06 +0000
+
+    Added "lt" to ALL_LINGUAS. Added Lithuanian translation by Tomas Kuliavas.
+    
+    2003-10-07  Žygimantas Beručka  
+    
+    * configure.in: Added "lt" to ALL_LINGUAS.
+    * po/lt.po: Added Lithuanian translation by Tomas Kuliavas.
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/lt.po     | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 125 insertions(+), 1 deletion(-)
+
+commit 8c91a8260dacec3774c778bf784abc13fea8112e
+Author: Laurent Dhima 
+Date:   2003-09-26 21:57:17 +0000
+
+    Updated Albanian translation
+    
+    * sq.po: Updated Albanian translation
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 6ebe67e37c3bc9d475b36334fb767cdc499acbd0
+Author: Laurent Dhima 
+Date:   2003-09-26 21:55:22 +0000
+
+    Updated
+
+ po/sq.po | 83 ++++++++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 44 insertions(+), 39 deletions(-)
+
+commit 64bf8531461a2da80a9cf0be02bb7659b6236e90
+Author: Andras Timar 
+Date:   2003-09-26 08:46:50 +0000
+
+    Added Hungarian translation.
+    
+    2003-09-25  Andras Timar  
+    
+            * hu.po: Added Hungarian translation.
+
+ po/ChangeLog |  4 +++
+ po/hu.po     | 88 +++++++++++++++++++-----------------------------------------
+ 2 files changed, 31 insertions(+), 61 deletions(-)
+
+commit 776726695a1ebb5c32ad529278fa9540e2a5887d
+Author: Nalin Dahyabhai 
+Date:   2003-09-15 18:57:33 +0000
+
+    add options for exercising the cursor and highlight colors. flush output
+    
+    * src/vteapp.c: add options for exercising the cursor and highlight colors.
+    * src/debug.c: flush output streams when we check if debugging is enabled,
+            because we'll probably output a string next.
+    * src/iso2022.c: don't print a zero-length string.  Yay compiler warnings.
+    * src/interpret.c: use g_print() instead of fprintf() to print.
+    * src/keymap.c,src/ssfe.c: include , hopefully fixing bug #121880
+            (or not).
+
+ ChangeLog       | 11 +++++++++++
+ doc/readme.txt  |  2 ++
+ src/debug.c     |  6 +++++-
+ src/interpret.c | 28 ++++++++++++++--------------
+ src/iso2022.c   |  3 ---
+ src/keymap.c    |  1 +
+ src/ssfe.c      |  2 ++
+ src/vteapp.c    | 27 +++++++++++++++++++++++----
+ 8 files changed, 58 insertions(+), 22 deletions(-)
+
+commit 47c5f6d0a8ffa93263ac62c707de265ef7e2cbea
+Author: Nalin Dahyabhai 
+Date:   2003-09-15 18:52:24 +0000
+
+    add specs for set_color_cursor and set_color_highlight.
+    
+    * python/vte.defs: add specs for set_color_cursor and set_color_highlight.
+
+ ChangeLog       |  4 ++++
+ python/vte.defs | 18 ++++++++++++++++++
+ 2 files changed, 22 insertions(+)
+
+commit 2227ee86b3257a05c3cc331f1e756abc84fcb721
+Author: Nalin Dahyabhai 
+Date:   2003-09-15 18:51:29 +0000
+
+    add vte_terminal_set_color_cursor. add vte_terminal_set_color_highlight
+    
+    * src/vte.h,src/vte.c: add vte_terminal_set_color_cursor.
+    * src/vte.h,src/vte.c: add vte_terminal_set_color_highlight (#69776).
+    * src/vte.c(vte_terminal_determine_colors): add parameters for specifying if
+            the cell being rendered is the cursor or is highlighted, probably for
+            being selected.  If either flag is set, and we've been given a color to
+            use for the purpose by a caller, use the supplied color, else use
+            inverse colors.
+
+ ChangeLog |   9 +++++
+ src/vte.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
+ src/vte.h |   4 ++
+ 3 files changed, 124 insertions(+), 14 deletions(-)
+
+commit ac5d608cdbe0da02d42d65cfeec538681cdedca7
+Author: Nalin Dahyabhai 
+Date:   2003-09-15 14:10:48 +0000
+
+    don't reset the conversion state when we hit an end-of-line. I wasn't
+    
+    * src/iso2022.c(process_control): don't reset the conversion state when we hit
+            an end-of-line.  I wasn't reading RFC1468 closely enough, as it states
+            that each line begins in the same encoding as the end of the previous
+            line, and read "application should reset before end-of-line" as
+            "terminal resets at end-of-line" (bug #122156).
+
+ ChangeLog     |  7 +++++++
+ src/iso2022.c | 33 +++++++++++++++++++++++++++------
+ 2 files changed, 34 insertions(+), 6 deletions(-)
+
+commit 7fab81108d2af2a6f204464211148820253d1969
+Author: Nguyen Thai Ngoc Duy 
+Date:   2003-09-13 14:42:37 +0000
+
+    update vte.vi
+
+ po/vi.po | 37 +++++++++++++++++++------------------
+ 1 file changed, 19 insertions(+), 18 deletions(-)
+
+commit 3f890cec536d2b2ca8c383531ee16f9ae29ca3e7
+Author: Nalin Dahyabhai 
+Date:   2003-09-11 20:48:38 +0000
+
+    silence a compiler warning.
+    
+    * src/vteapp.c: silence a compiler warning.
+
+ ChangeLog    |  3 +++
+ src/vteapp.c | 10 ++++++++--
+ 2 files changed, 11 insertions(+), 2 deletions(-)
+
+commit c52b22bd193f2372081690339171bf34903f9b0a
+Author: Nalin Dahyabhai 
+Date:   2003-09-11 20:45:04 +0000
+
+    ask for LC_* in addition to LANG if weird spacing errors crop up. add
+    
+    * README: ask for LC_* in addition to LANG if weird spacing errors crop up.
+    * src/vteconv.c,src/vteconv.h: add wrappers for _vte_conv which weed out some
+            compiler warnings.
+    * src/iso2022.c: use _vte_conv_cu instead of _vte_conv.
+    * src/trie.c: use _vte_conv_cu instead of _vte_conv.
+    * src/vte.c: give _vte_terminal_fudge_pango_colors a return type again.
+    * src/vtebg.c: ifdef out vte_bg_source_name, which is unused.
+    * src/vtebg.c,src/vterdb.c: wrap calls to gdk_property_get to weed out some
+            compiler warnings.
+
+ ChangeLog     | 12 ++++++++++++
+ README        |  2 +-
+ src/iso2022.c |  6 +++---
+ src/trie.c    |  2 +-
+ src/vte.c     |  1 +
+ src/vtebg.c   | 27 +++++++++++++++++----------
+ src/vteconv.c | 30 ++++++++++++++++++++++++++++++
+ src/vteconv.h |  9 +++++++++
+ src/vterdb.c  | 18 +++++++++++++++---
+ 9 files changed, 89 insertions(+), 18 deletions(-)
+
+commit 47cdbfa5cc03903bb2a3ce43a258c577a0103192
+Author: Nalin Dahyabhai 
+Date:   2003-09-11 19:22:29 +0000
+
+    properly resolve colors and cell properties to drawing colors. add a
+    
+    * src/vte.c(vte_terminal_draw_cells_with_attributes): properly resolve colors
+            and cell properties to drawing colors.
+    * src/vte.c(_vte_terminal_fudge_pango_colors): add a function for mapping GTK+
+            white-on-black preedit text to default reverse-colored text for the
+            terminal.
+    * src/vte.c(_vte_terminal_translate_pango_cells): don't bother doing anything
+            with the attribute for a range if the list is NULL.  Fudge
+            white-on-black text to default colors in reverse so that it works when
+            the terminal is in a black-on-white color scheme.
+
+ ChangeLog | 11 +++++++++
+ src/vte.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
+ 2 files changed, 83 insertions(+), 12 deletions(-)
+
+commit f92917c8b4c52fb371335f2c66e25819ac231b69
+Author: Nalin Dahyabhai 
+Date:   2003-09-11 18:22:06 +0000
+
+    map weight attributes to the terminal's bold attribute.
+    
+    * src/vte.c(_vte_terminal_apply_pango_attr): map weight attributes to the
+            terminal's bold attribute.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 9 +++++++++
+ 2 files changed, 13 insertions(+)
+
+commit c9a838b195eac58b11db84d77cdcd321daf8ebf8
+Author: Nalin Dahyabhai 
+Date:   2003-09-11 16:45:51 +0000
+
+    add. don't discard the attributes list for the preedit string -- save
+    
+    * src/vte.c(_vte_terminal_map_pango_color): add.
+    * src/vte.c(vte_terminal_im_preedit_changed): don't discard the attributes
+            list for the preedit string -- save them.
+    * src/vte.c(vte_terminal_draw_cells_with_attributes): add.
+    * src/vte.c(vte_terminal_paint): use draw_cells_with_attributes to use the
+            preedit attributes list when drawing the preedit string.  This changes
+            the way the preedit string is presented to the user, but it now looks
+            [more] like GTK+ suggests it should look, so it should be a good change.
+
+ ChangeLog |  11 ++++
+ src/vte.c | 216 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
+ 2 files changed, 213 insertions(+), 14 deletions(-)
+
+commit 1b843342150f65a772a09c821411516d06516e3d
+Author: Pablo Saratxaga 
+Date:   2003-09-10 20:10:44 +0000
+
+    enabled header
+
+ po/ru.po | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit a68abf5b87551d60e1c50bd045fbca482320e226
+Author: Pablo Saratxaga 
+Date:   2003-09-10 20:10:06 +0000
+
+    updated Vietnamese file
+
+ po/ChangeLog |  4 ++++
+ po/vi.po     | 54 +++++++++++++++++++++++++++---------------------------
+ 2 files changed, 31 insertions(+), 27 deletions(-)
+
+commit b827b2d0278208d17bfb2659a228345ee561bd26
+Author: Mugurel Tudor 
+Date:   2003-09-02 20:59:25 +0000
+
+    *** empty log message ***
+
+ po/ChangeLog |  5 ++++
+ po/ro.po     | 88 +++++++++++++++++++++++-------------------------------------
+ 2 files changed, 38 insertions(+), 55 deletions(-)
+
+commit 84be499c9d9b55dd11449d4935fece47b3b39024
+Author: Pablo Gonzalo del Campo 
+Date:   2003-08-28 14:30:02 +0000
+
+    Revision of Spanish translation by Francisco Javier F. Serrador
+    
+    2003-08-28  Pablo Gonzalo del Campo  
+    
+            * es.po: Revision of Spanish translation by
+                     Francisco Javier F. Serrador .
+
+ po/ChangeLog |  5 +++++
+ po/es.po     | 45 +++++++++++++++++++++++----------------------
+ 2 files changed, 28 insertions(+), 22 deletions(-)
+
+commit 1a6e7cfac60c34e07d36ce8fe7ee9872b908ad91
+Author: Sanlig Badral 
+Date:   2003-08-24 00:09:48 +0000
+
+    Updated mn translation.
+
+ po/ChangeLog |  4 ++++
+ po/mn.po     | 69 +++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 40 insertions(+), 33 deletions(-)
+
+commit ec892f3bdcabf5255b1915458a535a4a9be8525c
+Author: Changwoo Ryu 
+Date:   2003-08-23 18:41:17 +0000
+
+    Updated Korean translation.
+    
+            * ko.po: Updated Korean translation.
+
+ po/ChangeLog |  4 ++++
+ po/ko.po     | 56 ++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 32 insertions(+), 28 deletions(-)
+
+commit 4030755b729edf86e657efc9c2104a7d81526ada
+Author: Andraz Tori 
+Date:   2003-08-23 17:32:37 +0000
+
+    Updated Slovenian translation
+
+ po/sl.po | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit 42f01163d77ee0b58bf149b7d67a73a78bdde02d
+Author: Andraz Tori 
+Date:   2003-08-23 17:16:08 +0000
+
+    Updated Slovenian translation
+
+ po/sl.po | 68 ++++++++++++++++++++++++++++++++--------------------------------
+ 1 file changed, 34 insertions(+), 34 deletions(-)
+
+commit 674dc22dddcc40a54ce0d3a97b6e2f95e092fb07
+Author: Stano Visnovsky 
+Date:   2003-08-22 06:21:46 +0000
+
+    Also update the translation :-((
+
+ po/sk.po | 99 +++++++++++++++++++++++-----------------------------------------
+ 1 file changed, 36 insertions(+), 63 deletions(-)
+
+commit a3d3b89b1817b8827ed86ac9bd78d8adbd2a7bf7
+Author: Stanislav Visnovsky 
+Date:   2003-08-22 06:21:10 +0000
+
+    Update Slovak translation.
+    
+    2003-08-22  Stanislav Visnovsky  
+    
+            * sk.po: Update Slovak translation.
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 71577720aff198343cc94797f7c636cea623bf3e
+Author: Kjartan Maraas 
+Date:   2003-08-20 13:34:15 +0000
+
+    Update Norwegian translation.
+    
+    2003-08-20  Kjartan Maraas  
+    
+            * no.po: Update Norwegian translation.
+
+ po/ChangeLog |  4 +++
+ po/no.po     | 83 ++++++++++++++++++++----------------------------------------
+ 2 files changed, 31 insertions(+), 56 deletions(-)
+
+commit 7d2f8c81aeacf58edb470253001b046808f79de9
+Author: Kwok-Koon Cheung 
+Date:   2003-08-18 16:49:54 +0000
+
+    Updated traditional Chinese translation.
+    
+            * zh_TW.po: Updated traditional Chinese translation.
+
+ po/ChangeLog |  4 ++++
+ po/zh_TW.po  | 49 +++++++++++++++++++++++++------------------------
+ 2 files changed, 29 insertions(+), 24 deletions(-)
+
+commit 1c940776305e11747ebe5052652b6296b6e3e076
+Author: Metin Amiroff 
+Date:   2003-08-18 10:57:12 +0000
+
+    Updated Azerbaijani translation.
+    
+    2003-08-18  Metin Amiroff 
+    
+            * az.po: Updated Azerbaijani translation.
+
+ po/ChangeLog |  4 ++++
+ po/az.po     | 46 +++++++++++++++++++++-------------------------
+ 2 files changed, 25 insertions(+), 25 deletions(-)
+
+commit 2b77e416c12119396be80d01d1f25932bf57ac4e
+Author: Evandro Fernandes Giovanini 
+Date:   2003-08-17 03:47:44 +0000
+
+    Updated Brazilian Portuguese translation.
+    
+    2003-08-17  Evandro Fernandes Giovanini  
+    
+            * pt_BR.po: Updated Brazilian Portuguese translation.
+
+ po/ChangeLog |  4 ++++
+ po/pt_BR.po  | 70 ++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 39 insertions(+), 35 deletions(-)
+
+commit 3df7fa7f219d8dcad5a89f573ece5ea59a832182
+Author: Nalin Dahyabhai 
+Date:   2003-08-13 05:50:15 +0000
+
+    add sequences for linux-console-cursor-attributes, which we'll ignore (bug
+    
+    * src/caps.c: add sequences for linux-console-cursor-attributes, which we'll
+            ignore (bug #108232).
+
+ ChangeLog  | 4 ++++
+ src/caps.c | 2 ++
+ src/vte.c  | 1 +
+ 3 files changed, 7 insertions(+)
+
+commit 54a1c9d3e0b13f9d110280e25b33536331661fe5
+Author: Nalin Dahyabhai 
+Date:   2003-08-13 05:05:21 +0000
+
+    if we don't find the python headers (even if we found python), disable
+    
+    * configure.in: if we don't find the python headers (even if we found python),
+            disable compilation of python bindings (bug #116756).  Make the checks
+            for python support sequential for easier maintenance.
+    * python/vte.defs: add def for vte_terminal_match_set_cursor_type.  Make the
+            color argument to vte_terminal_set_background_tint_color const.
+    * python/vte.override(_wrap_vte_terminal_forkpty): add.
+    * python/vte.override(_wrap_vte_terminal_fork_command): don't leak envv.
+
+ ChangeLog           |  9 ++++++++
+ configure.in        | 59 +++++++++++++++++++++++++++++++----------------------
+ python/vte.defs     | 25 ++++++++++++++++++++++-
+ python/vte.override | 55 +++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 123 insertions(+), 25 deletions(-)
+
+commit 23eec8755cab0e9c9c64c9fd4b89889b9f6e0be1
+Author: Nalin Dahyabhai 
+Date:   2003-08-13 04:20:18 +0000
+
+    doc update to note that directory and envv can be NULL for both.
+    
+    * src/vte.c(vte_terminal_fork_command,vte_terminal_forkpty): doc update to note
+            that directory and envv can be NULL for both.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 7 ++++---
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+commit 53e026ce9cf40ca2ce3c265e20c58be58e97bef7
+Author: Nalin Dahyabhai 
+Date:   2003-08-13 04:16:58 +0000
+
+    if -S is passed, use forkpty to start a child that just counts until
+    
+    * src/vteapp.c(main): if -S is passed, use forkpty to start a child that just
+            counts until killed with Ctrl-C.
+
+ ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit bfabf9b46cd6739d974a0ce727278951f1fedbc7
+Author: Nalin Dahyabhai 
+Date:   2003-08-13 04:15:26 +0000
+
+    exit on any error, to avoid leaving random unreaped children running.
+    
+    * src/pty.c(_vte_pty_run_on_pty): exit on any error, to avoid leaving random
+            unreaped children running.  Accept NULL command indicating that no
+            exec() should occur, but still error out if command isn't NULL and
+            exec() fails.
+    * src/pty.c(_vte_pty_fork_on_pty_name,_vte_pty_fork_on_pty_fd): store 0 as the
+            new child's PID if we're the child.
+    * src/pty.c(main): don't run "tty" by default, test the forkpty() case instead.
+    * src/vte.c(vte_terminal_fork_command): rename to _vte_terminal_fork_basic.
+            Remove code to replace NULL command with the user's shell.
+    * src/vte.c(vte_terminal_fork_command): new (sort of)! wrap
+            _vte_terminal_fork_basic, replacing a NULL command with the user's
+            shell.
+    * src/vte.c(vte_terminal_forkpty),src/vte.h: new! wrap _vte_terminal_fork_basic,
+            passing NULL for the command and argv arguments (bug #116450).
+    * src/Makefile.am: update shared library version.
+    * doc/reference/vte-sections.txt: add vte_terminal_forkpty.
+
+ ChangeLog                      |  21 ++++
+ doc/reference/tmpl/vte.sgml    |  14 +++
+ doc/reference/vte-sections.txt |   1 +
+ src/Makefile.am                |  10 +-
+ src/pty.c                      | 222 +++++++++++++++++++++++++----------------
+ src/vte.c                      | 151 +++++++++++++++++++---------
+ src/vte.h                      |   7 ++
+ src/vteapp.c                   |  72 ++++++++++---
+ 8 files changed, 345 insertions(+), 153 deletions(-)
+
+commit 99444442a83f4422ccad6d626d8983cf9667823c
+Author: Nalin Dahyabhai 
+Date:   2003-08-13 04:06:39 +0000
+
+    if  isn't found, then we can't use any freetype-specific bits,
+    
+    * configure.in: if  isn't found, then we can't use any
+            freetype-specific bits, and that's not useful.  Error out, and say
+            that we need freetype 2.0.2 or newer, which introduced this header
+            into the procedure (bug #116341).
+
+ ChangeLog    | 6 ++++++
+ configure.in | 5 ++++-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+commit ed3e478cd5d03e9c4abd514e6f8d5228f1cebe62
+Author: Nalin Dahyabhai 
+Date:   2003-08-13 02:07:04 +0000
+
+    don't create an accessible peer at init() time in debug mode. add a field
+    
+    * src/vte.c: don't create an accessible peer at init() time in debug mode.
+    * gnome-pty-helper/gnome-pty-helper.c(struct pty_info): add a field to keep
+            track of whether or not we created a lastlog record (bug #116091).
+    * gnome-pty-helper/gnome-pty-helper.c(shutdown_pty): also try to write a logout
+            record if pi->lastlog is true, because in doing so we free pi->data,
+            closing a leak (bug #116091).
+
+ ChangeLog                           | 9 +++++++++
+ gnome-pty-helper/gnome-pty-helper.c | 9 +++++----
+ src/vte.c                           | 4 ++--
+ 3 files changed, 16 insertions(+), 6 deletions(-)
+
+commit b9cb58a14dd7a0ead9635174db49c53e73233390
+Author: Nalin Dahyabhai 
+Date:   2003-08-13 01:34:55 +0000
+
+    don't add the padding in when calculating the new window size.
+    
+    * src/vteapp.c(resize_window): don't add the padding in when calculating the
+            new window size.
+
+ ChangeLog    | 4 ++++
+ src/vteapp.c | 8 ++++++--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+commit 6ab10dbe84b5b6ad57ed0fdfdde701a087b1ce9d
+Author: Nalin Dahyabhai 
+Date:   2003-08-13 01:28:36 +0000
+
+    note that dimensions passed in with the resize-window signal include
+    
+    * doc/reference/tmpl/vte.sgml: note that dimensions passed in with the
+            resize-window signal include padding (more of bug #119141).
+
+ ChangeLog                   | 4 ++++
+ doc/reference/tmpl/vte.sgml | 4 ++--
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 21d67c812337f527de39265ce6f50b3eb92415a5
+Author: Nalin Dahyabhai 
+Date:   2003-08-13 01:22:26 +0000
+
+    remove redundant type checks. return a boolean indicating whether or not
+    
+    * src/vte.c(vte_sequence_handler_character_attributes,
+            vte_sequence_handler_decset_internal): remove redundant type checks.
+    * src/vte.c(all signal handlers): return a boolean indicating whether or not
+            to exit the processing loop instance early to allow the application to
+            deal with some input (usually along the lines of a signal requesting
+            that the terminal be resized) (bug #118938).
+
+ ChangeLog |  10 +-
+ src/vte.c | 756 +++++++++++++++++++++++++++++++++++++-------------------------
+ 2 files changed, 460 insertions(+), 306 deletions(-)
+
+commit 6b1e929885a8ce5d07207a4e5dacb76fe14646ec
+Author: Nalin Dahyabhai 
+Date:   2003-08-12 22:10:04 +0000
+
+    reorder arguments to match the order for the C versions (#118882). fix
+    
+    * python/vte.override(get_text,get_text_range): reorder arguments to match
+            the order for the C versions (#118882).
+    * python/vte.override(get_text,get_text_range,call_callback): fix refcounting
+            and callback argument marshalling (bug #118882).
+    * python/vte-demo.py: exercies get_text() on "window-raise" signals.
+
+ ChangeLog           |   7 +++
+ python/vte-demo.py  |  12 ++++
+ python/vte.override | 177 +++++++++++++++++++++++++++-------------------------
+ 3 files changed, 111 insertions(+), 85 deletions(-)
+
+commit 56a84e5e113ac16c28c79d762d01e2bf0c15da42
+Author: Padraig O'Briain 
+Date:   2003-08-12 13:17:33 +0000
+
+    New function containing initialization code previously in
+    
+    2003-08-12  Padraig O'Briain  
+    
+            * src/vteaccess.c:
+            (vte_terminal_initialize): New function containing initialization code
+            previously in vte_terminal_accessible_new. Also set role in
+            this function.
+            (vte_terminal_accessible_class_init): Specify function pointer for
+            vte_terminal_initialize.
+            (vte_terminal_accessible_get_type): Do not set instance data size or
+            GInstanceInitFunc. Remove vte_terminal_accessible_init.
+    
+            This fixes bug #119694.
+
+ ChangeLog       |  13 +++++
+ src/vteaccess.c | 152 +++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 91 insertions(+), 74 deletions(-)
+
+commit d574a21aae2d1201772394d8900083f1517dec1f
+Author: Nalin Dahyabhai 
+Date:   2003-08-11 19:35:03 +0000
+
+    add binding for get_padding() (bug #118834).
+    
+    * python/vte.override: add binding for get_padding() (bug #118834).
+
+ ChangeLog           |  3 +++
+ python/vte.override | 15 +++++++++++++++
+ 2 files changed, 18 insertions(+)
+
+commit f66cbcac552c13cc87c0275c833dd7b0514a22b4
+Author: Nalin Dahyabhai 
+Date:   2003-08-11 19:31:06 +0000
+
+    add binding for get_cursor_position() (bug #118800).
+    
+    * python/vte.override: add binding for get_cursor_position() (bug #118800).
+
+ ChangeLog           |  4 ++++
+ python/vte.override | 16 ++++++++++++++++
+ 2 files changed, 20 insertions(+)
+
+commit 12d3080b535d3cac358f10f6eeed222b547a28e1
+Author: Nalin Dahyabhai 
+Date:   2003-08-11 19:27:42 +0000
+
+    give length parameters for feed() and feed_child() default values of -1
+    
+    * python/vte.defs: give length parameters for feed() and feed_child() default
+            values of -1 (bug #118711).
+    * python/vte.override: use the length parameter if it's supplied to the feed()
+            and feed_child() methods.
+
+ ChangeLog           |  6 ++++++
+ python/vte.defs     |  4 ++--
+ python/vte.override | 20 ++++++++++++++++++++
+ 3 files changed, 28 insertions(+), 2 deletions(-)
+
+commit 4fda439d4cae15a883225f48e42f8d94e6583b85
+Author: Nalin Dahyabhai 
+Date:   2003-08-11 19:19:22 +0000
+
+    add overrides for feed() and feed_child() methods which use the length of
+    
+    * python/vte.override: add overrides for feed() and feed_child() methods which
+            use the length of the string as given in C, to hopefully allow passing
+            NUL bytes around as part of strings (bug #118711).  Make the length
+            parameter optional, and ignored, to try to avoid breaking existing
+            Python code in an obvious way.
+
+ ChangeLog           |  7 +++++++
+ python/vte.override | 38 ++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 45 insertions(+)
+
+commit 6673b67fda3b1974cdab4a369dc7d866b34104c4
+Author: Nalin Dahyabhai 
+Date:   2003-08-11 18:55:29 +0000
+
+    drop an unnecessary cast-and-check, which we don't need because we have no
+    
+    * src/vte.c(vte_terminal_start_selection,vte_terminal_extend_selection): drop
+            an unnecessary cast-and-check, which we don't need because we have no
+            use for the GtkWidget pointer to the terminal.  Fix initial shift-click
+            (bug #118106).
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 58 +++++++++++++++++++++++++++++++++++++---------------------
+ 2 files changed, 43 insertions(+), 21 deletions(-)
+
+commit ec49da165a83192a802a88ec111a72283cc688a1
+Author: Nalin Dahyabhai 
+Date:   2003-08-11 16:17:35 +0000
+
+    error out if we don't find ncurses, curses, or libtermcap development
+    
+    * configure.in: error out if we don't find ncurses, curses, or libtermcap
+            development headers (bug #117754).
+
+ ChangeLog    | 4 ++++
+ configure.in | 5 ++++-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit 583c3fa685a4210621973f9718ac2c715abf3807
+Author: Nalin Dahyabhai 
+Date:   2003-08-11 16:06:49 +0000
+
+    export WANT_AUTOCONF_2_5 for the sake of Mandrake autoconf wrapper (bug
+    
+    * autogen.sh: export WANT_AUTOCONF_2_5 for the sake of Mandrake autoconf
+            wrapper (bug #119066).
+
+ ChangeLog  | 4 ++++
+ autogen.sh | 3 +++
+ 2 files changed, 7 insertions(+)
+
+commit 3cb9fd6106fc89f14c0c192c4fdf89c2a55d55ee
+Author: Wang Jian 
+Date:   2003-08-09 10:39:05 +0000
+
+    *** empty log message ***
+
+ po/ChangeLog |  5 ++++
+ po/zh_CN.po  | 82 +++++++++++++++++++++---------------------------------------
+ 2 files changed, 34 insertions(+), 53 deletions(-)
+
+commit 574fb4d3c4b0c8caed6c2e00f038be5e1eeb58b7
+Author: Dmitry Mastrukov 
+Date:   2003-08-07 04:30:41 +0000
+
+    be.po: Updated Belarusian translation from Belarusian team .
+
+ po/ChangeLog |  5 +++++
+ po/be.po     | 54 ++++++++++++++++++++++++++++++------------------------
+ 2 files changed, 35 insertions(+), 24 deletions(-)
+
+commit 88392e65f196fdd6305838e6d0a689dce3f18f85
+Author: Yuri Syrota 
+Date:   2003-08-06 09:52:21 +0000
+
+    Updated Ukrainian translations
+
+ po/uk.po | 81 +++++++++++++++++++---------------------------------------------
+ 1 file changed, 24 insertions(+), 57 deletions(-)
+
+commit aefd7108001b6bcbb37376a1b3a6037b4c8b5083
+Author: Nalin Dahyabhai 
+Date:   2003-08-05 05:05:37 +0000
+
+    include the widget's padding widths in resize requests (bug #119141).
+    
+    * vte.c(vte_sequence_handler_decset_internal,
+            vte_sequence_handler_window_manipulation): include the widget's padding
+            widths in resize requests (bug #119141).
+
+ ChangeLog |  5 +++++
+ src/vte.c | 24 ++++++++++++++++--------
+ 2 files changed, 21 insertions(+), 8 deletions(-)
+
+commit ac280b16e78961a71cfeb56dc2d25ea0b2b49166
+Author: Sajith VK 
+Date:   2003-08-02 13:08:05 +0000
+
+    The mass commit, to synchronise SMC and Gnome CVS
+
+ po/ml.po | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 83476088a2573f1e23e12fb21b9c9234c970ba64
+Author: Nalin Dahyabhai 
+Date:   2003-07-30 21:43:42 +0000
+
+    check for autoconf-2.51, autoconf-2.50, autoconf-2.5 when looking for
+    
+    * autogen.sh: check for autoconf-2.51, autoconf-2.50, autoconf-2.5 when looking
+            for autoconf 2.5x (bug #118627).
+
+ ChangeLog  | 6 +++++-
+ autogen.sh | 2 +-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 32ba49340ecfb1d6dda4e4d0147e9fdee9cc9114
+Author: Sajith VK 
+Date:   2003-07-27 12:57:11 +0000
+
+    ok
+
+ po/ml.po | 79 ++++++++++++++++++++++++++++++++--------------------------------
+ 1 file changed, 39 insertions(+), 40 deletions(-)
+
+commit 787a8eb6ac714be94becc54a34ae654579987a2d
+Author: Hasbullah Bin Pit 
+Date:   2003-07-23 13:11:48 +0000
+
+    Updated Malay translation.
+    
+    2003-07-22  Hasbullah Bin Pit 
+    
+            * ms.po: Updated Malay translation.
+
+ po/ChangeLog |  4 ++++
+ po/ms.po     | 71 +++++++++++++++++++++++++++++++++++++-----------------------
+ 2 files changed, 48 insertions(+), 27 deletions(-)
+
+commit e82a392d075a35581fddf24dbc2f0a32714bdd39
+Author: Nalin Dahyabhai 
+Date:   2003-07-21 15:09:11 +0000
+
+    define _XOPEN_SOURCE_EXTENDED, _XOPEN_SOURCE, and __EXTENSIONS__ for
+    
+    * gnome-pty-helper/configure.in: define _XOPEN_SOURCE_EXTENDED, _XOPEN_SOURCE,
+            and __EXTENSIONS__ for Solaris, as we do in the top-level configure
+            (bug #117636).
+
+ ChangeLog                     |  5 +++++
+ gnome-pty-helper/configure.in | 15 +++++++++++++++
+ 2 files changed, 20 insertions(+)
+
+commit 5123fa850ba5db256540a6d03880854a85028ed2
+Author: Vincent van Adrighem 
+Date:   2003-07-20 13:38:10 +0000
+
+    Dutch translation updated by Tino Meinen.
+    
+    2003-07-20  Vincent van Adrighem  
+    
+            * nl.po: Dutch translation updated by Tino Meinen.
+
+ po/ChangeLog |  4 ++++
+ po/nl.po     | 64 ++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 36 insertions(+), 32 deletions(-)
+
+commit f3342f25b3f400513d220bc039c34ccae7d77a8f
+Author: Kwok-Koon Cheung 
+Date:   2003-07-20 01:40:56 +0000
+
+    Mark wrong entry as fuzzy (msgfmt check failed).
+    
+            * li.po: Mark wrong entry as fuzzy (msgfmt check failed).
+
+ po/ChangeLog |  4 ++++
+ po/li.po     | 12 ++++++------
+ 2 files changed, 10 insertions(+), 6 deletions(-)
+
+commit 5019e03463768e0c35c7fd569f12b12f4f0d71c1
+Author: Nalin Dahyabhai 
+Date:   2003-07-16 23:03:52 +0000
+
+    check for grantpt in libc and then in libpt. Check for openpty in libc
+    
+    * gnome-pty-helper/configure.in: check for grantpt in libc and then in libpt.
+            Check for openpty in libc before checking libutil.  Check for sendmsg
+            in libc before checking libsocket (with libnsl) (#117636).
+
+ ChangeLog                     |  5 +++++
+ gnome-pty-helper/configure.in | 13 +++----------
+ 2 files changed, 8 insertions(+), 10 deletions(-)
+
+commit 4b278c39b0b1e46bc6fa2b36f185736036b674a4
+Author: Kostas Papadimas 
+Date:   2003-07-15 15:08:11 +0000
+
+    Updated the Greek translation
+
+ po/ChangeLog |  4 ++++
+ po/el.po     | 65 +++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 38 insertions(+), 31 deletions(-)
+
+commit 5ff9ecb6f89cd8a546c3fa3aa00d649d15002555
+Author: Metin Amiroff 
+Date:   2003-07-13 08:51:41 +0000
+
+    Updated Azerbaijani translation.
+    
+    2003-07-13  Metin Amiroff  
+    
+            * az.po: Updated Azerbaijani translation.
+
+ po/ChangeLog |   4 +++
+ po/az.po     | 102 +++++++++++++++++++++++------------------------------------
+ 2 files changed, 44 insertions(+), 62 deletions(-)
+
+commit b68715f2751b5d3e9ad54a97ad6664835393e85f
+Author: Pablo Saratxaga 
+Date:   2003-07-11 08:31:33 +0000
+
+    Added Walloon file
+
+ ChangeLog    |   3 ++
+ configure.in |   2 +-
+ po/ChangeLog |   4 +++
+ po/wa.po     | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 122 insertions(+), 1 deletion(-)
+
+commit 557b9a060ddf6e3c689605949e59a079ee8fb3e3
+Author: Nalin Dahyabhai 
+Date:   2003-07-10 20:38:11 +0000
+
+    - hmm, need to add these
+
+ src/vteregex.c | 261 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vteregex.h |  40 +++++++++
+ 2 files changed, 301 insertions(+)
+
+commit 0cf9f86796f99e7f9ca6b56ecaea38e99e0204d6
+Author: Nalin Dahyabhai 
+Date:   2003-07-10 20:32:07 +0000
+
+    add. use interfaces from vteregex for doing dingus matching.
+    
+    * src/vteregex.h, src/vteregex.c: add.
+    * src/vte.c: use interfaces from vteregex for doing dingus matching.
+
+ ChangeLog       |  4 ++++
+ src/Makefile.am |  2 ++
+ src/vte.c       | 44 +++++++++++++++++++++++---------------------
+ 3 files changed, 29 insertions(+), 21 deletions(-)
+
+commit 6c22c8aaf484f65e32523c539746d7880b67479f
+Author: Nalin Dahyabhai 
+Date:   2003-07-04 03:53:42 +0000
+
+    return an empty string in response to the ENQ control sequence instead of
+    
+    * src/vte.c(vte_sequence_handler_return_terminal_status): return an empty
+            string in response to the ENQ control sequence instead of "xterm".
+            Report and patch from Mariano Suárez-Alvarez (bug #116495).
+
+ ChangeLog | 5 +++++
+ src/vte.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 8a641fdff72f4abee7a66601aefe88d8a65ad537
+Author: Pablo Gonzalo del Campo 
+Date:   2003-07-02 14:35:41 +0000
+
+    Updated Spanish translation by Francisco Javier F. Serrador
+    
+    2003-07-02  Pablo Gonzalo del Campo  
+    
+            * es.po: Updated Spanish translation by
+                     Francisco Javier F. Serrador .
+
+ po/ChangeLog |  5 +++++
+ po/es.po     | 55 +++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 34 insertions(+), 26 deletions(-)
+
+commit ddad9e00e4d0442d761390480aafd9c85713121f
+Author: Nalin Dahyabhai 
+Date:   2003-06-27 16:27:19 +0000
+
+    treat the "big5hkscs" encoding as an East Asian encoding, which uses
+    
+    * src/iso2022.c: treat the "big5hkscs" encoding as an East Asian encoding,
+            which uses ambiguous widths (#116078).  Report and patch from Roger So.
+    * src/dumpkeys.c, src/iso2022.c, src/iso8859mode.c, src/nativeecho.c,
+            src/utf8echo.c, src/utf8mode.c, src/vte.c: don't use the literal escape
+            character, express it as an octal sequence.
+
+ ChangeLog         |  8 ++++++++
+ src/dumpkeys.c    |  2 +-
+ src/iso2022.c     |  1 +
+ src/iso8859mode.c |  2 +-
+ src/nativeecho.c  |  2 +-
+ src/utf8echo.c    |  2 +-
+ src/utf8mode.c    |  2 +-
+ src/vte.c         | 10 ++++++----
+ 8 files changed, 20 insertions(+), 9 deletions(-)
+
+commit 668ee92b8dc84d26941756039b16586eb8529f2d
+Author: Artur Flinta 
+Date:   2003-06-27 08:20:24 +0000
+
+    Updated Polish translation.
+    
+    2003-06-27  Artur Flinta  
+    
+            * pl.po: Updated Polish translation.
+
+ po/ChangeLog |  4 ++++
+ po/pl.po     | 56 ++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 32 insertions(+), 28 deletions(-)
+
+commit ad1489055c1bad831a9ea642d607a10669926e90
+Author: Danilo Šegan 
+Date:   2003-06-21 23:45:03 +0000
+
+    Updated Serbian translation by Serbian team (Prevod.org).
+    
+    2003-06-22  Danilo Šegan  
+    
+            * sr.po, sr@Latn.po: Updated Serbian translation by Serbian team
+            (Prevod.org).
+
+ po/ChangeLog  |  5 +++++
+ po/sr.po      | 65 ++++++++++++++++++++++++++++++-----------------------------
+ po/sr@Latn.po | 65 ++++++++++++++++++++++++++++++-----------------------------
+ 3 files changed, 71 insertions(+), 64 deletions(-)
+
+commit c8bf89769f866b784f58bd0d297a68ba463dbdc9
+Author: updated ja.po. T.Aihana 
+Date:   2003-06-20 14:17:12 +0000
+
+    2003-06-20 updated ja.po. T.Aihana 
+
+ po/ChangeLog | 12 ++++++---
+ po/ja.po     | 79 ++++++++++++++++++------------------------------------------
+ 2 files changed, 32 insertions(+), 59 deletions(-)
+
+commit f19a106b6b69f2827905c4e1ce295a7c90099f57
+Author: Alessio Frusciante 
+Date:   2003-06-19 22:22:36 +0000
+
+    Updated Italian translation by Francesco Marletta.
+
+ po/ChangeLog |  5 ++++
+ po/it.po     | 79 +++++++++++++++++++++++++++++-------------------------------
+ 2 files changed, 43 insertions(+), 41 deletions(-)
+
+commit 6cc98c04d7adc96aea8a1e0446574e128a6a4d14
+Author: Ivan Stojmirov 
+Date:   2003-06-19 10:39:29 +0000
+
+    added Macedonian translation
+
+ po/mk.po | 90 ++++++++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 48 insertions(+), 42 deletions(-)
+
+commit 1b7ef9343be230382da4363ab079a36a0b81a808
+Author: Pauli Virtanen 
+Date:   2003-06-17 18:35:52 +0000
+
+    Updated Finnish translation.
+    
+    2003-06-17  Pauli Virtanen  
+    
+            * fi.po: Updated Finnish translation.
+
+ po/ChangeLog |  4 +++
+ po/fi.po     | 89 +++++++++++++++++++-----------------------------------------
+ 2 files changed, 32 insertions(+), 61 deletions(-)
+
+commit 7e35a7b643e25eefd9f7501f89667f9e709d5e62
+Author: Nalin Dahyabhai 
+Date:   2003-06-16 23:20:22 +0000
+
+    add vertical-tab and form-feed to the list of control sequences. add. add.
+    
+    * src/caps.c: add vertical-tab and form-feed to the list of control sequences.
+    * src/vte.c(vte_controL_sequence_handler_form_feed): add.
+    * src/vte.c(vte_controL_sequence_handler_vertical_tab): add.
+
+ ChangeLog         |   6 ++++++
+ doc/vttest.tar.gz | Bin 98911 -> 100593 bytes
+ src/caps.c        |  22 ++++++++++++----------
+ src/vte.c         |  26 ++++++++++++++++++++++++++
+ 4 files changed, 44 insertions(+), 10 deletions(-)
+
+commit c118a0aaa3f7688095498b1ea4e86bf5955e9863
+Author: Nalin Dahyabhai 
+Date:   2003-06-16 22:01:26 +0000
+
+    - actually include changelog items in the .spec file
+
+ vte.spec | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+commit 954bb555c57b45ec8d72aed7a6a3d991b5f69045 (tag: vte_0_11_10)
+Author: Nalin Dahyabhai 
+Date:   2003-06-16 21:55:07 +0000
+
+    - aargh
+
+ NEWS | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 887090100bb4e50db662ab45ae5ff400846ddf6a
+Author: Nalin Dahyabhai 
+Date:   2003-06-16 21:44:56 +0000
+
+    - 0.11.10
+
+ vte.spec | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+commit 192fd5f2d6009e88aec4140405e1bb98b1ba93e8
+Author: Nalin Dahyabhai 
+Date:   2003-06-16 21:44:32 +0000
+
+    - generate the makefile in doc/openi18n
+
+ configure.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit a42f429d540f625ab0495e222ece404c0e98b234
+Author: Nalin Dahyabhai 
+Date:   2003-06-16 21:41:23 +0000
+
+    - fixup builds for openi18n subdirectory
+
+ doc/Makefile.am          | 2 +-
+ doc/openi18n/Makefile    | 2 --
+ doc/openi18n/Makefile.am | 5 +++++
+ 3 files changed, 6 insertions(+), 3 deletions(-)
+
+commit 790ab531e6d912a7460a44a8ac8cf78a3311b2ee
+Author: Nalin Dahyabhai 
+Date:   2003-06-16 21:23:02 +0000
+
+    fix a compiler warning.
+    
+    * src/vteaccess.c(xy_from_offset): fix a compiler warning.
+
+ ChangeLog       | 3 +++
+ src/vteaccess.c | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit 20073178e993a6d37d736d6e0f55cad0f6e31989
+Author: Nalin Dahyabhai 
+Date:   2003-06-16 21:16:33 +0000
+
+    - add new header
+
+ src/vteint.h | 32 ++++++++++++++++++++++++++++++++
+ 1 file changed, 32 insertions(+)
+
+commit 8adb2183f4faaa5a1c1b319b67433facb9a877cb
+Author: Nalin Dahyabhai 
+Date:   2003-06-16 21:15:10 +0000
+
+    add. Move private VteTerminal stuff which needs to be shared with other
+    
+    * src/vteint.h: add.  Move private VteTerminal stuff which needs to be shared
+            with other modules in the library here.
+    * src/vtedraw.c, src/vtedraw.h: add get_char_width(), for use in drawing the
+            cursor.
+    * src/vte.c(vte_invalidate_cursor_once): if the character under the cursor
+            doesn't fit into its cell, expose the column to the right of it so
+            that we can paint into the adjacent cell.
+    * src/vte.c(vte_terminal_paint): when clearing the area behind the cursor or
+            drawing the hollow rectangle to indicate its position when we don't
+            have focus, use the visible width of the character instead of just
+            assuming it will fit.  This complies better with assertion 2.
+
+ ChangeLog       | 13 +++++++++++++
+ src/Makefile.am |  3 ++-
+ src/vte.c       | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++----
+ src/vte.h       |  3 ---
+ src/vteaccess.c |  1 +
+ src/vtedraw.c   |  8 ++++++++
+ src/vtedraw.h   |  2 ++
+ src/vteft2.c    | 17 +++++++++++++++++
+ src/vtegl.c     | 17 +++++++++++++++++
+ src/vtepango.c  |  7 +++++++
+ src/vtepangox.c |  7 +++++++
+ src/vteskel.c   |  7 +++++++
+ src/vtexft.c    | 15 +++++++++++++++
+ 13 files changed, 147 insertions(+), 8 deletions(-)
+
+commit e4291049ee75670265a55cc77d131ac279f8072e
+Author: Nalin Dahyabhai 
+Date:   2003-06-16 21:10:03 +0000
+
+    - add sample text from the openi18n web site
+
+ doc/openi18n/Makefile  |  2 ++
+ doc/openi18n/UTF-8.txt | 18 ++++++++++++++++
+ doc/openi18n/cursor.c  | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ doc/openi18n/wrap.txt  |  1 +
+ doc/readme.txt         | 12 +++++++----
+ 5 files changed, 86 insertions(+), 4 deletions(-)
+
+commit b887842b0b284cf111b9bff435e2b50e2d05a3dd
+Author: Gil Osher 
+Date:   2003-06-12 13:25:08 +0000
+
+    Updated Hebrew translation.
+    
+    
+    * he.po: Updated Hebrew translation.
+
+ po/ChangeLog | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+commit 7a3386c9c59b6fe036521cc987f8c464cca2eab7
+Author: Gil Osher 
+Date:   2003-06-12 13:22:22 +0000
+
+    Updated Hebrew translation.
+
+ po/he.po | 61 +++++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 31 insertions(+), 30 deletions(-)
+
+commit 6008da4095332ff855f972912009636276412640
+Author: Laurent Dhima 
+Date:   2003-06-11 08:02:11 +0000
+
+    Updated Albanian translation.
+    
+    * sq.po: Updated Albanian translation.
+
+ po/ChangeLog | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit 8de2362a167c6431ad122749b64f040e98608288
+Author: Laurent Dhima 
+Date:   2003-06-11 07:59:11 +0000
+
+    Updated
+
+ po/sq.po | 68 ++++++++++++++++++++++++++++++++--------------------------------
+ 1 file changed, 34 insertions(+), 34 deletions(-)
+
+commit e8bd05f2d6b2c19c111960107d107156f7090e39
+Author: Nalin Dahyabhai 
+Date:   2003-06-10 15:19:50 +0000
+
+    set the encoding for the iso2022 converter (spotted by havill).
+    
+    * src/vte.c(vte_terminal_set_encoding): set the encoding for the iso2022
+            converter (spotted by havill).
+
+ ChangeLog | 4 ++++
+ src/vte.c | 4 ++++
+ 2 files changed, 8 insertions(+)
+
+commit 8b259a1eab12de54a1dcdeb4a7d34ddff46a8c6e
+Author: Christophe Merlet 
+Date:   2003-06-08 19:36:56 +0000
+
+    Updated French translation.
+
+ po/ChangeLog |  4 ++++
+ po/fr.po     | 45 +++++++++++++++++++++++----------------------
+ 2 files changed, 27 insertions(+), 22 deletions(-)
+
+commit 8725f0fc59da7f30524f25a397a65d5369f97f95
+Author: Samel Jn Gunnarsson 
+Date:   2003-06-07 07:10:14 +0000
+
+    Updated the Icelandic translation
+    
+    2003-06-07  Samel Jn Gunnarsson  
+    
+            * is.po: Updated the Icelandic translation
+
+ po/ChangeLog |  4 +++
+ po/is.po     | 92 ++++++++++++++++++++----------------------------------------
+ 2 files changed, 35 insertions(+), 61 deletions(-)
+
+commit ef759de112cda9c2a69f68ad71bd3c022d695cfd
+Author: Nalin Dahyabhai 
+Date:   2003-06-04 19:04:36 +0000
+
+    - include gdkx.h on X11 systems so that XSync will be declared
+
+ src/vterdb.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit c26595fddd2951dc97d6d53967c109b370bff1e1
+Author: Nalin Dahyabhai 
+Date:   2003-06-04 18:47:34 +0000
+
+    sync the display before trapping errors to ensure that any errors we'll
+    
+    * src/vtebg.c, src/vterdb.c: sync the display before trapping errors to ensure
+            that any errors we'll get will be handled before we remove the error
+            handlers.
+
+ ChangeLog    |  5 +++++
+ src/vtebg.c  | 17 +++++++++++++++--
+ src/vterdb.c |  7 +++++++
+ 3 files changed, 27 insertions(+), 2 deletions(-)
+
+commit 25b4aa16ff2c7002bf24d97467593caada200e38
+Author: Jonathan Blandford 
+Date:   2003-06-03 21:42:03 +0000
+
+    shut up cvs
+
+ src/.cvsignore | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+commit dc80e3e224e6658dd8ea64c7beee3f5749d0016c
+Author: Nalin Dahyabhai 
+Date:   2003-06-03 21:34:27 +0000
+
+    trap X errors while retrieving the contents of the root pixmap. add.
+    
+    * src/vtebg.c(_vte_bg_get_pixmap, _vte_bg_get_pixbuf): trap X errors while
+            retrieving the contents of the root pixmap.
+    * doc/ambiguous.txt: add.
+    * README: update.
+    * vte.spec: rebuild.
+
+ ChangeLog         |  7 +++++++
+ README            | 15 ++++----------
+ doc/ambiguous.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++
+ src/vte.c         |  2 +-
+ src/vtebg.c       | 62 +++++++++++++++++++++++++++++++++++++++++--------------
+ vte.spec          |  5 ++++-
+ 6 files changed, 112 insertions(+), 29 deletions(-)
+
+commit cd6c601bebd395622ae714b6067c39e4163e0c4a
+Author: Jonathan Blandford 
+Date:   2003-06-03 19:54:15 +0000
+
+    add a missing break in the switch statement.
+    
+    Tue Jun  3 15:50:38 2003  Jonathan Blandford  
+    
+            * src/pty.c (n_read): add a missing break in the switch statement.
+
+ ChangeLog | 4 ++++
+ src/pty.c | 2 ++
+ 2 files changed, 6 insertions(+)
+
+commit c55667883000cc13a845619bbac8b7fcd28d72eb
+Author: Mathieu van Woerkom 
+Date:   2003-06-03 12:12:00 +0000
+
+    Added Limbugish translation
+    
+    2003-06-03  Mathieu van Woerkom 
+    
+            * li.po: Added Limbugish translation
+    
+    2003-06-03  Kenneth Rohde Christiansen  
+            * configure.in: Added Limburgish (li) to ALL_LINGUAS.
+
+ ChangeLog    |   3 ++
+ configure.in |   2 +-
+ po/ChangeLog |   3 ++
+ po/li.po     | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 160 insertions(+), 1 deletion(-)
+
+commit b2278a00188a3070ce8398be484929c4d2e7a078 (tag: vte_0_11_9)
+Author: Nalin Dahyabhai 
+Date:   2003-06-03 03:11:03 +0000
+
+    - 0.11.9
+
+ ChangeLog       |  3 +++
+ NEWS            |  6 ++++++
+ src/Makefile.am | 14 +++++++++++---
+ src/iso2022.c   |  4 ++--
+ vte.spec        |  6 +++++-
+ 5 files changed, 27 insertions(+), 6 deletions(-)
+
+commit 86a7aaff2d490d2a5a7b6e339863ac5483ed9388
+Author: Nalin Dahyabhai 
+Date:   2003-06-01 22:29:20 +0000
+
+    compile fix.
+    
+    * src/vtegl.c(_vte_gl_set_text_font): compile fix.
+
+ ChangeLog   | 3 +++
+ src/vtegl.c | 3 ++-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 23e200496979c4a8a1437de6d221929c7f4872a0
+Author: Dafydd Harries 
+Date:   2003-06-01 11:38:28 +0000
+
+    Finished Welsh translation.
+
+ po/ChangeLog |  5 +++++
+ po/cy.po     | 42 ++++++++++++++++++++++++------------------
+ 2 files changed, 29 insertions(+), 18 deletions(-)
+
+commit cbaffad578df7d55168af0a4673a14a143ae1140
+Author: Christian Neumair 
+Date:   2003-05-31 09:32:09 +0000
+
+    Updated German translation.
+
+ po/ChangeLog |  4 +++
+ po/de.po     | 97 ++++++++++++++++++------------------------------------------
+ 2 files changed, 33 insertions(+), 68 deletions(-)
+
+commit 3dc885c4224d5cd21559a29c218256de50e55429
+Author: Nalin Dahyabhai 
+Date:   2003-05-30 19:38:04 +0000
+
+    fix logic for skipping over particular settings so that setting 1048
+    
+    * src/vte.c(vte_sequence_handler_decset_internal): fix logic for skipping over
+            particular settings so that setting 1048 actually works.
+    * src/vte.c(vte_terminal_process_incoming): in debug mode, print out characters
+            with codepoints higher than 255 in hex rather than decimal.
+    * src/iso2022.c(_vte_iso2022_ambiguous_width): rename to
+            _vte_iso2022_ambiguous_width_guess because that's all we can do without
+            more context.
+    * src/iso2022.c(_vte_iso2022_ambiguous_width): add for using the current
+            encoding to determine what the width of an ambiguously-wide character
+            should be.  This seems to work better.
+
+ ChangeLog     | 12 ++++++++++++
+ src/iso2022.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------
+ src/vte.c     |  6 ++++--
+ 3 files changed, 72 insertions(+), 9 deletions(-)
+
+commit 7fe2fc15f18e971a45587955cd43edb9cf3c1f9a
+Author: Padraig O'Briain 
+Date:   2003-05-30 08:55:28 +0000
+
+    Add implementation for get_character_extents, get_offset_at_point and
+    
+    2003-05-30  Padraig O'Briain  
+            * src/vteaccess.c: Add implementation for get_character_extents,
+            get_offset_at_point and get_run_attributes. This fixes bug #110770.
+            Add casts to fix complier warnings on Solaris.
+    
+            * src/vtexft.c (_vte_xft_text_extents): Do not call return as function
+            returns void. Fixes compiler error on Solaris.
+
+ ChangeLog       |   8 +++
+ src/vteaccess.c | 186 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ src/vtexft.c    |   4 +-
+ 3 files changed, 181 insertions(+), 17 deletions(-)
+
+commit 1e67e734218e3159fcb02c53acec86d0157a5101
+Author: Nalin Dahyabhai 
+Date:   2003-05-30 00:35:36 +0000
+
+    require -i for icon-title-changed messages, which got really annoying
+    
+    * src/vteapp.c: require -i for icon-title-changed messages, which got really
+            annoying really fast.
+    * src/trie.c(main): use g_quark_from_static_string for static strings.
+
+ ChangeLog    |  5 +++++
+ src/trie.c   | 22 +++++++++++-----------
+ src/vteapp.c | 13 ++++++++++---
+ 3 files changed, 26 insertions(+), 14 deletions(-)
+
+commit 815eb0a3c0a2e62a008b338272ecc1b65c39b44c
+Author: Nalin Dahyabhai 
+Date:   2003-05-29 22:04:25 +0000
+
+    fix newline stuffing (used in linefeed mode). rename to
+    
+    * src/vte.c(vte_terminal_send): fix newline stuffing (used in linefeed mode).
+    * src/vte.c(vte_unicode_strlen): rename to vte_unichar_strlen.
+    * src/vte.c(vte_terminal_set_title_internal): don't leak the new title in the
+            unlikely cases.
+    * src/vte.c(vte_terminal_process_incoming): be more careful with control
+            characters to avoid cases where we could be tricked into a loop.
+    * src/vteapp.c: emit a message when the icon title is changed.
+
+ ChangeLog    |  10 ++++
+ src/vte.c    | 146 +++++++++++++++++++++++++++++++++++------------------------
+ src/vteapp.c |  22 ++++++++-
+ 3 files changed, 118 insertions(+), 60 deletions(-)
+
+commit 8de1e351b857e2ad8131bce4780cf24a75c694bc
+Author: Nalin Dahyabhai 
+Date:   2003-05-29 04:50:48 +0000
+
+    handle control characters in the middle of control sequences. fix origin
+    
+    * src/vte.c(vte_terminal_process_incoming): handle control characters in the
+            middle of control sequences.
+    * src/vte.c(vte_sequence_handler_cm): fix origin mode.
+    * src/vte.c(vte_sequence_handler_cv): fix origin mode.
+    * src/vte.c(vte_sequence_handler_cs): snap the cursor to the scrolling region
+            which is set.
+    * src/table.c(_vte_table_extract_number): extract a number digit by digit as
+            we do in the trie parser.
+    * src/vte.h: declare 'struct vte_char_attributes' again to restore API back
+            compat with 0.10.x.
+    * src/iso2022.c(_vte_iso2022_sequence_length): don't recognize PM messages --
+            Xterm doesn't do anything with them and we don't want to appear to hang
+            when we're really just waiting for the end of the message.
+
+ ChangeLog     | 16 ++++++++++++++++
+ src/iso2022.c |  8 ++++++--
+ src/table.c   | 10 ++++++++--
+ src/vte.c     | 54 ++++++++++++++++++++++++++++++++++++++++++++----------
+ src/vte.h     |  7 +++++++
+ 5 files changed, 81 insertions(+), 14 deletions(-)
+
+commit fe6545d62d857fed89f471d938213c9a88d64546
+Author: Nalin Dahyabhai 
+Date:   2003-05-28 23:45:09 +0000
+
+    only apply DPI if we were able to get a value. use the display and screen
+    
+    * src/vtefc.c(_vte_fc_defaults_from_rdb): only apply DPI if we were able to get
+            a value.
+    * src/vterdb.c, src/vterdb.h: use the display and screen of a passed-in widget
+            if asked to do so, else use screen 0 of the default display.
+
+ ChangeLog    |   6 ++++
+ src/vtefc.c  |  18 +++++-----
+ src/vterdb.c | 113 +++++++++++++++++++++++++++++++++++++++--------------------
+ src/vterdb.h |  12 +++----
+ 4 files changed, 97 insertions(+), 52 deletions(-)
+
+commit d583937817cd42dccca7572fe5f1cf16ce1f7978
+Author: Nalin Dahyabhai 
+Date:   2003-05-28 21:53:59 +0000
+
+    check for GTK+ 2.2, and if found, force use of multihead-safe APIs to try
+    
+    * configure.in: check for GTK+ 2.2, and if found, force use of multihead-safe
+            APIs to try to flush out some bugs.
+    * src/vte.c, src/vteapp.c, src/vtedraw.c, src/vtefc.c, src/vteglyph.c: clean
+            up some sloppy multihead changes.
+    * src/vte.c, src/vte.h (vte_terminal_match_set_cursor_type): add.
+    * src/vtedraw.c, src/vtedraw.h: add a draw_char() method which is allowed to
+            fail.
+    * src/vte.c(vte_terminal_draw_graphic): separate the width of a column and the
+            number of columns to be drawn.  Use _vte_draw_char() to avoid
+            crude approximations of characters when we have a font for them.
+
+ ChangeLog       |  12 +++
+ configure.in    |  10 ++-
+ src/vte.c       | 230 ++++++++++++++++++++++++++++++++++++++++++++++++++------
+ src/vte.h       |   2 +
+ src/vteapp.c    |  16 ++--
+ src/vtedraw.c   |  24 +++++-
+ src/vtedraw.h   |   6 ++
+ src/vtefc.c     |  37 ++++++---
+ src/vtefc.h     |   3 +-
+ src/vteft2.c    |  22 +++++-
+ src/vtegl.c     |  19 +++++
+ src/vteglyph.c  |   5 +-
+ src/vteglyph.h  |   4 +-
+ src/vtepango.c  |  12 ++-
+ src/vtepangox.c |  10 +++
+ src/vteskel.c   |  11 +++
+ src/vtexft.c    |  66 +++++++++++++---
+ 17 files changed, 427 insertions(+), 62 deletions(-)
+
+commit 7db421ff8483c411566b81fadccacf420c17115b
+Author: Duarte Loreto 
+Date:   2003-05-26 20:54:00 +0000
+
+    Updated Portuguese translation.
+    
+    2003-05-26  Duarte Loreto 
+    
+            * pt.po: Updated Portuguese translation.
+
+ po/ChangeLog |  4 ++++
+ po/pt.po     | 38 +++++++++++++++++++-------------------
+ 2 files changed, 23 insertions(+), 19 deletions(-)
+
+commit f4bfc34e8411acd285ac70243183ec35dd9f47d3 (tag: vte_0_11_8)
+Author: Nalin Dahyabhai 
+Date:   2003-05-22 19:24:51 +0000
+
+    - 0.11.8
+
+ NEWS     | 1 +
+ vte.spec | 6 +++++-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit c5bc6f08c3c37303c5d071104c30241e9322fa94
+Author: Nalin Dahyabhai 
+Date:   2003-05-22 19:14:49 +0000
+
+    force an entire window repaint if we're supposed to scroll the background
+    
+    * src/vte.c(vte_terminal_scroll_region): force an entire window repaint if
+            we're supposed to scroll the background but we're not scrolling the
+            entire window.  This means we need to repaint the scrolled region, and
+            to keep things looking right, we need to repaint everything.
+    * src/vteapp.c(main): enable visible bell if we're disabling the audible bell,
+            and vice-versa.
+    * src/vte.c: flesh out some doc comments.
+    * doc/reference/tmpl/vte.sgml: flesh out some notes on signals.
+
+ ChangeLog                   | 10 ++++++++++
+ doc/reference/tmpl/vte.sgml |  4 +++-
+ src/vte.c                   | 39 ++++++++++++++++++++++-----------------
+ src/vteapp.c                |  1 +
+ 4 files changed, 36 insertions(+), 18 deletions(-)
+
+commit ffcc4a77caa05fb6affd77871701f1692ef6a96b
+Author: Nalin Dahyabhai 
+Date:   2003-05-21 23:32:32 +0000
+
+    pass zero bytes which trigger EILSEQ through and keep going. replace use
+    
+    * src/vteconv.c(_vte_conv): pass zero bytes which trigger EILSEQ through and
+            keep going.
+    * src/vteconv.c: replace use of g_utf8_strlen with an internal function which
+            doesn't stop counting at NUL characters.
+
+ ChangeLog     |   6 +++
+ src/vteconv.c | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 132 insertions(+), 10 deletions(-)
+
+commit 4ad1f62b6a3c899403a13df8ddbd534102813211
+Author: Nalin Dahyabhai 
+Date:   2003-05-21 22:03:15 +0000
+
+    - disable glX by default
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9a386e75d805a18ef6817deb933c4df46880d674
+Author: Nalin Dahyabhai 
+Date:   2003-05-21 21:47:02 +0000
+
+    use _vte_matcher_free_params_array. add a parameter for indicating if this
+    
+    * src/interpret.c: use _vte_matcher_free_params_array.
+    * src/vte.c(vte_invalidate_cursor_once): add a parameter for indicating if this
+            is a "cursor blink" (periodic) refresh, and if it is set and the cursor
+            isn't supposed to blink, suppress the invalidate.
+
+ ChangeLog       |  6 ++++++
+ src/interpret.c |  2 +-
+ src/vte.c       | 20 +++++++++++++-------
+ 3 files changed, 20 insertions(+), 8 deletions(-)
+
+commit dc2184423cc237fb277587553b0eb07a716089f7
+Author: Nalin Dahyabhai 
+Date:   2003-05-21 21:42:17 +0000
+
+    free the temporary array. add. use _vte_matcher_free_params_array instead
+    
+    * src/iso2022.c(_vte_iso2022_process): free the temporary array.
+    * src/matcher.c(_vte_matcher_free_params_array): add.
+    * src/vte.c: use _vte_matcher_free_params_array instead of the local copy,
+            which is removed.
+    * src/interpret.c, src/table.c, src/trie.c: use _vte_matcher_free_params_array
+            to free parameter arrays instead of g_value_array_free, which doesn't
+            take care of the pointer values.
+    * src/vte.c(vte_sequence_handler_set_title_internal): only attempt to close
+            the conversion descriptor if it was opened successfully.
+    * src/vteapp.c: add the -k option to spin after gtk_main() returns.
+    * src/vtefc.c: make copies of patterns with FcPatternDuplicate so that we know
+            where all of the returned patterns came from.
+    * src/vtexft.c(_vte_xft_font_for_char): set the item in the pattern array to
+            NULL if we successfully opened a font using the pattern.
+
+ ChangeLog     | 16 ++++++++++++++++
+ src/iso2022.c |  1 +
+ src/matcher.c | 25 +++++++++++++++++++++++++
+ src/matcher.h |  3 +++
+ src/table.c   |  2 +-
+ src/trie.c    | 44 ++++++++++++++++++++++----------------------
+ src/vte.c     | 28 ++--------------------------
+ src/vteapp.c  | 14 ++++++++++++--
+ src/vtefc.c   | 10 +++++++---
+ src/vtexft.c  | 14 ++++++++------
+ 10 files changed, 97 insertions(+), 60 deletions(-)
+
+commit 2b20f0ebd1d1b6007cad7b3a13de1b5f78526cd2
+Author: Nalin Dahyabhai 
+Date:   2003-05-20 21:48:25 +0000
+
+    clarify comments near one of the warning messages. unref the Pango
+    
+    * src/iso2022.c: clarify comments near one of the warning messages.
+    * src/vtefc.c(_vte_fc_transcribe_from_pango_font_description): unref the Pango
+            context, which was created for us.
+    * src/vtepango.c: keep track of the Pango context, and unref it when it is no
+            longer needed.
+
+ ChangeLog      |  7 +++++++
+ src/iso2022.c  |  2 +-
+ src/vtefc.c    |  2 ++
+ src/vtepango.c | 23 +++++++++++++++++++----
+ 4 files changed, 29 insertions(+), 5 deletions(-)
+
+commit d83bc30b30d77bc4713ecc75ae99fd2d437ebb70
+Author: Nalin Dahyabhai 
+Date:   2003-05-20 16:30:27 +0000
+
+    try juggling the CFLAGS and LIBS order to let the xft CFLAGS/LIBS take
+    
+    * src/Makefile.am: try juggling the CFLAGS and LIBS order to let the xft
+            CFLAGS/LIBS take precedence over everything else (#113335).
+
+ ChangeLog       | 4 ++++
+ src/Makefile.am | 4 ++--
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit aeb12826b791f1e30a6da959f84287a873e15b84
+Author: Nalin Dahyabhai 
+Date:   2003-05-20 16:14:50 +0000
+
+    compile fix for Solaris, patch from #113344.
+    
+    * src/ssfe.c: compile fix for Solaris, patch from #113344.
+
+ ChangeLog  |  3 +++
+ src/ssfe.c | 31 ++++++++++++++++---------------
+ 2 files changed, 19 insertions(+), 15 deletions(-)
+
+commit 8174c284e5c4aa1833ffc716b50606af50c1c492
+Author: Miloslav Trmac 
+Date:   2003-05-20 13:32:12 +0000
+
+    Update Czech translation
+
+ po/ChangeLog |  4 ++++
+ po/cs.po     | 34 +++++++++++++++++-----------------
+ 2 files changed, 21 insertions(+), 17 deletions(-)
+
+commit acaea8d931cb8dfefcc5e7a1b7c8e32142132d7a
+Author: Christian Rose 
+Date:   2003-05-20 09:58:33 +0000
+
+    Updated Swedish translation.
+    
+    2003-05-20  Christian Rose  
+    
+            * sv.po: Updated Swedish translation.
+
+ po/ChangeLog |  4 ++++
+ po/sv.po     | 37 ++++++++++++++++++++-----------------
+ 2 files changed, 24 insertions(+), 17 deletions(-)
+
+commit 424d7da826793a72b3f765139d6876a1dcf4bdf0
+Author: Jordi Mallach 
+Date:   2003-05-20 08:51:56 +0000
+
+    Updated Catalan translation.
+
+ po/ChangeLog |  4 ++++
+ po/ca.po     | 34 +++++++++++++++++-----------------
+ 2 files changed, 21 insertions(+), 17 deletions(-)
+
+commit 246c1cedb2261a4281359ae3b82be6e1325e28ac (tag: vte_0_11_7)
+Author: Nalin Dahyabhai 
+Date:   2003-05-20 06:27:42 +0000
+
+    = 0.11.7
+
+ NEWS     | 9 +++++++--
+ vte.spec | 8 +++++++-
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+commit bff045858c67b91873513c3a708fc7e952e40379
+Author: Nalin Dahyabhai 
+Date:   2003-05-20 06:14:27 +0000
+
+    remove no-longer-used tree structure. free strings returned by
+    
+    * src/vte.c: remove no-longer-used tree structure.
+    * src/vtefc.c: free strings returned by g_object_get().
+
+ ChangeLog   | 4 ++++
+ src/vte.c   | 6 +-----
+ src/vtefc.c | 2 ++
+ 3 files changed, 7 insertions(+), 5 deletions(-)
+
+commit 73a26e0a481405069de1bf9fa640ee950f90514a
+Author: Nalin Dahyabhai 
+Date:   2003-05-20 05:23:54 +0000
+
+    create the terminal's draw structure. free the terminal's draw structure.
+    
+    * src/vte.c(vte_terminal_realize): create the terminal's draw structure.
+    * src/vte.c(vte_terminal_unrealize): free the terminal's draw structure.
+    * src/vteapp.c(main): enforce a clean shutdown by requiring that the terminal
+            and top-level window are both finalized before gtk_main() returns.
+
+ ChangeLog    |  7 +++++++
+ src/vte.c    | 22 ++++++++++++++++++----
+ src/vteapp.c |  5 +++++
+ 3 files changed, 30 insertions(+), 4 deletions(-)
+
+commit cb5bbefeca2bda9ad6b171ced9c67f428def381a
+Author: Nalin Dahyabhai 
+Date:   2003-05-20 04:27:56 +0000
+
+    properly send a SIGHUP to the child process if it hasn't already exited
+    
+    * src/vte.c(vte_terminal_finalize): properly send a SIGHUP to the child process
+            if it hasn't already exited (#112505).
+    * src/vteapp.c: don't exit on EOF, only on child-exited.
+    * src/vte.c(vte_sequence_handler_sf): increment the scrolling offset to avoid
+            flickering when the application has defined a scrolling region with top
+            row == 1.
+
+ ChangeLog    |  8 ++++++++
+ configure.in |  2 +-
+ src/vte.c    | 14 +++++++++++---
+ src/vteapp.c |  9 ++++++++-
+ 4 files changed, 28 insertions(+), 5 deletions(-)
+
+commit f123debe5a3f90be8ea6f252065f0bf37f914b04
+Author: Dmitry Mastrukov 
+Date:   2003-05-20 04:06:05 +0000
+
+    be.po: Updated Belarusian translation from Belarusian team .
+
+ po/ChangeLog |  5 +++++
+ po/be.po     | 54 +++++++++++++++++++++++++-----------------------------
+ 2 files changed, 30 insertions(+), 29 deletions(-)
+
+commit 03b492bb77735482d33094bd0e038ec8e3173506
+Author: Nalin Dahyabhai 
+Date:   2003-05-19 22:48:58 +0000
+
+    remove comma from end of enum declaration (#111925). don't use
+    
+    * src/iso2022.c, src/keymap.c, src/mev.c, src/vtebg.h, src/vteglyph.h: remove
+            comma from end of enum declaration (#111925).
+    * src/vtetc.c: don't use parameter-as-array-size compiler extension (#111925).
+    * src/ssfe.c: don't assume that the compiler interprets \e correctly, use %c
+            with value of 27 instead (#111925).
+    * doc/reference/Makefile.am: obey CPPFLAGS and LDFLAGS (#111925).
+    * gnome-pty-helper/gnome-utmp.c: only include  if HAVE_UTMP_H was
+            defined (#111925).
+    * src/keymap.c, src/ssfe.c: unconditionally include  if we defined
+            HAVE_CURSES or HAVE_NCURSES, as having the header is a precondition
+            for defining either (#111925).
+    * src/iso2022.c: make each array have at least one element (#111925).
+    * src/pty.c, src/gnome-login-support.c: try to open /dev/ptc if opening
+            /dev/ptmx fails due to ENOENT (#111925).
+
+ ChangeLog                              | 17 +++++++++++++++++
+ doc/reference/Makefile.am              |  4 ++--
+ gnome-pty-helper/gnome-login-support.c |  5 +++++
+ gnome-pty-helper/gnome-utmp.c          |  6 ++++--
+ src/iso2022.c                          |  3 ++-
+ src/keymap.c                           |  8 ++------
+ src/mev.c                              |  2 +-
+ src/pty.c                              |  3 +++
+ src/ssfe.c                             |  7 ++-----
+ src/vtebg.h                            |  2 +-
+ src/vteglyph.h                         |  2 +-
+ src/vtetc.c                            |  6 +++---
+ 12 files changed, 43 insertions(+), 22 deletions(-)
+
+commit 7253cf3dbbb732d67699c3f69484e859f34fd102
+Author: Nalin Dahyabhai 
+Date:   2003-05-19 20:55:11 +0000
+
+    - formatting fixups
+
+ src/iso2022.c   | 10 ++++----
+ src/mev.c       |  8 +++----
+ src/table.c     | 54 ++++++++++++++++++++---------------------
+ src/trie.c      | 72 +++++++++++++++++++++++++++----------------------------
+ src/vte.c       | 74 ++++++++++++++++++++++++++++-----------------------------
+ src/vte.h       |  2 +-
+ src/vteaccess.c | 14 +++++------
+ src/vtebg.c     |  2 +-
+ src/vtebg.h     |  4 ++--
+ src/vteft2.c    |  2 +-
+ src/vteglyph.c  |  2 +-
+ src/vteglyph.h  |  4 ++--
+ src/vtepango.c  | 12 +++++-----
+ src/vtepangox.c | 10 ++++----
+ src/vtetc.c     | 16 ++++++-------
+ src/vtexft.c    |  4 ++--
+ 16 files changed, 145 insertions(+), 145 deletions(-)
+
+commit 5cda56310f77badf4031fec0eb18c5ef307c49bd
+Author: Nalin Dahyabhai 
+Date:   2003-05-19 20:41:16 +0000
+
+    don't exit on eof, just child-exited. don't disconnect from SIGCHLD on
+    
+    * src/vteapp.c: don't exit on eof, just child-exited.
+    * src/vte.c(vte_terminal_eof): don't disconnect from SIGCHLD on eof, the child
+            might still be running.
+
+ ChangeLog    |  7 ++++++-
+ src/vte.c    | 10 ----------
+ src/vteapp.c |  1 -
+ 3 files changed, 6 insertions(+), 12 deletions(-)
+
+commit b5f349035d78e948c6a06cd2731b066ea7142152
+Author: Nalin Dahyabhai 
+Date:   2003-05-19 20:18:45 +0000
+
+    - rename termcap.c/termcap.h to avoid conflicts with system 
+
+ ChangeLog                  |  5 +++++
+ src/Makefile.am            | 27 +++++++++++++--------------
+ src/interpret.c            |  2 +-
+ src/keymap.c               |  2 +-
+ src/keymap.h               |  2 +-
+ src/vte.c                  |  2 +-
+ src/{termcap.c => vtetc.c} |  2 +-
+ src/{termcap.h => vtetc.h} |  0
+ 8 files changed, 23 insertions(+), 19 deletions(-)
+
+commit 4cf3893d9b59b32a879302c6433894ddb906e40a
+Author: Ole Laursen 
+Date:   2003-05-19 19:54:17 +0000
+
+    Updated Danish translation.
+    
+    2003-05-19  Ole Laursen  
+    
+            * da.po: Updated Danish translation.
+
+ po/ChangeLog | 10 +++++++---
+ po/da.po     | 48 +++++++++++-------------------------------------
+ 2 files changed, 18 insertions(+), 40 deletions(-)
+
+commit a686e0d829ac351c47c4750e9b459e79276969f3
+Author: Nalin Dahyabhai 
+Date:   2003-05-19 19:49:13 +0000
+
+    fix KP_PageDown in application keypad mode (#113187). add a finalize
+    
+    * src/keymap.c: fix KP_PageDown in application keypad mode (#113187).
+    * src/reaper.c: add a finalize method which properly cleans things up so that
+            the singleton can at least theoretically be destroyed (part of a fix
+            for #112172).
+    * src/vte.c: obtain a ref to a reaper object whenever we are waiting for a
+            child to exit.
+    * po/POTFILES.in: add more source files for scanning.
+    * src/iso2022.c: rework pieces to handle incomplete sequences at the end of
+            input.  Check for 8-bit SS2 and SS3 in case of EILSEQ.  Build a fake
+            ISO-8859-1 map for conversions using invalid maps.
+    * src/iso2022.c(_vte_iso2022_state_free): free the state's buffer.
+    * src/vteconv.c: internalize UTF-8 to UTF-8 conversions, fix handling of
+            incomplete sequences at the end of the available data.
+    * src/vte.c: implement send/receive and automatic linefeed modes.
+    * src/vte.c(vte_sequence_handler_sr): invalidate the row which contains the
+            cursor to ensure that it doesn't leave a trail.
+    * src/vte.c(vte_sequence_handler_return_terminal_id): add.
+    * src/vte.c(vte_terminal_feed_child_using_modes): add.
+
+ ChangeLog      |  20 ++
+ po/POTFILES.in |   5 +
+ po/am.po       | 104 ++++-----
+ po/az.po       | 134 ++++++-----
+ po/be.po       | 132 ++++++-----
+ po/bg.po       | 144 +++++++-----
+ po/bn.po       | 135 ++++++-----
+ po/ca.po       |  47 ++--
+ po/cs.po       |  33 +--
+ po/cy.po       |  32 +--
+ po/da.po       | 142 +++++++-----
+ po/de.po       | 142 +++++++-----
+ po/el.po       | 146 ++++++------
+ po/es.po       |  39 ++--
+ po/fa.po       | 107 +++++----
+ po/fi.po       | 145 +++++++-----
+ po/fr.po       |  31 +--
+ po/he.po       | 131 ++++++-----
+ po/hu.po       | 139 +++++++-----
+ po/id.po       | 178 +++++++++------
+ po/is.po       | 138 +++++++-----
+ po/it.po       | 153 +++++++------
+ po/ja.po       |  33 +--
+ po/ko.po       | 130 ++++++-----
+ po/lv.po       | 137 +++++++-----
+ po/mk.po       | 103 ++++-----
+ po/ml.po       | 109 +++++----
+ po/mn.po       | 132 ++++++-----
+ po/ms.po       |  33 +--
+ po/nl.po       | 150 +++++++------
+ po/no.po       | 133 ++++++-----
+ po/pl.po       | 143 +++++++-----
+ po/pt.po       |  31 +--
+ po/pt_BR.po    | 135 ++++++-----
+ po/ro.po       | 133 ++++++-----
+ po/ru.po       | 189 +++++++++-------
+ po/sk.po       | 140 +++++++-----
+ po/sl.po       | 138 +++++++-----
+ po/sq.po       | 137 +++++++-----
+ po/sr.po       |  69 ++++--
+ po/sr@Latn.po  |  69 ++++--
+ po/sv.po       |  33 +--
+ po/tr.po       | 131 ++++++-----
+ po/uk.po       | 138 +++++++-----
+ po/vi.po       | 131 ++++++-----
+ po/zh_CN.po    | 130 ++++++-----
+ po/zh_TW.po    |  31 +--
+ src/iso2022.c  | 697 ++++++++++++++++++++++++++++++++++-----------------------
+ src/keymap.c   |   2 +-
+ src/reaper.c   |  64 +++++-
+ src/vte.c      | 205 ++++++++++++++---
+ src/vteconv.c  | 311 ++++++++++++++++++++-----
+ 52 files changed, 3801 insertions(+), 2493 deletions(-)
+
+commit eeae338b64553fc81099e307f90846198a9e2583
+Author: Telsa Gwynne 
+Date:   2003-05-19 14:36:36 +0000
+
+    Welsh translation from Dafydd Harries
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/cy.po     | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 118 insertions(+), 1 deletion(-)
+
+commit 5eef8c91e9af06533b979c7593c19e838cec04f2
+Author: Christophe Merlet 
+Date:   2003-05-18 19:54:24 +0000
+
+    Updated French translation.
+
+ po/ChangeLog |   4 ++
+ po/fr.po     | 151 ++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 87 insertions(+), 68 deletions(-)
+
+commit 3e5e8975600b5ad410010cb23cb3b171d95a279f
+Author: Duarte Loreto 
+Date:   2003-05-13 21:04:25 +0000
+
+    Updated Portuguese translation.
+    
+    2003-05-13  Duarte Loreto 
+    
+            * pt.po: Updated Portuguese translation.
+
+ po/ChangeLog |   4 ++
+ po/pt.po     | 142 +++++++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 83 insertions(+), 63 deletions(-)
+
+commit 7ff11a97e78e3d26456e0ca7b39dac71686b30b3
+Author: Nalin Dahyabhai 
+Date:   2003-05-13 20:08:50 +0000
+
+    don't recognize 8-bit SS2 and SS3 by default, it breaks UTF-8 and other
+    
+    * src/iso2022.c(_vte_iso2022_find_nextctl): don't recognize 8-bit SS2 and SS3
+            by default, it breaks UTF-8 and other encodings (#112879).
+
+ ChangeLog     | 4 ++++
+ src/iso2022.c | 3 +++
+ 2 files changed, 7 insertions(+)
+
+commit e1e0f0a3cf0f3872fa9d78d14989ca311b9cded5
+Author: Pablo Gonzalo del Campo 
+Date:   2003-05-13 19:52:37 +0000
+
+    Updated Spanish translation.
+    
+    2003-05-13  Pablo Gonzalo del Campo  
+    
+            * es.po: Updated Spanish translation.
+
+ po/ChangeLog |   4 ++
+ po/es.po     | 153 ++++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 88 insertions(+), 69 deletions(-)
+
+commit 7a87d5abf06668b0feb160775020745bffe45854
+Author: Kwok-Koon Cheung 
+Date:   2003-05-13 11:01:20 +0000
+
+    Updated traditional Chinese translation.
+    
+            * zh_TW.po: Updated traditional Chinese translation.
+
+ po/ChangeLog |  4 ++++
+ po/zh_TW.po  | 31 +++++++++++++++++--------------
+ 2 files changed, 21 insertions(+), 14 deletions(-)
+
+commit 82739aee740adf7249915d172ae9d1805a0b61bc
+Author: Nalin Dahyabhai 
+Date:   2003-05-13 04:27:40 +0000
+
+    add _vte_draw_needs_repaint() to indicate if the drawing back-end can only
+    
+    * src/vtedraw.c, src/vtedraw.h: add _vte_draw_needs_repaint() to indicate if
+            the drawing back-end can only handle entire-window paints.
+    * src/vteconv.c: return a value from _vte_conv_close(), even though it isn't
+            used.
+    * src/vte.c(vte_terminal_paint): don't look at drawing starting at negative
+            row or coumn offsets.
+    * src/vtegl.c: prefer glX double-buffering to GDK's, and use double-buffered
+            possibly-direct windows instead of indirect pixmaps.
+
+ ChangeLog       |  10 ++
+ src/vte.c       |  14 ++-
+ src/vteapp.c    |   4 +-
+ src/vteconv.c   |   1 +
+ src/vtedraw.c   |   8 ++
+ src/vtedraw.h   |   2 +
+ src/vteft2.c    |   1 +
+ src/vtegl.c     | 380 +++++++++++++++++++++++++++++---------------------------
+ src/vtepango.c  |   1 +
+ src/vtepangox.c |   1 +
+ src/vteskel.c   |  17 +--
+ src/vtexft.c    |   1 +
+ 12 files changed, 249 insertions(+), 191 deletions(-)
+
+commit cb455f32f8d5dcb45f0127bdd5fd2b427751da96
+Author: Nalin Dahyabhai 
+Date:   2003-05-13 01:22:09 +0000
+
+    account for the foreign root pixmap not having a colormap by default,
+    
+    * src/vtebg.c(_vte_bg_get_pixmap, _vte_bg_get_pixbuf): account for the foreign
+            root pixmap not having a colormap by default, using the root window's
+            colormap if it doesn't already have one set.
+
+ ChangeLog   |  5 +++++
+ src/vtebg.c | 14 ++++++++++----
+ 2 files changed, 15 insertions(+), 4 deletions(-)
+
+commit de0363debd2588e178bdd8543a45a46cdbf53cb7
+Author: Nalin Dahyabhai 
+Date:   2003-05-12 20:57:41 +0000
+
+    if we can't convert from the locale encoding to UTF-8, use UTF-8 as the
+    
+    * src/iso2022.c(_vte_iso2022_state_new): if we can't convert from the locale
+            encoding to UTF-8, use UTF-8 as the locale encoding (#112614).
+    * src/vtegl.c(_vte_gl_start): enable point smoothing.
+
+ ChangeLog       |  5 +++++
+ src/iso2022.c   | 20 +++++++++++++++++---
+ src/iso2022.txt |  2 +-
+ src/vte.c       |  6 +++---
+ src/vtegl.c     |  1 +
+ 5 files changed, 27 insertions(+), 7 deletions(-)
+
+commit 06f5955cf07ee5c56dc8ddafa428ef286717fba4
+Author: Hasbullah Bin Pit 
+Date:   2003-05-11 00:57:40 +0000
+
+    Updated Malay translation.
+    
+    2003-05-10  Hasbullah Bin Pit 
+    
+            * ms.po: Updated Malay translation.
+
+ po/ChangeLog |   4 +++
+ po/ms.po     | 105 +++++++++++++++++++++++++----------------------------------
+ 2 files changed, 49 insertions(+), 60 deletions(-)
+
+commit d80144726e3681e8a6ee81144dae9db2913307b4
+Author: KAMAGASAKO Masatoshi 
+Date:   2003-05-10 06:28:28 +0000
+
+    Updated Japanese translation.
+    
+    2003-05-10  KAMAGASAKO Masatoshi  
+    
+            * ja.po: Updated Japanese translation.
+
+ po/ChangeLog |  4 ++++
+ po/ja.po     | 41 +++++++++++++++++++++++++++++++++--------
+ 2 files changed, 37 insertions(+), 8 deletions(-)
+
+commit bc0c76e750c95a91f0854fb97f7b14b71bccf79d
+Author: Jordi Mallach 
+Date:   2003-05-09 17:41:06 +0000
+
+    Updated Catalan translation.
+
+ po/ChangeLog |   4 ++
+ po/ca.po     | 189 +++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 104 insertions(+), 89 deletions(-)
+
+commit 8e0ecf2cb7f56a69bf55e041e4daa3c04597d2ad
+Author: Miloslav Trmac 
+Date:   2003-05-09 12:15:22 +0000
+
+    Update Czech translation
+
+ po/ChangeLog |  4 ++++
+ po/cs.po     | 39 ++++++++++++++++++++++++++++++++-------
+ 2 files changed, 36 insertions(+), 7 deletions(-)
+
+commit 12244fa27b3bab0cdc90547988f4e3cb248d7943
+Author: Christian Rose 
+Date:   2003-05-09 10:11:18 +0000
+
+    Updated Swedish translation.
+    
+    2003-05-09  Christian Rose  
+    
+            * sv.po: Updated Swedish translation.
+
+ po/ChangeLog |  4 ++++
+ po/sv.po     | 50 ++++++++++++++++++++++++++++++++++++++++++--------
+ 2 files changed, 46 insertions(+), 8 deletions(-)
+
+commit dacc45e67336c971c061280f7d1d309fc42431f6
+Author: Nalin Dahyabhai 
+Date:   2003-05-09 03:16:49 +0000
+
+    let the caller control whether or not we return the default colormap.
+    
+    * src/vtedraw.c, src/vtedraw.h (_vte_draw_get_colormap): let the caller control
+            whether or not we return the default colormap.
+    * src/vtegl.c: enable blending.  Don't specify any buffer depths.  Set the
+            current drawable before we do any drawing.  Call gluOrtho2D with the
+            right args to set up the right projection.
+    * src/vteskel.c: quiet compiler warning by removing a "const".
+    * src/vtedraw.c: juggle the preferred render order again.
+
+ ChangeLog       |  9 +++++++++
+ src/vte.c       | 10 ++++------
+ src/vtedraw.c   | 17 ++++++++++-------
+ src/vtedraw.h   |  3 ++-
+ src/vtegl.c     | 46 +++++++++++++++++++++++++++++++++-------------
+ src/vtepango.c  |  2 +-
+ src/vtepangox.c |  2 +-
+ src/vteskel.c   |  2 +-
+ src/vtexft.c    |  2 +-
+ 9 files changed, 62 insertions(+), 31 deletions(-)
+
+commit c858e8dcfca989306d1153fd9ec4001d9bc27e9b
+Author: Kwok-Koon Cheung 
+Date:   2003-05-08 19:19:06 +0000
+
+    Fix my previous commit
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 999bfc1f3aec810e679b614246287ced55e9a91a
+Author: Abel Cheung 
+Date:   2003-05-08 14:36:58 +0000
+
+    Add 4 files into POTFILES.in(please let me know if they shouldn't be
+    
+    2003-05-08  Abel Cheung  
+    
+            * POTFILES.in: Add 4 files into POTFILES.in(please let me know
+              if they shouldn't be added)
+            * zh_TW.po: Updated traditional Chinese translation.
+
+ po/ChangeLog   |  6 ++++++
+ po/POTFILES.in |  4 ++++
+ po/zh_TW.po    | 41 +++++++++++++++++++++++++++++++++--------
+ 3 files changed, 43 insertions(+), 8 deletions(-)
+
+commit 9805926700dcdf9cc01cc68386874cf2ea237493
+Author: KAMAGASAKO Masatoshi 
+Date:   2003-05-08 14:22:03 +0000
+
+    Updated Japanese translation.
+    
+    2003-05-08  KAMAGASAKO Masatoshi  
+    
+            * ja.po: Updated Japanese translation.
+
+ po/ChangeLog |   4 +++
+ po/ja.po     | 112 +++++++++++++++++++++++++++--------------------------------
+ 2 files changed, 55 insertions(+), 61 deletions(-)
+
+commit f25541750f7cc9bd90d51bf5e13e95a26375f795
+Author: Christian Rose 
+Date:   2003-05-08 14:01:42 +0000
+
+    Updated Swedish translation.
+    
+    2003-05-08  Christian Rose  
+    
+            * sv.po: Updated Swedish translation.
+
+ po/ChangeLog |  4 ++++
+ po/sv.po     | 42 ++++++++++++++++++++++--------------------
+ 2 files changed, 26 insertions(+), 20 deletions(-)
+
+commit 7f28c3ad21d6b0169788c466418f18a9d9245cf4
+Author: Miloslav Trmac 
+Date:   2003-05-08 12:47:23 +0000
+
+    Update Czech translation
+
+ po/ChangeLog |  4 ++++
+ po/cs.po     | 36 ++++++++++++++++--------------------
+ 2 files changed, 20 insertions(+), 20 deletions(-)
+
+commit a4288218a4d537f40f5fe968da1e477bd4fc5e60
+Author: Abel Cheung 
+Date:   2003-05-08 04:38:42 +0000
+
+    Added "mk" to ALL_LINGUAS.
+    
+    2003-05-08  Abel Cheung  
+    
+            * configure.in: Added "mk" to ALL_LINGUAS.
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/zh_TW.po  | 103 ++++++++++++++++++++++++++---------------------------------
+ 3 files changed, 51 insertions(+), 58 deletions(-)
+
+commit b32f9cf9684e3326d566062c319baadca510fbd3
+Author: Nalin Dahyabhai 
+Date:   2003-05-07 21:46:54 +0000
+
+    let OSC command sequences be subject to code conversion again (#112485).
+    
+    * src/iso2022.c: let OSC command sequences be subject to code conversion
+            again (#112485).
+
+ ChangeLog     | 4 ++++
+ src/iso2022.c | 2 ++
+ 2 files changed, 6 insertions(+)
+
+commit 541e45cedb8eb204f80ed184bfa95697c5a8638b
+Author: Nalin Dahyabhai 
+Date:   2003-05-07 21:28:28 +0000
+
+    - add new files
+
+ src/vteconv.c | 252 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vteconv.h |  43 ++++++++++
+ 2 files changed, 295 insertions(+)
+
+commit 5ae32c35957c696d83de0576c95ca96a8c5c106a
+Author: Nalin Dahyabhai 
+Date:   2003-05-07 21:25:29 +0000
+
+    add VteConv as a thin wrapper around GIConv. use VteConv. remove. remove.
+    
+    * src/vteconv.c, src/vteconv.h: add VteConv as a thin wrapper around GIConv.
+    * src/iso2022.c: use VteConv.
+    * src/matcher.c(_vte_matcher_find_valid_encoding): remove.
+    * src/matcher.c(_vte_matcher_wide_encoding): remove.
+    * src/trie.c: use VteConv.
+    * src/utf8echo.c: use VteConv.
+    * src/vte.c: use VteConv (#112446).
+
+ ChangeLog       |  10 ++++++
+ src/Makefile.am |  46 +++++++++++++++++++-----
+ src/iso2022.c   |  33 ++++++++---------
+ src/matcher.c   | 107 --------------------------------------------------------
+ src/matcher.h   |   3 --
+ src/trie.c      |  23 ++++++------
+ src/utf8echo.c  |  11 +++---
+ src/vte.c       |  57 ++++++++++++++----------------
+ 8 files changed, 108 insertions(+), 182 deletions(-)
+
+commit 83e4f0ef14ab6c61836286f0f9a8c856cd11b159
+Author: Nalin Dahyabhai 
+Date:   2003-05-06 20:44:24 +0000
+
+    add "Since: 0.11" to documentation for functions which aren't available in
+    
+    * src/vte.c: add "Since: 0.11" to documentation for functions which aren't
+            available in the 0.10 series.
+    * src/iso2022.c: default G2 to JIS0201, G3 to JIS0212 for Japanese, because
+            they appear to not be used by anyone else.
+    * vte.spec: merge with .spec file from RHL.
+
+ ChangeLog     |  7 +++++++
+ src/iso2022.c |  4 ++--
+ src/vte.c     |  8 +++++---
+ vte.spec      | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ 4 files changed, 75 insertions(+), 8 deletions(-)
+
+commit 243bc92e9c36c96a9c0bef4bcd73672a1fd21925 (tag: vte_0_11_6)
+Author: Nalin Dahyabhai 
+Date:   2003-05-06 14:12:00 +0000
+
+    - 0.11.6
+
+ NEWS     | 6 +++---
+ vte.spec | 6 +++++-
+ 2 files changed, 8 insertions(+), 4 deletions(-)
+
+commit 5f84c90caf42ccb36c1b41c6b7de3482f8c510f9
+Author: Nalin Dahyabhai 
+Date:   2003-05-06 08:14:49 +0000
+
+    get text rendering semi-working.
+    
+    * src/vtegl.c: get text rendering semi-working.
+
+ ChangeLog   |  3 +++
+ src/vtegl.c | 53 ++++++++++++++++++++++++++++++++++-------------------
+ 2 files changed, 37 insertions(+), 19 deletions(-)
+
+commit b296e636244d11ec2019a5fafea5ad0ebb31248a
+Author: Nalin Dahyabhai 
+Date:   2003-05-06 07:38:39 +0000
+
+    when setting up backgrounds, don't deref an existing background before
+    
+    * src/vteft2.c, src/vtegl.c, src/vtepango.c, src/vtepangox.c, src/vtexft.c:
+            when setting up backgrounds, don't deref an existing background before
+            fetching a new one, in case they're the same.
+    * src/vteglyph.c(_vte_glyph_draw): fix computation of the input offset.
+    * src/vtegl.c: implement drawing of backgrounds.
+
+ ChangeLog       |   7 ++
+ NEWS            |   3 +
+ src/vtedraw.c   |  14 +--
+ src/vteft2.c    |   6 +-
+ src/vtegl.c     | 293 ++++++++++++++++++++++++++++++++++++++------------------
+ src/vteglyph.c  |   9 +-
+ src/vtepango.c  |  10 +-
+ src/vtepangox.c |  10 +-
+ src/vtexft.c    |   8 +-
+ 9 files changed, 239 insertions(+), 121 deletions(-)
+
+commit 10bfd9a591695a9b00130a316668a28b5dff286b
+Author: Nalin Dahyabhai 
+Date:   2003-05-06 05:17:56 +0000
+
+    include the whole JIS0201 map instead of just the lower half. set the
+    
+    * src/iso2022.c(_vte_iso2022_map_J): include the whole JIS0201 map instead of
+            just the lower half.
+    * src/iso2022.c(_vte_iso2022_map_get): set the and_mask to clear the high bits
+            of pairs before looking them up in the maps.
+    * src/iso2022.c(_vte_iso2022_fragment_input): recognize the 8-bit versions of
+            SS2 and SS3.
+    * src/iso2022.c(_vte_iso2022_process_control): recognize the 8-bit versions of
+            SS2 and SS3.
+
+ ChangeLog     | 10 ++++++++++
+ src/iso2022.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++----
+ 2 files changed, 61 insertions(+), 4 deletions(-)
+
+commit fc4bae3b967641e1ad32f14d1221b2e88ec15113
+Author: Danilo Šegan 
+Date:   2003-05-06 02:34:22 +0000
+
+    Added "sr" and "sr@Latn" to ALL_LINGUAS.
+    
+    2003-05-05  Danilo Šegan  
+    
+            * configure.in: Added "sr" and "sr@Latn" to ALL_LINGUAS.
+    
+            * po/sr.po, po/sr@Latn.po: Added Serbian translation by
+            http://Prevod.org/.
+
+ ChangeLog     |   4 ++
+ configure.in  |   2 +-
+ po/ChangeLog  |   5 +++
+ po/sr.po      | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ po/sr@Latn.po | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 5 files changed, 253 insertions(+), 1 deletion(-)
+
+commit 4dc83c64fce801f283a4243f7b87cd7c307d2472
+Author: Nalin Dahyabhai 
+Date:   2003-05-05 23:27:13 +0000
+
+    - missed these, too
+
+ src/vteft2.h    | 1 -
+ src/vtepango.h  | 1 -
+ src/vtepangox.h | 1 -
+ src/vteskel.h   | 1 -
+ src/vtexft.c    | 3 ++-
+ src/vtexft.h    | 1 -
+ 6 files changed, 2 insertions(+), 6 deletions(-)
+
+commit 2ed144d6124b34dbabcf7647fd31c4fa5a51550c
+Author: Nalin Dahyabhai 
+Date:   2003-05-05 23:26:01 +0000
+
+    - update for API change in vtefc
+
+ src/vteft2.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 29a746c9a69155ee8a94281e90b18adaf2100c11
+Author: Nalin Dahyabhai 
+Date:   2003-05-05 23:23:46 +0000
+
+    include  for gboolean type definition. include "config.h" and
+    
+    * src/debug.h: include  for gboolean type definition.
+    * src/matcher.c: include "config.h" and "debug.h".
+    * src/matcher.h: use G_BEGIN_DECLS/G_END_DECLS
+    * src/table.h: use G_BEGIN_DECLS/G_END_DECLS
+    * src/termcap.h: include , again for gboolean.
+    * src/vtebg.h,src/vterdb.h,src/vtergb.h: adjust macro used to prevent multiple
+            inclusions to match the rest of the tree.
+    * src/vtefc.c(_vte_fc_patterns_from_pango_font_desc): provide a callback which
+            can be used to override all defaults.
+    * src/vtegl.h,src/vtexft.h: don't include "config.h"
+    * src/vteglyph.c, src/vteglyph.h: add _vte_glyph_get_uncached().
+
+ ChangeLog      | 13 ++++++++++
+ src/debug.h    |  2 ++
+ src/matcher.c  |  2 ++
+ src/matcher.h  |  4 +++
+ src/table.h    |  4 +++
+ src/termcap.h  |  2 ++
+ src/vtebg.h    |  4 +--
+ src/vtefc.c    | 10 +++++++-
+ src/vtefc.h    |  6 ++++-
+ src/vtegl.h    |  1 -
+ src/vteglyph.c | 77 ++++++++++++++++++++++++++++++++++++++++++----------------
+ src/vteglyph.h |  8 +++++-
+ src/vterdb.h   |  4 +--
+ src/vtergb.h   |  4 +--
+ 14 files changed, 110 insertions(+), 31 deletions(-)
+
+commit 6186156a2f3bd52d4d4c9bd5e8a5310200fab58e
+Author: Nalin Dahyabhai 
+Date:   2003-05-05 02:51:51 +0000
+
+    if ERESTART is defined, treat it like EINTR and EAGAIN. if ERESTART is
+    
+    * gnome-pty-helper/gnome-login-support.c(n_read,n_write): if ERESTART
+            is defined, treat it like EINTR and EAGAIN.
+    * src/pty.c(n_read,n_write): if ERESTART is defined, treat it like
+            EINTR and EAGAIN.
+
+ ChangeLog                              | 6 ++++++
+ gnome-pty-helper/gnome-login-support.c | 6 ++++++
+ src/pty.c                              | 6 ++++++
+ 3 files changed, 18 insertions(+)
+
+commit 86131d5d146ce28b9dd281b00ca1195d9272302e
+Author: Nalin Dahyabhai 
+Date:   2003-05-02 18:13:24 +0000
+
+    define _XOPEN_SOURCE_EXTENDED, _XOPEN_SOURCE, and __EXTENSIONS__ to get
+    
+    * configure.in: define _XOPEN_SOURCE_EXTENDED, _XOPEN_SOURCE, and
+            __EXTENSIONS__ to get definitions for msg_control and msg_controllen
+            on Solaris (#112036).
+    * src/vtedraw.c(_vte_draw_set_scroll): don't try to return a value from this
+            void function (#112036).  Patch from Hidetoshi Tajima.
+    * src/xticker.c: don't include getopt.h, which isn't even needed for regular
+            getopt() (#112036).  Patch from Hidetoshi Tajima.
+
+ ChangeLog     | 9 +++++++++
+ configure.in  | 7 +++++--
+ src/vtedraw.c | 2 +-
+ src/xticker.c | 1 -
+ 4 files changed, 15 insertions(+), 4 deletions(-)
+
+commit 0e8b44747bc25d74da45bf5c1086d9021ddacfb5
+Author: Nalin Dahyabhai 
+Date:   2003-05-01 20:50:54 +0000
+
+    remove some debugging g_print() calls. skip over NUL bytes (#112022). map
+    
+    * src/vtebg.c(vte_bg_set_root_pixmap,vte_bg_root_pixmap): remove some debugging
+            g_print() calls.
+    * src/iso2022.c(process_cdata): skip over NUL bytes (#112022).
+    * src/vte.c(vte_terminal_background_update): map the bgcolor values to a pixel
+            value before setting the window background color.
+    * src/nativeecho.c(main): echo NUL bytes if asked to do so.
+
+ ChangeLog        |  8 ++++++++
+ src/iso2022.c    |  3 +++
+ src/nativeecho.c |  4 ++--
+ src/vte.c        | 10 ++++++++++
+ src/vtebg.c      |  2 --
+ 5 files changed, 23 insertions(+), 4 deletions(-)
+
+commit 69b532595d44d55d1816382b0788f7ceb6818e5b
+Author: Nalin Dahyabhai 
+Date:   2003-05-01 20:31:42 +0000
+
+    - actually add those files (thanks snickell)
+
+ src/vtebg.c | 679 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vtebg.h |  75 +++++++
+ 2 files changed, 754 insertions(+)
+
+commit 0e8b0b54ec3e1749fc7ca7511850472d2c349ff1
+Author: Nalin Dahyabhai 
+Date:   2003-05-01 19:56:13 +0000
+
+    add a singleton object for managing copies of background images, either
+    
+    * src/vtebg.c, src/vtebg.h: add a singleton object for managing copies of
+            background images, either the desktop background, an in-memory pixbuf,
+            or an on-disk file, with tinting.  Using a single store for this stuff
+            lets multiple widgets share images and should reduce both CPU and
+            memory consumption in applications which create more than one
+            VteTerminal instance with similar settings.
+    * src/vtedraw.c, src/vtedraw.h: adapt the set_background_pixbuf() interface to
+            the vtebg method and rename to set_background_image().
+    * src/vteft2.c, src/vtegl.c, src/vtepango.c, src/vtepangox.c, src/vteskel.c,
+            src/vtexft.c: update to work with newer vtebg/vtedraw interfaces.
+    * src/vte.c(vte_terminal_filter_property_changes): remove in favor of vtebg
+            method.  Manage background state for vtebg.
+
+ ChangeLog       |  15 ++
+ src/Makefile.am |   2 +
+ src/iso2022.c   |  10 +-
+ src/vte.c       | 430 +++++++++++++-------------------------------------------
+ src/vteapp.c    |  10 +-
+ src/vtedraw.c   |  24 +++-
+ src/vtedraw.h   |  15 +-
+ src/vteft2.c    |  16 ++-
+ src/vtegl.c     |  30 ++--
+ src/vtepango.c  |  35 ++---
+ src/vtepangox.c |  35 ++---
+ src/vteskel.c   |  10 +-
+ src/vtexft.c    |  35 ++---
+ 13 files changed, 236 insertions(+), 431 deletions(-)
+
+commit 28a568698ade607798c95d2ec1790ebbe14d4757
+Author: Miloslav Trmac 
+Date:   2003-05-01 13:49:09 +0000
+
+    Update Czech translation
+
+ po/ChangeLog |  4 ++++
+ po/cs.po     | 68 ++++++++++++++++--------------------------------------------
+ 2 files changed, 22 insertions(+), 50 deletions(-)
+
+commit 252a3631c63a5724d71b0bd21ff7b7961e66b6b0
+Author: Christian Rose 
+Date:   2003-05-01 10:36:15 +0000
+
+    Updated Swedish translation.
+    
+    2003-05-01  Christian Rose  
+    
+            * sv.po: Updated Swedish translation.
+
+ po/ChangeLog |   4 +++
+ po/sv.po     | 105 ++++++++++++++++++++++++++++-------------------------------
+ 2 files changed, 53 insertions(+), 56 deletions(-)
+
+commit 974211c1a58896b827c75d23570cef4aa0e8ec56
+Author: Kang Jeong-Hee 
+Date:   2003-05-01 07:08:12 +0000
+
+    typo s/index.sgml/index.html/
+
+ ChangeLog                 | 4 ++++
+ doc/reference/Makefile.am | 6 +++---
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+commit c9962b2560c49547667904dadaa0759444b23ae6 (tag: vte_0_11_5)
+Author: Nalin Dahyabhai 
+Date:   2003-04-30 19:49:59 +0000
+
+    add missing binary
+
+ vte.spec | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 1f2fd18e58649059e4d738ce723a50cf756d6a87
+Author: Nalin Dahyabhai 
+Date:   2003-04-30 19:30:02 +0000
+
+    - 0.11.5
+
+ NEWS     | 2 ++
+ vte.spec | 6 +++++-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit c80144000e5720ad8c8b923b2ce1b3ffa6f9651d
+Author: Nalin Dahyabhai 
+Date:   2003-04-30 18:35:39 +0000
+
+    remove the unused DEFAULT_ISO_8859_1 case. don't call
+    
+    * src/vte.c(vte_sequence_handler_local_charset): remove the unused
+            DEFAULT_ISO_8859_1 case.
+    * src/vte.c(vte_terminal_class_init): don't call _vte_matcher_narrow_encoding(),
+            because we don't need it any more.  Change the error message emitted
+            when _vte_matcher_wide_encoding() fails (#111925), and mark it for
+            translation.
+    * src/trie.c(main): don't call _vte_matcher_narrow_encoding() just to print
+            its result.
+    * src/vte.c(vte_terminal_set_encoding): include the right codeset name in the
+            error message.
+    * src/vteglyph.c(_vte_glyph_get): mark error message for translation.
+    * src/matcher.c, src/matcher.h: remove _vte_matcher_narrow_encoding().  Make
+            tables of strings "const".
+
+ ChangeLog      | 15 +++++++++++++++
+ src/matcher.c  | 36 ++++++++++++------------------------
+ src/matcher.h  |  3 ---
+ src/trie.c     |  1 -
+ src/vte.c      | 11 ++---------
+ src/vteglyph.c | 10 +++++++++-
+ 6 files changed, 38 insertions(+), 38 deletions(-)
+
+commit 154b6ffdb09889a41f1caba82d7293d6ccdab1da
+Author: Nalin Dahyabhai 
+Date:   2003-04-29 17:56:19 +0000
+
+    set the IM context's client window to NULL before unreferencing it to
+    
+    * src/vte.c(vte_terminal_unrealize): set the IM context's client window to NULL
+            before unreferencing it to avoid crashes when preedit is active.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 7 ++-----
+ 2 files changed, 6 insertions(+), 5 deletions(-)
+
+commit c6967c55ed737c2ed1c519d848174f68ca170e2a
+Author: Nalin Dahyabhai 
+Date:   2003-04-29 16:52:04 +0000
+
+    add keymaps for GDK_slash and GDK_question (#108299).
+    
+    * src/keymap.c: add keymaps for GDK_slash and GDK_question (#108299).
+
+ ChangeLog    |  3 +++
+ src/keymap.c | 18 ++++++++++++++++++
+ 2 files changed, 21 insertions(+)
+
+commit 16a72b71bb75ac64fca98ca3daf7eeaa2c4a7e48
+Author: Nalin Dahyabhai 
+Date:   2003-04-29 15:43:42 +0000
+
+    use INT_MAX instead of LONG_MAX when passing in the maximum length,
+    
+    * src/vterdb.c(_vte_rdb_get): use INT_MAX instead of LONG_MAX when passing in
+            the maximum length, because it's returned in an int.
+
+ ChangeLog    | 4 ++++
+ src/vterdb.c | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 6534a2f48639ccf6c22b78aa852be48c2f79278a
+Author: Nalin Dahyabhai 
+Date:   2003-04-29 15:36:55 +0000
+
+    fix the UTF-8 sample text which corresponds to the ISO-2022-KR sample text
+    
+    * src/iso2022.txt: fix the UTF-8 sample text which corresponds to the
+            ISO-2022-KR sample text so that it actually matches the text.
+
+ ChangeLog       | 4 ++++
+ src/iso2022.txt | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 16e0c53e29143b5116695a6950804dca6275d112
+Author: Nalin Dahyabhai 
+Date:   2003-04-29 14:53:38 +0000
+
+    add map for CP437. add. add CP437. add unitable.CP437 to the file list.
+    
+    * src/iso2022.c(_vte_iso2022_map_U): add map for CP437.
+    * src/unitable.CP437: add.
+    * src/mkunitables.sh: add CP437.
+    * src/Makefile.am: add unitable.CP437 to the file list.
+
+ ChangeLog          |  10 +++++
+ src/Makefile.am    |   1 +
+ src/cp437.py       |   9 ++++
+ src/iso2022.c      |  47 ++++++++++++++-----
+ src/mkunitables.sh |  14 +++---
+ src/unitable.CP437 | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ vte.spec           |   2 +-
+ 7 files changed, 194 insertions(+), 18 deletions(-)
+
+commit 391a3afbbbb5d40c624708e6697626199af8f358
+Author: Nalin Dahyabhai 
+Date:   2003-04-29 03:12:32 +0000
+
+    rework to simplify the logic of how many cells to invalidate when we have
+    
+    * src/vte.c(vte_invalidate_cursor_once): rework to simplify the logic of how
+            many cells to invalidate when we have a preedit string.
+    * src/vte.c(vte_terminal_paint): draw the preedit string correctly for cases
+            more complicated than the default IM (seems to fix #111767).
+    * src/vterdb.c(_vte_rdb_get): use g_strncpy() and the property length to avoid
+            going past the end of the possibly-not-nul-terminated string.
+    * src/Makefile.am: build a standalone vterdb binary.
+
+ ChangeLog       |  9 +++++++++
+ src/Makefile.am |  6 +++++-
+ src/vte.c       | 54 +++++++++++++++++++++++++++++++++++++-----------------
+ src/vterdb.c    |  9 ++++++---
+ 4 files changed, 57 insertions(+), 21 deletions(-)
+
+commit 627ac390f1a7f28751aa641bf2e96ba7781aef24
+Author: Nalin Dahyabhai 
+Date:   2003-04-29 01:42:27 +0000
+
+    add another flag to skip over sanity-checking the buffer when adding
+    
+    * src/vte.c(vte_terminal_insert_char): add another flag to skip over
+            sanity-checking the buffer when adding characters.
+    * src/vte.c(vte_terminal_process_incoming): sanity-check the buffer only when
+            necessary to save time.
+    * src/vte.c(vte_terminal_scroll_region): invalidate the region which is exposed
+            when we scroll so that the entire cell gets redrawn, avoiding clipping
+            problems (#111683).
+    * src/vte.c(vte_terminal_paint): fix math for determining where to stop drawing.
+    * src/vte.c(vte_terminal_fill_rectangle): rename to ..._int to reduce confusion
+            over which internal drawing commands are offset and which are not.
+    * src/vte.c(vte_terminal_insert_char): if performing a single substitution,
+            check the encoded width of the output char, not the input char, which
+            doesn't have one.
+
+ ChangeLog | 17 ++++++++++++++
+ src/vte.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++----------------
+ 2 files changed, 76 insertions(+), 20 deletions(-)
+
+commit ca7af3ccfda6c0b2e2360b35b61417b41bcf8050
+Author: Nalin Dahyabhai 
+Date:   2003-04-28 18:58:55 +0000
+
+    add routines for pulling Xft antialiasing and hinting options from the
+    
+    * src/vterdb.c, src/vterdb.h: add routines for pulling Xft antialiasing and
+            hinting options from the resource database.
+    * src/vtefc.c(_vte_fc_patterns_from_pango_font_desc): apply settings from the
+            resource database after applying settings from GTK+.
+    * src/vtefc.c(_vte_fc_defaults_from_rdb): added, for adding default settings
+            based on the resource database.
+
+ ChangeLog       |   8 +++
+ src/Makefile.am |   2 +
+ src/vtefc.c     | 120 ++++++++++++++++++++++++--------
+ src/vterdb.c    | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vterdb.h    |  36 ++++++++++
+ 5 files changed, 347 insertions(+), 27 deletions(-)
+
+commit fab57ffc0e0965d8c648a6e112b9885f6b24eac6
+Author: Nalin Dahyabhai 
+Date:   2003-04-28 00:47:23 +0000
+
+    complain when the installed version of GTK+ doesn't support reporting Xft
+    
+    * src/vtefc.c(_vte_fc_defaults_from_gtk): complain when the installed version
+            of GTK+ doesn't support reporting Xft antialiasing and hinting settings.
+
+ ChangeLog   |  5 +++++
+ src/vtefc.c | 16 ++++++++++++++++
+ 2 files changed, 21 insertions(+)
+
+commit e6efd20998b591d5ef15b2f128b65164b79191a2
+Author: Nalin Dahyabhai 
+Date:   2003-04-25 19:40:48 +0000
+
+    freeze the window when scrolling down in a restricted scrolling area
+    
+    * src/vte.c(vte_sequence_handler_sf): freeze the window when scrolling down in
+            a restricted scrolling area again.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 2 ++
+ 2 files changed, 6 insertions(+)
+
+commit f90b5a787b177a9daac44b4feb086d6e6cc6f93b
+Author: Nalin Dahyabhai 
+Date:   2003-04-24 21:59:44 +0000
+
+    - src/vteaccess.c: tweak that debug warning again
+
+ src/vteaccess.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit eb6079bca4dabb469678f3b40f594ea5342f154e
+Author: Nalin Dahyabhai 
+Date:   2003-04-24 21:21:22 +0000
+
+    save the new codeset. compare the new codeset to the name of the UTF-8
+    
+    * src/iso2022.c(_vte_iso2022_state_set_codeset): save the new codeset.
+    * src/iso2022.c(process_cdata): compare the new codeset to the name of the
+            UTF-8 codeset instead of the local codeset to see if we need to notify
+            callers of a change.
+
+ ChangeLog                         | 6 ++++++
+ doc/reference/tmpl/vteaccess.sgml | 1 +
+ src/iso2022.c                     | 6 ++++--
+ 3 files changed, 11 insertions(+), 2 deletions(-)
+
+commit 8aacd3df5a33deb3f39aeee8f7f54bba2cd94890 (tag: vte_0_11_4)
+Author: Nalin Dahyabhai 
+Date:   2003-04-24 19:28:53 +0000
+
+    - 0.11.4
+
+ NEWS     | 3 +++
+ vte.spec | 7 ++++++-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+commit 9981b4d6dc6dee72cb87016d6a9c569fbb713b99
+Author: Nalin Dahyabhai 
+Date:   2003-04-24 18:45:00 +0000
+
+    don't use the window freeze count to check if it's safe to scroll using
+    
+    * src/vte.c(vte_sequence_handler_sf): don't use the window freeze count to
+            check if it's safe to scroll using gdk_window_scroll(), require other
+            parts of this widget to declare it unsafe for those cases.
+
+ ChangeLog |  5 +++++
+ src/vte.c | 27 +++++++++++----------------
+ 2 files changed, 16 insertions(+), 16 deletions(-)
+
+commit ed1e60faf9bbcb50302a3348d01455c7b4c42826
+Author: Nalin Dahyabhai 
+Date:   2003-04-24 18:17:17 +0000
+
+    take an explicit XftFont instead of figuring out which one to use
+    
+    * src/vtexft.c(_vte_xft_char_width): take an explicit XftFont instead of
+            figuring out which one to use ourselves.
+    * src/vtexft.c(_vte_xft_draw_text): pass the XftFont which we're already using
+            to _vte_xft_char_width to save a call to _vte_xft_font_for_char.
+
+ ChangeLog    | 6 ++++++
+ src/vtexft.c | 8 ++++----
+ 2 files changed, 10 insertions(+), 4 deletions(-)
+
+commit fe43594cdd3e980af12be3f1a7b86b1ad8eea84a
+Author: Nalin Dahyabhai 
+Date:   2003-04-24 17:55:44 +0000
+
+    accept libtool 1.5 in addition to 1.4 (#15968).
+    
+    * autogen.sh: accept libtool 1.5 in addition to 1.4 (#15968).
+
+ ChangeLog  | 3 +++
+ autogen.sh | 4 ++--
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+commit ab6bab86c9f3c819af8a6c09a7b07529769982d1
+Author: Nalin Dahyabhai 
+Date:   2003-04-24 03:23:53 +0000
+
+    add some detail to debug warning when gail isn't loaded.
+    
+    * src/vteaccess.c: add some detail to debug warning when gail isn't loaded.
+
+ src/vteaccess.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit c165224d950f6d78d8d4b870e05d931144f64f77
+Author: Nalin Dahyabhai 
+Date:   2003-04-24 03:03:51 +0000
+
+    add. call _vte_terminal_accessible_ref to ensure that accessible signals
+    
+    * src/vte.c,src/vte.h: (_vte_terminal_accessible_ref): add.
+    * src/vteaccess.c(vte_terminal_accessible_new): call
+            _vte_terminal_accessible_ref to ensure that accessible signals are
+            going to be emitted.
+
+ ChangeLog       |  6 ++++++
+ src/vte.c       | 11 +++++++++--
+ src/vte.h       |  3 +++
+ src/vteaccess.c |  1 +
+ src/vteaccess.h |  1 -
+ 5 files changed, 19 insertions(+), 3 deletions(-)
+
+commit 6f90d7c16e2263ac837a7a552c6cb0b7c5a1a83d
+Author: Nalin Dahyabhai 
+Date:   2003-04-24 02:50:55 +0000
+
+    formatting fixup. formatting fixups. Try using U+FFFF as the "invalid"
+    
+    * src/dumpkeys.c: formatting fixup.
+    * src/iso2022.c: formatting fixups.  Try using U+FFFF as the "invalid" marker
+            character instead of '?', because it's actually invalid.
+    * src/pty.c: formatting fixup.
+    * src/reflect.c: formatting fixup.
+    * src/ring.c: formatting fixup.
+    * src/ssfe.c: formatting fixups.
+    * src/trie.c: formatting fixup.
+    * src/vte.c: formatting fixups.
+    * src/vte.c(vte_terminal_get_accessible): don't add a weak pointer to the
+            AtkObject if it isn't a valid AtkObject.  Only emit text-changed signals
+            if we managed to create a valid accessible peer.
+    * src/vteaccess.c: formatting fixups.
+    * src/vteaccess.c(vte_terminal_accessible_init): unset the EXPANDABLE Atk state.
+            Set the RESIZABLE state.
+    * src/vteaccess.c(vte_terminal_accessible_class_init): Remove spurious(?) call
+            to bind_textdomain.
+    * src/vteaccess.c(vte_terminal_accessible_get_type): check if the accessible
+            peer of our peer's ancestor is derived from GtkAccessible, and if it
+            isn't derive from GtkAccessible instead of that.
+    * src/vteaccess.c(vte_terminal_accessible_get_type): register our factory type.
+    * src/vteaccess.c, src/vteaccess.c: add VteTerminalAccessibleFactory.
+    * src/vtedraw.c: formatting fixup.
+
+ ChangeLog       |  26 +++++
+ src/dumpkeys.c  |   2 +-
+ src/iso2022.c   |   4 +-
+ src/pty.c       |   2 +-
+ src/reflect.c   |   2 +-
+ src/ring.c      |   2 +-
+ src/ssfe.c      |  12 +-
+ src/trie.c      |   2 +-
+ src/vte.c       |  23 ++--
+ src/vteaccess.c | 345 ++++++++++++++++++++++++++++++++++----------------------
+ src/vteaccess.h |  41 +++++++
+ src/vtedraw.c   |   2 +-
+ 12 files changed, 303 insertions(+), 160 deletions(-)
+
+commit d99012f3a7f002824c71730a619944f6478afad7
+Author: Nalin Dahyabhai 
+Date:   2003-04-24 00:52:15 +0000
+
+    always refetch the root pixmap if we don't currently have a background
+    
+    * src/vte.c(vte_terminal_background_update): always refetch the root pixmap if
+            we don't currently have a background image (#111386).
+
+ ChangeLog | 4 ++++
+ src/vte.c | 3 ++-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 7c7ca5b8bcd15cca704f39a43bd1bbbad8ac194b
+Author: Nalin Dahyabhai 
+Date:   2003-04-23 20:13:08 +0000
+
+    - fix incorrect signal name when connecting
+
+ src/vteaccess.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a9a6b1c8657a7c90647bfafc74e962df5b8b83ba
+Author: Nalin Dahyabhai 
+Date:   2003-04-23 19:55:55 +0000
+
+    implement an AtkComponent interface (part of #110770). set the focus state
+    
+    * src/vteaccess.c: implement an AtkComponent interface (part of #110770).
+    * src/vteaccess.c(vte_terminal_accessible_focus_in): set the focus state on the
+            accessible peer (part of #110770).
+    * src/vteaccess.c(vte_terminal_accessible_focus_out): unset the focus state on
+            the accessible peer (part of #110770).
+    * src/vteaccess.c(vte_terminal_accessible_init): connect to the widget's
+            visibility-notify signals.
+    * src/vteaccess.c(vte_terminal_accessible_finalize): disconnect from the
+            widget's visibility-notify signals.
+
+ ChangeLog       |  12 +++
+ src/vteaccess.c | 279 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 289 insertions(+), 2 deletions(-)
+
+commit 119a00f1c81c7ec60a3f962e9c500b2dce3bd178
+Author: Nalin Dahyabhai 
+Date:   2003-04-23 15:35:53 +0000
+
+    don't bother generating a new pixmap or panning the pixbuf -- we can use
+    
+    * src/vte.c(vte_terminal_background_update): don't bother generating a new
+            pixmap or panning the pixbuf -- we can use the desaturated pixbuf
+            directly now (#111386).
+    * src/vte.c(vte_terminal_paint): use the drawing offsets because we don't
+            regenerate new background pixmaps when the window is moved.
+    * src/vte.c(vte_terminal_draw_cells): add jittered bold text back in, fell out
+            in the drawing overhaul (#111430).
+
+ ChangeLog |   9 +++
+ src/vte.c | 244 +++++++++++++++++++++-----------------------------------------
+ 2 files changed, 91 insertions(+), 162 deletions(-)
+
+commit 41630383d7e3d902d4134089848e40bff200fc02
+Author: Nalin Dahyabhai 
+Date:   2003-04-22 22:16:19 +0000
+
+    account for valid CSI sequences which were missed earlier.
+    
+    * src/iso2022.c(_vte_iso2022_fragment_input): account for valid CSI sequences
+            which were missed earlier.
+
+ ChangeLog     |  4 ++++
+ src/iso2022.c | 14 +++++++++++---
+ 2 files changed, 15 insertions(+), 3 deletions(-)
+
+commit 66ff84b4b341fb4d66bfe9ba089368c53b0bbb9f
+Author: Nalin Dahyabhai 
+Date:   2003-04-22 21:38:40 +0000
+
+    dispose of the PTY completely (#107534). dispose of the PTY completely
+    
+    * src/vte.c(vte_terminal_eof): dispose of the PTY completely (#107534).
+    * src/vte.c(vte_terminal_child_exited): dispose of the PTY completely (#107534).
+
+ ChangeLog |  4 ++++
+ src/vte.c | 38 ++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 42 insertions(+)
+
+commit b8cd0940d25990dbe06c7d5c7540c7fdde5027cf
+Author: Nalin Dahyabhai 
+Date:   2003-04-22 20:43:34 +0000
+
+    add missing check for recvmsg. formatting and spelling fixes. reorganize.
+    
+    * configure.in: add missing check for recvmsg.
+    * gnome-pty-helper/gnome-login-support.c: formatting and spelling fixes.
+    * gnome-pty-helper/gnome-login-support.c(n_read): reorganize.
+    * gnome-pty-helper/gnome-login-support.c(n_write): add.
+    * gnome-pty-helper/gnome-login-support.h: add prototype for n_write.
+    * gnome-pty-helper/gnome-pty-helper.c: only define the I_SENDFD version of
+            pass_fd() if I_SENDFD is defined, to clarify compile errors when it
+            isn't defined.
+    * src/pty.c(main): exercise session logging.
+    * src/pty.c(_vte_pty_open_with_helper): add more debug messages.
+
+ ChangeLog                              | 12 ++++++
+ configure.in                           |  2 +-
+ gnome-pty-helper/gnome-login-support.c | 77 ++++++++++++++++++++++------------
+ gnome-pty-helper/gnome-login-support.h |  1 +
+ gnome-pty-helper/gnome-pty-helper.c    | 59 +++++++++++++-------------
+ gnome-pty-helper/gnome-utmp.c          | 15 +++----
+ src/pty.c                              | 28 ++++++++++---
+ 7 files changed, 127 insertions(+), 67 deletions(-)
+
+commit 91249799a1adb5fe177b61752986786769cb72fa
+Author: Nalin Dahyabhai 
+Date:   2003-04-22 18:51:06 +0000
+
+    force visible widths to 2 columns for CJK maps which use 2 bytes per
+    
+    * src/iso2022.c(_vte_iso2022_map_get): force visible widths to 2 columns for CJK
+            maps which use 2 bytes per character.
+    * src/iso2022.c(_vte_iso2022_fragment_input): recognize CSI/OSC/PM sequences as
+            control sequences and not raw text, allowing us to treat them
+            specially later.
+    * src/iso2022.c(process_control): pass CSI/OSC/PM sequences through unmodified
+            (without going through maps).
+
+ ChangeLog     |   9 +++++
+ src/iso2022.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++----------
+ 2 files changed, 108 insertions(+), 20 deletions(-)
+
+commit b0e4d9016d8f5c138eb0102481a340a3082627d8
+Author: Nalin Dahyabhai 
+Date:   2003-04-22 04:48:15 +0000
+
+    don't bother doing anything if we're fully obscured (related to #102703).
+    
+    * src/vte.c(vte_invalidate_cursor_once): don't bother doing anything if we're
+            fully obscured (related to #102703).
+
+ ChangeLog | 6 +++++-
+ src/vte.c | 5 +++++
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+commit ba4f0b1d5c5ca4c1613cd9c582ee3ae35a696b73
+Author: Nalin Dahyabhai 
+Date:   2003-04-22 04:29:56 +0000
+
+    stop messing with fontconfig's list of font directories.
+    
+    * src/vteapp.c(main): stop messing with fontconfig's list of font directories.
+
+ ChangeLog    |  4 ++++
+ src/vteapp.c | 14 --------------
+ 2 files changed, 4 insertions(+), 14 deletions(-)
+
+commit 42bca0ff2a787ba93f33cb4c5bc7462dd93ee463
+Author: Nalin Dahyabhai 
+Date:   2003-04-22 04:27:46 +0000
+
+    rework link order so that xft2 is linked before anything else. You're
+    
+    * configure.in: rework link order so that xft2 is linked before anything else.
+            You're still screwed if you link with both xft1 and xft2 libs, but maybe
+            this'll help, even though it shouldn't (#107285).
+
+ ChangeLog    | 5 +++++
+ configure.in | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 55adb3860dc5c82f853ca09509dad7365c92a440
+Author: Nalin Dahyabhai 
+Date:   2003-04-22 04:09:29 +0000
+
+    - add bug ID
+
+ ChangeLog | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit 2eb1be31c0f55444a04926642e182c4a7f5a05e0
+Author: Nalin Dahyabhai 
+Date:   2003-04-22 04:08:12 +0000
+
+    fix a couple of #errors. if the area we're invading is on the edge,
+    
+    * src/vteglyph.c: fix a couple of #errors.
+    * src/vte.c(vte_invalidate_cells): if the area we're invading is on the edge,
+            invalidate the edge as well.
+    * src/pty.c: implement and use wrappers for read and write which handle EINTR
+            and EAGAIN.
+    * src/vte.c(vte_terminal_scroll_region): don't use gdk_window_scroll if the
+            window is frozen for updates.
+    * src/vte.c(vte_terminal_sequence_handler_sf): when scrolling down with a
+            defined scrolling region, freeze the window to avoid flicker.
+
+ ChangeLog      | 11 +++++++
+ src/pty.c      | 94 +++++++++++++++++++++++++++++++++++++++++++++++-----------
+ src/vte.c      | 47 ++++++++++++++++++++++++-----
+ src/vteglyph.c |  4 +--
+ 4 files changed, 128 insertions(+), 28 deletions(-)
+
+commit 27571eb6126ef16527021fe6ae3845db72c43eb1
+Author: Nalin Dahyabhai 
+Date:   2003-04-21 22:12:25 +0000
+
+    don't bail out if read() returns -1 and errno is either EINTR or EAGAIN,
+    
+    * gnome-pty-helper/gnome-login-support.c(n_read): don't bail out if read()
+            returns -1 and errno is either EINTR or EAGAIN, candidate fix for
+            #107534.
+
+ ChangeLog                              | 5 +++++
+ gnome-pty-helper/gnome-login-support.c | 9 ++++++---
+ 2 files changed, 11 insertions(+), 3 deletions(-)
+
+commit c12cd952b13bbccc6b28367a877d5a3b520eff76
+Author: Nalin Dahyabhai 
+Date:   2003-04-21 21:57:04 +0000
+
+    add a couple of assertions here just to be sure (#108066).
+    
+    * src/vte.c(vte_terminal_io_read): add a couple of assertions here just to
+            be sure (#108066).
+
+ ChangeLog | 4 ++++
+ src/vte.c | 2 ++
+ 2 files changed, 6 insertions(+)
+
+commit 09204fe9202ac6fd1049a011728bd4b1430a9213
+Author: Nalin Dahyabhai 
+Date:   2003-04-21 21:48:03 +0000
+
+    don't depend on PATH_MAX being available and correct (#109805). don't
+    
+    * src/pty.c(_vte_pty_ptsname): don't depend on PATH_MAX being available and
+            correct (#109805).
+    * src/vte.c(vte_terminal_set_termcap): don't depend on PATH_MAX being available
+            and correct (#109805).
+    * src/vte.c(vte_terminal_io_read): fix signed/unsigned comparison (#108066).
+
+ ChangeLog                              |  8 +++++++
+ gnome-pty-helper/gnome-login-support.c | 40 ++++++++++++++++++++++------------
+ src/pty.c                              | 31 ++++++++++++++++++--------
+ src/vte.c                              | 39 ++++++++++++++++++++++-----------
+ 4 files changed, 82 insertions(+), 36 deletions(-)
+
+commit ac8d4312a324bc5b6a591186fc96ba57f5555a2b
+Author: Nalin Dahyabhai 
+Date:   2003-04-21 20:34:10 +0000
+
+    add MESSAGE-OF-DOOM to EXTRA_DIST make Alt+Return generate ESC newline
+    
+    * Makefile.am: add MESSAGE-OF-DOOM to EXTRA_DIST
+    * src/keymap.c: make Alt+Return generate ESC newline (#108863).
+
+ ChangeLog    | 4 ++++
+ Makefile.am  | 2 +-
+ src/keymap.c | 2 ++
+ 3 files changed, 7 insertions(+), 1 deletion(-)
+
+commit dc73e632cf03e3e764223628dce4b435edd44a95
+Author: Nalin Dahyabhai 
+Date:   2003-04-21 20:09:45 +0000
+
+    really drop this file
+
+ src/unitable.KSC5601 | 17047 -------------------------------------------------
+ 1 file changed, 17047 deletions(-)
+
+commit ce2e40099e9113f32fc473866158c7cf9048b2b6
+Author: Nalin Dahyabhai 
+Date:   2003-04-21 20:05:30 +0000
+
+    drop unitable.KSC5601 fixup comment re: KS X 1001 (#107119). add two
+    
+    * src/Makefile.am: drop unitable.KSC5601
+    * src/iso2022.c: fixup comment re: KS X 1001 (#107119).
+    * src/mkunitables.sh: add two characters from KS X 1001:1998 (#107119).
+
+ ChangeLog            | 13 +++++++++----
+ src/Makefile.am      |  1 -
+ src/iso2022.c        |  3 ++-
+ src/mkunitables.sh   |  8 ++++++--
+ src/unitable.KSX1001 |  2 ++
+ 5 files changed, 19 insertions(+), 8 deletions(-)
+
+commit e3263d8cfcff27edf58bebead7e9899fc25d4262
+Author: Nalin Dahyabhai 
+Date:   2003-04-21 19:35:16 +0000
+
+    don't try to process incoming data if there isn't any (#110946). mark a
+    
+    * src/vte.c(vte_terminal_eof): don't try to process incoming data if there
+            isn't any (#110946).
+    * src/vtexft.c: mark a warning message for translation.
+    * src/vtegl.c: make the warning when glX isn't available debug-only.
+
+ ChangeLog    |  6 ++++++
+ src/vte.c    |  4 +++-
+ src/vtegl.c  |  2 ++
+ src/vtexft.c | 10 +++++++++-
+ 4 files changed, 20 insertions(+), 2 deletions(-)
+
+commit d8fe8eaf81fa1a4d8e13d996eb856d0b444e46d4
+Author: Nalin Dahyabhai 
+Date:   2003-04-21 19:01:58 +0000
+
+    use #if HAVE_DECL_XXX instead of #ifdef HAVE_DECL_XXX, noted by Bob Doan.
+    
+    * src/vteglyph.c: use #if HAVE_DECL_XXX instead of #ifdef HAVE_DECL_XXX, noted
+            by Bob Doan.
+
+ ChangeLog      |  4 ++++
+ src/vteglyph.c | 14 +++++++-------
+ 2 files changed, 11 insertions(+), 7 deletions(-)
+
+commit e5a1bd96f1df0de2e22b10ab208094b381f7aa93
+Author: Nalin Dahyabhai 
+Date:   2003-04-21 02:50:46 +0000
+
+    - ident tagging - header reorg
+    
+    - ident tagging
+    - header reorg
+
+ src/vte.c       | 2 ++
+ src/vteaccess.c | 2 ++
+ src/vteapp.c    | 2 ++
+ src/vtedraw.c   | 1 +
+ src/vtefc.c     | 3 +++
+ src/vteft2.c    | 2 ++
+ src/vtegl.c     | 3 +++
+ src/vteglyph.c  | 1 +
+ src/vtepango.c  | 3 +++
+ src/vtepangox.c | 7 ++++---
+ src/vtergb.c    | 1 +
+ src/vteskel.c   | 3 +++
+ src/vtexft.c    | 2 ++
+ 13 files changed, 29 insertions(+), 3 deletions(-)
+
+commit c5310364b35cfac035f88f6780965d5afce73709
+Author: Nalin Dahyabhai 
+Date:   2003-04-21 02:45:11 +0000
+
+    work around for garbled glyphs when drawing runs of text using multiple
+    
+    * src/vtexft.c: work around for garbled glyphs when drawing runs of text using
+            multiple fonts while mixing bitmap and antialiased fonts
+
+ ChangeLog    |  4 ++++
+ src/vtexft.c | 33 ++++++++++++++++++++++++++++++++-
+ 2 files changed, 36 insertions(+), 1 deletion(-)
+
+commit 9003aca9c2dda02997255aff5d25a79947dc8011 (tag: vte_0_11_3)
+Author: Nalin Dahyabhai 
+Date:   2003-04-18 00:31:22 +0000
+
+    - 0.11.3
+
+ NEWS     | 2 ++
+ vte.spec | 5 ++++-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 439b759cbfe698e7e0237bb0d97786e841a6ad36
+Author: Nalin Dahyabhai 
+Date:   2003-04-18 00:16:52 +0000
+
+    - add
+
+ src/unitable.KSX1001 | 8225 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 8225 insertions(+)
+
+commit 10dd7a33e526cb9883e34dda5de83ed4b542bc7d
+Author: Nalin Dahyabhai 
+Date:   2003-04-18 00:16:19 +0000
+
+    add missing prototype for vte_terminal_process_incoming().
+    
+    * src/vte.c: add missing prototype for vte_terminal_process_incoming().
+
+ ChangeLog | 3 +++
+ src/vte.c | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit 7abd52c1048aa299154b8e03635f915c8177575b
+Author: Nalin Dahyabhai 
+Date:   2003-04-18 00:14:55 +0000
+
+    quiet a compiler warning. use KSX-1001 instead of KSC-5601 for Korean, add
+    
+    * src/vteglyph.c(_vte_glyph_get): quiet a compiler warning.
+    * src/iso2022.c: use KSX-1001 instead of KSC-5601 for Korean, add maps for
+            CNS 11643 planes 3,4,5,6,7 (can't test them, but hey).  Rework so
+            that we get the data before it's passed to g_iconv(), and stuff
+            gunichars into an array for the caller.
+    * src/interpret.c: adapt to changes in the iso2022 interfaces.
+    * src/vte.c: adapt to changes in the iso2022 interfaces.
+    * src/mkunitables.sh: add snippets for KSX 1001.
+    * src/iso2022.txt: add iso-2022-cn example text.
+
+ ChangeLog          |   11 +
+ src/Makefile.am    |    5 +-
+ src/interpret.c    |  195 +++---
+ src/iso2022.c      | 1877 +++++++++++++++++++++++++++++++---------------------
+ src/iso2022.h      |   25 +-
+ src/iso2022.txt    |    2 +
+ src/mkunitables.sh |    4 +-
+ src/vte.c          |  543 ++++++---------
+ src/vteglyph.c     |    1 +
+ 9 files changed, 1417 insertions(+), 1246 deletions(-)
+
+commit cfe30db72f22a3c70a981e46bcd2a800210e92c4 (tag: vte_0_11_2)
+Author: Nalin Dahyabhai 
+Date:   2003-04-17 16:02:17 +0000
+
+    0.11.2
+
+ NEWS     | 2 ++
+ vte.spec | 5 ++++-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 70a4202f0a0b2f9f3308ab7d3606d725d095d123
+Author: Nalin Dahyabhai 
+Date:   2003-04-17 15:44:14 +0000
+
+    invalidate a larger rectangle to fix behavior wrt openi18n assertion 2.
+    
+    * src/vte.c(vte_terminal_process_incoming): invalidate a larger rectangle to
+            fix behavior wrt openi18n assertion 2.
+
+ ChangeLog |  4 ++++
+ src/vte.c | 16 ++++++++++------
+ 2 files changed, 14 insertions(+), 6 deletions(-)
+
+commit d08be0223b4f3e714a7e218a2831caa6042ca0ec
+Author: Nalin Dahyabhai 
+Date:   2003-04-16 22:14:42 +0000
+
+    fix logic error drawing the cursor which caused ALTGR characters to always
+    
+    * src/vte.c(vte_terminal_paint): fix logic error drawing the cursor which
+            caused ALTGR characters to always be used.  Draw the preedit string
+            in the right location.
+    * src/vte.c(vte_invalidate_cursor_once): expose the visible width of the
+            preedit string, not its length.
+
+ ChangeLog |   7 ++++
+ src/vte.c | 138 ++++++++++++++++++++++++++++++++++++++++++++++++--------------
+ 2 files changed, 115 insertions(+), 30 deletions(-)
+
+commit 7f3e85726efa33d937e4dee94e97db507831f448
+Author: Nalin Dahyabhai 
+Date:   2003-04-15 16:40:15 +0000
+
+    fix broken debug message.
+    
+    * src/vteaccess.c: fix broken debug message.
+
+ ChangeLog       | 3 +++
+ src/vteaccess.c | 7 +++++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 8f7ba9c45c5700bda437b021cd20a1555a0c4f9b
+Author: Nalin Dahyabhai 
+Date:   2003-04-15 15:46:21 +0000
+
+    - correct bad cast
+
+ src/vtepangox.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 83d04891f50af2ac7a2c572abc4759bac3068434
+Author: Nalin Dahyabhai 
+Date:   2003-04-15 15:43:52 +0000
+
+    make row_data a structure containing an array instead of a simple array.
+    
+    * src/vte.c: make row_data a structure containing an array instead of a simple
+            array.  Add a field to row data structures which tracks whether or not
+            we soft-wrapped from this line to the next one.  Make use of the field
+            when copying text and selecting by "line".
+    * src/reflect.c: put the label in a scrolled window to avoid mad loops when we
+            resize it to accomodate more text, which shrinks the terminal, which
+            removes text from the label, which resizes it to be smaller, which
+            gives the terminal more space, which adds text to the viewable area,
+            which requires a bigger label, and so on.
+    * src/vte.c: move vte_terminal_get_text_range logic into
+            vte_terminal_get_text_range_maybe_wrapped for internal use,
+            vte_terminal_get_text likewise.
+
+ ChangeLog                           |  14 ++
+ gnome-pty-helper/gnome-pty-helper.c |   2 +-
+ src/reflect.c                       |  10 +-
+ src/vte.c                           | 390 ++++++++++++++++++++++--------------
+ 4 files changed, 267 insertions(+), 149 deletions(-)
+
+commit 05b79cf4de66af1658906580c04c41de43f815b6
+Author: Ivan Stojmirov 
+Date:   2003-04-15 12:13:00 +0000
+
+    added Macedonian translation
+
+ po/mk.po | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 120 insertions(+)
+
+commit 62b9ee3bb402ee64ebd1b440fa6073f7172ef784
+Author: Nalin Dahyabhai 
+Date:   2003-04-15 02:41:41 +0000
+
+    don't snap the beginning of selection to the next line in select-by-line
+    
+    * src/vte.c: don't snap the beginning of selection to the next line in
+            select-by-line mode.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 5 +++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit bca5067bac3a54cefc1332fb98366a66d58c3256 (tag: vte_0_11_1)
+Author: Nalin Dahyabhai 
+Date:   2003-04-15 01:45:50 +0000
+
+    - 0.11.1
+
+ NEWS     | 6 ++++--
+ vte.spec | 5 ++++-
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+commit 8c772bdb1f16839e9dcea3730d4335fbc747f192
+Author: Nalin Dahyabhai 
+Date:   2003-04-15 00:05:35 +0000
+
+    fix macro invocations so that when LCD and GRAY2/GRAY4 pixel modes are
+    
+    * configure.in, src/vteglyph.c: fix macro invocations so that when LCD and
+            GRAY2/GRAY4 pixel modes are supported by freetype, we don't get
+            confused by them.
+    * src/vtepango.c, src/vtepangox.c: fix background scrolling.
+
+ ChangeLog       |  6 ++++++
+ configure.in    | 12 ++++++------
+ src/vteglyph.c  |  7 ++++++-
+ src/vtepango.c  | 21 +++++++--------------
+ src/vtepangox.c | 23 ++++++++---------------
+ 5 files changed, 33 insertions(+), 36 deletions(-)
+
+commit e3f4cc36d7e6bc29db5fefca8d6370a3f388d18f
+Author: Nalin Dahyabhai 
+Date:   2003-04-14 23:31:59 +0000
+
+    require automake 1.6, 1.5 chokes on AM_LDFLAGS, which 1.7 wants instead of
+    
+    * autogen.sh: require automake 1.6, 1.5 chokes on AM_LDFLAGS, which 1.7 wants
+            instead of LDFLAGS(!).  Require autoconf 2.52 or newer, because older
+            versions bail on configure.in.
+    * configure.in: Check if ft_render_mode_mono, FT_RENDER_MODE_NORMAL,
+            FT_PIXEL_MODE_MONO, ft_pixel_mode_mono, FT_PIXEL_MODE_GRAY2,
+            FT_PIXEL_MODE_GRAY4, FT_PIXEL_MODE_GRAY, ft_pixel_mode_grays,
+            FT_PIXEL_MODE_LCD are declared.
+    * src/vte.c, src/vteapp.c, src/vtefc.c, src/vtepango.c: handle being built with
+            GTK+ 2.0 or 2.2.
+    * src/vtegl.c: disable for GTK+ < 2.2.0.
+    * src/vtepangox.c: use a PangoX context instead of a Pango context when
+            determining font metrics.
+    * src/vteglyph.c: handle the twisty maze of load and render options and pixel
+            modes which various versions of freetype support.
+
+ ChangeLog       | 16 ++++++++++++++++
+ autogen.sh      | 36 +++++++++++++++++++++++++----------
+ configure.in    | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
+ src/reaper.c    |  1 +
+ src/vte.c       | 15 +++++++++++----
+ src/vteapp.c    |  7 +------
+ src/vtedraw.c   |  2 ++
+ src/vtefc.c     | 10 ++++++++++
+ src/vtegl.c     |  3 +++
+ src/vteglyph.c  | 28 ++++++++++++++++++++++-----
+ src/vtepango.c  | 18 +++++++++++++++++-
+ src/vtepangox.c | 15 ++++++++++++---
+ 12 files changed, 174 insertions(+), 36 deletions(-)
+
+commit 0e259e346a7b5487ac7ebfdae90bbb8013f719f1
+Author: Nalin Dahyabhai 
+Date:   2003-04-14 19:41:12 +0000
+
+    disable pangox, xft, glx drawing if run invoked with the --without-x flag.
+    
+    * configure.in: disable pangox, xft, glx drawing if run invoked with the
+            --without-x flag.
+    * vte.pc.in: include CFLAGS found by AC_PATH_XTRA when built with X.
+    * src/iso2022.c(_vte_iso2022_substitute_single): clean up and ensure that
+            ambiguous widths are respected.
+    * src/iso2022.c, src/iso2022.h: add _vte_iso2022_unichar_width().
+    * src/vte.c: remove old xft2/xft1/pango/pangox/core drawing code, making draw
+            the only supported method.  Remove most dependencies on gdkx and Xlib,
+            except for root pixmap ID watching.
+    * src/vtedraw.c: only use pangox, xft if X_DISPLAY_MISSING is not defined.
+    * src/vtedraw.c, src/vtedraw.h: add get_using_fontconfig() method.
+    * src/vte.c(vte_terminal_get_using_xft): use _vte_draw_get_using_fontconfig(),
+            which is what apps really want to know when they call this function.
+    * src/vtegl.c: wrap in #ifndef X_DISPLAY_MISSING.
+    * src/vtepangox.c: wrap in #ifndef X_DISPLAY_MISSING.
+    * src/vtexft.c: wrap in #ifndef X_DISPLAY_MISSING.
+    * src/vteglyph.c(_vte_glyph_cache_set_description): use horizontal advance
+            instead of bitmap width when calculating display widths.
+            Rename to _vte_glyph_cache_set_font_description.
+
+ ChangeLog       |   23 +
+ configure.in    |   90 +-
+ src/iso2022.c   |   24 +-
+ src/iso2022.h   |    1 +
+ src/vte.c       | 3209 ++++++++-----------------------------------------------
+ src/vtedraw.c   |   14 +
+ src/vtedraw.h   |   24 +-
+ src/vtefc.c     |  113 +-
+ src/vteft2.c    |   14 +-
+ src/vtegl.c     |    9 +
+ src/vteglyph.c  |   49 +-
+ src/vteglyph.h  |    6 +-
+ src/vtepango.c  |   32 +-
+ src/vtepangox.c |   32 +-
+ src/vteskel.c   |    7 +
+ src/vtexft.c    |    9 +
+ vte.pc.in       |    2 +-
+ 17 files changed, 788 insertions(+), 2870 deletions(-)
+
+commit dca7f0cdfcc4eba1e2238cd26fb3eb6a3ae58016
+Author: Nalin Dahyabhai 
+Date:   2003-04-09 20:11:52 +0000
+
+    add back some variables which are used after all.
+    
+    * src/vte.c: add back some variables which are used after all.
+
+ ChangeLog | 3 +++
+ src/vte.c | 6 ++++++
+ 2 files changed, 9 insertions(+)
+
+commit 26307a1dfd36f7b9af30ebd28805cd59e48e3694
+Author: Nalin Dahyabhai 
+Date:   2003-04-09 20:01:50 +0000
+
+    add specific checks for PangoX and glX. add drawing method using freetype
+    
+    * configure.in: add specific checks for PangoX and glX.
+    * src/vteft2.c, src/vteft2.h: add drawing method using freetype and GdkRGB.
+    * src/vteglyph.c, src/vteglyph.h: add.
+    * src/vtepangox.c, src/vtepangox.h: add drawing method using PangoX.
+    * src/vtergb.c, src/vtergb.h: add.
+    * src/vtegl.c, src/vtegl.h: add placeholder drawing method using freetype and
+            glX.
+    * src/Makefile.am: add newly-added source files to libvte.la target.
+    * src/vtedraw.c, src/vtedraw.h: add get_visual and get_colormap methods so that
+            drawing methods can override the default visual and colormap.  Rename
+            get_text_base() to get_text_ascent(), which is more correct.  Remove
+            scroll(), which would just wrap gdk_window_scroll().
+    * src/vte.c: fix logic for choosing alternate render methods when VTE_USE_XFT
+            is "0".
+    * src/vteapp.c: add -- option to stop parsing options with getopt.
+    * src/vtefc.c: fix incorrect DPI read due to type mismatch (#109513).
+
+ ChangeLog       |  19 ++
+ configure.in    |  68 +++++-
+ src/Makefile.am |  44 ++--
+ src/vte.c       |  23 +-
+ src/vteapp.c    |  10 +-
+ src/vtedraw.c   |  44 ++--
+ src/vtedraw.h   |  12 +-
+ src/vtefc.c     |  13 +-
+ src/vteft2.c    | 338 ++++++++++++++++++++++++++
+ src/vteft2.h    |  35 +++
+ src/vtegl.c     | 414 ++++++++++++++++++++++++++++++++
+ src/vtegl.h     |  35 +++
+ src/vteglyph.c  | 728 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vteglyph.h  |  86 +++++++
+ src/vtepango.c  |  42 ++--
+ src/vtepangox.c | 466 ++++++++++++++++++++++++++++++++++++
+ src/vtepangox.h |  35 +++
+ src/vtergb.c    | 260 ++++++++++++++++++++
+ src/vtergb.h    |  52 ++++
+ src/vteskel.c   |  35 +--
+ src/vtexft.c    |  39 +--
+ vte.pc.in       |   2 +-
+ vte.spec        |   6 +-
+ 23 files changed, 2681 insertions(+), 125 deletions(-)
+
+commit f947682ae7c91de10542d69217496828122bd976
+Author: Laurent Dhima 
+Date:   2003-03-31 08:36:26 +0000
+
+    Added "sq" to ALL_LINGUAS
+    
+    * configure.in: Added "sq" to ALL_LINGUAS
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 492227858e294d598abfc1abd59b1a4f0459c7fd
+Author: Laurent Dhima 
+Date:   2003-03-31 08:33:05 +0000
+
+    Added Albanian translation
+    
+    * sq.po: Added Albanian translation
+
+ po/ChangeLog |   5 +++
+ po/sq.po     | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 125 insertions(+)
+
+commit 1692ef6e575bceabc62527ae367360f892176ffc
+Author: Nalin Dahyabhai 
+Date:   2003-03-27 20:45:22 +0000
+
+    - sprinkle various CFLAGS throughout
+
+ src/Makefile.am | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit 094ec6f9e8c2ff9176411ca5a5876b8130153782
+Author: Nalin Dahyabhai 
+Date:   2003-03-27 00:48:54 +0000
+
+    - more automake-1.7 changes, should properly accept 1.7, 1.6 or 1.5 now
+
+ autogen.sh                   | 22 +++++++++-------------
+ gnome-pty-helper/Makefile.am |  4 ++--
+ 2 files changed, 11 insertions(+), 15 deletions(-)
+
+commit 30195a9b175f3d1fe8f78ab3af321eb170ce8cb8
+Author: Nalin Dahyabhai 
+Date:   2003-03-27 00:39:53 +0000
+
+    specify AM_CFLAGS and AM_LDFLAGS instead of CFLAGS and LDFLAGS so that
+    
+    * src/Makefile.am: specify AM_CFLAGS and AM_LDFLAGS instead of CFLAGS and
+            LDFLAGS so that automake 1.7 doesn't kick us to the curb
+
+ ChangeLog       | 4 ++++
+ src/Makefile.am | 4 ++--
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 71154e5b4c8ac4e2725a6d92e79bc248c8061dbb (tag: vte_0_11_0)
+Author: Nalin Dahyabhai 
+Date:   2003-03-26 19:30:43 +0000
+
+    commit useful news
+
+ NEWS | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 2d71c2855ee2886654dede15fbca46734be4198a
+Author: Nalin Dahyabhai 
+Date:   2003-03-17 19:23:10 +0000
+
+    - copy AC_CHECK_FT2 to VTE_CHECK_FT2 and use it instead -- some systems with
+      freetype development stuff still don't include the right autoconf macros
+      (#108481)
+
+ acinclude.m4 | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ configure.in |   5 ++-
+ 2 files changed, 147 insertions(+), 2 deletions(-)
+
+commit 8623bfb400d8f56b916f1fb5367cfaae0981445f
+Author: Nalin Dahyabhai 
+Date:   2003-03-17 17:53:04 +0000
+
+    - warn when freetype devel stuff isn't present, becuase we need it to
+      supply the AC_CHECK_FT2 macro
+
+ autogen.sh | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+commit 160c94bbca71b9fd92113faae0bebc4cad60d7ed
+Author: Metin Amiroff 
+Date:   2003-03-14 18:56:44 +0000
+
+    Updated Azerbaijani translation.
+    
+    2003-03-14  Metin Amiroff  
+    
+            * az.po: Updated Azerbaijani translation.
+
+ po/ChangeLog |  4 ++++
+ po/az.po     | 66 ++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 37 insertions(+), 33 deletions(-)
+
+commit 937ca9b1422e28330e8ae4f386dac963556ea33f
+Author: Christian Rose 
+Date:   2003-03-13 13:14:42 +0000
+
+    Added "ml" to ALL_LINGUAS. Added Malayalam translation by FSF-India
+    
+    2003-03-13  Christian Rose  
+    
+            * configure.in: Added "ml" to ALL_LINGUAS.
+            * po/ml.po: Added Malayalam translation by
+            FSF-India .
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/ml.po     | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 130 insertions(+), 1 deletion(-)
+
+commit d4c4742e3a3b5218b15574a1367a704d34dc8fb1
+Author: Nalin Dahyabhai 
+Date:   2003-03-07 17:51:41 +0000
+
+    - actually add these files
+
+ src/vteskel.c | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vteskel.h |  35 ++++++++++
+ 2 files changed, 245 insertions(+)
+
+commit 84ae030f2516fddcc597778a46e7754e23f8c7d2
+Author: Nalin Dahyabhai 
+Date:   2003-03-07 17:51:21 +0000
+
+    adjust coordinates for the border when clearing rectangles. add. use the
+    
+    * src/vte.c(vte_terminal_paint): adjust coordinates for the border when
+            clearing rectangles.
+    * src/vteskel.c, src/vteskel.h: add.
+    * src/vtedraw.c: use the skeleton drawing code.
+
+ ChangeLog       |  5 ++++
+ src/Makefile.am |  2 ++
+ src/vte.c       | 77 ++++++++++++++++++++++++++++++++++++++++++++++-----------
+ src/vtedraw.c   |  2 ++
+ 4 files changed, 72 insertions(+), 14 deletions(-)
+
+commit 037cb1da6a82cb9bef6a73b8e67a49b8ed4e531e
+Author: Nalin Dahyabhai 
+Date:   2003-03-07 16:54:13 +0000
+
+    watch for Visibility events. don't synthesize an expose event if we're
+    
+    * src/vte.c(vte_terminal_visibility_notify): watch for Visibility events.
+    * src/vte.c(vte_invalidate_cells,vte_invalidate_all): don't synthesize an
+            expose event if we're fully obscured, that's just silly.
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 26 ++++++++++++++++++++++++++
+ 2 files changed, 32 insertions(+)
+
+commit e99c7b9d6bf07cfbbcb786769a7f41e17da80fb0
+Author: Nalin Dahyabhai 
+Date:   2003-03-07 00:28:21 +0000
+
+    take a const GdkColor* instead of a non-const color.
+    
+    * src/vte.c, src/vte.h(vte_terminal_set_background_tint_color): take a const
+            GdkColor* instead of a non-const color.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 3 ++-
+ src/vte.h | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 7ff66739d0e5a603a7c6ba37ef075934135fd7c5
+Author: Nalin Dahyabhai 
+Date:   2003-03-06 17:25:44 +0000
+
+    regenerate. update for vte_char_attributes rename.
+    
+    * python/vte.defs: regenerate.
+    * python/vte.override: update for vte_char_attributes rename.
+
+ ChangeLog           |  4 ++++
+ python/vte.defs     | 46 ++++++++++++++++++++++++++++++++++++++++++++++
+ python/vte.override | 12 ++++++------
+ 3 files changed, 56 insertions(+), 6 deletions(-)
+
+commit 727213593e805e1eff6fd7e7036885ffd4795542
+Author: Nalin Dahyabhai 
+Date:   2003-03-06 17:20:33 +0000
+
+    rename struct vte_char_attributes to VteCharAttributes, fixup some docs.
+    
+    * src/vte.c, src/vte.h, src/vteaccess.c: rename struct vte_char_attributes to
+            VteCharAttributes, fixup some docs.
+    * doc/reference: finish up docs.
+
+ ChangeLog                          |   5 +
+ doc/reference/tmpl/reaper.sgml     |   2 +-
+ doc/reference/tmpl/vte-unused.sgml | 195 +++++++++++++++++++++++++++++++++++++
+ doc/reference/tmpl/vte.sgml        |  62 ++++++++----
+ doc/reference/tmpl/vteaccess.sgml  |   2 +-
+ doc/reference/vte-sections.txt     |  48 +++++++--
+ src/vte.c                          |  59 +++++------
+ src/vte.h                          |   5 +-
+ src/vteaccess.c                    |  16 +--
+ 9 files changed, 328 insertions(+), 66 deletions(-)
+
+commit 4de594de6072f866ec78600166309a1232656bbc
+Author: Nalin Dahyabhai 
+Date:   2003-03-05 22:55:08 +0000
+
+    add FT2_LIBS and FT2_CFLAGS to our libs and cflags. Add xft >= 2.0 and
+    
+    * vte.pc.in: add FT2_LIBS and FT2_CFLAGS to our libs and cflags.  Add xft >= 2.0
+            and fontconfig as hard requirements.
+
+ ChangeLog | 4 ++++
+ vte.pc.in | 6 +++---
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+commit 6b9ac417b5cfa881b0f24cdf7e86950f8b16377a
+Author: Nalin Dahyabhai 
+Date:   2003-03-05 22:36:42 +0000
+
+    don't spit out which rendering method we're using except in debug mode.
+    
+    * src/vtedraw.c: don't spit out which rendering method we're using except in
+            debug mode.
+
+ ChangeLog     | 4 ++++
+ src/vtedraw.c | 1 -
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit 6f5d8d1e0747db823e73c4fb7642f7d5b41f740f
+Author: Nalin Dahyabhai 
+Date:   2003-03-05 22:34:34 +0000
+
+    don't print "Bogus font." when we think the font metrics are screwy.
+    
+    * src/vtepango.c, src/vtexft.c: don't print "Bogus font." when we think the
+            font metrics are screwy.
+
+ ChangeLog      | 4 ++++
+ src/vtepango.c | 1 -
+ src/vtexft.c   | 1 -
+ 3 files changed, 4 insertions(+), 2 deletions(-)
+
+commit c6c7bb21c498d9abe70d7f28bd867045bb0a68dc
+Author: Nalin Dahyabhai 
+Date:   2003-03-05 22:31:08 +0000
+
+    require Xft2 and fontconfig, drop Xft1. Require freetype2. add xticker,
+    
+    * configure.in: require Xft2 and fontconfig, drop Xft1.  Require freetype2.
+    * src/Makefile.am, src/xticker.c: add xticker, useless but interesting.
+    * src/vte.c, src/vte.h: add vte_terminal_set_scroll_background() to enable
+            background scrolling (where supported by the drawing code).
+    * src/vteapp.c: set the tinting color to the default background color to see
+            what that's like.  Add -s option to toggle scrolling backgrounds.
+    * src/vtefc.c, src/vtefc.h: add.  For converting PangoFontDescriptions to
+            sorted lists of FcPatterns suitable for passing to XftFontOpenPattern()
+            or even FT_New_Face().
+    * src/vtedraw.c, src/vtedraw.h: add.  New drawing layer.
+    * src/vtepango.c, src/vtepango.h: add.  Drawing layer using Pango.
+    * src/vtexft.c, src/vtexft.h: add.  Drawing layer using Xft2.
+    * src/vte.c: add render type VteRenderDraw for transitional period in
+            preparation for nuking other drawing code.  Merge HAVE_XFT bits into
+            HAVE_XFT2 areas.  Nuke Xft1-specific stuff.  Move drawing of lines
+            and rectangles to dedicated functions.  Always call vte_unichar_width()
+            instead of g_unichar_iswide().
+
+ ChangeLog       |   20 +
+ configure.in    |  126 ++--
+ src/Makefile.am |   17 +-
+ src/vte.c       | 1780 ++++++++++++++++++++++++++++++++++++-------------------
+ src/vte.h       |    1 +
+ src/vteapp.c    |    9 +-
+ src/vtedraw.c   |  227 +++++++
+ src/vtedraw.h   |  110 ++++
+ src/vtefc.c     |  346 +++++++++++
+ src/vtefc.h     |   42 ++
+ src/vtepango.c  |  424 +++++++++++++
+ src/vtepango.h  |   35 ++
+ src/vtexft.c    |  728 +++++++++++++++++++++++
+ src/vtexft.h    |   39 ++
+ src/xticker.c   |  144 +++++
+ 15 files changed, 3395 insertions(+), 653 deletions(-)
+
+commit 658c3b9bca57da43964410b0f1c149b37e38901d
+Author: Nalin Dahyabhai 
+Date:   2003-03-04 19:56:17 +0000
+
+    fix swap of one variable for another which prevented stripping of control
+    
+    * src/vte.c(vte_sequence_handler_set_title_internal): fix swap of one variable
+            for another which prevented stripping of control chars, spotted by
+            Nam SungHyun.
+
+ ChangeLog | 5 +++++
+ src/vte.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 8369c0f5728784c8856e4e5a27fc80772152b8aa
+Author: Nalin Dahyabhai 
+Date:   2003-03-04 18:01:25 +0000
+
+    wrap properly when a scrolling region is set (#107559).
+    
+    * src/vte.c(vte_terminal_insert_char): wrap properly when a scrolling region
+            is set (#107559).
+
+ ChangeLog | 4 ++++
+ src/vte.c | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 4f53480a826210d6c03fd04b74b7116d5370f83a
+Author: added po/ja.po. T.Aihana 
+Date:   2003-02-27 15:42:21 +0000
+
+    2003-02-28 added po/ja.po. T.Aihana 
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit ef337abba581f3ea5f3338277017f1514813a159
+Author: added Japanese translation. T.Aihana 
+Date:   2003-02-27 15:40:39 +0000
+
+    2003-02-28 added Japanese translation. T.Aihana 
+
+ po/ChangeLog |   4 ++
+ po/ja.po     | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 130 insertions(+)
+
+commit 49940ab3b43573e83bc4eca8f58013ab392c4f37
+Author: Nalin Dahyabhai 
+Date:   2003-02-27 00:31:47 +0000
+
+    force characters substituted through the ACS map to have width of 1.
+    
+    * src/iso2022.c(_vte_iso2022_substitute,_vte_iso2022_substitute_single): force
+            characters substituted through the ACS map to have width of 1.
+
+ ChangeLog     |  4 ++++
+ src/iso2022.c | 32 +++++++++++++++++++++++++++++---
+ 2 files changed, 33 insertions(+), 3 deletions(-)
+
+commit 9e889be8604ad6b57282fd884a02073167cc0c3c
+Author: Nalin Dahyabhai 
+Date:   2003-02-27 00:14:08 +0000
+
+    use an array of codepoints instead of a UTF-8 string so that we can check
+    
+    * src/vte.c(vte_terminal_font_open_xft,vte_terminal_font_open_pango): use an
+            array of codepoints instead of a UTF-8 string so that we can check for
+            lack of font coverage in Xft fonts.
+
+ ChangeLog |  5 +++++
+ src/vte.c | 56 +++++++++++++++++++++++++++++++++++++++-----------------
+ 2 files changed, 44 insertions(+), 17 deletions(-)
+
+commit 0ca7f0516f839b503a1c2f12862e1ce38124345a
+Author: Nalin Dahyabhai 
+Date:   2003-02-26 23:50:04 +0000
+
+    formatting fixups.
+    
+    * src/vte.c: formatting fixups.
+
+ ChangeLog |  3 +++
+ src/vte.c | 67 ++++++++++++++++++++++++++++++++-------------------------------
+ 2 files changed, 37 insertions(+), 33 deletions(-)
+
+commit 26922b2b3e2dc22c25de00d9dae12b9307d3ed1c
+Author: Nalin Dahyabhai 
+Date:   2003-02-26 23:47:51 +0000
+
+    patch from Jungshik Shin for detecting and handling fonts where ASCII
+    
+    * src/vte.c(vte_terminal_font_open_xft,vte_terminal_font_open_pango): patch
+            from Jungshik Shin for detecting and handling fonts where ASCII
+            characters are double-width (#106618)
+
+ ChangeLog |  5 +++++
+ src/vte.c | 46 ++++++++++++++++++++++++++++++++++++++++++----
+ 2 files changed, 47 insertions(+), 4 deletions(-)
+
+commit fe69847b32c5dec739197dc4a0347f5042cc6198
+Author: Taneem Ahmed 
+Date:   2003-02-26 08:37:13 +0000
+
+    Added "bn" to ALL_LINGUAS. Added Bangla/Bengali translation by Jamil Ahmed
+    
+    2003-02-26  Taneem Ahmed  
+    
+            * configure.in:  Added "bn" to ALL_LINGUAS.
+            * bn.po: Added Bangla/Bengali translation
+            by Jamil Ahmed .
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/bn.po     | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 132 insertions(+), 1 deletion(-)
+
+commit 60123909ac05f35f34c0e029b1c7ce6082f2f8a9
+Author: Nalin Dahyabhai 
+Date:   2003-02-26 00:33:14 +0000
+
+    take a shot at implementing xconsole-like functionality when started with
+    
+    * src/vteapp.c(main): take a shot at implementing xconsole-like functionality
+            when started with the -C flag: we open /dev/console and TIOCCONS it,
+            and just feed data to the widget until we lose ownership of the
+            MIT_CONSOLE_$(hostname) clipboard.
+
+ ChangeLog    |   6 +++
+ src/vteapp.c | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 144 insertions(+), 12 deletions(-)
+
+commit 18addacae85e32fbc25eb5547ab9d06e0453bb77
+Author: Samel Jn Gunnarsson 
+Date:   2003-02-25 19:14:43 +0000
+
+    Added Icelandic translation.
+    
+    2003-02-25  Samel Jn Gunnarsson 
+    
+            * is.po: Added Icelandic translation.
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   4 ++
+ po/is.po     | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 132 insertions(+), 1 deletion(-)
+
+commit 8476c00dff0d90b82b867737111c90a81ebff4c6
+Author: Nalin Dahyabhai 
+Date:   2003-02-25 00:18:03 +0000
+
+    don't report the user-settable title and icon strings to applications,
+    
+    * src/vte.c(vte_sequence_handler_window_manipulation): don't report the
+            user-settable title and icon strings to applications, based on H D
+            Moore's "Terminal Emulator Security Issues" (CAN-2003-0070).
+    * src/vte.c(vte_sequence_handler_set_title_internal): strip out control
+            characters just to be on the safe side.
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 13 +++++++++----
+ 2 files changed, 16 insertions(+), 4 deletions(-)
+
+commit 512186bb91ca5ee9f0e6407db51568a9c86a76f1
+Author: Nalin Dahyabhai 
+Date:   2003-02-24 22:45:07 +0000
+
+    home the cursor when we switch to the alternate screen (#105075).
+    
+    * src/vte.c(vte_sequence_handler_decset_internal): home the cursor when we
+            switch to the alternate screen (#105075).
+
+ ChangeLog       | 4 ++++
+ src/Makefile.am | 1 +
+ src/vte.c       | 6 +++++-
+ 3 files changed, 10 insertions(+), 1 deletion(-)
+
+commit 849f6800f838b3f418c9ce0add4da61ee4a89f7e
+Author: Duarte Loreto 
+Date:   2003-02-23 02:52:09 +0000
+
+    Added "pt" to ALL_LINGUAS.
+    
+    2003-02-23  Duarte Loreto 
+    
+            * configure.in: Added "pt" to ALL_LINGUAS.
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 7eb560f64185ac54da6d8604f6a9018ea120ac4c
+Author: Duarte Loreto 
+Date:   2003-02-23 02:51:05 +0000
+
+    Added Portuguese translation.
+    
+    2003-02-23  Duarte Loreto 
+    
+            * pt.po: Added Portuguese translation.
+
+ po/ChangeLog |   4 ++
+ po/pt.po     | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 127 insertions(+)
+
+commit 3fbecfdbecd9c9ac60cc26e3274ac22d8d47eb35
+Author: Metin Amiroff 
+Date:   2003-02-21 11:54:44 +0000
+
+    Added az to ALL_LINGUAS.
+    
+    2003-02-21  Metin Amiroff  
+    
+            * configure.in:  Added az to ALL_LINGUAS.
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 7ecc0ea9725c8ee42e329b1c64b26b94d9479555
+Author: Metin Amiroff 
+Date:   2003-02-21 11:52:54 +0000
+
+    Added Azerbaijani translation.
+    
+    2003-02-21  Metin Amiroff  
+    
+            * az.po: Added Azerbaijani translation.
+
+ po/ChangeLog |   4 ++
+ po/az.po     | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 127 insertions(+)
+
+commit 23e1237027d24d52f279ade778a800e56da2c90d
+Author: Nalin Dahyabhai 
+Date:   2003-02-21 03:12:09 +0000
+
+    in debug mode, skip coverage assertions for specific keys (GDK_2 - GDK_8).
+    
+    * src/keymap.c(_vte_keymap_map): in debug mode, skip coverage assertions for
+            specific keys (GDK_2 - GDK_8).
+    * src/keymap.c: remove unshifted entries for GDK_2 - GDK_8 (#106667)
+
+ ChangeLog    |  5 +++++
+ src/keymap.c | 25 ++++++++++++++++---------
+ 2 files changed, 21 insertions(+), 9 deletions(-)
+
+commit 1d11073ddb176328f34a9a5e48a706e40dfeeac8
+Author: Nalin Dahyabhai 
+Date:   2003-02-21 01:20:44 +0000
+
+    stop gratuitously resetting the IM context. correctly determine when we
+    
+    * src/vte.c(vte_terminal_im_commit,vte_terminal_paste_cb): stop gratuitously
+            resetting the IM context.
+    * src/vte.c(vte_terminal_process_incoming): correctly determine when we have an
+            IM context -- it should be iff we're realized.
+    * src/vte.c(vte_terminal_key_press/release): only filter keypresses through the
+            IM context if we're realized, otherwise it doesn't exist.
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 10 +++++-----
+ 2 files changed, 13 insertions(+), 5 deletions(-)
+
+commit c2be38cd00eedfeaea58a0b1f480d26415c01617
+Author: Nalin Dahyabhai 
+Date:   2003-02-20 19:27:17 +0000
+
+    reverse that last change -- don't always assume proportional text.
+    
+    * src/vte.c(vte_terminal_paint): reverse that last change -- don't always
+            assume proportional text.
+    * src/vte.c(vte_sequence_handler_ta): eliminate dead code.
+
+ ChangeLog |  5 +++++
+ src/vte.c | 17 -----------------
+ 2 files changed, 5 insertions(+), 17 deletions(-)
+
+commit c2b438a6e89039d6518d62b6a22ac4d841a4d13a
+Author: Nalin Dahyabhai 
+Date:   2003-02-20 08:12:12 +0000
+
+    move the initial drawing x left whenever we back up to a previous cell to
+    
+    * src/vte.c(vte_terminal_draw_row): move the initial drawing x left whenever
+            we back up to a previous cell to avoid drawing fragments.
+    * src/vte.c(vte_terminal_paint): always assume non-monospaced text, because the
+            "missing glyph" glyph consistently looks screwy otherwise.
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 5 +++++
+ 2 files changed, 11 insertions(+)
+
+commit ca1368da42e8e2b3b9127665932589d5473a2945
+Author: Nalin Dahyabhai 
+Date:   2003-02-20 07:40:17 +0000
+
+    don't reset the input method here -- it may be in the middle of something
+    
+    * src/vte.c(vte_terminal_feed_child): don't reset the input method here -- it
+            may be in the middle of something (Red Hat #81542).
+    * src/vte.c(vte_terminal_im_commit): reset the input method when we get text
+            committed (Red Hat #81542).
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit f94d3321a8cf6d3b2f66f5d95d4321db5b733b4f
+Author: Nalin Dahyabhai 
+Date:   2003-02-20 03:42:43 +0000
+
+    if we're not currently realized, don't try to tell our IM context that our
+    
+    * src/vte.c(vte_terminal_focus_in,vte_terminal_focus_out): if we're not
+            currently realized, don't try to tell our IM context that our focus
+            state changed, because we don't have one.  While we're at it, it's
+            silly to try to force the cursor to be drawn when we're not realized,
+            either.
+    * src/vte.c(vte_terminal_background_update): disconnect self, just in case we
+            were called directly while still queued, which would otherwise leak the
+            source, leading to potential problems later (Red Hat #84368).
+
+ ChangeLog | 10 ++++++++++
+ src/vte.c | 44 ++++++++++++++++++++++++++++----------------
+ 2 files changed, 38 insertions(+), 16 deletions(-)
+
+commit 1e9c96f4cd86876c7ce43d5fdfa0021a1b2407f3
+Author: Nalin Dahyabhai 
+Date:   2003-02-20 02:44:40 +0000
+
+    use gdk_window_scroll if the first row to be scrolled is the first visible
+    
+    * src/vte.c(vte_terminal_scroll_window): use gdk_window_scroll if the first row
+            to be scrolled is the first visible row, not if it's the first row we
+            ever saw (Red Hat #83472).
+
+ ChangeLog | 8 +++++++-
+ src/vte.c | 2 +-
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit ab30d1a209885f446d0eef718cfddd645a6f8cf1
+Author: Nalin Dahyabhai 
+Date:   2003-02-20 02:04:50 +0000
+
+    - add bug ID from Red Hat bugzilla, for tracking
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit aec5c7bb10976306ae93ab7c779021a3333059d0
+Author: Nalin Dahyabhai 
+Date:   2003-02-20 02:03:59 +0000
+
+    grab input focus on button 1 press (#106573).
+    
+    * src/vte.c(vte_terminal_button_press): grab input focus on button 1 press
+            (#106573).
+
+ ChangeLog | 4 ++++
+ src/vte.c | 5 +++++
+ 2 files changed, 9 insertions(+)
+
+commit fa3e8778902c5aa0b713806649ef2dbf47fc03db
+Author: Dmitry Mastrukov 
+Date:   2003-02-19 05:29:16 +0000
+
+    be.po: Updated Belarusian translation from Belarusian team .
+
+ po/ChangeLog |   5 +++
+ po/be.po     | 103 ++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 58 insertions(+), 50 deletions(-)
+
+commit 76fc436de6e05670fb5b8e515ddb88ae8d093ee4
+Author: Nalin Dahyabhai 
+Date:   2003-02-18 20:54:21 +0000
+
+    add missing chunk of fix for backtab.
+    
+    * src/vte.c(vte_terminal_sequence_handler_bt): add missing chunk of fix for
+            backtab.
+
+ ChangeLog | 12 ++++++++----
+ src/vte.c |  2 +-
+ 2 files changed, 9 insertions(+), 5 deletions(-)
+
+commit e66f980c1658bdc351bb15b99d193391e6ad7319
+Author: Nalin Dahyabhai 
+Date:   2003-02-18 20:19:03 +0000
+
+    turn on update debugging if VTE_DEBUG_FLAGS includes "updates"
+    
+    * src/vte.c: turn on update debugging if VTE_DEBUG_FLAGS includes "updates"
+
+ ChangeLog | 4 ++++
+ src/vte.c | 5 +++++
+ 2 files changed, 9 insertions(+)
+
+commit 823156b3627d3909961b4227601552255fbdc266
+Author: Nalin Dahyabhai 
+Date:   2003-02-18 20:00:56 +0000
+
+    add map entries for unmodified digit keypresses.
+    
+    * src/keymap.c: add map entries for unmodified digit keypresses.
+
+ ChangeLog    | 3 +++
+ src/keymap.c | 7 +++++++
+ 2 files changed, 10 insertions(+)
+
+commit b68f5e0c3b9b1dcebf6999d51f663bfcee2c153a
+Author: Nalin Dahyabhai 
+Date:   2003-02-18 19:54:03 +0000
+
+    use the default cursor by default, so that we don't look weird to people
+    
+    * src/vte.c(vte_terminal_match_add): use the default cursor by default, so that
+            we don't look weird to people who aren't used to the cursor changing
+            this way.
+    * configure.in: forcibly define VTE_DEBUG to "1" when we define it.
+
+ ChangeLog    | 6 ++++++
+ configure.in | 2 +-
+ src/vte.c    | 2 +-
+ 3 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 21445a9551e1095985eb462d520f70cf0805325c
+Author: Nalin Dahyabhai 
+Date:   2003-02-18 19:39:24 +0000
+
+    emit focus-event signals from the accessible peer when the widget receives
+    
+    * src/vteaccess.c: emit focus-event signals from the accessible peer when the
+            widget receives focus-in and focus-out events, noted by Marc Mulcahy.
+
+ ChangeLog       |  5 +++++
+ src/vteaccess.c | 38 ++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 43 insertions(+)
+
+commit 52adc5f44e7f5052b2d09f7ccde3641d3681ba3c
+Author: Roozbeh Pournader 
+Date:   2003-02-18 14:13:16 +0000
+
+    Added "fa" to ALL_LINGUAS. Added Persian translation.
+    
+    2003-02-18  Roozbeh Pournader  
+    
+            * configure.in: Added "fa" to ALL_LINGUAS.
+            * po/fa.po: Added Persian translation.
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   4 ++
+ po/fa.po     | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 127 insertions(+), 1 deletion(-)
+
+commit 8e04e2c5fb3c4aa1de1b409849a665a777448b85
+Author: Nalin Dahyabhai 
+Date:   2003-02-18 05:42:59 +0000
+
+    add vte_terminal_match_set_cursor() (#105986).
+    
+    * src/vte.c, src/vte.h: add vte_terminal_match_set_cursor() (#105986).
+
+ ChangeLog    |  3 +++
+ src/vte.c    | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ src/vte.h    |  3 +++
+ src/vteapp.c | 11 +++++++--
+ 4 files changed, 85 insertions(+), 8 deletions(-)
+
+commit a66a003c78bd9f62156bd05f12ed8dfc636ab9f5
+Author: Nalin Dahyabhai 
+Date:   2003-02-18 05:02:07 +0000
+
+    add @LDFLAGS@ to all of the LDADD clauses, hopefully fixing #105415.
+    
+    * src/Makefile.am: add @LDFLAGS@ to all of the LDADD clauses, hopefully fixing
+            #105415.
+
+ ChangeLog       |  4 ++++
+ src/Makefile.am | 38 +++++++++++++++++++-------------------
+ 2 files changed, 23 insertions(+), 19 deletions(-)
+
+commit ac5cd9d1304365f387eee101ae800ac4ab8b5076
+Author: Nalin Dahyabhai 
+Date:   2003-02-18 03:49:08 +0000
+
+    recognize and discard invalid arguments (#57453).
+    
+    * src/vte.c(vte_terminal_sequence_handler_cs): recognize and discard invalid
+            arguments (#57453).
+
+ ChangeLog | 4 ++++
+ src/vte.c | 9 ++++++++-
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+commit 84f96c1bde40309c8cb99e4a52d657e433cf26a4
+Author: Nalin Dahyabhai 
+Date:   2003-02-18 03:47:25 +0000
+
+    add map entries for Ctrl+digit keys (#106193).
+    
+    * src/keymap.c: add map entries for Ctrl+digit keys (#106193).
+
+ ChangeLog    |  3 +++
+ src/keymap.c | 38 ++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 41 insertions(+)
+
+commit e1e2a6d50606d0387a6d5de88472db5d808588bc
+Author: Alessio Frusciante 
+Date:   2003-02-17 18:48:03 +0000
+
+    Added Italian translation by Francesco Marletta.
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/it.po     | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 135 insertions(+), 1 deletion(-)
+
+commit 8b32ee71caaf29151f8435bddc41ffac9120c118
+Author: Christian Rose 
+Date:   2003-02-16 20:04:45 +0000
+
+    Some fixes for problems catched in translation review.
+    
+    2003-02-16  Christian Rose  
+    
+            * sv.po: Some fixes for problems catched in translation review.
+
+ po/ChangeLog |  4 ++++
+ po/sv.po     | 48 ++++++++++++++++++++++++------------------------
+ 2 files changed, 28 insertions(+), 24 deletions(-)
+
+commit f8eee3ec7d03156a978257091842f8d98a55cbca
+Author: Dmitry Mastrukov 
+Date:   2003-02-16 09:36:02 +0000
+
+    configure.in: Added Belarusian to ALL_LINGUAS.
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit c81f504ecc19d0e8b27fcc4cbe11aca4a402de9c
+Author: Dmitry Mastrukov 
+Date:   2003-02-16 09:34:32 +0000
+
+    be.po: Added Belarusian translation from Belarusian team .
+
+ po/ChangeLog |   5 +++
+ po/be.po     | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 122 insertions(+)
+
+commit f475bd7c28d5e60b1f06b3e49b4a716cfe29cc5b
+Author: Nalin Dahyabhai 
+Date:   2003-02-14 22:32:10 +0000
+
+    fix to move back to the leftmost column if there are no previous tabstops,
+    
+    * src/vte.c(vte_terminal_sequence_handler_bt): fix to move back to the leftmost
+            column if there are no previous tabstops, exercised by make menuconfig.
+    * src/vte.c(vte_terminal_background_update): handle pixbufs with n_channels!=3.
+
+ ChangeLog |  9 +++++++++
+ src/vte.c | 20 ++++++++++++--------
+ 2 files changed, 21 insertions(+), 8 deletions(-)
+
+commit 7064407de5e5fbb7e6c088f4b3e7194a71d17373
+Author: Nalin Dahyabhai 
+Date:   2003-02-14 21:58:18 +0000
+
+    handle width masks now that we're encoding widths for all characters.
+    
+    * src/interpret.c: handle width masks now that we're encoding widths for all
+            characters.
+
+ ChangeLog       | 4 ++++
+ src/interpret.c | 3 +++
+ 2 files changed, 7 insertions(+)
+
+commit c2d6924c3abdeb850e4577d374251e6ca8b35ab7
+Author: Nalin Dahyabhai 
+Date:   2003-02-14 21:36:13 +0000
+
+    - would help if i actually made the changes i changelogged
+
+ src/vte.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+commit 2cff982aaf3dd6daafe4a9bb5576bdf2da34b3cb
+Author: Nalin Dahyabhai 
+Date:   2003-02-14 21:35:09 +0000
+
+    more comments to keep myself from getting confused later.
+    
+    * src/vte.c: more comments to keep myself from getting confused later.
+
+ ChangeLog | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 893ea4cf83cb8ec6108282ecd248a0bd28d1adc9
+Author: Nalin Dahyabhai 
+Date:   2003-02-14 04:46:08 +0000
+
+    change the coalescing timeout to 2ms.
+    
+    * src/vte.c: change the coalescing timeout to 2ms.
+
+ ChangeLog | 3 +++
+ src/vte.c | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit b1aa5c0f6c40edb37b33d46f14c5a5f485998195
+Author: Nalin Dahyabhai 
+Date:   2003-02-14 03:50:48 +0000
+
+    attempt to coalesce data received within about 10ms to reduce load on the
+    
+    * src/vte.c(vte_terminal_io_read): attempt to coalesce data received
+            within about 10ms to reduce load on the X server on systems where the
+            scheduler wakes us up as soon as we have a few bytes available.  Based
+            on a suggested fix by msw.
+    * src/vte.c(vte_terminal_io_read): never free buf, it's not a heap
+            variable any more.  Spotted by msw.
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 57 +++++++++++++++++++++++++++++++++++++++------------------
+ 2 files changed, 47 insertions(+), 18 deletions(-)
+
+commit 7373a8e881f8095290e83c429d25447794b8e910
+Author: Nalin Dahyabhai 
+Date:   2003-02-13 07:16:04 +0000
+
+    close fd leak. close potential fd leak.
+    
+    * src/vte.c(vte_terminal_finalize): close fd leak.
+    * src/vte.c(vte_terminal_fork_command): close potential fd leak.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 2 ++
+ 2 files changed, 6 insertions(+)
+
+commit 67af1979229dac9b5964a85eb268447d0a1c6773
+Author: Nalin Dahyabhai 
+Date:   2003-02-13 07:00:21 +0000
+
+    handle cases where the widget has no data and returns NULL when we ask for
+    
+    * src/reflect.c(main): handle cases where the widget has no data and returns
+            NULL when we ask for it.
+
+ ChangeLog     |  4 ++++
+ src/reflect.c | 17 ++++++++++++-----
+ 2 files changed, 16 insertions(+), 5 deletions(-)
+
+commit 4996c0113b4398cd5b0e93e3327c1bac9a161b4a
+Author: Nalin Dahyabhai 
+Date:   2003-02-13 06:57:16 +0000
+
+    do a complete read of the widget before we start off in main to ensure we
+    
+    * src/reflect.c(main): do a complete read of the widget before we start off in
+            main to ensure we have accurate data.
+    * src/vteaccess.c(vte_terminal_accessible_update_private_data_if_needed): only
+            attempt to free the previous snapshot if it existed.
+
+ ChangeLog       |  6 ++++++
+ src/reflect.c   | 11 +++++++++++
+ src/vteaccess.c |  4 +++-
+ 3 files changed, 20 insertions(+), 1 deletion(-)
+
+commit 89b529fe5b38082668fd39cd165bb091910a6187
+Author: Nalin Dahyabhai 
+Date:   2003-02-13 06:50:02 +0000
+
+    connect to signals before any get emitted. use a GString to store snapshot
+    
+    * src/reflect.c(main): connect to signals before any get emitted.
+    * src/vteaccess.c: use a GString to store snapshot text so that we always have
+            proper length information.
+
+ ChangeLog       |   5 ++
+ src/reflect.c   |  15 ++--
+ src/vteaccess.c | 211 ++++++++++++++++++++++++++++++++++----------------------
+ 3 files changed, 141 insertions(+), 90 deletions(-)
+
+commit 879e4921f21b3cea65f24042e657f600c4f2d430
+Author: Nalin Dahyabhai 
+Date:   2003-02-13 05:01:28 +0000
+
+    spit out a warning if we receive an out-of-range text_changed::delete
+    
+    * src/reflect.c(text_changed_delete): spit out a warning if we receive an
+            out-of-range text_changed::delete signal.
+
+ ChangeLog     | 4 ++++
+ src/reflect.c | 7 ++++++-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+commit ac69abef64b2412c1c322d1a09bd2cd8b56e457a
+Author: Nalin Dahyabhai 
+Date:   2003-02-11 20:21:43 +0000
+
+    add data for tracking ambiguous-width Unicode characters. add
+    
+    * src/genwidths, src/uniwidths: add data for tracking ambiguous-width Unicode
+            characters.
+    * src/iso2022.c, src/iso2022.h: add _vte_iso2022_is_ambiguous() for checking if
+            a character is ambiguous, and _vte_iso2022_ambiguous_width() for
+            guessing how wide it should be based on the current locale.  Rename
+            _vte_iso2022_get/set_width to ...encoded_width to clarify the intent,
+            ditto for the related macros.
+    * src/table.c,src/trie.c: use renamed macros for reading encoded widths.
+    * src/iso2022.c(_vte_iso2022_substitute_single,_vte_iso2022_substitute): handle
+            ambiguous widths properly, and always encode a width.
+    * src/Makefile.am: use the default LDFLAGS, I think.
+    * src/vte.c,src/vte.h: add vte_terminal_set_background_tint_color().
+    * src/vte.c(vte_terminal_unrealize): unhook from background update sources,
+            because we may not have a display after that.
+    * src/vte.c(vte_terminal_size_allocate): only queue a background update if
+            we're in transparent mode and either we've been moved or we have no
+            background yet.  If our size changed, force a repaint.
+    * src/vte.c(vte_sequence_handler_window_manipulation): snip off the padding
+            along the edges when responding to requests for the window size and
+            location -- apps have no way to query it.
+    * src/vte.c(vte_terminal_get_text_range): skip over fragments properly.
+    * src/vte.c(vte_terminal_draw_row): skip over fragments properly.
+    * src/vte.c(vte_unichar_width): rework in terms of the width checking in the
+            iso2022 module for consistency.
+
+ ChangeLog        |  26 ++
+ src/Makefile.am  |   4 +-
+ src/genwidths.py |  35 +++
+ src/iso2022.c    | 147 +++++++---
+ src/iso2022.h    |   9 +-
+ src/table.c      |   2 +-
+ src/trie.c       |   2 +-
+ src/uniwidths    | 813 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vte.c        | 138 ++++++++--
+ src/vte.h        |   2 +
+ src/vteapp.c     |   4 +-
+ 11 files changed, 1103 insertions(+), 79 deletions(-)
+
+commit c186027e089e5be9ed12549b17a687b5d1940e59
+Author: Fatih Demir 
+Date:   2003-02-10 23:34:42 +0000
+
+    Take over
+
+ po/ChangeLog |  4 ++++
+ po/tr.po     | 33 +++++++++++++++++----------------
+ 2 files changed, 21 insertions(+), 16 deletions(-)
+
+commit b45da7449756cccb42925ff2c4dbe7e749cc736f
+Author: Christian Rose 
+Date:   2003-02-06 10:58:25 +0000
+
+    Added "id" to ALL_LINGUAS. Added Indonesian translation by Mohammad Damt
+    
+    2003-02-06  Christian Rose  
+    
+            * configure.in: Added "id" to ALL_LINGUAS.
+            * po/id.po: Added Indonesian translation by
+            Mohammad Damt .
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/id.po     | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 128 insertions(+), 1 deletion(-)
+
+commit f993ce6f67f53208bb56f4968581bbe39cf29016
+Author: Nalin Dahyabhai 
+Date:   2003-02-03 21:17:13 +0000
+
+    suppress background updates if we haven't moved and the background image
+    
+    * src/vte.c(vte_terminal_size_allocate): suppress background updates if we
+            haven't moved and the background image already exists (#104868).
+
+ ChangeLog |  4 ++++
+ src/vte.c | 11 +++++++++--
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+commit d19a6c9b559eefe1aa6ba07a4d09c560a4c07b3b
+Author: Nalin Dahyabhai 
+Date:   2003-01-31 23:06:35 +0000
+
+    - include iso2022.txt in dist tarballs
+
+ src/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 1faa076d553ebaa21c014659a844e444c99ee0f7
+Author: Nalin Dahyabhai 
+Date:   2003-01-31 21:39:52 +0000
+
+    - refer to the bug ID in the changelog for reference
+
+ ChangeLog | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 1cd5c0ae59bc7ba40b35e7ee9f7e0f00c231a7c7
+Author: Nalin Dahyabhai 
+Date:   2003-01-31 21:33:45 +0000
+
+    always update the cursor position, in case text was added or removed
+    
+    * src/vteaccess.c(vte_terminal_accessible_update_private_data_if_needed): always
+            update the cursor position, in case text was added or removed without
+            the cursor itself moving.
+    * src/vteaccess.c(vte_terminal_accessible_get_text_somewhere): don't emit a
+            warning when the caller attempts to read the Nth character when we have
+            only 0 to N-1, just return an empty string.
+    * src/vteaccess.c(vte_terminal_accessible_new): make the terminal peer a weak
+            pointer.
+    * src/vteaccess.c(vte_terminal_accessible_finalize): if the terminal peer is
+            not NULL, disconnect it as a weak pointer and don't bother
+            disconnecting from its signals.  Add a debug message.
+    * src/vteaccess.c(vte_terminal_accessible_text_finalize):  Add a debug message.
+    * src/vte.c(vte_terminal_get_accessible): keep a weak pointer to the accessible
+            peer instead of a static pointer.
+    * src/vte.c(vte_terminal_finalize): if the accessible peer still exists, remove
+            its weak pointer before attempting to unref it.
+    * src/vte.c: rename accessible_exists member to accessible_emit, which more
+            accurately reflects its purpose.
+
+ ChangeLog       |  21 +++++++++
+ src/vte.c       |  42 +++++++++++-------
+ src/vteaccess.c | 134 ++++++++++++++++++++++++++++++++++----------------------
+ 3 files changed, 129 insertions(+), 68 deletions(-)
+
+commit cbf9f0bc1e91e608411054a8e966d888cbcb85b7
+Author: Nalin Dahyabhai 
+Date:   2003-01-31 05:40:51 +0000
+
+    rename to vte_unichar_is_graphic, to match conventions used elsewhere.
+    
+    * src/vte.c(vte_unichar_isgraphic): rename to vte_unichar_is_graphic, to match
+            conventions used elsewhere.
+    * src/vte.c(vte_unichar_is_graphic): count 0xa3, 0x3c0, 0x2592, 0x25ae, 0x25c6
+            as graphic characters.
+    * src/iso2022.txt: add sample text using character set 0.
+
+ ChangeLog       |  7 +++++++
+ src/iso2022.txt |  2 ++
+ src/vte.c       | 64 +++++++++++++++++++++++++++++++++------------------------
+ 3 files changed, 46 insertions(+), 27 deletions(-)
+
+commit 055bf01d7b607dba481c6f455bdcb44866de310d
+Author: Fatih Demir 
+Date:   2003-01-30 22:38:19 +0000
+
+    Added tr.po
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   4 ++
+ po/tr.po     | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 128 insertions(+), 1 deletion(-)
+
+commit 7d9071b4c7679f4cdf55dca224063d0a38d01647
+Author: Nalin Dahyabhai 
+Date:   2003-01-30 20:17:36 +0000
+
+    added, for scaring people away. bump to 0.11.x for development. reset
+    
+    * MESSAGE-OF-DOOM: added, for scaring people away.
+    * vte.spec: bump to 0.11.x for development.
+    * src/mev.c(main): reset modes before quitting.
+    * src/vte.c(vte_terminal_button_press): don't always extend selection when not
+            in event mode.
+
+ ChangeLog       |  7 +++++++
+ MESSAGE-OF-DOOM |  2 ++
+ src/mev.c       |  1 +
+ src/vte.c       | 25 +++++++++++++++----------
+ vte.spec        |  5 ++++-
+ 5 files changed, 29 insertions(+), 11 deletions(-)
+
+commit 9f27709de010cf2201b446d3844f0ef96e673e45
+Author: Nalin Dahyabhai 
+Date:   2003-01-28 22:57:42 +0000
+
+    make debugging support an explicit option to configure. don't
+    
+    * configure.in: make debugging support an explicit option to configure.  don't
+            automatically enable debugging in maintainer mode.
+
+ ChangeLog    | 4 ++++
+ configure.in | 7 +++++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 7f016144749814330cc1341686ca61a6d5d73198
+Author: Kostas Papadimas 
+Date:   2003-01-28 12:27:41 +0000
+
+    Added the Greek translation
+
+ configure.in |   2 +-
+ po/ChangeLog |   4 ++
+ po/el.po     | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 133 insertions(+), 1 deletion(-)
+
+commit 3039b05b8ff4856c58eeeecc6554b064f26c5d12 (tag: vte_0_10_15)
+Author: Nalin Dahyabhai 
+Date:   2003-01-28 04:25:53 +0000
+
+    0.10.15
+
+ vte.spec | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit edb193f416aea41a8f063d498ce8c7acc428b4c9
+Author: Nalin Dahyabhai 
+Date:   2003-01-27 20:23:20 +0000
+
+    create the "invisible" cursor using a bitmap instead of a pixmap, changing
+    
+    * src/vte.c(vte_terminal_realize): create the "invisible" cursor using a bitmap
+            instead of a pixmap, changing it from a 1x1 black square to nothing.
+
+ ChangeLog |  5 +++++
+ src/vte.c | 17 ++++++++---------
+ 2 files changed, 13 insertions(+), 9 deletions(-)
+
+commit 7bbce6d00d4d0ef9f23951891b71f10364c51a2f
+Author: Nalin Dahyabhai 
+Date:   2003-01-27 19:39:28 +0000
+
+    make the various mouse event modes mutually-exclusive, because apps expect
+    
+    * src/vte.c(vte_terminal_decset_internal): make the various mouse event modes
+            mutually-exclusive, because apps expect them to be (#104395).
+    * src/vte.c: add a prototype for vte_terminal_background_update before it is
+            used to silence a compiler warning.
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 35 +++++++++++++++++++++++++++++++++++
+ 2 files changed, 41 insertions(+)
+
+commit 1c61da0b49035be2e28e3beb4a10641c1b365fe1
+Author: Nalin Dahyabhai 
+Date:   2003-01-27 07:12:17 +0000
+
+    force a background update immediately when we realize instead of queuing
+    
+    * src/vte.c(vte_terminal_realize): force a background update immediately when
+            we realize instead of queuing it up (#104381).
+
+ ChangeLog         |   4 ++++
+ doc/vttest.tar.gz | Bin 96645 -> 98911 bytes
+ src/vte.c         |   7 ++++---
+ 3 files changed, 8 insertions(+), 3 deletions(-)
+
+commit 99e8871a2dccab82b3ddac1dfbcd04b4e847e798
+Author: Daniel Yacob 
+Date:   2003-01-26 17:19:36 +0000
+
+    Adding am to ALL_LINGUAS.
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 666e9ecf796c093725bcf2fef03636ba1c800d47
+Author: Nalin Dahyabhai 
+Date:   2003-01-24 21:34:25 +0000
+
+    fix declaration order (#104290).
+    
+    * src/vte.c(vte_terminal_background_update): fix declaration order (#104290).
+
+ ChangeLog | 4 ++++
+ src/vte.c | 4 ++--
+ vte.spec  | 3 +++
+ 3 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 37e0796872438e0a18f40888ba02ccb8478dc20c
+Author: Nam SungHyun 
+Date:   2003-01-24 01:50:19 +0000
+
+    Added Korean translation
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   4 ++
+ po/ko.po     | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 126 insertions(+), 1 deletion(-)
+
+commit d13920ab879e141735705de293645efd47075827 (tag: vte_0_10_14)
+Author: Nalin Dahyabhai 
+Date:   2003-01-23 20:28:49 +0000
+
+    recognize and ignore attempts to set text properties 21 and 2L, whatever
+    
+    * src/caps.c, src/vte.c: recognize and ignore attempts to set text properties
+            21 and 2L, whatever those are (possible workaround #104154).
+
+ ChangeLog  | 4 ++++
+ src/caps.c | 7 +++++++
+ src/vte.c  | 2 ++
+ 3 files changed, 13 insertions(+)
+
+commit 70fdc1ad481cbb03459f3d39c363914b4d1b2150
+Author: Nalin Dahyabhai 
+Date:   2003-01-23 19:17:41 +0000
+
+    accept "1" and "2" as aliases for "B" (#104257).
+    
+    * src/iso2022.c: accept "1" and "2" as aliases for "B" (#104257).
+
+ ChangeLog     | 3 +++
+ src/iso2022.c | 6 +++---
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+commit 47c0ace41d57c34c329fa7554d914119fc516e2a
+Author: Nalin Dahyabhai 
+Date:   2003-01-23 16:39:21 +0000
+
+    check for curses if we don't have ncurses (the order is ncurses, curses,
+    
+    * configure.in: check for curses if we don't have ncurses (the order is ncurses,
+            curses, libtermcap), as Solaris has neither ncurses nor libtermcap.
+            Reported by Brian Cameron.
+    * src/keymap.c, src/ssfe.c: accept either curses or ncurses as equivalent.
+
+ ChangeLog    |  7 +++++++
+ configure.in |  5 ++++-
+ src/keymap.c | 16 +++++++++++++---
+ src/ssfe.c   |  9 +++++++++
+ 4 files changed, 33 insertions(+), 4 deletions(-)
+
+commit c9311b5af92cbd2a02fc55751c1361a9809adf55
+Author: Nalin Dahyabhai 
+Date:   2003-01-23 02:29:11 +0000
+
+    add mev. don't home the cursor automatically. fix sense of shift
+    
+    * src/Makefile.am, src/mev.c: add mev.
+    * src/vte.c(vte_sequence_handler_clear_screen): don't home the cursor
+            automatically.
+    * src/vte.c(vte_terminal_button_pressed): fix sense of shift overriding event
+            mode.  Ignore double- and triple-click in event mode.
+    * src/vte.c(vte_terminal_scroll): in event mode, send button release events to
+            the terminal if it's expecting them.
+    * src/vte.c(vte_terminal_send_mouse_button_internal): clamp coordinates to
+            existing cells.
+    * src/vte.c(vte_terminal_maybe_send_mouse_drag): compare integral cell locations
+             not floating point, when choosing whether or not to drop events in cell
+            tracking mode.  Don't lose the modifiers.
+    * src/vte.c(vte_terminal_motion_notify): don't autoscroll in events mode.
+
+ ChangeLog |  16 +++++
+ src/mev.c |   2 +-
+ src/vte.c | 211 +++++++++++++++++++++++++++++++++++++-------------------------
+ vte.spec  |   5 +-
+ 4 files changed, 147 insertions(+), 87 deletions(-)
+
+commit eceb38869510751724daf815fa0e072a4e032380
+Author: Nalin Dahyabhai 
+Date:   2003-01-23 02:16:35 +0000
+
+    - add mev for testing mouse event handling
+
+ src/Makefile.am |   5 +-
+ src/mev.c       | 306 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 310 insertions(+), 1 deletion(-)
+
+commit f39e281529827f68fd0e9bba41785d66a21efc1c
+Author: Nalin Dahyabhai 
+Date:   2003-01-22 21:35:22 +0000
+
+    accept OSC{number};{string}ST as set-text-parameters, per XTerm docs (part
+    
+    * src/caps.c: accept OSC{number};{string}ST as set-text-parameters, per XTerm
+            docs (part of #104154).
+    * src/keymap.c: revert change to prepend "1;" to keys with modifiers (#104139).
+
+ ChangeLog    |  6 ++++++
+ src/caps.c   | 20 ++++++++++++++++++++
+ src/keymap.c | 13 +++++++++++++
+ 3 files changed, 39 insertions(+)
+
+commit 63941dffa610f8dac423c059eab909615d5cc7b9
+Author: Christian Rose 
+Date:   2003-01-22 02:52:35 +0000
+
+    Added "mn" to ALL_LINGUAS. Added Mongolian translation by Sanlig Badral
+    
+    2003-01-22  Christian Rose  
+    
+            * configure.in: Added "mn" to ALL_LINGUAS.
+            * po/mn.po: Added Mongolian translation by
+            Sanlig Badral .
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/mn.po     | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 130 insertions(+), 1 deletion(-)
+
+commit af66ba4781d72e69993c97b9406251747277a7c2 (tag: vte_0_10_13)
+Author: Nalin Dahyabhai 
+Date:   2003-01-22 00:01:37 +0000
+
+    streamline background images and transparency handling, should use less
+    
+    * src/vte.c: streamline background images and transparency handling, should use
+            less memory now.
+
+ ChangeLog |   4 +
+ src/vte.c | 409 +++++++++++++++++++++++++++++++-------------------------------
+ vte.spec  |   5 +-
+ 3 files changed, 215 insertions(+), 203 deletions(-)
+
+commit 150031c0479bfeede84df08ac9f5f77bb6c333af
+Author: Yuri Syrota 
+Date:   2003-01-21 13:24:48 +0000
+
+    Updated Ukrainian translation
+
+ po/ChangeLog |  4 ++++
+ po/uk.po     | 71 ++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 40 insertions(+), 35 deletions(-)
+
+commit 58740a58c331d5232175f197ca5edd1761a9f0c0
+Author: Kjartan Maraas 
+Date:   2003-01-21 10:26:55 +0000
+
+    Updated translation.
+    
+    2003-01-21  Kjartan Maraas  
+    
+            * no.po: Updated translation.
+
+ po/ChangeLog |  4 ++++
+ po/no.po     | 52 ++++++++++++++++++++++++++--------------------------
+ 2 files changed, 30 insertions(+), 26 deletions(-)
+
+commit 770515f1fb9d075b8b4ed778f32c4aa99cb41cc7
+Author: Nalin Dahyabhai 
+Date:   2003-01-21 02:58:27 +0000
+
+    add some debugging messages if REFLECT_VERBOSE is set in the environment.
+    
+    * src/reflect.c: add some debugging messages if REFLECT_VERBOSE is set in the
+            environment.
+
+ ChangeLog     |  4 ++++
+ src/reflect.c | 15 +++++++++++++++
+ 2 files changed, 19 insertions(+)
+
+commit 83c4f654fefd5132acb8e28af3bb4730bb23d4da
+Author: Nalin Dahyabhai 
+Date:   2003-01-21 01:03:21 +0000
+
+    add reflect-text-view, for testing with GtkTextView for sanity's sake.
+    
+    * src/Makefile.am, src/reflect.c: add reflect-text-view, for testing with
+            GtkTextView for sanity's sake.
+
+ ChangeLog       |   4 +
+ src/Makefile.am |   8 +-
+ src/reflect.c   | 291 ++++++++++++++++++++++++++++++++++++--------------------
+ 3 files changed, 199 insertions(+), 104 deletions(-)
+
+commit b21d6bae6bb46d27a3805d91b642b96435bd109c
+Author: Nalin Dahyabhai 
+Date:   2003-01-20 23:54:23 +0000
+
+    account for get_text() including zero bytes
+
+ ChangeLog     | 3 +++
+ src/reflect.c | 8 ++++++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 8f80b565ffd0fe2f49126e8155137e48970b3ab5
+Author: Nalin Dahyabhai 
+Date:   2003-01-20 22:24:33 +0000
+
+    try to build reflect with both vte and libzvt, building a useless binary
+    
+    * configure.in, src/Makefile.am, src/reflect.c: try to build reflect with both
+            vte and libzvt, building a useless binary if libzvt isn't available.
+
+ ChangeLog       |   5 +++
+ configure.in    |   9 +++++
+ src/Makefile.am |  17 ++++++--
+ src/reflect.c   | 117 ++++++++++++++++++++++++++++++++++++++++++++++++--------
+ 4 files changed, 129 insertions(+), 19 deletions(-)
+
+commit d6c649e3051395bdc7dbdd7b45d675168bd2a9a0
+Author: Christian Neumair 
+Date:   2003-01-20 21:45:47 +0000
+
+    Updated German translation.
+
+ po/ChangeLog |  4 ++++
+ po/de.po     | 18 +++++++++---------
+ 2 files changed, 13 insertions(+), 9 deletions(-)
+
+commit 555e25cbdf12f82599e3ea084dd4dd1f7f6d9744 (tag: vte_0_10_12)
+Author: Nalin Dahyabhai 
+Date:   2003-01-20 19:32:31 +0000
+
+    - 0.10.12
+
+ vte.spec | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 34a05c36e09189e5490165dd87098e2b1eacd05d
+Author: Nalin Dahyabhai 
+Date:   2003-01-20 18:00:57 +0000
+
+    colors 90-97 and 100-107 are bold colors, noted and patched by Matthijs
+    
+    * src/vte.c: colors 90-97 and 100-107 are bold colors, noted and patched by
+            Matthijs Melchior (#103874).
+
+ ChangeLog | 4 ++++
+ src/vte.c | 4 ++--
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit d41f9d2e300ba017568c8f4cb04178c7fe3a7318
+Author: Christian Neumair 
+Date:   2003-01-20 15:00:57 +0000
+
+    Updated German translation.
+
+ po/ChangeLog |  4 ++++
+ po/de.po     | 66 ++++++++++++++++++++++++++++++------------------------------
+ 2 files changed, 37 insertions(+), 33 deletions(-)
+
+commit ad595ccefeeb972235212bdb813c8c99dd4929e5
+Author: Andraz Tori 
+Date:   2003-01-20 14:17:40 +0000
+
+    Updated Slovenian translation
+
+ po/sl.po | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 127 insertions(+)
+
+commit 8889fda6835ef47a40a7c1eb1e6423d91afe4084
+Author: Andraz Tori 
+Date:   2003-01-20 14:17:14 +0000
+
+    Added sl language
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit aa6b3ee0537d8689fe27e4335d7ca62c6377dcc8
+Author: He Qiangqiang 
+Date:   2003-01-19 10:14:52 +0000
+
+    Added "zh_CN" (Simplified Chinese) to ALL_LINGUAS.
+    
+    2003-01-19  He Qiangqiang  
+    
+            * configure.in: Added "zh_CN" (Simplified Chinese) to ALL_LINGUAS.
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 075a993ca1ac0275db4112d6bab62003dd7f2df7
+Author: He Qiangqiang 
+Date:   2003-01-19 10:13:31 +0000
+
+    Added Simplified Chinese translation.
+    
+    2003-01-19  He Qiangqiang  
+    
+            * zh_CN.po: Added Simplified Chinese translation.
+
+ po/ChangeLog |   4 ++
+ po/zh_CN.po  | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 122 insertions(+)
+
+commit 5d63957b1ec97e8779f943db4aab4f77f959bd1a
+Author: Marius Andreiana 
+Date:   2003-01-19 09:08:03 +0000
+
+    added ( thanks to Mişu Moldovan )
+    
+    2003-01-19  Marius Andreiana 
+    
+            * ro.po: added ( thanks to Mişu Moldovan )
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   4 ++
+ po/ro.po     | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 126 insertions(+), 1 deletion(-)
+
+commit e315ed3d477d04f026d3dbf84c777cf552c822af
+Author: Nalin Dahyabhai 
+Date:   2003-01-18 18:17:25 +0000
+
+    if the caret is past the end of the text, count unichars properly. Compute
+    
+    * src/vteaccess.c(update_private_data_if_needed): if the caret is past the end
+            of the text, count unichars properly.  Compute the caret location
+            correctly.
+    * src/reflect.c: handle text-caret-moved signals and display the caret.
+
+ ChangeLog       |  6 ++++++
+ src/reflect.c   | 62 ++++++++++++++++++++++++++++++++++++++++++++++-----------
+ src/vteaccess.c |  6 +++---
+ 3 files changed, 59 insertions(+), 15 deletions(-)
+
+commit 7bffb2af8a9349e020926b8123cc49195600705e
+Author: Nalin Dahyabhai 
+Date:   2003-01-18 17:54:29 +0000
+
+    update copyright dates. add. add reflect (noinst). always return a string,
+    
+    * src/iso2022.c: update copyright dates.
+    * src/reflect.c: add.
+    * src/Makefile.am: add reflect (noinst).
+    * src/vteaccess.c(vte_terminal_accessible_get_text): always return a string,
+            even if it's zero-length.  Properly detect and handle requests that go
+            right up to the last byte.
+
+ ChangeLog       |   8 +++
+ src/Makefile.am |   8 ++-
+ src/iso2022.c   |   2 +-
+ src/reflect.c   | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vteaccess.c |  14 ++---
+ 5 files changed, 189 insertions(+), 11 deletions(-)
+
+commit bbd18ebc5ace0f8991d24ea86e3f285dc3c3e30c
+Author: Andras Timar 
+Date:   2003-01-18 13:57:21 +0000
+
+    Added "hu" to ALL_LINGUAS.
+    
+    2003-01-18 Andras Timar  
+    
+            * configure.in: Added "hu" to ALL_LINGUAS.
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit dee84bdbec6809a85c51cd5e10324cb2fa3770a4
+Author: Andras Timar 
+Date:   2003-01-18 13:56:10 +0000
+
+    Added Hungarian translation.
+    
+    2003-01-18  Andras Timar  
+    
+            * hu.po: Added Hungarian translation.
+
+ po/ChangeLog |   4 ++
+ po/hu.po     | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 122 insertions(+)
+
+commit db227e0f456bc4fc6ade0a59b9da0d0b547f3db5
+Author: Nalin Dahyabhai 
+Date:   2003-01-17 23:46:42 +0000
+
+    emit a "text-modified" signal, because what you see changes when you
+    
+    * src/vte.c(vte_terminal_set_size): emit a "text-modified" signal, because what
+            you see changes when you resize the terminal.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 2 ++
+ 2 files changed, 6 insertions(+)
+
+commit 3c35fddb8baaa2b45935fe9de31ef090bf62e9eb (tag: vte_0_10_11)
+Author: Nalin Dahyabhai 
+Date:   2003-01-17 21:05:01 +0000
+
+    don't draw cursors below or above the screen, correctly compute the clear
+    
+    * src/vte.c(vte_terminal_paint): don't draw cursors below or above the screen,
+            correctly compute the clear area when drawing the cursor, if we're
+            ignoring padding in general because we're monospaced, also ignore it
+            when drawing the character under the cursor.
+    * src/vte.c(vte_terminal_io_read): eliminate dead code.
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 42 +++++++++++++++++++-----------------------
+ vte.spec  |  5 ++++-
+ 3 files changed, 30 insertions(+), 24 deletions(-)
+
+commit b63075c2f4a5adf2df94edf6bf698372112ee94e
+Author: Nalin Dahyabhai 
+Date:   2003-01-17 20:24:58 +0000
+
+    if we don't find an entry for the requested key, and the terminal type is
+    
+    * src/keymap.c(_vte_keymap_map): if we don't find an entry for the requested
+            key, and the terminal type is "xterm", retry using "xterm-xfree86",
+            possible fix for #103713.
+    * src/vte.c(vte_terminal_draw_row): fix handling of items with width != 1 when
+            computing runs.
+
+ ChangeLog    |  7 +++++++
+ src/keymap.c | 66 +++++++++++++++++++++++++++++++++---------------------------
+ src/vte.c    | 18 ++++++++---------
+ 3 files changed, 52 insertions(+), 39 deletions(-)
+
+commit 379f1192131d2ec2d8a730270d8917c2776a1c0c
+Author: Nalin Dahyabhai 
+Date:   2003-01-17 17:17:56 +0000
+
+    fix boneheaded "config.h" instead of "../config.h" include, pointed out by
+    
+    * src/iso2022.c: fix boneheaded "config.h" instead of "../config.h" include,
+            pointed out by Dan Mills and Brian Cameron.
+
+ ChangeLog     | 4 ++++
+ src/iso2022.c | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 6c8b4466a4e0f0da6df299912561ec44c6d753d2
+Author: Nalin Dahyabhai 
+Date:   2003-01-16 20:54:06 +0000
+
+    fix test for whether or not we need to check for termcap override default
+    
+    * configure.in: fix test for whether or not we need to check for termcap
+    * src/Makefile.am: override default includes to not prepend "." to the include
+            path, so that we can include the system  properly
+    * src/keymap.c: define the ncurses scratch buffer for use when we're using
+            termcap
+
+ ChangeLog       | 7 +++++++
+ configure.in    | 2 +-
+ src/Makefile.am | 1 +
+ src/keymap.c    | 2 +-
+ 4 files changed, 10 insertions(+), 2 deletions(-)
+
+commit 83bfe383d12564645a0fbfae7109547adf3e0c6b
+Author: Nalin Dahyabhai 
+Date:   2003-01-16 20:38:29 +0000
+
+    actually disable attempts to build python bindings if pygtk-2.0 isn't
+    
+    * configure.in: actually disable attempts to build python bindings if pygtk-2.0
+            isn't found at configure-time (#103676)
+
+ ChangeLog    | 4 ++++
+ configure.in | 5 +++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 01b3cea2a01f9fb7545a125da4cbbd46f58ea143
+Author: Gustavo Noronha Silva 
+Date:   2003-01-15 21:50:27 +0000
+
+    translation update
+
+ po/ChangeLog |  5 +++++
+ po/pt_BR.po  | 54 +++++++++++++++++++++++++++---------------------------
+ 2 files changed, 32 insertions(+), 27 deletions(-)
+
+commit 5fd4b4c42d9db88113c25f248cee8cf54cdf8916
+Author: Nalin Dahyabhai 
+Date:   2003-01-14 20:39:11 +0000
+
+    if a key sequence which needs modifiers doesn't have a numeric part, add
+    
+    * src/keymap.c(_vte_keymap_key_add_key_modifiers): if a key sequence which
+            needs modifiers doesn't have a numeric part, add "1" as the numeric
+            part before adding the modifiers.  Spotted by msw.
+
+ ChangeLog    |  5 +++++
+ src/keymap.c | 10 ++++++----
+ 2 files changed, 11 insertions(+), 4 deletions(-)
+
+commit 9277fb39dcac5740dfce4b819989e661910917f7 (tag: vte_0_10_10)
+Author: Nalin Dahyabhai 
+Date:   2003-01-14 06:33:14 +0000
+
+    add _vte_ring_insert_preserve(), which scrolls lost items off the top
+    
+    * src/ring.c, src/ring.h: add _vte_ring_insert_preserve(), which scrolls lost
+            items off the top instead of the bottom, as _vte_ring_insert() does.
+    * src/slowcat.c (catfile): check that we didn't read an EOF before attempting
+            to write it.  Skip the more complicated checks and just check that the
+            file pointer isn't stdin before closing it.
+    * src/ssfe.c: cleanups.
+    * src/vte.c(vte_sequence_handler_sf): add lines to the scrollback area when
+            scrolling is restricted but the top line of the area is the topmost
+            visible line (Red Hat #75900).
+
+ ChangeLog       |  12 ++
+ src/Makefile.am |   6 +-
+ src/ring.c      |  70 ++++++++-
+ src/ring.h      |   1 +
+ src/slowcat.c   |   7 +-
+ src/ssfe.c      | 442 ++++++++++++++++++++++++--------------------------------
+ src/vte.c       |  41 +++++-
+ vte.spec        |   6 +-
+ 8 files changed, 314 insertions(+), 271 deletions(-)
+
+commit 2690bc906a221d3cc295a92405e25720cb5e5da9
+Author: Nalin Dahyabhai 
+Date:   2003-01-14 04:52:56 +0000
+
+    initial checkin
+
+ src/ssfe.c | 1316 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 1316 insertions(+)
+
+commit a75a825c95122f5617b1fd5f571be9c922af7130 (tag: vte_0_10_9)
+Author: Nalin Dahyabhai 
+Date:   2003-01-14 03:04:30 +0000
+
+    don't switch terminal modes before or after echoing bytes -- doing so
+    
+    * src/nativeecho.c, src/utf8echo.c: don't switch terminal modes before or after
+            echoing bytes -- doing so confuses me now.
+    * src/vte.c: make use of '?' to mark invalid data a compile-time define.
+    * src/vteaccess.c(vte_terminal_accessible_text_scrolled): properly handle
+            scrolling events with delta less than the window size (more of #95901).
+    * src/vteaccess.c(vte_terminal_accessible_finalize): disconnect from
+            text-inserted, text-deleted, text-modified, text-scrolled, cursor-moved,
+            window-title-changed on finalize.
+    * src/vte.c(vte_terminal_key_press,vte_terminal_key_release,
+            vte_terminal_button_press,vte_terminal_button_release,
+            vte_terminal_motion_notify,vte_terminal_focus_in,vte_terminal_focus_out,
+            vte_terminal_scroll): track event modifiers in an object-local modifier
+            variable.
+    * src/vte.c(vte_terminal_key_press): always steal key events from the input
+            method if the meta key is down (#96006).  Don't munge the cursor or
+            keypad modes before passing them to the keymapping routines.  Stop
+            overriding the cursor mode on NumLock (doesn't appear to work as
+            documented in other terminals, needed to modify the keymap mode anyway
+            (#96364)).
+    * configure.in: define HAVE_XFT whenever HAVE_XFT2 is defined -- they're more
+            or less compatible (#103130).
+
+ ChangeLog        |  24 +++++++
+ configure.in     |   7 +-
+ src/keymap.c     |   8 +--
+ src/keymap.h     |   6 +-
+ src/nativeecho.c |   4 --
+ src/utf8echo.c   |  13 +---
+ src/vte.c        | 189 ++++++++++++++++++++++++++++-------------------------
+ src/vteaccess.c  | 193 +++++++++++++++++++++++++++++++++++++++----------------
+ vte.spec         |   7 +-
+ 9 files changed, 280 insertions(+), 171 deletions(-)
+
+commit 7c28dd92e7d9568ba90f76d0112612c466b25335
+Author: Gil Osher 
+Date:   2003-01-11 16:27:45 +0000
+
+    Updated Hebrew translation.
+    
+    
+    * he.po: Updated Hebrew translation.
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 7dba9a9754677636fd47dda2522b7e95f7650aa8
+Author: Gil Osher 
+Date:   2003-01-11 16:27:17 +0000
+
+    *** empty log message ***
+
+ po/he.po | 67 +++++++++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 37 insertions(+), 30 deletions(-)
+
+commit 05bed110e54213c094b7eb1ef4da09661bfaa232
+Author: Kwok-Koon Cheung 
+Date:   2003-01-10 15:44:53 +0000
+
+    new traditional Chinese translation
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   4 ++
+ po/zh_TW.po  | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 126 insertions(+), 1 deletion(-)
+
+commit f1d99bd8d9239c49e18e78eeef9fca09f2b9137a
+Author: Dmitry Mastrukov 
+Date:   2003-01-10 09:28:30 +0000
+
+    ru.po: Updated Russian translation from Russian team .
+
+ po/ChangeLog |  5 +++++
+ po/ru.po     | 62 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 38 insertions(+), 29 deletions(-)
+
+commit 0a5be0c584e80068b0869f2caa929f6c0861a4d8
+Author: Dmitry Mastrukov 
+Date:   2003-01-10 06:02:39 +0000
+
+    configure.in: Added Russian to ALL_LINGUAS
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 804faa007422c51ddf14f2315fc2e7b044b72f65
+Author: Dmitry Mastrukov 
+Date:   2003-01-10 06:01:13 +0000
+
+    ru.po: Added Russian translation from Russian team 
+
+ po/ChangeLog |   5 +++
+ po/ru.po     | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 124 insertions(+)
+
+commit 479bed1e2c10cd89824648de3b5ed6a3843eede7
+Author: Nalin Dahyabhai 
+Date:   2003-01-09 20:31:26 +0000
+
+    disable the python bindings if we can't find python, from Brian Cameron.
+    
+    * configure.in: disable the python bindings if we can't find python, from
+            Brian Cameron.
+
+ ChangeLog    | 4 ++++
+ configure.in | 5 ++++-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit b7989a1e86f33119d62f10a2abc8b2ae74af5dbd
+Author: Vincent van Adrighem 
+Date:   2003-01-09 14:07:03 +0000
+
+    Dutch translation updated by Kees van den Broek.
+    
+    2003-01-09 Vincent van Adrighem 
+            * nl.po: Dutch translation updated by Kees van den Broek.
+
+ po/nl.po | 58 ++++++++++++++++++++++++++++++----------------------------
+ 1 file changed, 30 insertions(+), 28 deletions(-)
+
+commit 98d26faf90b03fc378b1368f681258685ecc7122
+Author: Nalin Dahyabhai 
+Date:   2003-01-09 06:57:30 +0000
+
+    - add missing bug number
+
+ ChangeLog | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9820448f044cce4cb85b877d250dc6181772c830
+Author: Nalin Dahyabhai 
+Date:   2003-01-09 06:56:01 +0000
+
+    Only suppress meta-sends-escape on Backspace if backspace is mapped to the
+    
+    * src/vte.c(vte_terminal_key_press): Only suppress meta-sends-escape on
+            Backspace if backspace is mapped to the delete sequence.
+    * src/vte.c: don't just skip reading data if selection is in progress -- we
+            wedge if we do that (#101739).  Instead, temporarily stop reading from
+            the child pty.
+    * src/vte.c(vte_terminal_open_font_xft): if we get NULL when matching fonts,
+            use the desired pattern's name when displaying an error, preventing a
+            NULL dereference (#96769).
+    * configure.in: make building of python modules depend on configure having been
+            run with --enable-python. make --enable-python the default.  Fix an
+            indentation error in the version check which chokes Python 2.2.2.
+    * src/vte.h, src/vte.c: add new signals to VteTerminalClass (NOTE: may break
+            ABI, so might as well add some padding)
+    * src/vteaccess.c: be more precise about locations in text_changed signals
+            (part of #95901)
+    * src/vte.c: get more selective about when we consider it necessary to emit
+            text-insert and text-delete events.
+
+ ChangeLog                   |  21 +++
+ configure.in                |  52 +++---
+ doc/reference/tmpl/vte.sgml |  40 ++++-
+ src/marshal.list            |   1 +
+ src/vte.c                   | 406 ++++++++++++++++++++++++++++++++++----------
+ src/vte.h                   |  20 ++-
+ src/vteaccess.c             | 277 +++++++++++++++++++++++++++---
+ 7 files changed, 671 insertions(+), 146 deletions(-)
+
+commit 41a9d6abe0b47ca8461e41afa1ad957e92368b3d
+Author: Daniel Yacob 
+Date:   2003-01-07 16:16:27 +0000
+
+    Updated Amharic translation.
+
+ po/ChangeLog |   4 ++
+ po/am.po     | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 123 insertions(+)
+
+commit a1385fbda90ec79fb9281e3575124fc3c742b124
+Author: Nalin Dahyabhai 
+Date:   2003-01-07 06:34:27 +0000
+
+    Use a lookup table instead of a mess of floating point math when
+    
+    * src/vte.c(vte_terminal_setup_background): Use a lookup table instead of a
+            mess of floating point math when desaturating images.
+
+ ChangeLog |  4 ++++
+ src/vte.c | 13 ++++++++-----
+ 2 files changed, 12 insertions(+), 5 deletions(-)
+
+commit 58834f228eeed3159eb32fb783a5f0df2064e6d5
+Author: Nalin Dahyabhai 
+Date:   2003-01-06 22:22:20 +0000
+
+    Add the periodic blinking refresh with the normal timeout instead of 0 to
+    
+    * src/vte.c(vte_terminal_init): Add the periodic blinking refresh with the
+            normal timeout instead of 0 to avoid wedging when we get created
+            without focus.  Fix suggested by Dennis Haney (#102701).
+
+ ChangeLog |  5 +++++
+ src/vte.c | 14 +++++++++++---
+ 2 files changed, 16 insertions(+), 3 deletions(-)
+
+commit 708387339d57555c2bcba4815d5463d009a82ea4 (tag: vte_0_10_8)
+Author: Nalin Dahyabhai 
+Date:   2003-01-06 18:03:27 +0000
+
+    Use a simple XftPatternGetString/GetDouble pair instead of XftNameUnparse,
+    
+    * src/vte.c: Use a simple XftPatternGetString/GetDouble pair instead of
+            XftNameUnparse, which isn't in older versions of Xft (#101142).
+    * src/vte.c: Add a flag to VteTerminalPrivate which we can use to keep track
+            of modifications, particularly if they remove text, and toggle it in
+            several sequence handlers.
+    * src/vte.c(vte_terminal_process_incoming): Also emit the "contents changed"
+            signal when the modified flag is TRUE, not enough to fix #95901, but
+            at least making some forward progress.
+
+ ChangeLog    |  10 ++++++
+ configure.in |   9 ++---
+ src/vte.c    | 105 ++++++++++++++++++++++++++++++++++++++++++++++-------------
+ vte.spec     |   9 +++--
+ 4 files changed, 104 insertions(+), 29 deletions(-)
+
+commit a34f417e92a025a3f2837a386f1ad04baa31e878
+Author: Pauli Virtanen 
+Date:   2003-01-05 16:13:05 +0000
+
+    Added "fi" (Finnish).
+    
+    2003-01-05  Pauli Virtanen 
+    
+            * configure.in (ALL_LINGUAS): Added "fi" (Finnish).
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 154e9f234a3494ff37c67dffcaa888a99bfa54c4
+Author: Pauli Virtanen 
+Date:   2003-01-05 16:11:01 +0000
+
+    Added Finnish translation.
+    
+    2003-01-05  Pauli Virtanen 
+    
+            * fi.po: Added Finnish translation.
+
+ po/ChangeLog |   4 ++
+ po/fi.po     | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 131 insertions(+)
+
+commit 3de85ba7e7948f7ece876608c5f5e804c5430f58
+Author: Stanislav Visnovsky 
+Date:   2003-01-04 14:47:42 +0000
+
+    Added sk (Slovak). Added Slovak translation.
+    
+    2003-01-04  Stanislav Visnovsky  
+    
+            * configure.in: (ALL_LINGUAS) Added sk (Slovak).
+            * po/sk.po: Added Slovak translation.
+
+ ChangeLog    |   5 +++
+ configure.in |   2 +-
+ po/ChangeLog |   4 ++
+ po/sk.po     | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 136 insertions(+), 1 deletion(-)
+
+commit 06000507e286d2ee446807bb9000513459107dff
+Author: Benjamin Greiner 
+Date:   2003-01-04 14:23:36 +0000
+
+    *** empty log message ***
+
+ po/ChangeLog |  4 ++++
+ po/de.po     | 49 ++++++++++++++++++++++++++-----------------------
+ 2 files changed, 30 insertions(+), 23 deletions(-)
+
+commit 6bf1e20d62c5a71f83a79859cd11f56739d7602f
+Author: Nalin Dahyabhai 
+Date:   2003-01-03 01:05:05 +0000
+
+    - fix compile failure on systems where ncurses isn't detected
+
+ src/keymap.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d7a0c47ad37ee451625c94250528e6aca82f8522
+Author: Nalin Dahyabhai 
+Date:   2003-01-03 00:55:53 +0000
+
+    look for libncurses or libtermcap include other libraries (ncurses,
+    
+    * configure.in: look for libncurses or libtermcap
+    * vte.pc.in: include other libraries (ncurses, termcap, socket, whatever) in
+            the list of libraries.
+    * src/keymap.c(_vte_keymap_map): for Home and End, consult libncurses or
+            libtermcap if we have no hard-wired mapping and there's none in the
+            termcap file.  Should fix #100472, even in cases where Home and End
+            vary wildly from what I've got on my box.
+    * src/keymap.c: rename cursor/fkey_normal to cursor/fkey_default, which makes a
+            little more sense.
+
+ ChangeLog    |  11 +++
+ configure.in |   8 ++
+ src/keymap.c | 239 +++++++++++++++++++++++++++++++++++++----------------------
+ vte.pc.in    |   2 +-
+ 4 files changed, 171 insertions(+), 89 deletions(-)
+
+commit 3b4a3853390a7a511640c969fde72e072a72a808
+Author: Chyla Zbigniew 
+Date:   2003-01-02 12:52:02 +0000
+
+    Updated Polish translation by GNOME PL Team 
+
+ po/pl.po | 36 ++++++++++++++++++++++--------------
+ 1 file changed, 22 insertions(+), 14 deletions(-)
+
+commit 6d59ba9114dfd6bf955e8759e9af5b99017114e3
+Author: Chyla Zbigniew 
+Date:   2003-01-02 01:18:51 +0000
+
+    Added Polish translation by GNOME PL Team 
+
+ po/ChangeLog |   5 +++
+ po/pl.po     | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 129 insertions(+)
+
+commit 517047a162133a750153cff0ab6ee08cb3efc22a
+Author: Zbigniew Chyla 
+Date:   2003-01-02 01:17:53 +0000
+
+    Added pl (Polish).
+    
+    
+    2003-01-02  Zbigniew Chyla  
+    
+            * configure.in: (ALL_LINGUAS) Added pl (Polish).
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 72dbc564def2a70760f89ff559a3dad0106951e0
+Author: Pablo Saratxaga 
+Date:   2002-12-27 15:29:40 +0000
+
+    updated Vietnamese file
+
+ po/ChangeLog |  4 ++++
+ po/vi.po     | 54 +++++++++++++++++++++++++++++-------------------------
+ 2 files changed, 33 insertions(+), 25 deletions(-)
+
+commit dc65d7207e3b38d457ff8ca1e7d26ee4a442c99b
+Author: Peteris Krisjanis 
+Date:   2002-12-25 13:52:10 +0000
+
+    Artis Trops   * lv.po: Updated Latvian translation.
+
+ po/ChangeLog |  4 ++++
+ po/lv.po     | 65 +++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 38 insertions(+), 31 deletions(-)
+
+commit 50e4222072ab5123d7f642889a814da9a647790e
+Author: Peteris Krisjanis 
+Date:   2002-12-22 18:59:49 +0000
+
+    2002-12-22  Artis Trops  * lv.po: Added Latvian translation.
+
+ po/ChangeLog |   4 ++
+ po/lv.po     | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 124 insertions(+)
+
+commit df42d07d7e6d7274bb54dbd270033e6b8fdcad15
+Author: Peteris Krisjanis 
+Date:   2002-12-22 18:58:34 +0000
+
+    2002-12-22  Artis Trops  * configure.in: Added Latvian (lv) to ALL_LINGUAS.
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 27eccc58d997fbc070d2b2784a7d40eae301d509
+Author: Jordi Mallach 
+Date:   2002-12-21 15:27:24 +0000
+
+    Updated Catalan translation.
+
+ po/ChangeLog |   4 ++
+ po/ca.po     | 120 ++++++++++++++++++++++++++++++++++-------------------------
+ 2 files changed, 74 insertions(+), 50 deletions(-)
+
+commit 78c22fb051aca21f168f95a3827df6e23b8dad71
+Author: Yanko Kaneti 
+Date:   2002-12-19 12:37:14 +0000
+
+    Added Bulgarian (bg).
+    
+    2002-12-19  Yanko Kaneti 
+    
+            * configure.in: (ALL_LINGUAS) Added Bulgarian (bg).
+    
+    po/
+    
+            * bg.po (added): Added Bulgarian translation by
+            Alexander Shopov .
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/bg.po     | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 137 insertions(+), 1 deletion(-)
+
+commit 142ffbccd627993cb5c4a607db7c092d84179c59
+Author: Nalin Dahyabhai 
+Date:   2002-12-18 20:02:42 +0000
+
+    issue a warning if Xft2 and Xft aren't found. if we're not
+    
+    * configure.in: issue a warning if Xft2 and Xft aren't found.
+    * src/vte.c (vte_terminal_paint): if we're not double-buffered, clear the
+            drawing area before we draw text.
+    * src/vteapp.c: add -2 to toggle double-buffering for testing.
+
+ ChangeLog       | 6 ++++++
+ configure.in    | 4 +++-
+ src/table.c     | 7 -------
+ src/vte.c       | 6 ++++++
+ src/vteaccess.c | 2 --
+ src/vteapp.c    | 9 +++++++--
+ 6 files changed, 22 insertions(+), 12 deletions(-)
+
+commit 1fed413308e2a349f6d30c7862c61be527f5f63d
+Author: German Poo Caaman~o 
+Date:   2002-12-18 00:33:14 +0000
+
+    Updated Spanish translation
+    
+    2002-12-17  German Poo Caaman~o 
+    
+            * es.po: Updated Spanish translation
+
+ po/ChangeLog |   4 +++
+ po/es.po     | 100 +++++++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 60 insertions(+), 44 deletions(-)
+
+commit 77fbea95fe7cb71ef2c3d243a83f3a6a50785d25
+Author: Nalin Dahyabhai 
+Date:   2002-12-16 19:51:20 +0000
+
+    wire Shift+Home/Shift+End to scroll-to-top and scroll-to-bottom.
+    
+    * src/vte.c (vte_terminal_key_press): wire Shift+Home/Shift+End to
+            scroll-to-top and scroll-to-bottom.
+
+ ChangeLog |  4 ++++
+ src/vte.c | 29 +++++++++++++++++++++++++++++
+ 2 files changed, 33 insertions(+)
+
+commit 2df06c897e3e395ddfff915aba1fd758377a2362
+Author: Miloslav Trmac 
+Date:   2002-12-16 19:37:03 +0000
+
+    Update Czech translation
+
+ po/ChangeLog |  4 ++++
+ po/cs.po     | 44 ++++++++++++++++++++++----------------------
+ 2 files changed, 26 insertions(+), 22 deletions(-)
+
+commit e2f100b4474f7209a48821ce49da55dde33e3fa0
+Author: Hasbullah Bin Pit 
+Date:   2002-12-16 08:20:37 +0000
+
+    Updated Malay Translation.
+    
+    2002-12-16  Hasbullah Bin Pit 
+    
+            * ms.po: Updated Malay Translation.
+
+ po/ChangeLog |  4 ++++
+ po/ms.po     | 39 +++++++++++++++++++++------------------
+ 2 files changed, 25 insertions(+), 18 deletions(-)
+
+commit 5336ad683728d60a65536993420ec1af605102bc
+Author: Christophe Merlet 
+Date:   2002-12-15 16:18:02 +0000
+
+    Updated French translation.
+
+ po/ChangeLog |  4 ++++
+ po/fr.po     | 52 ++++++++++++++++++++++++++++------------------------
+ 2 files changed, 32 insertions(+), 24 deletions(-)
+
+commit 72709ee7c4076339ecbe5cd27827060d303a3589
+Author: Nalin Dahyabhai 
+Date:   2002-12-14 00:40:53 +0000
+
+    add a short test program. use hard values instead of GDK defines in the 0
+    
+    * src/buffer.c: add a short test program.
+    * src/iso2022.c: use hard values instead of GDK defines in the 0 map.  Add
+            _vte_iso2022_substitute_single() for performing a single mapping
+            operation.
+    * src/vte.c: use _vte_iso2022_substitute_single() instead of a local mapping
+            table when mapping line-drawing charset data, simplifies maintenance
+            of the mapping.
+
+ ChangeLog       |  11 ++++-
+ README          |   4 ++
+ src/Makefile.am |   6 ++-
+ src/buffer.c    | 103 +++++++++++++++++++++++++++++++++++++++++
+ src/buffer.h    |   2 +
+ src/iso2022.c   |  43 ++++++++++++++++--
+ src/iso2022.h   |   1 +
+ src/vte.c       | 139 ++------------------------------------------------------
+ vte.spec        |   5 +-
+ 9 files changed, 173 insertions(+), 141 deletions(-)
+
+commit ac59012c87307e7f0d51e4d89a14619fde47bfc2
+Author: Pablo Saratxaga 
+Date:   2002-12-13 10:37:33 +0000
+
+    Added Catalan file
+
+ ChangeLog    |   4 +++
+ configure.in |   3 +-
+ po/ChangeLog |   4 +++
+ po/ca.po     | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 123 insertions(+), 1 deletion(-)
+
+commit 28fe2ba6946deb75828ccab219ea4f671ae86385
+Author: Christian Rose 
+Date:   2002-12-13 03:22:16 +0000
+
+    Updated Swedish translation.
+    
+    2002-12-13  Christian Rose  
+    
+            * sv.po: Updated Swedish translation.
+
+ po/ChangeLog |  4 ++++
+ po/sv.po     | 16 +++++++++++-----
+ 2 files changed, 15 insertions(+), 5 deletions(-)
+
+commit b7773ffb08ae7a40aacc7bc8d53a0405558fbe60
+Author: Ole Laursen 
+Date:   2002-12-12 20:19:01 +0000
+
+    Updated Danish translation.
+    
+    2002-12-12  Ole Laursen  
+    
+            * da.po: Updated Danish translation.
+
+ po/ChangeLog |  4 ++++
+ po/da.po     | 13 ++++++++-----
+ 2 files changed, 12 insertions(+), 5 deletions(-)
+
+commit 926bbe1d96a595fb90264123aa79cfed1e7011eb (tag: vte_0_10_7)
+Author: Nalin Dahyabhai 
+Date:   2002-12-11 20:13:25 +0000
+
+    define VTE_USE_GNOME_PTY_HELPER if use of the helper is enabled at
+    
+    * configure.in: define VTE_USE_GNOME_PTY_HELPER if use of the helper is enabled
+            at compile-time (enabled by default).
+    * src/iso2022.c(_vte_iso2022_substitute): force characters received in the
+            line-drawing map to have width = 1 (more #99603), so that we can
+            distinguish them from line-drawing characters received in eucXX, which
+            have width = 2.
+    * src/vte.c(vte_terminal_insert_char): when mapping from line-drawing to
+            gunichars, force a width of 1.
+    * src/vte.c(vte_terminal_process_incoming): extend the bounding box for updates
+            one cell further to the right, in case the cursor is in a cell which
+            contains a wide character.
+    * src/pty.c(_vte_pty_start_helper): spit out a warning if the helper isn't
+            installed.
+    * src/pty.c: don't compile in any gnome-pty-helper-specific code if
+            VTE_USE_GNOME_PTY_HELPER isn't defined.
+
+ ChangeLog     | 17 ++++++++++++++++
+ configure.in  |  1 +
+ po/cs.po      | 45 +++++++++++++++++++++++------------------
+ po/da.po      | 45 +++++++++++++++++++++++------------------
+ po/de.po      | 45 +++++++++++++++++++++++------------------
+ po/fr.po      | 45 +++++++++++++++++++++++------------------
+ po/ms.po      | 45 +++++++++++++++++++++++------------------
+ po/nl.po      | 45 +++++++++++++++++++++++------------------
+ po/no.po      | 45 +++++++++++++++++++++++------------------
+ po/pt_BR.po   | 45 +++++++++++++++++++++++------------------
+ po/sv.po      | 45 +++++++++++++++++++++++------------------
+ po/uk.po      | 65 +++++++++++++++++++++++++++++++++--------------------------
+ po/vi.po      | 45 +++++++++++++++++++++++------------------
+ src/iso2022.c |  7 +++++++
+ src/pty.c     | 14 +++++++++++++
+ src/vte.c     | 51 ++++++++++++++++++++++++++++++++++++++++------
+ vte.spec      | 11 ++++++++--
+ 17 files changed, 379 insertions(+), 237 deletions(-)
+
+commit 18d3d0fbdb83a33107b92d77963a9e99e652e9df (tag: vte_0_10_6)
+Author: Nalin Dahyabhai 
+Date:   2002-12-10 22:36:29 +0000
+
+    centralize buffer length sanity checks, add some utility functions for
+    
+    * src/buffer.c, src/buffer.h: centralize buffer length sanity checks, add some
+            utility functions for stuffing things into buffers and pulling them
+            back out.
+    * src/debug.c, src/debug.h: add a lifecycle debug class, for tracking
+            down initialization order weirdness.
+    * src/pty.c: try to check that we can run the pty helper before trying to run
+            it, to avoid SIGPIPE failures when it's not installed.
+    * src/vte.c: never grab focus -- let the shell app deal with it.  Return TRUE
+            from mouse motion and press/release events to keep them from being
+            passed up.
+
+ ChangeLog     |  12 +++++
+ src/buffer.c  | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
+ src/buffer.h  |  25 +++++++++-
+ src/debug.c   |   3 ++
+ src/debug.h   |   7 +--
+ src/iso2022.h |   2 +-
+ src/pty.c     |   4 ++
+ src/reaper.h  |   1 +
+ src/vte.c     | 109 ++++++++++++++++++++++++++++++++++---------
+ 9 files changed, 270 insertions(+), 39 deletions(-)
+
+commit dd56e470ff18ce4e5c1d924c13b334a147465304
+Author: Vincent van Adrighem 
+Date:   2002-12-10 12:28:45 +0000
+
+    Dutch translation updated by Reinout van Schouwen.
+    
+    2002-12-10  Vincent van Adrighem  
+    
+            * nl.po: Dutch translation updated by Reinout van Schouwen.
+
+ po/ChangeLog |  4 +++
+ po/nl.po     | 87 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 50 insertions(+), 41 deletions(-)
+
+commit 7827e792f2b52ebb1412fd28c345c50649bbe513
+Author: Nalin Dahyabhai 
+Date:   2002-12-10 00:08:54 +0000
+
+    - add
+
+ src/matcher.c | 246 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/matcher.h |  56 +++++++++++++
+ 2 files changed, 302 insertions(+)
+
+commit 8145dde6caaef633abc8478fc0b519d2fab14304
+Author: Nalin Dahyabhai 
+Date:   2002-12-10 00:08:32 +0000
+
+    add "uk" to the list of languages. remove the alternate attribute bit --
+    
+    * configure.in: add "uk" to the list of languages.
+    * src/vte.h: remove the alternate attribute bit -- it's no longer meaningful.
+    * python/vte.override: remove the alternate attribute, add the strikethrough
+            attribute.
+    * src/vte.c (vte_terminal_insert_char): perform drawing character set to
+            Unicode mapping at insertion time if the alternate attribute is set,
+            otherwise discarding the attribute.  If the character being inserted is
+            a graphic character, force its width to 1 or 2 depending on the current
+            codeset (#99603).
+    * src/vte.c (xlfd_from_pango_font_description): take advantage of XftXlfdParse
+            if we were built with Xft, as it appears to handle family aliases.
+    * src/vte.c (vte_terminal_draw_graphic): decide what to draw using Unicode code
+            points (instead of reverse mappings to drawing set), and implement the
+            double-thick versions of many of the existing glyphs.  Return a boolean
+            indicating whether or not we drew something.
+    * src/vte.c (vte_terminal_draw_row): if vte_terminal_draw_graphic() returns
+            FALSE, try to draw the graphic character using the current font.
+    * src/vte.c (vte_terminal_paint): if vte_terminal_draw_graphic() returns FALSE,
+            try to draw the graphic character using the current font.
+    * src/caps.c: add the undocumented default 0 to the OSC set text parameters
+            sequence (#100468).
+    * README: updates.
+    * src/iso2022.c, src/iso2022.h: add a width mask for overriding widths for
+            ambiguous Unicode characters, and _vte_iso2022_get_width() for reading
+            the width, using unused bits in Unicode in a manner similar to
+            http://www.cl.cam.ac.uk/~mgk25/ucs/iso2022-wc.html
+    * src/table.c,src/trie.c: strip out iso2022 widths when extracting parameters
+            of control sequences.
+    * src/vte.c: heed iso2022 widths when inserting characters into the screen
+            buffer, but clear then before storing them so that copy and paste will
+            continue to work.
+    * src/matcher.c, src/matcher.h: add matcher, a wrapper for table and trie, and
+            move _vte_table_narrow_encoding and _vte_table_wide_encoding to this
+            module.
+
+ ChangeLog           |   40 ++
+ README              |    3 +-
+ configure.in        |    2 +-
+ python/vte.override |    8 +-
+ src/Makefile.am     |   24 +-
+ src/caps.c          |    1 +
+ src/interpret.c     |   22 +-
+ src/iso2022.c       |   48 +-
+ src/iso2022.h       |    9 +-
+ src/table.c         |  123 +---
+ src/table.h         |    8 +-
+ src/trie.c          |   37 +-
+ src/trie.h          |    6 -
+ src/utf8echo.c      |    4 +-
+ src/vte.c           | 1733 +++++++++++++++++++++++++++++++--------------------
+ src/vte.h           |    2 +-
+ vte.spec            |   30 +-
+ 17 files changed, 1236 insertions(+), 864 deletions(-)
+
+commit eed823a3a052c0479ef13b3dc234c9a1854aeed6
+Author: Yuri Syrota 
+Date:   2002-12-09 10:18:55 +0000
+
+    Added Ukrainian translations
+
+ po/ChangeLog |   4 +++
+ po/uk.po     | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 119 insertions(+)
+
+commit db15594168bcffb4376d478aaf108afae46de4c5 (tag: vte_0_10_5)
+Author: Nalin Dahyabhai 
+Date:   2002-12-03 07:14:10 +0000
+
+    - don't include the same file twice
+
+ vte.spec | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+commit 9ba3fc164764cfa0b8e0601dddc1cbd0ddd913d3
+Author: Nalin Dahyabhai 
+Date:   2002-12-03 07:04:29 +0000
+
+    - 0.10.5
+
+ vte.spec | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit e039ff2e0cc66c5ba48775a854ed94bad13c9e18
+Author: Nalin Dahyabhai 
+Date:   2002-12-03 06:50:09 +0000
+
+    if TIOCSCTTY is defined, use it, even if it's redundant.
+    
+    * src/pty.c: if TIOCSCTTY is defined, use it, even if it's redundant.
+
+ ChangeLog  |  3 +++
+ src/caps.c |  3 +++
+ src/pty.c  | 10 +++++++++-
+ src/vte.c  |  2 ++
+ 4 files changed, 17 insertions(+), 1 deletion(-)
+
+commit ff4b08b7875103dd976da00f2fba6fcf1addf7de
+Author: Nalin Dahyabhai 
+Date:   2002-12-03 03:49:59 +0000
+
+    update-po change the default from resetting to the terminal's default
+    
+    * po: update-po
+    * src/utf8echo.c: change the default from resetting to the terminal's default
+            encoding before exiting to leaving it alone.  Don't mess with the
+            terminal's encoding if stdout isn't connected to a terminal.
+    * src/nativeecho.c: add, for printing random bytes.
+
+ ChangeLog        |  7 +++++++
+ configure.in     |  2 +-
+ po/cs.po         | 48 +++++++++++++++++++++++-------------------------
+ po/da.po         | 48 +++++++++++++++++++++++-------------------------
+ po/de.po         | 48 +++++++++++++++++++++++-------------------------
+ po/fr.po         | 48 +++++++++++++++++++++++-------------------------
+ po/ms.po         | 48 +++++++++++++++++++++++-------------------------
+ po/nl.po         | 48 +++++++++++++++++++++++-------------------------
+ po/no.po         | 48 +++++++++++++++++++++++-------------------------
+ po/pt_BR.po      | 48 +++++++++++++++++++++++-------------------------
+ po/sv.po         | 48 +++++++++++++++++++++++-------------------------
+ po/vi.po         | 48 +++++++++++++++++++++++-------------------------
+ src/Makefile.am  |  7 ++++++-
+ src/nativeecho.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/utf8echo.c   | 13 +++++++++----
+ src/vte.c        |  2 +-
+ 16 files changed, 308 insertions(+), 257 deletions(-)
+
+commit 672bca9bfb1cf9aee9a077a93711022a3a8bfe9c
+Author: Nalin Dahyabhai 
+Date:   2002-12-03 02:31:11 +0000
+
+    don't zero-fill rows, space-fill them. Don't just fail if the word_chars
+    
+    * src/vte.c: don't zero-fill rows, space-fill them.
+    * src/vte.c(vte_terminal_is_word_char): Don't just fail if the word_chars array
+            doesn't exist.
+
+ ChangeLog |  5 +++++
+ src/vte.c | 32 +++++++++++++++++---------------
+ 2 files changed, 22 insertions(+), 15 deletions(-)
+
+commit 7bf2aecf9a8f3388a7b61f310fb361ccff4bb7d4
+Author: Nalin Dahyabhai 
+Date:   2002-12-03 02:00:45 +0000
+
+    add AC_CHECK_CC_OPT from ac-archive. check for cfmakeraw, sys/select.h,
+    
+    * acinclude.m4: add AC_CHECK_CC_OPT from ac-archive.
+    * configure.in: check for cfmakeraw, sys/select.h, compiler support for -std=
+            (#99698)
+    * doc/boxes.txt: change reference to online Docbook reference to the charts at
+            the Unicode web site.
+    * src/dumpkeys.c: make a best-effort at making a terminal raw on systems where
+            cfmakeraw() isn't available, from patch by Brian Cameron.  Wait for up
+            to 1/50 of a second for more bytes we'll consider to be part of a
+            sequence.
+    * src/pty.c(getpt): ensure that the new terminal is opened in non-blocking mode.
+    * src/trie.c: use g_unichar_digit_value() instead of subtracting '0'.
+    * src/vte.c: don't declare the xft_textitem member on non-Xft2 systems, because
+            it uses an Xft2-specific type (#99685).
+    * src/vteapp.c: add $pkgdatadir/fonts to the font path for use when testing.
+
+ ChangeLog      |  17 +++++++++
+ acinclude.m4   |  36 +++++++++++++++++-
+ configure.in   |  11 +++---
+ doc/boxes.txt  |   2 +-
+ src/dumpkeys.c | 114 +++++++++++++++++++++++++++++++++------------------------
+ src/pty.c      |  47 +++++++++++++++---------
+ src/trie.c     |   3 +-
+ src/vte.c      |  60 +++++++++++++++++++-----------
+ src/vteapp.c   |  17 +++++++++
+ 9 files changed, 212 insertions(+), 95 deletions(-)
+
+commit 1b675f52db6d4595ee8f8faef718994896823106
+Author: Gil Osher 
+Date:   2002-11-27 21:20:52 +0000
+
+    *** empty log message ***
+
+ po/ChangeLog |   4 ++
+ po/he.po     | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 121 insertions(+)
+
+commit 11f812ab830734e54ed9cfc33d957b1002189ce1
+Author: Nalin Dahyabhai 
+Date:   2002-11-26 03:57:10 +0000
+
+    2002-11-25 nalin fix mapping of Unicode code chars 0x252c and 0x2534 which
+    
+    2002-11-25  nalin
+            * src/vte.c: fix mapping of Unicode code chars 0x252c and 0x2534 which
+            incorrectly mixed them up (#99474).
+            * src/iso2022.c: fix mapping of 'v' and 'w' from special graphics to
+            Unicode, which masked the above bug.
+
+ ChangeLog       |  6 +++++
+ doc/Makefile.am |  2 ++
+ doc/boxes.txt   | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ po/cs.po        | 40 +++++++++++++++----------------
+ po/da.po        | 40 +++++++++++++++----------------
+ po/de.po        | 40 +++++++++++++++----------------
+ po/fr.po        | 40 +++++++++++++++----------------
+ po/ms.po        | 40 +++++++++++++++----------------
+ po/nl.po        | 40 +++++++++++++++----------------
+ po/no.po        | 40 +++++++++++++++----------------
+ po/pt_BR.po     | 40 +++++++++++++++----------------
+ po/sv.po        | 40 +++++++++++++++----------------
+ po/vi.po        | 40 +++++++++++++++----------------
+ src/iso2022.c   |  4 ++--
+ src/vte.c       | 39 +++++++++++++++++++-----------
+ vte.spec        |  2 +-
+ 16 files changed, 310 insertions(+), 217 deletions(-)
+
+commit d3d658f80cc52bb9855e94e506c6028b87261c46
+Author: Nalin Dahyabhai 
+Date:   2002-11-26 00:52:58 +0000
+
+    fix cd() to clear using the current colors.
+    
+    * src/vte.c: fix cd() to clear using the current colors.
+
+ ChangeLog |  3 +++
+ src/vte.c | 16 ++++++++++++++++
+ 2 files changed, 19 insertions(+)
+
+commit 34833fb1b8cf7a7b74421f15e102d5ef4f1f3fe4
+Author: Nalin Dahyabhai 
+Date:   2002-11-26 00:40:04 +0000
+
+    add ta back in -- it's not a key sequence.
+    
+    * termcaps/xterm: add ta back in -- it's not a key sequence.
+
+ ChangeLog      | 3 +++
+ termcaps/xterm | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit 8ef12bdb39802275588bad413570175111ef6ef2
+Author: Nalin Dahyabhai 
+Date:   2002-11-26 00:21:05 +0000
+
+    fix cd() to clear to the right of the cursor on the current line instead
+    
+    * src/vte.c: fix cd() to clear to the right of the cursor on the current line
+            instead of the entire line (#98844).
+
+ ChangeLog |  6 +++++-
+ src/vte.c | 20 ++++++++++++++++----
+ 2 files changed, 21 insertions(+), 5 deletions(-)
+
+commit 06b94cbffdefcf91020a10ae0d625cf37f908c71
+Author: Nalin Dahyabhai 
+Date:   2002-11-25 21:54:15 +0000
+
+    need this, too, for future use
+
+ src/genkeysyms.py | 27 +++++++++++++++++++++++++++
+ 1 file changed, 27 insertions(+)
+
+commit 8980298986ca91ea60ba2b7fb4f97c4853e10fb4
+Author: Nalin Dahyabhai 
+Date:   2002-11-25 21:53:46 +0000
+
+    add new file, thanks thunder
+
+ src/keysyms.c | 1254 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 1254 insertions(+)
+
+commit 0607f02e4fd9489d926cb0390f06376b89904779
+Author: Nalin Dahyabhai 
+Date:   2002-11-25 21:44:10 +0000
+
+    add keyboard debug messages when we change keyboard modes. remove kh
+    
+    * src/vte.c: add keyboard debug messages when we change keyboard modes.
+    * termcaps/xterm: remove kh definition.
+
+ ChangeLog      |  4 ++++
+ src/vte.c      | 72 +++++++++++++++++++++++++++++++++++++++++++---------------
+ termcaps/xterm |  2 +-
+ 3 files changed, 59 insertions(+), 19 deletions(-)
+
+commit 969bdcbc7bac0493199ae8266120e8dd3bafef6d
+Author: Nalin Dahyabhai 
+Date:   2002-11-25 21:24:23 +0000
+
+    make keypad arrow keys follow cursor mode (#98604).
+    
+    * src/keymap.c: make keypad arrow keys follow cursor mode (#98604).
+
+ ChangeLog    |  6 +++++-
+ src/keymap.c | 41 ++++++++++++++++++++---------------------
+ src/vte.c    |  4 ++--
+ 3 files changed, 27 insertions(+), 24 deletions(-)
+
+commit 9d1f4447aa9cc6a6ce087765b6c52a331092d93d
+Author: Nalin Dahyabhai 
+Date:   2002-11-25 21:08:28 +0000
+
+    sort out when we add modifiers to keys. Fix Alt+Tab. remove ta definition.
+    
+    * src/keymap.c: sort out when we add modifiers to keys.  Fix Alt+Tab.
+    * termcaps/xterm: remove ta definition.
+
+ ChangeLog      |   4 +++
+ src/keymap.c   | 103 +++++++++++++++++++++++++++++++++------------------------
+ src/keymap.h   |  16 ++++-----
+ src/vte.c      |  24 +++++---------
+ termcaps/xterm |   2 +-
+ 5 files changed, 80 insertions(+), 69 deletions(-)
+
+commit a3aa3d3e6535d49e82af372f6db1b4aee1d1c4d1
+Author: Nalin Dahyabhai 
+Date:   2002-11-25 20:39:20 +0000
+
+    add keyboard debugging class. refresh on Ctrl-L, reset on 'r'. add more
+    
+    * src/debug.c, src/debug.h: add keyboard debugging class.
+    * src/dumpkeys.c: refresh on Ctrl-L, reset on 'r'.
+    * src/keymap.c, src/keymap.h: add more setting combinations, and a simplistic
+            check for more complete coverage.
+    * src/vte.c: add debug messages for keyboard handling.  Improve detection of
+            invalid coordinates as a signal that no text is selected or hilited.
+    * termcaps/xterm.baseline: add a baseline copy of xterm from my termcap, so
+            that I can diff it more easily.
+    * termcaps/xterm: remove key definitions -- xterm's way more complicated than
+            the capability strings suggest.
+
+ ChangeLog               |  13 ++
+ configure.in            |   6 +-
+ src/Makefile.am         |   3 +
+ src/debug.c             |   3 +
+ src/debug.h             |   3 +-
+ src/dumpkeys.c          |  46 +++--
+ src/keymap.c            | 453 +++++++++++++++++++++++++++++++++++++++---------
+ src/keymap.h            |  19 +-
+ src/vte.c               | 166 +++++++++++++-----
+ termcaps/Makefile.am    |   2 +-
+ termcaps/xterm          |  22 +--
+ termcaps/xterm.baseline |  35 ++++
+ 12 files changed, 603 insertions(+), 168 deletions(-)
+
+commit 91a1515e9c6de2e767aa39f8f5e868e9af623fb8
+Author: Nalin Dahyabhai 
+Date:   2002-11-23 00:20:57 +0000
+
+    incorporate more correct check for the right version of gtk-doc (#99314).
+    
+    * configure.in: incorporate more correct check for the right version of
+            gtk-doc (#99314).
+
+ ChangeLog    |  4 ++++
+ configure.in | 22 +++++++++++++++-------
+ 2 files changed, 19 insertions(+), 7 deletions(-)
+
+commit b07db8367684af8339e1d19f4a4a4588ee146158
+Author: Hasbullah BIn Pit 
+Date:   2002-11-17 05:14:31 +0000
+
+    Added "ms" to ALL_LINGUAS. wawa... kumerinduiMu...
+    
+    2002-11-15  Hasbullah BIn Pit 
+    
+            * configure.in: Added "ms" to ALL_LINGUAS.
+    wawa... kumerinduiMu...
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 2529c7639c6d96678ac0f9588c280e4bb7a21ed1
+Author: Hasbullah Bin Pit 
+Date:   2002-11-17 05:12:58 +0000
+
+    Added Malay Translation. wawa....
+    
+    2002-11-16  Hasbullah Bin Pit 
+    
+            * ms.po: Added Malay Translation.
+    wawa....
+
+ po/ChangeLog |   4 ++
+ po/ms.po     | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 122 insertions(+)
+
+commit f232c362aa287a14103b251011690dfcf9caeb3a (tag: vte_0_10_4)
+Author: Nalin Dahyabhai 
+Date:   2002-11-11 21:52:08 +0000
+
+    0.10.4
+
+ src/vte.c | 4 ++--
+ vte.spec  | 5 ++++-
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+commit 7d9fdb7edf0c77af95342f0b1796c05f62e529a9
+Author: Nalin Dahyabhai 
+Date:   2002-11-11 21:34:22 +0000
+
+    ensure that when we select by line, we include all of the last line, even
+    
+    * src/vte.c: ensure that when we select by line, we include all of the last
+            line, even if it's past the edge of the screen.  Snap selection to the
+            beginning or end of a line when selecting lines which don't exist.
+            Only strip off whitespace if there's nothing but whitespace to the right
+            of the selection.  Chuck the non-wrapping selection code.
+
+ ChangeLog |   7 ++
+ README    |   1 -
+ src/vte.c | 218 +++++++++++++++++---------------------------------------------
+ 3 files changed, 67 insertions(+), 159 deletions(-)
+
+commit 81d34a7832606401e7ab35b7dda01f3de57c3471
+Author: Nalin Dahyabhai 
+Date:   2002-11-11 06:05:28 +0000
+
+    properly set the "selecting" flag again when we start selection (#97923).
+    
+    * src/vte.c: properly set the "selecting" flag again when we start selection
+            (#97923).
+
+ ChangeLog | 4 ++++
+ src/vte.c | 1 +
+ 2 files changed, 5 insertions(+)
+
+commit 0e364d3504c1e5536fdaad0ac668aed3cd4e82f9
+Author: Nalin Dahyabhai 
+Date:   2002-11-11 05:48:43 +0000
+
+    rework selection so that word- and line-based selection can wrap like
+    
+    * src/vte.c: rework selection so that word- and line-based selection can wrap
+            like XTerm does (#97057,#97719).
+
+ ChangeLog |  11 ++-
+ src/vte.c | 229 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 230 insertions(+), 10 deletions(-)
+
+commit 48a2e29878b6930e02b2f374b356c3e7f3a0b1f6 (tag: vte_0_10_3)
+Author: Nalin Dahyabhai 
+Date:   2002-11-07 22:52:56 +0000
+
+    doc fixes. use the older alternate-screen decset value. fixup screwups on
+    
+    * src/vte.h: doc fixes.
+    * src/dumpkeys.c: use the older alternate-screen decset value.
+    * src/vte.c: fixup screwups on extending selection.
+
+ ChangeLog                      |  5 +++++
+ Makefile.am                    |  3 ++-
+ doc/reference/tmpl/vte.sgml    | 11 +++++++++++
+ doc/reference/vte-sections.txt |  1 +
+ po/cs.po                       | 40 ++++++++++++++++++++--------------------
+ po/da.po                       | 40 ++++++++++++++++++++--------------------
+ po/de.po                       | 40 ++++++++++++++++++++--------------------
+ po/fr.po                       | 40 ++++++++++++++++++++--------------------
+ po/nl.po                       | 40 ++++++++++++++++++++--------------------
+ po/no.po                       | 40 ++++++++++++++++++++--------------------
+ po/pt_BR.po                    | 40 ++++++++++++++++++++--------------------
+ po/sv.po                       | 40 ++++++++++++++++++++--------------------
+ po/vi.po                       | 40 ++++++++++++++++++++--------------------
+ src/dumpkeys.c                 |  2 +-
+ src/vte.c                      | 14 ++++++--------
+ src/vte.h                      |  2 +-
+ vte.spec                       |  5 ++++-
+ 17 files changed, 211 insertions(+), 192 deletions(-)
+
+commit 562b54d18e0522e18808ef5b98bfc80f7564e62d (tag: vte_0_10_2)
+Author: Nalin Dahyabhai 
+Date:   2002-11-05 22:57:30 +0000
+
+    0.10.2
+
+ vte.spec | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 2a94d48cd9fb205df426db06803e715934213422
+Author: Nalin Dahyabhai 
+Date:   2002-11-05 22:54:20 +0000
+
+    handle end-of-line selection correctly. Stop highlighting selection on
+    
+    * src/vte.c: handle end-of-line selection correctly.  Stop highlighting
+            selection on click, but don't lose it until new text is selected.
+    * python/vte.override: fix binding for set_colors() to properly take a
+            list of colors for the palette (#97682).
+    * src/vte.c, src/vte.h: add increase-font-size and decrease-font-size to allow
+            mimicking XTerm's and Mozilla's behavior on Shift/Control
+            KP_Add/KP_Subtract
+    * src/vteapp.c: handle increase-font-size and decrease-font-size.
+
+ ChangeLog                   |   9 ++
+ doc/reference/tmpl/vte.sgml |  14 ++
+ python/vte.override         |  46 +++++++
+ src/Makefile.am             |   6 +-
+ src/dumpkeys.c              | 308 ++++++++++++++++++++++++++++++++++++++++++
+ src/vte.c                   | 322 ++++++++++++++++++++++----------------------
+ src/vte.h                   |   4 +-
+ src/vteapp.c                |  58 ++++++++
+ 8 files changed, 603 insertions(+), 164 deletions(-)
+
+commit 002f5e5e6ad00199c52869810616350a6c165542
+Author: Robert Brady 
+Date:   2002-11-05 16:33:00 +0000
+
+    Commit uncomitted file
+    
+    Doh. Sorry.
+
+ src/vte.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a175a436c1f7298cce7459337dbf25daedbbadc9
+Author: Abi Brady 
+Date:   2002-11-05 16:06:11 +0000
+
+    Add and implement the strikethrough attribute. Change underline to be
+    
+    2002-11-05  Abi Brady  
+            * src/vte.c: Add and implement the strikethrough attribute.
+            Change underline to be drawn using the ascent, rather than
+            arbritarily putting it two lines above the bottom of the
+            charcell - looks much better with large fonts.
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 42 +++++++++++++++++++++++++++++++++---------
+ 2 files changed, 39 insertions(+), 9 deletions(-)
+
+commit 16dce79ee4f39e35562e33458b4f814a719892c9 (tag: vte_0_10_1)
+Author: Nalin Dahyabhai 
+Date:   2002-11-04 15:49:22 +0000
+
+    be more verbose. add more items to the TODO list so that I don't forget
+    
+    * NEWS: be more verbose.
+    * README: add more items to the TODO list so that I don't forget them.
+    * src/vte.c: ifdef out some of the selection code.
+
+ ChangeLog   |  5 +++++
+ NEWS        | 29 +++++++++++++++++++++--------
+ README      | 16 +++++++++++-----
+ po/cs.po    | 40 ++++++++++++++++++++--------------------
+ po/da.po    | 40 ++++++++++++++++++++--------------------
+ po/de.po    | 40 ++++++++++++++++++++--------------------
+ po/fr.po    | 40 ++++++++++++++++++++--------------------
+ po/nl.po    | 40 ++++++++++++++++++++--------------------
+ po/no.po    | 40 ++++++++++++++++++++--------------------
+ po/pt_BR.po | 40 ++++++++++++++++++++--------------------
+ po/sv.po    | 40 ++++++++++++++++++++--------------------
+ po/vi.po    | 40 ++++++++++++++++++++--------------------
+ src/vte.c   |  8 ++++++++
+ 13 files changed, 225 insertions(+), 193 deletions(-)
+
+commit 1a42a72312a635157d5921fdef1b757816e9d9e1
+Author: Nalin Dahyabhai 
+Date:   2002-10-30 20:36:58 +0000
+
+    add ident tags. don't scroll-to-bottom if we're selecting (#96913).
+    
+    * src/buffer.c, src/iso2022.c, src/vteaccess.c: add ident tags.
+    * src/vte.c: don't scroll-to-bottom if we're selecting (#96913).
+
+ ChangeLog       |  4 +++
+ src/buffer.c    |  1 +
+ src/iso2022.c   |  1 +
+ src/vte.c       | 83 ++++++++++++++++++++++++++++++++++-----------------------
+ src/vteaccess.c |  1 +
+ 5 files changed, 56 insertions(+), 34 deletions(-)
+
+commit 12b3f27976debad67cd40abeb825784a910c8286
+Author: Nalin Dahyabhai 
+Date:   2002-10-30 20:03:22 +0000
+
+    implement iconify, deiconify, raise, lower, maximize, restore, refresh,
+    
+    * src/vteapp.c: implement iconify, deiconify, raise, lower, maximize, restore,
+            refresh, resize, and move signals.
+    * src/vte.c: add vte_terminal_match_remove().
+    * src/vte.c (vte_sequence_handler_cb): clear the current column in addition to
+            columns to the left, spotted by Sam Varshavchik.
+    * src/vte.c:  Use g_array_set_size() to clear arrays instead of removing each
+            element.  Properly initialize new columns with just the default colors
+            and not other attributes (#96978).
+    * src/vte.c (vte_sequence_handler_ta): revert to non-overwriting tabs, otherwise
+            we got occasional drawing artifacts.
+
+ ChangeLog                      |  12 ++
+ HACKING                        |   2 +-
+ NEWS                           |   1 +
+ doc/reference/tmpl/vte.sgml    |   9 ++
+ doc/reference/vte-sections.txt |   1 +
+ src/iso2022.c                  |   6 +-
+ src/iso2022.txt                |   2 +-
+ src/vte.c                      | 273 +++++++++++++++++++++++++++++------------
+ src/vte.h                      |   2 +
+ src/vteapp.c                   | 167 ++++++++++++++++++++++++-
+ vte.spec                       |   5 +-
+ 11 files changed, 391 insertions(+), 89 deletions(-)
+
+commit 810df74cc6b9df3f5605ada6199a9d29954b7fe7
+Author: Abi Brady 
+Date:   2002-10-30 19:33:11 +0000
+
+    Support dim (halfbright) colours. All the infrastructure for this was here
+    
+    2002-10-30  Abi Brady  
+    
+            * src/vte.c, src/vte.h : Support dim (halfbright) colours. All the
+            infrastructure for this was here already (apart from making sure bold
+            and half are mutually exclusive).  Add API set_color_dim, and let
+            set_colors take a palette of size 24.
+
+ ChangeLog |  7 ++++++
+ src/vte.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++----------
+ src/vte.h |  2 ++
+ 3 files changed, 73 insertions(+), 11 deletions(-)
+
+commit 9c335fdd4498e6c10df2f53e369eb8e5fe953513
+Author: Kjartan Maraas 
+Date:   2002-10-29 21:24:43 +0000
+
+    Update
+
+ po/no.po | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit 824414b696954452df80ba0ee38dde997f215a6f
+Author: Abi Brady 
+Date:   2002-10-29 14:11:19 +0000
+
+    Map to UCS, not keysyms. (which differ > 0xff).
+    
+    2002-10-29  Abi Brady  
+    
+            * src/iso2022.c (_vte_iso2022_map_[J4]): Map to UCS, not keysyms.
+            (which differ > 0xff).
+
+ ChangeLog     | 4 ++++
+ src/iso2022.c | 4 ++--
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 471a08467712055d77f845deb972b927cfdda5c8
+Author: Abi Brady 
+Date:   2002-10-28 19:09:08 +0000
+
+    Add line-drawing representation for full block. Draw U+23BA-23BD. Fix
+    
+    2002-10-28  Abi Brady  
+    
+            * src/vte.c: Add line-drawing representation for full block. Draw
+            U+23BA-23BD. Fix drawing of U+23BD (scan line 9) and U+2592
+            (checkerboard) to use bottom line of the charcell, not the top line of
+            the one below.
+    
+            * src/iso2022.c: Complete DEC Special Graphics to Unicode map.
+
+ ChangeLog     |  7 +++++++
+ src/iso2022.c | 19 ++++++++++++++++--
+ src/vte.c     | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ 3 files changed, 83 insertions(+), 5 deletions(-)
+
+commit 241ae1fcc0d989f72cdc4eba073ad3a8e5211df4 (tag: vte_0_10)
+Author: Nalin Dahyabhai 
+Date:   2002-10-25 22:09:29 +0000
+
+    - po file updates
+
+ po/cs.po    | 42 +++++++++++++++++++++---------------------
+ po/da.po    | 42 +++++++++++++++++++++---------------------
+ po/de.po    | 42 +++++++++++++++++++++---------------------
+ po/fr.po    | 42 +++++++++++++++++++++---------------------
+ po/nl.po    | 42 +++++++++++++++++++++---------------------
+ po/no.po    | 42 +++++++++++++++++++++---------------------
+ po/pt_BR.po | 42 +++++++++++++++++++++---------------------
+ po/sv.po    | 42 +++++++++++++++++++++---------------------
+ po/vi.po    | 42 +++++++++++++++++++++---------------------
+ 9 files changed, 189 insertions(+), 189 deletions(-)
+
+commit 25f084882412a537c4a3cc6993027f9707d8cc81
+Author: Nalin Dahyabhai 
+Date:   2002-10-25 22:07:11 +0000
+
+    snip off final newlines when we're matching, they're usually not wanted.
+    
+    * src/vte.c (vte_terminal_match_check_internal): snip off final newlines when
+            we're matching, they're usually not wanted.
+    * src/pty.c, src/pty.h: replace the simpler pty_open() function with a logging
+            version, adding the ability to specify a startup directory (Red Hat
+            #76529).
+    * src/vte.c, src/vte.h: replace the simpler fork_command() function with a
+            logging version, adding the ability to specify a startup directory (Red
+            Hat #76529).
+    * src/vteapp.c: modify call to handle new fork_command().
+    * python/vte.defs: update as above.
+    * python/vte.override: modify call to handle new fork_command(), adding an
+            optional "directory" argument.
+    * src/vte.c: refactor the selection code, cleaning up when selection is
+            cleared/started/extended (#95783).  Grab focus whenever we get button
+            press or release or motion events.
+    * src/vte.c: rework how wide characters are stored to allow storing tabs
+            (#95958).
+    * python/vte.override: wrap vte_terminal_get_text() and
+            vte_terminal_get_text_range().  Based on patch from ha shao (#96230).
+    * src/vte.c, src/vte.h: add a user pointer argument to get_text callbacks
+            (#96230).
+    * src/Makefile.am: bump shared library version because we changed a public
+            function's signature.  Take the opportunity to replace padding fields
+            which had previously been used up.
+
+ ChangeLog                          |   36 +-
+ Makefile.am                        |    5 +-
+ doc/reference/tmpl/pty.sgml        |   36 -
+ doc/reference/tmpl/vte-unused.sgml |   73 ++
+ doc/reference/tmpl/vte.sgml        |   15 +-
+ doc/reference/vte-docs.sgml        |    2 -
+ doc/reference/vte-sections.txt     |    8 -
+ python/cat.py                      |   13 +-
+ python/vte.defs                    |   12 +-
+ python/vte.override                |  248 ++++-
+ src/Makefile.am                    |    2 +-
+ src/debug.c                        |    3 +
+ src/debug.h                        |    3 +-
+ src/pty.c                          |   94 +-
+ src/pty.h                          |   22 +-
+ src/vte.c                          | 1912 ++++++++++++++++++++----------------
+ src/vte.h                          |   25 +-
+ src/vteaccess.c                    |    4 +-
+ src/vteapp.c                       |   12 +-
+ vte.spec                           |    5 +-
+ 20 files changed, 1535 insertions(+), 995 deletions(-)
+
+commit e600d5ea308a700166c9a59e9e88e80ac7f91263 (tag: vte_0_9_2)
+Author: Nalin Dahyabhai 
+Date:   2002-10-21 19:01:26 +0000
+
+    - translation updates
+
+ po/cs.po    | 40 ++++++++++++++++++++--------------------
+ po/da.po    | 40 ++++++++++++++++++++--------------------
+ po/de.po    | 40 ++++++++++++++++++++--------------------
+ po/fr.po    | 40 ++++++++++++++++++++--------------------
+ po/nl.po    | 40 ++++++++++++++++++++--------------------
+ po/no.po    | 40 ++++++++++++++++++++--------------------
+ po/pt_BR.po | 40 ++++++++++++++++++++--------------------
+ po/sv.po    | 40 ++++++++++++++++++++--------------------
+ po/vi.po    | 40 ++++++++++++++++++++--------------------
+ 9 files changed, 180 insertions(+), 180 deletions(-)
+
+commit 0ec595fde9bd1e3d9bbbd7125353f0b35729ad1a
+Author: Nalin Dahyabhai 
+Date:   2002-10-21 18:56:57 +0000
+
+    - fix path for python module
+
+ vte.spec | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 4199e9affd62e43a2b452c733428852b28d25ef9
+Author: jacob berkman 
+Date:   2002-10-21 17:26:29 +0000
+
+    include decset, osc, and window
+    
+    2002-10-21  jacob berkman  
+    
+            * src/Makefile.am (EXTRA_DIST): include decset, osc, and window
+
+ ChangeLog       | 4 ++++
+ src/Makefile.am | 1 +
+ 2 files changed, 5 insertions(+)
+
+commit fa5c2e2027f0507032ed8e090e11140cd2d8b277
+Author: Nalin Dahyabhai 
+Date:   2002-10-18 21:58:34 +0000
+
+    use character constants instead of hex constants. add more illustrations.
+    
+    * src/iso2022.c: use character constants instead of hex constants.
+    * src/iso2022.txt: add more illustrations.
+    * src/decset: scriptlet to save some typing.
+    * src/vte.c: zero-terminate window and icon title strings again.
+    * src/decset, src/osc, src/window: add.
+
+ ChangeLog       |   7 +++
+ src/Makefile.am |   1 +
+ src/decset      |  16 +++++
+ src/iso2022.c   | 192 ++++++++++++++++++++++++++++----------------------------
+ src/iso2022.txt |  22 +++++--
+ src/osc         |  21 +++++++
+ src/vte.c       |   8 ++-
+ src/window      |  28 +++++++++
+ 8 files changed, 192 insertions(+), 103 deletions(-)
+
+commit 7459d35c062c3c91d98988cb95d55151c9752423
+Author: Nalin Dahyabhai 
+Date:   2002-10-18 20:53:53 +0000
+
+    add a mapping for the escape key. Oops.
+    
+    * src/keymap.c: add a mapping for the escape key.  Oops.
+
+ ChangeLog    | 3 +++
+ src/keymap.c | 6 ++++++
+ 2 files changed, 9 insertions(+)
+
+commit 41f60f34704e288a36e681dfe6b15e386c90dd20
+Author: Nalin Dahyabhai 
+Date:   2002-10-18 20:06:49 +0000
+
+    implement decset 42 (enable/disable NRC processing), but enable it by
+    
+    * src/vte.c: implement decset 42 (enable/disable NRC processing), but enable it
+            by default.  Implement decset 44 (margin bell).
+    * src/vte.c: do not trust the event->string.  Use gdk_keyval_to_unicode and the
+            built-in keymapping to cope with the weirdness.  Extend the range of
+            characters we controlify from 0x40-0x60 to 0x40-0x7f so that lower-case
+            ascii chars controlify (not a word, I know).
+    * src/keymap.c: add map entries for GDK_Return and GDK_KP_Enter for
+            GDK_CONTROL_MASK = cr, normal = lf.
+
+ ChangeLog    |  10 ++++
+ src/keymap.c |   9 ++++
+ src/vte.c    | 161 +++++++++++++++++++++++++++++++++++++++++------------------
+ 3 files changed, 131 insertions(+), 49 deletions(-)
+
+commit e310e8d82626e1b367134f51b84026df07da07d9
+Author: Nalin Dahyabhai 
+Date:   2002-10-18 15:38:27 +0000
+
+    make sure that strings passed to a commit signal are zero-terminated
+    
+    * src/vte.c: make sure that strings passed to a commit signal are
+            zero-terminated (#96131).
+    * python/Makefile.am: install the module in site-packages instead of a
+            subdirectory, which doesn't work on my system.
+
+ ChangeLog          |  6 ++++++
+ python/Makefile.am |  2 +-
+ src/vte.c          | 15 +++++++++++++--
+ 3 files changed, 20 insertions(+), 3 deletions(-)
+
+commit f2fef8ea942c5a99663691241d637ef2e2a8dcbf
+Author: Nalin Dahyabhai 
+Date:   2002-10-18 00:25:21 +0000
+
+    remove vte_terminal_update_scroll_delta, which only did things
+    
+    * src/vte.c: remove vte_terminal_update_scroll_delta, which only did things
+            vte_terminal_adjust_adjustments already did and was only called
+            immediately after.  Fill newly-added lines with the current attributes
+            if the current background isn't the default color (Red Hat #73853).
+            Implement ignored DECSET settings, so that we don't mistakenly complain
+            about settings not being implemented yet when we actually just want to
+            ignore them.  Force the first cursor redraw after focus-in to always be
+            in the foreground color (Red Hat #75908).
+    * vte.spec: 0.9.2
+
+ ChangeLog |  17 ++++++-
+ src/vte.c | 156 ++++++++++++++++++++++++++++++--------------------------------
+ vte.spec  |  10 +++-
+ 3 files changed, 100 insertions(+), 83 deletions(-)
+
+commit 9a346fd61eb247ee863478459f46d2a885f4cb68
+Author: Nalin Dahyabhai 
+Date:   2002-10-17 18:13:26 +0000
+
+    force invalidation mode if we're in insert mode to get the entire line
+    
+    * src/vte.c (vte_terminal_insert_char): force invalidation mode if we're in
+            insert mode to get the entire line redrawn.  Spotted by msw.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 1 +
+ 2 files changed, 5 insertions(+)
+
+commit f18f8e2e7d649675d61c97d5b6b5170f397b1e24
+Author: Nalin Dahyabhai 
+Date:   2002-10-17 16:26:03 +0000
+
+    clean up tests for wint_t. Patch from Brian Cameron.
+    
+    * configure.in: clean up tests for wint_t.  Patch from Brian Cameron.
+
+ ChangeLog    |  3 +++
+ configure.in | 12 +-----------
+ 2 files changed, 4 insertions(+), 11 deletions(-)
+
+commit b2fcad271ca132aa74f3a489169d33f7a66795ff
+Author: Nalin Dahyabhai 
+Date:   2002-10-17 16:17:40 +0000
+
+    close a possible race on systems where pty initialization requires more
+    
+    * src/pty.c: close a possible race on systems where pty initialization requires
+            more than just opening the pty (for example, Solaris).  Spotted by Brian
+            Cameron.
+    * src/utf8echo.c: don't reset to iso-8859-1 unless -r is used.
+
+ ChangeLog      |   8 +-
+ po/cs.po       |  42 +++++-----
+ po/da.po       |  42 +++++-----
+ po/de.po       |  42 +++++-----
+ po/fr.po       |  42 +++++-----
+ po/nl.po       |  42 +++++-----
+ po/no.po       |  40 ++++-----
+ po/pt_BR.po    |  42 +++++-----
+ po/sv.po       |  42 +++++-----
+ po/vi.po       |  42 +++++-----
+ src/pty.c      | 256 +++++++++++++++++++++++++++++++++++++++++++--------------
+ src/utf8echo.c |  11 ++-
+ 12 files changed, 397 insertions(+), 254 deletions(-)
+
+commit 89e1b4ff2306e8fedfdafa4929665f2460510465
+Author: Nalin Dahyabhai 
+Date:   2002-10-16 23:35:07 +0000
+
+    remove a bogus assertion for a case which we were already handling a
+    
+    * src/vte.c: remove a bogus assertion for a case which we were already handling
+            a little further down.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 2 --
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+commit e82912ae31e1e6b52f9e2f4f744d33c4fb475496
+Author: Nalin Dahyabhai 
+Date:   2002-10-16 20:11:52 +0000
+
+    doc/utmpwtmp.txt: some docs on what utmp/wtmp/lastlog logging actually do
+
+ doc/utmpwtmp.txt | 31 +++++++++++++++++++++++++++++++
+ 1 file changed, 31 insertions(+)
+
+commit b68e40146ce0a5226d458b8d6fe97c58e01e3b14
+Author: Nalin Dahyabhai 
+Date:   2002-10-16 19:37:03 +0000
+
+    adjust our adjustments whenever a line might scroll off the top of the
+    
+    * src/vte.c: adjust our adjustments whenever a line might scroll off the top of
+            the buffer.  Fix computation of the new insertion delta to ensure that
+            it never goes below the scroll delta, which should fix the resizing
+            crashes, and add some debug assertions to verify this.
+    * configure.in, python/Makefile.am: build the python bindings as a library,
+            not a binary with wacky ldflags.
+    * src/vte.c: don't try to close the pty at finalize time if we didn't open
+            it.  Patch from ha shao.
+    * src/keymap.c, src/keymap.h: move the addition of modifiers into a separate
+            function.  Add the function key strings from terminfo for fkey_sun and
+            fkey_hp cases.  Make control+F1 = F13 only in vt220 mode.
+    * src/vte.c: apply modifiers to function keys in normal and legacy modes.
+
+ ChangeLog          |  17 ++++
+ configure.in       |   5 +-
+ python/Makefile.am |  15 ++--
+ src/keymap.c       | 239 +++++++++++++++++++++++++++++++++++++++--------------
+ src/keymap.h       |  13 ++-
+ src/vte.c          | 112 ++++++++++++++++++++-----
+ src/vteapp.c       |   4 +-
+ 7 files changed, 310 insertions(+), 95 deletions(-)
+
+commit c74ab135c563a6cf3244cd03d98e3730f8220697
+Author: Kjartan Maraas 
+Date:   2002-10-15 20:27:58 +0000
+
+    Updated translation.
+    
+    2002-10-15  Kjartan Maraas  
+    
+            * no.po: Updated translation.
+
+ po/ChangeLog |  4 ++++
+ po/no.po     | 40 ++++++++++++++++++++--------------------
+ 2 files changed, 24 insertions(+), 20 deletions(-)
+
+commit 3af8a4a5bd3fbfdb82f7cc7bf3ae0b623f719f12
+Author: Nalin Dahyabhai 
+Date:   2002-10-15 02:22:37 +0000
+
+    add super-bogus bold text mode (Red Hat #74779).
+    
+    * src/vte.c: add super-bogus bold text mode (Red Hat #74779).
+
+ ChangeLog                      |  7 ++-
+ doc/reference/tmpl/vte.sgml    | 33 +++++++++++++++
+ doc/reference/vte-sections.txt |  3 ++
+ python/vte.defs                | 15 +++++++
+ src/Makefile.am                |  2 +-
+ src/vte.c                      | 96 +++++++++++++++++++++++++++++++++++++++---
+ src/vte.h                      |  2 +
+ src/vteapp.c                   |  2 +-
+ 8 files changed, 150 insertions(+), 10 deletions(-)
+
+commit e590d5dce3e48a5313e8e02d50439c675fdfb46a
+Author: Nalin Dahyabhai 
+Date:   2002-10-15 01:49:25 +0000
+
+    recognize CSI-r (with no arguments) as resetting the scrolling region in
+    
+    * src/vte.c: recognize CSI-r (with no arguments) as resetting the scrolling
+            region in XTerm emulation (Red Hat #75902)
+
+ ChangeLog  | 8 ++++++--
+ src/caps.c | 3 +++
+ src/vte.c  | 2 +-
+ 3 files changed, 10 insertions(+), 3 deletions(-)
+
+commit 2905a995d011850f854aa8b3b2fe261be944705b
+Author: Nalin Dahyabhai 
+Date:   2002-10-14 21:40:22 +0000
+
+    add mappings for GDK_Page_Up and GDK_Page_Down, missed in the conversion.
+    
+    * src/keymap.c: add mappings for GDK_Page_Up and GDK_Page_Down, missed in the
+            conversion.
+    * src/vte.c: steal GDK_KP_{Add,Subtract,Multiply,Divide} from the input methods
+            (Red Hat #75207).
+
+ ChangeLog    |  6 ++++++
+ po/cs.po     | 42 +++++++++++++++++++++---------------------
+ po/da.po     | 42 +++++++++++++++++++++---------------------
+ po/de.po     | 42 +++++++++++++++++++++---------------------
+ po/fr.po     | 42 +++++++++++++++++++++---------------------
+ po/nl.po     | 42 +++++++++++++++++++++---------------------
+ po/no.po     | 42 +++++++++++++++++++++---------------------
+ po/pt_BR.po  | 42 +++++++++++++++++++++---------------------
+ po/sv.po     | 42 +++++++++++++++++++++---------------------
+ po/vi.po     | 42 +++++++++++++++++++++---------------------
+ src/keymap.c | 13 +++++++++++++
+ src/vte.c    | 10 +++++-----
+ 12 files changed, 213 insertions(+), 194 deletions(-)
+
+commit b648a00d75f17d490ed2e96bdd2ed449ce49a34e
+Author: Nalin Dahyabhai 
+Date:   2002-10-14 21:22:40 +0000
+
+    note that commit came about because of mail from ha shao. add a couple of
+    
+    * ChangeLog: note that commit came about because of mail from ha shao.
+    * python/cat.py: add a couple of comments.
+
+ ChangeLog     | 14 +++++++-------
+ python/cat.py |  2 ++
+ 2 files changed, 9 insertions(+), 7 deletions(-)
+
+commit cda7db5a18f9ea59673acf0ee5a7a34c3f59c662
+Author: Nalin Dahyabhai 
+Date:   2002-10-14 21:07:58 +0000
+
+    more $pkglibdir -> $libexecdir fixing. add rules for generating ps and
+    
+    * configure.in: more $pkglibdir -> $libexecdir fixing.
+    * doc/Makefile.am: add rules for generating ps and text versions of the ctlseqs
+            docs.
+    * doc/reference/tmpl/vte.sgml: add snippet for "commit".
+    * python/python/vte.defs: update to add a binding for
+            vte_terminal_fork_logged_command().
+    * src/buffer.h: add a warning comment that these are private interfaces.  Wrap
+            declarations in G_BEGIN_DECLS/G_END_DECLS.
+    * src/caps.h: add macros for the SS2/SS3 sequences.
+    * src/marshal.list: add a marshaller for the "commit" signal.
+    * src/keymap.c, src/keymap.h: move the getting-more-convoluted keypress-handling
+            code to a shell that parses tables of static info.
+    * src/pty.c: reset signal handlers before exec() (Red Hat #75341)
+    * src/vte.c: use the keymap for most non-printable keys.  Add a "commit" signal
+            to allow an app to just use the terminal for displaying data and
+            grabbing input.  Obey the application's desired meta-sends-escape
+            setting.  Recognize HP function key mode.  Recognize and handle legacy
+            XTerm function key mode.  Force a redraw if the child application tries
+            to switch to 80/132 columns, even though we don't usually let them try.
+            Don't try to send keystrokes to the child pty when there is no child
+            pty.  Don't convert final whitespace to newlines when copying text
+            (Red Hat #74611).  Properly distinguish cursor key mode and keypad key
+            mode, obey application mode for cursor keys,
+    * python/cat.py: test program for running without a command.
+    * termcaps/xterm: change the definitions for ku/kd/kl/kr to match XTerm in
+            normal cursor mode instead of application cursor mode.
+
+ ChangeLog                   |  31 ++
+ configure.in                |   4 +-
+ doc/Makefile.am             |   6 +
+ doc/reference/tmpl/vte.sgml |  11 +
+ python/cat.py               |  48 +++
+ python/vte.defs             |  14 +
+ src/Makefile.am             |   2 +
+ src/buffer.h                |  10 +-
+ src/caps.h                  |   2 +
+ src/keymap.c                | 798 ++++++++++++++++++++++++++++++++++++++++++++
+ src/keymap.h                |  52 +++
+ src/marshal.list            |   1 +
+ src/pty.c                   |  84 +++++
+ src/vte.c                   | 602 +++++++++++++--------------------
+ src/vte.h                   |   2 +-
+ src/vteapp.c                |   4 +-
+ termcaps/xterm              |   6 +-
+ 17 files changed, 1305 insertions(+), 372 deletions(-)
+
+commit fb8d32cd8e004edf334cd893e530de54e91f93b3
+Author: Nalin Dahyabhai 
+Date:   2002-10-11 18:50:01 +0000
+
+    change the typedef of wint_t here to match vte.c (now a gunichar instead
+    
+    * src/trie.c: change the typedef of wint_t here to match vte.c (now a gunichar
+            instead of a long).  Spotted by Brian Cameron.
+
+ ChangeLog  | 6 +++++-
+ src/trie.c | 2 +-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit ce817d3ae082a82c2ebad13f8be2fc145f556afa
+Author: Brian Cameron 
+Date:   2002-10-11 17:21:07 +0000
+
+    Changed to that wchar.h is included when checking for wint_t on Solaris.
+    
+        * configure.in: Changed to that wchar.h is included when checking for
+        wint_t on Solaris.  This was needed because on Solaris wint_t is defined
+        to be a long, and in vte.c its definition was recently changed to be a
+        gunichar.  This caused the compile to break on Solaris.
+
+ ChangeLog    |  6 ++++++
+ configure.in | 29 ++++++++++++++++++++++++++++-
+ 2 files changed, 34 insertions(+), 1 deletion(-)
+
+commit b0a4e8ffb13e71e393d973539267f3cbf711b2d0
+Author: Nalin Dahyabhai 
+Date:   2002-10-10 18:45:46 +0000
+
+    fix the bits I missed when fixing #95085.
+    
+    * configure.in, src/pty.c, gnome-pty-helper/Makefile.am: fix the bits I missed
+            when fixing #95085.
+
+ ChangeLog                    | 4 ++++
+ configure.in                 | 5 ++++-
+ gnome-pty-helper/Makefile.am | 4 ++--
+ src/pty.c                    | 2 +-
+ 4 files changed, 11 insertions(+), 4 deletions(-)
+
+commit 46821963e12a980b5d3864fbee542bcd66c45480
+Author: Nalin Dahyabhai 
+Date:   2002-10-10 17:57:14 +0000
+
+    Add.
+
+ src/buffer.c | 170 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/buffer.h |  43 +++++++++++++++
+ 2 files changed, 213 insertions(+)
+
+commit 272bef21f4676bd586bbd9484890d6d2aa47fce7
+Author: Nalin Dahyabhai 
+Date:   2002-10-10 16:57:30 +0000
+
+    allow specifying the scrollback buffer size. if we don't have ,
+    
+    * src/vteapp.c, python/vte-demo.py: allow specifying the scrollback buffer size.
+    * src/vte.c: if we don't have , typedef wchar_t as a gunichar, not a
+            long.
+    * src/buffer.c, src/buffer.h: add.
+    * src/interpret.c, src/vte.c: use _vte_buffer structures instead of char arrays
+            with separate lengths.  Use a scratch buffer for holding the results of
+            conversions.
+    * src/vte.c: separate the pango and pangox drawing paths so that they're easier
+            to tweak and compare to each other.
+    * src/vte.c: ditch the smooth scrolling change, which won't work right anyway
+            (expose events don't get processed until after we finish processing a
+            chunk of data unless we explicitly request it, so using a bbox is both
+            simpler and faster).  Use a mask when creating the cursor we use for
+            hiding the cursor.
+    * vte.spec, gnome-pty-helper/Makefile.am: install gnome-pty-helper into the
+            libexecdir, not pkglibdir (#95085).
+    * src/vte.c: obey smooth/jump scrolling options, default is jump scroll.
+    * src/vte.c (vte_font_match): Fix over-aggressive Xft => Fc conversion - need
+            to call XftDefaultSubstitute to pick up Xft X resources, not
+            FcDefaultSubstitute.  From otaylor.
+
+ ChangeLog                    |  29 ++
+ gnome-pty-helper/Makefile.am |   3 +-
+ gnome-pty-helper/README      |   5 +-
+ po/cs.po                     |  38 +--
+ po/da.po                     |  42 +--
+ po/de.po                     |  42 +--
+ po/fr.po                     |  42 +--
+ po/nl.po                     |  42 +--
+ po/no.po                     |  40 +--
+ po/pt_BR.po                  |  42 +--
+ po/sv.po                     |  42 +--
+ po/vi.po                     |  42 +--
+ python/vte-demo.py           |  11 +-
+ src/Makefile.am              |   4 +
+ src/vte.c                    | 617 ++++++++++++++++++++++---------------------
+ src/vteapp.c                 |  12 +-
+ vte.spec                     |   2 +-
+ 17 files changed, 554 insertions(+), 501 deletions(-)
+
+commit 9705656987dfb648692f14556143fa999a28e5bb
+Author: Kjartan Maraas 
+Date:   2002-10-05 20:55:35 +0000
+
+    Update slightly
+
+ po/no.po | 42 +++++++++++++++++++++---------------------
+ 1 file changed, 21 insertions(+), 21 deletions(-)
+
+commit 70f468de3dff031b5e755560a4ae6b08babb111b
+Author: Stanislav Brabec 
+Date:   2002-10-01 09:40:24 +0000
+
+    Added Czech translation from Miloslav Trmac .
+    
+    2002-10-01  Stanislav Brabec  
+    
+            * cs.po: Added Czech translation from Miloslav Trmac
+            .
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/cs.po     | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 124 insertions(+), 1 deletion(-)
+
+commit 5a499ccb617f2b67c2e236c613f68c0af7dbf780
+Author: Nalin Dahyabhai 
+Date:   2002-09-24 20:24:17 +0000
+
+    if the list of word characters is NULL or zero-length, try to guess using
+    
+    * src/vte.c(vte_terminal_set_word_chars,vte_terminal_is_word_char): if the list
+            of word characters is NULL or zero-length, try to guess using
+            g_unichar_isgraph and not g_unichar_ispunct, which seems to produce
+            reasonable results (#77134).
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 14 +++++++++++++-
+ 2 files changed, 19 insertions(+), 1 deletion(-)
+
+commit 4ed2ed43616e28c9e623bfa3c4bdabb06c212545
+Author: Nalin Dahyabhai 
+Date:   2002-09-24 19:31:04 +0000
+
+    Fix HAVE_UT_UT_TV for cases where the static initializer might not work
+    
+    * gnome-pty-helper/acinclude.m4: Fix HAVE_UT_UT_TV for cases where the static
+            initializer might not work right (#93774, patch from Kalpesh Shah).
+
+ ChangeLog                     | 5 +++++
+ gnome-pty-helper/acinclude.m4 | 3 ++-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit 5c90999a83b372436ab94d7b0d5f4cd1cc942360
+Author: Nalin Dahyabhai 
+Date:   2002-09-24 19:24:28 +0000
+
+    Doc fixups (mention gnome-terminal instead of profterm, note the proper
+    
+    * README, gnome-pty-helper/README:  Doc fixups (mention gnome-terminal instead
+            of profterm, note the proper permissions for gnome-pty-helper, #84505).
+
+ ChangeLog               | 5 +++++
+ README                  | 2 +-
+ gnome-pty-helper/README | 6 ++++++
+ 3 files changed, 12 insertions(+), 1 deletion(-)
+
+commit 0da7298172a95ccdcafa8c84d4b53a28b03c2aae
+Author: Nalin Dahyabhai 
+Date:   2002-09-20 16:58:57 +0000
+
+    Fix a ring-buffer manipulation bug (Red Hat #74290) which might cause a
+    
+    * src/ring.c: Fix a ring-buffer manipulation bug (Red Hat #74290) which might
+            cause a new item to be inserted in the wrong location.
+
+ ChangeLog       |  4 +++
+ src/iso2022.txt |  5 ++++
+ src/ring.c      | 79 ++++++++++++++++++++++++++++++++++++---------------------
+ 3 files changed, 59 insertions(+), 29 deletions(-)
+
+commit 104c07cab56604228172e7ea47e102312ff7b43e
+Author: Nalin Dahyabhai 
+Date:   2002-09-19 20:14:06 +0000
+
+    Munge input data the way the terminal does so that conversion failures
+    
+    * src/interpret.c: Munge input data the way the terminal does so that conversion
+            failures don't wedge us.
+
+ ChangeLog       | 4 ++++
+ src/interpret.c | 6 ++++++
+ 2 files changed, 10 insertions(+)
+
+commit 3aff8ec2220dc2e52bc925ddce87ac6c2e8badf3
+Author: Brian Cameron 
+Date:   2002-09-19 14:20:30 +0000
+
+    backing out change made by accident.
+
+ src/vteapp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 045db8182451129a6456f94721ef79537ba9e411
+Author: Brian Cameron 
+Date:   2002-09-19 14:18:55 +0000
+
+    Backed out scrolldelay patches from 09-17 and 09-18 at Nalin's request.
+    
+    2002-09-19 Brian Cameron 
+        * src/vte.c: Backed out scrolldelay patches from 09-17 and 09-18 at
+        Nalin's request.  Left in the patch which allows programs which
+        update the screen non-linearly like lynx to work properly.
+
+ ChangeLog    |  7 +++++-
+ src/vte.c    | 77 ++----------------------------------------------------------
+ src/vteapp.c |  2 +-
+ 3 files changed, 9 insertions(+), 77 deletions(-)
+
+commit 64462ef05e3b0aa85c5f338f297d594b7b453d46
+Author: Brian Cameron 
+Date:   2002-09-19 14:00:52 +0000
+
+    backing out patch i accidently put in
+
+ src/ring.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 2ee4138d1daf8202bf7842b8ff7a5706a3b61cd4
+Author: Brian Cameron 
+Date:   2002-09-19 13:57:14 +0000
+
+    Backed out scrolldelay patches from 09-17 and 09-18 at Nalin's request.
+    
+    2002-09-19 Brian Cameron 
+        * src/vte.c: Backed out scrolldelay patches from 09-17 and 09-18 at
+        Nalin's request.  Left in the patch which allows programs which
+        update the screen non-linearly like lynx to work properly.
+
+ src/ring.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 3d11978237aecf846e6afa8b1287e22b7bc1baa2
+Author: Brian Cameron 
+Date:   2002-09-18 14:20:34 +0000
+
+    Corrected a problem with yesterday's patch. I am now properly calling
+    
+    2002-09-18 Brian Cameron 
+        * src/vte.c: Corrected a problem with yesterday's patch.  I am now
+        properly calling g_source_remove on the scroll_delay timeout
+        function.  This prevents VTE from core dumping if you start up
+        more than one VTE gnome-terminal and exit from one of them.  Also
+        made the vte_scroll_timeout function a little cleaner by using
+        the VTE_IS_TERMINAL macro.
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 13 ++++++++++---
+ 2 files changed, 18 insertions(+), 3 deletions(-)
+
+commit 90ec87c9a6f2bdcb8c2c532f9c4f3e1eae97e1ea
+Author: Brian Cameron 
+Date:   2002-09-17 14:40:06 +0000
+
+    Fixed bug with my 09/11 speedup fix which caused programs that update the
+    
+    2002-09-17 Brian Cameron 
+        * src/vte.c: Fixed bug with my 09/11 speedup fix which caused programs
+        that update the screen non-linearly like lynx to not update properly.
+        Also included a speed improvement which delays the scroll-down for
+        70ms.  Too fast to be noticeable to the user, but it speeds up VTE
+        greatly.
+
+ ChangeLog |   7 ++++
+ src/vte.c | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 120 insertions(+), 9 deletions(-)
+
+commit d5962db9564344363ee538b922b1de2d0c55da84
+Author: Nalin Dahyabhai 
+Date:   2002-09-13 18:37:51 +0000
+
+    Fix typo which broke builds on systems where MSG_NOSIGNAL is defined. Bad
+    
+    * src/pty.c: Fix typo which broke builds on systems where MSG_NOSIGNAL is
+            defined.  Bad boc!  Bad!
+
+ ChangeLog | 4 ++++
+ src/pty.c | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit a92f7efb47523e51b5db7a59095014a678af851d
+Author: Brian Cameron 
+Date:   2002-09-13 17:35:49 +0000
+
+    Added -lsocket to LIBS if socket is in libsocket, so VTE will compile on
+    
+    2002-09-12 Brian Cameron 
+        * configure.in : Added -lsocket to LIBS if socket is in libsocket,
+        so VTE will compile on Solaris.
+
+ ChangeLog    | 4 ++++
+ configure.in | 4 ++--
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 42492c722b812061542665d24230be6a2ce70cd2
+Author: jacob berkman 
+Date:   2002-09-12 18:34:09 +0000
+
+    only use MSG_NOSIGNAL if it's defined
+    
+    2002-09-12  jacob berkman  
+    
+            * src/pty.c: only use MSG_NOSIGNAL if it's defined
+    
+            * gnome-pty-helper/gnome-pty-helper.c (struct pty_info): remove
+            master_fd and slave_fd fields
+            (shutdown_pty): don't close master/slave fd's here...
+            (pty_add): don't take master/slave fd args
+            (open_ptys): ...close master/slave fd's right after passing them
+    
+            this fixes a hang after closing a window on os x, not sure why...
+    
+            * gnome-pty-helper/Makefile.am (install-exec-hook): remove
+            trailing / after $DESTDIR
+
+ ChangeLog                           | 13 +++++++++++++
+ gnome-pty-helper/Makefile.am        |  4 ++--
+ gnome-pty-helper/gnome-pty-helper.c | 22 +++++++---------------
+ src/pty.c                           | 13 ++++++++++---
+ 4 files changed, 32 insertions(+), 20 deletions(-)
+
+commit 358885726ad71c0232c253d07c4c784cbd8b4eed
+Author: jacob berkman 
+Date:   2002-09-12 17:32:21 +0000
+
+    AC_CHECK_FUNC() doesn't do AC_DEFINE(HAVE_FOO), so do that for socket()
+    
+    2002-09-12  jacob berkman  
+    
+            * configure.in: AC_CHECK_FUNC() doesn't do AC_DEFINE(HAVE_FOO), so
+            do that for socket() and socketpair() if they are found
+
+ ChangeLog    |  5 +++++
+ configure.in | 11 +++++++++--
+ 2 files changed, 14 insertions(+), 2 deletions(-)
+
+commit 265464c734922fbe22d580ed1cb4c5567e55692e
+Author: Nalin Dahyabhai 
+Date:   2002-09-12 14:43:08 +0000
+
+    Remove the invalidate_cells parameter, because the function is a big no-op
+    
+    * src/vte.c(vte_invalidate_cursor_once): Remove the invalidate_cells parameter,
+            because the function is a big no-op if FALSE, in which case we should
+            just not call it instead. (vte_terminal_process_incoming): refresh the
+            right number of rows after processing a block of data.
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 45 ++++++++++++++++++++++++---------------------
+ 2 files changed, 30 insertions(+), 21 deletions(-)
+
+commit ebb9bd590800e991ca81facead05edf617018c2e
+Author: Brian Cameron 
+Date:   2002-09-12 11:46:03 +0000
+
+    src/vte.c Fixed minor error with my previous patch. This just makes a
+    
+    
+    2002-09-12 Brian Cameron 
+        * src/vte.c Fixed minor error with my previous patch.  This just makes
+        a warning go away.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 4 ++--
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit db8c13b616aeeaa96d660e9d57e7f93c348cf05e
+Author: Pablo Gonzalo del Campo 
+Date:   2002-09-12 01:15:31 +0000
+
+    added spanish translation file.
+    
+    2002-09-11  Pablo Gonzalo del Campo 
+    
+            * es.po: added spanish translation file.
+
+ po/ChangeLog |   4 ++
+ po/es.po     | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 121 insertions(+)
+
+commit 5d1ac721e2096e926afb66b0f693cfdd6d0a8a37
+Author: Nalin Dahyabhai 
+Date:   2002-09-11 22:05:26 +0000
+
+    Reorder definitions to avoid implicit declaration warnings. Check for
+    
+    * src/pty.c: Reorder definitions to avoid implicit declaration warnings.
+    * configure.in: Check for socketpair().  Check for socket() in libc before
+            poking around in libsocket.
+    * gnome-pty-helper/configure.in: Check for openpty() in libutil as well, and do
+            so before we check for other functions.
+
+ ChangeLog                     |   7 ++
+ configure.in                  |   4 +-
+ gnome-pty-helper/configure.in |   5 ++
+ src/pty.c                     | 196 +++++++++++++++++++++---------------------
+ 4 files changed, 112 insertions(+), 100 deletions(-)
+
+commit 0455940575c4f71862b3c5c9154f43e15e0b5d02
+Author: Nalin Dahyabhai 
+Date:   2002-09-11 21:03:03 +0000
+
+    Test for sendmsg() with AC_CHECK_FUNCS instead of AC_TRY_COMPILE. Removed.
+    
+    * configure.in, gnome-pty-helper/configure.in: Test for sendmsg() with
+            AC_CHECK_FUNCS instead of AC_TRY_COMPILE.
+    * acconfig.h: Removed.
+    * src/pty.c: Formatting.
+
+ ChangeLog                     |  6 ++++++
+ acconfig.h                    |  2 --
+ configure.in                  | 16 +---------------
+ gnome-pty-helper/configure.in | 14 --------------
+ src/pty.c                     | 10 +++++-----
+ 5 files changed, 12 insertions(+), 36 deletions(-)
+
+commit a1c644edb6b49b1eb3d7135e9a69181e2ad18ce7
+Author: Brian Cameron 
+Date:   2002-09-11 20:36:00 +0000
+
+    Added check for socket library and SendMsg check. Added this file with a
+    
+    2002-09-11 Brian Cameron 
+        * configure.in: Added check for socket library and SendMsg
+        check.
+        * acconfig.h: Added this file with a HAVE_SENDMSG definition.
+        * gnome-pty-helper/configure.in: Added checks needed for the
+        source code, including the SendMsg check.
+        * src/pty.c: Corrected _vte_pty_pipe_open so it works on
+        Solaris.
+        *src/vte.c: Made some speed improvements so vte_invalidate_cells
+        is not called for every character in the while loop in
+        vte_process_incoming, but only once when the while loop is done.
+
+ ChangeLog                     | 12 ++++++++
+ acconfig.h                    |  2 ++
+ autogen.sh                    | 12 ++++----
+ configure.in                  | 16 ++++++++++
+ gnome-pty-helper/configure.in | 24 ++++++++++++++-
+ src/pty.c                     | 70 +++++++++++++++++++++++++++++--------------
+ src/vte.c                     | 63 ++++++++++++++++++--------------------
+ 7 files changed, 136 insertions(+), 63 deletions(-)
+
+commit fb18be14fc9bd16b06a2d2963476d28678971fad
+Author: Nalin Dahyabhai 
+Date:   2002-09-11 20:00:51 +0000
+
+    Update from libzvt CVS. Fix some automake breakage.
+    
+    * gnome-pty-helper: Update from libzvt CVS.
+    * python/Makefile.am: Fix some automake breakage.
+
+ ChangeLog                           |  4 ++++
+ gnome-pty-helper/Makefile.am        |  3 +++
+ gnome-pty-helper/README             |  8 +++----
+ gnome-pty-helper/configure.in       |  1 +
+ gnome-pty-helper/gnome-pty-helper.c | 44 ++++++++++++-------------------------
+ gnome-pty-helper/gnome-utmp.c       | 41 ++++++++++++++++++++--------------
+ python/Makefile.am                  |  2 +-
+ vte.spec                            |  5 ++++-
+ 8 files changed, 56 insertions(+), 52 deletions(-)
+
+commit fcd1b81f7c66e0712d089ce3c19377f29217c647
+Author: Nalin Dahyabhai 
+Date:   2002-09-11 19:12:18 +0000
+
+    Fix my broken merge of Jacob's patch to make inability to build python
+    
+    * python/Makefile.am: Fix my broken merge of Jacob's patch to make inability to
+            build python modules non-fatal.
+
+ ChangeLog          | 4 ++++
+ Makefile.am        | 2 +-
+ python/Makefile.am | 3 ++-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 8668fb77303cf91fa2f2b87a49db2dc412079934 (tag: vte_0_9_0)
+Author: Nalin Dahyabhai 
+Date:   2002-09-11 06:34:27 +0000
+
+    build fixes
+
+ Makefile.am                 |  2 +-
+ autogen.sh                  |  9 +++++-
+ gnome-pty-helper/ChangeLog  |  0
+ gnome-pty-helper/autogen.sh | 71 ---------------------------------------------
+ 4 files changed, 9 insertions(+), 73 deletions(-)
+
+commit 2149ce6c7878cb4161f882c15d29e6dc68e182a0
+Author: Nalin Dahyabhai 
+Date:   2002-09-11 06:10:47 +0000
+
+    Skip lookups for padding information if we're pretty sure we're using a
+    
+    * src/vte.c: Skip lookups for padding information if we're pretty sure we're
+            using a monospaced font.
+    * src/vte.c: Fix from Brian Cameron for uninitialized GError in
+            vte_wc_from_unichar().
+    * src/interpret.c, src/iso2022.c, src/pty.c, src/ring.h, src/table.c,
+            src/table.h, src/trie.c, src/vte.c, src/vteaccess.c: Signed/unsigned
+            int/size_t/gsize and pointer typecast warning fixes from Brian Cameron.
+    * src/vte.c: Avoid invalidating the cursor in the cursor blink timeout unless
+            we have focus.
+    * src/pty.c, src/pty.h: Add vte_pty_close() and vte_pty_open_with_logging(),
+            breaking the ABI but not the existing API.
+    * src/vte.c, src/vte.h: Add vte_terminal_fork_logged_command(), breaking the
+            ABI but not the existing API.
+    * gnome-pty-helper/*: Swallow the pty helper bits of gnome-libs, but install
+            into $pkglibdir instead of $sbindir so that existing packages don't
+            suddenly start breaking.
+    * src/termcap.c(_vte_termcap_find_string_length): Fix signature to match the
+            declaration in termcap.h.  From patch by Jacob Berkman.
+    * configure.in: Add $X_PRE_LIBS to the front of $X_LIBS, -lX11 and $X_EXTRA_LIBS
+            to the end of $X_LIBS.  Remove some cruftiness and set CPPFLAGS when
+            checking for Xft.  Check for the existence of wchar.h, because it might
+            not exist.  Use an automake conditional to make compilation of the
+            Python bindings non-critical.  From patch by Jacob Berkman.
+    * src/pty.c: Silence compiler warning when exec() fails.  From patch by Jacob
+            Berkman.
+    * src/interpret.c, src/vte.c: Stop including langinfo.h since we don't call
+            nl_langinfo() any more.  Adapted from patch by Jacob Berkman.
+    * src/caps.c: Fill in a couple of missing initializers.
+    * src/vte.c, src/vte.h: Add accessor functions for use in language bindings,
+            breaking the ABI but not the API.
+    * python/vte.defs: Add defs for the new accessor functions.
+    * python/vte-demo.py: Add a scrollbar to the sample window, handle more of the
+            options the C version handles.  Stop expecting additional arguments with
+            a signal that doesn't include any.
+    * python/Makefile.am: We only have one target, so don't bother with
+            target-specific primaries if we can avoid it (#92252).
+    * vte.pc.in: Note build dependencies on ATK, Pango, and PangoX.
+
+ ChangeLog                              |  47 +-
+ HACKING                                |   5 +-
+ Makefile.am                            |   2 +-
+ NEWS                                   |   8 +
+ README                                 |   2 +-
+ configure.in                           |  90 ++--
+ doc/reference/Makefile.am              |  13 +-
+ doc/reference/tmpl/vte-unused.sgml     | 576 -------------------------
+ doc/reference/tmpl/vte.sgml            |  81 ++++
+ doc/reference/vte-sections.txt         |  10 +
+ gnome-pty-helper/AUTHORS               |   4 +
+ gnome-pty-helper/COPYING               | 481 +++++++++++++++++++++
+ gnome-pty-helper/Makefile.am           |  13 +
+ gnome-pty-helper/NEWS                  |   0
+ gnome-pty-helper/README                |   4 +
+ gnome-pty-helper/acinclude.m4          | 243 +++++++++++
+ gnome-pty-helper/autogen.sh            |  71 +++
+ gnome-pty-helper/configure.in          |  17 +
+ gnome-pty-helper/gnome-login-support.c | 329 ++++++++++++++
+ gnome-pty-helper/gnome-login-support.h |  38 ++
+ gnome-pty-helper/gnome-pty-helper.c    | 760 +++++++++++++++++++++++++++++++++
+ gnome-pty-helper/gnome-pty.h           |  21 +
+ gnome-pty-helper/gnome-utmp.c          | 348 +++++++++++++++
+ po/da.po                               |  42 +-
+ po/de.po                               |  42 +-
+ po/fr.po                               |  42 +-
+ po/nl.po                               |  42 +-
+ po/no.po                               |  42 +-
+ po/pt_BR.po                            |  42 +-
+ po/sv.po                               |  42 +-
+ po/vi.po                               |  42 +-
+ python/Makefile.am                     |  17 +-
+ python/vte-demo.py                     |  48 ++-
+ python/vte.defs                        |  73 +++-
+ src/Makefile.am                        |  46 +-
+ src/caps.c                             |   6 +-
+ src/interpret.c                        |   9 +-
+ src/iso2022.c                          |  12 +-
+ src/pty.c                              | 521 +++++++++++++++++++---
+ src/pty.h                              |   9 +
+ src/reaper.c                           |   3 +
+ src/ring.h                             |   2 +-
+ src/table.c                            |  40 +-
+ src/table.h                            |   2 +-
+ src/termcap.c                          |  16 +-
+ src/trie.c                             |   8 +-
+ src/vte.c                              | 408 +++++++++++++-----
+ src/vte.h                              |  19 +
+ src/vteaccess.c                        |   4 +-
+ src/vteapp.c                           |   9 +
+ vte.pc.in                              |   2 +-
+ vte.spec                               |  15 +-
+ 52 files changed, 3714 insertions(+), 1054 deletions(-)
+
+commit 8b212c6c4399fb2cf07cd6bb95eac17a6b790297
+Author: Jacob Berkman 
+Date:   2002-09-11 01:10:32 +0000
+
+    remove es until the file really gets added. also it wasn't added
+    
+    2002-09-10  Jacob Berkman  
+    
+            * configure.in (ALL_LINGUAS: remove es until the file really gets
+            added.  also it wasn't added alphabetically
+
+ ChangeLog    | 5 +++++
+ configure.in | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+commit 60eaadcd1b176228a08fec0764796f72582aaeda
+Author: Pablo Gonzalo del Campo 
+Date:   2002-09-11 00:48:05 +0000
+
+    Added "es" to ALL_LINGUAS
+    
+    2002-09-10 Pablo Gonzalo del Campo 
+    
+            * configure.in: Added "es" to ALL_LINGUAS
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit fade1f34b072b8444b75dd4ca7418f50a28e25ac (tag: vte_0_8_19)
+Author: Nalin Dahyabhai 
+Date:   2002-09-05 20:44:58 +0000
+
+    fix for building when builddir != srcdir
+    
+    * doc/reference/Makefile.am, doc/reference/vte.types: fix for building when
+            builddir != srcdir
+
+ doc/reference/Makefile.am | 2 +-
+ doc/reference/vte.types   | 6 +++---
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 172f0bc4ce4c5bd5e0784c6422103cf4dba2bb43
+Author: Nalin Dahyabhai 
+Date:   2002-09-05 20:34:46 +0000
+
+    - 0.8.19
+
+ vte.spec | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit a1aa6e995771aedd61bbbcc304d12fc5999a0ff0
+Author: Nalin Dahyabhai 
+Date:   2002-09-05 19:37:53 +0000
+
+    2002-09-05 nalin prefix library-internal interfaces with underscores so
+    
+    2002-09-05 nalin
+            * src/caps.c, src/caps.h, src/debug.c, src/debug.h, src/interpret.c,
+            src/iso2022.c, src/iso2022.h, src/pty.c, src/reaper.c, src/ring.c,
+            src/ring.h, src/table.c, src/table.h, src/termcap.c, src/termcap.h,
+            src/trie.c, src/trie.h, src/utf8echo.c, src/vte.c, src/vteaccess.c,
+            src/vteapp.c: prefix library-internal interfaces with underscores so
+            that gtk-doc doesn't guess they're public.
+            * src/vte.c: return FALSE from focus-in/focus-out/expose handlers.
+
+ ChangeLog                          |   9 +
+ doc/reference/tmpl/caps.sgml       |  66 ----
+ doc/reference/tmpl/debug.sgml      |  50 ---
+ doc/reference/tmpl/iso2022.sgml    |  38 --
+ doc/reference/tmpl/marshal.sgml    |  16 -
+ doc/reference/tmpl/ring.sgml       | 155 --------
+ doc/reference/tmpl/table.sgml      |  77 ----
+ doc/reference/tmpl/termcap.sgml    |  79 ----
+ doc/reference/tmpl/trie.sgml       |  76 ----
+ doc/reference/tmpl/vte-unused.sgml | 340 +++++++++++++++++
+ doc/reference/vte-sections.txt     |  47 ---
+ src/caps.c                         |  30 +-
+ src/caps.h                         |  22 +-
+ src/debug.c                        |  32 +-
+ src/debug.h                        |   4 +-
+ src/interpret.c                    |  68 ++--
+ src/iso2022.c                      | 216 +++++------
+ src/iso2022.h                      |  13 +-
+ src/pty.c                          |  26 +-
+ src/reaper.c                       |   2 +-
+ src/ring.c                         |  66 ++--
+ src/ring.h                         |  30 +-
+ src/table.c                        | 324 ++++++++--------
+ src/table.h                        |  26 +-
+ src/termcap.c                      | 146 +++----
+ src/termcap.h                      |  26 +-
+ src/trie.c                         | 241 ++++++------
+ src/trie.h                         |  30 +-
+ src/utf8echo.c                     |   2 +-
+ src/vte.c                          | 752 ++++++++++++++++++-------------------
+ src/vteaccess.c                    |  16 +-
+ src/vteapp.c                       |   2 +-
+ vte.spec                           |   2 +-
+ 33 files changed, 1388 insertions(+), 1641 deletions(-)
+
+commit e9c9661c32bef562f18ba5b0118d3a95d1bd9390 (tag: vte_0_8_18)
+Author: Nalin Dahyabhai 
+Date:   2002-09-05 05:59:15 +0000
+
+    add giant warnings about how these headers define library-internal
+    
+    * src/caps.h, src/debug.h, src/iso2022.h, src/marshal.h, src/ring.h,
+            src/table.h, src/termcap.h, src/trie.h: add giant warnings about how
+            these headers define library-internal interfaces.
+    * vte.spec: 0.8.18
+
+ ChangeLog                    |  6 +++++
+ doc/reference/tmpl/ring.sgml | 44 ++++++++++++++++++++-----------
+ po/da.po                     | 63 ++++++++++++++++++++++----------------------
+ po/de.po                     | 63 ++++++++++++++++++++++----------------------
+ po/fr.po                     | 57 ++++++++++++++++++++-------------------
+ po/nl.po                     | 57 ++++++++++++++++++++-------------------
+ po/no.po                     | 48 +++++++++++++++++----------------
+ po/pt_BR.po                  | 49 +++++++++++++++++-----------------
+ po/sv.po                     | 63 ++++++++++++++++++++++----------------------
+ po/vi.po                     | 45 ++++++++++++++++---------------
+ src/caps.h                   |  2 ++
+ src/debug.h                  |  2 ++
+ src/iso2022.h                |  2 ++
+ src/ring.h                   |  2 ++
+ src/table.h                  |  2 ++
+ src/termcap.h                |  2 ++
+ src/trie.h                   |  2 ++
+ vte.spec                     |  7 ++++-
+ 18 files changed, 275 insertions(+), 241 deletions(-)
+
+commit a2ba14a218070385765aff572ff9b052e5f78e88
+Author: Nalin Dahyabhai 
+Date:   2002-09-05 05:48:25 +0000
+
+    - remove items from pkgincludedir that are subject to change
+
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c2828bb1eb0986275d27496af2ed52caf199cb51
+Author: Nalin Dahyabhai 
+Date:   2002-09-05 05:48:06 +0000
+
+    - remove items from ToC that are subject to change
+
+ doc/reference/vte-docs.sgml | 5 -----
+ 1 file changed, 5 deletions(-)
+
+commit 5d694faf7d2c3fb490ffc135f3ffc4ab3130b19c
+Author: Nalin Dahyabhai 
+Date:   2002-09-05 05:42:13 +0000
+
+    2002-09-05 nalin first pass at writing documentation fix
+    
+    2002-09-05 nalin
+            * docs/reference: first pass at writing documentation
+            * src/termcap.c: fix how'd-that-ever-work in vte_termcap_strip(), patch
+            from Brian Cameron.  Take \\e as an alias for \\E, which is already
+            an alias for Escape.
+            * src/vte.c(vte_terminal_get_cursor): Return an absolute cursor position
+            instead of a relative position.
+
+ ChangeLog                          |   8 +
+ Makefile.am                        |   2 +-
+ configure.in                       |  53 +++
+ doc/Makefile.am                    |   1 +
+ doc/reference/Makefile.am          | 187 ++++++++++
+ doc/reference/tmpl/caps.sgml       |  66 ++++
+ doc/reference/tmpl/debug.sgml      |  50 +++
+ doc/reference/tmpl/iso2022.sgml    |  38 +++
+ doc/reference/tmpl/marshal.sgml    |  16 +
+ doc/reference/tmpl/pty.sgml        |  54 +++
+ doc/reference/tmpl/reaper.sgml     |  43 +++
+ doc/reference/tmpl/ring.sgml       | 143 ++++++++
+ doc/reference/tmpl/table.sgml      |  77 +++++
+ doc/reference/tmpl/termcap.sgml    |  79 +++++
+ doc/reference/tmpl/trie.sgml       |  76 +++++
+ doc/reference/tmpl/vte-unused.sgml | 236 +++++++++++++
+ doc/reference/tmpl/vte.sgml        | 683 +++++++++++++++++++++++++++++++++++++
+ doc/reference/tmpl/vteaccess.sgml  |  31 ++
+ doc/reference/vte-docs.sgml        |  31 ++
+ doc/reference/vte-sections.txt     | 153 +++++++++
+ doc/reference/vte.types            |  10 +
+ src/caps.c                         |  10 +
+ src/caps.h                         |  12 +-
+ src/debug.h                        |   2 +-
+ src/iso2022.h                      |   1 -
+ src/pty.c                          |  36 ++
+ src/reaper.c                       |   5 +
+ src/ring.c                         |  58 +++-
+ src/ring.h                         |  12 +-
+ src/table.c                        |   2 +-
+ src/termcap.c                      |  74 +++-
+ src/trie.c                         |   2 +-
+ src/vte.c                          | 674 ++++++++++++++++++++++++++++++++----
+ src/vte.h                          |  34 +-
+ src/vteaccess.c                    |  12 +-
+ src/vteaccess.h                    |  10 +-
+ 36 files changed, 2866 insertions(+), 115 deletions(-)
+
+commit 590ba538b7fa77509035453bc8a0e4d6f276bfc1
+Author: jacob berkman 
+Date:   2002-09-04 18:36:46 +0000
+
+    only compile the FC_HINT_STYLE part if FC_HINT_STYLE is defined
+    
+    2002-09-04  jacob berkman  
+    
+            * src/vte.c (vte_default_substitute): only compile the FC_HINT_STYLE
+            part if FC_HINT_STYLE is defined
+
+ ChangeLog | 5 +++++
+ src/vte.c | 2 ++
+ 2 files changed, 7 insertions(+)
+
+commit 08be108d9922a60f01986fa57c593f90c63ebffb
+Author: Nalin Dahyabhai 
+Date:   2002-09-04 16:43:11 +0000
+
+    Add missing fontconfig.h include, spotted by Jacob Berkman.
+    
+    * src/vte.c: Add missing fontconfig.h include, spotted by Jacob Berkman.
+
+ ChangeLog | 5 +++++
+ src/vte.c | 3 +++
+ 2 files changed, 8 insertions(+)
+
+commit 2a76bdc27031deba65d205199f4aad7d3babc1a3
+Author: Brian Cameron 
+Date:   2002-09-04 08:33:08 +0000
+
+    Added stropts.h check for Solaris. Do not send data to the slave if the
+    
+    
+    2002-09-04 Brian Cameron 
+        * configure.in: Added stropts.h check for Solaris.
+        * src/vte.c: Do not send data to the slave if the length is zero.
+        Some shells on Solaris do not handle this well.
+        * src/pty.c: Added ptem/ldterm/ttcompat ioctls so VTE will work
+        on Solaris.
+
+ ChangeLog    |  7 +++++++
+ configure.in |  1 +
+ src/pty.c    | 21 +++++++++++++++++++++
+ src/vte.c    |  2 +-
+ 4 files changed, 30 insertions(+), 1 deletion(-)
+
+commit f0953feec5ff4b6cb5e0a93f4049cac1cb78098d (tag: vte_0_8_17)
+Author: Nalin Dahyabhai 
+Date:   2002-09-03 22:35:37 +0000
+
+    Avoid double color deallocations with Xft.
+    
+    * src/vte.c: Avoid double color deallocations with Xft.
+
+ ChangeLog |  3 +++
+ src/vte.c | 34 ++++++++++++++++++++++------------
+ vte.spec  |  5 ++++-
+ 3 files changed, 29 insertions(+), 13 deletions(-)
+
+commit 27721b50e75f6d75fabf685270ad519a91bbabf7 (tag: vte_0_8_16)
+Author: Nalin Dahyabhai 
+Date:   2002-09-03 22:05:13 +0000
+
+    Handle color allocation failures with Xft better. Clean up typedef
+    
+    * src/vte.c: Handle color allocation failures with Xft better.
+    * src/vte.h: Clean up typedef declarations.
+
+ ChangeLog |  8 +++++++-
+ src/vte.c | 12 +++++++-----
+ src/vte.h | 15 ++++++++++-----
+ vte.spec  |  5 ++++-
+ 4 files changed, 28 insertions(+), 12 deletions(-)
+
+commit c217b1f52f2daeaace161ed69daaeec799f2ca0b
+Author: Nalin Dahyabhai 
+Date:   2002-09-03 19:10:31 +0000
+
+    Modify the child-exited signal to pass signed ints and an unmodified exit
+    
+    * src/marshal.list, src/reaper.c, src/reaper.h, src/vte.c: Modify the
+            child-exited signal to pass signed ints and an unmodified exit status,
+            allowing the callback to check for normal/abnormal exit status.
+
+ ChangeLog        |  5 +++++
+ src/marshal.list |  1 +
+ src/reaper.c     | 19 ++++++-------------
+ src/vte.c        |  2 +-
+ 4 files changed, 13 insertions(+), 14 deletions(-)
+
+commit da6d49171075c60a7c81f94317651e9230eb58c3 (tag: vte_0_8_15, tag: vte_0_8_14)
+Author: Nalin Dahyabhai 
+Date:   2002-09-02 23:25:28 +0000
+
+    - cleanups - don't invalidate subwindows
+    
+    - cleanups
+    - don't invalidate subwindows
+
+ src/vte.c | 31 +++++++++++++++++++------------
+ vte.spec  |  5 ++++-
+ 2 files changed, 23 insertions(+), 13 deletions(-)
+
+commit 15258667b28664dd603e2a7fa2a8861eb14645e8
+Author: Nalin Dahyabhai 
+Date:   2002-09-02 20:19:47 +0000
+
+    Don't send zero-length strings to the child -- it may not be able to cope
+    
+    * src/vte.c: Don't send zero-length strings to the child -- it may not be able
+            to cope properly.  Spotted by Brian Cameron.
+    * src/vte.c: Handle cursor exposes correctly for multicolumn characters, no
+            matter which cell the cursor is in.  Fix autoscrolling boundary checks
+            for when allocation.y != 0.
+
+ ChangeLog       |   9 ++++
+ src/Makefile.am |   2 +-
+ src/vte.c       | 145 +++++++++++++++++++++++++++++++++++++-------------------
+ 3 files changed, 107 insertions(+), 49 deletions(-)
+
+commit d1948e0c98eca4162204c20dba98af2032510d22
+Author: Nalin Dahyabhai 
+Date:   2002-08-30 22:35:58 +0000
+
+    Wrap correctly to avoid screwing up multicolumn characters.
+    
+    * src/vte.c(vte_terminal_insert_char): Wrap correctly to avoid screwing up
+            multicolumn characters.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 5 +++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit fc877576767cde785d918dbf1e9025c76de3958d
+Author: Nalin Dahyabhai 
+Date:   2002-08-30 21:57:43 +0000
+
+    Get smarter about when it's necessary to start messing with our
+    
+    * src/vte.c: Get smarter about when it's necessary to start messing with our
+            adjustments (Red Hat #73091).  Change the way we clear the screen so
+            that all of the contents of the current screen become scrollback data.
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 41 +++++++++++++++++++++--------------------
+ vte.spec  |  5 ++++-
+ 3 files changed, 31 insertions(+), 21 deletions(-)
+
+commit 90fefc0f6506e60d0484c541b202ab73c0d6eec0
+Author: Nalin Dahyabhai 
+Date:   2002-08-30 21:04:16 +0000
+
+    Register VteTerminalEraseBinding with GObject as an enum. Update. Ignore
+    
+    * src/vte.c: Register VteTerminalEraseBinding with GObject as an enum.
+    * python/vte.defs: Update.
+    * python/vte.overrides: Ignore vte_terminal_get_text_range().
+
+ ChangeLog           |  6 +++++
+ python/vte.defs     | 77 +++++++++++++++++++++++++++++++++++++++++++++++++----
+ python/vte.override |  1 +
+ src/vte.c           | 32 +++++++++++++++++++---
+ src/vte.h           | 15 +++++++----
+ 5 files changed, 118 insertions(+), 13 deletions(-)
+
+commit 4d858f5dd22e8c6054026775712c4af3ff374716 (tag: vte_0_8_13)
+Author: Nalin Dahyabhai 
+Date:   2002-08-30 18:48:38 +0000
+
+    Restore the focus-in/focus-out handlers -- the defaults don't quite DTRT
+    
+    * src/vte.c: Restore the focus-in/focus-out handlers -- the defaults don't
+            quite DTRT for us because they miss our im_context (#72946).  When
+            setting the cursor location for the input method, make the Y coordinate
+            relative to the window, not the scrollback buffer.  When resizing the
+            scrollback buffer, clamp the cursor to the set of possible locations,
+            not the visible locations.
+
+ ChangeLog |  8 ++++++++
+ src/vte.c | 16 +++++++++-------
+ vte.spec  |  6 +++++-
+ 3 files changed, 22 insertions(+), 8 deletions(-)
+
+commit d84edf906e33f9b7c3a9eeb626541deb98d95f68
+Author: Nalin Dahyabhai 
+Date:   2002-08-30 15:49:45 +0000
+
+    Initialize the pty master fd to -1 to avoid spurious window resizes on fd
+    
+    * src/vte.c: Initialize the pty master fd to -1 to avoid spurious window resizes
+            on fd 0.
+    * src/debug.c, src/debug.h: Add a "pty" debug message class.
+
+ ChangeLog   |  5 +++++
+ src/debug.c |  3 +++
+ src/debug.h |  1 +
+ src/pty.c   | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ src/vte.c   |  4 ++++
+ 5 files changed, 76 insertions(+), 5 deletions(-)
+
+commit 9be0193cd59881d9ab81fd22be710026d24c12d9 (tag: vte_0_8_12)
+Author: Nalin Dahyabhai 
+Date:   2002-08-30 14:49:37 +0000
+
+    Fix a how'd-that-ever-work bug (not returning anything from
+    
+    * src/iso2022.c: Fix a how'd-that-ever-work bug (not returning anything from
+            vte_iso2022_new()), spotted by Brian Cameron.
+    * configure.in: Use -Wall when building with gcc in maintainer mode.
+    * src/interpret.c, src/ring.h, src/table.c, src/trie.c, src/vte.c,
+            src/vteaccess.c: Warning cleanups.
+
+ ChangeLog       |  7 +++++++
+ configure.in    |  1 +
+ src/interpret.c |  2 +-
+ src/iso2022.c   |  1 +
+ src/ring.h      |  5 ++---
+ src/table.c     |  5 +++--
+ src/trie.c      |  4 ++--
+ src/vte.c       | 18 +++++++++---------
+ src/vteaccess.c |  8 ++++----
+ vte.spec        |  5 ++++-
+ 10 files changed, 34 insertions(+), 22 deletions(-)
+
+commit 3993c17be8839f7adda132270e8d9238d9f49b95 (tag: vte_0_8_11)
+Author: Nalin Dahyabhai 
+Date:   2002-08-29 20:19:51 +0000
+
+    Clean up bookkeeping for mouse autoscrolling and adjustment change
+    
+    * src/vte.c: Clean up bookkeeping for mouse autoscrolling and adjustment change
+            notifications.  Reset the scrolling and insertion deltas when clearing
+            the history.
+    * src/interpret.c: Don't dump data on incomplete conversion errors, which we're
+            going to retry anyway.
+    * src/iso2022.txt: Add iso-2022-kr examples (no workee -- uses GR).
+    * src/vte.c, src/vte.h: Add vte_terminal_copy_primary and
+            vte_terminal_paste_primary(), because I really want to let profterm
+            decide default values for key bindings.
+
+ ChangeLog       | 17 +++++++++++++-
+ src/interpret.c | 23 +++++++++++-------
+ src/iso2022.txt |  9 +++----
+ src/vte.c       | 73 ++++++++++++++++++++++++++++++++++++++++-----------------
+ src/vte.h       |  2 ++
+ vte.spec        |  6 ++++-
+ 6 files changed, 94 insertions(+), 36 deletions(-)
+
+commit b4069ef78a1cce43ad60dde14f7c298c85de2fb9
+Author: Gustavo Noronha Silva 
+Date:   2002-08-28 21:18:09 +0000
+
+    new translation, by "Alexandre Folle de Menezes" 
+
+ ChangeLog    |   4 +++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/pt_BR.po  | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 126 insertions(+), 1 deletion(-)
+
+commit 00b80b8a6ed76d1242eef490707a6f4f16aebdff (tag: vte_0_8_10)
+Author: Nalin Dahyabhai 
+Date:   2002-08-28 04:16:48 +0000
+
+    Stop autoscrolling on button release.
+    
+    * src/vte.c: Stop autoscrolling on button release.
+
+ ChangeLog | 2 ++
+ src/vte.c | 5 +++++
+ 2 files changed, 7 insertions(+)
+
+commit ac4cf6cdecbd7953b05c3daf2ab7f6614e5a83fe
+Author: Nalin Dahyabhai 
+Date:   2002-08-28 04:03:31 +0000
+
+    When autoscrolling, clamp the new boundaries to what the user can see.
+    
+    * src/vte.c: When autoscrolling, clamp the new boundaries to what the user can
+            see.
+
+ ChangeLog | 3 +++
+ src/vte.c | 3 +++
+ 2 files changed, 6 insertions(+)
+
+commit 882aa116b2b8536693c5dfb38df17be7d9eb65df
+Author: Nalin Dahyabhai 
+Date:   2002-08-28 03:46:46 +0000
+
+    Implement autoscroll (Red Hat #70481).
+    
+    * src/vte.c: Implement autoscroll (Red Hat #70481).
+
+ ChangeLog |   2 ++
+ src/vte.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ vte.spec  |   4 ++-
+ 3 files changed, 113 insertions(+), 4 deletions(-)
+
+commit 461fa282a5a5d757ce840c68efb368e5fc7c1f2e
+Author: Nalin Dahyabhai 
+Date:   2002-08-28 02:54:37 +0000
+
+    Only perform cr-lf substitutions when pasting text, not when inputting
+    
+    * src/vte.c: Only perform cr-lf substitutions when pasting text, not when
+            inputting from a live user (Red Hat #72639).  Bind GDK_ISO_Left_Tab to
+            kB.  Formatting changes.
+    * termcaps/xterm: Bind kB to back-tab (Red Hat #70340).
+
+ ChangeLog      |    8 +-
+ src/vte.c      | 3137 ++++++++++++++++++++++++++++----------------------------
+ termcaps/xterm |    4 +-
+ vte.spec       |    5 +-
+ 4 files changed, 1582 insertions(+), 1572 deletions(-)
+
+commit cd2aefd669762f35a2a0e1b19cc5cc6358d89237 (tag: vte_0_8_9)
+Author: Nalin Dahyabhai 
+Date:   2002-08-27 21:10:25 +0000
+
+    Don't tamper with the scrolling offsets -- they're updated when we handle
+    
+    * src/vte.c: Don't tamper with the scrolling offsets -- they're updated when we
+            handle adjustment_changed notifications.  Scroll instead of just moving
+            the cursor down when soft-wrapping to the next line.  Avoid emitting
+            adjustment_changed when only the value has changed, likewise for the
+            value and the other fields of the adjustment.
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 49 +++++++++++++++++++++++--------------------------
+ vte.spec  |  5 ++++-
+ 3 files changed, 34 insertions(+), 27 deletions(-)
+
+commit f867bb1dc01cc507daf43081fa844f04871bce9b (tag: vte_0_8_8)
+Author: Nalin Dahyabhai 
+Date:   2002-08-27 07:11:58 +0000
+
+    Keep cursor position and scrolling offsets from going wonky when you
+    
+    * src/vte.c: Keep cursor position and scrolling offsets from going wonky when
+            you resize, especially on the alternate screen.  Suppress duplicate
+            adjustment_changed notifications.
+    * src/vteapp.c: Set the MIN_SIZE geometry hints so that we can resize to
+            unreasonably-small dimensions.
+    * src/ring.c, src/ring.h: Add vte_ring_new_with_delta().
+
+ ChangeLog    |   8 +++
+ src/ring.c   |  14 ++++-
+ src/ring.h   |  10 +++-
+ src/vte.c    | 191 ++++++++++++++++++++++++++++++++++++++++++++---------------
+ src/vteapp.c |   6 +-
+ vte.spec     |   8 ++-
+ 6 files changed, 184 insertions(+), 53 deletions(-)
+
+commit 7145a6fbf847d0b4d6329dfd4f2698167fd206d5
+Author: Nalin Dahyabhai 
+Date:   2002-08-26 19:49:21 +0000
+
+    Add padding spaces after full lines as well -- spotted by both notting and
+    
+    * src/vte.c: Add padding spaces after full lines as well -- spotted by both
+            notting and pjones.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 7 ++++++-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+commit ce3af3d0451b7ed576c6fabaa9e553b284441b02 (tag: vte_0_8_7)
+Author: Nalin Dahyabhai 
+Date:   2002-08-26 16:41:15 +0000
+
+    Don't deadlock when substitution fails, spotted by msw.
+    
+    * src/vte.c: Don't deadlock when substitution fails, spotted by msw.
+
+ ChangeLog |  3 +++
+ src/vte.c | 18 ++++++++++++------
+ vte.spec  |  5 ++++-
+ 3 files changed, 19 insertions(+), 7 deletions(-)
+
+commit 364df6aba1a1e982d9c9e7d8c6bc3bd93af668e4 (tag: vte_0_8_6)
+Author: Nalin Dahyabhai 
+Date:   2002-08-26 14:11:53 +0000
+
+    If GDK_USE_XFT is set, check the value of GDK_USE_XFT, not VTE_USE_XFT.
+    
+    * src/vte.c: If GDK_USE_XFT is set, check the value of GDK_USE_XFT, not
+            VTE_USE_XFT.  Spotted by hp.
+
+ ChangeLog | 4 ++++
+ src/vte.c | 2 +-
+ vte.spec  | 5 ++++-
+ 3 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 8aacadebd47cc66a019a8ed2fee59041a6e9c0d0 (tag: vte_0_8_5)
+Author: Nalin Dahyabhai 
+Date:   2002-08-25 23:27:56 +0000
+
+    Heed the reverse-video setting when painting character cells again. Make
+    
+    * src/vte.c: Heed the reverse-video setting when painting character cells again.
+            Make selection and matching coordinates global, fixing the selecting-
+            while-scrolling case.  Prevent overdraws into the padding area on the
+            right.
+
+ ChangeLog |   8 ++-
+ src/vte.c | 210 +++++++++++++++++++++++++++++++++++++++-----------------------
+ src/vte.h |   9 ++-
+ vte.spec  |   5 +-
+ 4 files changed, 151 insertions(+), 81 deletions(-)
+
+commit c3f69ddbfef582dd5b59573871c402d7b4ce6940 (tag: vte_0_8_4)
+Author: Nalin Dahyabhai 
+Date:   2002-08-25 19:48:05 +0000
+
+    2002-08-25 nalin Make nd() move right but not wrap -- according to Strang
+    
+    2002-08-25 nalin
+            * src/vte.c:  Make nd() move right but not wrap -- according to Strang
+            it's undefined, but xterm doesn't wrap it.  Separate do/DO from sf/SF
+            and up/UP from sr/SR, because the scrolling behavior is supposed to be
+            different.  Add support for decset/decreset 7 (wraparound mode) and
+            1051 (Sun keyboard).  Add support for DECALN.  Remove some type checks
+            from run-time which the compiler can catch with certainty.
+
+ ChangeLog  |  10 +-
+ src/caps.c |   2 +
+ src/vte.c  | 394 ++++++++++++++++++++++++++++++++++---------------------------
+ vte.spec   |   6 +-
+ 4 files changed, 233 insertions(+), 179 deletions(-)
+
+commit 3fe0da425a461c8110d95144c8382a495fe1344a
+Author: Kjartan Maraas 
+Date:   2002-08-24 23:18:40 +0000
+
+    Added Norwegian (no) to ALL_LINGUAS.
+    
+    2002-08-25  Kjartan Maraas  
+    
+            * configure.in: Added Norwegian (no) to ALL_LINGUAS.
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit 731f5273482b5d58a0cefe4bc3b439ac66c4a4fa
+Author: Kjartan Maraas 
+Date:   2002-08-24 23:17:39 +0000
+
+    Forgot the ChangeLog
+
+ po/ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 1aa5d2400a32ed572f580dfdb5e53216e78d06f1
+Author: Kjartan Maraas 
+Date:   2002-08-24 23:17:13 +0000
+
+    New translation
+
+ po/no.po | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 114 insertions(+)
+
+commit 1e7689b7d9f7e4156d4e9e4c866f640d92be0108
+Author: Pablo Saratxaga 
+Date:   2002-08-24 16:14:55 +0000
+
+    Added Vietnamese file
+
+ ChangeLog    |   2 ++
+ configure.in |   2 +-
+ po/ChangeLog |   4 +++
+ po/vi.po     | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 123 insertions(+), 1 deletion(-)
+
+commit 92f262a96d7793833150d7159801572e966d874a
+Author: Nalin Dahyabhai 
+Date:   2002-08-22 23:33:56 +0000
+
+    Whoa, back that out.
+
+ configure.in | 6 ------
+ 1 file changed, 6 deletions(-)
+
+commit 3c6d81bf06becda3f9ab005c7310b2343588115e
+Author: Nalin Dahyabhai 
+Date:   2002-08-22 23:27:31 +0000
+
+    Bind ENQ to "return-terminal-status". Fix an off-by-one which incorrectly
+    
+    * src/caps.c: Bind ENQ to "return-terminal-status".
+    * src/iso2022.c: Fix an off-by-one which incorrectly triggered an assertion.
+    * src/vte.c: Implement send-primary/secondary-device-attributes.  Bind
+            shift+insert to "paste PRIMARY".  Guard against NULL window/icon title
+            when telling the child app what they are.
+
+ ChangeLog     |   7 ++++
+ configure.in  |   6 ++++
+ src/caps.c    |   3 ++
+ src/iso2022.c |   4 +--
+ src/vte.c     | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
+ vte.spec      |   2 +-
+ 6 files changed, 111 insertions(+), 15 deletions(-)
+
+commit e0815136a8d8ec40b3d64cca372199f50d3d2bad
+Author: Nalin Dahyabhai 
+Date:   2002-08-22 20:50:13 +0000
+
+    Set geometry hints using the initial font setup.
+    
+    * src/vteapp.c: Set geometry hints using the initial font setup.
+
+ ChangeLog    | 2 ++
+ src/vteapp.c | 1 +
+ 2 files changed, 3 insertions(+)
+
+commit 8d4157d627e109caf00009f7a7468c3d8fe97729 (tag: vte_0_8_3)
+Author: Nalin Dahyabhai 
+Date:   2002-08-22 20:19:59 +0000
+
+    0.8.3
+
+ vte.spec | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit d7144c30e3481e893677d2653b48c2168c6a0bc7
+Author: Nalin Dahyabhai 
+Date:   2002-08-22 20:19:47 +0000
+
+    Make use of the visible bell a separate option from use of the audible
+    
+    * src/vte.c, src/vte.h: Make use of the visible bell a separate option from
+            use of the audible bell, allowing both/neither to be used.  Open fonts
+            right away again -- profterm reads the metrics right after calling
+            set_font(), so we have to open fonts ASAP.  Rework the Xft/Pango/Xlib
+            decision code to be more consistent.  Watch for style changes and reset
+            our font to the new style's font when we're already using the old
+            style's font.
+
+ ChangeLog       |   8 ++
+ src/Makefile.am |   2 +-
+ src/vte.c       | 322 ++++++++++++++++++++++++++++++--------------------------
+ src/vte.h       |   3 +
+ 4 files changed, 184 insertions(+), 151 deletions(-)
+
+commit 72c9f7ef1fa08f27e9ab7fcbaef90b938d7ff4ca
+Author: Nalin Dahyabhai 
+Date:   2002-08-22 02:31:31 +0000
+
+    The unrealize/realize test, from msw.
+
+ python/unrealize.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 51 insertions(+)
+
+commit 80cbf7e0367fe293c0b62a6412d5e068022e09af (tag: vte_0_8_2)
+Author: Nalin Dahyabhai 
+Date:   2002-08-22 02:02:40 +0000
+
+    Take a vte_table as an additional argument, and don't mess with text
+    
+    * src/iso2022.c(vte_iso2022_substitute): Take a vte_table as an additional
+            argument, and don't mess with text that's part of a control sequence,
+            fixing weird behaviors when we got control sequences in the middle of
+            shift-out text.
+    * src/table.c(vte_table_match): Speed up for the no-arguments-requested
+            case, which just became much more common.
+
+ ChangeLog       |   6 +
+ src/Makefile.am |   4 +-
+ src/interpret.c |   5 +-
+ src/iso2022.c   | 585 +++++++++++++++++++++++++++++---------------------------
+ src/iso2022.h   |   3 +-
+ src/table.c     |  14 +-
+ src/vte.c       |   3 +-
+ vte.spec        |   5 +-
+ 8 files changed, 329 insertions(+), 296 deletions(-)
+
+commit 55bccdf14d96799d421659b1910213d3c1a2733b (tag: vte_0_8_1)
+Author: Nalin Dahyabhai 
+Date:   2002-08-21 21:53:27 +0000
+
+    Cap the maximum number of characters we draw in a single call to
+    
+    * src/vte.c(vte_terminal_draw_rows): Cap the maximum number of characters we
+            draw in a single call to vte_terminal_draw_cells at a reasonable number.
+
+ ChangeLog   |  4 ++++
+ src/table.c | 11 ++++++++++-
+ src/vte.c   | 51 ++++++++++++++++++++++++++++++++++++++-------------
+ 3 files changed, 52 insertions(+), 14 deletions(-)
+
+commit 58245b99625244af4af22fd865193c7cf4419979
+Author: Nalin Dahyabhai 
+Date:   2002-08-21 14:29:53 +0000
+
+    Don't overwrite the original pattern pointers before freeing the old
+    
+    * src/table.c: Don't overwrite the original pattern pointers before freeing
+            the old value.
+    * src/vte.c: Use the same pango context whenever possible, to save on PangoX
+            startup time.
+
+ ChangeLog   |  7 ++++-
+ src/table.c |  3 +++
+ src/vte.c   | 90 +++++++++++++++++++++++++++++++++++++++----------------------
+ 3 files changed, 67 insertions(+), 33 deletions(-)
+
+commit d9b83cc2d545ea08a28361066cf55c5bb49433d9
+Author: Nalin Dahyabhai 
+Date:   2002-08-20 22:32:48 +0000
+
+    Unref the output channel one more time when we're done sending data to the
+    
+    * src/vte.c: Unref the output channel one more time when we're done sending data
+            to the child.  Free the background data GDK property when we're finished
+            with it.  Don't retrieve the pango context when drawing unless Xft has
+            already been disabled.  Don't try to use the pango layout to draw unless
+            it's valid.  Don't try to use the XftDraw item to draw unless it's
+            valid.
+
+ ChangeLog |  7 +++++++
+ src/vte.c | 48 +++++++++++++++++++++++++++---------------------
+ 2 files changed, 34 insertions(+), 21 deletions(-)
+
+commit b8b0d88316ee6643554ad057a28fa396370f0c92
+Author: Nalin Dahyabhai 
+Date:   2002-08-20 21:50:59 +0000
+
+    Dispose of the updated substitution context properly when processing
+    
+    * src/vte.c: Dispose of the updated substitution context properly when
+            processing blocks of input text.  Spotted by Arjan van de Ven.
+
+ ChangeLog | 3 +++
+ src/vte.c | 2 ++
+ vte.spec  | 7 ++++++-
+ 3 files changed, 11 insertions(+), 1 deletion(-)
+
+commit 6fbc7fb151870b632b0d1221dbdea510b379fbc2 (tag: vte_0_8_0)
+Author: Nalin Dahyabhai 
+Date:   2002-08-20 21:25:53 +0000
+
+    - run automake with -c
+
+ autogen.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b35ab602d24d1ea54b0adafc5009de95d7db1523
+Author: Nalin Dahyabhai 
+Date:   2002-08-20 20:55:20 +0000
+
+    Debug when rows get freed. Maybe-release pango contexts after unreffing
+    
+    * src/ring.c: Debug when rows get freed.
+    * src/vte.c: Maybe-release pango contexts after unreffing layouts which refer
+            to them.  Decide on how we want to draw fonts before deciding which
+            fonts to draw, to avoid spurious font loading.  Remove output tags when
+            the output tag's callback is about to return FALSE.
+
+ ChangeLog  |  6 ++++++
+ src/ring.c | 23 ++++++++++++++++++++---
+ src/vte.c  | 41 ++++++++++++++++++++++++++++++++---------
+ 3 files changed, 58 insertions(+), 12 deletions(-)
+
+commit a5eda7347f6d4e4b6fab41682f88d8590644fb26
+Author: Nalin Dahyabhai 
+Date:   2002-08-20 16:00:11 +0000
+
+    Don't leak the hintstyle and rgba settings. Patch from Arjan van de Ven.
+    
+    * src/vte.c: Don't leak the hintstyle and rgba settings.  Patch from Arjan van
+            de Ven.  Free PangoX contexts when we're done with them because we get
+            a new one every time, spotted by Arjan van de Ven.
+
+ ChangeLog |  4 +++
+ src/vte.c | 83 ++++++++++++++++++++++++++++++++++++++++++++-------------------
+ 2 files changed, 62 insertions(+), 25 deletions(-)
+
+commit 6f7f5de82c2e11d8fbe1e496cd3cd5b2d04a0d2e
+Author: Nalin Dahyabhai 
+Date:   2002-08-20 04:47:32 +0000
+
+    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).
+
+ ChangeLog       |  12 +-
+ po/da.po        |  42 ++--
+ po/de.po        |  62 ++---
+ po/fr.po        |  47 ++--
+ po/nl.po        |  64 ++---
+ po/sv.po        |  42 ++--
+ src/debug.c     |   3 +
+ src/debug.h     |   1 +
+ src/interpret.c |   9 +
+ src/iso2022.c   |  73 +++++-
+ src/iso2022.txt |   6 +
+ src/ring.c      |  10 +-
+ src/vte.c       | 755 +++++++++++++++++++++++++++++++-------------------------
+ vte.spec        |   7 +-
+ 14 files changed, 658 insertions(+), 475 deletions(-)
+
+commit 56a7bbf39468f9263a52fdda5e330a61bbdf5810
+Author: Nalin Dahyabhai 
+Date:   2002-08-19 23:30:35 +0000
+
+    Add sample iso-2002 escaped text.
+
+ src/iso2022.txt | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 45ccd9df232a04ddb126a897179966c03a5381f7
+Author: Nalin Dahyabhai 
+Date:   2002-08-19 23:01:28 +0000
+
+    Fixup some fontconfig/Xft mixups. Set the hint style instead of hinting
+    
+    * src/vte.c: Fixup some fontconfig/Xft mixups.  Set the hint style instead of
+            hinting when reading the GTK hint style setting.
+
+ ChangeLog |  3 +++
+ src/vte.c | 31 ++++++++++++-------------------
+ 2 files changed, 15 insertions(+), 19 deletions(-)
+
+commit 2e6daaef02f271e7f84deb7fd269c2642f16834a
+Author: Nalin Dahyabhai 
+Date:   2002-08-19 22:33:21 +0000
+
+    Use gssize instead of ssize_t. Perform substitutions while processing. Use
+    
+    * src/vte.h, src/vte.c: Use gssize instead of ssize_t.  Perform substitutions
+            while processing.  Use PangoX contexts when we're using the PangoX
+            fontmap and when doing PangoX rendering.
+
+ ChangeLog |   5 ++
+ src/vte.c | 201 ++++++++++++++++++++++++--------------------------------------
+ src/vte.h |   9 +--
+ 3 files changed, 86 insertions(+), 129 deletions(-)
+
+commit 5b5257d4e61579590a0523d37f965dc55d6ec8c1
+Author: Nalin Dahyabhai 
+Date:   2002-08-19 22:27:33 +0000
+
+    Add. Use unitables. Remove sequences for designating character sets.
+    
+    * src/mkunitables.sh,src/unitable.*: Add.
+    * src/iso2022.c, src/iso2022.h: Use unitables.
+    * src/caps.c: Remove sequences for designating character sets.  Switch to using
+            a second passed-in buffer for storing results in case the caller doesn't
+            want substitutions done in-place.
+    * src/interpret.c: Perform substitution.
+    * src/table.c, src/table.h: Use gssize instead of ssize_t.
+    * src/termcap.c, src/termcap.h: Use gssize instead of ssize_t.
+    * src/utf8echo.c: Use strtol, allowing users to specify code points in hex
+            format.
+
+ ChangeLog             |    11 +
+ src/Makefile.am       |    26 +-
+ src/caps.c            |    19 +-
+ src/debug.c           |     3 +
+ src/debug.h           |     1 +
+ src/interpret.c       |    62 +-
+ src/iso2022.c         |   372 +-
+ src/iso2022.h         |     3 +-
+ src/mkunitables.sh    |    39 +
+ src/table.c           |    20 +-
+ src/table.h           |     4 +-
+ src/termcap.c         |    32 +-
+ src/termcap.h         |     4 +-
+ src/unitable.CNS11643 | 17712 ++++++++++++++++++++++++++++++++++++++++++++++++
+ src/unitable.GB12345  |  7549 +++++++++++++++++++++
+ src/unitable.GB2312   |  7446 ++++++++++++++++++++
+ src/unitable.JIS0201  |    66 +
+ src/unitable.JIS0208  |  6879 +++++++++++++++++++
+ src/unitable.JIS0212  |  6068 +++++++++++++++++
+ src/unitable.KSC5601  | 17047 ++++++++++++++++++++++++++++++++++++++++++++++
+ src/utf8echo.c        |     4 +-
+ 21 files changed, 63207 insertions(+), 160 deletions(-)
+
+commit 8deab9f56af18d549ac438fe839e9da058e96bd6
+Author: Nalin Dahyabhai 
+Date:   2002-08-19 16:41:50 +0000
+
+    Rename vte.py to vte-demo.py, so that having . in your PYTHONPATH doesn't
+    do odd things if you run the script from the build directory (when it's also
+    the source directory).
+
+ python/{vte.py => vte-demo.py} | 0
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit ee05b8f8a7bbb426af0101c37489c7246243570e
+Author: Nalin Dahyabhai 
+Date:   2002-08-15 07:16:50 +0000
+
+    Add.
+
+ src/iso2022.c | 679 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/iso2022.h |  38 ++++
+ 2 files changed, 717 insertions(+)
+
+commit 46238f7fd50c4fc272f1ca5a8b5ae0aa3f7799b0
+Author: Nalin Dahyabhai 
+Date:   2002-08-14 19:39:36 +0000
+
+    repaint the entire window to ensure that any overdraw area we're not
+    
+    * src/vte.c(vte_terminal_configure_toplevel): repaint the entire window to
+            ensure that any overdraw area we're not paying attention to at least
+            gets cleared to the background.
+    * src/vte.c(vte_terminal_locale_encoding): don't try to second-guess the local
+            encoding, just use the current charset as returned by g_get_charset().
+
+ ChangeLog    |  7 +++++++
+ src/vte.c    | 14 ++++++++------
+ src/vteapp.c | 24 ++++++++++++++++--------
+ 3 files changed, 31 insertions(+), 14 deletions(-)
+
+commit d50f85c7bacde3d3e8091b74c56ba2281cd1e522 (tag: vte_0_7_4)
+Author: Nalin Dahyabhai 
+Date:   2002-08-14 06:10:19 +0000
+
+    drop pending incoming data on reset. give reprocessing of pending input
+    
+    * src/vte.c(vte_terminal_reset): drop pending incoming data on reset.
+    * src/vte.c: give reprocessing of pending input data a higher priority than
+            reading it from the child to prevent backlogs on corrupt or invalid
+            multibyte data from building up and whacking us exponentially.
+    * src/vte.c(vte_sequence_handler_delete_lines): initialize lines added to the
+            current default colors.  Spotted by jrb.
+    * src/vte.c(vte_terminal_set_font): don't try to pick up GTK Xft settings
+            unless we're using FontConfig.  Patch from otaylor.
+
+ ChangeLog | 18 ++++++++++---
+ src/vte.c | 89 ++++++++++++++++++++++++++++++++++++++++++++-------------------
+ vte.spec  |  7 ++++-
+ 3 files changed, 82 insertions(+), 32 deletions(-)
+
+commit fa7e15acc03629c166d9bbde7c26a13e7f274274
+Author: Ole Laursen 
+Date:   2002-08-13 20:12:42 +0000
+
+    Updated Danish translation.
+    
+    2002-08-13  Ole Laursen  
+    
+            * da.po: Updated Danish translation.
+
+ po/ChangeLog |  6 +++++-
+ po/da.po     | 63 +++++++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 38 insertions(+), 31 deletions(-)
+
+commit 1bf3640ee49d932e61c3cabf07a8939114eb4894
+Author: Nalin Dahyabhai 
+Date:   2002-08-13 01:49:50 +0000
+
+    reorder set/reset processing for decset so that 1049 properly represents
+    
+    * src/vte.c: reorder set/reset processing for decset so that 1049 properly
+            represents the combination of 1047 and 1048 (#90027).
+
+ ChangeLog |  3 +++
+ src/vte.c | 19 ++++++-------------
+ 2 files changed, 9 insertions(+), 13 deletions(-)
+
+commit 8dcb63c6368e86bebcb473b05ea9f34bf7e82718 (tag: vte_0_7_3)
+Author: Nalin Dahyabhai 
+Date:   2002-08-12 19:49:03 +0000
+
+    - don't include datadir files more than once
+
+ vte.spec | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 8be06f70f84252834036e36359f13d7929f537bc
+Author: Nalin Dahyabhai 
+Date:   2002-08-12 19:44:36 +0000
+
+    properly escape a command sequence with an embedded '%'.
+    
+    * src/caps.c: properly escape a command sequence with an embedded '%'.
+
+ ChangeLog  | 2 ++
+ src/caps.c | 4 ++--
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+commit deba2150f9794e8e3a46c468056d23ef377665d0
+Author: Nalin Dahyabhai 
+Date:   2002-08-12 19:10:41 +0000
+
+    add de and nl translations to ALL_LINGUAS
+    
+    * configure.in: add de and nl translations to ALL_LINGUAS
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5e783f93a81306b846a08da191d0eff880b04a0c
+Author: Nalin Dahyabhai 
+Date:   2002-08-12 19:01:03 +0000
+
+    0.7.3
+
+ vte.spec | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit a07607f8965d4d146d1397233d6eb64eca544dd4
+Author: Nalin Dahyabhai 
+Date:   2002-08-12 16:13:18 +0000
+
+    change Xft-related defaults match whichever version of GTK we were built
+    
+    * src/vte.c: change Xft-related defaults match whichever version of GTK
+            we were built with (hopefully).
+
+ ChangeLog | 3 +++
+ src/vte.c | 6 ++++++
+ 2 files changed, 9 insertions(+)
+
+commit ff497e30907c63e0b1073d569e690478353eb876
+Author: Nalin Dahyabhai 
+Date:   2002-08-12 14:40:20 +0000
+
+    don't bother with cursor blinking or freezing/thawing updates when the
+    
+    * src/vte.c: don't bother with cursor blinking or freezing/thawing
+            updates when the widget isn't realized.  Patch from Gustavo Giráldez.
+
+ ChangeLog |  3 +++
+ src/vte.c | 47 ++++++++++++++++++++++++++++-------------------
+ 2 files changed, 31 insertions(+), 19 deletions(-)
+
+commit ad25c2e2013a56a29db023da0906e1728c7d01db
+Author: Vincent van Adrighem 
+Date:   2002-08-09 08:15:08 +0000
+
+    2002-08-09  Vincent van Adrighem 
+Date:   2002-08-08 18:42:26 +0000
+
+    take extra steps to make sure that the cursor doesn't go back into
+    
+    * src/vte.c: take extra steps to make sure that the cursor doesn't go back into
+            negative scrollback space.
+
+ ChangeLog |  3 +++
+ src/vte.c | 32 ++++++++++++++++++++------------
+ 2 files changed, 23 insertions(+), 12 deletions(-)
+
+commit d094196b7dc5fdc59328b546fd02f8be19cfe2a9 (tag: vte_0_7_2)
+Author: Nalin Dahyabhai 
+Date:   2002-08-08 05:38:35 +0000
+
+    rewrite.
+    
+    * src/vte.c(vte_terminal_invalidate_all): rewrite.
+
+ ChangeLog |  2 ++
+ src/vte.c | 11 ++++++++---
+ 2 files changed, 10 insertions(+), 3 deletions(-)
+
+commit 71d5d3b968eb61c1b26765fe64bc7abac5915ced
+Author: Nalin Dahyabhai 
+Date:   2002-08-08 05:04:12 +0000
+
+    fill in the background color when drawing the cursor, even if it's going
+    
+    * src/vte.c(vte_terminal_paint,vte_terminal_draw_cells): fill in the background
+            color when drawing the cursor, even if it's going to end up as the
+            default background color, spotted by Peter Jones.  Draw the cursor
+            correctly if it's over a graphic character.
+
+ ChangeLog       |   5 ++
+ src/Makefile.am |   2 +-
+ src/vte.c       | 156 ++++++++++++++++++++++++++++++--------------------------
+ vte.spec        |   8 ++-
+ 4 files changed, 96 insertions(+), 75 deletions(-)
+
+commit 0429b16180b0a2b79ce627cf146f8ce5c47d0a07
+Author: Nalin Dahyabhai 
+Date:   2002-08-08 04:25:58 +0000
+
+    once again, avoid drawing NULs. add a small pad to each edge (#89048).
+    
+    * src/vte.c(vte_terminal_draw_cells): once again, avoid drawing NULs.
+    * src/vte.c: add a small pad to each edge (#89048).
+    * src/vteapp.c: handle widget padding.
+
+ ChangeLog    |   4 +
+ src/vte.c    | 235 +++++++++++++++++++++++++++++++++++++----------------------
+ src/vte.h    |   3 +
+ src/vteapp.c |   6 +-
+ 4 files changed, 160 insertions(+), 88 deletions(-)
+
+commit 50bedfd42a309eb61165d190ef954df994eeeb6b
+Author: Nalin Dahyabhai 
+Date:   2002-08-08 02:32:46 +0000
+
+    Whoops, remove that debug g_print().
+    
+    * src/vte.c: Whoops, remove that debug g_print().
+
+ src/vte.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 2b6cff9bfeb5ab13cc519abc45a15d9ad58948c0
+Author: Nalin Dahyabhai 
+Date:   2002-08-08 02:26:11 +0000
+
+    look for $pkgdatadir/termcap/$TERM first, as the widget does, before
+    
+    * src/interpret.c: look for $pkgdatadir/termcap/$TERM first, as the widget does,
+            before consulting /etc/termcap.
+    * src/ring.c(vte_ring_free): check for a non-NULL removal function before
+            calling it.
+    * src/vte.c(vte_terminal_key_press): add an option for doing VT220-style or
+            Sun/PC-style modified function keys.  Default to VT220 for now, though.
+    * src/vte.c(vte_terminal_reset): scroll to the bottom when resetting.
+
+ ChangeLog       |   9 +++
+ src/interpret.c |   6 +-
+ src/ring.c      |   6 +-
+ src/vte.c       | 231 ++++++++++++++++++++++++++------------------------------
+ 4 files changed, 125 insertions(+), 127 deletions(-)
+
+commit 28daed11380ea2fd7bfea19daefd4a7486bf480f
+Author: Nalin Dahyabhai 
+Date:   2002-08-07 23:42:04 +0000
+
+    don't trust XftDrawString32() to advance linearly for monospaced fonts
+    
+    * src/vte.c(vte_terminal_draw_cells): don't trust XftDrawString32() to advance
+            linearly for monospaced fonts (#90164).
+
+ ChangeLog |  5 +++++
+ src/vte.c | 50 +++++++++++++++++++++-----------------------------
+ 2 files changed, 26 insertions(+), 29 deletions(-)
+
+commit 4babeea772593a77fd3da3195fd49aab6c4a2717
+Author: Nalin Dahyabhai 
+Date:   2002-08-07 23:15:26 +0000
+
+    reset the default setting as well (#89506).
+    
+    * src/vte.c(vte_terminal_reset): reset the default setting as well (#89506).
+
+ ChangeLog  |   3 ++
+ autogen.sh |   1 +
+ src/vte.c  | 138 ++++++++++++++++++++++++++++++-------------------------------
+ 3 files changed, 72 insertions(+), 70 deletions(-)
+
+commit e52fea3e78a2edcf702d7655c8b5dfaaa463ae62
+Author: Christian Rose 
+Date:   2002-08-07 18:44:27 +0000
+
+    Updated Swedish translation.
+    
+    2002-08-07  Christian Rose  
+    
+            * sv.po: Updated Swedish translation.
+
+ po/ChangeLog |  4 ++++
+ po/sv.po     | 50 ++++++++++++++++++++++++--------------------------
+ 2 files changed, 28 insertions(+), 26 deletions(-)
+
+commit 274232721384b737aef142dfe9ff944c1eed3a21
+Author: Christian Neumair 
+Date:   2002-08-07 17:56:07 +0000
+
+    Updated German translation.
+
+ po/ChangeLog |   4 ++
+ po/de.po     | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 128 insertions(+)
+
+commit 47c61f40fe4a943a0d6ed9f907046969179a2d28 (tag: vte_0_7_1)
+Author: Nalin Dahyabhai 
+Date:   2002-08-07 16:49:37 +0000
+
+    perform Xft remapping for Xft1, switch back to PangoX.
+    
+    * src/vte.c(vte_terminal_draw_cells): perform Xft remapping for Xft1, switch
+            back to PangoX.
+
+ ChangeLog |  3 +++
+ src/vte.c | 33 ++++++++++++++++++++++++++++++---
+ 2 files changed, 33 insertions(+), 3 deletions(-)
+
+commit 0501b07d2d288846a0e2d3c77304187cda3680e0
+Author: Nalin Dahyabhai 
+Date:   2002-08-06 23:24:35 +0000
+
+    use g_get_charset() instead of nl_langinfo() to determine the default
+    
+    * src/vte.c(vte_terminal_set_encoding, vte_sequence_handler_local_charset): use
+            g_get_charset() instead of nl_langinfo() to determine the default
+            codeset, and to check if it's UTF-8.  Patch from Hidetoshi Tajima.
+    * src/vte.c(vte_terminal_set_encoding): don't leak conversion descriptors when
+            changing the encoding fails.  Patch from Hidetoshi Tajima.
+    * src/vte.c(vte_terminal_send): don't read past the converted string when
+            performing paste substitutions.
+    * src/vte.c: rework the straight-Pango rendering routines to call normal Pango
+            instead of PangoX.
+    * src/vte.c(vte_terminal_ensure_cursor): speed up the "add many cells" case a
+            bit.
+    * src/vte.c(vte_cell_is_between): sort the two endpoints correctly and provide
+            a boolean to control whether or not the endpoint is "in".
+    * src/vte.c(vte_cell_draw_rows): check if a cell is selected using the right
+            indicator.
+    * src/vte.c(vte_terminal_get_text): when adding a newline to the end of a
+            returned line, don't show it as being in the rightmost column.
+    * src/vte.c(xlfd_from_pango_font_description): turn the DPI, pixel size, and
+            dded info into wildcards.
+    * src/vte.c(vte_terminal_draw_cells): go back to drawing individual cells when
+            using Xlib.
+    * src/vte.c: Compute right-side padding as well as left.
+    * src/vte.c(vte_terminal_init): disable use of PangoX by default.
+    * src/vteapp.c: add -D to add the same patterns profterm does to test dingus
+            hiliting.
+
+ ChangeLog    |  30 ++++
+ src/vte.c    | 560 ++++++++++++++++++++++++++++++++++++++++-------------------
+ src/vteapp.c |  15 +-
+ vte.spec     |   7 +-
+ 4 files changed, 430 insertions(+), 182 deletions(-)
+
+commit 88d01cc079642750cb2d915e1c8b38b122641c2d
+Author: Havoc Pennington 
+Date:   2002-08-03 18:00:32 +0000
+
+    add a gdk_flush() before the error trap pop, just for paranoia, may help
+    
+    2002-08-03  Havoc Pennington  
+    
+            * src/vte.c (vte_terminal_setup_background): add a gdk_flush()
+            before the error trap pop, just for paranoia, may help with
+            #89049
+
+ ChangeLog | 6 ++++++
+ src/vte.c | 1 +
+ 2 files changed, 7 insertions(+)
+
+commit a062c6306732e1cfc034c0c49f416b09b93d63d0
+Author: Nalin Dahyabhai 
+Date:   2002-08-02 15:17:03 +0000
+
+    Substitute carriage returns for newlines when pasting text to the child,
+    
+    * src/vte.c(vte_terminal_send): Substitute carriage returns for newlines when
+            pasting text to the child, fixing weird paste behavior in pico and
+            friends.
+
+ ChangeLog |  5 +++++
+ src/vte.c | 14 ++++++++++----
+ 2 files changed, 15 insertions(+), 4 deletions(-)
+
+commit 3c26a0db3b52f5b9075eb9fb9c2a8c953164e0fd
+Author: Christian Rose 
+Date:   2002-08-02 13:53:12 +0000
+
+    Updated Swedish translation.
+    
+    2002-08-02  Christian Rose  
+    
+            * sv.po: Updated Swedish translation.
+
+ po/ChangeLog |  4 ++++
+ po/sv.po     | 58 +++++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 35 insertions(+), 27 deletions(-)
+
+commit 8997158626f6e835d63be7c9cb901031f31f9b7b
+Author: Christophe Merlet 
+Date:   2002-08-02 10:31:18 +0000
+
+    Added French translation.
+
+ ChangeLog    |   4 ++
+ configure.in |   2 +-
+ po/ChangeLog |   5 +++
+ po/fr.po     | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 138 insertions(+), 1 deletion(-)
+
+commit fa5cb989de684be220fe2363f6be7ab45675d3ae (tag: vte_0_7_0)
+Author: Nalin Dahyabhai 
+Date:   2002-08-01 22:05:01 +0000
+
+    Expose vte_pty_set_size() and get_size() to localize terminal ioctl usage.
+    
+    * src/pty.c, src/pty.h: Expose vte_pty_set_size() and get_size() to localize
+            terminal ioctl usage.
+    * src/ring.c(vte_ring_validate): Don't repeatedly compute the same value when
+            we know it won't change.
+    * src/vte.c(vte_wc_from_unichar): Implement for the non-STDC_ISO_10646 case,
+            heavily based on patch from Hidetoshi Tajima.
+    * src/vte.c(vte_terminal_ensure_cursor): Don't initialize the local data unless
+            we have to.
+    * src/vte.c(vte_terminal_process_incoming): Don't insert NUL characters into
+            the display, matching behavior of xterm.
+    * src/vte.c: Clean up use of various G_PRIORITY values throughout to allow for
+            simpler tuning.  Rewrite rendering code to use per-paint PangoLayouts
+            when they're needed, use Xft2's DrawCharSpec function when available,
+            and to cut down on X requests.  Don't paint on expose events if the
+            window isn't realized, drawable, and at least partially visible.  Don't
+            deselect previous selection when the user clicks unless there's also a
+            drag first.
+
+ ChangeLog  |   18 +
+ src/pty.c  |   25 +-
+ src/pty.h  |    5 +
+ src/ring.c |    5 +-
+ src/vte.c  | 2561 ++++++++++++++++++++++++++++++++----------------------------
+ vte.spec   |    5 +-
+ 6 files changed, 1401 insertions(+), 1218 deletions(-)
+
+commit 8515801d31a4279150f085ab2f22a7b177fa474e
+Author: Nalin Dahyabhai 
+Date:   2002-08-01 00:03:17 +0000
+
+    Include  if available, per patch from Hidetoshi Tajima. Include
+    
+    * src/pty.c: Include  if available, per patch from Hidetoshi Tajima.
+    * src/trie.c: Include missing , spotted by Hidetoshi Tajima.
+
+ ChangeLog    | 3 +++
+ configure.in | 1 +
+ src/pty.c    | 3 +++
+ src/trie.c   | 1 +
+ 4 files changed, 8 insertions(+)
+
+commit 94d562a1102ac1ecf9a6b23f16eeac725e1c3f63
+Author: Nalin Dahyabhai 
+Date:   2002-07-31 16:22:57 +0000
+
+    Initialize new lines created in insert_lines() to the current default
+    
+    * src/vte.c: Initialize new lines created in insert_lines() to the current
+            default attributes like al() does.
+
+ ChangeLog | 3 +++
+ src/vte.c | 7 +++++++
+ 2 files changed, 10 insertions(+)
+
+commit a6643f3a78377bb48391fea80ed287b6a75bc318 (tag: vte_0_6_0)
+Author: Nalin Dahyabhai 
+Date:   2002-07-30 23:02:49 +0000
+
+    Fix autoconf quoting error.
+    
+    * configure.in: Fix autoconf quoting error.
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1c098e1d6c0f0d3452e0a4c184fb0f6c5a10e2e0
+Author: Nalin Dahyabhai 
+Date:   2002-07-30 23:00:34 +0000
+
+    Check for wint_t and attempt to allow compiles even when wint_t isn't
+    
+    * configure.in: Check for wint_t and attempt to allow compiles even when wint_t
+            isn't defined (this type is used only debug code, so it shouldn't break
+            anything).
+    * src/caps.c: Remove "te" and "ti", which are logical, in the same way "so" is,
+            from the known capabilities lists.  Add a "is a key" field to the
+            termcap list so that we don't match against keystrokes in case they're
+            also control sequences.
+    * src/interpret.c: Use tables instead of tries.  Don't add key sequences to the
+            table.
+    * src/pty.c: Fix incorrect invocation in sample.
+    * src/reaper.c: Include stdlib.h to quiet compiler warning.
+    * src/trie.c, src/trie.h: Remove the unused precomputing routines.
+    * src/utf8echo.c: Switch to link with tables instead of tries.
+    * src/vte.c: Switch to using tables instead of tries.  Don't add key sequences
+            to the table.  Map cursor-backward to LE instead of le, which handles
+            parameters right.  Tune updates so that they occur less often when we're
+            processing large amounts of data from the child.  Add a
+            'status-line-changed' signal.  Implement fs() and fix ts().  Add
+            ::get_status_line() to get the contents of the status line.  Obey it()
+            when setting default tabstops.  Implement cursor_next_line(),
+            cursor_lower_left(), cursor_preceding_line(),
+            cursor_horizontal_and_vertical_position(), erase_characters(), and
+            insert_blank_characters().  Implement nw().
+
+ ChangeLog       |  25 +++
+ README          |  10 +-
+ configure.in    |   1 +
+ po/da.po        |  44 ++---
+ po/sv.po        |  44 ++---
+ src/Makefile.am |  26 ++-
+ src/caps.c      | 554 ++++++++++++++++++++++++++++----------------------------
+ src/caps.h      |   1 +
+ src/interpret.c |  27 +--
+ src/pty.c       |   2 +-
+ src/reaper.c    |   1 +
+ src/table.c     |  77 ++++----
+ src/termcap.c   |   2 +
+ src/trie.c      | 209 +--------------------
+ src/trie.h      |   3 -
+ src/utf8echo.c  |   6 +-
+ src/vte.c       | 446 ++++++++++++++++++++++++++-------------------
+ src/vte.h       |   5 +-
+ src/vteapp.c    |  11 ++
+ vte.spec        |   6 +-
+ 20 files changed, 723 insertions(+), 777 deletions(-)
+
+commit 9ed6314b69c822030886b9fd004dd1f88a1fec2c
+Author: Nalin Dahyabhai 
+Date:   2002-07-30 21:57:24 +0000
+
+    Comment out "ti" and "te" which are always going to be logical.
+    
+    * src/caps.c: Comment out "ti" and "te" which are always going to be logical.
+
+ src/caps.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit a88625362c7f887bfd0026d96fef316050663c91
+Author: Nalin Dahyabhai 
+Date:   2002-07-30 20:34:08 +0000
+
+    Add files.
+
+ src/table.c | 880 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/table.h |  51 ++++
+ 2 files changed, 931 insertions(+)
+
+commit c9d46969abaca4451316d0f6b7b9661d454ebe79
+Author: Nalin Dahyabhai 
+Date:   2002-07-26 18:23:02 +0000
+
+    Initialize new lines added for al(). Spotted by jrb.
+    
+    * src/vte.c: Initialize new lines added for al().  Spotted by jrb.
+
+ ChangeLog | 3 +++
+ src/vte.c | 7 +++++++
+ 2 files changed, 10 insertions(+)
+
+commit 4c9c1d1db8bcc68a4afc4f90473a8c2bd86a3fcb (tag: vte_0_5_4)
+Author: Nalin Dahyabhai 
+Date:   2002-07-25 21:57:16 +0000
+
+    0.5.4
+
+ po/da.po | 14 ++++++++++----
+ po/sv.po | 38 +++++++++++++++++++-------------------
+ vte.spec |  5 ++++-
+ 3 files changed, 33 insertions(+), 24 deletions(-)
+
+commit ac8c5b077106d89d4923e1ccabccafe695ede2da
+Author: Ole Laursen 
+Date:   2002-07-25 21:36:40 +0000
+
+    Added Danish translation.
+    
+    2002-07-25  Ole Laursen  
+    
+            * da.po: Added Danish translation.
+
+ po/ChangeLog |   4 +++
+ po/da.po     | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 120 insertions(+)
+
+commit 9f2e73d1c66faac5ba4cbbc3cc944c15333572a5
+Author: Ole Laursen 
+Date:   2002-07-25 21:34:48 +0000
+
+    Added Danish translation.
+    
+    2002-07-25  Ole Laursen  
+    
+            * configure.in: Added Danish translation.
+
+ ChangeLog    | 4 ++++
+ configure.in | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit dc51766bfb6b87a516e01f0bd6e62c5156ee376a
+Author: Nalin Dahyabhai 
+Date:   2002-07-25 20:00:29 +0000
+
+    Note that bold isn't broken any more. Note that k; was added. Set the
+    
+    * README: Note that bold isn't broken any more.
+    * termcaps/xterm: Note that k; was added.
+    * src/pty.c: Set the proper number of columns in the initial window size.
+    * src/ring.h: Change macro argument names to hopefully not step on application
+            code.
+    * src/vte.c: Set the terminal size to the default size as specified in termcap
+            at init-time.
+
+ ChangeLog      |  8 ++++++++
+ README         |  2 --
+ src/pty.c      |  2 +-
+ src/ring.h     | 27 ++++++++++++++-------------
+ src/vte.c      |  3 +++
+ termcaps/xterm |  2 +-
+ 6 files changed, 27 insertions(+), 17 deletions(-)
+
+commit 9ef0f51ac6364aed4176f3d5f3843ab76c3e113f (tag: vte_0_5_3)
+Author: Nalin Dahyabhai 
+Date:   2002-07-24 15:27:00 +0000
+
+    Add private vte_pty_set_size() function. vte_pty_open() takes size
+    
+    * src/pty.c: Add private vte_pty_set_size() function.
+    * src/pty.c, src/pty.h: vte_pty_open() takes size arguments now.
+    * src/vte.c: Open the PTY with the proper initial size.
+
+ ChangeLog       |  4 ++++
+ po/sv.po        | 40 ++++++++++++++++++++--------------------
+ src/Makefile.am |  2 +-
+ src/pty.c       | 31 ++++++++++++++++++++++++++-----
+ src/pty.h       |  3 ++-
+ src/vte.c       |  8 +++++---
+ src/vteapp.c    |  4 ++--
+ vte.spec        |  5 ++++-
+ 8 files changed, 64 insertions(+), 33 deletions(-)
+
+commit b8d3e0c105c1b8031e4d1606f2d9cac34b97ec3d (tag: vte_0_5_2)
+Author: Nalin Dahyabhai 
+Date:   2002-07-23 18:30:52 +0000
+
+    0.5.2
+
+ vte.spec | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 8989077a33ada41fc2ee1fa65933abd2846993e0
+Author: Nalin Dahyabhai 
+Date:   2002-07-23 17:57:09 +0000
+
+    Expose the ring implementation and convert several simple functions into
+    
+    * src/ring.c, ring.h: Expose the ring implementation and convert several simple
+            functions into macros.
+    * src/vteapp.c: Pass all long options on to gtk_init().
+
+ ChangeLog    |  4 ++++
+ src/ring.c   | 50 --------------------------------------------------
+ src/ring.h   | 27 +++++++++++++++++++++------
+ src/vte.c    | 45 ++++++++++++++++++++++++++-------------------
+ src/vteapp.c | 21 +++++++++++++++++++++
+ 5 files changed, 72 insertions(+), 75 deletions(-)
+
+commit e05ee559ce99030e3543eafe17bb86c81827adfb
+Author: Nalin Dahyabhai 
+Date:   2002-07-23 13:24:46 +0000
+
+    Fix realize/unrealize to be properly reversible. Use the font from the
+    
+    * src/vte.c: Fix realize/unrealize to be properly reversible.  Use the font
+            from the default style unless we're explicitly given one.
+    * src/vteapp.c: Don't set base size or minimum size geometry hints when sizing
+            the terminal widget.
+
+ ChangeLog    |   5 +
+ src/vte.c    | 920 ++++++++++++++++++++++++++++++++++-------------------------
+ src/vte.h    |   2 +
+ src/vteapp.c |  25 +-
+ 4 files changed, 554 insertions(+), 398 deletions(-)
+
+commit e77a62018d612944fe85711ca0bdb9f19d4d3c60
+Author: Nalin Dahyabhai 
+Date:   2002-07-22 13:27:09 +0000
+
+    Fix an incorrect logic check.
+    
+    * src/pty.c(vte_pty_ptsname): Fix an incorrect logic check.
+
+ ChangeLog | 2 ++
+ src/pty.c | 2 +-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+commit 78db653b1de723f72c79de964dd259a0e4023910
+Author: Nalin Dahyabhai 
+Date:   2002-07-19 15:58:21 +0000
+
+    If we're changing the background color, apply it to the widget's window as
+    
+    * src/vte.c(vte_terminal_set_color_internal): If we're changing the background
+            color, apply it to the widget's window as well, spotted by msw.
+
+ ChangeLog |  3 +++
+ src/vte.c | 19 ++++++++++++-------
+ 2 files changed, 15 insertions(+), 7 deletions(-)
+
+commit 527d415541a35302cd74d458564915a4eb0b1542 (tag: vte_0_5_1)
+Author: Nalin Dahyabhai 
+Date:   2002-07-19 05:48:29 +0000
+
+    Undo the scrolling changes -- there too many combinations of circumstances
+    
+    * src/vte.c: Undo the scrolling changes -- there too many combinations of
+            circumstances that cause them to not work right.
+
+ ChangeLog       |   3 ++
+ src/interpret.c |  13 ++++++
+ src/vte.c       | 124 ++++++++++++++++++++++++++------------------------------
+ src/vteapp.c    |  10 ++++-
+ 4 files changed, 82 insertions(+), 68 deletions(-)
+
+commit 4107683a49d46a88752c889b24148387554a50b8
+Author: Nalin Dahyabhai 
+Date:   2002-07-19 03:00:29 +0000
+
+    Fudge the repaint line count by one when scrolling regions to ensure that
+    
+    * src/vte.c: Fudge the repaint line count by one when scrolling regions to
+            ensure that the old cursor gets repainted.  Calculate the area which
+            needs to be repainted when reverse-scrolling correctly.
+
+ ChangeLog |  4 ++++
+ src/vte.c | 13 ++++++++++---
+ vte.spec  | 11 ++++++++++-
+ 3 files changed, 24 insertions(+), 4 deletions(-)
+
+commit c7b0c2bbdb11ea8364829a6a7e0e1c4b0749c4cc (tag: vte_0_5_0)
+Author: Nalin Dahyabhai 
+Date:   2002-07-18 23:47:35 +0000
+
+    Implement enough of set-mode and reset-mode to allow toggling of insert
+    
+    * src/vte.c: Implement enough of set-mode and reset-mode to allow toggling
+            of insert mode using this sequence.  Move all scrolling into
+            vte_terminal_scroll_region and use gdk_draw_drawable to avoid
+            repainting from scratch whenever possible.
+
+ ChangeLog |   5 +
+ src/vte.c | 333 ++++++++++++++++++++++++++++++++++++++++----------------------
+ vte.spec  |   6 ++
+ 3 files changed, 224 insertions(+), 120 deletions(-)
+
+commit dfad7e70fef9221c09360fab72998d16f3d23670
+Author: Christian Rose 
+Date:   2002-07-18 17:02:42 +0000
+
+    Updated Swedish translation.
+    
+    2002-07-18  Christian Rose  
+    
+            * sv.po: Updated Swedish translation.
+
+ po/ChangeLog |  4 ++++
+ po/sv.po     | 36 ++++++++++++++++++------------------
+ 2 files changed, 22 insertions(+), 18 deletions(-)
+
+commit cf55403688da83b34f8eb5a7f5b326fd0a7e28ee
+Author: Nalin Dahyabhai 
+Date:   2002-07-18 03:43:18 +0000
+
+    Actually set ALL_LINGUAS so translations get installed. Document the
+    
+    * configure.in: Actually set ALL_LINGUAS so translations get installed.
+    * README: Document the weirdness that is cursor movement around wide characters.
+    * src/vte.defs: Bind set_color_bold().
+    * src/debug.c: Suppress warnings when $VTE_DEBUG_FLAGS isn't set.
+    * src/pty.c, src/reaper.c, src/termcap.c, src/trie.c: Provide for debug messages
+            in the test program.
+    * src/interpret.c, src/trie.c: Use libc stdio instead of g_print for printing
+            what might be part of a multibyte sequence because g_print checks for
+            validity.
+    * src/interpret.c, src/trie.c, src/utf8echo.c, src/vte.c: Use gunichar instead
+            of wchar_t in places where a gunichar is expected.  Provide a means for
+            converting from wchar_t to gunichar for the sake of X11 calls which want
+            a wchar_t.
+    * src/trie.c: Provide vte_trie_wide_encoding() for finding a giconv target
+            which is hopefully compatible with gunichar.  Likewise provide
+            vte_trie_narrow_encoding() to find one compatible with iso-8859-1.
+    * src/vte.c: Fall back to ISO-8859-1 if we can't set things up for the current
+            locale encoding at startup time.  Fall back to the current encoding if
+            we can't perform a given dynamic switch.
+
+ ChangeLog       |  21 ++++
+ README          |  21 +++-
+ configure.in    |   1 +
+ po/sv.po        |  48 ++++----
+ python/vte.defs |   9 ++
+ src/Makefile.am |   7 +-
+ src/debug.c     |   2 +-
+ src/interpret.c |  36 +++---
+ src/pty.c       |   1 +
+ src/reaper.c    |   2 +
+ src/termcap.c   |   4 +-
+ src/trie.c      | 349 +++++++++++++++++++++++++++++++++++++++-----------------
+ src/trie.h      |  12 +-
+ src/utf8echo.c  |   5 +-
+ src/vte.c       | 210 ++++++++++++++++++++++------------
+ src/vte.h       |   1 -
+ vte.spec        |   7 +-
+ 17 files changed, 509 insertions(+), 227 deletions(-)
+
+commit 623ee6d073c540bd02b2b4f4a9abb2ddf7b7637f
+Author: Nalin Dahyabhai 
+Date:   2002-07-17 03:34:54 +0000
+
+    Set GETTEXT_PACKAGE correctly, noted by menthos.
+    
+    * configure.in: Set GETTEXT_PACKAGE correctly, noted by menthos.
+
+ ChangeLog    | 3 +++
+ configure.in | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit 89cd4a38836d9b53d40a2bc7f9e7d118b5244c04
+Author: Christian Rose 
+Date:   2002-07-16 23:37:18 +0000
+
+    Updated Swedish translation.
+    
+    2002-07-17  Christian Rose  
+    
+            * sv.po: Updated Swedish translation.
+
+ po/ChangeLog |  4 ++++
+ po/sv.po     | 54 ++++++++++++++++++++++++++++--------------------------
+ 2 files changed, 32 insertions(+), 26 deletions(-)
+
+commit 38d95c7257845a9eb875692a1f2caaf5e628630b (tag: vte_0_4_9)
+Author: Nalin Dahyabhai 
+Date:   2002-07-16 19:31:16 +0000
+
+    Guess at an appropriate bold version of the foreground color instead of
+    
+    * src/vte.c (vte_terminal_set_colors): Guess at an appropriate bold version of
+            the foreground color instead of hard-coding in a default.
+    * src/vte.c, src/vte.h (vte_terminal_set_color_bold): Add.
+
+ ChangeLog       |  5 +++++
+ src/Makefile.am |  2 +-
+ src/vte.c       | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ src/vte.h       |  4 +++-
+ src/vteapp.c    |  4 ++++
+ vte.spec        |  1 +
+ 6 files changed, 74 insertions(+), 5 deletions(-)
+
+commit a84fc373e7868673715a4ef9ebec2165300cda16
+Author: Nalin Dahyabhai 
+Date:   2002-07-16 15:33:15 +0000
+
+    Correctly check for g_iconv_open() failure. Try to give a meaningful error
+    
+    * src/trie.c: Correctly check for g_iconv_open() failure.
+    * src/vte.c (vte_terminal_set_encoding): Try to give a meaningful error when
+            g_iconv_open() fails, even though we're screwed.
+
+ ChangeLog      |  7 ++++++-
+ src/trie.c     | 35 +++++++++++++++----------------
+ src/utf8echo.c |  2 +-
+ src/vte.c      | 65 ++++++++++++++++++++++++++++++++++++++++++----------------
+ vte.spec       |  8 +++++++-
+ 5 files changed, 78 insertions(+), 39 deletions(-)
+
+commit 4542e59d27fd956648894e5b4165a1a0112f8ecc
+Author: Nalin Dahyabhai 
+Date:   2002-07-15 18:16:32 +0000
+
+    wrap the new Xft/fontconfig-specific code in HAVE_XFT Revert some changes
+    
+    * src/vte.c: wrap the new Xft/fontconfig-specific code in HAVE_XFT
+    * src/vte.c: Revert some changes in how new cells were initialized, removing
+            various cosmetic problems.
+    * src/vte.c (vte_terminal_process_incoming): Discard the proper number of
+            characters when we don't recognize a sequence, previously we left one
+            byte that should have been removed.
+
+ ChangeLog       |  9 +++++++-
+ src/Makefile.am |  2 +-
+ src/vte.c       | 65 +++++++++++++++++++++++++++++++++------------------------
+ vte.spec        |  7 ++++++-
+ 4 files changed, 53 insertions(+), 30 deletions(-)
+
+commit e4cfa8d65673f808fcef56150a05e04f1cfd2fdf
+Author: Havoc Pennington 
+Date:   2002-07-14 19:52:17 +0000
+
+    decrement spaces as we go through the loop, it was nice and infinite.
+    
+    2002-07-14  Havoc Pennington  
+    
+            * src/vte.c (vte_terminal_get_cursor_position): decrement spaces
+            as we go through the loop, it was nice and infinite.
+
+ ChangeLog | 5 +++++
+ src/vte.c | 1 +
+ 2 files changed, 6 insertions(+)
+
+commit 8320edb7631fd570b69503def7ab2ce58b19df6c
+Author: Nalin Dahyabhai 
+Date:   2002-07-13 04:40:58 +0000
+
+    Add the proper number of attribute structs to the attribute array to fix
+    
+    * src/vte.c (vte_terminal_get_text): Add the proper number of attribute structs
+            to the attribute array to fix crashes which occurred when the buffer
+            contains non-ASCII text (#67930).
+
+ ChangeLog |  4 ++++
+ src/vte.c | 18 +++++-------------
+ 2 files changed, 9 insertions(+), 13 deletions(-)
+
+commit f16781d565d6da399141797e0377e65abef04f51 (tag: vte_0_4_8)
+Author: Nalin Dahyabhai 
+Date:   2002-07-13 04:14:57 +0000
+
+    Handle cases where FC_HINTING is enabled but FC_HINT_STYLE isn't. Not that
+    
+    * src/vte.c: Handle cases where FC_HINTING is enabled but FC_HINT_STYLE isn't.  Not that that makes any sense, but there you go.
+
+ src/vte.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 23ec5d4ce4b38d19e9271463563fc94b587e5f93
+Author: Nalin Dahyabhai 
+Date:   2002-07-13 03:59:23 +0000
+
+    Small optimization in the al() and dl() handlers. al() doesn't move the
+    
+    * src/vte.c: Small optimization in the al() and dl() handlers.  al() doesn't
+            move the cursor, per GNU termcap docs.  Check for a pixbuf in the bgfx
+            check instead of pixmap, which was the wrong type.
+
+ ChangeLog     |  4 ++++
+ src/slowcat.c |  3 ++-
+ src/vte.c     | 20 ++++++++++----------
+ 3 files changed, 16 insertions(+), 11 deletions(-)
+
+commit a7b29e6c2d897a8ccf8feb4523a63c6690221228
+Author: Nalin Dahyabhai 
+Date:   2002-07-13 02:59:05 +0000
+
+    Add.
+
+ src/slowcat.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 93 insertions(+)
+
+commit 82c830263ff1212de3a22501eb65a036a352af83
+Author: Nalin Dahyabhai 
+Date:   2002-07-13 02:44:09 +0000
+
+    Bail if GTK doesn't know about Xft-specific settings.
+    
+    * src/vte.c (vte_default_substitute): Bail if GTK doesn't know about
+    Xft-specific settings.
+
+ src/vte.c | 15 +++++++++++----
+ 1 file changed, 11 insertions(+), 4 deletions(-)
+
+commit 842e9ac6cfbfcb3462b9a720e6c4a5a9e5d6eda9
+Author: Nalin Dahyabhai 
+Date:   2002-07-13 02:07:58 +0000
+
+    Add patch to heed Xft/fontconfig settings as kept by GTK. Based on patch
+    
+    * src/vte.c: Add patch to heed Xft/fontconfig settings as kept by GTK.  Based
+            on patch from otaylor.
+
+ ChangeLog |   3 +
+ src/vte.c | 199 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 188 insertions(+), 14 deletions(-)
+
+commit 65970d91a841eb7c895d1efaa36a734ffd811658
+Author: Nalin Dahyabhai 
+Date:   2002-07-13 00:21:25 +0000
+
+    Added. Add -a/-b flags to control audible bell and blinking cursors. Only
+    
+    * src/slowcat.c: Added.
+    * src/vteapp.c: Add -a/-b flags to control audible bell and blinking cursors.
+            Only send "pwd" as an initial command if there wasn't a command
+            specified on the command line.  Add a simple help message.
+    * src/vte.c: Bind F13-F35 per termcap.  Treat GDK_KP_Delete as GDK_Delete.  Map
+            Ctrl+F1-F12 to F13-F24.  Fix dc() to ensure that the rows stays full and
+            that newly-added cells get the default attributes.  Fix cl() to clear
+            all rows on the screen with the default attributes (bce).  Default to
+            using Xft if available for consistency with GTK.
+    * src/vte.c: Treat super, hyper, meta, and alt as modifiers when deciding to
+            scroll-on-keypress.  Noted by jrb.
+    * src/vte.c: Always map \r and \n to cr and so, even when they're defined by
+            the termcap.
+    * src/vte.c, src/vte.h: Rework how default colors are set up, and add
+            vte_terminal_set_color_foreground and vte_terminal_set_color_background.
+    * src/vte.h: Remove includes for local headers which apps are not likely to
+            never use, cleaning up the namespace a little.
+    * python/vte.defs: Bind vte_terminal_set_color_{fore,back}ground.
+    * src/debug.h, src/ring.h: Use G_BEGIN_DECLS/G_END_DECLS.
+    * src/reaper.h: Use G_BEGIN_DECLS/G_END_DECLS in the right place.
+    * src/vteapp.c: Add -B/-T flags to set background images and transparency.
+
+ ChangeLog       |  24 ++
+ python/vte.defs |  18 ++
+ src/Makefile.am |   8 +-
+ src/caps.h      |   4 +-
+ src/debug.h     |   4 +
+ src/reaper.h    |   5 +-
+ src/ring.h      |   4 +
+ src/vte.c       | 698 ++++++++++++++++++++++++++++++++++++++------------------
+ src/vte.h       |   7 +-
+ src/vteapp.c    |  45 +++-
+ vte.spec        |  11 +-
+ 11 files changed, 581 insertions(+), 247 deletions(-)
+
+commit 2f766cdf80215a137c0ef0389b187e708dcbb822
+Author: Nalin Dahyabhai 
+Date:   2002-07-02 20:09:26 +0000
+
+    Make shift+button1 extend selection.
+    
+    * src/vte.c: Make shift+button1 extend selection.
+
+ ChangeLog |   2 +
+ README    |   3 +
+ src/vte.c | 238 +++++++++++++++++++++++++++++++++++++++++++-------------------
+ vte.spec  |   9 ++-
+ 4 files changed, 179 insertions(+), 73 deletions(-)
+
+commit 361aa5b13aea9c0e8b742ce8bacc038c6765aec6 (tag: vte_0_4_7)
+Author: Nalin Dahyabhai 
+Date:   2002-07-01 23:19:53 +0000
+
+    Fix memory leak when we get conversion errors.
+    
+    * src/vte.c: Fix memory leak when we get conversion errors.
+
+ src/vte.c | 6 ++++++
+ vte.spec  | 3 ++-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+commit a27006e993e3fb530809bf37bb1eeebc1ba891f8 (tag: vte_0_4_6)
+Author: Nalin Dahyabhai 
+Date:   2002-07-01 22:53:27 +0000
+
+    Rework recovery from illegal sequence errors in the input stream to be
+    
+    * src/vte.c: Rework recovery from illegal sequence errors in the input stream
+            to be much more aggressive.
+
+ ChangeLog |  2 ++
+ src/vte.c | 49 +++++++++++++------------------------------------
+ 2 files changed, 15 insertions(+), 36 deletions(-)
+
+commit e96906ab055262d9289a0f136bb240756bd42d37
+Author: Nalin Dahyabhai 
+Date:   2002-07-01 22:35:47 +0000
+
+    Get rid of more debug spew.
+    
+    * src/vte.c: Get rid of more debug spew.
+
+ src/vte.c | 8 --------
+ 1 file changed, 8 deletions(-)
+
+commit d957ab5de61c616dc6d45be9f2a697261e7243ae
+Author: Nalin Dahyabhai 
+Date:   2002-07-01 22:26:51 +0000
+
+    Remove some unnecessary debug spew.
+    
+    * src/vte.c: Remove some unnecessary debug spew.
+
+ src/vte.c | 7 -------
+ 1 file changed, 7 deletions(-)
+
+commit 82e863454f131b26949e57aeafee770a4c6e604e
+Author: Nalin Dahyabhai 
+Date:   2002-07-01 22:06:00 +0000
+
+    Draw unicode line-drawing code points natively as we do for the GR1
+    
+    * src/vte.c (vte_terminal_draw_char): Draw unicode line-drawing code points
+            natively as we do for the GR1 support, in case the current font doesn't
+            include glyphs for them.
+    * src/vte.c: Test for g_iconv_open() failure properly (compare result to
+            ((GIConv)-1), not NULL).
+
+ ChangeLog |   6 +++
+ src/vte.c | 178 +++++++++++++++++++++++++++++++++++++++++++++++++-------------
+ vte.spec  |   5 +-
+ 3 files changed, 151 insertions(+), 38 deletions(-)
+
+commit 3282b6de97263d10e11a7b2d38bdbeabb6fd1446 (tag: vte_0_4_5)
+Author: Nalin Dahyabhai 
+Date:   2002-06-26 01:58:22 +0000
+
+    Bind F10 to "k;", not "k0". Add "k;" defined as F10.
+    
+    * src/vte.c: Bind F10 to "k;", not "k0".
+    * termcaps/xterm: Add "k;" defined as F10.
+
+ ChangeLog      | 3 +++
+ src/vte.c      | 2 +-
+ termcaps/xterm | 2 +-
+ vte.spec       | 1 +
+ 4 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 97e3e62df4f7891244beb85295d419ef689e9e2c
+Author: Nalin Dahyabhai 
+Date:   2002-06-26 01:42:02 +0000
+
+    Check for redundant resizes. Keep the alternate screen buffer size the
+    
+    * src/vte.c (vte_terminal_reset_rowdata): Check for redundant resizes.
+    * src/vte.c (vte_terminal_set_scrollback_lines): Keep the alternate screen
+            buffer size the same as the window height, because xterm's alternate
+            screen doesn't backscroll.
+    * src/vte.c (vte_terminal_get_text): Don't append spaces to multicolumn
+            characters when reading the screen's contents.
+    * src/vte.c: Don't overexpose neighboring cells any more.  Cleanups.
+
+ ChangeLog       |  10 +++
+ src/Makefile.am |   2 +-
+ src/debug.c     |   3 +
+ src/debug.h     |  13 ++--
+ src/ring.c      |   6 ++
+ src/ring.h      |   1 +
+ src/vte.c       | 208 +++++++++++++++++++++++---------------------------------
+ vte.spec        |  10 ++-
+ 8 files changed, 121 insertions(+), 132 deletions(-)
+
+commit 2e30f1a92aa303cb744452a3d75ca43b30722215 (tag: vte_0_4_4)
+Author: Nalin Dahyabhai 
+Date:   2002-06-25 19:39:28 +0000
+
+    Treat option 1049 as a combination of 1047 and 1048. When finalizing while
+    
+    * src/vte.c (vte_sequence_handler_decset_internal): Treat option 1049 as a
+            combination of 1047 and 1048.
+    * src/vte.c (vte_terminal_finalize): When finalizing while holding the
+            selection, try to throw the selection onto the clipboard without an
+            owner so that it doesn't just disappear.
+
+ ChangeLog |  6 ++++++
+ src/vte.c | 22 +++++++++++++++++++++-
+ vte.spec  |  6 +++++-
+ 3 files changed, 32 insertions(+), 2 deletions(-)
+
+commit 7bea68154a9b6e847437573414c88db36fc1dde5
+Author: Nalin Dahyabhai 
+Date:   2002-06-19 15:24:49 +0000
+
+    Fix a logic bug that got rid of the title always, not just when conversion
+    
+    * src/vte.c (vte_sequence_handler_set_title_int): Fix a logic bug that got rid
+            of the title always, not just when conversion failed.
+
+ ChangeLog       | 3 +++
+ src/interpret.c | 4 ++++
+ src/trie.c      | 6 +++---
+ src/vte.c       | 4 ++--
+ 4 files changed, 12 insertions(+), 5 deletions(-)
+
+commit 4c681083ba867cb430c5faa8f97c92117121c6de (tag: vte_0_4_3)
+Author: Nalin Dahyabhai 
+Date:   2002-06-19 06:42:43 +0000
+
+    Clear the alternate screen when switching to it.
+    
+    * src/vte.c: Clear the alternate screen when switching to it.
+
+ ChangeLog | 2 ++
+ src/vte.c | 8 ++++++++
+ 2 files changed, 10 insertions(+)
+
+commit 63d4477daaaecdd71b26ffd4e7199c1c680e553d
+Author: Nalin Dahyabhai 
+Date:   2002-06-19 05:55:39 +0000
+
+    Fix package description.
+    
+    * vte.spec: Fix package description.
+
+ vte.spec | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+commit 087cd10148e680924b9ddbd704a6648f489fc335
+Author: Nalin Dahyabhai 
+Date:   2002-06-19 05:07:26 +0000
+
+    Fix refs/derefs with IOChannels and sources. Clean up I/O GIConv
+    
+    * src/vte.c: Fix refs/derefs with IOChannels and sources.  Clean up I/O GIConv
+            descriptors at finalize-time.
+
+ ChangeLog |  3 +++
+ src/vte.c | 78 ++++++++++++++++++++++++++++++++++++++++++++-------------------
+ vte.spec  |  5 +++-
+ 3 files changed, 62 insertions(+), 24 deletions(-)
+
+commit 9ba8b45bb91df01b8e1bc20c50e7290f3069014e (tag: vte_0_4_2)
+Author: Nalin Dahyabhai 
+Date:   2002-06-18 16:44:24 +0000
+
+    0.4.2
+
+ vte.spec | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 9a9dd6e6e3bedb5150163047f80c61ea3db3f897
+Author: Nalin Dahyabhai 
+Date:   2002-06-18 16:24:17 +0000
+
+    Make cursor_visible a widget-wide (not per-screen) setting.
+    
+    * src/vte.c: Make cursor_visible a widget-wide (not per-screen) setting.
+
+ ChangeLog |  2 ++
+ src/vte.c | 20 +++++++++-----------
+ 2 files changed, 11 insertions(+), 11 deletions(-)
+
+commit 47074ac2f4da626fe6175afe211671de0199776c
+Author: Nalin Dahyabhai 
+Date:   2002-06-18 16:17:49 +0000
+
+    Correct automake version check to require 1.5, heads-up from Glynn Foster.
+    
+    * autogen.sh: Correct automake version check to require 1.5, heads-up from
+            Glynn Foster.
+
+ ChangeLog  | 5 ++++-
+ autogen.sh | 8 ++++----
+ 2 files changed, 8 insertions(+), 5 deletions(-)
+
+commit 5aba0af966e7eea386f95f944cad25b76d07e11b (tag: vte_0_4_1)
+Author: Nalin Dahyabhai 
+Date:   2002-06-18 04:20:38 +0000
+
+    Sort out greedy vs. non-greedy pattern matching. Make 1047 an alias for 47
+    
+    * src/trie.c (vte_trie_match, vte_trie_match_x): Sort out greedy vs. non-greedy
+            pattern matching.
+    * src/vte.c (vte_sequence_handler_decset_internal): Make 1047 an alias for 47
+            (use alternate buffer), and handle cursor save/restore properly.
+
+ ChangeLog  |  5 +++++
+ README     |  1 -
+ src/trie.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
+ src/vte.c  | 50 +++++++++++++++++++++++++++++++++++--------
+ vte.spec   |  5 ++++-
+ 5 files changed, 113 insertions(+), 20 deletions(-)
+
+commit 2fa3b394c54ac2cf3d72d54b74553c2fae16bc48 (tag: vte_0_4_0)
+Author: Nalin Dahyabhai 
+Date:   2002-06-14 20:52:04 +0000
+
+    move the python module to the non-devel package
+    
+    * vte.spec: move the python module to the non-devel package
+
+ vte.spec | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit e2a8889005ad4c2deb37babb78a54d9e263a0c99
+Author: Nalin Dahyabhai 
+Date:   2002-06-14 19:50:33 +0000
+
+    Fix arg list mismatch.
+    
+    * python/vte.override: Fix arg list mismatch.
+
+ python/vte.override | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d8dfa0f809acb46e46e5f203e398a42f50df0856
+Author: Nalin Dahyabhai 
+Date:   2002-06-14 19:34:07 +0000
+
+    Oops, shell typo.
+    
+    * vte.spec: Oops, shell typo.
+
+ vte.spec | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 72df40d75cf96445a573fd20973b1fd81f83b2fd
+Author: Nalin Dahyabhai 
+Date:   2002-06-14 19:26:41 +0000
+
+    Add a parameter for passing in environment variables to add. Preprocess
+    
+    * src/vte.c, src/vte.h (vte_terminal_fork_command): Add a parameter for passing
+            in environment variables to add.
+     * src/termcap.c: Preprocess out unused comment() and generate() funcs.
+     * src/Makefile.am: Bump library version number.
+     * vte.spec: 0.4.0
+
+ ChangeLog           |  6 ++++
+ python/vte.defs     |  3 +-
+ python/vte.override | 82 +++++++++++++++++++++++++++++++++--------------------
+ src/Makefile.am     |  1 +
+ src/pty.c           | 16 +++++------
+ src/pty.h           |  4 +--
+ src/termcap.c       |  2 ++
+ src/vte.c           | 33 ++++++++++-----------
+ src/vte.h           |  3 +-
+ src/vteapp.c        |  3 +-
+ vte.spec            |  8 +++---
+ 11 files changed, 97 insertions(+), 64 deletions(-)
+
+commit 7c97366c65ce0378b601addbbe8bb9cb246f5300 (tag: vte_0_3_30)
+Author: Nalin Dahyabhai 
+Date:   2002-06-14 18:54:13 +0000
+
+    subst PYGTK_DATADIR
+    
+    * configure.in: subst PYGTK_DATADIR
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit bc8d25d01e146da93a2bba748c7eae818b9c64e4
+Author: Nalin Dahyabhai 
+Date:   2002-06-14 18:51:10 +0000
+
+    Build python bindings with -fPIC.
+    
+    * python/Makefile.am: Build python bindings with -fPIC.
+
+ python/Makefile.am | 2 +-
+ vte.spec           | 8 +++++++-
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit ac7de676d72e7c1fe73a094ed5c65855a2567bb9
+Author: Nalin Dahyabhai 
+Date:   2002-06-14 16:47:43 +0000
+
+    Handle cases where pygtk isn't installed in the prefix we're configuring
+    
+    * configure.in, python/Makefile.am: Handle cases where pygtk isn't installed
+            in the prefix we're configuring for.
+    * src/Makefile.am: Link libvte to its library dependencies.
+
+ ChangeLog          | 4 ++++
+ configure.in       | 2 ++
+ python/Makefile.am | 2 +-
+ src/Makefile.am    | 2 ++
+ 4 files changed, 9 insertions(+), 1 deletion(-)
+
+commit 82b2469479942e963fdae942d14dbff20ea08cf1
+Author: Nalin Dahyabhai 
+Date:   2002-06-14 16:26:53 +0000
+
+    0.3.30
+
+ vte.spec | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 87fe587164fd553aa6ca0e85be21f32c3e46a1ad
+Author: Nalin Dahyabhai 
+Date:   2002-06-13 20:36:42 +0000
+
+    Stop watching for hierarchy-changed signals -- the accessible container
+    
+    * src/vteaccess.c: Stop watching for hierarchy-changed signals -- the accessible
+            container which is our parent handles it already (from msw).
+
+ ChangeLog       |  3 +++
+ src/vteaccess.c | 53 -----------------------------------------------------
+ 2 files changed, 3 insertions(+), 53 deletions(-)
+
+commit 0cf2559612f43caa23a16f71c1ab557247fa509d
+Author: Nalin Dahyabhai 
+Date:   2002-06-13 19:25:37 +0000
+
+    Re-read cursor position immediately on "cursor-moved" events, and emit the
+    
+    * src/vteaccess.c: Re-read cursor position immediately on "cursor-moved" events,
+            and emit the "text-caret-moved" signal then as well.  Don't override the
+            signal handlers for signals we emit, bad things can happen (from msw).
+
+ ChangeLog       |   5 ++
+ src/vteaccess.c | 252 +++++++++++++++++++++++++++++++++-----------------------
+ 2 files changed, 156 insertions(+), 101 deletions(-)
+
+commit c20d8f4f75848fed0da6404b847bdb050e71543d
+Author: Nalin Dahyabhai 
+Date:   2002-06-12 23:30:44 +0000
+
+    Also tell the parent the child died when the child dies due to an uncaught
+    
+    * src/reaper.c: Also tell the parent the child died when the child dies due
+            to an uncaught signal.
+
+ ChangeLog    | 2 ++
+ src/reaper.c | 7 +++++++
+ src/vte.h    | 5 +++++
+ 3 files changed, 14 insertions(+)
+
+commit eaacb5d11a027c920575381de5abbfd4b245b0ee
+Author: Nalin Dahyabhai 
+Date:   2002-06-12 23:00:33 +0000
+
+    Re-read the termcap when we change emulation, because the location of the
+    
+    * src/vte.c: Re-read the termcap when we change emulation, because the location
+            of the file may have changed.
+    * python/vte.override (_wrap_vte_terminal_fork_command): Handle default value
+            for the command parameter.
+
+ ChangeLog           |  5 +++++
+ python/vte.override |  4 ++--
+ python/vte.py       | 43 +++++++++++++++++++++++++++++++++++++++++++
+ src/vte.c           | 13 ++++++++++---
+ 4 files changed, 60 insertions(+), 5 deletions(-)
+
+commit 4ae8a2578e950a75c4f3760d96d7bbd67d83a30c
+Author: Matt Wilson 
+Date:   2002-06-12 22:08:41 +0000
+
+    2002-06-12 msw implement
+    
+    2002-06-12 msw
+            * python/vte.override (_wrap_vte_terminal_fork_command): implement
+
+ ChangeLog           |  2 ++
+ python/vte.override | 43 +++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 45 insertions(+)
+
+commit 973481e77693aeb7c093425b53a7389781c61908
+Author: Matt Wilson 
+Date:   2002-06-12 21:44:04 +0000
+
+    2002-06-12 msw added AM_CHECK_PYTHON_HEADERS from pygtk rewrote python
+    
+    2002-06-12 msw
+            * acinclude.m4: added AM_CHECK_PYTHON_HEADERS from pygtk
+            * configure.in: rewrote python checks to be more robust
+            * python/Makefile.am (CFLAGS): include @PYTHON_INCLUDES@
+
+ ChangeLog          |  4 ++++
+ acinclude.m4       | 24 ++++++++++++++++++++++++
+ configure.in       | 20 ++++++++++++++++----
+ python/Makefile.am |  4 ++--
+ 4 files changed, 46 insertions(+), 6 deletions(-)
+
+commit 5aa864cd26b40b845e6aa699421bffd360a33690
+Author: Matt Wilson 
+Date:   2002-06-12 21:10:47 +0000
+
+    2002-06-12 msw turn the logic around to be the right way
+    
+    2002-06-12 msw
+            * src/vte.c (vte_terminal_get_accessible): turn the logic around
+            to be the right way
+
+ ChangeLog | 3 +++
+ src/vte.c | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit 4fc0ad8297b2ba8d05dcf295e912f7815d0f8b0a
+Author: Nalin Dahyabhai 
+Date:   2002-06-12 21:08:42 +0000
+
+    Move python stuffs to a different subdirectory.
+    
+    * Makefile.am, src/Makefile.am: Move python stuffs to a different subdirectory.
+
+ Makefile.am         |   2 +-
+ configure.in        |  11 +-
+ python/Makefile.am  |  16 +++
+ python/vte.defs     | 369 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ python/vte.override |  12 ++
+ python/vtemodule.c  |  49 +++++++
+ src/Makefile.am     |  15 +--
+ src/vte.defs        |  42 ------
+ src/vte.override    |   6 -
+ 9 files changed, 458 insertions(+), 64 deletions(-)
+
+commit 502568a81e082c70a0931099a4753b17a7653b3a
+Author: Nalin Dahyabhai 
+Date:   2002-06-12 20:24:40 +0000
+
+    Implement vte_terminal_get_encoding and vte_terminal_get_emulation, and
+    
+    * src/vte.c, src/vte.h: Implement vte_terminal_get_encoding and
+            vte_terminal_get_emulation, and emit signals when these change.
+    * src/vteaccess.c: Emit a "text_caret_moved" signal when the cursor moves.
+
+ ChangeLog       |   6 ++-
+ src/vte.c       | 118 ++++++++++++++++++++++++++++++++++++++++++--------------
+ src/vte.h       |   4 ++
+ src/vteaccess.c |  12 +++++-
+ 4 files changed, 107 insertions(+), 33 deletions(-)
+
+commit b3c3ca51c7b786a9b4fae50c65aa8096132a7b63
+Author: Nalin Dahyabhai 
+Date:   2002-06-12 19:03:26 +0000
+
+    Fix declaration errors that broke stuff.
+    
+    * src/vte.defs, src/vte.override: Fix declaration errors that broke stuff.
+
+ src/vte.defs     | 4 ++++
+ src/vte.override | 1 +
+ 2 files changed, 5 insertions(+)
+
+commit 754299b09c5a90cb5874636584a1bc92ff3ff530
+Author: Nalin Dahyabhai 
+Date:   2002-06-12 18:55:18 +0000
+
+    Add rules for building python modules.
+    
+    * configure.in, src/Makefile.am: Add rules for building python modules.
+
+ ChangeLog        |  2 ++
+ configure.in     | 14 ++++++++++++++
+ src/Makefile.am  | 13 ++++++++++++-
+ src/vte.override |  5 +++++
+ 4 files changed, 33 insertions(+), 1 deletion(-)
+
+commit 28d9d6be94b45a365dd84a8f7792669b5329b70a
+Author: Nalin Dahyabhai 
+Date:   2002-06-12 18:16:04 +0000
+
+    Fix hilite clearing when scrolling delta != 0. Actually add the signals
+    
+    * src/vte.c: Fix hilite clearing when scrolling delta != 0.
+    * src/debug.c, src/debug.h: Actually add the signals debugging flag.
+
+ README          | 3 ---
+ src/debug.c     | 3 +++
+ src/debug.h     | 1 +
+ src/vte.c       | 2 +-
+ src/vteaccess.c | 5 +++--
+ 5 files changed, 8 insertions(+), 6 deletions(-)
+
+commit f0e9d6bd04827da7afd83445930a3f4fa071c830
+Author: Nalin Dahyabhai 
+Date:   2002-06-12 16:23:05 +0000
+
+    Cache the result of vte_terminal_get_accessible() and unref it at
+    
+    * src/vte.c: Cache the result of vte_terminal_get_accessible() and unref it at
+            finalize-time.  Add debug messages to log signals emitted by the widget.
+
+ ChangeLog |   4 +++
+ src/vte.c | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 109 insertions(+), 1 deletion(-)
+
+commit c57529767dc89bfec1ceab7a38e91191865f94cf
+Author: Matt Wilson 
+Date:   2002-06-12 16:02:30 +0000
+
+    2002-06-12 msw accept end_offset of -1, which means "until the end". never
+    
+    2002-06-12 msw
+            * src/vteaccess.c (vte_terminal_accessible_get_text): accept
+            end_offset of -1, which means "until the end".
+            * src/vteaccess.c (vte_terminal_accessible_new): never set the
+            description to a NULL pointer
+
+ ChangeLog       | 5 +++++
+ src/vteaccess.c | 8 ++++----
+ 2 files changed, 9 insertions(+), 4 deletions(-)
+
+commit 450bdefcadd2d5379abb4e27dbb1f68ba9ec2f1f
+Author: Christian Rose 
+Date:   2002-06-11 09:08:24 +0000
+
+    Removed. This is a generated file and should not be stored in cvs. Added.
+    
+    2002-06-11  Christian Rose  
+    
+            * vte.pot: Removed. This is a generated file and should not be
+            stored in cvs.
+            * .cvsignore: Added.
+            * sv.po: Added Swedish translation.
+
+ po/.cvsignore         | 11 +++++++++
+ po/ChangeLog          |  7 ++++++
+ po/{vte.pot => sv.po} | 64 +++++++++++++++++++++++++++++----------------------
+ 3 files changed, 54 insertions(+), 28 deletions(-)
+
+commit 6690915804fd0b597beb63e7b28fa6120299c7d9 (tag: vte_0_3_29)
+Author: Nalin Dahyabhai 
+Date:   2002-06-10 23:06:29 +0000
+
+    Add a changelog for translations.
+    
+    * po/ChangeLog: Add a changelog for translations.
+
+ po/ChangeLog | 0
+ po/vte.pot   | 8 ++++----
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 47595c278977b294fcb55665c142096c67e2e05e
+Author: Nalin Dahyabhai 
+Date:   2002-06-10 22:56:13 +0000
+
+    Finish merging otaylor's Xft2 patch (oops). Compute padding correctly.
+    
+    * src/vte.c: Finish merging otaylor's Xft2 patch (oops).  Compute padding
+            correctly.
+
+ ChangeLog | 8 +++++---
+ src/vte.c | 9 +++++----
+ vte.spec  | 5 ++++-
+ 3 files changed, 14 insertions(+), 8 deletions(-)
+
+commit 2173db2433b6405a0b76479f1846094173b231d6
+Author: Nalin Dahyabhai 
+Date:   2002-06-10 19:35:31 +0000
+
+    Include gettext support. Mark warnings for possible translation. Add.
+    
+    * Makefile.am, configure.in: Include gettext support.
+    * src/pty.c, src/reaper.c, src/trie.c, src/vte.c: Mark warnings for possible
+            translation.
+    * po/POTFILES.in, po/vte.pot: Add.
+
+ ChangeLog       |   3 ++
+ Makefile.am     |   2 +-
+ autogen.sh      |   1 +
+ configure.in    |   8 +++-
+ po/POTFILES.in  |   4 ++
+ po/vte.pot      | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/caps.h      |   4 +-
+ src/debug.h     |   4 +-
+ src/pty.c       |  11 +++++-
+ src/pty.h       |   4 +-
+ src/reaper.c    |  16 +++++++-
+ src/ring.h      |   4 +-
+ src/termcap.h   |   4 +-
+ src/trie.c      |   9 ++++-
+ src/trie.h      |   4 +-
+ src/vte.c       |  66 ++++++++++++++++++++------------
+ src/vte.h       |   4 +-
+ src/vteaccess.c |   8 ++++
+ src/vteaccess.h |   4 +-
+ 19 files changed, 230 insertions(+), 47 deletions(-)
+
+commit cb97abc8c28ea66334532da0f713c803d2675bbb (tag: vte_0_3_28)
+Author: Nalin Dahyabhai 
+Date:   2002-06-10 18:42:05 +0000
+
+    0.3.28
+
+ Makefile.am | 2 +-
+ vte.spec    | 3 +++
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit e3d439e51d5a63b113ec0719ea9a1bfdcfab802b
+Author: Nalin Dahyabhai 
+Date:   2002-06-10 18:38:49 +0000
+
+    Center characters in their cells, caching their extents. Finish merging
+    
+    * src/vte.c: Center characters in their cells, caching their extents.  Finish
+            merging otaylor's Xft2 patch (oops).
+    * src/vte.c, src/vte.h: Expose vte_terminal_set_encoding().
+
+ ChangeLog |  2 ++
+ src/vte.c | 10 +++++++---
+ src/vte.h |  3 +++
+ vte.spec  |  3 ++-
+ 4 files changed, 14 insertions(+), 4 deletions(-)
+
+commit 0fa0b817b350b7cc1ab59eccbeacc1346209402c (tag: vte_0_3_27)
+Author: Nalin Dahyabhai 
+Date:   2002-06-10 14:31:35 +0000
+
+    0.3.27
+
+ vte.spec | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit e2ca5bd706a6f88520be29d9fe4bba0886e93541
+Author: Nalin Dahyabhai 
+Date:   2002-06-09 05:54:39 +0000
+
+    Make reaper an EXTRA prog, not a NOINST prog.
+    
+    * src/Makefile.am: Make reaper an EXTRA prog, not a NOINST prog.
+
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 6fe781c76ed8f8bc69d292a705d5011a837babfb
+Author: Nalin Dahyabhai 
+Date:   2002-06-09 04:42:57 +0000
+
+    Adjust font padding to account for characters with wcwidth() != 1.
+    
+    * src/vte.c: Adjust font padding to account for characters with wcwidth() != 1.
+
+ src/vte.c | 63 +++++++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 33 insertions(+), 30 deletions(-)
+
+commit beb4529109c5737ed32b319bcf45abfaec3019ec
+Author: Nalin Dahyabhai 
+Date:   2002-06-07 21:55:03 +0000
+
+    Center characters in their cells, caching their extents.
+    
+    * src/vte.c: Center characters in their cells, caching their extents.
+
+ ChangeLog |  2 ++
+ src/vte.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----------
+ 2 files changed, 58 insertions(+), 12 deletions(-)
+
+commit 869a5edc9ea17d09544cd89a8c096f44e4741a55 (tag: vte_0_3_26)
+Author: Nalin Dahyabhai 
+Date:   2002-06-07 16:58:50 +0000
+
+    Check for pangoxft with Xft1 or Xft2, hopefully getting things right for
+    
+    * configure.in: Check for pangoxft with Xft1 or Xft2, hopefully getting
+            things right for either case.  Patches by andersca and otaylor.
+    * src/reaper.c, src/reaper.h: Add a singleton object to watch for
+            SIGCHLD when child processes quit.
+    * src/vte.c, src/vte.h: Add get_cursor_position(). Remove get_snapshot()
+            and free_shapshot(). Emit a "child-exited" signal when a child started
+            with fork_command() exits.  Fix a logic bug that caused us to scroll
+            to the bottom even if the user just pressed and released a modifier
+            key.  Fix saving of the font in set_font() in most cases, where we
+            weren't saving the new font before.  Scroll-to-bottom on input method
+            commits, which are also the result of keystrokes, when
+            scroll-on-keystroke is enabled.
+    * src/vte.c: Use FcNameUnparse() instead of XftNameUnparse in Xft2.  Patch from
+            otaylor.
+    * src/vte.defs: Add.  Not very useful yet.
+    * src/vteaccess.c: Rework to use get_text() and get_cursor_position()
+            instead of get_snapshot(), so that selection and accessibility both
+            agree on what's visible (or "visible").
+
+ ChangeLog       |  21 ++
+ README          |   7 +-
+ configure.in    |  22 ++-
+ src/Makefile.am |  28 ++-
+ src/reaper.c    | 232 ++++++++++++++++++++++
+ src/reaper.h    |  64 ++++++
+ src/termcap.c   |   5 +
+ src/vte.c       | 595 +++++++++++++++++++++++++-------------------------------
+ src/vte.defs    |  38 ++++
+ src/vte.h       |  23 +--
+ src/vteaccess.c | 461 ++++++++++++++++++++++++-------------------
+ src/vteapp.c    |  16 +-
+ vte.spec        |   8 +-
+ 13 files changed, 946 insertions(+), 574 deletions(-)
+
+commit b392abcb72e5f7a2a67d65b2dcb3beb6626c8c9c (tag: vte_0_3_25)
+Author: Nalin Dahyabhai 
+Date:   2002-06-05 18:50:36 +0000
+
+    1.3.25
+    
+    * vte.spec: 1.3.25
+
+ vte.spec | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit fdcf82b18420916520003cd39f4ab00f74e47557
+Author: Nalin Dahyabhai 
+Date:   2002-06-05 18:41:22 +0000
+
+    Don't attempt to handle the ac capability. Try to compute a more sensible
+    
+    * src/vte.c: Don't attempt to handle the ac capability.  Try to compute a more
+            sensible character width when using Xft.
+
+ src/vte.c | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+commit 16906be59cf18a2acaa15f1ad3638eeb8904f65d
+Author: Nalin Dahyabhai 
+Date:   2002-06-04 23:15:51 +0000
+
+    Remove the ac and ma capabilities, which aren't strings.
+
+ src/caps.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit e965a0406d36cfc1d3a3fdfc5f84cd2e56202f59
+Author: Nalin Dahyabhai 
+Date:   2002-06-03 19:42:00 +0000
+
+    include  instead of , patch from HideToshi Tajima.
+    
+    * src/vteapp.c: include  instead of , patch from
+            HideToshi Tajima.
+
+ src/vteapp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7c00ac1ce443babebb1102d1793967bce9a7b5de (tag: vte_0_3_24)
+Author: Nalin Dahyabhai 
+Date:   2002-06-03 16:08:24 +0000
+
+    Tweak handling of invalid multibyte characters, preventing some hangs.
+    
+    * src/vte.c: Tweak handling of invalid multibyte characters, preventing
+            some hangs.
+
+ src/vte.c | 6 ++----
+ vte.spec  | 5 ++++-
+ 2 files changed, 6 insertions(+), 5 deletions(-)
+
+commit a66cbc23aaf3ef58dd156fd04286a6d965d70e9a (tag: vte_0_3_23)
+Author: Nalin Dahyabhai 
+Date:   2002-05-31 23:41:02 +0000
+
+    Finish switching iconv to g_iconv. I think this was a part of Hidetoshi
+    
+    * src/trie.c, src,vte.c: Finish switching iconv to g_iconv.  I think this was
+            a part of Hidetoshi Tajima's patch that I lost.  Free regexes when
+            we're done with them.
+    * src/vte.c: Implement font setting using PangoX to convert Pango font
+            descriptions to core font xlfds for use when drawing with Xlib.
+
+ ChangeLog  |  10 ++++-
+ src/trie.c |  17 ++++---
+ src/vte.c  | 147 +++++++++++++++++++++++++++++++++++--------------------------
+ vte.spec   |   6 ++-
+ 4 files changed, 107 insertions(+), 73 deletions(-)
+
+commit c3285ec2305e3c524bb06fa1a31267c20aafa16b (tag: vte_0_3_22)
+Author: Nalin Dahyabhai 
+Date:   2002-05-29 00:27:24 +0000
+
+    Always free the segment when freeing arrays and strings.
+    
+    * src/vte.c, src/vteaccess.c: Always free the segment when freeing arrays and
+    strings.
+
+ ChangeLog       |  2 ++
+ src/vte.c       | 11 ++++++-----
+ src/vteaccess.c |  8 ++++----
+ vte.spec        |  5 ++++-
+ 4 files changed, 16 insertions(+), 10 deletions(-)
+
+commit c8cd575e5ccd8a246562cc1d14d94aaf3fdeb4f0
+Author: Nalin Dahyabhai 
+Date:   2002-05-28 23:11:38 +0000
+
+    Fix make distcheck.
+    
+    * Makefile.am, autogen.sh, configure.in: Fix make distcheck.
+
+ autogen.sh   | 2 +-
+ configure.in | 3 ++-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+commit df2bf4b5e43d5e5dd6b46ea7a7cc8589338c95c2 (tag: vte_0_3_21)
+Author: Nalin Dahyabhai 
+Date:   2002-05-28 22:52:34 +0000
+
+    Fix cb() and ce() when the cursor is on a line without data (needed to
+    
+    * src/vte.c: Fix cb() and ce() when the cursor is on a line without data
+    (needed to create it) and when cells being cleared don't exist (needed to
+    create them).
+
+ ChangeLog |   4 ++-
+ src/vte.c | 115 +++++++++++++++++++++++++++++++++++++-------------------------
+ vte.spec  |   5 ++-
+ 3 files changed, 76 insertions(+), 48 deletions(-)
+
+commit 194a0bf169eac4290a1a05f18fb3f1229720138d
+Author: Nalin Dahyabhai 
+Date:   2002-05-28 18:13:03 +0000
+
+    Fix matching when scrolling delta isn't zero, really this time. Fix async
+    
+    * src/vte.c: Fix matching when scrolling delta isn't zero, really this time.
+    Fix async background updating (report from Richard Neal Plana).
+
+ ChangeLog |  3 ++-
+ src/vte.c | 77 ++++++++++++++++++++++++++++++++++++++-------------------------
+ 2 files changed, 48 insertions(+), 32 deletions(-)
+
+commit 4d4f1bdf75ab2d85cb41760e3ebaae4532227860
+Author: Nalin Dahyabhai 
+Date:   2002-05-28 15:30:49 +0000
+
+    Fix matching when scrolling delta isn't zero.
+    
+    * src/vte.c: Fix matching when scrolling delta isn't zero.
+
+ ChangeLog | 3 +++
+ src/vte.c | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit f688e2b43a0f994da117a486692772944d5e0d88 (tag: vte_0_3_20)
+Author: Nalin Dahyabhai 
+Date:   2002-05-24 18:46:28 +0000
+
+    Call libtoolize. (#82836) Fix stupid segfault in set_scrollback_lines.
+    
+    * autogen.sh: Call libtoolize. (#82836)
+    * src/vte.c: Fix stupid segfault in set_scrollback_lines.  (Patch from notting.)
+            Make another attempt to convert Pango font descriptions to xlfds.
+    * src/vte.c, src/vte.h: Expose set_emulation().
+    * src/vteapp.c: Add -c, -f, -t command-line flags for easier testing.
+
+ ChangeLog    |   7 +++
+ README       |   1 +
+ src/vte.c    | 171 +++++++++++++++++++++++++++++++++++------------------------
+ src/vte.h    |   3 ++
+ src/vteapp.c |  27 +++++++++-
+ vte.spec     |   5 +-
+ 6 files changed, 142 insertions(+), 72 deletions(-)
+
+commit 817d66802765605c413beb01185629bbd085f17c
+Author: Nalin Dahyabhai 
+Date:   2002-05-24 14:41:10 +0000
+
+    Invoke libtoolize.
+
+ autogen.sh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit faae3bfc6462009405b5e97a8e21e7803386cc9f
+Author: Nalin Dahyabhai 
+Date:   2002-05-22 04:19:22 +0000
+
+    Fix hiliting of matched strings to better match the returned matched
+    
+    * src/vte.c: Fix hiliting of matched strings to better match the returned
+            matched string in match_check().
+
+ ChangeLog |  4 ++++
+ README    |  2 --
+ src/vte.c | 71 +++++++++++++++++++++++++++++++++++++++++----------------------
+ 3 files changed, 50 insertions(+), 27 deletions(-)
+
+commit 17b539566a092f110f6aecc8e68c135247dbc581
+Author: Nalin Dahyabhai 
+Date:   2002-05-21 21:50:23 +0000
+
+    Filter key release events through input methods. (Patch from otaylor.)
+    
+    * src/vte.c: Filter key release events through input methods.  (Patch from
+            otaylor.)  When building with gcc, use -std=c99.
+
+ ChangeLog    |  3 +++
+ configure.in |  1 +
+ src/vte.c    | 11 +++++++++++
+ 3 files changed, 15 insertions(+)
+
+commit 1858046b2a9e3bf4ac6951171c55c85d09197a1d (tag: vte_0_3_19)
+Author: Nalin Dahyabhai 
+Date:   2002-05-21 16:54:40 +0000
+
+    0.3.19
+
+ vte.spec | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 13a2a609868858fb30ee68ba9baddcb31ad91480
+Author: Nalin Dahyabhai 
+Date:   2002-05-21 15:36:52 +0000
+
+    Patch from Hidetoshi Tajima to fix building on Solaris systems, remove use
+    
+    * autogen.sh, src/termcap.c, src/utf8echo.c, src/vte.c: Patch from Hidetoshi
+            Tajima to fix building on Solaris systems, remove use of syntax that
+            might be specific to gcc, and fix an overrun in vte_termcap_generate().
+            (#82433)
+
+ ChangeLog       |  9 ++++++
+ README          |  8 +++++
+ autogen.sh      | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
+ configure.in    |  2 +-
+ src/Makefile.am |  1 +
+ src/termcap.c   |  6 ++--
+ src/utf8echo.c  | 12 +++----
+ src/vte.c       | 45 +++++++++++++++-----------
+ 8 files changed, 141 insertions(+), 39 deletions(-)
+
+commit 0b343b1d7b1aae735b86ef5eb0760c91d5b867ed
+Author: Anders Carlsson 
+Date:   2002-05-20 14:06:30 +0000
+
+    2002-05-18 andersca Don't queue a background update if the background
+    
+    2002-05-18 andersca
+            * src/vte.c: Don't queue a background update if the background isn't
+            transparent.
+
+ ChangeLog | 3 +++
+ src/vte.c | 5 ++++-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+commit a19cc1f83fb4ad89b68bcf46b6a738a9176148fe (tag: vte_0_3_18)
+Author: Nalin Dahyabhai 
+Date:   2002-05-17 02:25:25 +0000
+
+    Try multiple versions of autoconf, too.
+    
+            * autogen.sh: Try multiple versions of autoconf, too.
+
+ autogen.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit e4758d1b38f2a348a8c9928a2cd730a087e9e652
+Author: Nalin Dahyabhai 
+Date:   2002-05-17 02:17:41 +0000
+
+    Try multiple versions of automake, just in case. Fix displaying of
+    
+    * autogen.sh: Try multiple versions of automake, just in case.
+    * src/vte.c: Fix displaying of underlined text.  Finish implementing matching.
+    * src/vteapp.c: Set "abcdefg" as a match string.
+
+ ChangeLog    |   3 +-
+ autogen.sh   |   4 +-
+ src/vte.c    | 263 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
+ src/vteapp.c |   3 +
+ vte.spec     |   5 +-
+ 5 files changed, 259 insertions(+), 19 deletions(-)
+
+commit 775bdd468bd6d7d2dbf26e7e10c34667a1100e54 (tag: vte_0_3_17)
+Author: Nalin Dahyabhai 
+Date:   2002-05-16 23:04:32 +0000
+
+    rework a couple of rules to make automake happy again.
+    
+    * src/Makefile.am: rework a couple of rules to make automake happy again.
+
+ src/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 909c505d3a03de567c77da604d353b71f72df6a1
+Author: Nalin Dahyabhai 
+Date:   2002-05-16 23:01:29 +0000
+
+    Snip trailing whitespace off of copied lines, insert an end-of-line only
+    
+            * src/vte.c: Snip trailing whitespace off of copied lines, insert an
+            end-of-line only when the copied line doesn't go to the right edge,
+            don't overrun right edge, even in insert mode.
+
+ ChangeLog |  4 ++++
+ src/vte.c | 40 ++++++++++++++++++++++++++++------------
+ vte.spec  |  5 ++++-
+ 3 files changed, 36 insertions(+), 13 deletions(-)
+
+commit b72c6a398dab93bee5151859e7912ae575caa093 (tag: vte_0_3_16)
+Author: Nalin Dahyabhai 
+Date:   2002-05-15 23:30:01 +0000
+
+    Send kI on insert key. Don't send drag events when the child has only
+    
+            * src/vte.c: Send kI on insert key.  Don't send drag events when the
+            child has only asked for click events.  Fix crashbugs in selection.
+            When getting scroll events, send mouse 4/5 events to the child instead
+            of performing a history scroll if the child wants mouse events.  Start
+            adding match support, merging how selection views the buffer with how
+            matching views the buffer, though matching doesn't work yet.
+
+ ChangeLog |   7 +
+ src/vte.c | 517 +++++++++++++++++++++++++++++++++++++++++++++-----------------
+ src/vte.h |  79 ++++++++--
+ vte.spec  |  10 +-
+ 4 files changed, 461 insertions(+), 152 deletions(-)
+
+commit 9820fa1c0b0e3dfaed6a460f9c88610aad4e1b3e (tag: vte_0_3_15)
+Author: Nalin Dahyabhai 
+Date:   2002-05-14 22:02:40 +0000
+
+    Don't send motion-tracking events to the child unless we're dragging. Fix
+    
+            * src/vte.c: Don't send motion-tracking events to the child unless
+            we're dragging.  Fix ce so that it works even right after startup.
+            Make sure that repainting the entire window actually exposes the
+            visible parts of the window.  Fix tab clearing to also allow removal of
+            the current tabstop.  Implement save-mode and restore-mode.  Start on
+            reverse-video mode.  Don't scroll on modifier keypress events.  Rework
+            part of clipboard copy.
+            * termcaps/xterm: Add missing F11/F12/End keysyms to bundled xterm
+            termcap.
+
+ ChangeLog      |  10 +-
+ src/caps.c     |   4 +-
+ src/trie.c     |  96 ++++++++-
+ src/trie.h     |   3 +
+ src/vte.c      | 659 ++++++++++++++++++++++++++++++++++++---------------------
+ termcaps/xterm |   7 +-
+ vte.spec       |   5 +-
+ 7 files changed, 539 insertions(+), 245 deletions(-)
+
+commit b961d28996f665464d679c54373d1256169ac331 (tag: vte_0_3_14)
+Author: Nalin Dahyabhai 
+Date:   2002-05-14 14:38:35 +0000
+
+    Don't try to draw nul characters.
+    
+    * src/vte.c: Don't try to draw nul characters.
+
+ ChangeLog | 2 ++
+ src/vte.c | 2 +-
+ vte.spec  | 7 +++++--
+ 3 files changed, 8 insertions(+), 3 deletions(-)
+
+commit eb142a6689c140d8f598453bceae4f0ac390272a (tag: vte_0_3_13)
+Author: Nalin Dahyabhai 
+Date:   2002-05-14 00:42:35 +0000
+
+    Add "ALL" as a debug flag, aliased to everything. Print debug info after
+    
+    * src/debug.c: Add "ALL" as a debug flag, aliased to everything.
+    * src/pty.c: Print debug info after redirecting stdio.
+    * src/trie.c: When debugging, count only decision nodes.
+    * src/vte.c: Fix se, for real this time.  Add a mostly-ignored protected
+            attribute.  Handle am, bw, ul flags properly.  Make cd clear the current
+            line, too.  Make ce fill the current default attributes through the end
+            of the line.  Handle cS.  Fix cv to work when we have a scrollback
+            buffer.  Handle ll, mp.  Line wrap on nd.  Reset tab stops on hard reset
+            only.  Handle soft-reset and full-reset.  Handle uc.  Initialize
+            scrollback line count properly.  Tweak drawing of alternate 'a' to get
+            rid of artifacts.  Reset insert mode, cursor visibility, and scrolling
+            regions when resetting.
+
+ ChangeLog   |  13 ++
+ README      |   6 +-
+ autogen.sh  |   2 +-
+ src/debug.c |   3 +
+ src/pty.c   |  27 ++--
+ src/trie.c  |   2 +-
+ src/vte.c   | 470 +++++++++++++++++++++++++++++++++++++++++++++---------------
+ src/vte.h   |   3 +-
+ vte.spec    |   5 +-
+ 9 files changed, 393 insertions(+), 138 deletions(-)
+
+commit c4f86f25e8c851fdb7fd433e7114bb8cf21de8f5
+Author: Nalin Dahyabhai 
+Date:   2002-05-10 23:45:21 +0000
+
+    Make delete mode a no-op, fix ic/IC (#81417).
+    
+    * src/vte.c: Make delete mode a no-op, fix ic/IC (#81417).
+
+ ChangeLog |  3 +++
+ src/vte.c | 21 ++++++++++++---------
+ 2 files changed, 15 insertions(+), 9 deletions(-)
+
+commit bed9c035d7c4e226d9087f87b4c01d660fd7e4dc (tag: vte_0_3_12)
+Author: Nalin Dahyabhai 
+Date:   2002-05-10 00:29:42 +0000
+
+    Implement bt, ct, st. Reimplement ta.
+    
+    * src/vte.c: Implement bt, ct, st.  Reimplement ta.
+
+ ChangeLog |   1 +
+ README    |   4 +-
+ src/vte.c | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
+ 3 files changed, 144 insertions(+), 11 deletions(-)
+
+commit 265b32f280c4417ea6c0a1af70bd7859b80f6efb
+Author: Nalin Dahyabhai 
+Date:   2002-05-09 23:54:35 +0000
+
+    Fixes to usage of iconv, from otaylor. Remap characters which are missing
+    
+    * src/vte.c: Fixes to usage of iconv, from otaylor.  Remap characters which are
+            missing in the current font to others in the current font, if possible,
+            from otaylor.  Change default emulation to "xterm", cleaning up
+            confusion over what standout really means.  Reorganize some internals.
+            Complain when an application sends us a key-press sequence, as if we
+            knew what to do with one of those.
+    * src/vte.c, src/vte.h: Implement vte_terminal_reset().
+    * src/debug.c, src/debug.h: Added to centralize some debugging settings.
+    * everywhere: Punt the question of whether or not to print debug spew to
+            run-time, suggested by otaylor.
+    * termcaps/xterm: Added.
+
+ ChangeLog            |    8 +
+ README               |    4 +-
+ src/Makefile.am      |   12 +
+ src/debug.c          |   59 ++
+ src/debug.h          |   35 ++
+ src/pty.c            |    5 +-
+ src/ring.c           |   36 +-
+ src/trie.c           |   26 +-
+ src/vte.c            | 1625 +++++++++++++++++++++++++++++++++-----------------
+ src/vte.h            |    1 +
+ src/vteaccess.c      |   45 +-
+ src/vteapp.c         |    6 +-
+ termcaps/Makefile.am |    4 +-
+ termcaps/xterm       |   28 +
+ vte.spec             |    6 +-
+ 15 files changed, 1301 insertions(+), 599 deletions(-)
+
+commit 0f6befd404efad9584311f0bea326034170b83c8 (tag: vte_0_3_11)
+Author: Nalin Dahyabhai 
+Date:   2002-05-08 22:20:57 +0000
+
+    Warning fixes and cleanups.
+    
+    * src/vte.c: Warning fixes and cleanups.
+
+ src/vte.c | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+commit fce004c8c6ed9b6e6dd6f2803bf4d86edb397562
+Author: Nalin Dahyabhai 
+Date:   2002-05-08 22:12:10 +0000
+
+    Implement mouse button events and motion-event and any-event tracking.
+    
+    * src/vte.c: Implement mouse button events and motion-event and any-event
+            tracking.  Implement the rest of the special graphics characters.
+            Rename signals to be more consistent.  Add thin wrappers for emitting
+            signals, and use them everywhere.  Support pangox even when XFT isn't
+            available.  Try to provide bold text again.  Add signals for most of
+            the window manipulation control sequences.  Hide the mouse cursor when
+            we get keyboard events.  Use a different mouse cursor if the child is
+            mouse-aware.  Handle eA() by treating it as as().
+    * src/caps.c, src/caps.h: Export definitions of VTE_CAP_CSI and friends.
+    * src/ring.c: Remove a check in vte_ring_at() which is already made before
+            the function is called.
+
+ ChangeLog  |   6 +-
+ README     |  16 +-
+ src/ring.c |  15 +-
+ src/vte.c  | 758 ++++++++++++++++++++++++++++++++++++++++++++++++++++---------
+ vte.spec   |   5 +-
+ 5 files changed, 669 insertions(+), 131 deletions(-)
+
+commit 08b8caa553cf20f9fd7e40b1a1bd8c85294f438b (tag: vte_0_3_10)
+Author: Nalin Dahyabhai 
+Date:   2002-05-06 23:14:27 +0000
+
+    Hide the mouse cursor when we get keyboard events. Use a different mouse
+    
+    * src/vte.c: Hide the mouse cursor when we get keyboard events.  Use a
+            different mouse cursor if the child is mouse-aware.  Handle eA() by
+            treating it as as().
+    * src/vte.c, src/vte.h: Allow enabling/disabling of mouse autohide.
+
+ ChangeLog    |   3 +
+ README       |   2 +-
+ src/vte.c    | 234 +++++++++++++++++++++++++++++++++++++++++++++--------------
+ src/vte.h    |   3 +
+ src/vteapp.c |   1 +
+ vte.spec     |   5 +-
+ 6 files changed, 191 insertions(+), 57 deletions(-)
+
+commit 14b0aa82214da4bfc5243be3ab8c097924d69528 (tag: vte_0_3_9)
+Author: Nalin Dahyabhai 
+Date:   2002-05-06 21:53:07 +0000
+
+    Start handling mouse button down / button up events.
+    
+    * src/vte.c: Start handling mouse button down / button up events.
+
+ ChangeLog |   2 +-
+ src/vte.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ vte.spec  |   5 ++-
+ 3 files changed, 105 insertions(+), 7 deletions(-)
+
+commit 9d8fe49fb582d45b30c417e4139581053122d6bf (tag: vte_0_3_8)
+Author: Nalin Dahyabhai 
+Date:   2002-05-06 20:55:15 +0000
+
+    Fix an inadvertent mixing of preprocessor logic with code.
+    
+    * src/vte.c: Fix an inadvertent mixing of preprocessor logic with code.
+
+ src/vte.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 45ce677ee3aaf79d5859b5922ea95cfca25f17f8
+Author: Nalin Dahyabhai 
+Date:   2002-05-06 20:51:06 +0000
+
+    Finish implementing window-manipulation sequences. Rename signals to be
+    
+    * src/vte.c: Finish implementing window-manipulation sequences.  Rename signals
+            to be more consistent.  Add thin wrappers for emitting signals, and use
+            them everywhere.  Support pangox even when XFT isn't available.  Try to
+            provide bold text again.  Add signals for most of the window
+            manipulation control sequences.  Implement device-status-report and
+            dec-device-status-report.  Clamp location values in sequence_handler_cm
+            to the dimensions of the terminal window so that resize(1) will work
+            right.
+    * src/caps.c, src/caps.h: Export definitions of VTE_CAP_CSI and friends.
+
+ ChangeLog  |  12 ++
+ src/caps.c |  31 +--
+ src/caps.h |   7 +
+ src/vte.c  | 704 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ src/vte.h  |  14 +-
+ vte.spec   |   5 +-
+ 6 files changed, 694 insertions(+), 79 deletions(-)
+
+commit 4b3f54222ae0eaafc64e1a9326042c5a012a1c2f (tag: vte_0_3_7)
+Author: Nalin Dahyabhai 
+Date:   2002-05-03 21:21:25 +0000
+
+    Export a vte_termcap_strip() function for preprocessing escape sequences
+    
+    * src/termcap.c: Export a vte_termcap_strip() function for preprocessing
+            escape sequences and whatnot from capability values.
+    * src/typescrypt: Removed.
+    * src/vte.c: Pass the hard-coded xterm-specific capabilities through
+            vte_termcap_strip(), which fixes a few weird bugs.  Discard invalid
+            might-be-control-sequence sequences, like other emulators do.  Don't
+            consider modifier keys, by themselves, to be enough to scroll-on-key.
+            When snapshotting, actually snapshot all of a row instead of just the
+            last character.  Don't run past the end of snapshot contents when
+            reading them.
+    * src/vteaccess.c: Clamp offsets so that they always sort right.
+
+ ChangeLog       | 12 +++++++
+ src/termcap.c   | 14 +++++++--
+ src/termcap.h   |  3 ++
+ src/trie.c      | 15 ++++++---
+ src/typescript  | 76 --------------------------------------------
+ src/vte.c       | 62 ++++++++++++++++++++++++++----------
+ src/vteaccess.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
+ vte.spec        |  6 +++-
+ 8 files changed, 174 insertions(+), 112 deletions(-)
+
+commit cf348c8da67cc21b8f0f1bc04cb112becfaf91c2 (tag: vte_0_3_6)
+Author: Nalin Dahyabhai 
+Date:   2002-05-02 23:31:55 +0000
+
+    0.3.6
+
+ vte.spec | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 823bf5b6426b9805b7e183abfd92630e0f556d7f
+Author: Nalin Dahyabhai 
+Date:   2002-05-02 23:31:19 +0000
+
+    Hook up ts/te, ks/ke sequence handlers. Fix initialization crash bugs.
+    
+    * src/vte.c: Hook up ts/te, ks/ke sequence handlers.
+    * src/vteaccess.c: Fix initialization crash bugs.
+
+ ChangeLog       |  4 ++-
+ src/vte.c       | 52 +++++++++++++++++++++++++++---
+ src/vteaccess.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++++--------
+ 3 files changed, 136 insertions(+), 18 deletions(-)
+
+commit ab1b7b660db6f9ea5b1d142e97749e232e708be5 (tag: vte_0_3_5)
+Author: Nalin Dahyabhai 
+Date:   2002-05-02 20:48:18 +0000
+
+    fix parsing of octal codes which start with "1" instead of "0" munge as
+    
+    * src/termcap.c: fix parsing of octal codes which start with "1" instead of "0"
+    * src/vte.c: munge as many invalid multibyte characters as necessary to get
+            past decoding errors.
+
+ ChangeLog     | 6 +++++-
+ src/termcap.c | 1 +
+ src/trie.c    | 6 ++++++
+ src/vte.c     | 9 +++++----
+ vte.spec      | 5 ++++-
+ 5 files changed, 21 insertions(+), 6 deletions(-)
+
+commit 7df826f2358df847542716ad585d9982ff141cef (tag: vte_0_3_4)
+Author: Nalin Dahyabhai 
+Date:   2002-05-02 19:55:29 +0000
+
+    Fix a crashbug due to mismatch between parent field in the object's
+    
+    * src/vteaccess.h: Fix a crashbug due to mismatch between parent field
+            in the object's structure and its inherited object's type.  More to go.
+    * src/trie.c: Fix a logic bug which caused intermittent escape sequence
+            recognition errors in the trie partial-match code.
+    * src/vte.c: Don't use $SHELL, which might have been set by a libtool wrapper,
+            as a default shell when we get NULL as a command.  Use 80x24 as the
+            default window size -- I'm pretty sure the termcap parsing is correct
+            now, so no need to use 60x18 to detect when it's broken.
+
+ ChangeLog       | 22 +++++++++++++++-------
+ src/trie.c      | 29 ++++++++++++++---------------
+ src/vte.c       | 50 ++++++++++++++++++++++++++------------------------
+ src/vteaccess.c | 10 +++++-----
+ src/vteaccess.h |  4 ++--
+ vte.spec        |  6 +++++-
+ 6 files changed, 67 insertions(+), 54 deletions(-)
+
+commit 386e1b45a5e205f28a29f1c3da82c7fcd6342c91 (tag: vte_0_3_3)
+Author: Nalin Dahyabhai 
+Date:   2002-05-02 08:33:23 +0000
+
+    Rework trie matching to return the address of the character which ended
+    
+    * src/trie.c: Rework trie matching to return the address of the
+            character which ended the match attempt, which should cut down on
+            useless initial-substring checks.  Remove several gdk_window_scroll()
+            calls which apparently aren't buffered.  Convert invalid multibyte
+            characters to '?' instead of just dropping them.  Provide a means of
+            setting the backspace/delete bindings.  Add a poor xlfd_from_pango
+            mapping function which would need serious work to be useful.  Get rid
+            of warnings when we're transparent and the root widnow pixmap isn't as
+            big as the root window because it's tiled.
+
+ ChangeLog       |  10 ++
+ src/interpret.c |   2 +-
+ src/ring.c      |   2 +
+ src/trie.c      | 127 ++++++++++----
+ src/trie.h      |   3 +-
+ src/vte.c       | 504 +++++++++++++++++++++++++++++++++++++++++---------------
+ src/vte.h       |  13 +-
+ src/vteaccess.c |   5 +-
+ src/vteapp.c    |   2 +-
+ vte.spec        |   2 +-
+ 10 files changed, 503 insertions(+), 167 deletions(-)
+
+commit 92d904d5dd39221b2ab942c2cc59056a50b357cc (tag: vte_0_3_2)
+Author: Nalin Dahyabhai 
+Date:   2002-05-01 15:40:13 +0000
+
+    Try @pkgdatadir@/termcap/$TERM when reading termcap files. This fixes the
+    
+    * src/vte.c: Try @pkgdatadir@/termcap/$TERM when reading termcap files.  This fixes the app on systems with no /etc/termcap, and also speeds up loads and reduces memory consumption for xterm-color at the expense of making on-the-fly emulation changes impossible.  Don't xor reverse with itself when drawing characters (this broke when snapshotting was added).
+    * termcaps/Makefile.am, termcaps/xterm-color: include a default termcap         for xterm-color.
+    * src/termcap.c src/termcap.h: make _find_boolean return a gboolean instead of an int.
+
+ ChangeLog            | 11 +++++++++++
+ Makefile.am          |  2 +-
+ configure.in         | 10 +++++++++-
+ src/termcap.c        | 15 ++++++++++++---
+ src/termcap.h        |  4 ++--
+ src/vte.c            | 18 +++++++++++++++---
+ termcaps/Makefile.am |  3 +++
+ termcaps/xterm-color | 27 +++++++++++++++++++++++++++
+ vte.spec             |  6 +++++-
+ 9 files changed, 85 insertions(+), 11 deletions(-)
+
+commit 4461f119849629f1ecca1003e78113d8cc3aa8fc (tag: vte_0_3_1)
+Author: Nalin Dahyabhai 
+Date:   2002-04-30 23:15:58 +0000
+
+    Disconnect from toplevel configure events at finalize-time.
+    
+    * src/vte.c: Disconnect from toplevel configure events at finalize-time.
+
+ ChangeLog |  4 ++++
+ src/vte.c | 11 ++++++++++-
+ vte.spec  |  5 ++++-
+ 3 files changed, 18 insertions(+), 2 deletions(-)
+
+commit cdf1940aa5107ae317b8f3696e6bb0808f8c422f (tag: vte_0_3)
+Author: Nalin Dahyabhai 
+Date:   2002-04-30 22:06:35 +0000
+
+    Track and free idle task tags properly. Change F11 and F12 capabilities
+    
+    * src/vte.c: Track and free idle task tags properly.  Change F11 and F12
+            capabilities from 'k;' and 'F1' to 'F1' and 'F2'.  Send a NUL on
+            control space. (#80350)  Allow setting and checking of word characters,
+            and change select-by-word behavior to use the word character list.  Emit
+            "contents_changed" signals whenever the visible contents change, and
+            "cursor_moved" when the cursor moves.  Add snapshotting method.  Scroll
+            when auto-margin handling moves the cursor to the next line.  Assume
+            that the locale charset is actually ISO-8859-1 when we're in a UTF-8
+            locale, so we don't toggle from UTF-8 to UTF-8.  Treat GDK_KP_Page_Up
+            as a GDK_Page_Up, ditto for GDK_KP_Page_Down and GDK_KP_Tab and
+            GDK_KP_Space.  Add vte_terminal_get_font().  Don't bother messing with
+            ring buffers if we're resizing them to their current sizes.
+    * src/pty.c, src/vte.c: Return a pid from vte_terminal_fork_command().
+    * src/vteaccess.c, src/vteaccess.h: Add VteTerminalAccessible object type.  It
+            might even work, mostly.
+
+ ChangeLog       |  18 +-
+ README          |   2 +-
+ configure.in    |   1 +
+ src/Makefile.am |   6 +-
+ src/pty.c       |   1 +
+ src/vte.c       | 545 +++++++++++++++++++++++++++++++++++----------
+ src/vte.h       |  47 +++-
+ src/vteaccess.c | 675 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/vteaccess.h |  63 ++++++
+ vte.spec        |   9 +-
+ 10 files changed, 1241 insertions(+), 126 deletions(-)
+
+commit 2c418085fcfbb5fbefcdc840b5b5ba516d4af849
+Author: Nalin Dahyabhai 
+Date:   2002-04-29 18:55:55 +0000
+
+    Track and free idle task tags properly.
+    
+    * src/vte.c: Track and free idle task tags properly.
+
+ ChangeLog |  3 +++
+ src/vte.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++----------
+ 2 files changed, 73 insertions(+), 13 deletions(-)
+
+commit 93bd9f1619ada35b3f7248adf432adb5b3003808
+Author: Nalin Dahyabhai 
+Date:   2002-04-29 18:23:06 +0000
+
+    Handle me() by resetting all attributes (including colors, which we
+    
+    * src/vte.c: Handle me() by resetting all attributes (including
+    colors, which we weren't resetting before).
+
+ ChangeLog | 6 +++++-
+ src/vte.c | 8 +-------
+ 2 files changed, 6 insertions(+), 8 deletions(-)
+
+commit d1f7309ea90e51362ae3627788ab6e66f675df31 (tag: vte_0_2_2)
+Author: Nalin Dahyabhai 
+Date:   2002-04-29 15:02:15 +0000
+
+    Handle kb by treating it as a backspace. Make pangox rendering the
+    
+    * src/vte.c: Handle kb by treating it as a backspace.  Make pangox
+      rendering the default.  Handle control-key sequences better, unless
+      the input method is hiding the modifiers from us.  Set the default
+      TERM variable to "xterm-color".
+    * src/vte.c src/vte.h: Get rid of vte_terminal_set_core_font().
+
+ ChangeLog    |  7 +++++++
+ Makefile.am  | 10 ++++++---
+ src/vte.c    | 66 ++++++++++++++++++++++++++++++++++--------------------------
+ src/vte.h    |  1 -
+ src/vteapp.c |  2 +-
+ vte.spec     |  5 ++++-
+ 6 files changed, 57 insertions(+), 34 deletions(-)
+
+commit 3031a899eaa0372f62ac8952f24b1217c846c520 (tag: vte_0_2_1, tag: vte_0_2)
+Author: Nalin Dahyabhai 
+Date:   2002-04-26 23:15:43 +0000
+
+    0.2.1
+
+ vte.spec | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit fe80bf4b546886f7a7931a8abea3d722b6d54c2b
+Author: Nalin Dahyabhai 
+Date:   2002-04-26 23:15:17 +0000
+
+    Punt all changes to background images and transparency to an idle task.
+    
+    * src/vte.c: Punt all changes to background images and transparency
+            to an idle task.  Only insert newlines into the copy buffer when the
+            last column in a given line doesn't have a character in it.
+
+ ChangeLog |  4 ++++
+ src/vte.c | 62 ++++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 38 insertions(+), 28 deletions(-)
+
+commit 1be8627c33c2a83f2aadd432c9565598c00c25fb
+Author: Bill Nottingham 
+Date:   2002-04-26 21:35:45 +0000
+
+    use execlp/execvp
+
+ ChangeLog |  3 +++
+ src/pty.c | 10 +++-------
+ 2 files changed, 6 insertions(+), 7 deletions(-)
+
+commit d05e9f47035f0472ee8e4aabf1d9cb255c86e94e
+Author: Nalin Dahyabhai 
+Date:   2002-04-26 19:08:10 +0000
+
+    *** empty log message ***
+
+ ChangeLog | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 03af8398a4c4f77d730d3fae304e87e5da04ad99
+Author: Nalin Dahyabhai 
+Date:   2002-04-26 19:07:54 +0000
+
+    set a default scrollback line limit of 100. preserve the visible part of
+    
+    * src/vteapp.c: set a default scrollback line limit of 100.
+    * src/vte.c: preserve the visible part of the screen across scrollback size changes.
+
+ src/Makefile.am |  2 +-
+ src/vte.c       | 99 +++++++++++++++++++++++++--------------------------------
+ src/vteapp.c    |  1 +
+ 3 files changed, 45 insertions(+), 57 deletions(-)
+
+commit b1fd47d1a02451e17eca5408be6dee65f34d6055
+Author: Nalin Dahyabhai 
+Date:   2002-04-26 16:22:13 +0000
+
+    include config.h. fix adjustment calculations, which i didn't get quite
+    
+    * src/ring.c: include config.h.
+    * src/vte.c: fix adjustment calculations, which i didn't get quite right.
+
+ ChangeLog  | 2 +-
+ src/ring.c | 2 +-
+ src/vte.c  | 3 +--
+ 3 files changed, 3 insertions(+), 4 deletions(-)
+
+commit 488314375b9bfa1133f1e87aef5e77c0abeff01c
+Author: Nalin Dahyabhai 
+Date:   2002-04-26 16:09:29 +0000
+
+    add a ring buffer for storing scrollback data. use a ring buffer instead
+    
+    * src/Makefile.am, src/ring.c, ring.h: add a ring buffer for storing scrollback data.
+    * src/vte.c: use a ring buffer instead of a GArray to hold scrollback rows.
+
+ ChangeLog       |   5 +
+ src/Makefile.am |  10 +-
+ src/ring.c      | 292 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/ring.h      |  41 ++++++++
+ src/vte.c       | 183 ++++++++++++++++++++---------------
+ 5 files changed, 451 insertions(+), 80 deletions(-)
+
+commit 738726cf0382a15b9ae171d1c8c52d25ae2390fb
+Author: Nalin Dahyabhai 
+Date:   2002-04-26 04:49:30 +0000
+
+    Run autogen before tagging so that the tag is always correct.
+    Update docs.
+    Add pangox to the list of GTK+ 2.0 modules we link with.
+    Add vte_terminal_set_scrollback_lines(), add some code to use pangox for rendering before trying core rendering, which should make font selection actually work.
+
+ ChangeLog    |  10 ++
+ Makefile.am  |  12 +--
+ README       |   9 +-
+ configure.in |   2 +-
+ src/vte.c    | 296 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ src/vte.h    |   2 +
+ src/vteapp.c |   4 +
+ vte.spec     |   6 +-
+ 8 files changed, 303 insertions(+), 38 deletions(-)
+
+commit 32db0e81389b0f4df635c08c37139ade996f5d66 (tag: vte_0_1)
+Author: Nalin Dahyabhai 
+Date:   2002-04-25 18:15:01 +0000
+
+    Add the changelog.
+
+ ChangeLog | 518 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ vte.spec  |   6 +-
+ 2 files changed, 523 insertions(+), 1 deletion(-)
+
+commit ee090d8d4753c9333ffb7571d1710fdca3033e41
+Author: Anders Carlsson 
+Date:   2002-04-25 17:22:25 +0000
+
+    Add scroll wheel support.
+
+ src/vte.c | 27 +++++++++++++++++++++++++++
+ 1 file changed, 27 insertions(+)
+
+commit 8d09ff93ed3b537e9d027fee64b26cf3a99c6538
+Author: Nalin Dahyabhai 
+Date:   2002-04-25 16:23:46 +0000
+
+    Uncomment the tag target.
+
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ff95c57897cfdac2193b1434231593ae8d862ac0
+Author: Nalin Dahyabhai 
+Date:   2002-04-25 16:22:36 +0000
+
+    Add some targets for building tarballs in a hopefully-reproducible way.
+
+ HACKING      |  5 ++---
+ Makefile.am  | 21 +++++++++++++++++++++
+ configure.in |  2 +-
+ 3 files changed, 24 insertions(+), 4 deletions(-)
+
+commit cc4f7a860c0f4ee8deeabee24a14a81125d8556a
+Author: Nalin Dahyabhai 
+Date:   2002-04-25 16:12:01 +0000
+
+    Let GDK_USE_XFT turn on Xft as well as VTE_USE_XFT.
+    
+    * src/vte.c: Let GDK_USE_XFT turn on Xft as well as VTE_USE_XFT.
+
+ src/vte.c | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+commit 4f60fdbf12f68d9f7857b915fbbc518b9b661965
+Author: Nalin Dahyabhai 
+Date:   2002-04-25 05:45:30 +0000
+
+    Handle decoding errors better.
+    
+    * src/vte.c: Handle decoding errors better.
+
+ configure.in |  2 +-
+ src/vte.c    | 78 +++++++++++++++++++++++++++++++++++-------------------------
+ 2 files changed, 47 insertions(+), 33 deletions(-)
+
+commit 42c386e0c053bb8a46b9c156981b7619f56a98ec
+Author: Nalin Dahyabhai 
+Date:   2002-04-25 04:49:26 +0000
+
+    Include pkgconfig files in the package.
+    
+    * vte.spec: Include pkgconfig files in the package.
+
+ vte.spec | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit c994ded78505c50389800a97a3dbe3009b4ff4c9
+Author: Nalin Dahyabhai 
+Date:   2002-04-25 04:43:36 +0000
+
+    src/vte.c: Make multiple calls to set_background_transparent() and set_background_image() do the right thing.
+
+ src/vte.c | 193 ++++++++++++++++++++++++++++++++++++++++++--------------------
+ 1 file changed, 132 insertions(+), 61 deletions(-)
+
+commit f0efffbacfc8b5f8609656fbeff41d108b680f7e
+Author: Nalin Dahyabhai 
+Date:   2002-04-25 04:05:53 +0000
+
+    Reverse the sanity check in vte_terminal_set_background_image_file() so
+    
+    * src/vte.c: Reverse the sanity check in vte_terminal_set_background_image_file() so that it rejects zero-length strings, not the other way around.
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f4e3bb67144b3c2c7a5987a6a091a3140ef55c85
+Author: Nalin Dahyabhai 
+Date:   2002-04-25 03:54:03 +0000
+
+    Demote some debug messages to being trie-specific debug messages. Declare
+    
+    * src/trie.c: Demote some debug messages to being trie-specific debug messages.
+    * src/vte.h: Declare vte_terminal_set_core_font() for non-Xft use.
+    * src/vte.c: Adjust idle priorities to make the terminal be more responsive; fix a double-free that corrupted the heap on core font loads; rework some pixbuf handling; revert a patch for profterm crackiness that's gone now.
+
+ src/trie.c |  2 +-
+ src/vte.c  | 68 +++++++++++++++++++++++++++++++++-----------------------------
+ src/vte.h  |  5 +++--
+ 3 files changed, 40 insertions(+), 35 deletions(-)
+
+commit b8f6f28089d5e98516b041de3aeebf34982bcb1a
+Author: Nalin Dahyabhai 
+Date:   2002-04-25 00:49:15 +0000
+
+    update to-do list. remove --disable-shared. remove a memory leak. fix a
+    
+    * README: update to-do list.
+    * autogen.sh: remove --disable-shared.
+    * src/pty.c: remove a memory leak.
+    * src/termcap.c: fix a possible read-before-start-of-buffer.
+    * src/trie.c: use iconv instead of mbrstowcs, even if it's just ASCII->W_CHAR_T.
+    * src/vte.c: fix a few memory leaks; only reset the IM context when we're realized, which is the only time we actually have an IM context; don't create a copy of a pixbuf if we don't need to desaturate it, just ref it and use it directly.
+
+ README        |   2 +-
+ autogen.sh    |   2 +-
+ src/pty.c     |   1 +
+ src/termcap.c |   2 +-
+ src/trie.c    |  85 +++++++++++++++++++++++----------
+ src/vte.c     | 151 ++++++++++++++++++++++++++++++++++++++++++----------------
+ 6 files changed, 173 insertions(+), 70 deletions(-)
+
+commit 75356484dfead6c210c1fe83e912a85169bd71af
+Author: Nalin Dahyabhai 
+Date:   2002-04-23 23:40:10 +0000
+
+    src/vte.c: Display UTF-8 preedit strings properly, fix copy (no, really this time), and reset IM contexts when pasting text in.
+
+ src/vte.c | 146 ++++++++++++++++++++++++++++++++++++++++----------------------
+ 1 file changed, 94 insertions(+), 52 deletions(-)
+
+commit 1110318894ccf6a8f63b98a45741bd604f7840f5
+Author: Nalin Dahyabhai 
+Date:   2002-04-23 22:01:13 +0000
+
+    src/pty.c: Print debug messages before redirecting stdio.
+    src/vte.c: Fix displaying of highlighted multi-column text.
+            Use the GTK global setting for cursor blinking to control das blinkencursor.
+    src/vte.h: Remove function for setting blinking timeout.
+
+ src/pty.c |  25 ++++---
+ src/vte.c | 232 ++++++++++++++++++++++++++++++++++++++++++--------------------
+ src/vte.h |   1 -
+ 3 files changed, 172 insertions(+), 86 deletions(-)
+
+commit ef618352a20855f8657b66676aac2029f839b898
+Author: Nalin Dahyabhai 
+Date:   2002-04-23 19:54:51 +0000
+
+    src/pty.c: Fix a compile warning.
+
+ src/pty.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6484fcbc85aa95f11cee920e4434b062ff3b7c21
+Author: Nalin Dahyabhai 
+Date:   2002-04-23 19:54:08 +0000
+
+    autogen.sh: Default to include optimization, even for debugging.
+    configure.in: Move AM_CONFIG_HEADER to the top.
+    src/pty.c: Create non-login shells by default (when argv is NULL).
+    src/vte.c: Add mostly-complete input method support.
+    src/vte.h: Add vte_terminal_im_append_menuitems().
+
+ autogen.sh   |   2 +-
+ configure.in |   3 +-
+ src/pty.c    |   6 +-
+ src/vte.c    | 752 ++++++++++++++++++++++++++++++++++++++++++-----------------
+ src/vte.h    |   5 +-
+ 5 files changed, 551 insertions(+), 217 deletions(-)
+
+commit bf831313bd700377003fef57a698fced01ef1241
+Author: Havoc Pennington 
+Date:   2002-04-23 17:04:33 +0000
+
+    add vte_terminal_set_font
+
+ src/vte.c | 251 +++++++++++++++++++++++++++++++++++++++++++++++++++-----------
+ src/vte.h |   3 +
+ 2 files changed, 212 insertions(+), 42 deletions(-)
+
+commit 58c4e09569873a8ffc82f85c29581643487fad82
+Author: Havoc Pennington 
+Date:   2002-04-22 21:00:44 +0000
+
+    when setting background color, use allocated color, and don't overwrite with bg of None
+
+ src/vte.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 6cc8c68d2e521dc1378145257f56a12a3ce30e86
+Author: Havoc Pennington 
+Date:   2002-04-22 20:50:01 +0000
+
+    use gdk_rgb_find_color to allocate X colors
+
+ src/vte.c | 20 +++++++++-----------
+ 1 file changed, 9 insertions(+), 11 deletions(-)
+
+commit 88ee13eaba3955ff8aa25bf2e4b5a8d52c80c2bb
+Author: Nalin Dahyabhai 
+Date:   2002-04-22 20:35:47 +0000
+
+    Add vte_terminal_feed_child() to send UTF-8 strings to the child process, and
+    actually apply Havoc's fix right this time.
+
+ src/vte.c    | 17 ++++++++++++++---
+ src/vte.h    |  3 +++
+ src/vteapp.c |  1 +
+ 3 files changed, 18 insertions(+), 3 deletions(-)
+
+commit 8421ed85f076ed9e1b72adce56c75e22d1a04ba9
+Author: Nalin Dahyabhai 
+Date:   2002-04-22 13:56:00 +0000
+
+    src/vte.c: Prevent double-free of incoming buffer (patch from Havoc).
+
+ src/vte.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 6acf490a78630612a06a51c2cf828a4a08935296
+Author: Nalin Dahyabhai 
+Date:   2002-04-16 05:43:26 +0000
+
+    Fix typo. Make blinking cursors stay on while the user is typing,
+    
+    * README: Fix typo.
+    * src/vte.c: Make blinking cursors stay on while the user is typing, desaturate images using integer math.
+
+ README    |  2 +-
+ src/vte.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++------------
+ 2 files changed, 67 insertions(+), 16 deletions(-)
+
+commit dbcb45e80b601817dfdf31f26687c8570a811594
+Author: Nalin Dahyabhai 
+Date:   2002-04-05 05:58:37 +0000
+
+    Add less useless descriptions. Fix an uninitialized variable and missing
+    
+    * vte.spec: Add less useless descriptions.
+    * src/vte.c: Fix an uninitialized variable and missing declaration error.
+
+ src/vte.c | 3 ++-
+ vte.spec  | 8 +++++---
+ 2 files changed, 7 insertions(+), 4 deletions(-)
+
+commit aa147f19aada24e6b0f49e9ab86116f24af7e7bc
+Author: Nalin Dahyabhai 
+Date:   2002-03-25 02:52:02 +0000
+
+    Ensure that there's a data row whenever we scroll forward, fixing
+    
+            * src/vte.c: Ensure that there's a data row whenever we scroll forward, fixing strangeness when I suspend and resume vim.
+
+ src/vte.c | 40 +++++++++++++++++++++++++++++++++-------
+ 1 file changed, 33 insertions(+), 7 deletions(-)
+
+commit 2cae3586debcdc823932236cd8119b4441178304
+Author: Nalin Dahyabhai 
+Date:   2002-03-25 00:08:36 +0000
+
+    copy to clipboard synchronously, which fixes a number of problems
+    
+            * src/vte.c: copy to clipboard synchronously, which fixes a number of problems
+                    implement background transparency
+            * src/vteapp.c: no changes(?)
+
+ src/vte.c | 407 +++++++++++++++++++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 323 insertions(+), 84 deletions(-)
+
+commit 754c595a6cace97331f4ae5e94e4d5b3c3113f29
+Author: Nalin Dahyabhai 
+Date:   2002-03-18 01:59:22 +0000
+
+    Rework backgrounds to take advantage of gdk's automatic drawing. Try to
+    
+            * vte.c: Rework backgrounds to take advantage of gdk's automatic drawing.
+            * vteapp.c: Try to enable transparency if no background image is present.
+
+ src/vte.c    | 182 +++++++++++++++++++++++++++++------------------------------
+ src/vte.h    |   3 +-
+ src/vteapp.c |  12 +++-
+ 3 files changed, 100 insertions(+), 97 deletions(-)
+
+commit c395df9bf8463fd367af146c3ab317b1c3ca9b96
+Author: Nalin Dahyabhai 
+Date:   2002-03-18 01:58:34 +0000
+
+    Adjust warnings used when in maintainer mode.
+    
+            * autogen.sh configure.in: Adjust warnings used when in maintainer mode.
+
+ autogen.sh   | 4 +---
+ configure.in | 9 +++++++++
+ 2 files changed, 10 insertions(+), 3 deletions(-)
+
+commit ddf32b9455806ea339040d4aae4d556eae05236f
+Author: Nalin Dahyabhai 
+Date:   2002-03-17 06:15:45 +0000
+
+    Draw the cursor as an unfilled box when the widget does not have focus.
+    
+            * src/vte.c: Draw the cursor as an unfilled box when the widget does not have focus.
+
+ src/vte.c | 46 +++++++++++++++++++++++++++++++---------------
+ 1 file changed, 31 insertions(+), 15 deletions(-)
+
+commit 8b429a79a9eefcacc0f3edd07fe44d94e5242851
+Author: Nalin Dahyabhai 
+Date:   2002-03-17 06:04:02 +0000
+
+    Fix handling of scroll-on-output to always scroll when we're at the bottom
+    
+            * src/vte.c: Fix handling of scroll-on-output to always scroll when we're at the bottom of the buffer.
+            * src/vteapp.c: Disable scroll-on-output by default.
+
+ src/vte.c    | 11 +++++++----
+ src/vteapp.c |  2 +-
+ 2 files changed, 8 insertions(+), 5 deletions(-)
+
+commit 0d351fd6824f1b081a6dc559573ced5e0d20c5f2
+Author: Nalin Dahyabhai 
+Date:   2002-03-17 05:46:00 +0000
+
+    Rework tiling of background images, and implement a blinking cursor. Set
+    
+            * src/vte.c src/vte.h: Rework tiling of background images, and implement a blinking cursor.
+            * src/vteapp.c: Set blinking cursor by default.
+
+ src/vte.c    | 220 +++++++++++++++++++++++++++++------------------------------
+ src/vte.h    |   4 +-
+ src/vteapp.c |   1 +
+ 3 files changed, 112 insertions(+), 113 deletions(-)
+
+commit 2e09448fcfa06e92e8b7c272c8fde4fe277a58aa
+Author: Nalin Dahyabhai 
+Date:   2002-03-14 07:58:34 +0000
+
+    Corrections to some xterm control sequences.
+    
+            * caps.c: Corrections to some xterm control sequences.
+
+ src/caps.c | 21 +++++++++++++++++++--
+ 1 file changed, 19 insertions(+), 2 deletions(-)
+
+commit 68b3c69e860cf423352f9cb14f53f0450ba8185e
+Author: Nalin Dahyabhai 
+Date:   2002-03-14 07:32:12 +0000
+
+    Define PACKAGE correctly. Move most of the tear-down code into the widget
+    
+    * configure.in: Define PACKAGE correctly.
+    * src/vte.c src/vteapp.c: Move most of the tear-down code into the widget finalize method; handle EOF and widget destruction correctly to prevent segfaults.
+
+ configure.in |  2 +-
+ src/vte.c    | 95 +++++++++++++++++++++++++++++++++++-------------------------
+ src/vteapp.c | 13 ++++++++-
+ 3 files changed, 69 insertions(+), 41 deletions(-)
+
+commit b28d242a31672b3717b615ed178d8703280e2f75
+Author: Nalin Dahyabhai 
+Date:   2002-03-14 05:48:43 +0000
+
+    Define PACKAGE.
+    
+    * configure.in: Define PACKAGE.
+
+ configure.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 447b6cc57780fb500dbcda9bf87401a58fe9ca09
+Author: Nalin Dahyabhai 
+Date:   2002-03-14 05:18:44 +0000
+
+    Disable gdk-pixbuf's deprecated functions. Discard non-ascii bytes to
+    
+            * configure.in: Disable gdk-pixbuf's deprecated functions.
+            * vte.c: Discard non-ascii bytes to clear logjams that happen when we pass invalid terminal data to iconv().
+
+ configure.in |  1 +
+ src/vte.c    | 31 +++++++++++++++++++++++++++++--
+ 2 files changed, 30 insertions(+), 2 deletions(-)
+
+commit aeee76e236204a2ba95aca6b026048f77fd61d21
+Author: Nalin Dahyabhai 
+Date:   2002-03-14 04:07:14 +0000
+
+    fix missing includes implement background color setting, provide a
+    
+            * iso8859mode.c utf8mode.c: fix missing includes
+            * vte.c vte.h: implement background color setting, provide a function for setting the defaults, tile background images properly
+
+ src/iso8859mode.c |   1 +
+ src/utf8mode.c    |   1 +
+ src/vte.c         | 213 +++++++++++++++++++++++++++++++++++++++++-------------
+ src/vte.h         |   7 ++
+ 4 files changed, 172 insertions(+), 50 deletions(-)
+
+commit 0b4037f448c393088c32b6e4e76aedf6319e035d
+Author: Nalin Dahyabhai 
+Date:   2002-03-14 02:12:38 +0000
+
+    Remove gdk-pixbuf-xlib dependency by using just gdk-pixbuf. Perform
+    
+    * configure.in vte.pc.in vte.c: Remove gdk-pixbuf-xlib dependency by using just gdk-pixbuf.
+    * vte.c: Perform background image desaturation locally.
+
+ configure.in |  2 +-
+ src/vte.c    | 97 ++++++++++++++++++++++++++++++------------------------------
+ vte.pc.in    |  2 +-
+ 3 files changed, 50 insertions(+), 51 deletions(-)
+
+commit 2259b22d1aa442d5e8f6f4865de4634d1d317363
+Author: Nalin Dahyabhai 
+Date:   2002-03-13 19:37:30 +0000
+
+    Don't add the widget's allocation offsets when generating expose events.
+    
+    * vte.c: Don't add the widget's allocation offsets when generating expose events.
+
+ src/vte.c | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+commit c8bf38ef87850d05fa7f0292128fbfc0e8d5d8f0
+Author: Nalin Dahyabhai 
+Date:   2002-03-13 19:22:58 +0000
+
+    *vteapp.c: Don't try to use transparency for now.
+
+ src/vteapp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b752f2657c36eac80bcf5e07b28d7bd0f75e3951
+Author: Anders Carlsson 
+Date:   2002-03-13 18:29:20 +0000
+
+    Add more functions that profterm can use.
+
+ src/vte.c | 24 ++++++++++++++++++++++++
+ src/vte.h |  2 ++
+ 2 files changed, 26 insertions(+)
+
+commit 80d58364fb8f3021d006d1569416fb23ad91e8dd
+Author: Anders Carlsson 
+Date:   2002-03-13 17:51:53 +0000
+
+    Silent cvs and add gdk-pixbuf-xlib to depends in the .pc.in file
+
+ .cvsignore | 12 ++++++++++++
+ vte.pc.in  |  2 +-
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+commit 0810dc20a20fba7efca5f5a454b16970d0a21518
+Author: Anders Carlsson 
+Date:   2002-03-13 17:37:48 +0000
+
+    Sliff sloff
+
+ src/.cvsignore | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit e7ffae48af31fa9bcff3aebcf1d4dba0c3ed2ae3
+Author: Anders Carlsson 
+Date:   2002-03-13 17:37:20 +0000
+
+    sssh
+
+ src/.cvsignore | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 2ed604fd59343a95542bbee9854aa40aded48552
+Author: Nalin Dahyabhai 
+Date:   2002-03-13 17:19:56 +0000
+
+    Add gdk-pixbuf-xlib-2.0 as a module requirement.
+    
+    * configure.in: Add gdk-pixbuf-xlib-2.0 as a module requirement.
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5b68ef885663950b30e0732154da3154a9bf27f8
+Author: Nalin Dahyabhai 
+Date:   2002-03-13 06:21:56 +0000
+
+    Add set_size, set_audible_bell, set_scroll_on_output,
+    
+    * vte.c: Add set_size, set_audible_bell, set_scroll_on_output,
+             set_scroll_on_keystroke, copy_clipboard, paste_clipboard,
+             set_background_image, set_background_image_file, and
+             set_background_saturation.  Also added a broken
+             set_background_transparent.
+    * vte.h: Add prototypes for those new functions.
+
+ src/vte.c    | 446 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
+ src/vte.h    |  14 +-
+ src/vteapp.c |   8 ++
+ 3 files changed, 386 insertions(+), 82 deletions(-)
+
+commit b16f2340ca3072b8a172cdd2cdbf4cf0694c3925
+Author: Nalin Dahyabhai 
+Date:   2002-03-13 03:35:47 +0000
+
+    fix the name of a declared function (was _set_size, is _size_set)
+    
+    * vte.c: fix the name of a declared function (was _set_size, is _size_set)
+
+ src/vte.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6733e2ed80ef9f104af4da5fd5e45260ce067803
+Author: Nalin Dahyabhai 
+Date:   2002-03-13 03:11:07 +0000
+
+    Get rid of a global copy of the parent class. Implement ec, ic, and IC
+    
+    * vte.c: Get rid of a global copy of the parent class.
+    * vte.c: Implement ec, ic, and IC handlers.
+
+ src/vte.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 99 insertions(+), 13 deletions(-)
+
+commit 6ef5042c4cf08a28ddefbaf430ff2fedd4e6435a
+Author: Nalin Dahyabhai 
+Date:   2002-03-13 03:10:01 +0000
+
+    Fix a typo in a comment (we don't "omit" signals).
+    
+    * vte.h: Fix a typo in a comment (we don't "omit" signals).
+
+ src/vte.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit c7b1550d69b13d95700f12d054664abe476bd568
+Author: Nalin Dahyabhai 
+Date:   2002-03-12 20:48:30 +0000
+
+    caps.c: Recognize xterm cursor-character-absolute sequence.
+    vte.c: Handle cursor-character-absolute.
+    vte.c: Change the default font to "mono" 14 point when using Xft.
+
+ src/caps.c |  2 ++
+ src/vte.c  | 16 ++++++++++++++--
+ 2 files changed, 16 insertions(+), 2 deletions(-)
+
+commit d3994081b99ef854365a08665dd5bfd8541a02a7
+Author: Nalin Dahyabhai 
+Date:   2002-03-12 20:22:57 +0000
+
+    Handle the ve (cursor visible) control sequence.
+    
+    * vte.c: Handle the ve (cursor visible) control sequence.
+
+ src/vte.c | 16 ++++++++++++++--
+ 1 file changed, 14 insertions(+), 2 deletions(-)
+
+commit 81af00a67fa68b3d8103a864537be5cfaa89dc13
+Author: Nalin Dahyabhai 
+Date:   2002-03-12 20:19:09 +0000
+
+    vte.c: Handle dec private mode set (cursor visibility).
+
+ src/vte.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 5f5600122d32114887a78a842164b836f59a706a
+Author: Nalin Dahyabhai 
+Date:   2002-03-12 20:13:23 +0000
+
+    fix signed/unsigned problems (fixes from alexl) fix signed/unsigned
+    
+    * vte.c: fix signed/unsigned problems (fixes from alexl)
+    * vte.h: fix signed/unsigned problems (fixes from alexl)
+    * vteapp.h: fix signed/unsigned problems (fixes from alexl)
+
+ src/vte.c | 24 ++++++++++++------------
+ src/vte.h |  8 ++++----
+ 2 files changed, 16 insertions(+), 16 deletions(-)
+
+commit 04839fb9aa22138d6aa2e13859bf6e4a5454bf82
+Author: Nalin Dahyabhai 
+Date:   2002-03-12 01:29:09 +0000
+
+    Make scroll-on-output scroll on control sequences, too.
+    
+    * src/vte.c: Make scroll-on-output scroll on control sequences, too.
+
+ src/vte.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 250cc8e6ea15f9cb6dfbcbd88888ae0086682e69
+Author: Nalin Dahyabhai 
+Date:   2002-03-12 01:19:40 +0000
+
+    utf8mode.c: Add simple programs for moving a terminal in and out of UTF-8 mode.
+    iso8859mode.c: Add simple programs for moving a terminal in and out of UTF-8 mode.
+    vte.c: Be more verbose about iconv() errors.
+    vte.c: Implement dc and DC handlers.
+    vte.c: Handle auto-wrapping (the "am" flag).
+    vte.c: Remove scrolling cheats from the al handler, which made the window jump.
+
+ src/Makefile.am   |   2 +-
+ src/iso8859mode.c |  28 +++++++++++
+ src/utf8mode.c    |  28 +++++++++++
+ src/vte.c         | 138 ++++++++++++++++++++++++++++++++++++++++++++++++------
+ 4 files changed, 180 insertions(+), 16 deletions(-)
+
+commit 2b86603f0b80d70ff6e56cf953d2a9c357e9e636
+Author: Anders Carlsson 
+Date:   2002-03-11 07:39:01 +0000
+
+    Add a finalize handler and free our title strings there.
+
+ src/vte.c | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+commit 7e61493272a33f3002236845f37d5c0d1e189138
+Author: Nalin Dahyabhai 
+Date:   2002-03-11 07:05:47 +0000
+
+    Emit "window_title_changed" and "icon_title_changed" when the titles change,
+    and store the new values in a public field so that a handler can retrieve the
+    values (patch from Anders Carlsson).
+
+ Makefile.am  |  5 ++++-
+ configure.in |  2 +-
+ src/vte.c    | 46 +++++++++++++++++++++++++---------------------
+ src/vte.h    |  7 +++++--
+ src/vteapp.c | 16 +++++++++-------
+ 5 files changed, 44 insertions(+), 32 deletions(-)
+
+commit 2ce24ceee46f1cd0a76049ba93401fd81a175af1
+Author: Nalin Dahyabhai 
+Date:   2002-03-11 06:54:51 +0000
+
+    Add vte.pc, from Anders Carlsson.
+
+ vte.pc.in | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+commit af1e14f4df40467c9e58404df6eb5599099927ae
+Author: Nalin Dahyabhai 
+Date:   2002-03-11 06:47:00 +0000
+
+    Fix a duplicate-idle-handler bug.
+
+ src/vte.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit e5635e58ef60f02e85d3beaf02e728abc7442f78
+Author: Nalin Dahyabhai 
+Date:   2002-03-11 06:32:38 +0000
+
+    Fix selection (except maybe the end-of-line stuff).
+
+ README    |   2 -
+ src/vte.c | 253 +++++++++++++++++++++++++++++++++++++++++++++++++-------------
+ 2 files changed, 202 insertions(+), 53 deletions(-)
+
+commit fbde287badd3796f5f74fbee40da373028ae8aaf
+Author: Nalin Dahyabhai 
+Date:   2002-03-11 04:44:31 +0000
+
+    Whoops, I broke selection.  Fix that.
+    Implement selection by lines.
+
+ src/vte.c | 99 +++++++++++++++++++++++++++++++++++++--------------------------
+ 1 file changed, 58 insertions(+), 41 deletions(-)
+
+commit 4b4d66d149c9b09a675fdcaa66ce75b29a5f0131
+Author: Nalin Dahyabhai 
+Date:   2002-03-11 04:08:40 +0000
+
+    Move character rendering into a common function so that the cursor is always
+    drawn the same as other characters (fixes previous glitches when using Xft and
+    when the cursor was over an alternate charset character).
+
+ src/vte.c | 814 +++++++++++++++++++++++++++++++-------------------------------
+ 1 file changed, 404 insertions(+), 410 deletions(-)
+
+commit 2c16599aa7d02b05831c09611617b86deafbf8c3
+Author: Nalin Dahyabhai 
+Date:   2002-03-10 08:31:21 +0000
+
+    Differentiate between single, double, and triple-click for selection (still
+    need to do something with that info).
+
+ src/vte.c | 38 ++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 38 insertions(+)
+
+commit 77f6cd58035ae91fb5bcb7b70b94c4594cb48ca3
+Author: Nalin Dahyabhai 
+Date:   2002-03-10 08:16:27 +0000
+
+    remove this file
+
+ stamp-h.in | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 712c4627c927b77b9395c3edee321602bcf3da63
+Author: Nalin Dahyabhai 
+Date:   2002-03-10 08:15:22 +0000
+
+    Don't check for pango because we never call pango directly.
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 2536962bd099729a6066581548d6144b9a28cfbb
+Author: Nalin Dahyabhai 
+Date:   2002-03-10 08:13:06 +0000
+
+    Deselect properly when something else is inserted into the clipboard.
+
+ src/vte.c | 181 ++++++++++++++++++++++++++++++++++++++++----------------------
+ 1 file changed, 118 insertions(+), 63 deletions(-)
+
+commit 2c5ff4b02a7ae83f21e8654d1f0ad4463a18cb55
+Author: Nalin Dahyabhai 
+Date:   2002-03-10 07:26:22 +0000
+
+    Fix wide-character handling (now handles mid-stream encoding changes correctly).
+    Updates to the meager docs.
+
+ AUTHORS        |   1 +
+ HACKING        |   5 +-
+ README         |  16 +-
+ src/utf8echo.c |   4 +-
+ src/vte.c      | 635 +++++++++++++++++++++++++++++++++++----------------------
+ 5 files changed, 409 insertions(+), 252 deletions(-)
+
+commit df735564cf119c3d27d4d3bcb5d92ce57d9853d9
+Author: Nalin Dahyabhai 
+Date:   2002-03-09 07:41:56 +0000
+
+    Add a .spec file (make dist; rpm -ts vte*.tar.gz; rpm --rebuild) to make
+    building a package easier.
+
+ Makefile.am     |  1 +
+ src/Makefile.am |  1 +
+ vte.spec        | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 51 insertions(+)
+
+commit 53c5da226b4959b8bd14fde37ebfd1de66c5fc81
+Author: Nalin Dahyabhai 
+Date:   2002-03-09 07:24:45 +0000
+
+    skip over space columns when selecting
+
+ src/vte.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 57b54bb8340aae966384db4e6e82295b7c0dfdec
+Author: Nalin Dahyabhai 
+Date:   2002-03-09 07:20:49 +0000
+
+    Use a login shell by default.
+
+ src/pty.c    | 10 ++++++++--
+ src/vteapp.c |  1 +
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+commit 7501f2526afcd6452523050809726d6fd010b50b
+Author: Nalin Dahyabhai 
+Date:   2002-03-09 07:10:50 +0000
+
+    Rework input queueing to allow for feeding without a pty.
+    Use gdk_window_scroll() in _al and _up handlers, and in the _do handler,
+    because it's usually faster.
+
+ src/vte.c    | 645 ++++++++++++++++++++++++++++++++++++-----------------------
+ src/vte.h    |  46 ++---
+ src/vteapp.c |   9 +
+ 3 files changed, 414 insertions(+), 286 deletions(-)
+
+commit c7a90a418e5f9917d47fbc5f51066a412ced388b
+Author: Nalin Dahyabhai 
+Date:   2002-03-08 07:52:56 +0000
+
+    Implement copy and almost-correct selection highlighting.
+
+ src/vte.c | 292 +++++++++++++++++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 243 insertions(+), 49 deletions(-)
+
+commit 2d110c873cb76c558bc1b210a0de630dfc46cf91
+Author: Nalin Dahyabhai 
+Date:   2002-03-08 02:30:31 +0000
+
+    Use a queue for pasting data.
+    Try to get dragging detected right (doesn't work).
+
+ src/vte.c | 314 +++++++++++++++++++++++++++++++++++++++++---------------------
+ 1 file changed, 209 insertions(+), 105 deletions(-)
+
+commit cc0a80eacdec88a5ed6689d98e7714e5abe91b30
+Author: Nalin Dahyabhai 
+Date:   2002-03-06 00:21:56 +0000
+
+    Mark the beginning of a selected area.
+
+ src/vte.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit c49c8873ac418e0cd290fb3566e062fb72089868
+Author: Nalin Dahyabhai 
+Date:   2002-03-06 00:17:32 +0000
+
+    Make pasting asynchronous.
+
+ src/vte.c | 23 ++++++++++++++---------
+ 1 file changed, 14 insertions(+), 9 deletions(-)
+
+commit 459e966538973c1d6f8afba469f35ec3a29de058
+Author: Nalin Dahyabhai 
+Date:   2002-03-06 00:07:30 +0000
+
+    actually free clipboard data when finished with it
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b345ca1e8d0f54ea99ac27ebce6a073df7cbad66
+Author: Nalin Dahyabhai 
+Date:   2002-03-06 00:02:33 +0000
+
+    Implement middle-button paste.
+
+ src/vte.c | 38 +++++++++++++++++++++++++++++++++-----
+ 1 file changed, 33 insertions(+), 5 deletions(-)
+
+commit 10a34b72206d08f31fdc33335e04228ac9ee432c
+Author: Nalin Dahyabhai 
+Date:   2002-03-05 23:55:03 +0000
+
+    Properly convert from utf-8 or wchar_t strings when sending data to the
+    pseudo-terminal.
+
+ src/vte.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 79 insertions(+), 12 deletions(-)
+
+commit 62c68d4f4b406e284449dcbecc380bad32d406f5
+Author: Nalin Dahyabhai 
+Date:   2002-03-05 00:53:46 +0000
+
+    Implement shift/pgup/pgdown scrolling.
+    Make scroll-on-keypress and -on-output easier to toggle.
+
+ src/vte.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 56 insertions(+), 9 deletions(-)
+
+commit 6d48ff66daa142a878c86190a5c8db208fd3b510
+Author: Nalin Dahyabhai 
+Date:   2002-03-05 00:26:31 +0000
+
+    Spec out the rest of the alternate characters I haven't implemented yet.
+    Remove a function that can't be easily written (scroll_rows).
+    Correctly update the insertion delta when scrolling, to fix man(1) again.
+
+ src/vte.c | 51 +++++++++++++++++++++++++++++----------------------
+ 1 file changed, 29 insertions(+), 22 deletions(-)
+
+commit a2f0f68089632451d81b19c7f84dcbef9fdf5686
+Author: Nalin Dahyabhai 
+Date:   2002-03-05 00:16:04 +0000
+
+    Discard redundant cursor-position exposes.
+
+ src/vte.c | 50 ++++++++++----------------------------------------
+ 1 file changed, 10 insertions(+), 40 deletions(-)
+
+commit 41c8e20f65e616d2c01d3facb7be2a9fab637569
+Author: Nalin Dahyabhai 
+Date:   2002-03-04 23:57:21 +0000
+
+    Use ssize_t to measure string offsets in termcap, and don't assume that all
+    capabilities have values.  This fixes some nasty crashes.
+
+ src/termcap.c | 48 ++++++++++++++++++++++++------------------------
+ src/termcap.h |  2 +-
+ src/vte.c     |  2 +-
+ 3 files changed, 26 insertions(+), 26 deletions(-)
+
+commit 78f1d3381bf14b7bd2ecbd9269e20b00f5ec69d0
+Author: Nalin Dahyabhai 
+Date:   2002-03-04 16:53:05 +0000
+
+    add a missing bounds-check in the erase-in-row function
+
+ src/vte.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 41bcc218b89103794be0cedbe9403ffa58e2b217
+Author: Nalin Dahyabhai 
+Date:   2002-03-04 06:13:49 +0000
+
+    Send the slave pty's erase character when the user hits backspace.
+
+ README    |  3 ++-
+ src/vte.c | 11 ++++++++---
+ 2 files changed, 10 insertions(+), 4 deletions(-)
+
+commit bb07d83e90995a955a297e7b9c0c2d26ff2ca43c
+Author: Nalin Dahyabhai 
+Date:   2002-03-04 05:59:45 +0000
+
+    Draw cursors to fill the entire cell.
+    Draw the blank alternate character (ooh, tough).
+    Remove a redundant expose.
+
+ src/vte.c | 60 ++++++++++++++++++++++++++----------------------------------
+ 1 file changed, 26 insertions(+), 34 deletions(-)
+
+commit 8d6546f50f7de1d52abd4e7d0a75e73286c1492e
+Author: Nalin Dahyabhai 
+Date:   2002-03-04 04:49:32 +0000
+
+    stop using wcsnlen, which is a GNU extension
+
+ src/trie.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+commit be85096e1b976a45e242e84665ac5f32e9b88a83
+Author: Nalin Dahyabhai 
+Date:   2002-03-04 04:43:48 +0000
+
+    Add support for the line-drawing characters in the special characters and line-
+    drawing character set. (See [http://vt100.net/docs/vt102-ug/table5-13.html].)
+
+ src/caps.h    |   4 +-
+ src/pty.h     |   4 +-
+ src/termcap.h |   4 +-
+ src/trie.h    |   4 +-
+ src/vte.c     | 269 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ src/vte.h     |   5 +-
+ 6 files changed, 274 insertions(+), 16 deletions(-)
+
+commit d28784479bb8600b64f13f902df2aff3eed22a67
+Author: Nalin Dahyabhai 
+Date:   2002-03-04 02:57:53 +0000
+
+    Properly differentiate insertion delta (working screen) from scrolling delta.
+    Add environment setting to the pty code.
+
+ src/pty.c |  42 +++++++++---
+ src/pty.h |   3 +-
+ src/vte.c | 219 ++++++++++++++++++++++++++++++++------------------------------
+ 3 files changed, 147 insertions(+), 117 deletions(-)
+
+commit fa1f908159070fbf22e2d2bdd550328e8fe9767b
+Author: Nalin Dahyabhai 
+Date:   2002-02-28 02:54:56 +0000
+
+    Make the Xft support use long-lived data items.
+    Clean up a lot of other Xft-related code.
+
+ src/trie.c |   6 +-
+ src/vte.c  | 799 ++++++++++++++++++++++++++++++++++---------------------------
+ src/vte.h  |  64 +----
+ 3 files changed, 453 insertions(+), 416 deletions(-)
+
+commit 80e765769cde3af80508de06e3b1819e14b65ad3
+Author: Nalin Dahyabhai 
+Date:   2002-02-27 15:45:02 +0000
+
+    actually hook up the nd handler to the "nd" sequence
+
+ src/vte.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7061e97b13f9e496a189a80f5bd57766ce322bcc
+Author: Nalin Dahyabhai 
+Date:   2002-02-27 05:05:16 +0000
+
+    - Add sub-optimal Xft rendering (set VTE_USE_XFT to "1" to try it); still
+      needs quite a bit of work to be useful.
+    - Implement character-position-absolute and line-position-absolute, which I
+      think are the only sequences which emacs uses and which weren't implemented.
+
+ autogen.sh   |   3 ++
+ configure.in |  14 ++++-
+ src/vte.c    | 166 +++++++++++++++++++++++++++++++++++++++++++++++++++--------
+ src/vte.h    |   5 +-
+ 4 files changed, 164 insertions(+), 24 deletions(-)
+
+commit 180a6eb79a3afdc4ca536ea0cd598352bb010011
+Author: Nalin Dahyabhai 
+Date:   2002-02-25 17:43:15 +0000
+
+    distcheck fixes
+
+ src/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit e60a3d6bd6beec15cd3bc23a6f55faac43f8c1bb
+Author: Nalin Dahyabhai 
+Date:   2002-02-25 17:41:30 +0000
+
+    add that line-drawing does not work to README
+
+ README | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 7739e1b896eb248fe6855e6f8dbf109b95879770
+Author: Nalin Dahyabhai 
+Date:   2002-02-25 17:40:17 +0000
+
+    tree fixups
+
+ configure.in    | 1 +
+ src/Makefile.am | 9 +++++----
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+commit 04158af635b73d321489484276dec578b0afb5ee
+Author: Nalin Dahyabhai 
+Date:   2002-02-25 17:38:27 +0000
+
+    fix autoconf reference file problem
+
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit bc8eb95c2f67e9aa7e4d2b52e5c8040242545177
+Author: Nalin Dahyabhai 
+Date:   2002-02-25 17:38:06 +0000
+
+    remove stuff which should never have been added
+
+ src/Makefile.in | 513 --------------------------------------------------------
+ 1 file changed, 513 deletions(-)
+
+commit 4d9e5b9dd24b4d56f8e463abbfc365c747668be2
+Author: Nalin Dahyabhai 
+Date:   2002-02-25 17:37:31 +0000
+
+    rename configure.ac to configure.in, remove 2.5isms
+
+ configure.ac => configure.in |   1 -
+ src/Makefile.in              | 636 +++++++++++++++++++------------------------
+ 2 files changed, 286 insertions(+), 351 deletions(-)
+
+commit 5d753e874d0c821df033b4e94e2a39cbb24d2616
+Author: Nalin Dahyabhai 
+Date:   2002-02-25 17:35:22 +0000
+
+    remove stuff that should never have been in there
+
+ Makefile.in                       |  419 --
+ aclocal.m4                        | 4130 -----------------
+ config.h.in                       |   49 -
+ configure                         | 9124 -------------------------------------
+ doc/ctlseqs.ps                    | 8729 -----------------------------------
+ doc/vttest-20011130/BUGS          |   19 -
+ doc/vttest-20011130/CHANGES       |  344 --
+ doc/vttest-20011130/COPYING       |   23 -
+ doc/vttest-20011130/MANIFEST      |   43 -
+ doc/vttest-20011130/README        |   67 -
+ doc/vttest-20011130/aclocal.m4    |   59 -
+ doc/vttest-20011130/charsets.c    |  478 --
+ doc/vttest-20011130/color.c       |  600 ---
+ doc/vttest-20011130/config.cache  |   40 -
+ doc/vttest-20011130/config.h      |   53 -
+ doc/vttest-20011130/config.hin    |   52 -
+ doc/vttest-20011130/config.log    |  105 -
+ doc/vttest-20011130/config.status |  279 --
+ doc/vttest-20011130/configure     | 1625 -------
+ doc/vttest-20011130/configure.in  |   48 -
+ doc/vttest-20011130/descrip.mms   |   94 -
+ doc/vttest-20011130/esc.c         |  968 ----
+ doc/vttest-20011130/esc.h         |  190 -
+ doc/vttest-20011130/install.sh    |  238 -
+ doc/vttest-20011130/keyboard.c    | 1080 -----
+ doc/vttest-20011130/main.c        | 1382 ------
+ doc/vttest-20011130/makefile      |  171 -
+ doc/vttest-20011130/makefile.in   |  172 -
+ doc/vttest-20011130/mkdirs.sh     |   32 -
+ doc/vttest-20011130/mouse.c       |  441 --
+ doc/vttest-20011130/nonvt100.c    |  437 --
+ doc/vttest-20011130/patchlev.h    |    3 -
+ doc/vttest-20011130/printer.c     |  198 -
+ doc/vttest-20011130/reports.c     |  510 ---
+ doc/vttest-20011130/reset.c       |   84 -
+ doc/vttest-20011130/setup.c       |  298 --
+ doc/vttest-20011130/sixel.c       |  303 --
+ doc/vttest-20011130/status.c      |  102 -
+ doc/vttest-20011130/tech.set      |   96 -
+ doc/vttest-20011130/ttymodes.c    |  300 --
+ doc/vttest-20011130/ttymodes.h    |   21 -
+ doc/vttest-20011130/unix_io.c     |  196 -
+ doc/vttest-20011130/vms_io.c      |  405 --
+ doc/vttest-20011130/vmsbuild.com  |  163 -
+ doc/vttest-20011130/vt220.c       |  463 --
+ doc/vttest-20011130/vt420.c       | 1615 -------
+ doc/vttest-20011130/vt52.c        |  235 -
+ doc/vttest-20011130/vttest        |  Bin 426799 -> 0 bytes
+ doc/vttest-20011130/vttest.1      |   47 -
+ doc/vttest-20011130/vttest.h      |  270 --
+ doc/vttest-20011130/vttest.lsm    |   15 -
+ doc/vttest-20011130/xterm.c       |  401 --
+ 52 files changed, 37216 deletions(-)
+
+commit c8bad5955bbe3d0a69165e5bf050678dd70d03ae (tag: start)
+Author: Nalin Dahyabhai 
+Date:   2002-02-25 17:30:22 +0000
+
+    imported from private cvs
+
+commit 38fb480261b192dd73a8edcd22599d0d2fe57f67
+Author: Nalin Dahyabhai 
+Date:   2002-02-25 17:30:22 +0000
+
+    Initial revision
+
+ AUTHORS                           |    0
+ COPYING                           |  482 ++
+ ChangeLog                         |    0
+ HACKING                           |    4 +
+ Makefile.am                       |    1 +
+ Makefile.in                       |  419 ++
+ NEWS                              |    0
+ README                            |   40 +
+ aclocal.m4                        | 4130 +++++++++++++++++
+ autogen.sh                        |   11 +
+ config.h.in                       |   49 +
+ configure                         | 9124 +++++++++++++++++++++++++++++++++++++
+ configure.ac                      |   32 +
+ doc/ctlseqs.ms                    | 1647 +++++++
+ doc/ctlseqs.ps                    | 8729 +++++++++++++++++++++++++++++++++++
+ doc/readme.txt                    |    4 +
+ doc/vttest-20011130/BUGS          |   19 +
+ doc/vttest-20011130/CHANGES       |  344 ++
+ doc/vttest-20011130/COPYING       |   23 +
+ doc/vttest-20011130/MANIFEST      |   43 +
+ doc/vttest-20011130/README        |   67 +
+ doc/vttest-20011130/aclocal.m4    |   59 +
+ doc/vttest-20011130/charsets.c    |  478 ++
+ doc/vttest-20011130/color.c       |  600 +++
+ doc/vttest-20011130/config.cache  |   40 +
+ doc/vttest-20011130/config.h      |   53 +
+ doc/vttest-20011130/config.hin    |   52 +
+ doc/vttest-20011130/config.log    |  105 +
+ doc/vttest-20011130/config.status |  279 ++
+ doc/vttest-20011130/configure     | 1625 +++++++
+ doc/vttest-20011130/configure.in  |   48 +
+ doc/vttest-20011130/descrip.mms   |   94 +
+ doc/vttest-20011130/esc.c         |  968 ++++
+ doc/vttest-20011130/esc.h         |  190 +
+ doc/vttest-20011130/install.sh    |  238 +
+ doc/vttest-20011130/keyboard.c    | 1080 +++++
+ doc/vttest-20011130/main.c        | 1382 ++++++
+ doc/vttest-20011130/makefile      |  171 +
+ doc/vttest-20011130/makefile.in   |  172 +
+ doc/vttest-20011130/mkdirs.sh     |   32 +
+ doc/vttest-20011130/mouse.c       |  441 ++
+ doc/vttest-20011130/nonvt100.c    |  437 ++
+ doc/vttest-20011130/patchlev.h    |    3 +
+ doc/vttest-20011130/printer.c     |  198 +
+ doc/vttest-20011130/reports.c     |  510 +++
+ doc/vttest-20011130/reset.c       |   84 +
+ doc/vttest-20011130/setup.c       |  298 ++
+ doc/vttest-20011130/sixel.c       |  303 ++
+ doc/vttest-20011130/status.c      |  102 +
+ doc/vttest-20011130/tech.set      |   96 +
+ doc/vttest-20011130/ttymodes.c    |  300 ++
+ doc/vttest-20011130/ttymodes.h    |   21 +
+ doc/vttest-20011130/unix_io.c     |  196 +
+ doc/vttest-20011130/vms_io.c      |  405 ++
+ doc/vttest-20011130/vmsbuild.com  |  163 +
+ doc/vttest-20011130/vt220.c       |  463 ++
+ doc/vttest-20011130/vt420.c       | 1615 +++++++
+ doc/vttest-20011130/vt52.c        |  235 +
+ doc/vttest-20011130/vttest        |  Bin 0 -> 426799 bytes
+ doc/vttest-20011130/vttest.1      |   47 +
+ doc/vttest-20011130/vttest.h      |  270 ++
+ doc/vttest-20011130/vttest.lsm    |   15 +
+ doc/vttest-20011130/xterm.c       |  401 ++
+ doc/vttest.tar.gz                 |  Bin 0 -> 96645 bytes
+ src/Makefile.am                   |   62 +
+ src/Makefile.in                   |  577 +++
+ src/caps.c                        |  551 +++
+ src/caps.h                        |   50 +
+ src/interpret.c                   |  148 +
+ src/marshal.list                  |    4 +
+ src/pty.c                         |  209 +
+ src/pty.h                         |   35 +
+ src/termcap.c                     |  641 +++
+ src/termcap.h                     |   56 +
+ src/trie.c                        |  868 ++++
+ src/trie.h                        |   61 +
+ src/typescript                    |   76 +
+ src/utf8echo.c                    |   65 +
+ src/vte.c                         | 3494 ++++++++++++++
+ src/vte.h                         |  169 +
+ src/vteapp.c                      |  104 +
+ stamp-h.in                        |    1 +
+ 82 files changed, 46608 insertions(+)
diff --git a/ChangeLog.pre-git b/ChangeLog.pre-git
deleted file mode 100644
index f768be1..0000000
--- a/ChangeLog.pre-git
+++ /dev/null
@@ -1,12065 +0,0 @@
-2009-03-31  Adam Jackson  
-
-	* src/vteapp.c:
-	Add gopher:// to the dingus-click regexes.
-
-2009-03-26  Behdad Esfahbod  
-
-	* src/vte.c (always_selected):
-	* src/vtepangocairo.c (_vte_pangocairo_set_background_image):
-	* src/vteskel.c (_vte_skel_draw_text):
-	Minor fixes from Richard Russon.
-
-2009-03-26  Behdad Esfahbod  
-
-	Bug 576797 – Double-click sometimes stops working
-
-	* src/vte.c (vte_terminal_extend_selection): Invalidate selection
-	if forced.
-
-2009-03-26  Behdad Esfahbod  
-
-	Bug 573674 – reset resets width to 80 chars
-
-	* src/vteseq.c (vte_sequence_handler_decset_internal): Disable
-	resizing on decreset.
-
-2009-03-23  Behdad Esfahbod  
-
-	Bug 576504 – vte does not pass its testsuite.
-
-	* src/vte.c:
-	* src/vtedraw.h:
-	Fix "make check".
-
-2009-03-15  Christian Persch  
-
-	Bug 574491 – gnome-pty-helper can prevent volumes from being unmounted
-
-	* gnome-pty-helper/gnome-pty-helper.c: (main): chdir to /.
-
-2009-03-15  Christian Persch  
-
-	* configure.in: Prepare version 0.20.0.
-
-2009-03-15  Christian Persch  
-
-	Bug 575398 – configure warns about term.h under OpenSolaris
-
-	* configure.in: Fix curses detection on solaris. Patch by David	Adam.
-
-2009-03-09  Behdad Esfahbod  
-
-	Bug 574616 – "real" transparency not working from python bindings
-
-	* src/vtepangocairo.c (_vte_pangocairo_destroy),
-	(_vte_pangocairo_set_background_image): Better handle failure of
-	creating pixmap.
-
-	* src/vtebg.c (vte_bg_get_pixmap): Get rid of unused mask parameter.
-
-2009-03-07  Behdad Esfahbod  
-
-	Bug 574025 – Crash in _vte_terminal_insert_char
-
-	* src/vte.c (_vte_terminal_insert_char): Don't crash.
-
-2009-03-02  Christian Persch  
-
-	* NEWS:
-	* configure.in: Updated for version 0.19.5.
-
-2009-03-02  Christian Persch  
-
-	* src/vteaccess.c: (vte_terminal_accessible_set_size),
-	(vte_terminal_accessible_ref_accessible_at_point):
-	* src/vteapp.c: (button_pressed): Correct use of padding returned
-        by vte_terminal_get_padding().
-
-2009-03-02  Christian Persch  
-
-	* src/vte.c: (vte_terminal_refresh_size), (vte_terminal_set_size):
-	Use g_strerror() instead of strerror().
-
-2009-02-12  Behdad Esfahbod  
-
-	Bug 54926 – Should try bold version of font before pseudo-bolding
-
-	Patch from Kees Cook 
-
-	* src/vte.c (_vte_invalidate_cell), (_vte_invalidate_cursor_once),
-	(vte_terminal_unichar_is_local_graphic),
-	(vte_terminal_draw_graphic), (vte_terminal_draw_cells),
-	(vte_terminal_draw_rows), (vte_terminal_paint_cursor):
-	* src/vtedraw.c (_vte_draw_get_char_width), (_vte_draw_text),
-	(_vte_draw_char), (_vte_draw_has_char):
-	* src/vtedraw.h:
-	* src/vtepangocairo.c (_vte_pangocairo_set_text_font),
-	(_vte_pangocairo_get_char_width), (_vte_pangocairo_has_bold),
-	(_vte_pangocairo_draw_text), (_vte_pangocairo_draw_has_char):
-	* src/vteskel.c:
-	Try bold font before pseudo-bolding.
-
-2009-02-02  Christian Persch  
-
-	Bug 570208 – vte fails to build outside source tree
-
-	* python/Makefile.am: Build fix.
-
-2009-02-01  Christian Persch  
-
-	* src/marshal.list:
-	* src/vte.c: (vte_terminal_class_init):
-	* src/vtebg.c: (vte_bg_class_init): Remove marshalers that have stock
-	ones in gobject, and use the stock ones instead.
-
-2009-02-01  Behdad Esfahbod  
-
-	* configure.in: Require GTK+ >= 2.14, for "gtk-fontconfig-timestamp"
-	settings property.
-
-	* src/vte.c (vte_terminal_style_set),
-	(vte_terminal_set_font_full_internal), (vte_terminal_init),
-	(vte_terminal_class_init):  Use style_set class method instead of
-	hooking to style-set signal.  Also, proceed to recreating the font
-	even if neither description nor antialias setting changed.  This is
-	necessary to pick up fontconfig configuration changes as well as font
-	install/uninstallations or GNOME font preferences changes.
-
-	* src/vtepangocairo.c (font_info_destroy),
-	(fontconfig_timestamp_quark),
-	(vte_pango_cairo_set_fontconfig_timestamp),
-	(vte_pango_cairo_get_fontconfig_timestamp), (context_hash),
-	(context_equal), (font_info_create_for_context),
-	(font_info_create_for_screen):
-	Use fontconfig_timestamp in the font object hash, such that we respond
-	to fontconfig configuration changes.
-
-2009-01-22  Saleem Abdulrasool 
-
-	* src/vteseq.c (vte_sequence_handler_window_manipulation):
-		Tweak output for OSC 13, 14, 18, 19, 20, 21.  Bug #548272.
-
-2009-01-20  Christian Persch  
-
-	* src/vte.c: (vte_terminal_realize): Use GDK_BLANK_CURSOR for the
-	invisible cursor on gtk+ >= 2.15.
-
-2009-01-20  Christian Persch  
-
-	* gnome-pty-helper/gnome-pty-helper.c: (init_term_with_defaults),
-	(open_ptys), (close_pty_pair): Use ttyname() as recommended in the
-	glibc manual. Bug #565688.
-
-2009-01-06  Behdad Esfahbod  
-
-	* src/vteseq.c (vte_parse_color),
-	(vte_sequence_handler_change_color),
-	(vte_sequence_handler_request_terminal_parameters),
-	(vte_sequence_handler_send_primary_device_attributes),
-	(vte_sequence_handler_send_secondary_device_attributes),
-	(vte_sequence_handler_device_status_report),
-	(vte_sequence_handler_dec_device_status_report),
-	(vte_sequence_handler_window_manipulation),
-	(vte_sequence_handler_change_cursor_color):
-	Convert some g_strdup_printf() uses to g_snprintf() when
-	the buffer was fixed-size and freed immediately.
-	Also fix g_snprintf usage by not using its return value.
-	*If* the buffer is short, the returned len is not what we
-	are interested in.
-	Finally, pass -1 as len to vte_terminal_feed_child() in
-	most places.  This means a bit more work for the processor,
-	but cleaner code.
-
-2009-01-06  Behdad Esfahbod  
-
-	Bug 566795 – VTE fails to build in trunk
-
-	* src/vteseq.c (vte_sequence_handler_change_cursor_color):
-	Fix build.
-
-2009-01-06  Saleem Abdulrasool 
-
-	* src/vteseq-n.gperf:
-	* src/vteseq.c (vte_ucs4_to_utf8), (vte_parse_color),
-	(vte_terminal_emit_deiconify_window), (vte_sequence_handler_change_color),
-	(vte_sequence_handler_change_cursor_color):
-
-	Bug #524170 - Pull out ucs4_to_utf8 and use in new functions.  Add support
-	for OSC 4 (initc) and OSC 12 (change cursor color).
-
-2009-01-06  Behdad Esfahbod  
-
-	Bug 566730 – vte_terminal_set_color_cursor() calls invalidate_all but
-	it doesn't have to
-
-	* src/vte.c (vte_terminal_set_color_internal): If color is VTE_CUR_BG,
-	invalidate_cursor_once instead of invalidate_all.
-
-2008-12-26  Halton Huo  
-
-	Bug 565679 – alloca is discouraged
-
-	* gnome-pty-helper/gnome-pty-helper.c: use malloc replace alloca.
-
-2008-12-26  Christian Persch  
-
-	* configure.in: Fix the same typo also in the libinfo check.
-
-2008-12-26  Halton Huo  
-
-	Bug 565675 – typo in configure.in cause ncurses checking fail
-
-	* configure.in: Fix typo for ncurses. s/ncuses/ncurses
-
-2008-12-25  Behdad Esfahbod  
-
-	* src/interpret.c (main):
-	* src/slowcat.c (catfile):
-	* src/table.c (_vte_table_addi), (_vte_table_add):
-	* src/trie.c (_vte_trie_matchx):
-	* src/vte.c (_vte_invalidate_cell), (_vte_terminal_insert_char):
-	* src/vteaccess.c (offset_from_xy),
-	(vte_terminal_accessible_finalize),
-	(vte_terminal_accessible_get_text),
-	(vte_terminal_accessible_get_text_somewhere):
-	* src/vteapp.c (main):
-	* src/vtebg.c (vte_bg_cache_item_free), (vte_bg_cache_add):
-	Fix warnings.
-
-2008-12-25  Behdad Esfahbod  
-
-	Bug 565663 – compile failure because use static function in another .h
-	file
-
-	* src/vte.c: Don't mark extern function inline.
-
-2008-12-17  Behdad Esfahbod  
-
-	Bug 149631 – gnome-terminal doesn't combine combining chars in utf8
-
-	* src/vteunistr.c:
-	Limit to 9 combining marks per unistr, and a total of 100,000 unistrs.
-	All to prevent OOM.
-
-2008-12-15  Behdad Esfahbod  
-
-	* NEWS:
-	* configure.in:
-	Released 0.19.4.
-
-2008-12-14  Behdad Esfahbod  
-
-	Bug 564535 – check for gperf on build
-
-	* autogen.sh: Check for gperf.
-
-2008-12-12  Behdad Esfahbod  
-
-	* doc/reference/Makefile.am:
-	* src/vteunistr.c (unistr_comp_hash), (unistr_comp_equal),
-	(_vte_unistr_append_unichar), (_vte_unistr_get_base),
-	(_vte_unistr_append_to_string), (_vte_unistr_strlen):
-	* src/vteunistr.h:
-	Document vteunistr.
-
-2008-12-12  Behdad Esfahbod  
-
-	* src/vteunistr.h: Minor cleanup.
-
-2008-12-12  Behdad Esfahbod  
-
-	* src/iso2022.c (_vte_iso2022_ambiguous_width): Avoid pointers in the
-	const array.
-
-2008-12-12  Behdad Esfahbod  
-
-	Bug 149631 – gnome-terminal doesn't combine combining chars in utf8
-
-	* src/vteunistr.c:
-	* src/vteunistr.h:
-	An extended UTF-32 type that assigns numeric values to UTF-8 sequences
-	on demand.  Can be used to efficiently store a string, instead of one
-	character, at each cell.
-
-	* src/vte-private.h:
-	* src/vte.c:
-	* src/vtedraw.c:
-	* src/vtedraw.h:
-	* src/vtepangocairo.c:
-	Port to vteunistr instead of gunichar for cell content.
-	
-	* src/vte.c:
-	Handle zerowidth insertions by sticking it on the previous cell.
-
-	* src/iso2022.h:
-	* src/iso2022.c:
-	Cleanup ambiguous-width handling.  Handle zero-width chars.
-
-2008-12-11  Christian Persch  
-
-	Bug 564057 – src/pty.c does not compile with
-	--disable-gnome-pty-helper
-	
-	* src/pty.c: Build with --disable-gnome-pty-helper. Patch by
-	yselkowitz at users.sourceforge.net .
-
-2008-12-11  Christian Persch  
-
-	* src/vte.c: (vte_terminal_class_init): Update set-scroll-adjustement
-	docs.
-
-2008-12-10  Paolo Borelli  
-
-	Bug 562695 - ship pkg-config file for python bindings
-
-	* configure.in:
-	* python/Makefile.am:
-	* python/pyvte.pc.in:
-
-2008-12-08  Behdad Esfahbod  
-
-	Bug 563752 – pangocairo backend recreates cairo_surface_t for
-	background drawing
-
-	* src/vte.c (vte_terminal_paint),
-	(vte_terminal_set_scroll_background),
-	(vte_terminal_background_update):
-	* src/vtedraw.c (_vte_draw_new), (_vte_draw_set_background_solid),
-	(_vte_draw_set_background_image),
-	(_vte_draw_set_background_scroll), (_vte_draw_draw_rectangle):
-	* src/vtedraw.h:
-	* src/vtepangocairo.c (_vte_pangocairo_destroy),
-	(_vte_pangocairo_set_background_solid),
-	(_vte_pangocairo_set_background_image),
-	(_vte_pangocairo_set_background_scroll), (_vte_pangocairo_clear),
-	(_vte_pangocairo_clip), (set_source_color_alpha):
-	* src/vteskel.c:
-	Cleanup vte_draw background API.  Use a cached cairo_pattern_t in
-	pangocairo backend.
-
-	Also, queue background update on scroll_background change.
-
-2008-12-07  Behdad Esfahbod  
-
-	Bug 163213 – Cursor should remain visible when selected
-
-	* src/vte.c (vte_terminal_paint_cursor): Do a reverse hollow cursor
-	if selected but not focused.
-
-2008-12-05  Christian Persch  
-
-	* src/vtebg.c: (vte_bg_get_pixmap): Don't modify source_pixbuf. If
-	we're going to change the saturation, first make a copy. Fixes
-	switching background type between fauxtransparency and image in
-	gnome-terminal trunk.
-
-2008-12-05  Behdad Esfahbod  
-
-	* src/vtepangocairo.c (_vte_pangocairo_clear): Fix scrolling offset.
-	Ray Strode reported that background offset was being done incorrectly.
-	A negation did it.
-
-2008-12-05  Behdad Esfahbod  
-
-	* Makefile.am:
-	* configure.in:
-	Hook up perf/.
-
-	Also adjust svn:ignore props.
-
-2008-12-05  Behdad Esfahbod  
-
-	* NEWS:
-	* configure.in:
-	Released 0.19.3.
-
-2008-12-05  Behdad Esfahbod  
-
-	* src/vte.c (_vte_new_row_data), (_vte_new_row_data_sized),
-	(vte_terminal_match_contents_refresh),
-	(vte_terminal_process_incoming), (vte_terminal_init),
-	(vte_terminal_set_word_chars):
-	Always call g_array_new() with clear flag set.  It incurs no overhead
-	but avoids heisenbugs.
-
-2008-12-05  Behdad Esfahbod  
-
-	* src/vte.c (_vte_terminal_insert_char):
-	* src/vteseq.c (vte_sequence_handler_screen_alignment_test):
-	Use structure assignment instead of memcpy().
-
-2008-12-05  Behdad Esfahbod  
-
-	* src/vte.c (_vte_terminal_cleanup_tab_fragments_at_cursor): Remove
-	unneeded checks.  They were masking bugs.
-
-2008-12-05  Behdad Esfahbod  
-
-	Red Hat Bug 474618 -  gnome-terminal sometime leaves empty begining
-	of the line
-
-	* src/vte.c (_vte_terminal_insert_char): Really fix the bug this time.
-
-2008-12-05  Behdad Esfahbod  
-
-	* src/Makefile.am:
-	Build fixes.
-
-	* NEWS:
-	* configure.in:
-	Released 0.19.2.
-
-2008-12-05  Behdad Esfahbod  
-
-	Red Hat Bug 474618 -  gnome-terminal sometime leaves empty begining
-	of the line
-
-	* src/vte.c (_vte_terminal_cleanup_tab_fragments_at_cursor): continue
-	instead of break'ing out of the loop.
-
-2008-12-04  Behdad Esfahbod  
-
-	Bug 563274 – Misspelled word in src code
-
-	* src/vte.c (vte_terminal_process_incoming): Fix typo.
-
-2008-12-02  Behdad Esfahbod  
-
-	Bug 563024 – In alternate-screen, selection can copy out of screen
-	boundaries
-
-	* src/vte.c (vte_terminal_extend_selection_expand),
-	(vte_terminal_extend_selection): Make sure current selection row is in the
-	visible screen.
-
-	I have a deja vu of fixing this bug like two years ago...
-
-2008-12-02  Christian Persch  
-
-	Bug 552096 – Detect tgetent if provided by libtinfo
-
-	* configure.in: Rewrote tgetent checks to be more readable. Also check
-	for tgetent in libtinfo.
-	* src/keymap.c: (_vte_keymap_map), (_vte_keymap_key_is_modifier):
-	* src/ssfe.c: Adjust includes accordingly.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_start_selection),
-	(vte_terminal_extend_selection): Don't do fancy rounding for row
-	selection, only for column.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_invalidate_selection),
-	(vte_terminal_start_selection): Call function instead of open coding.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vtedraw.h:
-	* src/vtepangocairo.c (font_info_cache_ascii):
-	Cache the full ASCII range if Latin uses the default language.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vtepangocairo.c (context_hash), (context_equal),
-	(font_info_create_for_context), (font_info_create_for_screen),
-	(font_info_create_for_widget): Respect PangoLanguage set on a widget's
-	PangoContext.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vtepangocairo.c (font_info_measure_font): Remove CJK fullwidth
-	measurement hacks.  Pango doesn't need these.  We're down to one
-	FcFontSort() instead of two during initialization.
-
-2008-12-02  Behdad Esfahbod  
-
-	Bug 559818 – redundant selection-changed signal on deselection
-
-	* src/vte.c (vte_terminal_start_selection),
-	(vte_terminal_extend_selection): Fix all redundant selection-changed
-	signals.  Including those on double-click.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vte-private.h:
-	* src/vte.c:
-	Rewrite text selection.  In particular, fix block_mode.
-
-2008-12-02  Behdad Esfahbod  
-
-	* HACKING: Update.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vte-private.h:
-	* src/vte.c (_vte_terminal_set_pointer_visible),
-	(vte_terminal_get_mouse_tracking_info),
-	(vte_terminal_send_mouse_button_internal),
-	(vte_terminal_maybe_send_mouse_button),
-	(vte_terminal_maybe_send_mouse_drag), (vte_terminal_motion_notify),
-	(vte_terminal_button_press), (vte_terminal_button_release),
-	(vte_terminal_scroll), (vte_terminal_reset):
-	* src/vteseq.c (vte_sequence_handler_decset_internal):
-	Mouse tracking cleanup.
-
-2008-12-02  Behdad Esfahbod  
-
-	* configure.in: Add -Wno-switch-enum warning flag as we are not
-	-Wswitch-enum clean.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_extend_selection_on_type),
-	(vte_terminal_extend_selection):
-	Cut one third of the 400-line function out into a function of its own.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_extend_selection): Revert previous change.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_extend_selection):  Add a shortcircuit
-	check.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_send_mouse_button_internal),
-	(vte_terminal_maybe_send_mouse_drag), (cursor_inside_match),
-	(vte_terminal_match_hilite_show),
-	(vte_terminal_match_hilite_update), (vte_terminal_match_hilite),
-	(vte_terminal_extend_selection), (vte_terminal_autoscroll),
-	(vte_terminal_motion_notify), (vte_terminal_button_press),
-	(vte_terminal_button_release):
-	Change mouse coordinates type from double to long.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_start_selection),
-	(vte_terminal_extend_selection):
-	Cleanup selection code a bit more.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_start_selection),
-	(vte_terminal_extend_selection):
-	Merge selection_origin and selection_restart_origin as only one was
-	being used at a time.
-
-2008-12-02  Behdad Esfahbod  
-
-	Bug 471480 – select single character
-	Bug 110371 – Cannot select newline at end of full line
-
-	* src/vte-private.h:
-	* src/vte.c (find_start_column), (find_end_column),
-	(vte_terminal_start_selection), (math_div),
-	(vte_terminal_extend_selection):
-	Make selection work more I-beam-like.
-
-2008-12-02  Christian Persch  
-
-	* src/vte.c: (vte_terminal_class_init): Show the correct version in
-	Since: and Deprecated: annotations.
-
-2008-12-02  Christian Persch  
-
-	Bug 112172 – Get rid of VteReaper
-
-	* src/reaper.h: Deprecate.
-
-2008-12-02  Christian Persch  
-
-	* configure.in: Enable maintainer mode by default. Define more
-	deprecation defines, and define the *_DISABLE_SINGLE_INCLUDES defines.
-	Enable deprecations by default in maintainer mode.
-	* src/vteapp.c: Undef VTE_DISABLE_DEPRECATED here.
-
-2008-12-02  Christian Persch  
-
-	* configure.in:
-	* src/vte-private.h: Move VTE_UTF8_BPC definition from configure to
-	vte-private.h.
-	* src/vteconv.c: Include vte-private.h here.
-
-2008-12-02  Christian Persch  
-
-	* src/vte-private.h:
-	* src/vte.c: (mark_input_source_invalid),
-	(_vte_terminal_connect_pty_read), (mark_output_source_invalid),
-	(_vte_terminal_connect_pty_write),
-	(_vte_terminal_disconnect_pty_read),
-	(_vte_terminal_disconnect_pty_write),
-	(_vte_terminal_enable_input_source), (remove_cursor_timeout),
-	(vte_terminal_key_press), (vte_terminal_focus_in),
-	(vte_terminal_focus_out), (vte_terminal_init),
-	(vte_terminal_unrealize), (vte_terminal_expose),
-	(vte_terminal_background_update), (add_update_timeout),
-	(remove_from_active_list), (vte_terminal_add_process_timeout),
-	(process_timeout), (update_repeat_timeout), (update_timeout): Remove
-	VTE_INVALID_SOURCE definition and just use 0 directly.
-
-2008-12-02  Christian Persch  
-
-	Bug 560667 – invalid definition of VTE_INVALID_SOURCE
-
-	* src/vte-private.h: Fix VTE_INVALID_SOURCE define to use 0 instead of
-	-1.
-
-2008-12-02  Christian Persch  
-
-	* configure.in: Remove two AC_DEFINEs from here.
-	* src/vte-private.h: Define VTE_INVALID_SOURCE here for now.
-
-2008-12-02  Christian Persch  
-
-	Bug 112172 – Get rid of VteReaper
-
-	* src/reaper.c: (vte_reaper_child_watch_cb),
-	(vte_reaper_add_child), (vte_reaper_init),
-	(vte_reaper_constructor), (vte_reaper_finalize),
-	(vte_reaper_class_init), (vte_reaper_get), (child_exited), (main):
-	* src/reaper.h: Prepare for removal of Reaper in vte1.0 by removing
-	the unused pre-glib-2.4 code from Reaper.
-
-2008-12-02  Christian Persch  
-
-	* src/vteapp.c: (main): Catch the child-exited signal to the child's
-	exit code.
-
-2008-12-02  Christian Persch  
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_class_init): Intern the signal names.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_motion_notify): Do not discard motion notify
-	events with coordinates out of our allocation, or when the cell under
-	the cursor didn't change.  These are useful for extending selection
-	and for sub-cell selection details, as well as app-requested all
-	motion tracking.
-
-2008-12-02  Behdad Esfahbod  
-
-	Bug 541441 – Dehighlight links on visibility notify?
-
-	* src/vte.c (vte_terminal_focus_in), (vte_terminal_enter):  Move match
-	highlight enabling into "enter" event instead of "focus in".
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vte-private.h:
-	* src/vte.c (_vte_terminal_set_pointer_visible),
-	(vte_terminal_maybe_send_mouse_button),
-	(vte_terminal_maybe_send_mouse_drag), (vte_terminal_motion_notify),
-	(vte_terminal_button_press), (vte_terminal_button_release),
-	(vte_terminal_scroll), (vte_terminal_reset):
-	* src/vteseq.c (vte_sequence_handler_decset_internal):
-	Simplify mouse event tracking by using a single int instead of five
-	booleans.
-
-2008-12-02  Behdad Esfahbod  
-
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_deselect_all),
-	(vte_terminal_process_incoming), (vte_cell_is_selected),
-	(vte_terminal_copy), (vte_terminal_start_selection),
-	(vte_terminal_extend_selection), (vte_terminal_select_all),
-	(vte_terminal_paint), (_vte_terminal_get_start_selection),
-	(_vte_terminal_get_end_selection), (_vte_terminal_select_text):
-	Rename struct selection_cell_coords members from x,y to col,row for
-	clarity.
-
-2008-12-01  Behdad Esfahbod  
-
-	* NEWS:
-	* configure.in:
-	Released 0.19.1.
-
-2008-12-01  Behdad Esfahbod  
-
-	* doc/reference/Makefile.am:
-	* doc/reference/check-doc-syntax.sh:
-	* src/Makefile.am:
-	* src/check-doc-syntax.sh:
-	* src/vte.c (vte_terminal_catch_child_exited),
-	(vte_terminal_class_init):
-	* src/vte.h:
-	* src/vtepangocairo.c:
-	Copy check-doc-syntax.sh tests from cairo and fix doc bugs.
-
-2008-12-01  Behdad Esfahbod  
-
-	* doc/reference/tmpl/vte-unused.sgml:
-	* doc/reference/vte-sections.txt:
-	Remove reaper docs.
-
-2008-12-01  Behdad Esfahbod  
-
-	Bug 562806 – crash in Terminal: Typing "cd " just after ...
-
-	* src/vte.c (_vte_terminal_cleanup_tab_fragments_at_cursor):
-	Fix possible NULL dereference.
-
-	* src/vteseq.c (vte_sequence_handler_ta):
-	Fix tab fragments to have \t as c.
-
-2008-12-01  Christian Persch  
-
-	* NEWS:
-	* configure.in: Prepare 0.19.0.
-
-2008-12-01  Christian Persch  
-
-	Bug 562511 – scrollbar doesn't sit at the bottom
-
-	* src/vte.c: (vte_terminal_init),
-	(vte_terminal_set_scrollback_lines): Always update the scrollback
-	lines, even if the setting hasn't changed. Work-around to fix bug
-	#562511.
-
-2008-12-01  Christian Persch  
-
-	* src/vte.c: (vte_terminal_class_init): Fix visible-bell property.
-
-2008-12-01  Christian Persch  
-
-	* src/vte.c: (vte_terminal_set_font_full_internal),
-	(vte_terminal_class_init): Rename font property to "font-desc" to be
-	more in line with other properties of this type in gtk.
-
-2008-12-01  Christian Persch  
-
-	* src/vteapp.c: (main): Add gobject notification debugging.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteseq.c (vte_terminal_termcap_string_same_as_for),
-	(vte_sequence_handler_se), (vte_sequence_handler_so):
-	Simplify standout handling code.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteseq.c: Rip out VTE_SEQUENCE_HANDLER_PROTO.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteseq.c: Rip out vte_sequence_handler_invoke.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteseq.c: Rip out VTE_SEQUENCE_HANDLER_INVOKE.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteseq.c: Rip out VTE_SEQUENCE_HANDLER_REFERENCE.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteseq.c (_vte_terminal_handle_sequence): Rip out the gcc label
-	vtable code.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteseq.c (display_control_sequence),
-	(_vte_terminal_handle_sequence):
-	Some cleanup of the gcc label vtable code before I rip it out.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteseq.c (vte_sequence_handler_set_title_internal),
-	(vte_sequence_handler_set_mode_internal),
-	(vte_sequence_handler_invoke_internal):
-	Move some code around.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteskel.c: Remove excess initializer.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/buffer.c:
-	* src/caps.c:
-	* src/dumpkeys.c:
-	* src/interpret.c:
-	* src/iso2022.c:
-	* src/keymap.c:
-	* src/matcher.c:
-	* src/mev.c:
-	* src/pty.c:
-	* src/reaper.c:
-	* src/reflect.c:
-	* src/ring.c:
-	* src/slowcat.c:
-	* src/ssfe.c:
-	* src/table.c:
-	* src/trie.c:
-	* src/vteaccess.c:
-	* src/vtebg.c:
-	* src/vteconv.c:
-	* src/vtedraw.c:
-	* src/vteseq.c:
-	* src/vteskel.c:
-	* src/xticker.c:
-	#include  instead of "../config.h".
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteseq.c: Some wild crack to build the vtable using gcc
-	extension for labels as values.  The advantage is that we get down to
-	an empty .data for vteseq.o but .text grows considerably.  And we have
-	to use nested functions, and #define static auto.  It's really ugly.
-	I'm going to remove it in the next commit or the one after.  Just
-	wanted to record it here for posterity.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteseq.c (vte_sequence_handler_invoke),
-	(vte_sequence_handler_offset), (vte_sequence_handler_multiple),
-	(vte_sequence_handler_decset_internal),
-	(VTE_SEQUENCE_HANDLER_PROTO), (_vte_terminal_handle_sequence):
-	Almost there.  Towards a .data-free vtable.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteseq.c: Finish decoupling handle type from function type.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vte-private.h:
-	* src/vteseq.c (vte_sequence_handler_offset),
-	(vte_sequence_handler_multiple),
-	(vte_sequence_handler_decset_internal),
-	(vte_sequence_handler_set_mode_internal),
-	(VTE_SEQUENCE_HANDLER_PROTO), (_vte_terminal_handle_sequence):
-	Make sequence handlers return void instead of gboolean.  The return
-	value was unused.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteseq.c (vte_sequence_handler_offset),
-	(vte_sequence_handler_multiple),
-	(vte_sequence_handler_decset_internal),
-	(VTE_SEQUENCE_HANDLER_PROTO), (_vte_terminal_handle_sequence):
-	Switch to calling other handlers using two macros.
-	Get rid of match and match_quark arguments to sequence handlers.
-	They were unused.
-
-2008-12-01  Behdad Esfahbod  
-
-	* src/vteseq.c (vte_sequence_handler_set_title_internal):
-	Cleanup vte_sequence_handler_set_title_internal.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/vteseq.c (VTE_SEQUENCE_HANDLER_PROTO): Use a macro to define
-	type of sequence handlers.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/Makefile.am:
-	* src/vteseq-2.c:
-	* src/vteseq-n.c:
-	Remove gperf-generated files from SVN, but still distribute them in
-	the tarball.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/vte-private.h:
-	* src/vte.c:
-	* src/vteseq.c (_vte_terminal_scroll_text),
-	(vte_sequence_handler_scroll_down),
-	(vte_sequence_handler_scroll_up):
-	More code shufflling.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/Makefile.am:
-	* src/vteseq-list.h:
-	Remove vteseq-list.h from SVN, but still distribute it in the tarball.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/Makefile.am:
-	* src/vteseq-list.h:
-	Autogenerate vteseq-list.h.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/vteseq-list.h:
-	* src/vteseq.c (_vte_terminal_home_cursor),
-	(_vte_terminal_clear_screen), (_vte_terminal_clear_current_line),
-	(_vte_terminal_clear_above_current),
-	(vte_sequence_handler_decset_internal), (vte_sequence_handler_cl),
-	(vte_sequence_handler_ho), (vte_sequence_handler_erase_in_display),
-	(vte_sequence_handler_erase_in_line):
-	Sync vteseql-list.h with actual handlers used in gperf files.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/vteseq-list.h:
-	* src/vteseq.c (vte_sequence_handler_scroll_down),
-	(vte_sequence_handler_scroll_up):
-	Implement these calling vte_terminal_scroll() directly instead of
-	multiple'ing.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/vte-private.h:
-	* src/vte.c (_vte_terminal_scroll), (_vte_terminal_scroll_region):
-	* src/vteseq.c (vte_sequence_handler_scroll_down_one),
-	(vte_sequence_handler_scroll_up_one):
-	Move vte_terminal_scroll to vte.c
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/vteseq-2.c (vteseq_2_hash), (vteseq_2_lookup):
-	* src/vteseq-2.gperf:
-	* src/vteseq-list.h:
-	* src/vteseq.c:
-	Remove vte_sequence_handler_complain_key.  The idea was to warn about
-	receiving control-sequence handling request for escape sequences that
-	actually belong to a key stroke.  Kinda like a debugging feature.
-	Remove it as the number of sequences being handle that way was
-	greater than the number of sequences handled in the real sense.
-	Saves 2k .data!
-
-	The actual list is still in vteseq-2.gperf, but commented out.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/vteseq.c (_vte_sequence_get_handler),
-	(display_control_sequence):
-	Remove stale comment.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/Makefile.am:
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_process_incoming):
-	* src/vteseq.c (display_control_sequence),
-	(_vte_terminal_handle_sequence):
-	* src/vteseq.h:
-	Move _vte_terminal_handle_sequence() into vteseq.c
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/vte-private.h:
-	* src/vte.c (vte_insert_line_internal), (vte_remove_line_internal),
-	(_vte_terminal_cursor_down), (_vte_terminal_insert_char),
-	(_vte_terminal_audible_beep), (_vte_terminal_visible_beep),
-	(_vte_terminal_beep), (vte_terminal_key_press):
-	* src/vteseq.c (vte_insert_line_internal),
-	(vte_remove_line_internal), (vte_unichar_strlen),
-	(vte_sequence_handler_bl), (vte_sequence_handler_sf),
-	(vte_sequence_handler_SF), (vte_sequence_handler_vb):
-	* src/vteseq.h:
-	Some code reshuffling to remove vte.c calls to vteseq.c functions.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/vteseq-2.gperf:
-	* src/vteseq.c:
-	Minor.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/vteseq.c (vte_terminal_beep): Move helper function out of the
-	way.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/vteseq-2.c (vteseq_2_lookup):
-	* src/vteseq-2.gperf:
-	* src/vteseq-n.c (vteseq_n_lookup):
-	* src/vteseq-n.gperf:
-	* src/vteseq.c:
-	Add a macro around sequence handler citations, for future table
-	tricks.
-
-2008-11-30  Behdad Esfahbod  
-
-	* src/vteseq-n.gperf:
-	* src/vteseq-n.c (vteseq_n_hash), (vteseq_n_lookup):
-	Remove bogus entry that accidentally made it into the gperf list.
-
-2008-11-30  Christian Persch  
-
-	* acinclude.m4: Remove more crufty macros.
-
-2008-11-30  Christian Persch  
-
-	* acinclude.m4: Remove FT2 check macro.
-
-2008-11-30  Christian Persch  
-
-	Bug 540951 – The gnome-pty-helper is spawn when its not needed
-	
-	* src/pty.c: (_vte_pty_open): Don't use the pty helper when we don't
-	need to update any of utmp, wtmp, lastlog. Patch by Alex Cornejo.
-
-2008-11-30  Christian Persch  
-
-	Bug 465036 – gnome-pty-helper locks /var/run/utmp
-
-	* gnome-pty-helper/gnome-utmp.c: (update_utmp): Close the utmp
-	database after updating it. Patch by Kevin W. Rudd.
-
-2008-11-29  Behdad Esfahbod  
-
-	Bug 127870 – terminal garbled and needs 'reset' after cat'ing file
-
-	* src/iso2022.c (_vte_iso2022_state_new): Initialize all four maps
-	(G0, G1, G2, G3) in USASCII mode, like xterm does.
-
-2008-11-29  Christian Persch  
-
-	* python/vtemodule.c: (initvte): Register the constants too!
-
-2008-11-29  Christian Persch  
-
-	* src/debug.c: (_vte_debug_init):
-	* src/debug.h:
-	* src/vte.c: (vte_terminal_size_request),
-	(vte_terminal_size_allocate): Add a specific debug flag for widget
-	size-request/size-allocation.
-
-2008-11-29  Christian Persch  
-
-	* src/vteapp.c: (main): Add options to use a GtkScrolledWindow as the
-	terminal's container, and to set its vertical scrollbar policy, to
-	allow testing VteTerminal in a scrolled window.
-
-2008-11-29  Behdad Esfahbod  
-
-	Bug 317236 – vte resynchrones too late on invalid UTF-8
-
-	* src/vteconv.c (_vte_conv_utf8_utf8): In our UTF-8 to UTF-8 converter
-	differentiate between an incomplete sequence and an ill sequence at
-	the end of the buffer.  Also cleanup some minor inaccuracies (return
-	value).
-
-2008-11-29  Behdad Esfahbod  
-
-	Bug 107031 – device-control-string error
-
-	* src/table.c (_vte_table_addi):
-	* src/vte.c (vte_terminal_handle_sequence):
-	* src/vteseq.c (vte_sequence_handler_decset_internal):
-	Replace some g_warning's with vte debug output.
-
-2008-11-29  Behdad Esfahbod  
-
-	Bug 521420 – vte closes connection to child before all output is read
-	Patch from Thomas Leonard
-
-	* src/reaper.c (vte_reaper_add_child): Install child watch at low
-	priority instead of high.
-
-2008-11-29  Behdad Esfahbod  
-
-	* configure.in: Require glib >= 2.18.0 as earlier glib versions
-	had a totally bogus g_unichar_iswide_cjk().
-
-	* perf/vim.sh: Don't use builting time command.
-
-2008-11-29  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_emit_char_size_changed),
-	(_vte_terminal_emit_status_line_changed), (vte_terminal_init),
-	(vte_terminal_background_update):
-	Remove C++-style comment markers.
-
-2008-11-29  Behdad Esfahbod  
-
-	Bug 514632 – Problem with cursor in emacs in gnome-terminal
-
-	* src/vte-private.h:
-	* src/vte.c (_vte_terminal_cleanup_tab_fragments_at_cursor),
-	(_vte_terminal_insert_char):
-	* src/vteseq.c (vte_sequence_handler_ch),
-	(vte_sequence_handler_cm), (vte_sequence_handler_le),
-	(vte_sequence_handler_cursor_character_absolute):
-	Break "smart tabs" into multiple empty cells when cursor moves
-	into them or inserting character there.
-
-2008-11-28  Behdad Esfahbod  
-
-	* src/debug.c (_vte_debug_init):
-	* src/debug.h:
-	* src/vtepangocairo.c (font_info_cache_ascii),
-	(font_info_allocate), (font_info_free),
-	(font_info_find_for_context), (font_info_get_unichar_info):
-	Port vtepangocairo profiling and lifecycle logging to vtedebug
-	facilities under debug domain "pangocairo".
-
-2008-11-28  Behdad Esfahbod  
-
-	* src/debug.c (_vte_debug_init): Rename debug env var from
-	VTE_DEBUG_FLAGS to VTE_DEBUG.
-
-2008-11-28  Behdad Esfahbod  
-
-	* src/debug.c (_vte_debug_init):
-	* src/debug.h:
-	Make _vte_debug_on() inline.
-
-2008-11-28  Christian Persch  
-
-	* src/vte.c: Remove backward compat define for gtk 2.0, since we
-	already depend on a much higher version.
-
-2008-11-28  Christian Persch  
-
-	* src/debug.c: (_vte_debug_on): Revert behaviour change of
-	_vte_debug_on() from last commit.
-
-2008-11-28  Behdad Esfahbod  
-
-	Bug 459553 – gnome-terminal cannot shows circled digits with the
-	correct width on ja_JP.PCK
-	Patch from Takao Fujiwara
-
-	* src/iso2022.c (_vte_iso2022_ambiguous_width): Recognize Shift_JIS
-	as East Asian locale for width considerations.
-
-2008-11-28  Christian Persch  
-
-	* src/debug.c: (_vte_debug_init), (_vte_debug_on):
-	* src/debug.h:
-	* src/interpret.c: (main):
-	* src/pty.c: (main):
-	* src/reaper.c: (main):
-	* src/trie.c: (main):
-	* src/vte.c: (vte_terminal_new), (vte_terminal_class_init): Use
-	g_parse_debug_string to parse the debug flags.
-
-2008-11-28  Christian Persch  
-
-	* src/vteregex.c: (compare_matches), (_vte_regex_compile),
-	(_vte_regex_free), (_vte_regex_exec): Remove the unused GNU regex
-	code too.
-
-2008-11-28  Christian Persch  
-
-	* src/vteregex.c: (_vte_regex_compile), (_vte_regex_free),
-	(_vte_regex_exec): Remove unused PCRE code. If you want PCRE regexes,
-	use the new APIs that take GRegex.
-
-2008-11-28  Christian Persch  
-
-	Bug 562385 – gnome-pty-helper goes to 100% cpu usage
-
-	* gnome-pty-helper/gnome-pty-helper.c: (pass_fd), (pty_free),
-	(main): Make sure data structures are correctly aligned and of the
-	right size. 
-
-2008-11-27  Behdad Esfahbod  
-
-	* configure.in:
-	* src/Makefile.am:
-	More cleanup.
-
-2008-11-27  Behdad Esfahbod  
-
-	* src/Makefile.am:
-	Run some of the utilities in "make check", and build the others.
-
-	* src/nativeecho.c:
-	* src/utf8echo.c:
-	Remove more useless trivial utilities.
-
-2008-11-27  Behdad Esfahbod  
-
-	* src/Makefile.am:
-	* src/iso8859mode.c:
-	* src/utf8mode.c:
-	Remove useless trivial utilities.
-
-2008-11-27  Behdad Esfahbod  
-
-	* src/Makefile.am: Update EXTRA_DIST.
-
-2008-11-27  Behdad Esfahbod  
-
-	* HACKING: Update :P.
-
-2008-11-26  Behdad Esfahbod  
-
-	* src/vteseq.c (_vte_sequence_get_handler): Safely handle input of
-	length 1.
-
-2008-11-26  Behdad Esfahbod  
-
-	* src/Makefile.am:
-	* src/vteseq-2.c (vteseq_2_hash), (vteseq_2_lookup):
-	* src/vteseq-2.gperf:
-	* src/vteseq-n.c (vteseq_n_lookup):
-	* src/vteseq-n.gperf:
-	Don't use switch in gperf-generated code.  This increases .data by 1k
-	but decreases .text by 6k AND the lookup code is MUCH faster.  It used
-	to do tens of compares before.
-
-2008-11-26  Behdad Esfahbod  
-
-	* src/Makefile.am:
-	* src/vteseq-2.c (vteseq_2_hash), (vteseq_2_lookup):
-	* src/vteseq-n.c (vteseq_n_lookup):
-	* src/vteseq.c (_vte_sequence_get_handler):
-	Revert previous commit, fix NULL dereference that it was trying to
-	fix, and make lookup functions inline.
-
-2008-11-26  Chris Wilson  
-
-	* src/Makefile.am:
-	* src/vteseq-2.c (vteseq_2_hash), (vteseq_2_lookup):
-	* src/vteseq-n.c (vteseq_n_lookup):
-	* src/vteseq.c (_vte_sequence_get_handler):
-	Manually modify (and record those modifications in the Makefile)
-	the autogenerated gperf source code so that we return the sequence
-	handler directly from the lookup function, or NULL on failure.
-	So is this pain worth it?
-
-2008-11-26  Behdad Esfahbod  
-
-	* src/vtepangocairo.c (font_info_get_unichar_info):
-	Free internal layout resources.
-
-2008-11-26  Behdad Esfahbod  
-
-	Bug 562332 – cleanup font infos on exit?
-
-	* src/vtepangocairo.c
-	(cleanup_delayed_font_info_destroys_predicate),
-	(cleanup_delayed_font_info_destroys), (ensure_quit_handler),
-	(font_info_register), (font_info_reference),
-	(font_info_destroy_delayed), (font_info_destroy):
-	Use gtk_quit_add() to complete delayed font_info destroys.
-
-2008-11-26  Christian Persch  
-
-	Bug 562338 – don't need to connect to bunch of xft settings
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_style_changed), (add_cursor_timeout),
-	(vte_terminal_init), (vte_terminal_size_allocate),
-	(vte_terminal_finalize), (vte_terminal_realize): Don't listen to
-	changes on the gtk-xft-* GtkSettings properties. Just calling
-	vte_terminal_set_font_full in the style-set handler works fine.
-
-2008-11-26  Christian Persch  
-
-	Bug 488960 – gnome-terminal on Solaris 10 does not clean up utmpx on
-	exit (intermittent)
-
-	* gnome-pty-helper/gnome-pty-helper.c: (main):
-	* gnome-pty-helper/gnome-pty.h:
-	* src/pty.c: (_vte_pty_close): Add new GNOME_PTY_SYNCH operation to
-	gnome-pty-helper. Patch from Behdad.
-
-2008-11-26  Christian Persch  
-
-	* src/vte.c: (vte_terminal_style_changed),
-	(vte_terminal_ensure_font), (vte_terminal_set_font_full),
-	(vte_terminal_set_font_from_string_full_internal),
-	(vte_terminal_set_font_from_string_full),
-	(vte_terminal_reset_rowdata), (vte_terminal_set_property): Add
-	vte_terminal_set_font_*full_internal so we don't use deprecated
-	symbols internally.
-
-2008-11-26  Christian Persch  
-
-	* src/vte.c: (vte_terminal_sync_settings),
-	(vte_terminal_screen_changed): Remove gtk 2.12 version checks, since
-	we already depend on 2.12.
-
-2008-11-26  Christian Persch  
-
-	Bug 561366 – remove antialias setting for 1.0
-	
-	* src/vte.c: (vte_terminal_set_font_full),
-	(vte_terminal_get_property), (vte_terminal_class_init):
-	* src/vte.h: Deprecate the font antialias setting, and remove the
-	(existing only on trunk) font-antialias property already.
-
-2008-11-25  Behdad Esfahbod  
-
-	* src/Makefile.am:
-	* src/vteseq-2.c (vteseq_2_hash), (vteseq_2_lookup):
-	* src/vteseq-2.gperf:
-	* src/vteseq-n.c (vteseq_n_hash), (vteseq_n_lookup):
-	* src/vteseq-n.gperf:
-	* src/vteseq.c (_vte_sequence_get_handler):
-	Cleanup gperf stuff.
-
-2008-11-24  Behdad Esfahbod  
-
-	Bug 562187 – Add make rules for calling gperf
-
-	* src/Makefile.am: Add a "gperf" target to be run manually.
-
-	* src/vteseq-2.gperf:
-	* src/vteseq-n.gperf:
-	Add comment about "make gperf".
-
-	* src/vteseq-2.c:
-	* src/vteseq-n.c:
-	Regenerate using newer gperf.
-
-2008-11-24  Behdad Esfahbod  
-
-	Bug 416518 – Do something about uniwidths
-
-	* src/iso2022.c (_vte_iso2022_is_ambiguous):
-	Call into glib to determine ambiguous-width chars.
-
-	* src/genwidths.py:
-	* src/uniwidths:
-	Remove.
-
-2008-11-24  Behdad Esfahbod  
-
-	Bug 500191 – Remove vteseq-table.h?
-
-	* src/Makefile.am:
-	* src/vteseq-gen.c:
-	* src/vteseq-table.h:
-	Remove the old table implementation.  We use gperf-generated tables
-	now.
-
-2008-11-24  Behdad Esfahbod  
-
-	Bug 514457 – Use g_strv_length()
-
-	* src/vte.c (_vte_terminal_fork_basic): Do it.
-
-2008-11-24  Behdad Esfahbod  
-
-	* src/vtepangocairo.c (font_info_create_for_widget): No need to check
-	widget font desc here as vte.c does that for us already.
-
-2008-11-24  Behdad Esfahbod  
-
-	* src/vtepangocairo.c (font_info_destroy): Modify GTK_CHECK_VERSION
-	handling to make my vim syntax highlighter happy.
-
-2008-11-23  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_ensure_cursor): Refactor duplicate code.
-
-2008-11-22  Christian Persch  
-
-	* src/vte.h: Move all the deprecated stuff into one place.
-
-2008-11-22  Christian Persch  
-
-	Bug 542561 – Doesn't build when disabling gnome-pty-helper
-
-	* src/pty.c: Always include sys/socket.h. Patch by Loïc Minier.
-
-2008-11-22  Christian Persch  
-
-	* src/vteapp.c: (main): Fix --blink; the flag is inverted.
-
-2008-11-22  Christian Persch  
-
-	* src/vteapp.c: (main): Use vte_terminal_set_cursor_blink_mode instead
-	of the deprecated set_cursor_blinks here.
-
-2008-11-22  Christian Persch  
-
-	Bug 560766 – Deprecate and remove vte_terminal_get_using_xft()
-
-	* src/vte.c: (vte_terminal_get_using_xft):
-	* src/vte.h:
-	* src/vtedraw.c: (_vte_draw_text):
-	* src/vtedraw.h:
-	* src/vtepangocairo.c: Deprecate vte_terminal_get_using_xft() as preparation for
-	bug #560766. Remove the internal vtedraw method already.
-
-2008-11-22  Christian Persch  
-
-	Bug 536894 – Confusing use of "free" as variable-name in ring
-	functions
-
-	* src/ring.c: (_vte_ring_new), (_vte_ring_new_with_delta),
-	(_vte_ring_remove):
-	* src/ring.h: Don't shadow global declarations. Patch by dmacks at 
-	netspace.org. 
-
-2008-11-22  Christian Persch  
-
-	* python/vte.override: Fix missing-prototypes warnings.
-
-2008-11-22  Christian Persch  
-
-	* src/vtepangocairo.c: No need to include gi18n-lib.h here.
-
-2008-11-22  Christian Persch  
-
-	* configure.in:
-	* vte-uninstalled.pc.in:
-	* vte.pc.in: Clean up the pkgs declared for use in the .pc files.
-
-2008-11-22  Christian Persch  
-
-	* configure.in: Depend on gtk 2.12. Bug #398862.
-
-2008-11-22  Christian Persch  
-
-	* src/table.c: (print_array): Fix the build (broken since r1622).
-
-2008-11-22  Christian Persch  
-
-	* src/reaper.c: Don't include gtk.h here, it's unneeded.
-
-2008-11-22  Christian Persch  
-
-	* src/iso2022.c: (main): Make iso2022 programme build again; it was
-	broken since r1612.
-
-2008-11-22  Christian Persch  
-
-	* src/Makefile.am: Separate CFLAGS and CPPFLAGS.
-
-2008-11-22  Christian Persch  
-
-	* src/Makefile.am: Don't add LDFLAGS to *_LDADD, that's wrong and
-	broken.
-
-2008-11-22  Christian Persch  
-
-	* configure.in:
-	* src/Makefile.am:
-	* vte-uninstalled.pc.in:
-	* vte.pc.in: Remove more configure cruft: OTHERCFLAGS, OTHERLIBS,
-	X_CFLAGS and X_LIBS.
-
-2008-11-21  Christian Persch  
-
-        * src/vtepangocairo.c: (font_info_destroy_delayed),
-        (font_info_destroy): Use gdk_threads_add_timeout_seconds() for
-        complete threadsafety.
-
-2008-11-21  Chris Wilson  
-
-	* vte.pc.in: Remove FT2_LIBS and FT2_CFLAGS
-
-2008-11-21  Chris Wilson  
-
-	* src/iso2022.c (_vte_iso2022_is_ambiguous): Break out of interval
-	search as early as possible. Exploit the strict ordering of the 
-	ambiguous/unambiguous ranges to break out of the for loop as soon
-	as the character is less than a range start. (As the arrays only
-	contain 2/3 elements, it is not worth adding the overhead of calling
-	bsearch()).
-
-2008-11-21  Chris Wilson  
-
-	* src/iso2022.c (process_cdata): Copy the gunichars directly to the
-	array from the incoming chunk.
-
-2008-11-20  Chris Wilson  
-
-	* src/Makefile.am: Remove FT2_FLAGS
-
-2008-11-20  Behdad Esfahbod  
-
-	* src/vtepangocairo.c (font_info_destroy_delayed): Remove obsolete
-	check.
-
-2008-11-20  Behdad Esfahbod  
-
-	Bug 561713 – crash on font cache cleanup
-
-	* src/vtepangocairo.c (font_info_reference), (font_info_destroy):
-	Remove destroy timeout when resurrecting a font info.
-
-2008-11-20  Behdad Esfahbod  
-
-	* src/vtepangocairo.c (font_info_cache_ascii),
-	(font_info_allocate), (font_info_free),
-	(font_info_find_for_context):
-	Make profiling messages print the info pointer.
-
-2008-11-20  Behdad Esfahbod  
-
-	* configure.in:  Remove more cruft.
-
-2008-11-20  Behdad Esfahbod  
-
-	Bug 560819 – Remove obsolete backends
-
-	* configure.in:
-	* src/Makefile.am:
-	* src/vtebg.c (vte_bg_get_pixmap):
-	* src/vtebg.h:
-	* src/vtedraw.c:
-	* src/vtefc.c:
-	* src/vtefc.h:
-	* src/vteft2.c:
-	* src/vteft2.h:
-	* src/vtegl.c:
-	* src/vtegl.h:
-	* src/vteglyph.c:
-	* src/vteglyph.h:
-	* src/vterdb.c:
-	* src/vterdb.h:
-	* src/vtergb.c:
-	* src/vtergb.h:
-	* src/vtexft.c:
-	* src/vtexft.h:
-	Remove all backends except for pangocairo.  Saves so much code.
-
-2008-11-20  Behdad Esfahbod  
-
-	Bug 560819 – Remove obsolete backends
-
-	* src/Makefile.am:
-	* src/vtedraw.c:
-	* src/vtepango.c:
-	* src/vtepango.h:
-	Remove pango backend.
-
-2008-11-20  Behdad Esfahbod  
-
-	Bug 560819 – Remove obsolete backends
-
-	* configure.in:
-	* src/Makefile.am:
-	* src/vtedraw.c:
-	* src/vtepangox.c:
-	* src/vtepangox.h:
-	Remove pangox backend.
-
-2008-11-20  Behdad Esfahbod  
-
-	Bug 560818 – pangocairo backend doesn't share font cache across
-	widgets
-
-	* src/vtepangocairo.c (font_info_cache_ascii),
-	(font_info_allocate), (font_info_free), (font_info_register),
-	(font_info_unregister), (font_info_reference),
-	(font_info_destroy_delayed), (font_info_destroy), (context_hash),
-	(context_equal), (font_info_find_for_context),
-	(font_info_create_for_context), (font_info_create_for_screen),
-	(font_info_get_unichar_info): Cache font info and use it for multiple
-	widgets.
-
-2008-11-19  Behdad Esfahbod  
-
-	* src/vtepangocairo.c (font_info_create_for_screen),
-	(font_info_destroy): Remove unused PangoCoverage.
-
-2008-11-19  Behdad Esfahbod  
-
-	* src/vtepangocairo.c (font_info_find_unichar_info),
-	(font_info_cache_ascii), (font_info_measure_font),
-	(font_info_get_unichar_info): Cache ASCII characters when building
-	font.
-
-2008-11-18  Christian Persch  
-
-	Remove glib usage from gnome-pty-helper. Bug #560977.
-
-	* gnome-pty-helper/Makefile.am: Remove GLIB CFLAGS/LIBS.
-	* gnome-pty-helper/configure.in: Remove glib check, and do some auto*
-	modernisation.
-	* gnome-pty-helper/gnome-pty-helper.c: (open_ptys), (exit_handler),
-	(main): Use alloca instead of g_alloca, and use int instead of
-	gboolean.
-
-2008-11-18  Behdad Esfahbod  
-
-	* src/vtepangocairo.c (font_info_create_for_screen),
-	(font_info_destroy): Remove copy of font desc and antialias from font
-	info object as they were not used.
-
-2008-11-18  Behdad Esfahbod  
-
-	Bug 561185 – pangocairo backend sets antialias incorrectly
-
-	* src/vtepangocairo.c (font_info_create_for_screen): Handle
-	FORCE_ENABLE correctly.
-
-2008-11-16  Behdad Esfahbod  
-
-	Bug 560817 – pagocairo backend doesn't have correct opacity support	
-
-	* src/vtepangocairo.c (_vte_pangocairo_clear),
-	(_vte_pangocairo_draw_text), (_vte_pangocairo_draw_rectangle),
-	(_vte_pangocairo_fill_rectangle): Fix opacity support by using
-	SOURCE operator.
-
-2008-11-16  Behdad Esfahbod  
-
-	Bug 560991 – Unsetting background doesn't work
-
-	* src/vte.c (vte_terminal_set_background_image): Correctly unset
-	background if image==NULL.
-
-2008-11-14 Christian Persch 
-
-	* src/vteskel.c: Fix missing prototype warning.
-
-2008-11-14  Behdad Esfahbod  
-
-	Bug 395599 – Add pangocairo backend
-
-	* configure.in:
-	Require pango >= 1.22.0
-
-	* src/Makefile.am:
-	* src/vtedraw.c:
-	* src/vtepangocairo.c:
-	* src/vtepangocairo.h:
-	Add a pangocairo drawing backend.  Use it by default.  This is as fast
-	as the xft backend.  Doesn't share font caches across widgets yet.
-	Also, the transparent background stuff doesn't match xft backend's
-	yet.
-
-2008-11-14  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_ensure_font):
-	* src/vtedraw.c (_vte_draw_new), (_vte_draw_free),
-	(_vte_draw_set_background_opacity),
-	(_vte_draw_set_background_color), (_vte_draw_set_text_font),
-	(_vte_draw_get_text_metrics), (_vte_draw_get_char_width),
-	(_vte_draw_char), (_vte_draw_draw_rectangle),
-	(_vte_draw_set_scroll):
-	* src/vtedraw.h:
-	* src/vteft2.c (_vte_ft2_destroy), (_vte_ft2_start),
-	(_vte_ft2_end), (_vte_ft2_set_background_image), (_vte_ft2_clear),
-	(_vte_ft2_set_text_font), (_vte_ft2_get_text_metrics),
-	(_vte_ft2_get_char_width), (_vte_ft2_draw_text),
-	(_vte_ft2_draw_has_char), (_vte_ft2_draw_rectangle),
-	(_vte_ft2_fill_rectangle):
-	* src/vtegl.c (_vte_gl_destroy), (_vte_gl_get_visual),
-	(_vte_gl_start), (_vte_gl_end), (_vte_gl_set_background_image),
-	(_vte_gl_clear), (_vte_gl_set_text_font),
-	(_vte_gl_get_text_metrics), (_vte_gl_get_char_width),
-	(_vte_gl_draw_text), (_vte_gl_draw_has_char), (_vte_gl_rectangle):
-	* src/vtepango.c (_vte_pango_set_text_font),
-	(_vte_pango_get_text_metrics):
-	* src/vtepangox.c (_vte_pangox_create), (_vte_pangox_destroy),
-	(_vte_pangox_start), (_vte_pangox_end),
-	(_vte_pangox_set_background_image), (_vte_pangox_clip),
-	(_vte_pangox_clear), (_vte_pangox_set_text_font),
-	(_vte_pangox_get_text_metrics), (_vte_pangox_get_using_fontconfig),
-	(_vte_pangox_draw_text), (_vte_pangox_draw_has_char),
-	(_vte_pangox_draw_rectangle), (_vte_pangox_fill_rectangle):
-	* src/vtepangox.h:
-	* src/vteskel.c (_vte_skel_clear), (_vte_skel_get_text_metrics),
-	(_vte_skel_draw_text), (_vte_skel_fill_rectangle):
-	* src/vtexft.c (_vte_xft_set_text_font),
-	(_vte_xft_get_text_metrics), (_vte_xft_draw_text):
-	Remove unneeded draw methods.
-
-2008-11-14  Behdad Esfahbod  
-
-	* src/vtedraw.c (_vte_draw_get_char_width): Minor fix.
-
-	* src/vtepangox.c (_vte_pango_x_create), (_vte_pango_x_start),
-	(_vte_pango_x_clear): Cleanup here too.
-
-2008-11-13  Behdad Esfahbod  
-
-	* configure.in:
-	* src/vte-private.h:
-	Undo previous change instead of cleanly fix it for now.
-
-2008-11-13  Behdad Esfahbod  
-
-	* configure.in:
-	* src/vte-private.h:
-	Why do we let people configure random things?
-
-2008-11-13  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_background_update):
-	* src/vtedraw.c (_vte_draw_update_requires_clear), (_vte_draw_new),
-	(_vte_draw_set_background_opacity),
-	(_vte_draw_set_background_color), (_vte_draw_set_background_image),
-	(_vte_draw_char), (_vte_draw_set_scroll):
-	* src/vtedraw.h:
-	* src/vteft2.c (_vte_ft2_set_background_image), (_vte_ft2_clear),
-	(_vte_ft2_get_char_width):
-	* src/vtegl.c (_vte_gl_create), (_vte_gl_clear),
-	(_vte_gl_get_char_width), (_vte_gl_draw_text):
-	* src/vtepango.c (_vte_pango_create), (_vte_pango_start),
-	(_vte_pango_set_background_image), (_vte_pango_clear):
-	* src/vtexft.c (_vte_xft_create), (_vte_xft_set_background_image),
-	(_vte_xft_clear), (_vte_xft_get_char_width):
-	Simplify backends by relying more on defaults.
-
-2008-11-13  Behdad Esfahbod  
-
-	* src/vtedraw.c (_vte_draw_init_user), (_vte_draw_init_default):
-	Accept draw impl if impl->check is NULL.
-
-2008-11-13  Behdad Esfahbod  
-
-	* src/vtedraw.h:
-	* src/vtedraw.c (_vte_draw_new), (_vte_draw_get_visual),
-	(_vte_draw_get_colormap), (_vte_draw_start), (_vte_draw_end),
-	(_vte_draw_set_background_color), (_vte_draw_set_background_image),
-	(_vte_draw_requires_repaint), (_vte_draw_clip), (_vte_draw_clear),
-	(_vte_draw_set_text_font), (_vte_draw_get_text_width),
-	(_vte_draw_get_text_height), (_vte_draw_get_text_ascent),
-	(_vte_draw_get_char_width), (_vte_draw_get_using_fontconfig),
-	(_vte_draw_text), (_vte_draw_char), (_vte_draw_has_char),
-	(_vte_draw_fill_rectangle), (_vte_draw_draw_rectangle),
-	(_vte_draw_set_scroll):
-	Use sensical defaults instead of g_return_if_fail'ing when backend
-	functions are not implemented.
-
-2008-10-31  Chris Wilson  
-
-	Bug 557375 – >=vte-0.16.14 breaks highlighting on activity
-
-	* src/vte.c (vte_terminal_deselect_all):
-	Preserve the copy of the selection until it is replace by a new
-	selection, so that we can perform asynchronous copies from the
-	clipboard.
-
-2008-10-23  Chris Wilson  
-
-	Bug 557375 – >=vte-0.16.14 breaks highlighting on activity
-
-	* src/vte.c (vte_terminal_deselect_all),
-	(vte_terminal_extend_selection):
-	After the user modifies the selection, copy it to PRIMARY and store
-	it on the terminal. This ensures that after a screen redraw, we
-	compare the contents of the selected region with the current
-	selection, instead of stale data.
-
-2008-10-23  Christian Persch  
-
-        * configure.in:
-        * src/Makefile.am: Use glib-genmarshal --internal directly instead
-        of checking the glib version, since we now depend on a glib version
-        that provides this.
-
-2008-10-23  Christian Persch  
-
-        Bug 556398 – maybe deprecate vte_terminal_get_char_ascent/descent
-
-        * src/vte.[ch]: Deprecate vte_terminal_get_char_ascent/descent.
-
-2008-10-23  Christian Persch  
-
-        Bug 339819 – LibVTE terminals in GLADE
-
-        A glade/*:
-        * Makefile.am
-        * configure.in: Add glade catalogue.
-
-2008-10-23  Christian Persch  
-
-        Bug 399364 – Implement properties
-
-        * src/vte.c: Add gobject properties.
-
-2008-10-19  Christian Persch  
-
-        Bug 556328 – Document set-scroll-adjustment parameters
-
-        * src/vte.c: Document the set-scroll-adjustments signal.
-
-2008-10-15  Behdad Esfahbod  
-
-	* doc/reference/Makefile.am:
-	* doc/reference/check-doc-coverage.sh:
-	* doc/reference/check.docs:
-	Update doc coverage test from cairo.
-
-2008-10-14  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_set_cursor_shape):
-	Invalidate cursor upon shape change.
-
-2008-10-15  Christian Persch  
-
-	* python/vte.defs: Add new API to the binding.
-
-2008-10-14  Behdad Esfahbod  
-
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_draw_line), (vte_terminal_paint_cursor):
-	Remove VTE_CURSOR_OUTLINE in favor of VTE_LINE_WIDTH.
-
-2008-10-14  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_paint_cursor):
-	Supposedly handle reverse video during cursor drawing.
-
-2008-10-14  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_paint_im_preedit_string),
-	(vte_terminal_paint):
-	Move IM preedit string drawing into its own function for code
-	clarity.
-
-2008-10-14  Behdad Esfahbod  
-
-	Bug 549835 – Feature Request: Configurable cursor appearance
-
-	* src/vte.h:
-	New public api:
-
-		VteTerminalCursorShape
-		vte_terminal_set_cursor_shape
-		vte_terminal_get_cursor_shape
-
-	* src/vte-private.h:
-	* src/vte.c (_vte_terminal_insert_char), (vte_terminal_init),
-	(vte_terminal_paint_cursor), (vte_terminal_paint),
-	(vte_terminal_set_cursor_shape), (vte_terminal_get_cursor_shape):
-	Implement new API.  Also clean up cursor drawing in general.
-
-	* doc/reference/Makefile.am:
-	* doc/reference/tmpl/reaper.sgml:
-	* doc/reference/tmpl/vte-unused.sgml:
-	* doc/reference/tmpl/vte.sgml:
-	* doc/reference/vte-sections.txt:
-	Doc new symbols.  Also add some missing docs.
-
-2008-10-13  Christian Persch  
-
-	* src/vte.c: Add gobject property infrastructure.
-
-2008-10-13  Christian Persch  
-
-	* src/Makefile.am: Fix missing prototypes compiler warning in
-	marshal.c.
-
-2008-10-06  Christian Persch  
-
-	* src/vteconv.c: (_vte_conv_open): Fix compiler warning.
-
-2008-10-06  Christian Persch  
-
-        Bug 509204 – child-exited signal does not provide exit code
-
-	* python/vte.defs: Add the new function to the bindings.
-
-2008-10-06  Christian Persch  
-
-        Bug 539130 – building g-t fails due to GtkType etc. deprecation
-
-        * src/vte.h: Deprecate useless macros.
-
-2008-10-06  Christian Persch  
-
-        Bug 509204 – child-exited signal does not provide exit code
-
-        * src/vte-private.h:
-        * src/vte.h:
-        * src/vte.c: Add function to get the child's exit status.
-
-2008-10-06  Christian Persch  
-
-	* configure.in: Bump version to 0.17.5.
-
-2008-09-08  Christian Persch  
-
-        Release 0.17.3.
-
-        * NEWS:
-	* configure.in: Updated.
-
-2008-09-07  Christian Persch  
-
-	* python/vte.defs: Update python bindings.
-
-2008-08-20  Sébastien Granjoux  
-
-	Bug 538344 – Anjuta hangs when program is executed in terminal
-
-	* src/vte.c: Ensure the output channel exists when we need to write.
-
-2008-08-20  Christian Persch  
-
-	* src/vte.c: (vte_terminal_match_check_internal_gregex): Plug a mem
-	leak.
-
-2008-08-15  Chris Wilson  
-
-	* src/vte.c (vte_terminal_set_pty):
-	fcntl(2) specifies that the flags argument is a long. Make it so.
-
-2008-08-13  Behdad Esfahbod  
-
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_match_check_internal_vte),
-	(vte_terminal_ensure_cursor), (vte_terminal_set_colors),
-	(_vte_terminal_insert_char), (vte_terminal_feed),
-	(vte_terminal_key_press), (vte_terminal_match_hilite_update),
-	(vte_terminal_extend_selection):
-	* src/vteseq.c (vte_terminal_find_charcell),
-	(vte_sequence_handler_set_title_internal),
-	(vte_sequence_handler_decset_internal), (vte_sequence_handler_cb),
-	(vte_sequence_handler_cd), (vte_sequence_handler_ce),
-	(vte_sequence_handler_ec), (vte_sequence_handler_ta),
-	(vte_sequence_handler_set_mode),
-	(vte_sequence_handler_window_manipulation):
-	Fix all "signed vs unsigned comparison" warnings.
-
-2008-08-13  Behdad Esfahbod  
-
-	* src/vte.c (regex_match_clear_cursor),
-	(vte_terminal_set_cursor_from_regex_match):
-	Fix uninitialized cursor warning.  Setting to NULL sounds
-	right to me.  ChPe?
-
-2008-08-13  Behdad Esfahbod  
-
-	* src/vte.c: Remove useless "inline" decorators.  Gcc has been
-	rightfully complaining.
-
-2008-08-13  Behdad Esfahbod  
-
-	Bug 546940 – Crash when selecting text
-
-	* src/vte.c (vte_terminal_extend_selection): Fix crash with 64-bit
-	systems.  Note to self:
-
-		unsigned int len = 0;
-		long i = len - 1;
-		assert (i < 0);
-
-	fails on 64-bit systems.
-
-2008-08-05  Behdad Esfahbod  
-
-	Released vte-0.17.1.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.17.1.
-	Bumped libtool version to 12:0:3.
-
-2008-08-05  Behdad Esfahbod  
-
-	Bug 546366 – hard to select last tab char on a line
-
-	* src/vte.c (vte_terminal_extend_selection):
-	* src/vteseq.c (vte_sequence_handler_ta):
-	Handle fragment cells.
-
-2008-08-05  Behdad Esfahbod  
-
-	Bug 545924 – tab characters not handled correctly after ncurses clear	
-	Patch from Patryk Zawadzki
-
-	* src/vteseq.c (vte_sequence_handler_ta): Ignore empty cells at end of
-	line.
-
-2008-07-14  Behdad Esfahbod  
-
-	Bug 542795 – VTE_CJK_WIDTH don't work
-
-	* src/iso2022.c (_vte_iso2022_ambiguous_width): Fix VTE_CJK_WIDTH env
-	handling.
-
-2008-06-27  Christian Persch  
-
-        Bug 399744 – Hide more font-aa implementation details
-
-        * src/vtexft.c: Disable antialiasing if using the default antialias
-        setting and the XRender extension is not available.
-
-2008-06-27  Christian Persch  
-
-        Bug 510903 – use gtk-cursor-blink setting
-
-        * doc/reference/tmpl/vte.sgml:
-        * doc/reference/vte-sections.txt:
-        * src/vte-private.h:
-        * src/vte.c:
-        * src/vte.h: Make the cursor blinking follow the gtk setting by
-        default, with a possible override.
-
-2008-06-26  Christian Persch  
-
-	* src/vte.h: Remove the enum type declarations that are now in
-        vtetypebuiltins.h.
-
-2008-06-26  Christian Persch  
-
-        * Makefile.am:
-        * autogen.sh: Fix the build from svn and make dist when using
-        intltool 0.40.0. Tarball builds still only require 0.35.0.
-
-2008-06-26  Christian Persch  
-
-	* src/vteversion.h.in: Disallow direct inclusion of the new
-	vteversion.h file.
-
-2008-06-26  Christian Persch  
-
-	* configure.in:
-	* src/Makefile.am:
-	* src/vte.c:
-	* src/vte.h:
-	* src/vtetypebuiltins.c.template:
-	* src/vtetypebuiltins.h.template: Use glib-mkenums to generate the
-	enum types; makes it easier to add more enum types.
-
-2008-06-26  Christian Persch  
-
-        Bug 539130 – building g-t fails due to GtkType etc. deprecation
-
-        * src/reaper.h:
-        * src/vte.c:
-        * src/vteaccess.[ch]: 
-        * src/vtebg.h: Also remove the deprecated GtkType macros from here.
-
-2008-06-25  Christian Persch  
-
-	Bug 540182 – crash in geany with vte trunk
-
-	* src/vte.c: Make sure that match_attributes always exist even if
-	there haven't been any matches added.
-
-2008-06-23  Christian Persch  
-
-	Bug 535552 – vte_terminal_set_allow_bold doesn't queue redraw
-
-	* src/vte.c: Invalidate all when changing the allow-bold property.
-
-2008-06-23  Christian Persch  
-
-        Bug 535469 – support named cursors on matches
-
-        * src/vte-private.h
-        * src/vte.c
-        * src/vte.h: Implement named cursors on matches.
-
-2008-06-23  Christian Persch  
-
-        Bug 418918 – Switch to GRegex
-
-        * src/vte-private.h
-        * src/vte.c
-        * src/vte.h: Implement GRegex matching, to be used alternatively
-        to the old vteregex matching.
-
-2008-06-23  Christian Persch  
-
-        Bug 535467 – implement set-scroll-adjustments signal
-
-        * src/vte.c: Add set-scroll-adjustments signal, needed to allow
-        adding a VteTerminal into a GtkScrolledWindow.
-
-2008-06-23  Christian Persch  
-
-        Bug 535468 – need version check macros
-
-        * configure.in
-        * doc/reference/tmpl/vteversion.sgml
-        * doc/reference/vte-sections.txt
-        * doc/reference/vte.types
-        * src/Makefile.am
-        * src/vte.h
-        A src/vteversion.h.in: Add version check macro.
-
-2008-06-21  Kjartan Maraas  
-
-	* src/vte.h: Don't use GTK_CHECK* macros.
-
-2008-06-04  Christian Persch  
-
-	Bug 515972 – Bold black is black in vte's default palette
-
-	* src/vte.c: (vte_terminal_set_colors): Correctly set the value of
-	'bold black' in the palette. Patch by Santtu Lakkala.
-
-2008-06-04  Behdad Esfahbod  
-
-	Released vte-0.16.14.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.14.
-	Bumped libtool version to 11:18:2.
-
-2008-06-04  Behdad Esfahbod  
-
-	Bug 536632 – vte build failure in ring.c:210: error: expected
-	expression before 'do'
-
-	* src/debug.h:
-	* src/ring.c:
-	* src/ring.h:
-	With latest glib (after bug #519026), g_error is expanding to
-	"do {...} while(0)" instead of "{...}".  This breaks build in
-	debugging mode.  Use g_critical instead.  Also add some
-	G_STMT_START/END to some macros.
-
-2008-05-29  Chris Wilson  
-
-	* src/pty.c (merge_environ): Replace previous commit with the
-	better patch by Christian Persch.
-
-2008-05-29  Chris Wilson  
-
-	* src/pty.c (merge_environ): Fix bug in patch to use g_listenv()
-	as it only returns the variable name and we need to use g_getenv()
-	to retrieve its value.
-
-2008-05-27  Behdad Esfahbod  
-
-	* src/iso2022.c (_vte_iso2022_ambiguous_width): Oops.  Fix thinko
-	in last commit.
-
-2008-05-27  Behdad Esfahbod  
-
-	Bug 535022 – ambiguous width in utf8 locale
-
-	* src/iso2022.c (_vte_iso2022_ambiguous_width): Recognize
-	env var settings VTE_CJK_WIDTH=narrow and VTE_CJK_WIDTH=wide.
-	Any other value means "auto" based on locale, as it was doing
-	previously.
-
-2008-05-21  Chris Wilson  
-
-	* src/pty.c (merge_environ): Silence compiler warning about using
-	environ as a local variable name.
-
-2008-05-21  Richard Hult  
-
-	Bug 534148 – Use g_listenv() instead of environ
-
-	* src/pty.c: (merge_environ): Use g_listenv() instead of
-	non-portable environ extern.
-
-2008-05-19  Kjartan Maraas  
-
-	* configure.in: automake doesn't like to substitute more
-	than one variable at a time.
-	* src/vtedraw.c: (_vte_draw_get_using_fontconfig):
-	* src/vtetc.c: (_vte_termcap_find_boolean):
-	Fix two compiler warnings.
-
-2008-05-09  Chris Wilson  
-
-	* src/vtedraw.c (_vte_draw_text):
-	    Add the text to draw to the debug output.
-
-2008-05-09  Chris Wilson  
-
-	Fix "GLib-CRITICAL **: g_io_add_watch_full: assertion
-	                       `channel != NULL' failed"
-
-	* src/debug.c (_vte_debug_parse_string):
-	* src/debug.h:
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_emit_adjustment_changed),
-	(_vte_terminal_adjust_adjustments_full),
-	(vte_terminal_scroll_lines), (vte_terminal_maybe_scroll_to_bottom),
-	(_vte_terminal_insert_char), (vte_terminal_catch_child_exited),
-	(mark_input_source_invalid), (_vte_terminal_connect_pty_read),
-	(mark_output_source_invalid), (_vte_terminal_connect_pty_write),
-	(_vte_terminal_disconnect_pty_read),
-	(_vte_terminal_disconnect_pty_write), (_vte_terminal_fork_basic),
-	(vte_terminal_eof), (_vte_terminal_enable_input_source),
-	(vte_terminal_io_read), (vte_terminal_handle_scroll),
-	(vte_terminal_finalize), (vte_terminal_class_init),
-	(vte_terminal_set_pty), (process_timeout), (update_repeat_timeout),
-	(update_timeout):
-	It was possible for _vte_terminal_enable_input_source() to be called
-	after the input closed with G_IO_HUP. The minimal change would just
-	have been to add a guard to check the pty_master was still valid
-	before reattaching the source. Instead I removed the redundant
-	duplication of the input and output channels and added lots of
-	debugging.
-
-2008-05-08  Chris Wilson  
-
-	Bug 516869 – vte displays nothing on GTK+/DirectFB
-
-	Original patch by Jérémy Bobbio.
-
-	* src/vte.c (vte_terminal_class_init), (update_regions),
-	(update_repeat_timeout), (update_timeout):
-	gdk_window_process_all_updates() is ineffective on the gtk+-directfb
-	and gtk+-quartz backends, so in order to process updates immediately
-	one must call gdk_window_process_updates() on the desired GdkWindows
-	instead.
-
-2008-03-10  Behdad Esfahbod  
-
-	Released vte-0.16.13.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.13.
-	Bumped libtool version to 11:17:2.
-
-2008-02-20  Behdad Esfahbod  
-
-	Bug 517709 – VTE's pty.c makes 4096 getrlimit calls when it only needs
-	one
-
-	* src/pty.c (_vte_pty_start_helper): Only close fds 0, 1, and 2.
-	gnome-pty-helper closes all fds anyway.
-
-2008-02-08  Behdad Esfahbod  
-
-	* src/vte.c:
-	* src/vteapp.c:
-	* src/vtergb.c:
-	Remove unneeded #include 
-
-2008-01-09  Behdad Esfahbod  
-
-	Bug 449131 – Wrong gettext domain
-
-	* src/pty.c:
-	* src/reaper.c (vte_reaper_class_init):
-	* src/trie.c:
-	* src/vtebg.c (vte_bg_class_init):
-	* src/vteglyph.c:
-	Oops.  Fix all remaining ones too.
-
-2008-01-07  Behdad Esfahbod  
-
-	Released vte-0.16.12.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.12.
-	Bumped libtool version to 11:16:2.
-.
-2007-12-21  Chris Wilson  
-
-	Bug 503164 – Drawing problems for VTE with gtk+-quartz
-
-	* src/vte.c (vte_terminal_realize):
-	Continuing the saga, remove the fiddling with visibility state
-	during realize.
-
-2007-12-18  Behdad Esfahbod  
-
-	Bug 449131 – Wrong gettext domain
-
-	* src/vte.c (vte_terminal_class_init): Use GETTEXT_DOMAIN in
-	bind_textdomain_codeset().
-
-2007-12-17  Behdad Esfahbod  
-
-	Released vte-0.16.11.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.11.
-	Bumped libtool version to 11:15:2.
-.
-2007-12-17  Chris Wilson  
-
-	Bug 503164 – Drawing problems for VTE with gtk+-quartz
-
-	* src/vte.c (vte_terminal_init):
-	GdkQuartz does not generate GdkVisibilityNotify events and
-	so the terminal was never marked as unobscured, causing all
-	redraws to be discarded. Resolve this by initially setting the
-	terminal to be unobscured.
-
-2007-12-10  Behdad Esfahbod  
-
-	Bug 319687 – Pasting of text containing characters not in the
-	terminal's encoding silently fails
-
-	* src/vteconv.c (_vte_conv_open): Try to open converter with
-	transliteration.  Supported by GNU iconv and GLibc.
-
-2007-12-03  Behdad Esfahbod  
-
-	Released vte-0.16.10.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.10.
-	Bumped libtool version to 11:14:2.
-.
-2007-12-03  Chris Wilson  
-
-	Bug 497246 – Kill vte_iso2022_fragment_input
-
-	* src/iso2022.c (process_block), (_vte_iso2022_process):
-	Avoid the temporary allocation of the GArray holding the fragments
-	by processing each fragment as it is decyphered. This array is
-	allocated and grown for every single input chunk and is currently the
-	most frequent allocation made by vte.
-
-2007-12-03  Chris Wilson  
-
-	* src/keymap.c: Make is_cursor_key static.
-
-2007-11-28  Behdad Esfahbod  
-
-	Bug 412435 – Invalid variable name in Makefile.am
-
-	* Makefile.am:
-	* configure.in:
-	* vte.spec.in:
-	Remove spec file and old convenience cvs make targets.
-
-2007-11-28  Behdad Esfahbod  
-
-	Bug 416561 – Rendering issue in VtePango
-
-	* src/vtepango.c (_vte_pango_draw_rectangle):
-	* src/vtepangox.c (_vte_pango_x_draw_rectangle):
-	gdk_draw_rectangle has slightly different semantics when
-	filling vs outlining.  Fix for that.
-
-2007-11-28  Behdad Esfahbod  
-
-	Bug 416558 – Rendering errors in VteFT2
-
-	* src/vteft2.c (_vte_ft2_create): Disable Gtk+ double-buffering.
-
-2007-11-28  Behdad Esfahbod  
-
-	Bug 403217 – Outdated README
-
-	* README: Rewrite.
-
-2007-11-27  Behdad Esfahbod  
-
-	Bug 118967 – single line scrolling with "Ctrl+Shift+ArrowUp/ArrowDown"
-	Patch from Mauricio and Mariano Suárez-Alvarez
-
-	* src/vte.c (vte_terminal_scroll_lines),
-	(vte_terminal_scroll_pages), (vte_terminal_key_press):
-	Implement single-line scroll.
-
-2007-11-27  Behdad Esfahbod  
-
-	Bug 353610 – Don't convert tab characters upon copying
-
-	* src/vte-private.h:
-	* src/vteseq.c (vte_sequence_handler_ta):
-	Smart tab handling to try to preserve tab character upong copying.
-	Also makes such smart tabs all-or-none selectable.
-
-2007-11-27  Behdad Esfahbod  
-
-	Bug 499892 – strikethrough line is too high
-
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_apply_metrics), (vte_terminal_init),
-	(vte_terminal_draw_cells): Adjust underline/strikethrough thickness
-	and position based on pangofc's heuristics.
-
-2007-11-27  Behdad Esfahbod  
-
-	* src/vtedraw.c (_vte_draw_init_user): Make VTE_BACKEND=list list
-	available backends to stderr.
-
-2007-11-27  Behdad Esfahbod  
-
-	Bug 499891 – vte with opacity set, shows invisible chars
-
-	* src/vte.c (vte_terminal_draw_rows): Don't draw invisible chars.
-
-2007-11-27  Behdad Esfahbod  
-
-	Bug 499896 – Alternate charset isn't an attribute, though we treat it
-	as one.
-
-	* src/vte-private.h:
-	* src/vte.c (_vte_terminal_set_default_attributes),
-	(_vte_terminal_insert_char), (vte_terminal_reset):
-	* src/vteseq.c (vte_sequence_handler_ae),
-	(vte_sequence_handler_as):
-	Move cell.attr.alternate to screen->alternate_charset.
-
-2007-11-27  Behdad Esfahbod  
-
-	Bug 499893 – cell.attr.protect is unused
-
-	* src/vte-private.h:
-	* src/vte.c (_vte_terminal_set_default_attributes):
-	* src/vteseq.c (vte_sequence_handler_mp):
-	Comment out cell.attr.protect which is unused.
-
-2007-11-27  Behdad Esfahbod  
-
-	* src/vte.c (_vte_invalidate_cell), (_vte_invalidate_cursor_once):
-	Minor optimization, if one can call it that.
-
-2007-11-26  Behdad Esfahbod  
-
-	* src/vte.c: Fix doc syntax.
-
-2007-11-26  Behdad Esfahbod  
-
-	Revert previous change.  For reason, see bug.
-	Bug 491832 – vte_terminal_get_text_range_maybe_wrapped always includes
-	trailing spaces
-
-	* src/vte.c (vte_terminal_get_text_range_maybe_wrapped):
-	Don't trim space characters, just the empty space after lines,
-	like we used to.
-
-2007-11-26  Behdad Esfahbod  
-
-	Bug 491832 – vte_terminal_get_text_range_maybe_wrapped always includes
-	trailing spaces
-
-	* src/vte.c (vte_terminal_get_text_range_maybe_wrapped):
-	Trim trailing space characters if asked to.
-
-2007-11-23  Behdad Esfahbod  
-
-	* doc/reference/Makefile.am:
-	* doc/reference/check.docs:
-	Add script to check doc coverage is 100% on "make check".
-
-2007-11-23  Behdad Esfahbod  
-
-	Bug 499287 – Fix doc coverage regression
-
-	* doc/reference/tmpl/vte.sgml:
-	* doc/reference/vte-sections.txt:
-	Document undocumented symbols.
-
-2007-11-16  Chris Wilson  
-
-	* src/vte.c (vte_terminal_io_read), (vte_terminal_init),
-	(process_timeout), (update_repeat_timeout), (update_timeout):
-	    Tweak to read across chunk boundaries whilst still maintaining
-	    fairness between multiple terminals and refresh rate targets.
-
-2007-11-16  Chris Wilson  
-
-	* src/ring.c (_vte_ring_insert_preserve):
-	    Use stack allocation to hold small numbers of temporary
-	    gpointers.
-
-2007-11-16  Chris Wilson  
-
-	* src/vte-private.h:
-	* src/vte.c (_vte_free_row_data), (vte_terminal_reset_rowdata),
-	(vte_terminal_finalize), (vte_terminal_reset):
-	    Export _vte_row_data_free.
-
-	* src/vteseq.c (vte_remove_line_internal):
-	    Cache the removed VteRowData - fixes the continual reallocation
-	    of row data during the vim scrolling benchmark.
-
-2007-11-16  Chris Wilson  
-
-	* src/vte.c (release_chunk), (prune_chunks),
-	(remove_from_active_list), (process_timeout),
-	(update_repeat_timeout):
-	    Delay pruning the chunks freelist until we finished processing
-	    all the incoming data. We were discarding the freelist far too
-	    early and reduced the efficacy of the cache.
-
-2007-11-16  Chris Wilson  
-
-	* src/vterdb.h:
-	* src/vterdb.c (_vte_rdb_get), (_vte_rdb_search), (_vte_rdb_quark),
-	(_vte_rdb_get_rgba), (_vte_rdb_get_hintstyle), (_vte_rdb_release):
-	    Remove redundant queries and cache the XRequest on the root
-	    window (saves a few round-trips during terminal construction).
-	    Add a new function to free the cache.
-
-	* src/vtefc.c (_vte_fc_defaults_from_rdb):
-	    Release the cache after retrieving settings.
-
-2007-11-15  Chris Wilson  
-
-	* src/vte.c (vte_terminal_focus_out):
-	    Similar for the leave notify, disable the match updating after
-	    hiding the cursor after the loss of focus.
-	    However, do we really want to disable the hilighting whilst the
-	    pointer may still be within the terminal?
-
-2007-11-15  Chris Wilson  
-
-	* src/vte.c (vte_terminal_enter):
-	    Don't automatically reshow the hilight on receiving an enter
-	    event, but wait for the motion notify to update the cursor
-	    co-ordinates, otherwise we may hilight something quite distant
-	    from the cursor.
-
-2007-11-15  Chris Wilson  
-
-	* src/vte.c (vte_terminal_leave):
-	    Mark the cursor as invisible on leaving the terminal as this
-	    stops the hilight matcher running whilst the cursor is absent.
-
-2007-11-06  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_set_font_from_string_full): Allow NULL
-	font argument.  Can be used to set antialias without setting font.
-
-	* src/vteapp.c (main): Fix antialias handling which was borked when
-	moving to GOption.
-
-2007-11-06  Behdad Esfahbod  
-
-	Bug 142640 – FcConfigSubstitute in place of _vte_fc_defaults_from_gtk
-	to get antialias and hinting value
-
-	* src/vtefc.c (_vte_fc_defaults_from_gtk),
-	(_vte_fc_defaults_from_rdb): Replace _vte_fc_defaults_from_gtk() with
-	gtk_default_substitute() from Gtk+-2.6.  It's essentially the same
-	thing, but not overriding elements of the pattern already present.
-	Also remove a couple redundant calls.
-
-2007-10-11  Chris Wilson  
-
-	Bug 439384 – gnome-terminal on feisty crashes when giving wrong locale environment
-
-	* src/vte.c (vte_terminal_set_encoding):
-	    Fallback to using UTF-8 as the locale encoding. This prevents
-	    subsequent crashes but may display gibberish in the output.
-
-2007-10-05  Chris Wilson  
-
-	Bug 483642 – vte_terminal_feed crash when 8190 characters passed
-
-	* src/vte.c (vte_terminal_feed):
-	    Break the feed data into chunks.
-
-2007-09-30  Chris Wilson  
-
-	* src/vtexft.c (_vte_xft_set_background_image):
-		Skip retrieving the VteBg if the source is VTE_BG_SOURCE_NONE
-		as we neither need it to listen for changes to the background
-		nor require it to load the pixmap (which is a no-op).
-
-2007-09-30  Chris Wilson  
-
-	* src/vtexft.c (_vte_xft_destroy):
-		Ensure the GdkPixmap is destroyed along with the VteXft
-		context.
-
-2007-09-26  Chris Wilson  
-
-	Bug 480735 – Underlining whitespace not reliable
-
-	Original patch by Steven Skovran.
-
-	I really must remember to run vttest more often. (And to work within
-	git-svn.)
-
-	* src/vte.c (vte_terminal_draw_rows):
-	    Do not skip spaces.
-
-2007-09-26  Chris Wilson  
-
-	Bug 480735 – Underlining whitespace not reliable
-
-	Original one-liner by Steven Skovran.
-
-	* src/vte.c (vte_terminal_draw_rows):
-	    Do not try to over zealously skip whitespace. The goal is
-	    to maintain the current run whilst avoiding adding spaces to
-	    the glyph sequence - so check the cell fully for attribute
-	    breaks and simply do not add it to the glyphs if it contains a
-	    space.
-
-2007-09-17  Behdad Esfahbod  
-
-	Released vte-0.16.9.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.9.
-	Bumped libtool version to 11:13:2.
-
-2007-09-05  Behdad Esfahbod  
-
-	* perf/vim.sh: Wait for keypress when done, so one can do
-	"vte -c ./vim.sh" and not lose the final numbers.
-
-	* src/vtepango.c (_vte_pango_destroy), (_vte_pango_start),
-	(_vte_pango_end), (_vte_pango_set_background_color),
-	(_vte_pango_set_background_image), (_vte_pango_clear),
-	(_vte_pango_set_text_font), (_vte_pango_get_using_fontconfig),
-	(_vte_pango_draw_text), (_vte_pango_draw_has_char),
-	(_vte_pango_draw_rectangle), (_vte_pango_fill_rectangle),
-	(_vte_pango_set_scroll):  General cleanup.  Also implement
-	_vte_pango_draw_has_char() using
-	pango_layout_get_unknown_glyphs_count() when available.
-
-2007-09-02  Behdad Esfahbod  
-
-	Bug 469862 – Handling of wrapped links in gnome-terminal is broken
-
-	* src/vteseq.c (vte_sequence_handler_ce): Reset soft_wrapped.
-
-2007-09-01  Chris Wilson  
-
-	cf Bug 469862 – Handling of wrapped links in gnome-terminal is broken
-
-	* src/vte.c (vte_terminal_get_text_range_maybe_wrapped):
-	    Revert the last character is in last column check as that
-	    behaviour is required to handle terminal resizing where the
-	    screen contents are not reconstructed (e.g. bash).
-
-2007-08-30  Chris Wilson  
-
-	Bug 471901 – troubles with pad
-
-	* src/vte-private.h:
-	* src/vte.c (_vte_invalidate_cells), (vte_terminal_draw_rows),
-	(vte_terminal_paint): Don't abuse VTE_PAD_WIDTH.
-
-2007-08-30  Chris Wilson  
-
-	Bug 469862 – Handling of wrapped links in gnome-terminal is broken
-
-	* src/vte.c (vte_terminal_get_text_range_maybe_wrapped):
-	    Check that the last character is in the last column before
-	    adding a newline for autowrapped lines.
-
-2007-08-30  Chris Wilson  
-
-	* MAINTAINERS: Add myself to the list, as Behdad had suggested some
-	time ago.
-
-2007-08-30  Chris Wilson  
-
-	Bug 153265 – Handle Sun Cut, Copy, Paste keys
-	Patch by Brian Cameron.
-
-	* doc/reference/tmpl/vte.sgml:
-	* src/vte.c (vte_terminal_class_init),
-	(vte_terminal_real_copy_clipboard), (vte_terminal_copy_clipboard),
-	(vte_terminal_real_paste_clipboard),
-	(vte_terminal_paste_clipboard):
-	* src/vte.h:
-	    Add key bindings for the special function keys.
-
-2007-08-30  Chris Wilson  
-
-	* src/vte.c (vte_terminal_draw_rows): Bad manipulation of patches
-	whilst attempting to apply the fix for Bug 434230 - net result was
-	that the correct code was being circumvented.
-
-2007-08-29  Chris Wilson  
-
-	Bug 471484 – vteapp resize weirdness
-
-	* src/vteapp.c (main): Distinguish between setting the geometry and
-	disabling the use of geometry hints. A regression when converting to
-	GOption based arguments.
-
-2007-08-27  Behdad Esfahbod  
-
-	Bug 470690 – Typo at src/vtexft.c "appropiate" should be "appropriate"
-
-	* src/vtexft.c (_vte_xft_open_font_for_char): Fix typo.
-
-2007-08-07  Behdad Esfahbod  
-
-	* MAINTAINERS: Add Userid field, remove Guilherme.
-
-2007-08-03  Chris Wilson  
-
-	Bug 434230 – Spaces are not underlined
-	Original patch by Santtu Lakkala.
-
-	* src/vte.c (vte_terminal_draw_rows): Only skip cells if we do not
-	need to draw on top.
-
-2007-08-03  Chris Wilson  
-
-	Bug 450069 – vte crash on removing a terminal tab
-
-	* src/vte.c (vte_terminal_emit_eof), (vte_terminal_queue_eof),
-	(vte_terminal_eof): Move the EOF emission to an idle handler so that
-	the source is inactive whilst the VteTerminal is finalized.
-
-2007-07-30  Behdad Esfahbod  
-
-	Released vte-0.16.8.
-
-	Quick followup release with no code changes, to fix missing
-	documentation index in the tarball.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.8.
-	Bumped libtool version to 11:12:2.
-
-2007-07-27  Behdad Esfahbod  
-
-	Released vte-0.16.7.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.7.
-	Bumped libtool version to 11:11:2.
-
-2007-07-27  Behdad Esfahbod  
-
-	Bug 337252 – ALT + Arrow keys don't work in irssi through gnome-terminal
-	Patch by James Bowes
-
-	* src/keymap.c (_vte_keymap_map), (is_cursor_key),
-	(_vte_keymap_key_add_key_modifiers):
-	* src/keymap.h:
-	* src/vte.c (vte_terminal_key_press):
-	Only switch to CSI for some cursor keys when in cursor app mode.
-
-2007-06-25  Chris Wilson  
-
-	Bug 448259 – Mapping for Ctrl-_
-	Patch by Andrey Melnikov.
-
-	* src/keymap.c: Add mapping for Ctrl-Minus.
-
-2007-06-25  Chris Wilson  
-
-	Bug 449809 – use python-config to get python includes
-	Patch by Sebastien Bacher.
-
-	* acinclude.m4: prefer python-config where available.
-
-2007-06-25  Chris Wilson  
-
-	Bug 450745 – VTE's response to CSI 2 1 t incorrectly formatted
-	Patch by Dale Sedivec.
-
-	* src/vteseq.c (vte_sequence_handler_window_manipulation): Restore
-	the missing 'L'.
-
-2007-06-21  Christian Persch  
-
-	* configure.in:
-	* src/Makefile.am: Move libtool versioning to configure so you just
-	have to update one file for releasing. See bug #396265 comment 17.
-
-2007-06-18  Behdad Esfahbod  
-
-	Released vte-0.16.6.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.6.
-
-	* src/Makefile.am: Bumped libtool version to 11:10:2.
-
-2007-06-12  Chris Wilson  
-
-	* src/vte.c (vte_terminal_set_size): Call gtk_widget_queue_resize()
-	after updating row/column count.
-
-2007-06-11  Behdad Esfahbod  
-
-	Bug 372743 – vte_terminal_set_colors doesn't work as advertised
-
-	* src/vte.c (vte_terminal_set_colors): Allow 24-color palettes.
-
-2007-06-09  Behdad Esfahbod  
-
-	Bug 445620 – Some characters shows different in different locales.
-	Patch from Zealot
-
-	* src/iso2022.c (_vte_iso2022_state_set_codeset): Update ambiguous
-	width.
-
-2007-06-04  Behdad Esfahbod  
-
-	Released vte-0.16.5.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.5.
-
-	* src/Makefile.am: Bumped libtool version to 11:9:2.
-
-2007-05-30  Chris Wilson  
-
-	fcrozat pointed out 'some strange "underline" line where cursor is
-	located and blinking'.
-
-	Also reported in bug 442688.
-
-	* src/vte.c (vte_terminal_draw_rows):
-	    Continuation of the previous commit: catch a couple more locations
-	    where we need to skip past the end of the line. The problem in
-	    this case was we tried to use some uninitialised variables whilst
-	    trying to draw the cell attributes.
-
-2007-05-28  Behdad Esfahbod  
-
-	Released vte-0.16.4.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.4.
-
-	* src/Makefile.am: Bumped libtool version to 11:8:2.
-
-2007-05-28  Chris Wilson  
-
-	uws noted on IRC that 'vte trunk does strange thingies with colors'
-
-	* src/vte.c (vte_terminal_draw_rows):
-	    When reaching the end-of-row be careful not to reset the
-	    current text attributes (color, underlining, etc).
-
-2007-05-25  Chris Wilson  
-
-	* src/vte.c (vte_terminal_expand_region),
-	(vte_terminal_paint_area):
-	    Only add the borders to the clear area.
-
-2007-05-23  Chris Wilson  
-
-	Bug 429278 – Cursor drawn strangely in joe
-
-	* src/vte.c (vte_terminal_expand_region),
-	(vte_terminal_paint_area):
-	    Ensure the expanded regions are cell aligned.
-
-2007-05-23  Chris Wilson  
-
-	cf Bug 439247 – scrolling vim in full screen is painfully slow and takes up 100% of the cpu
-
-	* src/vte.c (vte_terminal_draw_rows):
-	    Fix up the unwanted break of Glyph runs at the end-of-lines.
-
-2007-05-23  Chris Wilson  
-
-	Bug 440475 – Display glitch with transparent backgroud
-
-	* src/vte.c (vte_terminal_paint_area):
-	    Apply the band-aid fix to clear the area that's about to be
-	    repainted. The full solution will to be ensure that the regions
-	    after expansion are cell-aligned.
-
-2007-05-22  Chris Wilson  
-
-	Bug 375112 – ctrl-key combinations yielding just key
-	Original patch by  and refactored by Loïc Minier.
-
-	* src/vte.c (vte_translate_national_ctrlkeys),
-	(vte_terminal_key_press):
-	    When cooking a string to pass through to the client obtain the
-	    "raw" keyval.
-
-2007-05-22  Chris Wilson  
-
-	Bug 440377 – gnome-terminal cannot refresh terminal when accessibility enabled
-	Original patch by Li Yuan.
-
-	* src/vteaccess.c (vte_terminal_accessible_focus_in),
-	(vte_terminal_accessible_focus_out),
-	(vte_terminal_accessible_visibility_notify):
-	    Return FALSE rather than void...
-
-2007-05-17  Chris Wilson  
-
-	* perf/scroll.vim:
-	* perf/vim.sh:
-	    Measure full screen scrolling performance.
-
-2007-05-15  Chris Wilson  
-
-	kmaraas reported an issue on IRC where the scrollback was not being
-	updated correctly in the first tab when the terminal was resized via
-	a second tab.
-
-	* src/vte.c (vte_terminal_size_allocate): Check whether we need to
-	recompute the visible lines due to a change in layout geometry.
-
-2007-04-27  Chris Wilson  
-
-	Bug 433776 – gnome-terminal crashes when open preedit area
-	Take 2.
-
-	* src/vte.c (vte_terminal_paint): The preedit_cursor is returned by
-	the input modules in characters not in bytes as assumed by the
-	validation.
-
-2007-04-27  Chris Wilson  
-
-	Bug 433776 – gnome-terminal crashes when open preedit area
-
-	* src/vte.c (vte_terminal_paint): Use the validated cursor index.
-
-2007-04-27  Behdad Esfahbod  
-
-	Released vte-0.16.3.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.3.
-
-	* src/Makefile.am: Bumped libtool version to 11:7:2.
-
-2007-04-24  Chris Wilson  
-
-	Bug 429189 – Vte-WARNING's
-
-	* src/vtexft.c (_vte_xft_open_font_for_char):
-		Convert the warning into a DEBUG.
-
-2007-04-24  Chris Wilson  
-
-	Bug 415044 – Use --enable-debug rather than --enable-debugging
-
-	As noted on Bug 414716, the convention is to use --enable-debug
-	to enable extra debugging code.
-
-	* configure.in:
-		s/debugging/debug/
-
-2007-04-24  Chris Wilson  
-
-	Bug 414716 – Refresh issue after changing workspaces
-
-	* src/vte.c (vte_terminal_hierarchy_changed):
-		Do not respond to toplevel mapping events.
-
-2007-04-23  Behdad Esfahbod  
-
-	Released vte-0.16.2.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.2.
-
-	* src/Makefile.am: Bumped libtool version to 11:6:2.
-
-2007-04-23  Chris Wilson 
-
-	Bug 431799 – Regex highlighting is broken
-
-	* src/vte.c (vte_terminal_emit_contents_changed),
-	(vte_terminal_match_hilite_update), (process_timeout),
-	(update_repeat_timeout), (update_timeout):
-		Always emit any pending updates before redrawing. This
-		ensures for example that the match contents are updated
-		after a simple scroll event.
-
-2007-04-20  Chris Wilson  
-
-	* src/vtexft.c (_vte_xft_start), (_vte_xft_clip):
-		Optimise away the use of a clip mask for the common case
-		of redrawing the whole terminal.
-
-2007-04-17  Behdad Esfahbod  
-
-	* src/iso2022.c (_vte_iso2022_ambiguous_width): Consider
-	ambiguous-width chars if VTE_CJK_WIDTH env var is set and we are
-	under a CJK locale.
-
-2007-03-12  Behdad Esfahbod  
-
-	Released vte-0.16.1.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.1.
-
-	* src/Makefile.am: Bumped libtool version to 11:5:2.
-
-2007-04-06  Chris Wilson  
-
-	Bug 426870 – vte often passes NUL to functions requiring valid unichar
-
-	* src/vte.c (_vte_invalidate_cell), (_vte_invalidate_cursor_once),
-	(vte_terminal_paint):
-		Consistently guard against cell->c == '\0' before calling
-		_vte_draw_get_char_width.
-
-2007-04-06  Chris Wilson  
-
-	Bug 419644 – Links do not get highlighted anymore
-	Also see Bug 404757 – URL matching doesn't work with PCRE
-
-	* configure.in:
-		Kill --with-pcre as it changes the semantics of the API
-		and only causes confusion.
-
-2007-04-05  Chris Wilson  
-
-	Bug 426541 – crash on IRM escape code
-
-	* src/vte.c (vte_terminal_ensure_cursor),
-	(_vte_terminal_insert_char):
-		Mishandled insertion - we always extended the row for
-		inserts even though the row would automagically extend
-		for the inserted cells. This lead to referencing
-		uninitialised cells at the end of the row during painting.
-	* src/vte.c (vte_terminal_draw_rows):
-		Retrieve the cell before inspecting it.
-
-2007-04-04  Chris Wilson  
-
-	Bug 424184 – Make scroll wheel send Page Up/Down when it makes sense
-
-	Original patch by Shaun McCance and refined by Baris Cicek.
-
-	* src/vte.c (vte_terminal_scroll):
-		Send cursor keypress instead of trying to scroll the
-		alternate screen in vain.
-
-2007-04-03  Chris Wilson  
-
-	Bug 425767 – vte_terminal_set_color_highlight should test for
-	NULL before _vte_debug_print
-
-	* src/vte.c (vte_terminal_set_color_cursor),
-	(vte_terminal_set_color_highlight):
-		Differentiate between set/unset paths.
-
-2007-03-25  Chris Wilson 
-
-	Bug 422385 – vte appears at the top of the root window even when
-	packed at the bottom of it
-
-	Patch by Dodji Seketeli.
-
-	* src/vte.c (vte_terminal_size_allocate), (vte_terminal_realize):
-		Honour the allocated position when realizing the widget.
-
-2007-03-22  Chris Wilson  
-
-	* src/vtexft.c (_vte_xft_draw_text):
-		Insert spaces into the Xft glyph stream to avoid the
-		overhead of restarting a glyph sequence for every word.
-
-2007-03-21  Chris Wilson  
-
-	Bug 420935 – glyph can be cropped with not fitting in a cell
-
-	* src/vte.c (vte_terminal_paint):
-		Don't redraw the invisible cursor 
-		- avoids nasty artifacts like clipping extra wide glyphs.
-
-2007-03-19  Chris Wilson  
-
-	* src/vte.c (vte_terminal_scroll_pages):
-		Leave 'contents-change' to the scroll handler.
-
-2007-03-19  Chris Wilson  
-
-	* src/vte.c (vte_terminal_extend_selection),
-	(vte_terminal_draw_rows):
-		Accidentally inverted an is-empty? check during the 
-		elimination of the empty bitfield.
-
-2007-03-19  Chris Wilson  
-
-	Bug 420067 – Does not handle expose events whilst processing
-	unseen incoming data
-
-	* src/vte.c (vte_terminal_expose):
-		Handle the expose immediately if we are only processing
-		incoming data (ie no redraws pending).
-
-2007-03-16  Chris Wilson  
-
-	* 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  
-
-	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  
-
-	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  
-
-	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:
-
-2007-03-16  Chris Wilson  
-
-	Need to trigger update timeout rather than process timeout
-	otherwise the background is not updated.
-
-	* src/vte.c (vte_terminal_queue_adjustment_changed),
-	(vte_terminal_queue_adjustment_value_changed):
-
-2007-03-16  Chris Wilson  
-
-	* src/vtexft.c (_vte_xft_create), (_vte_xft_destroy),
-	(_vte_xft_start), (_vte_xft_end), (_vte_xft_clip),
-	(_vte_xft_clear): Avoid some allocations.
-
-2007-03-16  Chris Wilson  
-
-	Bug 418073 – Opacity ignored for vtexft
-
-	* src/vte.c:
-	* src/vtedraw.c (_vte_draw_requires_clear):
-	* src/vtedraw.h:
-	* src/vteft2.c (_vte_ft2_set_background_image):
-	* src/vtegl.c (_vte_gl_create), (_vte_gl_set_background_image):
-	* src/vtepango.c (_vte_pango_set_background_image):
-	* src/vtepangox.c (_vte_pango_x_set_background_image):
-	* src/vtexft.c (_vte_xft_set_background_color),
-	(_vte_xft_set_background_image):
-		Flood fill the backing pixmap if we need to change it's
-		opacity as well.
-
-2007-03-16  Chris Wilson  
-
-	Bug 418910 – Asymmetric scrolling with mouse wheel
-
-	* configure.in:
-	* src/vte.c: Round-up the delta before applying to ensure consistency
-	between up and down.
-
-2007-03-16  Chris Wilson  
-
-	* src/vte.c (vte_terminal_catch_child_exited), (vte_terminal_eof),
-	(vte_terminal_process_incoming): Refactor some common code.
-
-2007-03-16  Chris Wilson  
-
-	Bug 416634 – Rendering glitch as autowrapped chars are outside invalidated bbox
-
-	* src/vte.c (_vte_terminal_insert_char),
-	(vte_terminal_process_incoming): Correctly update bbox after
-	autowrapping.
-
-2007-03-16  Chris Wilson  
-
-	Bug 416635 – Rendering glitch: double draw of line below exposed region
-
-	* src/vte.c (vte_terminal_expand_region),
-	(vte_terminal_paint_area): Kill a couple of off-by-ones.
-
-2007-03-16  Chris Wilson  
-
-	Bug 418588 – Invalid read when drawing preedit cursor
-
-	* src/vte.c (vte_terminal_paint):
-		No need to read what is drawn and furthermore isn't allocated.
-
-2007-03-16  Chris Wilson  
-
-	Bug 417652 – Scrolling bug exposed by nvi
-
-	* src/vte.c (vte_terminal_insert_rows), (_vte_terminal_ensure_row),
-	(vte_terminal_ensure_cursor), (_vte_terminal_update_insert_delta):
-		Ensure the rows before updating the insert delta and refactor
-		the common code.
-
-2007-03-16  Chris Wilson  
-
-	Bug 417301 – Terminal widgets don't respond to DPI changes
-
-	* src/vte.c (vte_terminal_fc_settings_changed): Force a font reload
-	after XFT settings have changed.
-
-2007-03-12  Behdad Esfahbod  
-
-	Released vte-0.16.0.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.16.0.
-
-	* src/Makefile.am: Bumped libtool version to 11:4:2.
-
-2007-03-06  Chris Wilson  
-
-	* src/vteseq.c (vte_sequence_handler_cm), (vte_sequence_handler_sf):
-		More work to match mutt's behaviour under xterm.
-
-2007-03-05  Chris Wilson  
-
-	* src/vte.c (vte_terminal_io_read):
-		Use the process estimate to load balance between multiple
-		active terminals.
-
-2007-03-05  Chris Wilson  
-
-	* src/vteseq.c (vte_sequence_handler_cm),
-	(vte_sequence_handler_dc), (vte_sequence_handler_sf),
-	(vte_sequence_handler_cursor_character_absolute):
-		Tweak the fill of painted cells to match mutt's behaviour
-		under xterm.
-
-2007-03-05  Chris Wilson  
-
-	Bug 414716 – gnome-terminal-2.17.92: terminal window dies...
-
-	* src/vte.c (vte_terminal_map_toplevel),
-	(vte_terminal_hierarchy_changed):
-		Force the visibility state to unobscured after the toplevel is
-		remapped.
-
-2007-03-05  Chris Wilson  
-
-	* src/vte.c (vte_terminal_size_allocate):
-		Note to self: Never try to optimize away the redraw.
-
-2007-03-05  Chris Wilson  
-
-	* src/vte.c (_vte_terminal_insert_char):
-	* src/vtedraw.c (_vte_draw_text), (_vte_draw_char),
-	(_vte_draw_fill_rectangle), (_vte_draw_draw_rectangle):
-		Touch up whitespace in debug output.
-
-2007-03-05  Chris Wilson  
-
-	* src/vte.c (_vte_invalidate_cells), (vte_terminal_set_visibility),
-	(vte_terminal_paint_area), (vte_terminal_expose):
-		Make sure the invalidated_all flag is cleared in the expose
-		event if we handle it immediately.
-
-2007-03-05  Chris Wilson  
-
-	* src/vteseq.c (vte_sequence_handler_ce),
-	(vte_sequence_handler_clear_current_line):
-		Fixup invalidation to end-of-line.
-
-2007-03-05  Chris Wilson  
-
-	cf Bug 414586 – Terminal screen blinks when menu is opened for the first time
-
-	* src/vte.c (vte_terminal_draw_rows), (vte_terminal_expand_region):
-		Include the window padding when painting the cell backgrounds.
-
-2007-03-05  Chris Wilson  
-
-	Bug 414586 – Terminal screen blinks when menu is opened for the first time
-
-	Avoid resetting the window background colour when the style is reset.
-	Avoid clearing the window if we are using a simple color and double
-	bufferring (i.e when we know we are using a pre-cleared pixmap).
-
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_init), (vte_terminal_size_allocate),
-	(vte_terminal_unrealize), (vte_terminal_realize),
-	(vte_terminal_paint_area), (vte_terminal_expose),
-	(vte_terminal_class_init), (vte_terminal_background_update):
-	* src/vtedraw.c (_vte_draw_has_background_image):
-	* src/vtedraw.h:
-	* src/vteft2.c (_vte_ft2_set_background_image):
-	* src/vtegl.c (_vte_gl_set_background_image):
-	* src/vtepango.c (_vte_pango_set_background_image):
-	* src/vtepangox.c (_vte_pango_x_set_background_image):
-	* src/vtexft.c (_vte_xft_set_background_image):
-
-2007-03-05  Chris Wilson  
-
-	Bug 414586 – Terminal screen blinks when menu is opened for the first time
-
-	* src/vte.c (_vte_invalidate_cells), (_vte_invalidate_all),
-	(vte_terminal_expose), (add_update_timeout):
-		Juggle the handling of external exposes/invalidates to avoid
-		delays in refreshing the display when we are idle.
-
-2007-03-05  Chris Wilson  
-
-	cf Bug 414586 – Terminal screen blinks when menu is opened for the first time
-
-	* src/vte.c (_vte_invalidate_cells), (vte_terminal_init),
-	(vte_terminal_expand_region), (vte_terminal_paint_area):
-		After enlarging the expand region make sure the dirty area
-		includes the border for edge cells.
-
-2007-03-04  Chris Wilson  
-
-	cf Bug 414586 – Terminal screen blinks when menu is opened for the first time
-
-	Distinguish between internal update requests and external. If we
-	need to update due to a user action (such as adjusting the background
-	or color palette) do not impose a futher delay.
-
-	Tidy the color palette modification code to not trigger invalidates if
-	we do not actually modify the palette.
-
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_set_color_internal),
-	(vte_terminal_set_color_bold), (vte_terminal_set_color_dim),
-	(vte_terminal_set_color_foreground),
-	(vte_terminal_set_color_background),
-	(vte_terminal_set_color_cursor),
-	(vte_terminal_set_color_highlight), (vte_terminal_set_colors),
-	(root_pixmap_changed_cb), (vte_terminal_set_background_saturation),
-	(vte_terminal_set_background_tint_color), (add_update_timeout):
-	* src/vteseq.c (vte_sequence_handler_ce),
-	(vte_sequence_handler_clear_current_line),
-	(vte_sequence_handler_clear_above_current):
-
-2007-03-02  Chris Wilson  
-
-	Bug 413068 – new line added to tab when opened
-
-	* src/vte.c (vte_terminal_size_allocate):
-		Replace the ill-conceived attempt (delta could not be
-		negative, so insert_delta or scroll_delta would not become
-		negative either) by only considering changes wrt to the number
-		of visible lines.
-
-2007-03-02  Chris Wilson  
-
-	Bug 413068 – new line added to tab when opened
-
-	* src/vte.c (_vte_terminal_insert_char):
-		Improve debug output.
-	* src/vte.c (vte_terminal_size_allocate):
-		Be careful that we don't force insert_delta or scroll_delta
-		to become negative.
-
-2007-03-01  Behdad Esfahbod  
-
-	Released vte-0.15.6.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.15.6.
-
-	* src/Makefile.am: Bumped libtool version to 11:3:2.
-
-2007-03-01  Chris Wilson  
-
-	* src/vte.c (vte_terminal_draw_cells), (vte_terminal_draw_rows),
-	(vte_terminal_paint):
-		Tweak the clear widths to include the pixel widening due to
-		psuedo-bold.
-
-2007-03-01  Chris Wilson  
-
-	* src/vte-private.h:
-	* src/vte.c (_vte_terminal_ensure_row),
-	(vte_terminal_ensure_cursor), (_vte_terminal_insert_char):
-	* src/vteseq.c (vte_sequence_handler_ta):
-		Be more careful when filling in gaps.
-
-2007-03-01  Chris Wilson  
-
-	Fix X11 headers / libraries detection on bi-arch systems.
-	Patch by Frederic Crozat.
-
-	* configure.in:
-		Check for x_includes before ac_x_includes, and similary for
-		ac_x_libraries.
-
-2007-03-01  Chris Wilson  
-
-	Bug 410534 – Slow content scrolling, takes 100% of CPU.
-
-	* src/vtexft.c:
-		Further reduce the cap to 80 after more testing on the
-		broken fglrx driver.
-
-2007-02-28  Chris Wilson  
-
-	Bug 413068 – new line added to tab when opened
-
-	* src/vte.c (vte_terminal_ensure_font), (vte_terminal_realize):
-		Beware when no font is set before the first request...
-		Make sure that at least the default font is set.
-
-2007-02-28  Chris Wilson  
-
-	Bug 413262 – Incorrectly coloured tabs
-
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_ensure_cursor),
-	(_vte_terminal_ensure_cursor), (_vte_terminal_insert_char),
-	(_vte_terminal_feed_chunks), (vte_terminal_set_scrollback_lines):
-	* src/vteseq.c (vte_sequence_handler_ta),
-	(vte_sequence_handler_request_terminal_parameters),
-	(vte_sequence_handler_return_terminal_status),
-	(vte_sequence_handler_send_primary_device_attributes):
-		Fill the tab in the current color, else it will be filled at
-		the time of writing the next character.
-
-2007-02-28  Chris Wilson  
-
-	Bug 413102 – Incorrect highlighting in vim
-
-	* src/vte-private.h:
-	* src/vte.c (_vte_terminal_ensure_row),
-	(_vte_terminal_insert_char):
-	* src/vteseq.c(vte_sequence_handler_cb),
-	(vte_sequence_handler_ce), (vte_sequence_handler_cr),
-	(vte_sequence_handler_ec), (vte_sequence_handler_sf):
-		Paint the row background when scrolling, this more closely
-		matches xterm's behaviour.
-
-2007-02-28  Chris Wilson  
-
-	Bug 413158 – Cursor trails
-
-	* src/vte.c (_vte_invalidate_cell):
-		_vte_invalidate_cell() can be called to invalidate any visible
-		cell so issue the invalidate even for blank cells.
-
-2007-02-28  Chris Wilson  
-
-	* src/vte.c (_vte_terminal_insert_char):
-		Correct the OBO in the number of columns ensured.
-
-2007-02-28  Chris Wilson  
-
-	Bug 413078 – Crash during opening a new tab whilst scrolling
-	
-	During input processing it was possible to both remove the timeout and
-	then add a new one. The currently running timeout would believe that
-	it was to continue since the terminal was still active, and so *two*
-	timeouts would be scheduled. Occasionally the second timeout would be
-	called after the first had finished all the work, resulting in the
-	second timeout trying to access a NULL active_terminal list.
-
-	* src/vte.c (add_update_timeout), (remove_from_active_list),
-	(vte_terminal_add_process_timeout), (need_processing),
-	(process_timeout), (update_repeat_timeout), (update_timeout):
-		Watch for recursive g_source_remove() from within timeouts.
-
-2007-02-28  Chris Wilson  
-
-	Bug 410534 – Slow content scrolling, takes 100% of CPU.
-
-	Submitting long glyph runs was causing a dramatic (10x) slow down
-	in the fglrx xserver.
-
-	* src/vtedraw.h:
-	* src/vtexft.c(_vte_xft_draw_text):
-		Cap the max glyph run length to 300.
-
-2007-02-28  Chris Wilson  
-
-	Bug 412717 – Crash when opening a new tab with window maximized
-
-	* src/vte.c (vte_terminal_size_allocate):
-		We didn't carefully check the values we were clamping the
-		cursor to and ended up setting it to -1...  Don't do that!
-
-2007-02-27  Chris Wilson  
-
-	* src/vteaccess.c (vte_terminal_accessible_text_scrolled):
-		Consistently guard against the snapshot being NULL.
-
-2007-02-27  Behdad Esfahbod  
-
-	Released vte-0.15.5.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.15.5.
-
-	* src/Makefile.am: Bumped libtool version to 11:2:2.
-
-2007-02-27  Chris Wilson  
-
-	Bug 412562 – Crash in vte_terminal_match_hilite_update
-
-	* src/vte.c (vte_terminal_match_check_internal),
-	(vte_terminal_process_incoming), (_vte_terminal_feed_chunks),
-	(vte_terminal_paste_cb), (vte_terminal_match_hilite_update),
-	(vte_terminal_copy_cb):
-		Fixup a few 64bit-isms, notably format strings and an
-		undesired unsigned integer promotion causing this crash.
-
-2007-02-27  Chris Wilson  
-
-	Bug 410986 – Fails to build with -z defs
-
-	If you link the vtemodule.so to libpython, then programs importing
-	vte will have the symbols twice in memory: one set from python and
-	the other from libpython.
-
-	* configure.in:
-	* python/Makefile.am:
-		Remove PYTHON_LIBS from linking vtemodule.so.
-		Convert unresolved symbol errors into warnings so that
-		building with -Wl,-z,defs continues to work. This is a 
-		*hack* as it hides real errors if you are updating
-		vte.{def,override}.
-		
-2007-02-27  Chris Wilson  
-
-	* src/vtexft.c	(_vte_xft_open_font_for_char),
-	(_vte_xft_font_for_char), (_vte_xft_compute_char_width),
-	(_vte_xft_char_width), (_vte_xft_start), (_vte_xft_get_char_width),
-	(_vte_xft_draw_text):
-		Avoid some computations whilst drawing text.
-
-2007-02-26  Behdad Esfahbod  
-
-	Released vte-0.15.4.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.15.4.
-
-	* src/Makefile.am: Bumped libtool version to 11:1:2.
-
-2007-02-26  Chris Wilson  
-
-	Bug 410986 – Fails to build with -z defs
-
-	The forgotten half - the python module also fails to link.
-
-	* acinclude.m4:
-	* python/Makefile.am:
-		Add PYTHON_LIBS pointing to the customary location and
-		remember to include them when compiling vtemodule.so.
-
-2007-02-26  Chris Wilson  
-
-	Bug 412361 – Yet another mouse selection regression...
-	Part 2.
-
-	* src/vte.c: (vte_terminal_queue_adjustment_value_changed),
-	(_vte_terminal_adjust_adjustments_full),
-	(vte_terminal_scroll_pages), (vte_terminal_autoscroll),
-	(vte_terminal_size_allocate), (vte_terminal_scroll):
-		We implicitly used a bit of sanity checking when setting the
-		adjustment value. Ensure the value really is within the
-		adjustment range before updating scroll_delta.
-
-2007-02-26  Chris Wilson  
-
-	Bug 412361 – Yet another mouse selection regression...
-	Part 1.
-
-	* src/vte.c: (vte_terminal_draw_rows):
-		Restore drawing of the selection below the text.
-
-2007-02-26  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_class_init), (time_process_incoming),
-	(process_timeout), (update_repeat_timeout), (update_timeout):
-		Update max number of processable bytes each time we call
-		vte_terminal_process_incoming().
-
-2007-02-26  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_emit_adjustment_changed),
-	(_vte_terminal_adjust_adjustments_full):
-		Refactor the common code.
-
-2007-02-26  Chris Wilson  
-
-	Push a couple of NULL checks to the callers so to be able to move them
-	outside of the inner-most loops.
-
-	* src/vte.c: (_vte_row_data_find_charcell), (_vte_invalidate_cell),
-	(_vte_terminal_adjust_adjustments),
-	(vte_terminal_get_text_range_maybe_wrapped), (find_start_column),
-	(find_end_column), (vte_terminal_draw_rows):
-
-2007-02-26  Chris Wilson  
-
-	Some applications, such as cat, dump as much data to the terminal as
-	possible. In these scenarios it is likely that we will read data from
-	the child much faster than we can process it and the refresh will
-	stutter.
-
-	The ideal solution would be to speed up the data processing so that
-	this overrun was impossible. However, the approach taken here is to
-	estimate how much data we can actually process in our time slice and
-	to stop reading once we have sufficient data.
-
-	* src/vte-private.h:
-	* src/vte.c: (_vte_invalidate_all),
-	(vte_terminal_emit_contents_changed),
-	(vte_terminal_match_contents_clear),
-	(vte_terminal_match_contents_refresh),
-	(vte_terminal_emit_adjustment_changed),
-	(_vte_terminal_adjust_adjustments), (vte_terminal_scroll_pages),
-	(vte_terminal_catch_child_exited), (vte_terminal_eof),
-	(vte_terminal_process_incoming), (vte_terminal_io_read),
-	(vte_terminal_handle_scroll), (vte_terminal_init),
-	(vte_terminal_size_allocate), (need_processing), (process_timeout),
-	(update_repeat_timeout), (update_timeout):
-	* src/vteseq.c: (vte_sequence_handler_decset_internal):
-
-2007-02-26  Chris Wilson  
-
-	Bug 411000 – Orca repeats old text in gnome-terminal
-
-	The deferred handling of the window scrolling had the unfortunate
-	side-effect of postponing the accessibility 'text-scrolled' signal
-	until after the 'text-inserted' signal. This caused vteaccess to
-	determine that the whole window had been modified and cause orca to
-	reread the entire screen.
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_emit_contents_changed),
-	(_vte_terminal_queue_contents_changed),
-	(vte_terminal_emit_cursor_moved),
-	(vte_terminal_queue_cursor_moved), (vte_terminal_scroll_pages),
-	(vte_terminal_eof), (vte_terminal_emit_pending_text_signals),
-	(vte_terminal_process_incoming), (vte_terminal_handle_scroll),
-	(vte_terminal_size_allocate), (vte_terminal_unrealize),
-	(vte_terminal_emit_pending_signals):
-	* src/vteaccess.c: (emit_text_caret_moved),
-	(emit_text_changed_insert), (emit_text_changed_delete):
-	* src/vteseq.c: (vte_sequence_handler_decset_internal):
-		Restore the order of the ally signals. However, Bug 372777
-		remains unresolved.
-
-2007-02-26  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_io_read):
-		Eeek, correctly compute the buffer length when we no longer
-		aim to fill it.
-
-2007-02-26  Chris Wilson  
-
-	Use a separate debug flag for the ally interface.
-
-	* src/debug.c: (_vte_debug_parse_string):
-	* src/debug.h:
-	* src/vteaccess.c:
-	(vte_terminal_accessible_update_private_data_if_needed),
-	(vte_terminal_accessible_invalidate_cursor),
-	(vte_terminal_accessible_finalize),
-	(vte_terminal_accessible_get_text),
-	(vte_terminal_accessible_get_text_somewhere),
-	(vte_terminal_accessible_text_init),
-	(vte_terminal_accessible_component_init),
-	(vte_terminal_accessible_action_init),
-	(vte_terminal_accessible_factory_new):
-
-2007-02-26  Chris Wilson  
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_io_read):
-		And finally clamp the maximum number of bytes transferred in
-		a single chunk.
-
-2007-02-24  Chris Wilson  
-
-	* src/vte.c:
-		Hint that the compiler should inline
-		vte_terminal_determine_colors().
-
-2007-02-24  Chris Wilson  
-
-	cf Bug 410534 – Slow content scrolling, takes 100% of CPU.
-	cf Bug 410463 – Poor interactive performance with multiple terminals
-
-	* src/vte.c: (vte_terminal_io_read):
-		Do not loop whilst reading in a backlog of child data - should
-		help prevent monopolisation of vte by a single child and make
-		vte more responsive to user input on slower computers.
-
-2007-02-24  Chris Wilson  
-
-	Bug 159078 – slow highlight
-
-	Do not update the match hilite during a selection-drag.
-	Record unsuccesful regex matches, so we can quickly determine whether
-	the cursor is still inside the blank region.
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_match_check_internal),
-	(rowcol_inside_match), (vte_terminal_match_check),
-	(_vte_terminal_set_pointer_visible),
-	(vte_terminal_match_hilite_clear),
-	(vte_terminal_match_hilite_show), (vte_terminal_match_hilite_hide),
-	(vte_terminal_match_hilite_update), (vte_terminal_match_hilite),
-	(vte_terminal_motion_notify), (vte_terminal_button_press),
-	(vte_terminal_focus_in), (vte_terminal_focus_out),
-	(vte_terminal_enter), (vte_terminal_leave), (vte_terminal_init),
-	(vte_terminal_unrealize), (vte_terminal_draw_rows),
-	(vte_terminal_paint):
-
-2007-02-23  Chris Wilson  
-
-	A couple of compiler warnings and avoid unnecessary arithmetic.
-
-	* src/vte.c: (_vte_terminal_set_default_attributes),
-	(find_start_column), (find_end_column),
-	(vte_terminal_start_selection), (vte_terminal_extend_selection),
-	(vte_terminal_draw_rows), (vte_terminal_paint):
-	* src/vtexft.c: (_vte_xft_font_open), (_vte_xft_font_for_char),
-	(_vte_xft_char_width), (_vte_xft_unlock_fonts), (_vte_xft_start),
-	(_vte_xft_clip), (_vte_xft_set_text_font), (_vte_xft_draw_text):
-
-2007-02-23  Chris Wilson  
-
-	Bug 411276 – SVN trunk compilation error
-	Part 2.
-
-	* configure.in:
-		Check that the header file defines FcStrFree before checking
-		for the availability of the function. Complete hack, but
-		appears to work.
-
-2007-02-23  Chris Wilson  
-
-	Bug 411276 – SVN trunk compilation error
-
-	* configure.in:
-		Ubuntu Edgy appears to have a broken fontconfig-dev package
-		where the function is exported from the library but is missing
-		the corresponding prototypes.
-		So we reorder the determination of the compilation flags
-		before checking for available functions in the hope that the
-		tests will then match the results at compile time.
-
-2007-02-23  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_io_read):
-		Prevent a deadlock on recursively grabbing the gdk_mutex.
-
-2007-02-23  Chris Wilson  
-
-	Heuristic to avoid a read when it's likely to just return EAGAIN.
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_io_read), (process_timeout),
-	(update_repeat_timeout), (update_timeout):
-
-2007-02-23  Chris Wilson  
-
-	Add a new debug flag to monitor draw operations.
-	Don't issue individual glyphs for is_local_graphic() in the middle of
-	a run.
-
-	* src/debug.c: (_vte_debug_parse_string):
-	* src/debug.h:
-	* src/vte.c: (vte_terminal_unichar_is_local_graphic),
-	(vte_terminal_draw_rows), (vte_terminal_paint):
-	* src/vtedraw.c: (_vte_draw_init_user), (_vte_draw_init_default),
-	(_vte_draw_new), (_vte_draw_free), (_vte_draw_get_visual),
-	(_vte_draw_get_colormap), (_vte_draw_start), (_vte_draw_end),
-	(_vte_draw_set_background_color), (_vte_draw_set_background_image),
-	(_vte_draw_requires_repaint), (_vte_draw_clip), (_vte_draw_clear),
-	(_vte_draw_set_text_font), (_vte_draw_get_text_width),
-	(_vte_draw_get_text_height), (_vte_draw_get_text_ascent),
-	(_vte_draw_get_char_width), (_vte_draw_get_using_fontconfig),
-	(_vte_draw_text), (_vte_draw_char), (_vte_draw_has_char),
-	(_vte_draw_fill_rectangle), (_vte_draw_draw_rectangle),
-	(_vte_draw_set_scroll):
-	* src/vtedraw.h:
-	* src/vteft2.c: (_vte_ft2_draw_has_char):
-	* src/vtegl.c: (_vte_gl_draw_has_char):
-	* src/vtepango.c: (_vte_pango_draw_has_char):
-	* src/vtepangox.c: (_vte_pango_x_draw_has_char):
-	* src/vteskel.c: (_vte_skel_draw_has_char):
-	* src/vtexft.c: (_vte_xft_draw_has_char):
-
-2007-02-23  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_draw_rows):
-		Don't break a glyph run for a graphic, issue the draw
-		and continue.
-
-2007-02-23  Chris Wilson  
-
-	Cache the font metrics on the vte_xft_font, avoids having to remeasure
-	when opening a new terminal.
-
-	* src/vtexft.c: (_vte_xft_font_open), (_vte_xft_set_text_font):
-
-2007-02-23  Chris Wilson  
-
-	Share XftFonts between terminal backends and preserve faces from the
-	previous draw - helps prevents font cache thrashing inside libXft.
-
-	* src/vtexft.c: (_vte_xft_font_hash), (_vte_xft_font_equal),
-	(_vte_xft_font_open), (_vte_xft_font_close),
-	(_vte_xft_font_for_char), (_vte_xft_unlock_fonts),
-	(_vte_xft_destroy), (_vte_xft_start), (_vte_xft_end),
-	(ptr_array_zeroed_new), (_vte_xft_set_text_font),
-	(_vte_xft_get_char_width), (_vte_xft_draw_text),
-	(_vte_xft_draw_char):
-
-2007-02-22  Chris Wilson  
-
-	Bug 410986 – Fails to build with -z defs
-	Patch by Loïc Minier.
-
-	* src/Makefile.am:
-		Add FreeType to the libs.
-
-2007-02-22  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_send):
-		Return in the face of error as we appear to hit this in the
-		wild.
-
-2007-02-22  Chris Wilson  
-
-	Bug 410819 – slider not correctly positioned after calling less
-
-	* src/vte.c: (_vte_terminal_adjust_adjustments),
-	(_vte_terminal_adjust_adjustments_full),
-	(vte_terminal_maybe_scroll_to_top), (vte_terminal_size_allocate),
-	(vte_terminal_set_scrollback_lines):
-	* src/vteseq.c: (vte_sequence_handler_decset_internal):
-		Fixup a lot of issues with changing the number of scrollback
-		lines, such as missing value_changed signals for the
-		scrollbar and a couple of missing CLAMPs.
-
-2007-02-22  Chris Wilson  
-
-	After adjusting the current profile, the last line gets chomped.
-
-	* src/vte.c: (vte_terminal_set_scrollback_lines):
-
-2007-02-21  Chris Wilson  
-
-	cf Bug 410534 – Slow content scrolling, takes 100% of CPU.
-
-	* src/vte.c: (vte_terminal_scroll),
-	(vte_terminal_set_scrollback_lines):
-		Operate on scroll delta directly as adjustment->value updates
-		are not instantaneous and we may have several scroll events
-		before the next update.
-
-2007-02-21  Chris Wilson  
-
-	Bug 410463 – Poor interactive performance with multiple terminals
-
-	* src/vte.c: (vte_terminal_io_read), (process_timeout),
-	(update_repeat_timeout):
-		When multiple terminals are active, poll the IO sources
-		from within the process/display timeout (akin to 
-		interrupt mitigation).
-		Return to normal interrupts when we only have a single active
-		terminal - so we don't sacrifice high performance.
-
-2007-02-21  Chris Wilson  
-
-	A small bit of callgrinding, avoid the modulus inside
-	vte_terminal_ensure_cursor() by caching the last row_data.
-
-	* src/iso2022.c: (process_cdata):
-	* src/ring.c: (_vte_ring_new), (_vte_ring_insert),
-	(_vte_ring_insert_preserve), (_vte_ring_remove):
-	* src/ring.h:
-	* src/table.c: (_vte_table_match):
-	* src/vte.c: (_vte_terminal_ensure_cursor),
-	(_vte_terminal_insert_char), (vte_terminal_process_incoming):
-
-2007-02-21  Chris Wilson  
-
-	Callgrind strikes again...
-	Inserting a char is a rare operation (especially in the scrolling
-	benchmark!) so only read the old cell during an insert. This wins
-	about 5% during a hexdump.
-
-	* src/iso2022.c: (_vte_iso2022_find_nextctl),
-	(_vte_iso2022_fragment_input), (process_cdata):
-	* src/vte.c: (_vte_terminal_insert_char):
-	* src/vteseq.c: (vte_sequence_handler_sf):
-
-2007-02-21  Chris Wilson  
-
-	RedHat Bug 113195: First line displayed incorrectly if prompt changes background color
-
-	e.g. PS1='\e[46m[\u@\h:\w]\e[m \e[45m'
-	The issue is when we insert a char on a new row and the background is
-	not the default, we fill the entire row with the *current* colour.
-	This behaviour is incorrect, and the fix is to fill to the end of the
-	line on a carriage return.
-
-	* src/vte-private.h:
-	* src/vte.c: (_vte_terminal_ensure_cursor),
-	(_vte_terminal_insert_char), (vte_terminal_process_incoming),
-	(vte_terminal_send):
-	* src/vteseq.c: (vte_sequence_handler_ce),
-	(vte_sequence_handler_cr), (vte_sequence_handler_cs),
-	(vte_sequence_handler_cS),
-	(vte_sequence_handler_cursor_lower_left),
-	(vte_sequence_handler_dc), (vte_sequence_handler_ic),
-	(vte_sequence_handler_sf):
-
-2007-02-20  Chris Wilson  
-
-	 RedHat Bug 123845: gnome-terminal not parsing cursor position escape sequence properly
-
-	* src/caps.c:
-	* src/vteseq.c: (vte_sequence_handler_cm):
-		Add 'ESC [ Pn H' to cursor-position and provide default
-		values.
-
-2007-02-19  Chris Wilson  
-
-	Bug 409055 – Terminal stays blank
-
-	Due to GTK+ coallescing of XExposeEvents it was possible for our
-	GdkExposeEvent to arrive before the GdkVisibilityEvent associated with
-	the mapping of our toplevel and so we discarded the event as we
-	believed we were still unviewable.
-
-	* src/vte.c: (_vte_invalidate_cells), (vte_terminal_expose),
-	(reset_update_regions):
-		Assume that all GdkExposeEvents have been checked for
-		suitability before delivery. We know this true for locally
-		generated expose events which are extensively checked during
-		invalidation, and we presume that X will not generate expose
-		events on unmapped or otherwise unviewable windows.
-
-2007-02-19  Chris Wilson  
-
-	* src/vte.c: (_vte_terminal_adjust_adjustments),
-	(_vte_terminal_adjust_adjustments_full):
-		Dead code elimination.
-
-2007-02-19  Chris Wilson  
-
-	* perf/random.sh:
-		A simple script to dump a fixed amount of random data to the
-		terminal.
-
-2007-02-19  Chris Wilson  
-
-	A few more trivial incremental improvements.
-
-	* src/Makefile.am:
-	* src/iso2022.c: (_vte_iso2022_map_get):
-		Switch to a VteTree.
-	* src/vte.c: (_vte_terminal_update_insert_delta),
-	(_vte_terminal_insert_char):
-		No need to ensure the cursor when scrolling, only before
-		insertions.
-	* src/vtexft.c: (_vte_xft_font_open), (_vte_xft_font_close),
-	(_vte_xft_font_for_char), (_vte_xft_end):
-		Lock the face over the entire expose.
-
-2007-02-19  Chris Wilson  
-
-	Improve handling of parallel 'cat /dev/urandom' - notably a crasher
-	in the table matcher, repeated g_getenv processing and wasted time
-	in g_tree_lookup.
-
-	* src/iso2022.c: (_vte_iso2022_ambiguous_width_guess),
-	(_vte_iso2022_map_init), (_vte_iso2022_map_get),
-	(process_8_bit_sequence), (process_cdata),
-	(_vte_iso2022_process_single), (_vte_iso2022_process):
-	* src/table.c: (_vte_table_match):
-	* src/vte-private.h:
-
-2007-02-19  Chris Wilson  
-
-	* src/vte.c: (update_timeout):
-		In conjunction with the previous fix, since the terminal
-		can be removed from the active list by
-		vte_terminal_process_incoming() we need to be careful whilst
-		iterating along the active list.
-
-2007-02-19  Chris Wilson  
-
-	 ickle: hi.. our kernel hacker just found a nice reproducible
-		crash in vte :)
-	 oh, joy
-	 very easy to reproduce
-		cat /dev/urandom
-	 	wait 2 or 3S
-	 	then press Ctrl-Shift-T to open a new tab
-	 	=> crash
-
-	* src/vte.c: (process_timeout), (update_repeat_timeout):
-		vte_terminal_process_incoming() can trigger a terminal reset
-		which will remove the terminal from the active list, and then
-		we attempt to remove it again after handling the incoming
-		data. The fix is simple - don't delete the link if the the
-		terminal is no longer active.
-
-2007-02-19  Chris Wilson  
-
-	As noticed on bug 409055, we do not receive a visibility-notify
-	event when we switch workspaces (or even when the window is iconified).
-	The workaround for this is to watch for our toplevel being unmapped
-	and set the fully-obscured flag.
-
-	* src/vte.c: (vte_terminal_configure_toplevel),
-	(vte_terminal_unmap_toplevel), (vte_terminal_hierarchy_changed),
-	(vte_terminal_set_visibility), (vte_terminal_visibility_notify):
-
-2007-02-19  Chris Wilson  
-
-	* src/vte.c: (visibility_state_str),
-	(vte_terminal_visibility_notify), (vte_terminal_init),
-	(vte_terminal_realize):
-		Add the visibility state to the debug output.
-
-2007-02-19  Chris Wilson  
-
-	* configure.in:
-		Add the configuration details to config.log as well.
-
-2007-02-19  Chris Wilson  
-
-	Bug 409241 – gnome-terminal crashed with SIGSEGV in vte_terminal_draw_graphic()
-
-	* src/vte.c: (vte_terminal_paint):
-		Lookup fore/back colours before attempting to draw the graphic
-		character behind the unfocused cursor.
-
-2007-02-19  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_visibility_notify):
-		Add VTE_DEBUG_EVENT info.
-
-2007-02-16  Chris Wilson  
-
-	Bug 407945 – "GNOME" Terminal" regression after "vte" update when using "csh"
-
-	When passing multiple versions of the same environment
-	variable to execve (i.e g_spawn) the result is undefined.
-	So we solve the ambiguity by using the application passed env to
-	override values from the current environment.
-	
-	* src/pty.c: (collect_variables), (merge_environ),
-	(_vte_pty_run_on_pty):
-
-2007-02-16  Chris Wilson  
-
-	Bug 408536 – trouble compiling vte 0.15.3
-
-	* configure.in:
-	* src/vtefc.c: (_vte_fc_patterns_from_pango_font_desc):
-		Check for availability of FcStrFree() - only used for
-		debugging purposes so we can live without it.
-
-2007-02-15  Chris Wilson  
-
-	Guard against a missing default number of rows or columns
-	inside the termcap.
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_set_emulation), (vte_terminal_init):
-
-2007-02-15  Chris Wilson  
-
-	Bug 408040 – vte automagic hyperlinks
-	Patch by Gilles Dartiguelongue.
-
-	* src/vteapp.c:
-		Correct the typo in the nntp protocol matcher.
-
-2007-02-14  Chris Wilson  
-
-	Bug 407839 – Use of environ breaks build on Solaris
-	Original patch by Damien Carbery.
-
-	* src/pty.c:
-		extern char **environ - glibc was 'conveniently' declaring
-		it for us...
-
-2007-02-13  Chris Wilson  
-
-	uws reported that scrolling inside screen with a status line was
-	broken. Indeed any scrolling inside an alternative screen was broken,
-	e.g. plain vim would not always update the topmost line. The issue was
-	the interaction with the deferred value-changed signal emission and
-	failing to correctly maintain the current scroll_delta. The fix is
-	that we always now apply changes to the scroll_delta and swap
-	scroll_delta with adjustment->value before the deferred signal
-	emission to correctly trigger the handle_scroll().
-
-	* src/vte-private.h:
-	* src/vte.c: (_vte_invalidate_cells),
-	(vte_terminal_emit_adjustment_changed),
-	(vte_terminal_queue_adjustment_value_changed),
-	(_vte_terminal_adjust_adjustments),
-	(_vte_terminal_adjust_adjustments_full),
-	(vte_terminal_maybe_scroll_to_bottom),
-	(vte_terminal_process_incoming), (vte_terminal_extend_selection),
-	(vte_terminal_handle_scroll), (vte_terminal_set_scrollback_lines):
-	* src/vteseq.c: (vte_sequence_handler_sf):
-
-2007-02-13  Chris Wilson  
-
-	Bug 407358 – regression in mouse selection
-
-	* src/vte.c: (vte_terminal_motion_notify):
-		When outside the terminal we used an uninitialised variable to
-		determine the mouse tracking mode.
-
-2007-02-12  Behdad Esfahbod  
-
-	Released vte-0.15.3.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.15.3.
-
-	* src/Makefile.am: Bumped libtool version to 11:0:2.
-
-2007-02-12  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_extend_selection),
-	(vte_terminal_motion_notify):
-		Restore autoscroll behaviour.
-
-2007-02-12  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_start_selection):
-		Invalidate the selected region when starting in
-		select-word or select-line mode.
-
-2007-02-12  Chris Wilson  
-
-	Restore double-click to select word behaviour, broken by r1671 as
-	the second click occurs in the same place as the first (obviously!).
-
-	* src/vte.c: (vte_terminal_extend_selection),
-	(vte_terminal_autoscroll), (vte_terminal_motion_notify),
-	(vte_terminal_button_press):
-
-2007-02-12  Chris Wilson  
-
-	Bug 407091 – vte_terminal_fork_command() env argument changed semantic in 0.15.2
-	Original patch by Michael Vogt.
-
-	* src/pty.c: (_vte_pty_run_on_pty):
-		Copy the current environment into the child's.
-
-2007-02-11  Chris Wilson  
-
-	Bug 323393 – Hyper-sensitive selection
-
-	* src/vte.c: (vte_terminal_extend_selection):
-		Don't start (or update) the selection until you
-		move off the current cell (character).
-
-2007-02-11  Chris Wilson  
-
-	Bug 406763 – Selecting double-wide characters
-
-	* src/vte.c: (start_column), (end_column),
-	(vte_terminal_start_selection), (vte_terminal_extend_selection),
-	(vte_terminal_draw_rows):
-		Extend selection to include fragment cells i.e. double-wide
-		characters.
-
-2007-02-10  Chris Wilson  
-
-	Have a separate adjust_adjustments for when we know that the page
-	size and step lengths may have changed.
-
-	* src/vte.c: (_vte_terminal_adjust_adjustments),
-	(_vte_terminal_adjust_adjustments_full),
-	(vte_terminal_set_scrollback_lines), (vte_terminal_reset):
-
-2007-02-10  Chris Wilson  
-
-	* src/vte.c: (_vte_terminal_adjust_adjustments),
-	(vte_terminal_size_allocate), (vte_terminal_set_scrollback_lines):
-		Prevent the display of garbage after resizing and switching
-		between alternate screens.
-		However, instead of displaying garbage after the cursor, we
-		lose some data above the current scroll delta, should we have
-		a full history.  Bizarre.
-
-2007-02-09  Chris Wilson  
-
-	* src/vte.c: (_vte_terminal_adjust_adjustments):
-		Do not allow to scroll past the last line after reducing
-		scrollback lines.
-	* src/vtexft.c: (_vte_xft_set_text_font):
-		Ensure a fallback height is set.
-
-2007-02-09  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_get_text_range_maybe_wrapped):
-		Reuse VteRowData whilst in the row.
-
-2007-02-09  Chris Wilson  
-
-	Rework to reduce number of times mutex is taken and shorten the hold.
-
-	* src/vte.c: (vte_terminal_queue_adjustment_changed),
-	(vte_terminal_queue_adjustment_value_changed),
-	(vte_terminal_io_read), (vte_terminal_paint),
-	(vte_terminal_add_process_timeout), (vte_terminal_is_processing),
-	(vte_terminal_start_processing):
-
-2007-02-09  Chris Wilson  
-
-	A number of small bug fixes...
-	- do not override the user setting of scrollback lines with the
-	terminal size.
-	- only set the current screen rather than both and so reset the
-	scrollback lines when we switch between normal and alternate.
-	- do not invalidate inside set_scrollback lines as setting does not
-	actually modify the on-screen contents.
-	- push the scroll-adjustment to the post-processing emission.
-	- queue timeouts on value change (should be a no-op)
-	- reorder emission so that scrolling occurs before invalidating the
-	window (ie so that the scroll happens this cycle, not next).
-
-	Still unsolved: the clamping of the cursor when switching between
-	alternate screens.
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_emit_adjustment_changed),
-	(vte_terminal_queue_adjustment_changed),
-	(vte_terminal_queue_adjustment_value_changed),
-	(_vte_terminal_adjust_adjustments), (vte_terminal_scroll_pages),
-	(vte_terminal_maybe_scroll_to_top),
-	(vte_terminal_maybe_scroll_to_bottom),
-	(_vte_terminal_ensure_cursor), (_vte_terminal_update_insert_delta),
-	(vte_terminal_process_incoming), (vte_terminal_extend_selection),
-	(vte_terminal_autoscroll), (vte_terminal_handle_scroll),
-	(vte_terminal_size_allocate), (vte_terminal_scroll),
-	(vte_terminal_background_update),
-	(vte_terminal_queue_background_update),
-	(vte_terminal_set_scrollback_lines), (vte_terminal_reset),
-	(add_process_timeout), (vte_terminal_add_process_timeout),
-	(vte_terminal_start_processing), (update_repeat_timeout),
-	(update_timeout):
-	* src/vteseq.c: (vte_sequence_handler_scroll_up_or_down),
-	(vte_sequence_handler_decset_internal), (vte_sequence_handler_al),
-	(vte_sequence_handler_dl), (vte_sequence_handler_sf),
-	(vte_sequence_handler_sr), (vte_sequence_handler_clear_screen),
-	(vte_sequence_handler_cursor_character_absolute),
-	(vte_sequence_handler_insert_lines),
-	(vte_sequence_handler_delete_lines),
-	(vte_sequence_handler_screen_alignment_test):
-
-2007-02-08  Chris Wilson  
-
-	* src/vteapp.c: (main): whitespace
-
-2007-02-08  Chris Wilson  
-
-	Bug 363597 – Scrollback in profile dialog doesn't work
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_init),
-		Only use SCROLLBACK_MIN during initialisation, so rename it
-		to SCROLLBACK_INIT.
-	(vte_terminal_set_scrollback_lines):
-		Remove MAX(lines, SCROLLBACK_MIN) and update code comments
-		to reduce confusion.
-
-2007-02-08  Mariano Suárez-Alvarez  
-
-	* src/vteapp.c(main): do something useful with --geometry.
-
-2007-02-08  Chris Wilson  
-
-	Use gtk_widget_get_(screen|display) which will itself return a default
-	if not currently attached.
-
-	* src/vtedraw.c: (_vte_draw_get_colormap):
-	* src/vtefc.c: (_vte_fc_defaults_from_gtk):
-	* src/vtegl.c: (_vte_gl_check), (_vte_gl_create),
-	(_vte_gl_destroy), (_vte_gl_start), (_vte_gl_end), (_vte_gl_clear),
-	(_vte_gl_draw_text), (_vte_gl_rectangle):
-	* src/vterdb.c: (_vte_rdb_get):
-	* src/vteseq.c: (vte_sequence_handler_window_manipulation):
-
-2007-02-08  Chris Wilson  
-
-	Some more callgrinding - kill a little bit of overhead.
-
-	* src/iso2022.c: (_vte_iso2022_sequence_length),
-	(_vte_iso2022_fragment_input), (process_control):
-	* src/matcher.c: (_vte_matcher_free_params_array):
-	* src/vteconv.c: (_vte_conv):
-
-2007-02-07  Chris Wilson  
-
-	Actually return whether or not we found the char in
-	_vte_xft_font_for_char - saves having to double check afterwards!
-
-	* src/vtexft.c: (_vte_xft_font_for_char), (_vte_xft_set_text_font),
-	(_vte_xft_draw_text):
-
-2007-02-07  Chris Wilson  
-
-	As spotted perusing roxterm, we fail to redraw after changing the text
-	colour.
-
-	* src/vte.c: (vte_terminal_set_color_internal):
-		Remember to invalidate all!
-
-2007-02-07  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_match_check_internal):
-		Scan for newlines before and after the current row
-		to find the entire line in case of soft-wrapping.
-
-2007-02-07  Chris Wilson  
-
-	Bug 345344 – Pattern matching is inefficient
-	Bug 324246 – Performance degredation with large numbers of highlighted addresses/URLs
-
-	* src/vte.c: (vte_terminal_match_check_internal):
-		Trim the searched string down to the row containing the
-		pointer. During a mutt session this drops the time consumed by
-		regexec from ~30% to ~2%.
-		Note: multi-line regexes are now unsupported!
-
-2007-02-07  Chris Wilson  
-
-	* src/vteseq.c: (_vte_sequence_get_handler):
-		Avoid the strlen when possible.
-
-2007-02-07  Chris Wilson  
-
-	Some cleanups and a bug...
-
-	vte_terminal_match_hilite() compared the current cell to the last
-	mouse position without a floor().
-
-	* src/vte.c: (vte_terminal_process_incoming),
-	(vte_terminal_match_hilite), (vte_terminal_select_all),
-	(vte_terminal_select_none), (vte_terminal_motion_notify),
-	(vte_terminal_button_press):
-
-2007-02-06  Chris Wilson  
-
-	Bug 86119 – "select all" feature
-	Original patch by Simone Gotti.
-
-	* src/vte.c: (vte_terminal_select_all), (vte_terminal_select_none):
-	* src/vte.h:
-		Add 2 new API entry points to select the entire contents
-		and clear the current selection.
-
-2007-02-06  Chris Wilson 
-
-	Bug 342059 – ASCII escape sequences don't work as expected
-	Correction by Mariano Suárez-Alvarez.
-
-	* src/vteseq.c: (vte_sequence_handler_cursor_character_absolute):
-		OBO on the parameter.
-
-2007-02-06  Chris Wilson  
-
-	Bug 342059 – ASCII escape sequences don't work as expected
-	Patch by Mariano Suárez-Alvarez.
-
-	* src/vteseq.c: (vte_sequence_handler_cursor_character_absolute):
-		Provide a default value.
-
-2007-02-06  Chris Wilson  
-
-	And finally as noted on bug 324246#c8 hide the hilite when the mouse
-	leaves the terminal (show again when it enters and let motion-notify
-	correct it later).
-
-	* src/vte.c: (vte_terminal_enter), (vte_terminal_leave),
-	(vte_terminal_realize), (vte_terminal_class_init):
-
-2007-02-06  Chris Wilson  
-
-	As noted on bug 324246#c8, hide the hilite when the focus disappears.
-	On focus restore the match for the last mouse coordinates and let
-	motion-notify take care of the rest.
-
-	* src/vte.c: (vte_terminal_match_hilite_update),
-	(vte_terminal_match_hilite), (vte_terminal_focus_in):
-
-2007-02-06  Chris Wilson  
-
-	Convert the exposed rectangles to cells and remerge them.
-
-	* src/vte.c: (vte_terminal_expand_region),
-	(vte_terminal_paint_area), (vte_terminal_paint):
-
-2007-02-06  Chris Wilson  
-
-	As noted on Bug 401052#c13, vte fails to completely clear the cell's
-	previous contents.
-
-	* src/vte.c: (_vte_invalidate_cells):
-		Grow the invalidate region by a single pixel to accomodate
-		antialiased pseudo-bold characters.
-
-2007-02-06  Chris Wilson  
-
-	Move status_line_changed to post-processing emission.
-
-	* src/vte-private.h:
-	* src/vte.c: (_vte_terminal_insert_char), (vte_terminal_reset),
-	(vte_terminal_emit_pending_signals):
-	* src/vteseq.c: (vte_sequence_handler_ts):
-
-2007-02-06  Chris Wilson  
-
-	Clamp down on needless invalidates during selection.
-
-	As commented on in Bug 401052#c10
-
-	* src/vte.c: (_vte_invalidate_region), (vte_terminal_deselect_all),
-	(vte_terminal_match_hilite_clear), (vte_terminal_start_selection),
-	(vte_terminal_extend_selection):
-
-2007-02-06  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_draw_rows):
-		Don't needlessly break the text run on a space if we are
-		not drawing cell attributes.
-
-2007-02-06  Chris Wilson  
-
-	* src/iso2022.c: (_vte_iso2022_is_ambiguous_ht):
-		One more G_UNLIKELY
-	* src/vte.c: (vte_terminal_match_hilite),
-	(vte_terminal_motion_notify):
-		Avoid expensive hiliting if the pointer is not in the window.
-	* src/vteregex.c: (_vte_regex_exec):
-		Prefer g_new(x,n) over g_malloc(sizeof(x)*n)
-
-2007-02-05  Chris Wilson  
-
-	Bug 404757 – URL matching doesn't work with PCRE
-
-	* configure.in:
-		mention the inconsistency in the help string and default to no.
-
-2007-02-05  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_draw_rows):
-		Don't draw cell attributes across spaces.
-
-2007-02-05  Chris Wilson  
-
-	* src/vte.c: (_vte_terminal_insert_char):
-		A couple more G_LIKELYs.
-
-2007-02-05  Chris Wilson  
-
-	Bug 403028 – decset mode 12 = blinking cursor
-
-	* src/vteseq.c: (vte_sequence_handler_decset_internal):
-		Following convention, disallow the application's control
-		over the blinking cursor in favour of the user's setting.
-
-2007-02-05  Chris Wilson  
-
-	Some more small callgrind tweaks - well into the law of diminishing
-	returns.
-
-	* src/iso2022.c: (_vte_iso2022_is_ambiguous_ht),
-	(_vte_iso2022_is_ambiguous), (process_8_bit_sequence),
-	(process_cdata), (_vte_iso2022_unichar_width):
-	* src/matcher.c: (_vte_matcher_free_params_array):
-	* src/vte.c: (vte_terminal_process_incoming):
-
-2007-02-05  Chris Wilson  
-
-	Beware the trivial change. Handle reuse of GValueArray correctly.
-
-	* src/matcher.c: (_vte_matcher_match):
-	* src/table.c: (_vte_table_match):
-	* src/trie.c: (_vte_trie_match):
-	* src/vte.c: (vte_terminal_process_incoming):
-
-2007-02-05  Chris Wilson  
-
-	* src/table.c: (_vte_table_match):
-		And kill the leak as vte_table_match erroneously cleared
-		its output arguments.
-
-2007-02-05  Chris Wilson  
-
-	The continual reallocation of GValueArray is the last trivially
-	avoidable g_realloc.
-
-	* src/interpret.c: (main):
-	* src/matcher.c: (_vte_matcher_create), (_vte_matcher_destroy),
-	(_vte_matcher_match), (_vte_matcher_free_params_array):
-	* src/matcher.h:
-	* src/table.c: (_vte_table_extract_string):
-	* src/trie.c: (_vte_trie_matchx), (_vte_trie_match), (main):
-	* src/vte.c: (vte_terminal_process_incoming):
-
-2007-02-05  Chris Wilson  
-
-	* src/ring.c: (_vte_ring_insert):
-		Missed an important compiler warning.
-
-2007-02-05  Chris Wilson  
-
-	cf Bug 342338 – suffers from memory fragmentation
-
-	Reuse the last VteRowData instead of immediately freeing it. Avoids
-	recreating and *regrowing* a new GArray on the heap.
-
-	In the simple scrolling benchmarks this can boost performance by as
-	much as 10%!
-
-	* src/ring.c: (_vte_ring_insert), (_vte_ring_insert_preserve),
-	(_vte_ring_remove), (_vte_ring_append):
-	* src/ring.h:
-	* src/vte-private.h:
-	* src/vte.c: (_vte_reset_row_data), (_vte_terminal_ensure_cursor),
-	(_vte_terminal_insert_char), (vte_terminal_reset_rowdata):
-	* src/vteseq.c: (vte_insert_line_internal),
-	(vte_sequence_handler_scroll_up_or_down),
-	(vte_sequence_handler_cd), (vte_sequence_handler_sf),
-	(vte_sequence_handler_clear_screen),
-	(vte_sequence_handler_screen_alignment_test):
-
-2007-02-04  Chris Wilson  
-
-	A few more compiler warnings.
-
-	* src/buffer.c: (_vte_buffer_peek_gstring):
-	* src/iso2022.c: (process_control):
-	* src/vteft2.c: (_vte_ft2_set_text_font):
-	* src/vteseq.c: (vte_sequence_handler_set_title_internal):
-	* src/vtetc.c: (_vte_termcap_parse_file):
-
-2007-02-04  Chris Wilson  
-
-	Bug 106618 – CJK 'fixed width' font and 's p a c e d o u t' issue
-
-	* src/vtedraw.h:
-	* src/vteglyph.c: (_vte_glyph_cache_set_font_description):
-	* src/vtepango.c: (_vte_pango_set_text_font):
-	* src/vtepangox.c: (_vte_pango_x_set_text_font):
-	* src/vtexft.c: (_vte_xft_set_text_font):
-		Detect a change in font between wide-chars and recheck for a
-		fixed-width estimate.
-
-2007-02-04  Chris Wilson  
-
-	Micro-opts.
-
-	* src/table.c: (_vte_table_match):
-		No need set to NULL.
-	* src/vte.c: (_vte_terminal_ensure_cursor):
-		If we have added some rows, the last is the current.
-
-2007-02-04  Chris Wilson  
-
-	Move window/icon title changed to the post-processing emission - helps
-	with the artificial benchmark of replaying a recorded jhbuild script.
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_finalize),
-	(vte_terminal_emit_icon_title_changed),
-	(vte_terminal_emit_window_title_changed),
-	(vte_terminal_emit_pending_signals):
-	* src/vteseq.c: (vte_sequence_handler_set_title_internal):
-
-2007-02-04  Chris Wilson  
-
-	Broke clear-to-end-of-line by lowering the number of cells appended,
-	instead of the number of cells invalidated.
-
-	* src/vte.c: (vte_terminal_draw_rows):
-	* src/vteseq.c: (vte_sequence_handler_ce):
-
-2007-02-04  Chris Wilson  
-
-	cf Bug 83285 – Treacle-slow scrolling in gnome-terminal on unaccelerated X server
-
-	Another chunk of performance improvements - the majority focusing on
-	reducing the amount of work down per interrupt (input data from
-	child).
-
-	To handle reads without addition copies VTE_INPUT_CHUNK_SIZE chunks
-	are allocated on demand and filled from read with no further copy -
-	previously the read was into a local buffer and then immediately
-	copied into a _vte_buffer.
-	_vte_iso2022_process() is then adjusted to use a ptr+length, rather
-	than a _vte_buffer and is called for every input chunk (taking special
-	care over the boundary cases).
-
-	* src/interpret.c: (main):
-	* src/iso2022.c: (_vte_iso2022_fragment_input),
-	(process_8_bit_sequence), (process_cdata), (_vte_iso2022_process):
-	* src/iso2022.h:
-	* src/vte-private.h:
-	* src/vte.c: (get_chunk), (release_chunk), (prune_chunks),
-	(_vte_incoming_chunks_release), (_vte_incoming_chunks_length),
-	(_vte_incoming_chunks_count), (_vte_incoming_chunks_reverse),
-	(vte_terminal_match_check_internal), (_vte_terminal_ensure_cursor),
-	(vte_terminal_set_colors), (_vte_terminal_insert_char),
-	(vte_terminal_catch_child_exited), (vte_terminal_eof),
-	(vte_terminal_process_incoming), (_vte_terminal_feed_chunks),
-	(vte_terminal_io_read), (vte_terminal_feed), (vte_terminal_send),
-	(vte_terminal_init), (vte_terminal_finalize), (vte_terminal_reset),
-	(remove_from_active_list), (need_processing), (update_regions),
-	(update_repeat_timeout):
-	* src/vte.h:
-	* src/vteseq.c: (vte_sequence_handler_cb),
-	(vte_sequence_handler_ce), (vte_sequence_handler_ec):
-
-2007-02-04  Chris Wilson  
-
-	Store whether the codeset is ambiguous in a state variable,
-	rather than recomputing the ambiguous width every processing loop.
-
-	* src/iso2022.c: (_vte_iso2022_is_ambiguous),
-	(_vte_iso2022_state_new), (_vte_iso2022_find_nextctl):
-
-2007-02-04  Chris Wilson  
-
-	* src/vtexft.c: (_vte_xft_create), (_vte_xft_destroy):
-		Remove zero-initialisers after g_slice_new0().
-	* src/vtexft.c :(_vte_xft_set_text_font):
-		Print out the width range.
-
-2007-02-04  Chris Wilson  
-
-	* configure.in:
-		Missing space between -Wflags.
-
-2007-02-04  Chris Wilson  
-
-	Eliminate the temporary g_sliced parameter list,
-	in favour of an on-stack list.
-
-	* src/table.c: (_vte_table_arginfo_head_init),
-	(_vte_table_arginfo_alloc), (_vte_table_arginfo_head_revert),
-	(_vte_table_arginfo_head_reverse),
-	(_vte_table_arginfo_head_finalize), (_vte_table_addi),
-	(_vte_table_matchi), (_vte_table_extract_string),
-	(_vte_table_match):
-
-2007-02-02  Chris Wilson  
-
-	* src/vtefc.c: (_vte_fc_patterns_from_pango_font_desc):
-		Dump the chosen fonts to VTE_DEBUG_MISC.
-	* src/vteft2.c: (_vte_ft2_set_text_font):
-		Print out the font metrics ala vtexft.c
-
-2007-02-02  Chris Wilson  
-
-	Bug 322241 – Please switch to pkg-config to check for freetype
-
-	* configure.in:
-		Prefer to use the freetype2.pc if available.
-
-2007-02-02  Chris Wilson  
-
-	Bug 322240 – Usage of pkg-config privates header
-
-	* vte.pc.in:
-		Move @FT2_LIBS@ to Libs.private.
-
-2007-02-01  Chris Wilson  
-
-	cf Bug 403275 – crash in Terminal: I was typing reset on th...
-
-	Not the crash, just a freeze found whilst trying to reproduce the
-	bug on trunk.
-
-	* src/vte.c: (remove_from_active_list):
-		Don't remove the terminal from the active list if it still
-		has pending redraws.
-	
-	* src/vte.c: (process_timeout), (update_timeout):
-		Reorder the loop to remove the terminal from the active list
-		if it no longer needs processing.
-
-2007-02-01  Chris Wilson  
-
-	* perf/scroll.vim:
-		Extract the bits the test needs out of debian.vim.
-
-2007-02-01  Chris Wilson  
-
-	As spotted on bug 399617c8, we convert an array of unichars to a
-	string and then iterate over the string interpreting bytes as
-	unichars.
-
-	* src/table.c: (_vte_table_extract_numbers):
-		Dispense with the temporary string and process the unichar
-		array directly.
-
-2007-02-01  Chris Wilson 
-
-	Bug 403159 – XftDrawSetClipRectangles() silently fails on ppc->i386
-
-	* src/vtexft.c: (_vte_xft_clip):
-		Precompute clip offsets.
-
-2007-02-01  Chris Wilson  
-
-	Bug 382245 – __PyGtk_API multiply defined in python module
-
-	* configure.in:
-		Add -fno-common to MAYBE_WARN in order to catch future
-		errors of this type.
-	* python/vte.override:
-		Define PYGTK_NO_IMPORT.
-
-2007-01-31  Chris Wilson  
-
-	Bug 155687 – Scroll region \E[NN;MMr should set cursor to home
-
-	Patch originally by Michele Baldessari.
-
-	* src/vteseq.c: (vte_sequence_handler_cs):
-		Move the cursor to (0,0) rather than clamping the cursor to 
-		be inside the scroll region.
-
-2007-01-31  Chris Wilson  
-
-	In a few places the contents of a GValue were being used without
-	checking that they were of the expected type.
-
-	cf Bug 117945 which mentions stack corruption inside
-	vte_sequence_handler_delete_lines() - one of the corrected instances.
-
-	* src/vteseq.c: (vte_sequence_handler_al),
-	(vte_sequence_handler_cs), (vte_sequence_handler_cS),
-	(vte_sequence_handler_dl),
-	(vte_sequence_handler_character_attributes),
-	(vte_sequence_handler_insert_lines),
-	(vte_sequence_handler_delete_lines),
-	(vte_sequence_handler_device_status_report),
-	(vte_sequence_handler_dec_device_status_report):
-		Check that the GValue holds a long before dereference.
-
-2007-01-31  Chris Wilson 
-
-	Back to the old-style io loop as _vte_buffer_append() is too slow - on
-	a slow system the read can fill before the data is copied (even more
-	apparent under valgrind).
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_io_read):
-
-2007-01-31  Chris Wilson  
-
-	Use the display stashed inside the font and not the default display!
-
-	* src/vtexft.c: (_vte_xft_char_exists), (_vte_xft_text_extents),
-	(_vte_xft_font_open), (_vte_xft_font_close),
-	(_vte_xft_font_for_char), (_vte_xft_draw_text):
-
-2007-01-31  Chris Wilson  
-
-	A mixed bag of cleanups.
-
-	* configure.in:
-	* src/pty.c: (_vte_pty_set_utf8):
-		Test for existence of tc[sg]etattr.
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_emit_adjustment_changed),
-	(vte_terminal_queue_adjustment_changed),
-	(vte_terminal_set_color_internal), (vte_terminal_handle_sequence),
-	(_vte_terminal_enable_input_source), (vte_terminal_io_read),
-	(vte_terminal_init), (vte_terminal_unrealize),
-	(vte_terminal_finalize), (vte_terminal_background_update),
-	(vte_terminal_queue_background_update),
-	(vte_terminal_emit_pending_signals), (process_timeout),
-	(update_repeat_timeout), (update_timeout):
-		Move idle signal emission to display handlers.
-	* src/vtedraw.h:
-		Add '&' to the single width characters.
-	* src/vteseq.c: (_vte_sequence_get_handler):
-	* src/vteseq.h:
-		Drop the extraneous GQuark parameter.
-	* src/vtexft.c: (_vte_xft_set_text_font):
-		Avoid use of strlen for a compile-time fixed length string.
-
-2007-01-31  Chris Wilson  
-
-	Bug 147784 – cursor unvisible under mouse highlight
-
-	Original patch by Chris Health
-
-	* src/vte.c: (vte_terminal_paint):
-		Reverse cursor color if it is in the selected region and draw
-		it as an outline.
-
-2007-01-31  Chris Wilson  
-
-	Bug 368894 – crash in Terminal: I started gnome-terminal...
-
-	* src/vtebg.c: (vte_bg_cache_search), (vte_bg_get_pixmap),
-	(vte_bg_get_pixbuf):
-		When retrieving a cached pixmap check that the visual
-		matches the current request.
-
-2007-01-31  Chris Wilson  
-
-	Use gdk_error_trap_{push,pop} around raw Xft calls - about a
-	path outside of vte_draw_{begin,end}.
-
-	* src/vtexft.c: (_vte_xft_set_text_font):
-
-2007-01-31  Chris Wilson  
-
-	Use gdk_error_trap_{push,pop} around raw X11 and Xft calls.
-	cf Bug 368894.
-
-	* src/vtexft.c: (_vte_xft_font_for_char), (_vte_xft_start),
-	(_vte_xft_end):
-
-2007-01-31  Chris Wilson  
-
-	Use gperf to calculate a more optimal vte_sequence_get_handler().
-	This reduces vte_sequence_get_handler() from ~13% of the runtime
-	during 'seq 1 1e6' to ~.5% (cumulative).
-
-	* src/Makefile.am:
-	* src/vteseq-2.c: (vteseq_2_hash), (vteseq_2_lookup):
-	* src/vteseq-2.gperf:
-	* src/vteseq-n.c: (vteseq_n_hash), (vteseq_n_lookup):
-	* src/vteseq-n.gperf:
-	* src/vteseq.c: (_vte_sequence_get_handler):
-
-2007-01-31  Chris Wilson  
-
-	Rudimentary vim scrolling benchmark.
-
-	* perf/Makefile.am:
-	* perf/UTF-8-demo.txt:
-	* perf/scroll.vim:
-	* perf/vim.sh:
-
-2007-01-30  Chris Wilson  
-
-	Bug 402329 – Rendering problem with underlines and cursor
-
-	* src/vte.c: (vte_terminal_paint):
-		Check hilite state when redrawing character under cursor.
-
-2007-01-29  Chris Wilson  
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_io_read):
-		Clean up the read IO loop.
-
-2007-01-29  Chris Wilson  
-
-	NULL return from pcre_study() does not necessarily mean an error
-	occurred.
-
-	* src/vteregex.c: (_vte_regex_compile), (_vte_regex_exec):
-
-2007-01-29  Chris Wilson  
-
-	* src/vte.c: (_vte_terminal_set_pointer_visible),
-	(_vte_terminal_fudge_pango_colors):
-		Kill a couple more compiler warnings.
-
-2007-01-29  Chris Wilson  
-
-	Bug 336105 – gnome-terminal crashes when termcap not found
-
-	* src/matcher.c: (_vte_matcher_init):
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_set_default_tabstops),
-	(vte_terminal_key_press), (vte_terminal_set_emulation),
-	(_vte_terminal_inline_error_message), (vte_terminal_set_termcap),
-	(vte_terminal_init), (vte_terminal_finalize),
-	(vte_terminal_draw_cells):
-		Detect and issue an inline warning when we fail
-		to load a termcap.
-
-2007-01-29  Chris Wilson  
-
-	Tighten the invalidated cells.
-
-	* src/vte.c: (_vte_terminal_select_text):
-	* src/vteseq.c: (vte_sequence_handler_cb):
-
-2007-01-29  Chris Wilson  
-
-	More compiler warnings.
-
-	* src/vtepangox.c: (_vte_pango_x_set_text_font),
-	(_vte_pango_x_draw_text):
-	* src/vteregex.c: (_vte_regex_exec):
-
-2007-01-29  Chris Wilson  
-
-	Detect availability of PCRE.
-
-	* configure.in:
-	* src/Makefile.am:
-
-2007-01-29  Chris Wilson  
-
-	Improve handling of multi-row clears.
-
-	* src/vte.c: (vte_terminal_draw_cells), (vte_terminal_draw_rows),
-	(vte_terminal_paint):
-
-2007-01-29  Chris Wilson 
-
-	Add debugging flags for printing out cells contents and attributes as
-	they are rendered.
-
-	* src/debug.c: (_vte_debug_parse_string):
-	* src/debug.h:
-	* src/vte.c: (vte_terminal_draw_cells):
-
-2007-01-29  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_draw_rows):
-		Don't issue glyph items for blank cells.
-
-2007-01-29  Chris Wilson  
-
-	* configure.in:
-		Add -Wshadow to MAYBE_WARN
-	* src/ring.c: (_vte_ring_remove):
-	* src/table.c: (_vte_table_matchi):
-	* src/vtedraw.c: (_vte_draw_clip):
-	* src/vteskel.c:
-		Clean up some compiler warnings.
-
-2007-01-29  Chris Wilson  
-
-	* src/vteskel.c:
-		Add the NULL clip func to the skeleton function table.
-
-2007-01-29  Chris Wilson  
-
-	Update match hilite before showing the pointer as the choice of
-	cursor depends on whether the pointer is above a matched region.
-
-	* src/vte.c: (vte_terminal_motion_notify),
-	(vte_terminal_button_press), (vte_terminal_button_release):
-
-2007-01-29  Chris Wilson  
-
-	Only update the matched region if we move the pointer outside of the
-	currently matched region.
-	And only invalidate the cells underneath the matched region.
-
-	* src/vte.c: (_vte_invalidate_region),
-	(vte_terminal_match_hilite_clear), (cursor_inside_match),
-	(vte_terminal_match_hilite), (vte_terminal_draw_rows):
-
-2007-01-29  Chris Wilson  
-
-	* src/table.c: (_vte_table_free):
-		Fix a memleak.
-
-2007-01-29  Chris Wilson  
-
-	==26147== 2,895 (352 direct, 2,543 indirect) bytes in 22 blocks are definitely lost in loss record 107 of 170
-	==26147==    at 0x4021380: malloc (vg_replace_malloc.c:149)
-	==26147==    by 0x4E85965: g_malloc (gmem.c:131)
-	==26147==    by 0x4E95537: g_slice_alloc (gslice.c:777)
-	==26147==    by 0x4E7C255: g_list_prepend (glist.c:95)
-	==26147==    by 0x428B887: vte_terminal_feed (vte.c:10991)
-	==26147==    by 0x429DD20: vte_terminal_io_read (vte.c:3214)
-	==26147==    by 0x4EA7A8C: g_io_unix_dispatch (giounix.c:162)
-	==26147==    by 0x4E7E481: g_main_context_dispatch (gmain.c:2045)
-	==26147==    by 0x4E8145E: g_main_context_iterate (gmain.c:2677)
-	==26147==    by 0x4E81808: g_main_loop_run (gmain.c:2881)
-	==26147==    by 0x45BA503: gtk_main (gtkmain.c:1148)
-	==26147==    by 0x805F7A3: main (terminal.c:1773)
-
-	* src/vte.c: (remove_from_active_list), (process_timeout),
-	(update_repeat_timeout):
-		g_list_delete_link() is the one that actually frees the link.
-		s/g_list_remove_link/g_list_delete_link/.
-
-2007-01-29  Chris Wilson  
-
-	==26147== Conditional jump or move depends on uninitialised value(s)
-	==26147==    at 0x42AB9F7: _vte_rdb_search (vterdb.c:95)
-	==26147==    by 0x42ABB40: _vte_rdb_quark (vterdb.c:201)
-	==26147==    by 0x42ABB9F: _vte_rdb_get_hintstyle (vterdb.c:241)
-	==26147==    by 0x42A7952: _vte_fc_patterns_from_pango_font_desc (vtefc.c:302)
-	==26147==    by 0x42B4E9B: _vte_xft_set_text_font (vtexft.c:103)
-	==26147==    by 0x42A6BE5: _vte_draw_set_text_font (vtedraw.c:258)
-	==26147==    by 0x428C62B: vte_terminal_ensure_font (vte.c:5963)
-	==26147==    by 0x4290295: vte_terminal_size_request (vte.c:6613)
-	==26147==    by 0x4E25228: g_cclosure_marshal_VOID__BOXED (gmarshal.c:566)
-	==26147==    by 0x4E17038: g_type_class_meta_marshal (gclosure.c:567)
-	==26147==    by 0x4E188FC: g_closure_invoke (gclosure.c:490)
-	==26147==    by 0x4E29779: signal_emit_unlocked_R (gsignal.c:2370)
-	==26147== 
-
-	* src/vterdb.c: (_vte_rdb_get):
-		Check the result of the get_property_string before using the
-		returned values.
-
-2007-01-29  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_draw_cells), (vte_terminal_draw_rows):
-		Merge draw_cells() with the background clear, as generating
-		items for many rows and then splitting again in draw cells is
-		simply inefficient.
-
-2007-01-28  Chris Wilson  
-
-	Bug 401215 – Multi-pass renderering
-
-	* src/vte.c: (vte_terminal_draw_cells), (vte_terminal_clear_cells),
-	(vte_terminal_draw_cells_with_attributes),
-	(vte_terminal_draw_rows), (vte_terminal_paint):
-		Break the draw_rows() loop into two passes - first clear the
-		background and second render the text.
-		Add another function based on draw_cells() that just clears the
-		background and make clearing the background optional in
-		draw_cells() - updating callers accordingly.
-		Adventurous souls are required to clean up draw_rows().
-
-2007-01-27  Chris Wilson  
-
-	Fix compilation *with* debugging enabled.
-	Grrr.
-
-	* src/keymap.c: (_vte_keysym_print):
-
-2007-01-27  Chris Wilson  
-
-	Fix compilation without debugging enabled.
-
-	* src/keymap.c: (_vte_keysym_print), (_vte_keymap_map):
-	* src/vte.c: (display_control_sequence):
-	* src/vteapp.c: (main):
-
-2007-01-26  Chris Wilson  
-
-	* src/debug.h:
-		Provide a safe fallback for non-C99 compilers (well actually
-		anything that isn't a recent gcc at the moment).
-
-2007-01-26  Chris Wilson  
-
-	Bug 157267 – _vte_terminal_fudge_pango_colors() breaks Japanese input style
-
-	Patch by ynakai@redhat.com.
-
-	* src/vte.c: (_vte_terminal_fudge_pango_colors):
-		Check the attributes for each cell rather than assuming the
-		pango attributes (and cell attributes) are the same for the
-		whole string.
-
-2007-01-26  Chris Wilson  
-
-	* src/vteseq.c: (vte_sequence_handler_vb):
-		Iterating over all queued exposures and drawing on top of the
-		flash does not sense. Simply flush the draw.
-
-2007-01-26  Chris Wilson  
-
-	s/_VTE_DEBUG_ON/_VTE_DEBUG_IF/ and don't include
-	the code block inside the macro.
-
-	* src/debug.h:
-	* src/iso2022.c: (process_control), (_vte_iso2022_process):
-	* src/keymap.c: (_vte_keymap_map):
-	* src/matcher.c: (_vte_matcher_init):
-	* src/pty.c: (_vte_pty_run_on_pty):
-	* src/table.c: (_vte_table_addi), (_vte_table_matchi),
-	(_vte_table_extract_numbers), (_vte_table_match):
-	* src/trie.c: (_vte_trie_addx):
-	* src/vte.c: (vte_terminal_match_check_internal),
-	(vte_terminal_match_check), (vte_terminal_handle_sequence),
-	(vte_terminal_catch_child_exited), (vte_terminal_process_incoming),
-	(vte_terminal_io_write), (vte_terminal_send),
-	(vte_terminal_key_press), (vte_terminal_copy_cb),
-	(vte_terminal_set_font_full), (vte_terminal_realize),
-	(vte_terminal_paint), (vte_terminal_scroll):
-	* src/vteapp.c: (main):
-	* src/vtebg.c: (vte_bg_root_pixmap):
-
-2007-01-26  Chris Wilson  
-
-	Bug 400834 – Use a global display/process timeout
-
-	Currently each terminal uses it own display timeout. Given that
-	typical usage is several active terminals, there is an immediate
-	advantage (context switches, fairness, smoothness) to using a single
-	common timeout.
-
-	* src/debug.c: (_vte_debug_parse_string):
-	* src/debug.h:
-		Add VTE_DEBUG_TIMEOUT
-	* src/vte-private.h:
-	* src/vte.c: (update_regions), (_vte_invalidate_cells),
-	(_vte_invalidate_all), (vte_terminal_init),
-	(vte_terminal_class_init), (add_update_timeout),
-	(remove_from_active_list), (remove_update_timeout),
-	(add_process_timeout), (vte_terminal_stop_processing),
-	(vte_terminal_is_processing), (process_timeout),
-	(update_repeat_timeout), (update_timeout):
-		Modify to use a global timeout rather than individual
-		private timeouts.
-
-2007-01-26  Chris Wilson  
-
-	Unable to set background scrolling mode from cmdline due to variable
-	name confusion.
-
-	* src/vteapp.c: (main):
-		--scroll should set scroll=TRUE rather than cursor=TRUE!
-
-2007-01-26  Chris Wilson  
-
-	Bug 401082 – double-draw issue
-
-	The main cause of this bug was not expanding the cleared area to cover
-	all the cells affected by the draw and forgetting to offset the clear
-	by VTE_PAD_WIDTH.
-
-	To counter the performance hit due to the expanded repaint area, each
-	backend is presented with the opportunity to apply a clip to the
-	exposed region before painting.
-
-	This also fixes bug 333157,
-
-	* src/vte.c: (_vte_invalidate_cells), (vte_terminal_paint_area),
-	(vte_terminal_paint):
-	* src/vtedraw.c: (_vte_draw_clip):
-	* src/vtedraw.h:
-	* src/vteft2.c: (_vte_ft2_end), (_vte_ft2_clip):
-	* src/vtegl.c:
-	* src/vtepango.c: (_vte_pango_clip):
-	* src/vtepangox.c: (_vte_pango_x_clip):
-	* src/vtexft.c: (_vte_xft_clip), (_vte_xft_draw_text):
-
-2007-01-26  Chris Wilson  
-
-	* src/vte.c: (vte_terminal_match_hilite):
-	* src/vteseq.c: (vte_sequence_handler_ce),
-	(vte_sequence_handler_dc), (vte_sequence_handler_ec):
-		Tighten the _vte_invalidate_cells() to only those that
-		we potentially modify.
-
-2007-01-26  Chris Wilson  
-
-	* src/vtexft.c: (_vte_xft_set_text_font):
-		Remove the additional pixel inter-character spacing.
-		Compactness over clarity ;)
-
-2007-01-26  Chris Wilson  
-
-	Apply a one pixel fudge to the Xft character position and width.
-	This greatly improves text appearance and hides the misrendering of
-	pseudo-bold characters.
-	cf bugs 317691, 333157.
-
-	* src/vte.c: (vte_terminal_paint):
-		Increase the cursor size to fit around the cell.
-	* src/vtexft.c: (_vte_xft_set_text_font), (_vte_xft_draw_text):
-		Fudge the Xft font positioning.
-
-2007-01-26  Chris Wilson 
-
-	Bug 318307 – Cursor colour changes to foreground when unfocused
-
-	Whilst setting the colour, tweak the position of the rectangle, and
-	extended the invalidate region to account for the OBO nature of bold
-	font.
-
-	* src/vte.c: (_vte_invalidate_cells):
-		Include the padding to accomodate cell effects.
-	* src/vte.c: (vte_terminal_paint):
-		Use the cursor color for the rectangle when unfocused.
-
-2007-01-26  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_visibility_notify): Correctly handle
-	visibility events: set invalidated_all to FALSE, and invalidate_all
-	if fully unobscured.
-
-2007-01-26  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_visibility_notify): Make sure we redraw
-	after becoming unobscured.  There still is a bug that I've not found,
-	but after obscuring the widget and coming back, a first redraw
-	happens, but no update after that.
-
-2007-01-26  Chris Wilson 
-
-	* src/vte.c: (vte_terminal_draw_area):
-		Occasionally we generate an exposed area which is computed
-		as 0x0 cells. Discard early, before we spend an infinity
-		drawing nothing.
-
-2007-01-26  Chris Wilson 
-
-	Janitorial work - near elimination of #ifdef VTE_DEBUG from within
-	functions, trimming a thousand lines of code.
-
-	We introduce a _vte_debug_print macro to cover the more common
-	occurrence of printing a message at a certain debug level.
-	And a _VTE_DEBUG_ON for a conditional code block.
-
-	src/debug.h     |   11 
-	src/iso2022.c   |  201 ++-------
-	src/keymap.c    |   41 -
-	src/matcher.c   |   24 -
-	src/pty.c       |  134 +-----
-	src/reaper.c    |   21 
-	src/ring.c      |   78 +--
-	src/table.c     |   11 
-	src/trie.c      |   19 
-	src/vte.c       | 1187 ++++++++++---------------------------------------
-	src/vteaccess.c |  198 +++------
-	src/vteapp.c    |   21 
-	src/vtebg.c     |   43 --
-	src/vteconv.c   |   60 +-
-	src/vteconv.h   |   12 
-	src/vtedraw.c   |    6 
-	src/vtefc.c     |    4 
-	src/vteft2.c    |    5 
-	src/vteglyph.c  |   27 -
-	src/vtepango.c  |   11 
-	src/vtepangox.c |    7 
-	src/vteregex.c  |    2 
-	src/vteseq.c    |  385 +++++-------------
-	src/vtexft.c    |   26 -
-	24 files changed, 789 insertions(+), 1745 deletions(-)
-
-	* src/debug.h:
-	* src/iso2022.c: (_vte_iso2022_ambiguous_width_guess),
-	(_vte_iso2022_state_new), (_vte_iso2022_state_set_codeset),
-	(process_8_bit_sequence), (process_cdata), (process_control),
-	(_vte_iso2022_process):
-	* src/keymap.c: (_vte_keymap_map):
-	* src/matcher.c: (_vte_matcher_init), (_vte_matcher_create),
-	(_vte_matcher_destroy):
-	* src/pty.c: (vte_pty_child_setup), (_vte_pty_run_on_pty),
-	(_vte_pty_set_size), (_vte_pty_get_size), (_vte_pty_ptsname),
-	(_vte_pty_open_unix98), (_vte_pty_open_with_helper),
-	(_vte_pty_open):
-	* src/reaper.c: (vte_reaper_emit_signal),
-	(vte_reaper_child_watch_cb), (vte_reaper_init),
-	(vte_reaper_finalize):
-	* src/ring.c: (_vte_ring_insert), (_vte_ring_insert_preserve),
-	(_vte_ring_remove):
-	* src/table.c: (_vte_table_addi):
-	* src/trie.c: (char_class_string_extract), (_vte_trie_addx),
-	(_vte_trie_add):
-	* src/vte.c: (update_regions), (_vte_invalidate_cells),
-	(_vte_invalidate_all), (_vte_invalidate_cell),
-	(_vte_invalidate_cursor_once),
-	(vte_terminal_emit_selection_changed), (vte_terminal_emit_commit),
-	(vte_terminal_emit_emulation_changed),
-	(vte_terminal_emit_encoding_changed),
-	(vte_terminal_emit_child_exited),
-	(_vte_terminal_emit_contents_changed),
-	(vte_terminal_emit_cursor_moved), (vte_terminal_emit_eof),
-	(vte_terminal_emit_char_size_changed),
-	(_vte_terminal_emit_status_line_changed),
-	(vte_terminal_emit_increase_font_size),
-	(vte_terminal_emit_decrease_font_size),
-	(_vte_terminal_emit_text_inserted),
-	(_vte_terminal_emit_text_deleted),
-	(vte_terminal_emit_text_modified),
-	(vte_terminal_emit_text_scrolled), (vte_terminal_deselect_all),
-	(vte_terminal_match_check_internal), (vte_terminal_match_check),
-	(vte_terminal_emit_adjustment_changed),
-	(vte_terminal_queue_adjustment_changed),
-	(_vte_terminal_adjust_adjustments), (vte_terminal_scroll_pages),
-	(vte_terminal_maybe_scroll_to_bottom), (vte_terminal_set_encoding),
-	(_vte_terminal_set_pointer_visible), (vte_terminal_new),
-	(vte_terminal_generate_bold), (_vte_terminal_insert_char),
-	(vte_terminal_handle_sequence), (vte_terminal_catch_child_exited),
-	(vte_terminal_fork_command),
-	(vte_terminal_emit_pending_text_signals),
-	(vte_terminal_process_incoming), (vte_terminal_io_read),
-	(vte_terminal_io_write), (vte_terminal_send),
-	(vte_terminal_im_commit), (vte_terminal_im_preedit_start),
-	(vte_terminal_im_preedit_end), (vte_terminal_im_preedit_changed),
-	(vte_terminal_configure_toplevel),
-	(vte_terminal_hierarchy_changed), (vte_terminal_style_changed),
-	(vte_terminal_key_press), (vte_terminal_paste_cb),
-	(vte_terminal_match_hilite_clear), (vte_terminal_match_hilite),
-	(vte_terminal_clear_cb), (vte_terminal_copy_cb),
-	(vte_terminal_copy), (vte_terminal_paste),
-	(vte_terminal_start_selection), (vte_terminal_extend_selection),
-	(vte_terminal_autoscroll), (vte_terminal_motion_notify),
-	(vte_terminal_button_press), (vte_terminal_button_release),
-	(vte_terminal_focus_in), (vte_terminal_focus_out),
-	(vte_terminal_set_font_full), (vte_terminal_set_size),
-	(vte_terminal_handle_scroll), (vte_terminal_set_emulation),
-	(vte_terminal_set_termcap), (vte_terminal_reset_rowdata),
-	(vte_terminal_fc_settings_changed), (vte_terminal_init),
-	(vte_terminal_size_request), (vte_terminal_size_allocate),
-	(vte_terminal_unrealize), (vte_terminal_finalize),
-	(vte_terminal_realize), (vte_terminal_draw_cells),
-	(_vte_terminal_map_pango_color), (vte_terminal_draw_area),
-	(vte_terminal_paint), (vte_terminal_expose), (vte_terminal_scroll),
-	(vte_terminal_class_init), (vte_terminal_copy_clipboard),
-	(vte_terminal_paste_clipboard), (vte_terminal_copy_primary),
-	(vte_terminal_paste_primary), (vte_terminal_background_update),
-	(vte_terminal_queue_background_update),
-	(vte_terminal_set_background_saturation),
-	(vte_terminal_set_background_tint_color),
-	(vte_terminal_set_background_transparent),
-	(vte_terminal_set_background_image),
-	(vte_terminal_set_background_image_file),
-	(vte_terminal_set_word_chars), (process_timeout),
-	(update_repeat_timeout), (update_timeout):
-	* src/vteaccess.c: (xy_from_offset), (emit_text_caret_moved),
-	(emit_text_changed_insert), (emit_text_changed_delete),
-	(vte_terminal_accessible_update_private_data_if_needed),
-	(vte_terminal_accessible_text_modified),
-	(vte_terminal_accessible_text_scrolled),
-	(vte_terminal_accessible_invalidate_cursor),
-	(vte_terminal_accessible_finalize),
-	(vte_terminal_accessible_get_text),
-	(vte_terminal_accessible_get_text_somewhere),
-	(vte_terminal_accessible_get_run_attributes),
-	(vte_terminal_accessible_text_init),
-	(vte_terminal_accessible_component_init),
-	(vte_terminal_accessible_action_init),
-	(vte_terminal_accessible_factory_new):
-	* src/vteapp.c: (destroy_and_quit_eof), (destroy_and_quit_exited),
-	(take_xconsole_ownership), (main):
-	* src/vtebg.c: (vte_bg_root_pixmap), (vte_bg_set_root_pixmap),
-	(_vte_bg_resize_pixbuf):
-	* src/vteconv.c: (_vte_conv_utf8_utf8), (_vte_conv_open),
-	(_vte_conv), (_vte_conv_cu), (_vte_conv_uu), (_vte_conv_uc):
-	* src/vteconv.h:
-	* src/vtedraw.c: (_vte_draw_new):
-	* src/vtefc.c: (_vte_fc_transcribe_from_pango_font_description):
-	* src/vteft2.c: (_vte_ft2_draw_text):
-	* src/vteglyph.c: (_vte_glyph_cache_free),
-	(_vte_glyph_cache_set_font_description):
-	* src/vtepango.c: (_vte_pango_set_text_font),
-	(_vte_pango_draw_text):
-	* src/vtepangox.c: (_vte_pango_x_set_text_font):
-	* src/vteregex.c: (_vte_regex_exec):
-	* src/vteseq.c: (vte_terminal_emit_deiconify_window),
-	(vte_terminal_emit_iconify_window),
-	(vte_terminal_emit_icon_title_changed),
-	(vte_terminal_emit_window_title_changed),
-	(vte_terminal_emit_raise_window), (vte_terminal_emit_lower_window),
-	(vte_terminal_emit_maximize_window),
-	(vte_terminal_emit_refresh_window),
-	(vte_terminal_emit_restore_window),
-	(vte_terminal_emit_move_window), (vte_terminal_emit_resize_window),
-	(vte_sequence_handler_set_title_internal),
-	(vte_sequence_handler_decset_internal), (vte_sequence_handler_bt),
-	(vte_sequence_handler_application_keypad),
-	(vte_sequence_handler_normal_keypad),
-	(vte_sequence_handler_reset_mode), (vte_sequence_handler_decset),
-	(vte_sequence_handler_decreset),
-	(vte_sequence_handler_erase_in_display),
-	(vte_sequence_handler_erase_in_line),
-	(vte_sequence_handler_restore_mode),
-	(vte_sequence_handler_save_mode),
-	(vte_sequence_handler_window_manipulation):
-	* src/vtexft.c: (_vte_xft_set_text_font):
-
-2007-01-26  Chris Wilson 
-
-	Bug 317449 – The cursor disappears when clicking on windows above gnome-terminal
-
-	Enter a command that causes partial obscuration of the terminal,
-	though it must cover the cursor. Close the new window, observe the
-	pointer disappears.
-
-	The issue is that we hide the pointer whilst typing and show it after
-	receiving a mouse movement. However in this case we steal the pointer
-	away from the terminal without any mouse events and the cursor remains
-	invisible.
-
-	* src/vte.c: (vte_terminal_focus_in):
-		Ensure the mouse pointer is visible on focus-in.
-
-2007-01-26  Chris Wilson 
-
-	Spend half an hour a day killing warnings...
-
-	* configure.in:
-		Remove -Wswitch-enum from MAYBE_WARN. I am that lazy.
-	* src/buffer.c:
-	* src/iso2022.c: (_vte_iso2022_is_ambiguous),
-	(_vte_iso2022_ambiguous_width), (_vte_iso2022_map_get),
-	(_vte_iso2022_find_nextctl), (_vte_iso2022_sequence_length),
-	(_vte_iso2022_fragment_input), (process_8_bit_sequence),
-	(process_cdata), (_vte_iso2022_process_single), (process_control),
-	(_vte_iso2022_process):
-	* src/keymap.c: (_vte_keymap_map):
-	* src/table.c:
-	* src/trie.c: (char_class_none_extract),
-	(char_class_digit_extract), (char_class_multi_extract),
-	(char_class_any_extract), (unichar_snlen), (unichar_sncmp),
-	(char_class_string_extract), (_vte_trie_addx), (_vte_trie_add),
-	(_vte_trie_matchx), (_vte_trie_match), (_vte_trie_printx),
-	(_vte_trie_print), (convert_mbstowcs), (main):
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_find_charcell),
-	(_vte_row_data_find_charcell), (vte_terminal_emit_commit),
-	(vte_terminal_match_clear_all), (vte_terminal_match_remove),
-	(vte_terminal_match_add), (vte_terminal_match_set_cursor),
-	(vte_terminal_match_check_internal), (vte_terminal_set_colors),
-	(vte_terminal_emit_pending_text_signals),
-	(vte_terminal_is_word_char), (vte_terminal_finalize),
-	(vte_terminal_realize), (_vte_terminal_map_pango_color),
-	(_vte_terminal_apply_pango_attr),
-	(_vte_terminal_translate_pango_cells),
-	(vte_terminal_set_scrollback_lines):
-	* src/vteseq.c: (vte_sequence_handler_decset_internal):
-		Fixup compiler warnings, mostly of the type mixing signed and
-		unsigned compares and pointers.
-
-2007-01-25  Chris Wilson 
-
-	* src/vte.c: (mark_input_source_invalid),
-	(_vte_terminal_connect_pty_read), (mark_output_source_invalid),
-	(_vte_terminal_connect_pty_write):
-		Use the GDestroyNotify to mark the source as invalid.
-	* src/vte.c: (vte_terminal_ensure_font):
-		Protect ensure fonts against the VteDraw being destroyed.
-	* src/vte.c: (vte_terminal_realize):
-	 	Reorder code to setup the style before the fonts.
-	* src/vte.c: (vte_terminal_class_init):
-		The ->show() handler was redundant.
-
-2007-01-25  Behdad Esfahbod  
-
-	* src/vte.c (_vte_terminal_set_default_attributes),
-	(_vte_invalidate_cells), (_vte_invalidate_all),
-	(_vte_invalidate_cell), (_vte_invalidate_cursor_once),
-	(vte_terminal_visibility_notify), (vte_terminal_handle_scroll):
-	Replace most of checks for terminal->pvt->visibility_state ==
-	GDK_VISIBILITY_FULLY_OBSCURED by terminal->pvt->invalidated_all, and
-	adapt.
-
-2007-01-25  Chris Wilson 
-
-	Bug 400759 – update problem with vte trunk
-
-	Otherwise known as the I can't count bug.
-
-	The number of rows and columns to paint were not properly taking
-	account of the discrete nature of the cells ie although the floor(x)
-	moved the start to the left by one, the extra cell was not being added
-	to the width.
-
-	Also since the howmany() macro is pulled from , it can
-	not be guarranteed to exist on all platforms. So in that case, provide
-	a local copy.
-
-	* src/vte.c: (vte_terminal_draw_area):
-		Calculate the width as the distance between the explicity
-		calculated start and end cells.
-
-2007-01-25  Chris Wilson 
-
-	Bug 400671 – crash in Terminal: detaching of tabs
-
-	The fontdirty flag needed to be set on unrealize to ensure the fonts
-	get set on the VteDraw should the terminal be realized again (e.g
-	drag'n'dropping).
-
-	* src/vte.c: (vte_terminal_unrealize):
-		Set the fontdirty flag to TRUE.
-	* src/vtexft.c: (_vte_xft_set_text_font),
-	(_vte_xft_get_char_width), (_vte_xft_draw_text),
-	(_vte_xft_draw_char):
-		Add safe guards to avoid dereferencing a NULL font as it
-		is possible for _vte_xft_font_open() to fail.
-
-2007-01-25  Chris Wilson 
-
-	Bug 399137 – UTF-8 problem in VteAccess
-
-	Improve the UTF-8 string handling within vteaccess.c
-	A long and fraught history to this apparently simple change.
-	Many thanks to Joanmarie Diggs and Rich Burridge for testing the
-	patches and ensuring they caused no regressions in the ally interface.
-
-	* src/vteaccess.c: (emit_text_changed_insert),
-	(emit_text_changed_delete):
-		Use g_utf8_pointer_to_offset() rather than open coding.
-	* src/vteaccess.c: (vte_terminal_accessible_text_modified):
-		Convert the caret into a byte offset before performing the
-		ASCII character lookup.
-		Iterate backwards over the string using a g_utf8_prev_char,
-		and g_utf8_get_char.
-
-2007-01-25  Chris Wilson 
-
-	Bug 400493 – Mouse selection seriously broken
-
-	The rendering of non-text attributes, e.g highlight, backgrounds,
-	underlines, was broken by the change to multi-row run of glyphs. This
-	was most apparent when selecting regions with a mouse.
-
-	* src/vte.c: (_vte_invalidate_cursor_once),
-	(vte_terminal_extend_selection),
-	(vte_terminal_draw_rows), (vte_terminal_draw_area),
-	(vte_terminal_paint):
-		Some janitorial work (a memleak, whitespace, improving debug
-		messages, comments).
-	* src/vte.c: (vte_terminal_draw_cells):
-		Loop over cells and draw attributes for groups of cells on
-		each row.
-
-2007-01-25  Chris Wilson 
-
-	Bug 400438 – _vte_invalidate_all triggered on GDK_VISIBILITY_UNOBSCURED
-
-	* src/vte.c: (vte_terminal_visibility_notify):
-		Only force an _vte_invalidate_all if we can trivially detect
-		that we have switch from fully obscured to fully unobscured.
-		Otherwise, we will just handle the GDK expose in the normal
-		manner.
-	* src/vte.c: (vte_terminal_expose):
-		Check the event area to see if we can use _vte_invalidate_all,
-		has a slight benefit of discarding further exposed area
-		processing.
-		
-
-2007-01-25  Chris Wilson 
-
-	GDK tries to coalesce multiple expose events into a single event.
-	This is passed to the application as a large region containing
-	multiple rectangles. The unfortunate effect of this is having
-	broken the invalidated region into 2 small components for vim,
-	the expose event was still operating on a single region covering
-	both. The reason the effect was invisible to the eye is due to the
-	double buffer - GDK generated a backing pixmap for the exposed event
-	and only copied from the pixmap to the window exactly the pixels
-	exposed. So we regenerated draw commands for the entire area, and
-	only saved on the later blit.
-
-	The improvement to this is only issue draw commands for the individual
-	rectangles rather than the region as a whole.
-
-	* src/vte.c: (vte_terminal_draw_area), (vte_terminal_paint),
-	(vte_terminal_expose):
-		Paint the exposed rectangles not the event clipbox!
-
-2007-01-25  Chris Wilson 
-
-	Print out the painted area for VTE_DEBUG_UPDATES.
-
-	* src/vte.c: (vte_terminal_paint):
-
-2007-01-24  Chris Wilson 
-
-	cf Bug 400072 – Handling of ; in control sequences
-
-	Moral of the story: wait until the morning.
-	Revert r1512, the mistaken attempt at parsing '\e[;30m'.
-
-	* src/table.c: (_vte_table_addi), (_vte_table_matchi),
-	(_vte_table_match):
-
-2007-01-24  Chris Wilson 
-
-	cf Bug 399617 – Avoid memory allocations during an expose event.
-
-	Currently we cannot generate long glyph runs due to the text
-	painting being broken up into single rows and setting a low
-	max run cap. The benefit of longer runs is the backends can
-	do more caching within a run and potentially generate fewer
-	render calls and/or less network traffic.
-
-	In the simple test case, this increased the performance of a
-	remote hexdump by 10%.
-
-	* src/vte.c: (vte_terminal_draw_rows), (vte_terminal_paint):
-		Scan entired exposed area for glyph runs.
-	* src/vtedraw.h:
-		Increase VTE_DRAW_MAX_LENGTH
-	* src/vtexft.c: (_vte_xft_draw_text):
-		Create GlyphSpecs rather than CharFontSpecs, saves a 
-		conversion and potential malloc inside libXft, and our
-		own malloc.
-
-2007-01-24  Chris Wilson 
-
-	Bug 147495 – screen flicker when opening new terminal windows
-
-	Last in a series of work to reduce extraneous redraws. I no longer
-	see the flicker when opening a white terminal.
-
-	* src/vte.c: (_vte_terminal_scroll_region):
-		Detect when we can just invalidate all.
-	* src/vte.c: (_vte_terminal_fork_basic):
-		Don't force an unnecessary redraw.
-
-2007-01-24  Chris Wilson 
-
-	* src/vte.c: (vte_terminal_set_emulation):
-		Add a missing '\n' to the debug printerr.
-	* src/vte.c: (vte_terminal_init):
-		Initialize the row count to VTE_MIN_SCROLLBACK (was to 0
-		first and then later within the same function to
-		VTE_MIN_SCROLLBACK).
-
-2007-01-24  Chris Wilson 
-
-	Bug 334755 – Incomplete information from vte_terminal_get_font
-
-	In many situations the font_desc stored in the terminal is incomplete.
-	_vte_fc_transcribe_from_pango_font_description() automagically fills
-	in default values for the backends but this is hidden from the
-	application. By filling in default values up front from the widget
-	font description control is returned to the application and theme
-	designers.
-
-	Patch by Pedro de Medeiros.
-	Also cf bug 335269.
-
-	* src/vte.c: (vte_terminal_set_font_full):
-		Pull default font description from widget.
-	* src/vtefc.c: (_vte_fc_transcribe_from_pango_font_description):
-		Remove default values.
-
-2007-01-24  Chris Wilson 
-
-	Bug 400184 – _vte_pty_open declaration mismatch - breaks on Solaris
-	actually revealed a faux-pas in the conversion of the public
-	interfaces to GPid - that it broke the ABI.
-
-	However, the intention is to remove the exposed pid_t, cf bug 400333.
-
-	* python/vte.defs:
-	* python/vte.override:
-	* src/pty.c: (_vte_pty_open):
-	* src/pty.h:
-	* src/vte.c: (_vte_terminal_fork_basic), (vte_terminal_forkpty):
-	* src/vte.h:
-		Revert the exposed GPids back to pid_t.
-
-2007-01-24  Chris Wilson 
-
-	==25123== Invalid read of size 1
-	==25123==    at 0x4055992: vte_terminal_accessible_text_modified (vteaccess.c:497)
-	==25123==    by 0x46A1248: g_cclosure_marshal_VOID__VOID (gmarshal.c:77)
-	==25123==    by 0x4693EAA: g_closure_invoke (gclosure.c:490)
-	==25123==    by 0x46A4972: signal_emit_unlocked_R (gsignal.c:2440)
-	==25123==    by 0x46A5E96: g_signal_emit_valist (gsignal.c:2199)
-	==25123==    by 0x46A85ED: g_signal_emit_by_name (gsignal.c:2267)
-	==25123==    by 0x403E9E2: _vte_terminal_emit_text_inserted (vte.c:863)
-	==25123==    by 0x40517EF: vte_terminal_process_incoming (vte.c:3032)
-	==25123==    by 0x40522B5: update_repeat_timeout (vte.c:11332)
-
-	* src/vteaccess.c: (vte_terminal_accessible_text_modified):
-		Check that the caret is inside the old string before
-		accessing.
-
-2007-01-24  Chris Wilson 
-
-	Revert changes in conjunction with bug 399137 back to r1487,
-	which contains Rich Burridge's fix for bug 397724.
-
-	* src/vteaccess.c: (emit_text_changed_insert),
-	(emit_text_changed_delete),
-	(vte_terminal_accessible_text_modified):
-
-2007-01-24  Chris Wilson 
-
-	* src/vteaccess.c: (vte_terminal_accessible_text_modified):
-		Valgrind pointed out a couple of places where we tried to
-		access before the start of the string.
-
-2007-01-24  Chris Wilson 
-
-	Bug 400184 – _vte_pty_open declaration mismatch - breaks on Solaris
-
-	Patch by Damien Carbery.
-
-	* src/pty.h:
-		Update prototype to match new definition.
-
-2007-01-24  Chris Wilson 
-
-	 hm, vte is not matching «ESC [ ; 7 m» :/
-
-	* src/table.c: (_vte_table_addi), (_vte_table_matchi),
-	(_vte_table_match):
-		s/GList/GSList/
-		g_slist_append -> g_slist_reverse(g_slist_prepend)
-		And finally add the subtable to handle the leading ';'
-		in the variable length parameters.
-
-2007-01-23  Chris Wilson 
-
-	A couple of minor buggets.
-
-	* src/iso2022.c: (_vte_iso2022_state_set_codeset):
-		Use g_intern_string() instead of from_quark(to_quark(str))
-	* src/vtepango.c: (_vte_pango_create), (_vte_pango_destroy),
-	(_vte_pango_start), (_vte_pango_end), (_vte_pango_set_text_font):
-		Use the widget pango context (we're guarranteed to have a
-		screen by this point) and don't unref it!
-		Inspired by Pedro de Medeiros in Bug 335269.
-
-2007-01-23  Chris Wilson 
-
-	Regression on Bug 123591:
-		mkdir /tmp/aa; cd /tmp/aa; bash; cd ..; rmdir aa
-		Open a new tab in g-t -> Failure.	
-
-	* src/pty.c: (_vte_pty_run_on_pty):
-		Check the error return from g_spawn and try again with the
-		pwd if it reports that the child could not change directory.
-
-2007-01-23  Chris Wilson 
-
-	* src/pty.c: (_vte_pty_run_on_pty):
-		Add all g_spawn parameters to VTE_DEBUG_MISC output.
-
-2007-01-22  Behdad Esfahbod  
-
-	Released vte-0.15.2.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.15.2.
-
-	* src/Makefile.am: Bumped libtool version to 10:9:1.
-
-2007-01-22  Chris Wilson 
-
-	Bug 399137 - continuation.
-
-	* src/vteaccess.c: (vte_terminal_accessible_text_modified):
-		Classic bug:
-			clen = cp - old
-		rather than the more correct
-			clen = cp - current
-
-2007-01-22  Chris Wilson 
-
-	* src/vteapp.c: (char_size_changed), (char_size_realized), (main):
-		Don't try to perform gdk operations on unrealized windows.
-
-2007-01-22  Chris Wilson 
-
-	* src/pty.c: (_vte_pty_run_on_pty):
-		Print out the argument vector for VTE_DEBUG_MISC.
-
-2007-01-22  Chris Wilson 
-
-	* src/pty.c: (_vte_pty_run_on_pty):
-		Protect against g_strv_length(NULL)
-
-2007-01-22  Chris Wilson 
-
-	Bug 399137 - continuation.
-
-	* src/vteaccess.c: (vte_terminal_accessible_text_modified):
-		After walking back along the UTF-8 string, remember to update
-		the string lengths that are used to detect insertions and
-		deletions!
-
-2007-01-22  Chris Wilson 
-
-	If the caret is at the end of the buffer, then it set past the
-	end of the offset array - do not use this as a lookup!
-
-	* src/vteaccess.c: (vte_terminal_accessible_text_modified):
-		If the caret points to past the last character, set the
-		offset to the string's NUL terminator.
-
-2007-01-22  Chris Wilson 
-
-	* configure.in:
-		Earlier configure.in update introduced a trailing ']', pair
-		it with its '['
-		
-
-2007-01-22  Chris Wilson 
-
-	Bug 132316 – terminal widget's context menu posting isn't exposed as an AtkAction
-
-	Original patch by 
-
-	* src/vteaccess.c: (vte_terminal_accessible_free_private_data),
-	(vte_terminal_accessible_component_init),
-	(vte_terminal_accessible_do_action),
-	(vte_terminal_accessible_get_n_actions),
-	(vte_terminal_accessible_action_get_description),
-	(vte_terminal_accessible_action_get_name),
-	(vte_terminal_accessible_action_get_keybinding),
-	(vte_terminal_accessible_action_set_description),
-	(vte_terminal_accessible_action_init),
-	(vte_terminal_accessible_get_type):
-		Remove grab_focus and defer to the parent's implementation.
-		Add an AtkAction iface.
-
-2007-01-22  Chris Wilson 
-
-	Bug 156161 – AccessibleText_getTextAtOffset returns wrong values in gnome-terminal
-
-	The code for ATK_TEXT_BOUNDARY_WORD_START and
-	ATK_TEXT_BOUNDARY_WORD_END is the same.
-
-	Patch by 
-
-	* src/vteaccess.c: (vte_terminal_accessible_get_text_somewhere):
-		Actually provide an implementation for
-		ATK_TEXT_BOUNDARY_WORD_END.
-
-2007-01-22  Chris Wilson 
-
-	Bug 399137 – UTF-8 problem in VteAccess
-
-	* src/vteaccess.c: (emit_text_changed_insert),
-	(emit_text_changed_delete):
-		use g_utf8_pointer_to_offset() instead of open coding
-	(vte_terminal_accessible_update_private_data_if_needed):
-		add the number of UTF-8 characters to the debug output.
-	(vte_terminal_accessible_text_modified):
-		iterate backwards over the UTF-8 string using
-		g_utf8_prev_char() and convert the caret into a byte offset
-		before it as such.
-
-2007-01-22  Chris Wilson 
-
-	Bug 123591 – vte_terminal_fork_command succeeds even when it does not
-
-	* python/vte.defs:
-	* python/vte.override:
-	* src/reaper.c: (vte_reaper_child_watch_cb):
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_catch_child_exited),
-	(_vte_terminal_fork_basic), (vte_terminal_forkpty):
-	* src/vte.h:
-	* src/vteapp.c:
-		s/pid_t/GPid/ portable variant, no API/ABI implications
-	* src/pty.c: (vte_pty_child_setup), (_vte_pty_run_on_pty),
-	(_vte_pty_fork_on_pty_name), (_vte_pty_fork_on_pty_fd),
-	(_vte_pty_open_unix98), (_vte_pty_pipe_open), (n_read), (n_write),
-	(_vte_pty_start_helper), (_vte_pty_open_with_helper),
-	(_vte_pty_open), (main):
-		Replace custom fork() and pipe based syncrohonisation scheme
-		with g_spawn_async_with_pipes() as it actually handles all
-		failure modes correctly, and gives us overtures of portability.
-		
-
-2007-01-22  Chris Wilson 
-
-	Hack'n'slash my way through doing a bit of weeding.
-
-	Fixed:
-	- Bug 345514 – -no-undefined doesn't work with latest libtool
-	- Bug 162003 – vte configure.in X checking can fail
-	             – though this may cause other regressions!
-	- Bug 314669 – Please specialize AC_PATH_XTRA
-
-	* configure.in:
-		Export LIBTOOL_EXPORT_OPTIONS for -no-undefined on windos.
-		Add to rather than override X_CFLAGS, X_LIBS
-		AC_PATH_XTRA - Find X11 using XFlush() rather than XtMalloc().
-		Print configuration details.
-	* src/Makefile.am:
-		Conditional compilation of backends.
-
-2007-01-22  Chris Wilson 
-
-	Bug 389538 – crash in Terminal: nothing
-
-	* src/vteaccess.c: (vte_terminal_accessible_get_text):
-		Guard against negative length strings.
-
-2007-01-22  Chris Wilson 
-
-	Bug 161479 – Scroll wheel generates Release events
-
-	 vte sends release events on scroll but xterm doesn't which breaks
-	 mc among others.
-
-	 Patch by Benedikt Meurer.
-
-	* src/vte.c: (vte_terminal_scroll):
-		Remove the offending release event.
-
-2007-01-20  Chris Wilson 
-
-	 ickle: sparse complains about dubious 1 bit bitfields
-		if you use gboolean instead of guint
-	 so s/gboolean/guint at line 166 and 174
-	 unless that changes the API, of course...
-	 it doesn't
-	 gboolean a:1 is not very correct anyways
-	 ickle: we've done the same change in other modules
-	 if I do it quick, behdad might not even notice ;)
-
-	* src/vte.h:
-		Convert signed single bit field to unsigned. The code
-		was setting it to 1 anyhow (and not -1 as the type indicated).
-
-2007-01-20  Chris Wilson 
-
-	Bug 398602 – Build Failure
-
-	* src/vte.c: (vte_terminal_expose):
-		Fixup typo. [Grrr. Must get git-svn back into sync]
-
-2006-11-19 Rich Burridge 
-
-        * src/vteaccess.c:
-        Fixed bug #397724 - Orca incorrect echo's certain input in 
-        gnome-terminal when key echo is set to off (on Ubuntu Feisty).
-
-2007-01-20  Chris Wilson 
-	
-	* src/vte.c: (vte_terminal_expose):
-		Also if the entire terminal is invalidated,
-		do not add more GTK+ exposes to it.
-
-2007-01-20  Chris Wilson 
-
-	Track when we have invalidated the entire terminal and skip adding
-	new regions when possible.
-
-	* src/vte-private.h:
-	* src/vte.c: (update_regions), (_vte_invalidate_cells),
-	(_vte_invalidate_all), (vte_terminal_size_allocate),
-	(reset_update_regions):
-
-2007-01-20  Chris Wilson 
-
-	Bug 398244 – Gnome-terminal opens a huge sized window
-
-	* src/vte.c: (vte_terminal_ensure_font),
-	(vte_terminal_set_font_full), (vte_terminal_size_request),
-	(vte_terminal_realize), (vte_terminal_get_char_width),
-	(vte_terminal_get_char_height), (vte_terminal_get_char_descent),
-	(vte_terminal_get_char_ascent):
-		Ensure the font metrics are calculated before use.
-
-2007-01-19  Chris Wilson 
-
-	* src/vte.c: (vte_terminal_process_incoming):
-		Do not invalidate the old cursor position if it was not
-		visible.
-
-2007-01-19  Chris Wilson 
-
-	* src/vte.c: (process_timeout):
-		Make sure ->process_timeout is set to VTE_INVALID_SOURCE on
-		all paths that remove the timeout.
-
-2007-01-19  Chris Wilson  
-
-	Add <> to mark boundaries of process_timeout().
-
-	* src/vte.c: (vte_terminal_class_init), (process_timeout):
-
-2007-01-19  Chris Wilson  
-
-	Add {},[] to mark boundaries of update_timeout() and notice that
-	the display limited update_timeout was not dying.
-
-	* src/vte.c: (vte_terminal_class_init), (update_repeat_timeout),
-	(update_timeout):
-
-2007-01-19  Chris Wilson 
-
-	* src/vte.c: (vte_terminal_realize), (remove_process_timeout):
-		Small cleanup:
-		 - protect remove_process_timeout against an invalid source.
-		 - move static prototypes into common block.
-		 - gdk_window_show() is done in map not realize.
-
-2007-01-19  Chris Wilson 
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_process_incoming):
-		Introduce a bit of slack in the bbox check to allow
-		for a small of amount of cursor motion e.g. due to line
-		scrolling. This turns the long sequence of
-		'(?!?!??? ... ????!)'
-		during a hexdump into the better behaved 
-		'.(?!?!?!??!)-+=.(?!?!??!)-+=........'. Although it is
-		puzzling why we now how have a block of IO and then two quick
-		display upates...
-
-2007-01-19  Chris Wilson 
-
-	* src/vte.c: (process_timeout), (update_repeat_timeout),
-	(update_timeout):
-		Repeat _vte_terminal_process_incoming until we have drained
-		the incoming buffers or we can handle no more. Fixes a
-		problem where the display wouldn't update if we hadn't
-		processed enough data (e.g. on startup, displaying the first
-		prompt). This bug corresponds with the sequence
-		'*-+=..()?!(?!?!?!)-+=' below, which now reads
-		'*-+=..()(?!?!?!)-+='
-
-2007-01-19  Chris Wilson 
-
-	* src/vte.c: (_vte_invalidate_cursor_once):
-		"%ld" for cursor indices.
-
-2007-01-19  Chris Wilson 
-
-	* src/vte.c: (_vte_invalidate_cells),
-	(_vte_invalidate_cursor_once):
-		Cursor indices are long.
-
-2007-01-19  Chris Wilson 
-
-	* src/vte-private.h:
-	* src/vte.c: (_vte_invalidate_cell):
-		Cursor indices are long.
-	* src/vte.c: (_vte_terminal_expose):
-		Prepend the GTK+ generated expose if we already have an
-		display update pending.
-
-2007-01-19  Chris Wilson 
-
-	Add a new debug flag to visualize the work flow.
-	VTE_DEBUG_FLAGS=work generates output like:
-	Debugging work flow (top input to bottom output):
-	  .  _vte_terminal_process_incoming
-	  (  start _vte_terminal_process_incoming
-	  ?  _vte_invalidate_cells (call)
-	  !  _vte_invalidate_cells (dirty)
-	  *  _vte_invalidate_all
-	  )  end _vte_terminal_process_incoming
-	  -  gdk_window_process_all_updates
-	  +  vte_terminal_expose
-	  =  vte_terminal_paint
-	*?!**+=*-+=..()?!(?!?!?!)-+=?!-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.().(?!?!?!)-+=.().(?!?!?!)-+=.().().(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!?!)-+=.(?!?!)-+=.............................................................................................................................................................................................................................................................................(?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????!??!)-+=.......................................................................
-
-	Which tells me I have two bugs to track:
-		1. the initial '..()' is a missing invalidate.
-		2. '(?!?!????????????????????!??!)' is not very efficient.
-
-	* src/debug.c: (_vte_debug_parse_string):
-	* src/debug.h:
-	* src/vte.c: (update_regions), (_vte_invalidate_cells),
-	(_vte_invalidate_all), (vte_terminal_process_incoming),
-	(vte_terminal_io_read), (vte_terminal_paint),
-	(vte_terminal_expose), (vte_terminal_class_init):
-		Add VTE_DEBUG_WORK
-
-2007-01-19  Chris Wilson 
-
-	Bug 398150 – cursor leaves trail behind in vim
-
-	* src/vte-private.h:
-	* src/vte.c: (_vte_invalidate_cell),
-	(vte_terminal_process_incoming):
-	* src/vteseq.c: (vte_sequence_handler_decset_internal):
-		Invalidate the old cursor position if we detect the cursor
-		moved during the sequence or if the cursor changed state.
-
-2007-01-19  Chris Wilson 
-
-	* src/Makefile.am:
-		Missing $(X_CFLAGS)
-
-2007-01-19  Chris Wilson 
-
-	Bug 398243 – Crash
-
-	* src/vtebg.c: (vte_bg_cache_prune_int):
-		Use the return from g_list_delete_link to maintain the list
-		head.
-
-2007-01-18  Chris Wilson 
-
-	* src/vte.c: (_vte_invalidate_cells):
-		Check that the start of the invalid region is on screen.
-
-2007-01-18  Chris Wilson 
-
-	Bug 398116 – lags behind when widget not visible
-
-	* src/vte.c: (vte_terminal_handle_scroll):
-		During the spring clean, I converted a few GTK_WIDGET_REALIZED()
-		checks to GTK_WIDGET_DRAWABLE()+visibility check.
-		Unfortunately, it broke keeping the scroll delta in sync with
-		the insert delta. Sync the pair, then perform the check before
-		making updates on the visible area.
-
-2007-01-18  Chris Wilson 
-
-	Bug 398083 – background not painted correctly when starting up
-
-	* src/vte.c: (_vte_invalidate_all):
-		Compute drawable area in window co-ordinates and not widget
-		co-ordinates.
-
-2007-01-18  Chris Wilson 
-
-	* src/vte.c: (vte_terminal_expose):
-		Small bit of logic inversion that would have tried to paint
-		on unmapped and invisible widgets.
-
-2007-01-18  Chris Wilson 
-	And the corresponding overrides. [The downsides of losing track of
-	which machine you are working on.]
-
-	* python/vte.override:
-		Add (get_text_include_trailing_spaces)
-
-2007-01-18  Chris Wilson 
-
-	Add missing export of vte_terminal_get_text_include_trailing_spaces,
-	needed for building a simple testcase for Bug 397724.
-	vte.defs needs a bit of love...
-
-	* python/vte.defs:
-		Add (get_text_include_trailing_spaces)
-
-2007-01-18  Chris Wilson 
-
-	* src/vterdb.c: (_vte_rdb_search), (_vte_rdb_boolean):
-		Fix a couple of compiler warnings.
-
-2007-01-18  Chris Wilson 
-
-	* src/vte.c: (vte_terminal_process_incoming):
-		Delete some dead code.
-
-2007-01-18  Chris Wilson 
-
-	* configure.in:
-		Restore --enable-debugging. 
-
-2007-01-18  Chris Wilson  
-
-	Copy Behdad's MAYBE_WARN comprehensive set of warnings from Cairo,
-	and fixup the immediate compilation failures.
-
-	* configure.in:
-		Iterate over a list of warnings and check that they are valid
-		for the compiler.
-		
-	* src/debug.c: (_vte_debug_on):
-		Kill fflush() [redundant with g_printerr].
-
-2007-01-18  Behdad Esfahbod  
-
-	* configure.in: Don't call AC_CANONICAL_HOST.  Libtool calls it
-	already.
-
-	* src/Makefile.am: Don't build extra, test, programs by default.
-	Speeds build up.
-
-2007-01-18  Behdad Esfahbod  
-
-	* src/ring.c (_vte_ring_insert_preserve):
-	* src/vte.c (vte_terminal_paint):
-	Fix loop-optimization warnings.
-
-2007-01-18  Behdad Esfahbod  
-
-	* src/ssfe.c (cleanupexit), (barf):
-	* src/vtebg.c (vte_bg_cache_prune_int):
-	* src/vtetc.c (main):
-	Fix more warnings.
-
-2007-01-18  Behdad Esfahbod  
-
-	* src/table.c (main):
-	* src/trie.c (_vte_trie_addx), (main):
-	* src/utf8echo.c (main):
-	Fix int vs long int mismatches in printf args.
-
-2007-01-18  Behdad Esfahbod  
-
-	* src/iso2022.c (_vte_iso2022_find_nextctl):
-	* src/reaper.c (vte_reaper_finalize):
-	* src/vte.c (_vte_terminal_insert_char), (vte_terminal_key_press),
-	(vte_terminal_init), (vte_terminal_size_allocate):
-	* src/vteapp.c (main):
-	* src/vtedraw.c (_vte_draw_init_default):
-	* src/vteglyph.c (_vte_glyph_cache_free):
-	* src/vtergb.c (_vte_rgb_copy):
-	* src/vtexft.c (_vte_xft_font_for_char):
-	Remove unused variables.
-
-2007-01-18  Chris Wilson  
-
-	Bug 161342 revisited. Reset the box to +-inf and not the current
-	cursor otherwise you just reproduce the slow behaviour (an overly
-	large invalidation area).
-
-	* src/vte.c: (vte_terminal_process_incoming):
-		Reset bbox to +-inf.
-
-2007-01-17  Chris Wilson  
-
-	Second breakage: VTE_INVALID_SOURCE !=0 and calling
-	vte_terminal_set_scrollback_lines with lines == ->scrollback_lines
-	is not a nop.
-
-	* src/vte.c: (vte_terminal_background_update),
-	(vte_terminal_queue_background_update):
-		VTE_INVALID_SOURCE != 0
-	(vte_terminal_set_scrollback_lines):
-		reset the rowdata everytime.
-
-2007-01-17  Chris Wilson  
-
-	Bug 397414 - port vteapp to GOption
-
-	* src/vteapp.c: (main):
-		Translation of getopt switch to GOptionEntry[].
-		Missing help for --geometry.
-
-2007-01-17  Chris Wilson  
-
-	First breakage spotted: the realized flag is set too late in
-	the realize handler. Note to self: not everybody uses a black
-	background.
-
-	* src/vte.c: (vte_terminal_realize):
-		Restore GTK_WIDGET_SET_FLAGS(REALIZED)
-
-2007-01-17  Chris Wilson  
-
-	Bug 395373 - Allow the user to specify backend priorities.
-
-	* src/vtedraw.c: (_vte_draw_init_user), (_vte_draw_init_default),
-	(_vte_draw_new):
-		Scan $ENV{VTE_BACKEND} for the user's preferred backend
-		and failover to the first working backend.
-		Discard checking VTE_USE_*
-
-	* src/vtedraw.h:
-	* src/vteft2.c:
-	* src/vteft2.h:
-	* src/vtegl.c:
-	* src/vtegl.h:
-	* src/vtepango.c:
-	* src/vtepango.h:
-	* src/vtepangox.c:
-	* src/vtepangox.h:
-	* src/vteskel.c: (_vte_skel_check), (_vte_skel_create),
-	(_vte_skel_destroy), (_vte_skel_start):
-	* src/vteskel.h:
-	* src/vtexft.c:
-	* src/vtexft.h:
-		Remove the environment variable field, drop the "Vte" prefix
-		from the backend names and make the exported structure const.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/iso2022.c: (_vte_iso2022_is_ambiguous):
-	* src/vte-private.h:
-	* src/vte.c: (_vte_terminal_set_default_attributes),
-	(vte_terminal_set_default_tabstops), (vte_terminal_set_encoding),
-	(vte_terminal_set_opacity), (vte_terminal_set_default_colors),
-	(vte_terminal_emit_pending_text_signals),
-	(vte_terminal_feed_child_using_modes),
-	(vte_terminal_hierarchy_changed),
-	(vte_terminal_send_mouse_button_internal),
-	(vte_terminal_maybe_send_mouse_drag), (vte_terminal_set_font),
-	(vte_terminal_set_font_from_string), (vte_terminal_set_size),
-	(vte_terminal_handle_scroll), (vte_terminal_set_scroll_adjustment),
-	(vte_terminal_set_emulation), (vte_terminal_set_termcap),
-	(vte_terminal_init), (vte_terminal_size_allocate),
-	(vte_terminal_unrealize), (vte_terminal_finalize),
-	(vte_terminal_realize), (vte_terminal_determine_colors),
-	(vte_terminal_background_update),
-	(vte_terminal_queue_background_update),
-	(vte_terminal_set_background_transparent),
-	(vte_terminal_set_cursor_blinks),
-	(vte_terminal_set_scrollback_lines), (vte_terminal_reset),
-	(vte_terminal_set_pty):
-	* src/vteseq.c: (vte_sequence_handler_st),
-	(vte_sequence_handler_vb),
-	(vte_sequence_handler_device_status_report),
-	(vte_sequence_handler_dec_device_status_report),
-	(vte_sequence_handler_window_manipulation):
-		Janitorial work to improve code readability and small
-		micro-optimisations, such as use the length returned by
-		g_snprintf rather then calling strlen on the result or just
-		using a constant string.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/ring.h:
-		Make the debug checks conditional on VTE_DEBUG.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/matcher.c: (_vte_matcher_add), (_vte_matcher_create),
-	(_vte_matcher_destroy), (_vte_matcher_new), (_vte_matcher_match),
-	(_vte_matcher_print):
-	* src/matcher.h:
-	* src/table.c: (_vte_table_new):
-	* src/table.h:
-	* src/trie.c: (_vte_trie_new):
-	* src/trie.h:
-		_vte_match_match() is called extremely frequently, and the
-		switch shows up on the profiles. Replace the switch with a
-		function pointer obtained by introducing function tables for
-		the matcher implementations.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_terminal_set_font_full), (vte_terminal_realize):
-		Don't load a font until the terminal is realized.
-		Saves decoding 2 or 3 fonts before g-t is mapped.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/vteseq.c: (vte_g_array_fill):
-		Micro-optimise the loop.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/vteft2.c: (_vte_ft2_create), (_vte_ft2_start),
-	(_vte_ft2_end), (update_bbox), (_vte_ft2_set_text_font),
-	(_vte_ft2_draw_text):
-	* src/vtergb.c: (_vte_rgb_buffer_new), (_vte_rgb_buffer_resize),
-	(_vte_rgb_draw_color_rgb), (_vte_rgb_copy):
-	* src/vtergb.h:
-		Reuse converted glyphs within a run.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/vteconv.c: (_vte_conv_utf8_strlen), (_vte_conv):
-		Micro-optimise the loops.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/vteglyph.c: (_vte_glyph_free), (_vte_cached_glyph_free),
-	(_vte_glyph_cache_new), (_vte_glyph_cache_free),
-	(_vte_glyph_cache_set_font_description),
-	(_vte_glyph_cache_has_char), (_vte_glyph_remap_char),
-	(_vte_glyph_get_uncached), (_vte_glyph_get), (_vte_glyph_draw):
-	* src/vteglyph.h:
-		Avoid the double glyph lookup in _vte_glyph_get and
-		replace the tree with a hash.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/iso2022.c: (_vte_iso2022_state_new),
-	(_vte_iso2022_state_free), (_vte_iso2022_state_set_codeset):
-	* src/trie.c: (_vte_trie_add), (convert_mbstowcs):
-	* src/utf8echo.c: (main):
-	* src/vte.c: (vte_terminal_set_encoding), (vte_terminal_send),
-	(vte_terminal_init), (vte_terminal_finalize),
-	(vte_terminal_set_word_chars):
-	* src/vteconv.c: (_vte_conv_open), (_vte_conv_close), (_vte_conv):
-	* src/vteconv.h:
-	* src/vteseq.c: (vte_sequence_handler_set_title_internal):
-		s/(VteConv)-1/VTE_INVALID_CONV/
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/vte.c: (_vte_new_row_data), (_vte_new_row_data_sized),
-	(_vte_terminal_find_row_data), (_vte_row_data_find_charcell),
-	(vte_line_is_wrappable), (vte_terminal_extend_selection),
-	(vte_terminal_draw_row):
-		Refactor vte_find_row_data to simplify and improve
-		some logic.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/vte.c: (vte_g_array_fill), (vte_terminal_emit_commit),
-	(_vte_terminal_ensure_cursor), (_vte_terminal_insert_char),
-	(_vte_terminal_fork_basic), (vte_terminal_process_incoming),
-	(vte_terminal_key_press), (vte_terminal_visibility_notify),
-	(vte_terminal_apply_metrics), (vte_terminal_paint),
-	(vte_terminal_expose):
-		Callgrind driven rewrite of critical loops.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/vte-private.h:
-	* src/vte.c: (_vte_terminal_connect_pty_write),
-	(_vte_terminal_disconnect_pty_write), (vte_terminal_io_read),
-	(vte_terminal_feed), (vte_terminal_feed_child_binary),
-	(vte_terminal_init), (vte_terminal_unrealize),
-	(add_process_timeout), (add_update_timeout),
-	(remove_process_timeout), (vte_terminal_stop_processing),
-	(vte_terminal_is_processing), (vte_terminal_start_processing),
-	(process_timeout), (update_repeat_timeout), (update_timeout):
-		The rate-limiting step is the display update - we do not need
-		to process input faster than we are displaying it. So use the
-		update display timeout to process new input (and dirty some
-		more pixels).
-
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/interpret.c: (main):
-	* src/iso2022.c: (_vte_iso2022_fragment_input),
-	(_vte_iso2022_process), (main):
-	* src/vte.c: (vte_terminal_match_contents_refresh),
-	(vte_terminal_process_incoming), (vte_terminal_init),
-	(vte_terminal_set_word_chars):
-	* src/vteaccess.c:
-	(vte_terminal_accessible_update_private_data_if_needed):
-	* src/vtefc.c: (_vte_fc_patterns_from_pango_font_desc):
-	* src/vtefc.h:
-	* src/vteglyph.c: (_vte_glyph_cache_new), (_vte_glyph_cache_free),
-	(_vte_glyph_cache_set_font_description):
-	* src/vteglyph.h:
-	* src/vteregex.c: (_vte_regex_sort_matches):
-	* src/vtexft.c: (_vte_xft_font_open), (_vte_xft_font_close),
-	(_vte_xft_font_for_char):
-		s/g_array_new(TRUE, TRUE/g_array_new(FALSE, FALSE/
-		All uses of GArray respect their lengths and do not
-		zero-termination or untouched members to be cleared.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/iso2022.c: (_vte_iso2022_state_free):
-	* src/matcher.c: (_vte_matcher_free_params_array):
-	* src/ring.c: (_vte_ring_free):
-	* src/table.c: (_vte_table_free):
-	* src/trie.c: (_vte_trie_match):
-	* src/vte.c: (_vte_terminal_match_contents_clear),
-	(_vte_terminal_fork_basic),
-	(vte_terminal_get_text_range_maybe_wrapped), (vte_terminal_copy),
-	(vte_terminal_finalize), (vte_terminal_draw_cells_with_attributes):
-	* src/vteaccess.c: (vte_terminal_accessible_free_private_data):
-	* src/vtebg.c: (vte_bg_root_pixmap), (vte_bg_cache_item_free):
-	* src/vteconv.c: (_vte_conv_close):
-	* src/vtedraw.c: (_vte_draw_free):
-	* src/vteft2.c: (_vte_ft2_destroy):
-	* src/vtegl.c: (_vte_gl_destroy):
-	* src/vteglyph.c: (_vte_glyph_cache_free):
-	* src/vtepango.c: (_vte_pango_destroy):
-	* src/vtepangox.c: (_vte_pango_x_destroy):
-	* src/vtergb.c: (_vte_rgb_buffer_new), (_vte_rgb_buffer_free):
-	* src/vteseq.c: (vte_sequence_handler_se),
-	(vte_sequence_handler_so):
-	* src/vteskel.c: (_vte_skel_destroy):
-	* src/vtexft.c: (_vte_xft_font_close), (_vte_xft_destroy):
-		Do not zero memory in destructors, as glib will zero all
-		freed memory if G_DEBUG=gc-friendly.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/reaper.c: (vte_reaper_add_child), (vte_reaper_init),
-	(vte_reaper_constructor), (vte_reaper_finalize),
-	(vte_reaper_class_init), (vte_reaper_get), (main):
-	* src/vte.c: (G_DEFINE_TYPE_WITH_CODE), (_vte_terminal_fork_basic),
-	(vte_terminal_key_press), (vte_terminal_init), (vte_terminal_show),
-	(vte_terminal_finalize), (vte_terminal_get_accessible),
-	(vte_terminal_class_init):
-	* src/vteaccess.c: (vte_terminal_initialize),
-	(vte_terminal_accessible_finalize),
-	(vte_terminal_accessible_class_init),
-	(vte_terminal_accessible_get_type),
-	(vte_terminal_accessible_factory_init),
-	(vte_terminal_accessible_factory_new):
-	* src/vtebg.c: (vte_bg_native_new), (vte_bg_finalize),
-	(vte_bg_class_init), (vte_bg_init), (vte_bg_get_for_screen),
-	(vte_bg_cache_item_free), (vte_bg_cache_prune_int),
-	(_vte_bg_resize_pixbuf), (vte_bg_set_root_pixmap),
-	(vte_bg_cache_add), (vte_bg_cache_search), (vte_bg_get_pixmap),
-	(vte_bg_get_pixbuf):
-		Use GObject boiler-plate code (G_DEFINE_TYPE),
-		as opposed to open coding.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/vte-private.h:
-	* src/vte.c: (vte_free_row_data), (vte_g_array_fill),
-	(vte_terminal_find_charcell), (vte_terminal_preedit_width),
-	(vte_terminal_preedit_length), (_vte_invalidate_cursor_once),
-	(vte_invalidate_cursor_periodic), (vte_terminal_deselect_all),
-	(vte_terminal_set_default_tabstops),
-	(vte_terminal_match_contents_refresh), (vte_terminal_cursor_new),
-	(vte_terminal_match_check_internal),
-	(vte_terminal_emit_adjustment_changed),
-	(vte_terminal_queue_adjustment_changed),
-	(vte_terminal_scroll_pages), (vte_terminal_maybe_scroll_to_top),
-	(vte_terminal_maybe_scroll_to_bottom),
-	(_vte_terminal_set_pointer_visible), (vte_terminal_new),
-	(vte_terminal_set_color_internal), (vte_terminal_set_color_bold),
-	(vte_terminal_set_color_dim), (vte_terminal_set_color_foreground),
-	(vte_terminal_set_color_background),
-	(vte_terminal_set_color_cursor),
-	(vte_terminal_set_color_highlight), (vte_terminal_handle_sequence),
-	(vte_terminal_catch_child_exited),
-	(_vte_terminal_connect_pty_read),
-	(_vte_terminal_connect_pty_write), (_vte_terminal_fork_basic),
-	(vte_terminal_eof), (vte_terminal_im_reset),
-	(vte_terminal_process_incoming), (vte_terminal_io_read),
-	(vte_terminal_io_write), (vte_terminal_send),
-	(vte_terminal_im_commit), (vte_terminal_im_preedit_start),
-	(vte_terminal_im_preedit_end), (vte_terminal_im_preedit_changed),
-	(vte_terminal_configure_toplevel),
-	(vte_terminal_hierarchy_changed), (vte_terminal_style_changed),
-	(add_cursor_timeout), (vte_terminal_key_press), (vte_same_class),
-	(vte_line_is_wrappable), (vte_terminal_paste_cb),
-	(vte_terminal_send_mouse_button_internal),
-	(vte_terminal_maybe_send_mouse_drag), (vte_terminal_clear_cb),
-	(vte_terminal_copy_cb),
-	(vte_terminal_get_text_range_maybe_wrapped),
-	(vte_terminal_clipboard_get), (vte_terminal_copy),
-	(vte_terminal_paste), (vte_terminal_autoscroll),
-	(vte_terminal_start_autoscroll), (vte_terminal_motion_notify),
-	(vte_terminal_button_press), (vte_terminal_button_release),
-	(vte_terminal_focus_in), (vte_terminal_focus_out),
-	(vte_terminal_visibility_notify), (vte_terminal_apply_metrics),
-	(vte_terminal_set_font_full), (vte_terminal_refresh_size),
-	(vte_terminal_handle_scroll), (vte_terminal_set_scroll_adjustment),
-	(vte_terminal_connect_xft_settings),
-	(vte_terminal_disconnect_xft_settings),
-	(_vte_terminal_codeset_changed_cb), (vte_terminal_init),
-	(vte_terminal_size_request), (vte_terminal_size_allocate),
-	(vte_terminal_show), (root_pixmap_changed_cb),
-	(vte_terminal_unrealize), (vte_terminal_finalize),
-	(vte_terminal_realize), (vte_terminal_determine_colors),
-	(vte_terminal_paint), (vte_terminal_expose), (vte_terminal_scroll),
-	(vte_terminal_get_accessible), (vte_terminal_im_append_menuitems),
-	(vte_terminal_background_update),
-	(vte_terminal_queue_background_update),
-	(vte_terminal_set_background_image),
-	(vte_terminal_set_background_image_file),
-	(vte_terminal_set_cursor_blinks), (vte_terminal_reset),
-	(vte_terminal_set_pty):
-	* src/vteaccess.c: (vte_terminal_initialize),
-	(vte_terminal_accessible_finalize):
-	* src/vtedraw.c: (_vte_draw_new), (_vte_draw_free),
-	(_vte_draw_start), (_vte_draw_end):
-	* src/vtefc.c: (_vte_fc_transcribe_from_pango_font_description),
-	(_vte_fc_defaults_from_gtk), (_vte_fc_connect_settings_changes),
-	(_vte_fc_disconnect_settings_changes):
-	* src/vteft2.c: (_vte_ft2_destroy),
-	(_vte_ft2_set_background_image), (_vte_ft2_clear):
-	* src/vtegl.c: (_vte_gl_destroy), (_vte_gl_set_background_image),
-	(_vte_gl_clear):
-	* src/vtepango.c: (_vte_pango_destroy), (_vte_pango_start),
-	(_vte_pango_end), (_vte_pango_set_background_image),
-	(_vte_pango_set_text_font):
-	* src/vtepangox.c: (_vte_pango_x_destroy), (_vte_pango_x_start),
-	(_vte_pango_x_end), (_vte_pango_x_set_background_image),
-	(_vte_pango_x_set_text_font):
-	* src/vterdb.c: (_vte_rdb_get):
-	* src/vteseq.c: (vte_sequence_handler_scroll_up_or_down),
-	(vte_sequence_handler_set_title_internal), (vte_terminal_beep),
-	(vte_sequence_handler_do), (vte_sequence_handler_sf),
-	(vte_sequence_handler_sr), (vte_sequence_handler_vb),
-	(vte_sequence_handler_window_manipulation):
-	* src/vteskel.c: (_vte_skel_destroy):
-	* src/vtetree.c: (_vte_tree_new), (_vte_tree_destroy):
-	* src/vtexft.c: (_vte_xft_set_background_image), (_vte_xft_clear):
-		Remove superfluous checks and run-time checked type casts.
-
-2007-01-17  Chris Wilson  
-
-	As part of Bug 397439.
-
-	* src/debug.c:
-	* src/iso2022.c: (_vte_iso2022_ambiguous_width_guess),
-	(_vte_iso2022_state_new), (_vte_iso2022_state_set_codeset),
-	(process_8_bit_sequence), (process_cdata), (process_control),
-	(_vte_iso2022_process):
-	* src/keymap.c: (_vte_keymap_map):
-	* src/matcher.c: (_vte_matcher_init), (_vte_matcher_create),
-	(_vte_matcher_destroy):
-	* src/pty.c: (_vte_pty_run_on_pty), (_vte_pty_fork_on_pty_name),
-	(_vte_pty_fork_on_pty_fd), (_vte_pty_set_size),
-	(_vte_pty_get_size), (_vte_pty_ptsname), (_vte_pty_open_unix98),
-	(_vte_pty_open_with_helper), (_vte_pty_open), (main):
-	* src/reaper.c: (vte_reaper_emit_signal),
-	(vte_reaper_child_watch_cb), (vte_reaper_init),
-	(vte_reaper_finalize):
-	* src/reflect.c: (text_changed_insert), (text_changed_delete):
-	* src/ring.c: (_vte_ring_insert), (_vte_ring_insert_preserve),
-	(_vte_ring_remove), (scrolled_off), (main):
-	* src/slowcat.c: (main):
-	* src/table.c: (_vte_table_printi), (_vte_table_print):
-	* src/trie.c: (char_class_string_extract):
-	* src/vte.c: (_vte_invalidate_cursor_once),
-	(vte_terminal_emit_selection_changed), (vte_terminal_emit_commit),
-	(vte_terminal_emit_emulation_changed),
-	(vte_terminal_emit_encoding_changed),
-	(vte_terminal_emit_child_exited),
-	(_vte_terminal_emit_contents_changed),
-	(vte_terminal_emit_cursor_moved), (vte_terminal_emit_eof),
-	(vte_terminal_emit_char_size_changed),
-	(_vte_terminal_emit_status_line_changed),
-	(vte_terminal_emit_increase_font_size),
-	(vte_terminal_emit_decrease_font_size),
-	(_vte_terminal_emit_text_inserted),
-	(_vte_terminal_emit_text_deleted),
-	(vte_terminal_emit_text_modified),
-	(vte_terminal_emit_text_scrolled), (vte_terminal_deselect_all),
-	(vte_terminal_match_check_internal), (vte_terminal_match_check),
-	(vte_terminal_emit_adjustment_changed),
-	(vte_terminal_queue_adjustment_changed),
-	(_vte_terminal_adjust_adjustments), (vte_terminal_scroll_pages),
-	(vte_terminal_maybe_scroll_to_bottom), (vte_terminal_set_encoding),
-	(_vte_terminal_set_pointer_visible), (vte_terminal_new),
-	(vte_terminal_generate_bold), (_vte_terminal_insert_char),
-	(display_control_sequence), (vte_terminal_fork_command),
-	(vte_terminal_emit_pending_text_signals),
-	(vte_terminal_process_incoming), (vte_terminal_io_write),
-	(vte_terminal_send), (vte_terminal_im_commit),
-	(vte_terminal_im_preedit_start), (vte_terminal_im_preedit_end),
-	(vte_terminal_im_preedit_changed),
-	(vte_terminal_configure_toplevel),
-	(vte_terminal_hierarchy_changed), (vte_terminal_style_changed),
-	(vte_terminal_key_press), (vte_terminal_paste_cb),
-	(vte_terminal_match_hilite_clear), (vte_terminal_match_hilite),
-	(vte_terminal_clear_cb), (vte_terminal_copy_cb),
-	(vte_terminal_copy), (vte_terminal_paste),
-	(vte_terminal_start_selection), (vte_terminal_extend_selection),
-	(vte_terminal_autoscroll), (vte_terminal_motion_notify),
-	(vte_terminal_button_press), (vte_terminal_button_release),
-	(vte_terminal_focus_in), (vte_terminal_focus_out),
-	(vte_terminal_set_font_full), (vte_terminal_set_size),
-	(vte_terminal_handle_scroll), (vte_terminal_set_emulation),
-	(vte_terminal_set_termcap), (vte_terminal_reset_rowdata),
-	(vte_terminal_fc_settings_changed), (vte_terminal_init),
-	(vte_terminal_size_request), (vte_terminal_size_allocate),
-	(vte_terminal_show), (vte_terminal_unrealize),
-	(vte_terminal_finalize), (vte_terminal_realize),
-	(vte_terminal_draw_cells), (_vte_terminal_map_pango_color),
-	(vte_terminal_paint), (vte_terminal_scroll),
-	(vte_terminal_class_init), (vte_terminal_get_type),
-	(vte_terminal_copy_clipboard), (vte_terminal_paste_clipboard),
-	(vte_terminal_copy_primary), (vte_terminal_paste_primary),
-	(vte_terminal_background_update),
-	(vte_terminal_queue_background_update),
-	(vte_terminal_set_background_saturation),
-	(vte_terminal_set_background_tint_color),
-	(vte_terminal_set_background_transparent),
-	(vte_terminal_set_background_image),
-	(vte_terminal_set_background_image_file),
-	(vte_terminal_set_word_chars):
-	* src/vteaccess.c: (emit_text_caret_moved),
-	(emit_text_changed_insert), (emit_text_changed_delete),
-	(vte_terminal_accessible_update_private_data_if_needed),
-	(vte_terminal_accessible_invalidate_cursor),
-	(vte_terminal_accessible_finalize),
-	(vte_terminal_accessible_get_text),
-	(vte_terminal_accessible_get_text_somewhere),
-	(vte_terminal_accessible_text_init),
-	(vte_terminal_accessible_component_init),
-	(vte_terminal_accessible_factory_new):
-	* src/vteapp.c: (main):
-	* src/vtebg.c: (vte_bg_root_pixmap), (_vte_bg_resize_pixbuf):
-	* src/vtedraw.c: (_vte_draw_new):
-	* src/vtepango.c: (_vte_pango_set_text_font):
-	* src/vtepangox.c: (_vte_pango_x_set_text_font):
-	* src/vteseq.c: (vte_terminal_emit_deiconify_window),
-	(vte_terminal_emit_iconify_window),
-	(vte_terminal_emit_icon_title_changed),
-	(vte_terminal_emit_window_title_changed),
-	(vte_terminal_emit_raise_window), (vte_terminal_emit_lower_window),
-	(vte_terminal_emit_maximize_window),
-	(vte_terminal_emit_refresh_window),
-	(vte_terminal_emit_restore_window),
-	(vte_terminal_emit_move_window), (vte_terminal_emit_resize_window),
-	(vte_sequence_handler_set_title_internal),
-	(vte_sequence_handler_decset_internal), (vte_sequence_handler_bt),
-	(vte_sequence_handler_application_keypad),
-	(vte_sequence_handler_normal_keypad),
-	(vte_sequence_handler_window_manipulation):
-	* src/vtetc.c: (main):
-	* src/vtexft.c: (_vte_xft_set_text_font):
-		s/fprintf(stderr,/g_printerr(/
-
-2007-01-17  Chris Wilson  
-
-	Only invalidate groups of inserted chars and not the whole bbox.
-	This speeds up applications like vim which maintain a status line
-	at the bottom of the screen. Fixes bug 161342.
-
-	* src/vte-private.h:
-	* src/vte.c: (update_regions), (_vte_invalidate_cells),
-	(_vte_invalidate_all), (_vte_terminal_scroll_region),
-	(vte_terminal_process_incoming), (reset_update_regions),
-	(remove_update_timeout), (update_repeat_timeout), (update_timeout):
-
-2007-01-15  Behdad Esfahbod  
-
-	Bug 387171 – vte fails to install on FreeBSD due to missing header
-	Patch from Roy Marples
-
-	* src/vteseq.c: #include 
-
-2007-01-15  Behdad Esfahbod  
-
-	Bug 396831 – Unable to compile without X
-	Patch from Chris Wilson
-
-	* src/vtebg.c (_vte_bg_display_sync), (vte_bg_root_pixmap): Add stubs.
-
-2007-01-09  Ryan Lortie  
-
-	Bug 394890 – Segfault when running vte or gnome-terminal
-
-	* src/vtetc.c (_vte_termcap_find_string): change 'int' to 'gssize' to
-	match previous fixup.  Hopefully that does it. :)
-
-2007-01-08  Behdad Esfahbod  
-
-	Released vte-0.15.1.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.15.1.
-
-	* src/Makefile.am: Bumped libtool version to 10:8:1.
-
-2006-12-29  Ryan Lortie  
-
-	Small fix to the previous patch.
-
-	* src/vtetc.c (_vte_termcap_find_string_length): 'int' is not the same
-	as 'gssize' on 64bit platforms, causing compile errors.
-
-2006-12-27  Ryan Lortie  
-
-	Bug 354061 – Excessive use of strlen by _vte_termcap_create
-
-	* src/vtetc.c: near-complete rewrite to use a GMappedFile rather than
-	reading a line at a time with excessive strlen/realloc use.
-
-	* str/matcher.c: this shouldn't be calling the strip code as the
-	strings it has are already unescaped.
-
-2006-12-27  Ryan Lortie  
-
-	Bug 387475 – Gtk-Warning spew in gnome-terminal
-
-	Problem introduced by fix to bug 356552.
-
-	* src/vte.c (vte_invalidate_cursor_periodic): Add a temporary backward
-	compatibility hack to prevent GObject from spewing warnings about
-	missing GtkSettings properties in old GTK versions.
-
-2006-12-20  Behdad Esfahbod  
-
-	Bug 387482 – Variable modified in signal handler should be volatile
-	Patch from Bastien Nocera
-
-	* gnome-pty-helper/gnome-pty-helper.c: Make variable "done" volatile.
-
-2006-12-08  Behdad Esfahbod  
-
-	Red Hat Bug 218626: "last -ad" print junk in last column
-
-	* gnome-pty-helper/gnome-utmp.c (write_logout_record),
-	(write_login_record): Don't gettimeofday directly into ut.ut_tv.
-	That overruns on x86_64.
-
-2006-12-05  Behdad Esfahbod  
-
-	Released vte-0.15.0.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.15.0.
-
-	* src/Makefile.am: Bumped libtool version to 10:7:1.
-
-2006-12-05  Ryan Lortie  
-
-	Bug 356552 – cursor timeout runs all the time
-
-	* src/vte-private.h: Rework how cursor blinking works.
-	* src/vte.c: Rework how cursor blinking works.  Only register the
-	cursor blink callback when cursor blink is enabled and the window
-	is focused.
-
-2006-11-16 Mariano Suárez-Alvarez 
-
-	Bug 307396 – Mouse scroll mode not controllable
-
-	* src/vte.c(vte_terminal_scroll): make the scrollwheel scroll by tenths of
-	a screen (or 1 line, whichever is bigger) instead of half screens.
-
-2006-11-16 Mariano Suárez-Alvarez 
-
-	Bug 356602 – const cast warning fixes for libvte
-	Patch by Ryan Lortie (desrt)
-
-	* src/matcher.h: Use const char * where appropriate.
-	* src/matcher.c: Use const char * where appropriate.  Cast g_strdup
-	to (GCacheDupFunc) to avoid a warning.
-	* src/vtetc.h: Use const char * where appropriate.
-	* src/vtetc.c: Use const char * where appropriate.  Cast g_strdup
-	to (GCacheDupFunc) to avoid a warning.
-	* src/vte.c: Use const char * where appropriate.
-
-2006-11-01 Rich Burridge 
-
-	* src/vteaccess.c:
-	Fixed bug #150858 - In gnome-terminal, the deleted character 
-	is reported as "space".
-
-2006-10-13  Behdad Esfahbod  
-
-	* po/POTFILES.in: Include vteseq.c
-
-2006-10-11  Mariano Suárez-Alvarez  
-
-	Bug 337252 – ALT + Arrow keys don't work in irssi through gnome-terminal
-
-	* src/keymap.c (_vte_keymap_key_add_key_modifiers): Match the (newer)
-	xterm behavior when reporting modifiers to things running in a terminal.
-
-2006-10-02  Behdad Esfahbod  
-
-	Released vte-0.14.1.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.14.1.
-
-	* src/Makefile.am: Bumped libtool version to 10:6:1.
-
-2006-10-02  Behdad Esfahbod  
-
-	Bug 358344 – autoscroll only works one way in fullscreen [PATCH]
-	Patch by Egmont Koblinger
-
-	* src/vte.c (vte_terminal_autoscroll),
-	(vte_terminal_motion_notify): Fix forward autoscrolling in fullscreen
-	mode.
-
-2006-09-20  Behdad Esfahbod  
-
-	Bug 353756 – font setting cleanup
-
-	* src/vte.c (vte_terminal_set_font_full): Use 'monospace' family if no
-	font is set on a terminal widget
-
-	* src/vte.c (vte_terminal_set_font_from_string_full): Don't
-	g_return_if_fail(strlen(name) > 0).  An empty string is a perfectly
-	valid pango font description string.
-
-	* src/vte.c (vte_terminal_show): Make sure we have a font loaded.
-
-	* src/vteapp.c (main): Don't fallback on "Monospace 12".  Let the
-	widget decide what font to use if no font is set.
-
-2006-09-18  Ryan Lortie  
-
-	Bug 356616 – libvte broken with new autotools
-
-	* configure.in:
-	* src/Makefile.am: Fix broken variable substitution for newer
-	versions of automake.
-
-2006-09-13  Behdad Esfahbod  
-
-	Bug 354024 – Suppress multiple warnings for missing control sequence
-	handlers
-	Patch from Chris Wilson
-
-	* src/vte.c (vte_terminal_handle_sequence): Suppress multiple warnings
-	for missing control sequence handlers in non-debugging builds.
-
-2006-09-13  Behdad Esfahbod  
-
-	Bug 354620 – vte-0.14.0: undefined C code
-	Patch from Ales Nosek
-
-	* src/ssfe.c (inschar), (dokbdchar): Replace "*(tmp+1)=(*tmp--);"
-	with something well-defined.
-
-2006-09-08  Behdad Esfahbod  
-
-	* src/Makefile.am: Define G_LOG_DOMAIN=Vte.
-
-2006-09-04  Behdad Esfahbod  
-
-	Released vte-0.14.0.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.14.0.
-
-	* src/Makefile.am: Bumped libtool version to 10:5:1.
-
-2006-08-31  Behdad Esfahbod  
-
-	Bug 340631 – Printed lines containing tab characters are not wrapped 
-	correctly
-
-	* src/vteseq.c (vte_sequence_handler_ta): make sure we don't move the 
-	cursor back when tabbing past the end of the line.
-
-	* src/pty.c:
-	* src/ring.c:
-	* src/trie.c:
-	* src/vte.c:
-	* src/vtebg.c:
-	* src/vtetc.c:
-	Minor doc syntax update.
-
-2006-08-26  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_get_text_range_maybe_wrapped): Followup on
-	the fix for bug 350236.  It was causing empty lines not to be copied.
-
-2006-08-24  Behdad Esfahbod  
-
-	Released vte-0.13.7.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.13.7.
-
-	* src/Makefile.am: Bumped libtool version to 10:4:1.
-
-2006-08-24  Behdad Esfahbod  
-
-	Bug 352365 – font caching problem for not-found glyphs
-
-	* src/vtexft.c (_vte_xft_font_for_char): Add caching on a missing
-	path.  This only affects the second time a character is looked up.
-
-	* src/vtexft.c (_vte_xft_font_close), (_vte_xft_font_for_char),
-	(_vte_xft_char_width): Remove g_assert()'s that are not needed, as
-	we will definitely crash pretty soon if the assertion is not true
-	anyway.
-
-2006-08-24  Behdad Esfahbod  
-
-	Bug 350236 – Cannot copy text containing invalid character sequences
-
-	* src/vte.c (vte_terminal_get_text_range_maybe_wrapped): Fix another
-	bug in my rewritten selection code, that was assuming that
-	last_nonempty character is one byte long.
-
-2006-08-24  Behdad Esfahbod  
-
-	Bug 352439 – URL highlighting seriously broken
-
-	* src/vte.c (vte_terminal_get_text_range_maybe_wrapped): Followup to
-	changes made for bug 350623.  Put back the g_array_set_size(), in the
-	correct place this time.
-
-2006-08-22  Behdad Esfahbod  
-
-	Bug 351494 – Gnome-terminal doesn't kills bash on tab close
-	Patch from Aivars Kalvans
-
-	* src/vte.c (vte_terminal_unrealize): Undo the change from bug 348814.
-	Dispose draw in unrealize again, but also set has_fonts to FALSE.
-
-2006-08-20  Behdad Esfahbod  
-
-	Released vte-0.13.6.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.13.6.
-
-	* src/Makefile.am: Bumped libtool version to 10:3:1.
-
-2006-08-17  Behdad Esfahbod  
-
-	Bug 351696 – crash on Terminal
-
-	* src/vteseq.c (vte_sequence_handler_set_title_internal): Check
-	->window is not NULL before setting icon/window title.
-
-2006-08-16  Willie Walker 
-
-	Bug 350623 – Accessible text getTextAtOffset is broken
-
-	* src/vte.c (vte_terminal_get_text_range_maybe_wrapped): Do not
-	resize array before calling vte_g_array_fill since it
-	nullifies any effect vte_g_array_fill will have.
-
-2006-08-16  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_get_text_range_maybe_wrapped): Make sure
-	attr.column is initialized.
-
-2006-07-31  Behdad Esfahbod  
-
-	Released vte-0.13.5.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.13.5.
-
-	* src/Makefile.am: Bumped libtool version to 10:2:1.
-
-2006-07-30  Behdad Esfahbod  
-
-	Bug 158200 – terminal backspace behavior not set to UTF-8 mode
-	Based on patch from Egmont Koblinger
-
-	* src/vte.c (_vte_terminal_setup_utf8),
-	(vte_terminal_set_encoding), (_vte_terminal_fork_basic),
-	(vte_terminal_set_pty): Make sure UTF-8 state is correctly set
-	when pty changes.
-
-2006-07-27  Behdad Esfahbod  
-
-	Bug 348814 – crash on Terminal
-	Patch from Aivars Kalvans
-
-	* src/vte.c (vte_terminal_unrealize): Do not dispose draw in
-	unrealize.
-
-2006-07-24  Behdad Esfahbod  
-
-	Released vte-0.13.4.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.13.4.
-
-	* src/Makefile.am: Bumped libtool version to 10:1:1.
-
-2006-07-24  Behdad Esfahbod  
-
-	Bug 336947 – [patch] Redundant vte_terminal_set_font_full() calls
-	Patch from Aivars Kalvans
-
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_set_font_full), (vte_terminal_init),
-	(vte_terminal_realize):
-	AVoid redundant set_font_full and invalidate_all calls.
-
-2006-07-19  Behdad Esfahbod  
-
-	Bug 134800 – gnome-termnal hung up when input by ATOK
-	Patch from Yukihiro Nakai  
-
-	* src/vte.c (vte_terminal_unrealize): Delay _vte_draw_free().
-
-2006-07-19  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_extend_selection):  Oops.  Fix selection
-	that I broke recently.
-
-2006-07-11  Behdad Esfahbod  
-
-	Bug 339983 – gnome-pty-helper should log username
-	Patch from Brian Cameron
-
-	* gnome-pty-helper/gnome-pty-helper.c (pty_remove), (shutdown_pty),
-	(pty_add), (open_ptys):
-	* gnome-pty-helper/gnome-pty.h:
-	* gnome-pty-helper/gnome-utmp.c (write_logout_record):
-	Log username if system supports it.
-
-2006-07-10  Behdad Esfahbod  
-
-	Released vte-0.13.3.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.13.3.
-
-	* src/Makefile.am: Bumped libtool version to 10:0:1.
-
-2006-07-10  Behdad Esfahbod  
-
-	Bug 141985 – vte does not respond to 'CSI 2 1 t' or 'CSI 2 0 t' with
-	the correct window/icon title
-	Patch from Mariano Suárez-Alvarez
-
-	* src/vte.c (vte_terminal_realize), src/vteseq.c
-	* (vte_sequence_handler_set_title_internal): Set window/icon titles.
-
-2006-07-10  Behdad Esfahbod  
-
-	Bug 121904 – copy-paste of empty line
-	Bug 25290 – Small UI tweak to select-by-word (only select only letter
-	at a time for non-word characters)
-	Bug 339986 – Patch to select localized strings exactly
-
-	* src/vte-private.h:
-	* src/vte.c (_vte_terminal_set_default_attributes),
-	(_vte_terminal_insert_char), (vte_terminal_is_word_char),
-	(vte_same_class), (vte_terminal_get_text_range_maybe_wrapped),
-	(vte_terminal_extend_selection):
-	* src/vteseq.c (vte_sequence_handler_screen_alignment_test):
-	Fix a bunch of selection-related issues.  We now recognize explicitly
-	put space at the end of lines, and copy/paste it.  The other change is
-	that non-wordchar characters are not grouped together.  Also fixes the
-	fallback on Unicode properties that I added two commits ago.
-
-2006-07-10  Behdad Esfahbod  
-
-	Bug 311855 – Race in vte leads to blocking of input.
-	Patch from Kalle Raiskila
-
-	* src/vte-private.h:
-	* src/vte.c (_vte_terminal_connect_pty_write),
-	(_vte_terminal_disconnect_pty_write), (vte_terminal_init):
-	Use a mutex for pty_output_source.
-
-2006-07-10  Behdad Esfahbod  
-
-	Bug 339986 – Patch to select localized strings exactly
-	Patch from Takao Fujiwara
-
-	* src/vte.c (vte_terminal_is_word_char): Fall back on Unicode
-	properties for non-ASCII characters or when no array is set.
-
-2006-07-10  Behdad Esfahbod  
-
-	Bug 342396 – Ctrl-space sends " ", not NUL.
-
-	* src/keymap.c (_vte_keymap_map): Fix keymap lookup bug that I
-	introduced during the char*->char[] work on 2006-04-18.
-
-2006-07-10  Behdad Esfahbod  
-
-	Bug 345377 – real transparency
-	Patch from Kristian Høgsberg 
-
-	* doc/reference/tmpl/vte.sgml:
-	* doc/reference/vte-sections.txt:
-	* python/vte.defs:
-	* src/vte-private.h:
-	* src/vte.c (vte_terminal_set_opacity), (vte_terminal_init),
-	(vte_terminal_background_update):
-	* src/vte.h:
-	* src/vteapp.c (main):
-	* src/vtedraw.c (_vte_draw_set_background_color):
-	* src/vtedraw.h:
-	* src/vteft2.c (_vte_ft2_set_background_color):
-	* src/vtegl.c (_vte_gl_set_background_color):
-	* src/vtepango.c (_vte_pango_set_background_color):
-	* src/vtepangox.c (_vte_pango_x_set_background_color):
-	* src/vteskel.c (_vte_skel_set_background_color):
-	* src/vtexft.c (_vte_xft_create), (_vte_xft_set_background_color),
-	(_vte_xft_clear):
-	Add vte_terminal_set_opacity().
-
-2006-07-05  Behdad Esfahbod  
-
-	* src/Makefile.am: Allow _vte_debug_.* into exported symbols.
-
-2006-06-21  Behdad Esfahbod  
-
-	Bug 345514 – -no-undefined doesn't work with latest libtool
-
-	* src/Makefile.am: Remove -no-undefined.
-
-2006-06-12  Behdad Esfahbod  
-
-	Released vte-0.13.2.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.13.2.
-
-	* src/Makefile.am: Bumped libtool version to 9:2:0.
-
-2006-06-12  Behdad Esfahbod  
-
-	Bug 344666 – Problems with *_CFLAGS and *_LDFLAGS in makefiles
-	Patch from Stepan Kasal .
-
-	* src/Makefile.am (AM_CFLAGS, AM_LDFLAGS, *_CFLAGS, *_LDADD):
-	Replace @FOO@ references by $(FOO), remove redundant (or buggy)
-	occurences of `@CFLAGS@'.
-	* gnome-pty-helper/Makefile.am (AM_CFLAGS, AM_LDFLAGS): Likewise.
-	* python/Makefile.am (vtemodule_la_CFLAGS): Likewise.
-	* src/Makefile.am (AM_CFLAGS): Add $(FT2_CFLAGS).
-
-2006-06-08  Behdad Esfahbod  
-
-	* src/vte.c (remove_display_timeout): Fix typo which may have been
-	causing things like crashes.  Reported by muntyan.  Also reordered
-	some code around update_timeout for better matching the current
-	timeouts in style.
-
-2006-06-07  Behdad Esfahbod  
-
-	Bug 339529 – gnome-terminal (vte) crashes when detatched window is
-	closed
-
-	* src/vte.c (vte_invalidate_region): Bail out if terminal->window is
-	NULL.
-
-2006-05-27  Behdad Esfahbod  
-
-	Bug 342549 – uninitialized var (coverity)
-	Patch from Paolo Borelli.
-
-	* src/vte.c (vte_cell_is_selected): Remove uninitialized var ret.
-
-2006-05-27  Behdad Esfahbod  
-
-	Bug 342082 – vte_invalidate_region() may check whether terminal is
-	realiazed or not
-	Patch from Kouhei Sutou.
-
-	* src/vte.c (vte_invalidate_region): Return if not realized.
-
-2006-05-22  Behdad Esfahbod  
-
-	Bug 340363 – vte Cygwin build fixes
-	Patch from Cygwin Ports maintainer
-
-	* configure.in, src/keymap.c, src/pty.c, src/ssfe.c, src/trie.c,
-	src/utf8echo.c, src/vte.c, src/vteseq.c, src/vtetc.c: Check and
-	include syslimits.h and ncurses/curses.h
-
-2006-05-22  Behdad Esfahbod  
-
-	Bug 341793 – vte.h doesn't need to include X11/Xlib.h
-	Patch from Kouhei Sutou
-
-	* src/vte.h: Don't #include 
-
-2006-05-17  Wouter Bolsterlee  
-
-	* configure.in: Require intltool 0.35.0 to have
-	translations in the dist tarballs.
-
-2006-05-17  Behdad Esfahbod  
-
-	Released vte-0.13.1.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.13.1.
-
-	* src/Makefile.am: Bumped libtool version to 9:1:0.
-
-2006-05-14  Behdad Esfahbod  
-
-	* NEWS, ChangeLog: Add vim and emacs footers for UTF-8.
-
-2006-04-27  Behdad Esfahbod  
-
-	Bug 339980 – nativeecho needs glib in LDADD to build on Solaris
-	Patch from Brian Cameron.
-
-	* src/Makefile.am: Fix it.
-
-2006-04-26  Behdad Esfahbod  
-
-	Bug 331803 – style needs to be attached/detached to the window on
-	realize/unrealize
-	Patch from Benjamin Berg  .
-
-	* src/vte.c: (vte_terminal_unrealize), (vte_terminal_realize):
-	attach and detach the style of the terminal widget.
-
-2006-04-25  Behdad Esfahbod  
-
-	* src/Makefile.am: Pass -no-undefined linker flag.
-
-2006-04-23  Behdad Esfahbod  
-
-	Released vte-0.13.0.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.13.0.
-
-	* src/Makefile.am: Bumped libtool version to 9:0:0.
-
-2006-04-23  Behdad Esfahbod  
-
-	Bug 339448 – selection doesn't respect hard newlines
-
-	* src/vte.c (vte_terminal_get_text_range_maybe_wrapped): Add newline
-	to the end of each line that is not soft-wrapped.
-
-2006-04-23  Behdad Esfahbod  
-
-	Bug 148720 – Word selection erroneously captures text from next line
-	Patch from Chris Heath.
-
-	* src/vteseq.c (vte_sequence_handler_cd), (vte_sequence_handler_ce),
-	(vte_sequence_handler_clear_current_line),
-	(vte_sequence_handler_clear_above_current): Reset soft_wrapped flag.
-
-2006-04-23  Behdad Esfahbod  
-
-	Bug 126376 – Uncoinditional definition of _XOPEN_SOURCE breaks build
-	on NetBSD
-	Patch from Dan Winship.
-
-	* configure.in:
-	* gnome-pty-helper/configure.in: Define XOPEN_SOURCE on solaris only.
-
-2006-04-23  Behdad Esfahbod  
-
-	Bug 97719 – Selection: double/triple click doesn't cross line boundaries
-	Patch from Chris Heath.
-
-	* src/vte.c (vte_same_class): Fix problem with selecting whitespace
-	from adjacent lines, on word selection.
-
-2006-04-22  Behdad Esfahbod  
-
-	Bug 160782 – Vte isn't multi-screen safe
-	Patch from Benedikt Meurer.
-
-	* src/vte.c (vte_terminal_unrealize), (vte_terminal_realize):
-	* src/vtebg.c (vte_bg_native_new), (_vte_bg_display_sync),
-	(vte_bg_root_pixmap), (vte_bg_get_for_screen), (vte_bg_init),
-	(vte_bg_get_pixmap), (vte_bg_get_pixbuf):
-	* src/vtebg.h:
-	* src/vteft2.c (_vte_ft2_set_background_image):
-	* src/vtegl.c (_vte_gl_set_background_image):
-	* src/vtepango.c (_vte_pango_set_background_image):
-	* src/vtepangox.c (_vte_pango_x_set_background_image):
-	* src/vtexft.c (_vte_xft_set_background_image): Handle per-screen
-	backgrounds.
-
-2006-04-22  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_cursor_new), (vte_terminal_clipboard_get):
-	* src/vteapp.c (take_xconsole_ownership):
-	* src/vtebg.c (vte_bg_native_new), (_vte_bg_display_sync),
-	(vte_bg_root_pixmap):
-	* src/vtedraw.c (_vte_draw_get_colormap):
-	* src/vtefc.c (_vte_fc_transcribe_from_pango_font_description),
-	(_vte_fc_defaults_from_gtk):
-	* src/vtepango.c (_vte_pango_start), (_vte_pango_set_text_font):
-	* src/vtepangox.c (_vte_pango_x_set_text_font):
-	* src/vterdb.c (_vte_rdb_get):
-	* src/vteseq.c (vte_terminal_beep),
-	(vte_sequence_handler_window_manipulation):
-	* src/vtexft.c (_vte_xft_char_exists), (_vte_xft_text_extents),
-	(_vte_xft_font_open):
-	* src/vtegl.c: Remove obsolete #ifde GTK_CHECK_VERSION(2,2,0) checks.
-
-2006-04-22  Behdad Esfahbod  
-
-	Bug 330441 – Remove libzvt support
-	Patch from Guilherme de S. Pastore  
-
-	* configure.in, src/Makefile.am, src/reflect.c: remove remnants
-	from the old, broken, and unmaintained libzvt.
-
-2006-04-21  Behdad Esfahbod  
-
-	Bug 328850 – Crash when pasting selection
-
-	* src/vte.c: Protect against passing NULL selection to strcmp.
-
-2006-04-20  Behdad Esfahbod  
-
-	* doc/reference/tmpl/internals.sgml:
-	* doc/reference/tmpl/reaper.sgml:
-	* doc/reference/tmpl/vte-unused.sgml:
-	* doc/reference/tmpl/vte.sgml:
-	* doc/reference/tmpl/vteaccess.sgml:
-	* doc/reference/vte-sections.txt: Misc fixes and updates.
-
-	* python/vte.defs:
-	* python/vte.override: Updates.
-
-	Bug 160134 – mouse events occurring past column 95 are not passed
-	through to terminal application
-	Based on patch from Sean Estabrooks.
-
-	* src/vte.h:
-	* src/vte.c (vte_terminal_feed_child_binary): New public function.
-
-	* src/vte.c (vte_terminal_send_mouse_button_internal),
-	(vte_terminal_maybe_send_mouse_drag): Use feed_child_binary.
-
-2006-04-19  Behdad Esfahbod  
-
-	Bug 135230 – Feature request to attach VTE to existing pty
-	Based on patch from eric@brouhaha.com, John Swensen, and
-	Chris Moller  
-
-	* src/vte.c:
-	* src/vte.h:
-	* python/vte.defs:
-	* doc/reference/vte-sections.txt: Added vte_terminal_set_pty().
-
-2006-04-18  Behdad Esfahbod  
-
-	Bug 337442 – [patch] Reduce .plt section
-
-	* src/Makefile.am: Pass export-symbols-regex to libtool.
-
-2006-04-18  Behdad Esfahbod  
-
-	* src/caps.c (_vte_capability_init), src/caps.h:
-	* src/keymap.c (_vte_keymap_map), src/keymap.h: Make some data
-	structures const by changing char * to char [].
-
-	* src/vte.c (vte_update_delay_timeout), (vte_update_timeout),
-	(vte_terminal_extend_selection), (_vte_terminal_fudge_pango_colors):
-	Fix warnings and adapt to above changes.
-
-2006-04-18  Behdad Esfahbod  
-
-	* configure.in, po/LINGUAS: Use intltool 0.34.90 format.
-
-2006-04-12  Behdad Esfahbod  
-
-	Bug 142247 – use of uninitialized value
-
-	* src/pty.c: Initialize the arbitrary byte that we send on the pipe
-	to zero.
-
-2006-04-12  Behdad Esfahbod  
-
-	Bug 149633 – gnome-terminal messes up boxdrawing chars aligment
-
-	* src/vte.c: Try to use the font first for all graphic characters.
-	This results in better looking graphics with modern fonts.
-
-2006-04-12  Behdad Esfahbod  
-
-	Bug 144456 – UK pound currency symbol rendered incorrectly
-
-	* src/vte.c: Offset characters drawn in draw_graphic for padding.
-
-2006-04-12  Behdad Esfahbod  
-
-	Bug 307403 – xticker doublefree
-
-	* src/xticker.c: Avoid double free.
-
-2006-04-10  Behdad Esfahbod  
-
-	Bug 337877 – Patch to use po/LINGUAS
-	Patch from Michiel Sikkes.
-
-	* configure.in, po/LINGUAS: Move list of translations to po/LINGUAS.
-
-2006-04-06  Behdad Esfahbod  
-
-	Bug 337552 – Insufficient version requirement for gtk+
-
-	* configure.in: Depend on Gtk+ 2.6.
-
-2006-03-30  Behdad Esfahbod  
-
-	Bug 168251 – add support for 256 colors terminals
-	Patch from dann@godzilla.ics.uci.edu.
-
-	* src/vte-private.h, src/vte.c, src/vteseq.c: Implement support
-	for 256 colors.
-
-2006-03-30  Behdad Esfahbod  
-
-	Bug 120276 – Wishlist: Support Rectangular Selection
-	Patch from Pedro de Medeiros.
-
-	* src/vte.c, src/vte-private.h: Implement block (rectangular)
-	selection using ctrl+mouse.
-
-2006-03-30  Behdad Esfahbod  
-
-	Bug 336117 – [patch] Use g_slice API
-	Patch from Aivars Kalvans.
-
-	* src/*.c: Use g_slice instead of g_malloc for structs.
-	Also, replace g_string_new("") with g_string_new(NULL).
-
-2006-03-30  Behdad Esfahbod  
-
-	Branchpoint for vte-0-12.
-
-2006-03-30  Guntupalli Karunakar  
-
-	* configure.in: Added "dz" (Dzongkha) to ALL_LINGUAS.
-
-2006-03-26  Behdad Esfahbod  
-
-	Bug 336128 – vim scrolling issues - emulation errors
-
-	* src/vteseq.c (vte_sequence_handler_sf): Update start and end
-	when updating insert_delta.
-
-2006-03-15  Behdad Esfahbod  
-
-	Bug 334385 – Use intltool
-
-	* Makefile.am, configure.in: Add intltool support.
-
-	* src/iso2022.c, src/reaper.c, src/vteaccess.c, src/vteapp.c,
-	src/vtebg.c, src/vtexft.c, src/vte.c: Include glib/gi18n-lib.h
-	instead of #ifdefing gettext stuff.
-
-	* src/vte.c (vte_terminal_class_init): Use GETTEXT_PACKAGE instead
-	of PACKAGE in bindgettextdomain.
-
-2006-03-14  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_size_allocate): More tweaks to the
-	previous changes.  Reported by dholbach again.
-
-2006-03-13  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_size_allocate): Put the stuff changed in
-	previous commit in their original order.  Problem reported by
-	dholbach.
-
-2006-03-13  Behdad Esfahbod  
-
-	Bug 104841 – scrolling doesn't work inside "screen" windows
-
-	* src/vte.c (vte_terminal_size_allocate): Fix restricted scrolling
-	region readjustment.  Moreover, do not do unnecessary updates when
-	number of rows & columns has not changed.
-
-2006-03-13  Behdad Esfahbod  
-
-	Bug 333768 – vteapp debug stuff should be conditional
-	Patch from Egmont Koblinger.
-
-	* src/vteapp.c: Make pwd and setting env vars conditional on debug.
-
-2006-03-08  Behdad Esfahbod  
-
-	Released vte-0.12.0.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.12.0.
-
-2006-03-09  Abel Cheung  
-
-	* configure.in: Readd kn to ALL_LINGUAS and make sure everything
-	builds fine.
-
-2006-03-08  Behdad Esfahbod  
-
-	Released vte-0.11.21.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.11.21.
-
-	* configure.in: Removed kn from ALL_LINGUAS, as it was breaking
-	the build.
-
-2006-03-08  Behdad Esfahbod  
-
-	* src/vte.c, src/vte-private.h: Fix vte_update_timeout repeat to
-	25ms. (bug #333776, Egmont Koblinger)
-
-2006-03-07  Abel Cheung  
-
-	* configure.in: Added "kn" "zh_HK" to ALL_LINGUAS.
-
-2006-02-28  Behdad Esfahbod  
-
-	* src/vte-private.h: Step up COALESCE_TIMEOUT and DISPLAY_TIMEOUT
-	from 2ms to 10ms.  This is more compatible with the updated timeout
-	that we are doing at around 25ms.
-
-2006-02-27  Behdad Esfahbod  
-
-	* MAINTAINERS: Added.
-
-2006-02-25  Behdad Esfahbod  
-
-	Released vte-0.11.20.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.11.20.
-
-2006-02-25  Behdad Esfahbod  
-
-	* src/vtexft.c: (_vte_xft_font_for_char): Rever the patch to
-	optimize memory usage by releasing fonts that aren't needed early.
-	Because that was inserting destroyed fonts into cache. Closes bug
-	#332580 and reverts bug #309322.
-
-2006-02-25  Behdad Esfahbod  
-
-	Released vte-0.11.19.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.11.19.
-
-2006-02-17  Behdad Esfahbod  
-
-	* src/vte.c: Make shift+insert paste PRIMARY and ctrl+shift+insert
-	paste CLIPBOARD (switched them. bug #123844)
-
-2006-02-17  Behdad Esfahbod  
-
-	* src/vte.c: Better update-timeout handling.  Always delay updates
-	a bit.  Schedule updates as G_PRIORITY_DEFAULT_IDLE.  And, set delay
-	as the number of lines, in milliseconds.
-
-2006-02-14  Behdad Esfahbod  
-
-	* src/vteseq-gen.c (main): Return 0.  (bug #331178)
-
-2006-02-14  Behdad Esfahbod  
-
-	* gnome-pty-helper/gnome-pty-helper.c (main): Use getpwnam to
-	correctly log multiple users with the same UID. (bug #319564,
-	patch from Laszlo (Laca) Peter.
-
-2006-02-13  Behdad Esfahbod  
-
-	* src/vte.c (update_timeout): Only discontinue timer if nothing
-	was updated in the last cycle.
-
-2006-02-13  Behdad Esfahbod  
-
-	* gnome-pty-helper/gnome-pty-helper.c: Fix race condition when
-	shutdown_helper may be called again from the signal handler when
-	it's already running. (bug #331056)
-
-2006-02-13  Behdad Esfahbod  
-
-	* configure.in: Do not prepend X_LIBS and X_CFLAGS to LIBS and
-	CFLAGS. (bug #331021, Sylvain BERTRAND)
-
-2006-02-13  Behdad Esfahbod  
-
-	* src/vte.c (vte_terminal_key_press): Handle Ctrl+Shift+Insert to
-	paste PRIMARY.
-
-2006-02-11  Behdad Esfahbod  
-
-	Released vte-0.11.18.
-
-	* NEWS: Updated.
-
-	* configure.in: Bumped version to 0.11.18.
-
-2006-02-11  Behdad Esfahbod  
-
-	* src/iso2022.c: Change INVALID_CODEPOINT from 0xFFFF to 0xFFFD.
-	(bug #317235, Egmont Koblinger)
-
-2006-02-11  Behdad Esfahbod  
-
-	* src/vte.c (_vte_invalidate_cells): Guard more against off values.
-
-2006-02-10  Behdad Esfahbod  
-
-	Update the build infrastructure.  make distcheck works now!
-
-	* autogen.sh: Use a generic autogen.sh that uses gnome-common.
-
-	* configure.in: Simplify gtk-doc stuff.  Update to newer syntax.
-
-	* Makefile.am, src/Makefile.am, doc/reference/Makefile.am: Updated.
-
-2006-02-10  Behdad Esfahbod  
-
-	* src/vte.c (_vte_invalidate_cells): Throttle invalidating to at most
-	40 times per second, using a timeout.
-
-2006-02-10  Behdad Esfahbod  
-
-	* src/vteseq.c: Removed the huge sequence handler table.  Changed to
-	use the compact tables in vteseq-table.h.
-
-	* src/vteseq-gen.c: Generator containing the table removed from above,
-	that generates compact tables.
-
-	* src/vteseq-table.h: Table generated by above.  Can be regenerated
-	using make.
-
-	* src/Makefile.am: Adjusted.
-
-	* src/vteapp.c: Set default font to Monospace instead of Sans.
-
-2006-02-10  Behdad Esfahbod  
-
-	* src/vte.c: Allocate terminal->pvt using GObject private data.
-
-2006-02-10  Behdad Esfahbod  
-
-	Moved all sequence handler codes into a separate file.
-
-	* src/vte.c: Stuff moved to other files.
-
-	* src/vte-private.h: Includes all struct definitions from vte.c.
-
-	* src/vteseq.c, src/vteseq.h, src/vteseq-list.h: The sequence
-	handlers are all here now.
-
-2006-02-09  Behdad Esfahbod  
-
-	* src/vteapp.c: Make a couple debug messages conditional on
-	DEBUG_MISC.
-
-2006-02-03  Behdad Esfahbod  
-
-	* src/vte.c: Warning cleanup.  A couple were actually bugs.
-
-	* src/vteapp.c: No need to run $SHELL by default.  Handled
-	by vte.c now.  A bug was causing nothing to be run...
-
-2006-02-03  Behdad Esfahbod  
-
-	* src/debug.c, src/debug.h, src/matcher.c: Add the debug
-	flag TRIE for printing out the trie (previous was using
-	MISC.)
-
-	* src/vte.c (vte_invalidate_cells): Update row_count and
-	column_count when clamping their respective _start values.
-
-	* src/vte.c (vte_terminal_extend_selection, _vte_terminal_select_text): 
-	Pass row_count to vte_invalidate_cells(), instead of row_stop.
-
-	* src/vteapp.c: Run $SHELL by default.
-
-2006-02-01  Behdad Esfahbod  
-
-	* doc/reference/tmpl/internals.sgml: Added to CVS.
-
-	* vte/src/vte.c: Fix selection vs. primary that have been
-	borked forever. Closes bug #123844.
-
-2006-01-30  Guilherme de S. Pastore  
-
-	* src/trie.c: applied patch from Tomas Mraz to fix a double
-	  free. Closes bug #161337.
-
-2006-01-30  Erdal Ronahi  
-
-	* configure.in: added ku (Kurdish) to ALL_LINGUAS
-
-2006-01-28  Guilherme de S. Pastore  
-
-	* src/Makefile.am: add -DG_DISABLE_ASSERT to CFLAGS.
-
-	* NEWS: updated.
-
-	* vte.spec: bumped version to 0.11.17.
-
-2006-01-28  Guilherme de S. Pastore  
-
-	* src/vte.c: only try to guess the user's shell when actually
-	  forking, so we avoid unnecessary work if the application
-	  already has to do that itself.
-	
-2006-01-15  Guilherme de S. Pastore  
-
-	* src/: applied patch from Kjartan Maraas that replaces g_return
-	  functions with g_assert. Should give an 8% speed boost.
-
-2006-01-14  Guilherme de S. Pastore  
-
-	* doc/reference/Makefile.am: install more than *.html, based on the
-	  patch from Ed Catmur. Closes bug #321909.
-
-2006-01-14  Olav Vitters  
-
-	* src/caps.c: Support save and restore cursor position using \033[s
-	and \033[u. Reported by Dag Wieers. Fixes bug 170032.
-
-2005-12-31  Olav Vitters  
-
-	* vte.pc.in: Backup patch from Steve Langasek. It needs pkg-config
-	changes.
-
-2005-12-12  Kjartan Maraas  
-
-	* vte.pc.in: Cleanups for the pkg-config file.
-	Patch from Steve Langasek. Closes bug #322240.
-
-2005-12-12  Kjartan Maraas  
-
-	* python/vte.override: python-vte seems to have a small bug in
-	the override file that prevents the forkpty() method to be generated.
-	The attached patch fixes this problem. Patch from Michael Vogt.
-	Closes bug #169201.
-
-2005-11-30  Kjartan Maraas  
-
-	* src/vte.c: (vte_terminal_preedit_length): Remove some
-	unused code.
-	(vte_terminal_process_incoming): Don't emit signals for every
-	character that's output. Patch from Padraig O'Briain. Huge
-	performance gain when a11y is activated.
-
-2005-11-16  Timur Jamakeev  
-
-	* confgiure.in: Added 'ky' to ALL_LINGUAS
-
-2005-11-08  Kjartan Maraas  
-
-	* NEWS: Update.
-	* Makefile.am:
-	* autogen.sh:
-	* configure.in:
-	* python/Makefile.am:
-	I'm attaching a patch that modernizes the python binding 
-	build stuff. Notably, it excludes python/vte.c from the dist.
-	Right now as it stands, the file is disted, which means people's 
-	builds will not work unless they build against pygtk 2.8, 
-	which makes this bug somewhat important. Patch from Manish Sing
-	Closes bug #320931.
-
-2005-11-01  Bill Haneman 
-
-	* src/vteaccess.c: 
-	(vte_terminal_accessible_get_text):
-	Swap offsets if start > end; fixes crasher
-	bug #153405.  Patch from padraig o'briain,
-	thanks to Kjartan for review.
-
-2005-10-02  Kjartan Maraas  
-
-	* src/vtebg.c: (_vte_property_get_pixmaps):
-	* src/vterdb.c: (_vte_property_get_string):
-	Fix gdk warnings. Patch from Michele Baldessari.
-	Closes bug #309025.
-
-2005-09-16  Kjartan Maraas  
-
-	* src/vtexft.c: (_vte_xft_font_for_char): Optimize memory
-	usage by releasing fonts that aren't needed early. Patch
-	from Mike Hearn. Closes bug #309322.
-
-2005-08-13  Kjartan Maraas  
-
-	* gnome-pty-helper/gnome-pty-helper.c: (init_msg_pass):
-	Make VTE work on NetBSD, OpenBSD (sparc and macppc).
-	Reported by Adrian Bunk, patches by Dan Winship and
-	Rich Edelman. Closes bug #126554.
-
-2005-08-12  Kjartan Maraas  
-
-	* src/vtetc.c: (_vte_termcap_destroy): Don't crash
-	if there's no termcap file. Michele Baldessari
-	Closes bug #312260.
-
-2005-08-12  Kjartan Maraas  
-
-	* configure.in: Correct test for recvmsg(). Patch from
-	Robert Basch. Closes bug #304815 and possibly bug #122055.
-
-2004-08-10  Kjartan Maraas  
-
-	Patch from: Padraig O'Briain  
-	Closes bug #113590.
-
-	* src/vte.c, src/vteint.h:
-	Add new functions to support accessible text selection:
-	_vte_terminal_get_selection, _vte_terminal_get_start_selection,
-	_vte_terminal_get_end_selection, _vte_terminal_select_text,
-	_vte_terminal_remove_selection
-	* src/vteaccess.c:
-	(xy_from_offset): Fix for offset being entire text.
-	(vte_terminal_accessibility_selection_changed): VteTerminal's
-	selection-changed signal handler which emits text-selection-changed
-	signal.
-	(vte_terminal_accessible_initialize): Connect to VteTerminal's
-	selection-changed signal.
-	(vte_terminal_accessible_get_n_selections) Add implementation.
-	(vte_terminal_accessible_get_selection) Add implementation.
-	(vte_terminal_accessible_add_selection) Add implementation.
-	(vte_terminal_accessible_remove_selection) Add implementation.
-	(vte_terminal_accessible_set_selection) Add implementation.
-
-2005-08-05  Kjartan Maraas  
-
-	* gnome-pty-helper/gnome-pty-helper.c: (exit_handler), (main):
-	Clean up utmp/wtmp under vncserver if things fall apart under
-	the terminal. (Dave Lehman). Closes bug #312373
-
-2005-07-26  Michele Baldessari  
-
-	* python/vte.override (_wrap_vte_terminal_set_colors): 
-	pyg_boxed_get should be on item not py_palette. 
-	Reported with fix by Ethan Glasser-Camp 
-	Closes bug #311570
-
-2005-07-25  Michele Baldessari  
-
-	* src/vtepango.c (_vte_pango_create): Initialize 
-	PangoContext * data->ctx with NULL. Closes bug #126262
-
-2005-07-21  Danilo Šegan  
-
-	Fixes #149925.
-	
-	* src/vte.c (vte_terminal_io_read): Added simple comment for 
-	translators.
-
-2005-07-07  Matthias Clasen  
-
-	* src/vte.c (vte_terminal_unrealize): Unset the user data
-	on the gdk window. 
-
-2005-06-15  Theppitak Karoonboonyanan  
-
-	* configure.in: Added 'th' (Thai) to ALL_LINGUAS.
-
-2005-06-11  Kjartan Maraas  
-
-	* NEWS: Update some.
-	* doc/reference/tmpl/reaper.sgml:
-	* doc/reference/tmpl/vte-unused.sgml:
-	* doc/reference/tmpl/vte.sgml:
-	* doc/reference/tmpl/vteaccess.sgml: Docs updates.
-	* src/vte.c: (vte_terminal_init), (vte_terminal_finalize),
-	(vte_terminal_get_accessible), (vte_terminal_class_init):
-	Apply patch from Padraig O'Briain 
-	to fix a crash. Closes bug #119913.
-
-2005-06-09  Kjartan Maraas  
-
-	* src/vte.c: (vte_terminal_style_changed):
-	Fix a crash when reparenting. Closes bug #169326.
-	Patch from Michele Baldessari.
-
-2005-06-05  Ignacio Casal Quinteiro  
-
-	* configure.in: Added 'gl' to ALL_LINGUAS.
-
-2005-04-29  Kjartan Maraas  
-
-	* src/table.c: (_vte_table_literal_new), (_vte_table_free),
-	(_vte_table_addi), (_vte_table_matchi), (_vte_table_match),
-	(_vte_table_printi): Final bits of the memory reduction patch
-	from Aivars Kalvans. bug #160993 comment #9
-	* src/vte.c: (vte_terminal_scroll_region): Patch from Egmont
-	Koblinger to fix some scrolling issues. bug #164153
-	* vte.spec: Bump version.
-
-2005-04-07  Abduxukur Abdurixit  
-
-	* configure.in: Added "ug" to ALL_LINGUAS.
-
-2005-04-01  Adi Attar  
-
-	* configure.in: Added "xh" to ALL_LINGUAS.
-
-2005-03-31  Steve Murphy  
-
-        * configure.in: Added "rw" to ALL_LINGUAS.
-
-2005-03-29  Kjartan Maraas  
-
-	* autogen.sh: Use head -n 1 instead of head -1 to avoid
-	warning about the latter being deprecated in newer versions.
-	Reported by Ali Akcaagac. Closes bug #156022.
-	* vte.spec: Bump version
-
-2005-03-16  Manish Singh  
-
-	* python/vtemodule.c: Remove stray underscores so python module
-	works again. Fixes bug #150760.
-
-2005-03-14  Kjartan Maraas  
-
-	* src/Makefile.am: 
-	* src/interpret.c: (main):
-	* src/matcher.c: (_vte_matcher_add), (_vte_matcher_init),
-	(_vte_matcher_create), (_vte_matcher_destroy), (_vte_matcher_new),
-	(_vte_matcher_free):
-	* src/matcher.h:
-	* src/vte.c: (vte_terminal_set_emulation), (vte_terminal_init):
-	* src/vtetc.c: (_vte_termcap_create), (_vte_termcap_destroy),
-	(_vte_termcap_new), (_vte_termcap_free):
-	* src/vtetc.h: Add patch for excessive memory consumption when
-	opening new tabs. This patch makes struct _vte_matcher and
-	struct _vte_termcap shared between terminals and should reduce
-	memory consumption with multiple tabs a lot. Patch from Aivars
-	Kalvans . From bug #160993.
-
-2005-03-14  Kjartan Maraas  
-
-	* src/vte.c: (vte_terminal_scroll_region),
-	(vte_sequence_handler_al), (vte_sequence_handler_dl),
-	(vte_sequence_handler_sr), (vte_sequence_handler_insert_lines),
-	(vte_sequence_handler_delete_lines), (vte_terminal_handle_scroll):
-	Back out one of the fedora patches since it apparently causes
-	screen corruption for some users. It was rumored to have issues
-	from the start, so...
-
-2005-03-02  Kjartan Maraas  
-
-	* src/vte.c: (vte_terminal_process_incoming): Fix the
-	crash in minicom when resizing the window. Closes
-	bug #163814. Also adjust the coalesce and display timeouts.
-	This makes g-t and xterm behave just about the same visually
-	but g-t is still a bit faster when using the same font and
-	utf8.
-
-2005-03-02  Kjartan Maraas  
-
-	* src/Makefile.am: Add vtetree.[ch]
-	* src/vte.c: (vte_terminal_draw_row): Don't use a GArray
-	but use calloc'ed memory to speed up things further.
-	From bug #137864. Patch from Benjamin Otte.
-	* src/vtetree.c: (_vte_tree_new), (_vte_tree_destroy),
-	(_vte_tree_insert), (_vte_tree_lookup): New file
-	* src/vtetree.h: New file
-	* src/vtexft.c: (_vte_xft_font_open), (_vte_xft_font_close),
-	(_vte_xft_font_for_char), (_vte_xft_char_width): Use the new
-	functions to speed up things. From bug #137864. Patch from
-	Benjamin Otte. There are still two patches in there that don't
-	apply cleanly any more. Will look at those later.
-	* vte.spec: Bump version.
-
-2005-02-28  Kjartan Maraas  
-
-	* src/vte.c: (vte_sequence_handler_send_primary_device_attributes):
-	Patch from Mariano to make vte claim to be the right type terminal.
-	Closes bug #130671.
-
-2005-02-28  Kjartan Maraas  
-
-	* src/iso2022.c: (_vte_iso2022_is_ambiguous),
-	(_vte_iso2022_find_nextctl):
-	* src/uniwidths:
-	* src/vte.c: (vte_terminal_catch_child_exited), (vte_terminal_eof),
-	(vte_terminal_process_incoming), (vte_terminal_feed),
-	(vte_terminal_init), (vte_terminal_finalize), (vte_terminal_reset),
-	(add_display_timeout), (add_coalesce_timeout),
-	(remove_display_timeout), (remove_coalesce_timeout),
-	(vte_terminal_stop_processing), (vte_terminal_start_processing),
-	(vte_terminal_is_processing), (display_timeout),
-	(coalesce_timeout):
-	* src/vtexft.c: (_vte_xft_drawcharfontspec), (_vte_xft_draw_text):
-	Apply fix from Fedora package for performance problems. Closes
-	bug #143914. Patch was written by Søren Sandmann.
-
-2005-02-28  Kjartan Maraas  
-
-	* src/vte.c: (vte_terminal_scroll_region): Fix for
-	problem with redrawing when scrolling back then forward
-	Closes bug #122150. Patch from Benjamin Otte.
-
-2005-02-28  Kjartan Maraas  
-
-	* src/vte.c: (vte_terminal_unrealize): Fix a crash
-	when trying to use input methods. From Fedora.
-	Closes bug #168213.
-
-2005-02-28  Kjartan Maraas  
-
-	* src/vte.c: (vte_terminal_scroll_region),
-	(vte_sequence_handler_al), (vte_sequence_handler_dl),
-	(vte_sequence_handler_sr), (vte_sequence_handler_insert_lines),
-	(vte_sequence_handler_delete_lines), (vte_terminal_handle_scroll):
-	Another patch from fedora. Make sure the screen is fully redrawn
-	before scrolling. Apparently this patch has some issues, but those
-	were found to be small enough to apply in Fedora, so I guess
-	the same holds true here. Closes bug #168212
-
-2005-02-28  Kjartan Maraas  
-
-	* src/iso2022.c: (_vte_iso2022_process): Apply another
-	patch from Fedora. This should fix some screen corruption
-	with multibyte charsets. Closes bug #168211 and possibly
-	others.
-
-2005-02-28  Kjartan Maraas  
-
-	* src/vte.c: (vte_terminal_adjust_adjustments),
-	(vte_terminal_maybe_scroll_to_bottom),
-	(vte_terminal_update_insert_delta), (vte_terminal_handle_scroll),
-	(vte_terminal_set_scroll_adjustment), (vte_terminal_size_allocate):
-	Apply patch from Fedora to fix some scrolling issues. Closes
-	bug #168210 and possibly others.
-
-2005-02-15  Kjartan Maraas  
-
-	* src/vte.c: (vte_terminal_visibility_notify): Fix black
-	backgrounds in new terminals. Fix from Jon Nettleton
-	. Closes bug #125364. Has been
-	in Fedora Core for months already.
-
-2005-02-15  Kjartan Maraas  
-
-	* src/keymap.c: (_vte_keymap_map): Fix keypad behaviour
-	to be like xterm. Closes bug #128099. Fix is from
-	 and has been used in Fedora the last
-	three months at least.
-
-2005-02-15  Kjartan Maraas  
-
-	* src/vteregex.h: Don't include  here. It breaks
-	building on AIX and can cause problems for l10n. Closes
-	bug #161352.
-
-2005-02-15  Kjartan Maraas  
-
-	* src/dumpkeys.c: Fix build on NetBSD and Darwin.
-	Patch from Adrian Bunk . Closes
-	bug #126377.
-
-2004-12-07 Rajesh Ranjan
-	* configure.in: included the hi locale in ALL_LINGUAS 
-2004-11-16 nalin
-	* src/vte.c(vte_terminal_io_read,vte_terminal_io_write): silence a
-	couple of warnings by expecting a GIOCondition instead of a
-	GtkInputCondition as a parameter.
-
-2004-11-16 nalin
-	* autogen.sh: accept more, newer versions of autoconf/automake.  Treat
-	autoconf >= 3 as acceptable instead of just > 3.
-
-2004-11-16 nalin
-	* src/vte.c(vte_terminal_sequence_handler_scroll_up_or_down): add.
-	* src/vte.c(vte_terminal_sequence_handler_scroll_up_once): add.
-	* src/vte.c(vte_terminal_sequence_handler_scroll_down_once): add.
-	* src/vte.c(vte_terminal_sequence_handler_scroll_up): add.
-	* src/vte.c(vte_terminal_sequence_handler_scroll_down): add.
-	* src/table.c(_vte_table_addi): expand "%m" locally so that we can
-	distinguish between control sequences which differ only in the number
-	of numeric arguments they expect.  This means we have a new upper
-	limit on the length of a numeric argument list we'll recognize.
-	* src/caps.c(_vte_xterm_capability_strings): remove alternates for
-	strings which include '%m' as a specifier -- that's handled at the
-	matching layer now.
-	* src/vte.c(vte_terminal_paste_cb): drop the supplied data if it isn't
-	valid UTF-8 (Red Hat #119099).
-	* src/keymap.c(_vte_keymap_map): try xterm variants if we're xterm, not
-	the other way around.
-
-2004-08-18  David Lodge 
-
-	* configure.in: Added "ang" to ALL_LINGUAS.
-
-2004-08-18  Kjartan Maraas  
-
-	* configure.in: Added «nb» to ALL_LINGUAS.
-
-2004-08-16  Christian Rose  
-
-	* configure.in: Added "bs" to ALL_LINGUAS.
-
-2004-08-13  Gora Mohanty  
-
-	* configure.in: Added "or" to ALL_LINGUAS.
-
-2004-07-17  Dinesh Nadarajah 
-
-	* ta.po: Added tamil Translation
-
-2004-05-02 nalin
-	* src/reaper.c(vte_reaper_add_child): pass the global reaper in as
-	data when adding the child source, not the terminal which called us.
-	Stop accepting a data argument, because we'd discard it anyway.  Return
-	the ID of the source which is added, if that happens.
-	* configure.in: define VTE_INVALID_SOURCE for internal use.
-
-2004-05-01 nalin
-	* README: add pointers to info on bidirectional text and shaping.
-
-2004-05-01 nalin
-	* src/vte.c(vte_terminal_get_text_maybe_wrapped): add a parameter to
-	control whether or not trailing whitespace is trimmed (padraig.obriain,
-	#141148).
-	* src/vte.c,src/vte.h(vte_terminal_get_text_include_trailing_spaces):
-	add as a wrapper for the new vte_terminal_get_text_maybe_wrapped()
-	(padraig.obriain, #141148).
-	* src/vteaccess.c(vte_terminal_accessible_update_private_d): use
-	vte_terminal_get_text_include_trailing_spaces to ensure that we get
-	trailing spaces (padraig.obriain, #141148).
-	* src/vte.c(vte_terminal_insert_char): clean up some autowrap stuff.
-
-2004-04-30 nalin
-	* vte.pc.in, vte-uninstalled.pc.in: declare the defaultemulation
-	variable as one kind of variable, not that other kind (#141515).
-
-2004-04-30 nalin
-	* src/vte.c(vte_terminal_button_release): complete selection if we were
-	selecting, not just if Shift is held down (allows Press Shift, Press
-	Button, Release Shift, Release Button in addition to already-recognized
-	Press Shift, Press Button, Release Button, Release Shift) (#121905).
-	* vte.spec: buildrequire gtk-doc, manually copy png images at
-	install-time.
-
-2004-04-29 nalin
-	* src/vte.c, NEWS, doc/reference/vte-sections.txt,
-	doc/reference/tmpl/vte-unused.sgml: documentation updates.
-	* doc/reference/tmpl/reaper.sgml: note that we just proxy for glib 2.4
-	child_watch functionality, if present.
-
-2004-04-29 nalin
-	* python/vte.defs: include get_default_emulation binding.
-
-2004-04-29 nalin
-	* vte.spec: update version to 0.11.11
-
-2004-04-29 nalin
-	* src/vte.c(vte_terminal_unrealize): don't unref our accessible peer;
-	it may be accessed while we're unrealized, causing it to be destroyed
-	and re-created needlessly (#128049).
-	* src/vte.c(vte_terminal_finalize): unref our accessible peer.
-
-2004-04-29 nalin
-	* src/vte.c(vte_terminal_finalize): don't clear the child's PID early,
-	so that we'll SIGHUP it properly (the kernel should do that anyway,
-	but...) (#128291).
-
-2004-04-29 nalin
-	* src/vte.c(vte_terminal_insert_char): only deselect the current
-	selection if just-inserted text affected the selected region of the
-	screen (#135259).
-
-2004-04-29 nalin
-	* README: assorted updates.
-	* configure.in: check for 
-	* src/pty.c: include  if found (#141392).
-	* src/dumpkeys.c, src/mev.c, src/pty.c, src/ssfe.c, src/vte.c: do the
-	same.
-	* doc/reference/vte-sections.txt: add several functions which are new
-	but which weren't in the generated docs.
-	* doc/reference/vte-unused.txt: sort.
-
-2004-04-29 nalin
-	* src/vte.c(vte_terminal_scroll_region): remove stray debug printfs.
-
-2004-04-29 nalin
-	* configure.in: add a --with-default-emulation argument (part of
-	#115750).  Use AS_HELP_STRING wherever we need help strings.
-	* vte.pc.in, vte-uninstalled.pc.in: add DefaultEmulation variable
-	* vte.spec: specify "xterm" as the default-emulation, even though it's
-	the default default
-	* termcaps/Makefile.am: build and install the default emulation's
-	termcap, assuming it's some kind of xterm variant.
-	* src/keymap.c(_vte_keymap_map): check for xterm-xfree86 definitions
-	if the terminal type includes xterm, not if it exactly matches xterm
-	* src/reaper.c(vte_reaper_add_child): add.  The glib 2.4 SIGCHLD
-	watcher requires us to register particular PIDs for monitoring, so now
-	we require applications to do so.
-	* src/reaper.c(vte_reaper_child_watch_cb): add.
-	* src/reaper.c(vte_reaper_init): Don't hook the SIGCHLD handler if
-	we're running under glib 2.4, expect to use the g_child_watch
-	mechanism.
-	* src/vte.c: remove hard-coded definition of VTE_DEFAULT_EMULATION,
-	to be picked up from config.h instead.
-	* src/vte.c(vte_sequence_handler_cs): remove stray debug printfs.
-	* src/vte.c(vte_terminal_insert_char): only do what we were doing for
-	xn if LP was also set (#141445).
-	* src/vte.c(vte_terminal_get_default_emulation): add.
-	* src/vte.c(_vte_terminal_fork_basic): call vte_reaper_add_child for
-	new children.
-
-2004-04-27 nalin
-	* src/vte.c(vte_terminal_fork_command): more clearly document what
-	the argv and envv arguments are expected to contain (#127979).
-	* src/vte.c(vte_terminal_insert_char): attempt to more closely match
-	the behavior of am and xn on terminals -- if am is set {if xn is set,
-	autowrap should only happen before a character is output, and then only
-	if it's a graphic character, otherwise we autowrap after a character is
-	output}
-
-2004-04-21 nalin
-	* src/vte.c(vte_terminal_get_text_range_maybe_wrapped): also trim back
-	lines which are nothing but whitespace (#140765).
-	* src/vte.c(vte_terminal_configure_toplevel): invalidate the whole
-	window if we're "transparent", because we don't get expose events
-	unless some portion of our area came out from behind something else,
-	but we still need to repaint it (#122243).
-
-2004-04-20 nalin
-	* doc/reference/tmpl/reaper.sgml: document the child-exited signal.
-	* doc/reference/tmpl/vte.sgml: document the emulation-changed and
-	encoding-changed signals.
-
-2004-04-20 nalin
-	* Makefile.am: add rule for generating vte-uninstall.pc (Gman, #136129)
-	* vte-uninstalled.pc.in: add (Gman, #136129)
-
-2004-04-19 nalin
-	* src/vte.c(vte_terminal_key_press): don't steal keys from the input
-	method.
-
-2004-04-19 nalin
-	* src/pty.c(_vte_pty_set_utf8): toggle the IUTF8 flag, if
-	it was defined at compile-time (maybe for #129317).
-	* src/vte.c(vte_terminal_set_encoding): call _vte_pty_set_utf8.
-	* src/vte.h (vte_terminal_anti_alias_get_type): declare.
-	* src/vtebg.c(vte_bg_get_pixmap): Optimisation to fix the ridiculous
-	amount of time required to render solid colour or extremely small
-	image tiled backgrounds.  This fixes bug #123903.  (desrt)
-	* src/vtebg.c(vte_bg_root_pixmap): move resize code into a separate
-	function.
-	* src/vtebg.c(vte_bg_get_pixmap): Resize all image sources, in case
-	we're using a very small image file for the background.
-
-2004-04-19 nalin
-	* python/Makefile.am: move python module to site-packages/gtk-2.0,
-	which is added to the search path only by pygtk 2 (#92252).
-
-2004-04-19 nalin
-	* python/vte.override: define a modulename override so that the
-	Terminal class is registered in the proper namespace so that python's
-	help() builtin sees the Terminal class (#130267).
-
-2004-04-19 nalin
-	* src/vte.c(vte_terminal_anti_alias_get_type): add, for the sake of
-	bindings.
-
-2004-04-19 nalin
-	* src/vte.c(vte_terminal_key_press): call GtkWidget's key_press_event
-	callback for keys, in case GtkWidget has pre-programmed behavior for
-	that key (#133878).
-	* configure.in, gnome-pty-helper/configure.in: quote names of defined
-	functions (#133222).
-	* configure.in: make compilation of gnome-pty-helper actually
-	conditional (#133077).
-	* src/vte.c(vte_terminal_process_incoming): Doh #132610, actually
-	call vte_terminal_emit_contents_changed() when the contents change.
-
-2004-04-19 nalin
-	* src/vte.h, src/vte.c (vte_terminal_set_font_full): Add (#134429).
-	* src/vteglyph.c(_vte_glyph_cache_set_font_description): take a
-	VteTerminalAntiAlias argument.
-	* src/vteft2.c, src/vtegl.c, src/pango.c, src/pango.x, src/vtexft.c
-	(*_set_text_font): take a VteTerminalAntiAlias argument.
-
-2004-04-19  Victor Zverovich  
-	* src/vte.h src/vte.c: Added default signal handlers to
-	VteTerminalClass (#137961).  [NOTE: ABI change.]
-
-2004-04-19 nalin
-	* src/vte.c(vte_terminal_configure_toplevel): don't re-invalidate
-	everything, apparently unnecessary (#122243).  Might need to back this
-	out if I ever remember what specific combination of software and
-	versions prompted its addition in the first place.
-	* src/vte.c(vte_terminal_class_init): tell gettext that messages
-	retrieved from this domain should be returned in UTF-8 (#139542).
-
-2004-04-19 nalin
-	* configure.in: don't disable use of deprecated APIs unless asked
-	to do so.
-	* src/keymap.c(_vte_keymap_GDK_space): add Meta case (gafton).
-	* src/vtefc.c(_vte_fc_width_from_pango_stretch): add.
-	* src/vtefc.c(_vte_fc_transcribe_from_pango_font_description): handle
-	PangoStretch characteristics using _vte_fc_width_from_pango_stretch.
-	* src/vteregex.c: add random comments.
-	* src/vte.c(VteTerminal): track the "xn" terminal attribute.
-
-2004-04-10  Guntupalli Karunakar  
-
-        * configure.in: Added "gu" (Gujarati) to ALL_LINGUAS.
-
-2004-03-20  Gareth Owen  
-
-	* configure.in: Added en_GB to ALL_LINGUAS
-
-2004-03-10  Alexander Winston  
-
-	* configure.in: Added en_CA to ALL_LINGUAS.
-
-2004-03-04  Guntupalli Karunakar  
-
-	* configure.in: Added "pa" for Punjabi to ALL_LINGUAS.
-
-2004-02-07  Robert Sedak  
-
-	* configure.in: Added "hr" (Croatian) to ALL_LINGUAS.
-
-2004-02-02  Martin Kretzschmar  
-
-	* docs/reference/Makefile.am: use gtk-doc in xml-mode.
-
-	* docs/reference/vte-docs.sgml: sgml->xml, update to DocBook XML
-	4.1.2 DTD (fixes Bug #132945)
-
-2004-02-02 Alastair McKinstry 
-
-	* configure.in: Added 'ga' to ALL_LINGUAS
-	* po/ga.po: Added Gaeilge (Irish) translation.
-
-2004-01-27  Åsmund Skjæveland  
-
-	* configure.in: Added 'nn' to ALL_LINGUAS
-	* po/nn.po: Added Norwegian Nynorsk translation.
-
-2003-12-20  Arafat Medini 
-
-	* configure.in: Added Arabic Locale "ar" to ALL_LINGUAS
-
-2003-12-10  Tõivo Leedjärv  
-
-	* configure.in: Added et to ALL_LINGUAS.
-
-2003-12-06  Iñaki Larrañaga  
-
-	* configure.in: Added "eu" (Basque) to ALL_LINGUAS.
-
-2003-10-14  Christian Rose  
-
-	* configure.in: Added "ne" to ALL_LINGUAS.
-
-2003-10-07  Žygimantas Beručka  
-
-	* configure.in: Added "lt" to ALL_LINGUAS.
-
-2003-09-15 nalin
-	* src/vteapp.c: add options for exercising the cursor and highlight
-	colors.
-	* src/debug.c: flush output streams when we check if debugging is
-	enabled, because we'll probably output a string next.
-	* src/iso2022.c: don't print a zero-length string.  Yay compiler
-	warnings.
-	* src/interpret.c: use g_print() instead of fprintf() to print.
-	* src/keymap.c,src/ssfe.c: include , hopefully fixing
-	bug #121880 (or not).
-
-2003-09-15 nalin
-	* python/vte.defs: add specs for set_color_cursor and
-	set_color_highlight.
-
-2003-09-15 nalin
-	* src/vte.h,src/vte.c: add vte_terminal_set_color_cursor.
-	* src/vte.h,src/vte.c: add vte_terminal_set_color_highlight (#69776).
-	* src/vte.c(vte_terminal_determine_colors): add parameters for
-	specifying if the cell being rendered is the cursor or is highlighted,
-	probably for being selected.  If either flag is set, and we've been
-	given a color to use for the purpose by a caller, use the supplied
-	color, else use inverse colors.
-
-2003-09-15 nalin
-	* src/iso2022.c(process_control): don't reset the conversion state
-	when we hit an end-of-line.  I wasn't reading RFC1468 closely enough,
-	as it states that each line begins in the same encoding as the end of
-	the previous line, and read "application should reset before end-of-
-	line" as "terminal resets at end-of-line" (bug #122156).
-
-2003-09-11 nalin
-	* src/vteapp.c: silence a compiler warning.
-
-2003-09-11 nalin
-	* README: ask for LC_* in addition to LANG if weird spacing errors
-	crop up.
-	* src/vteconv.c,src/vteconv.h: add wrappers for _vte_conv which weed
-	out some warnings.
-	* src/iso2022.c: use _vte_conv_cu instead of _vte_conv.
-	* src/trie.c: use _vte_conv_cu instead of _vte_conv.
-	* src/vte.c: give _vte_terminal_fudge_pango_colors a return type again.
-	* src/vtebg.c: ifdef out vte_bg_source_name, which is unused.
-	* src/vtebg.c,src/vterdb.c: wrap calls to gdk_property_get to weed out
-	some compiler warnings.
-
-2003-09-11 nalin
-	* src/vte.c(vte_terminal_draw_cells_with_attributes): properly resolve
-	colors and cell properties to drawing colors.
-	* src/vte.c(_vte_terminal_fudge_pango_colors): add a function for
-	mapping GTK+ white-on-black preedit text to default reverse-colored
-	text for the terminal.
-	* src/vte.c(_vte_terminal_translate_pango_cells): don't bother
-	doing anything with the attribute for a range if the list is NULL.
-	Fudge white-on-black text to default colors in reverse so that it
-	works when the terminal is in a black-on-white color scheme.
-
-2003-09-11 nalin
-	* src/vte.c(_vte_terminal_apply_pango_attr): map weight attributes to
-	the terminal's bold attribute.
-
-2003-09-11 nalin
-	* src/vte.c(_vte_terminal_map_pango_color): add.
-	* src/vte.c(vte_terminal_im_preedit_changed): don't discard the
-	attributes list for the preedit string -- save them.
-	* src/vte.c(vte_terminal_draw_cells_with_attributes): add.
-	* src/vte.c(vte_terminal_paint): use draw_cells_with_attributes to
-	use the preedit attributes list when drawing the preedit string.  This
-	changes the way the preedit string is presented to the user, but it
-	now looks [more] like GTK+ suggests it should look, so it should be a
-	good change.
-
-2003-08-13 nalin
-	* src/caps.c: add sequences for linux-console-cursor-attributes, which
-	we'll ignore (bug #108232).
-
-2003-08-13 nalin
-	* configure.in: if we don't find the python headers (even if we found
-	python), disable compilation of python bindings (bug #116756).  Make the
-	checks for python support sequential for easier maintenance.
-	* python/vte.defs: add def for vte_terminal_match_set_cursor_type.  Make
-	the color argument to vte_terminal_set_background_tint_color const.
-	* python/vte.override(_wrap_vte_terminal_forkpty): add.
-	* python/vte.override(_wrap_vte_terminal_fork_command): don't leak envv.
-
-2003-08-13 nalin
-	* src/vte.c(vte_terminal_fork_command,vte_terminal_forkpty): doc update
-	to note that directory and envv can be NULL for both.
-
-2003-08-13 nalin
-	* src/vteapp.c(main): if -S is passed, use forkpty to start a child that
-	just counts until killed with Ctrl-C.
-
-2003-08-13 nalin
-	* doc/reference/vte-sections.txt: add vte_terminal_forkpty.
-	* src/pty.c(_vte_pty_run_on_pty): exit on any error, to avoid leaving
-	random unreaped children running.  Accept NULL command indicating that
-	no exec() should occur, but still error out if command isn't NULL and
-	exec() fails.
-	* src/pty.c(_vte_pty_fork_on_pty_name,_vte_pty_fork_on_pty_fd): store
-	0 as the new child's PID if we're the child.
-	* src/pty.c(main): don't run "tty" by default, test the forkpty() case
-	instead.
-	* src/vte.c(vte_terminal_fork_command): rename to
-	_vte_terminal_fork_basic.  Remove code to replace NULL command with
-	the user's shell.
-	* src/vte.c(vte_terminal_fork_command): new! wrap
-	_vte_terminal_fork_basic, replacing a NULL command with the user's
-	shell.
-	* src/vte.c(vte_terminal_forkpty),src/vte.h: new! wrap
-	_vte_terminal_fork_basic, passing NULL for the command and argv
-	arguments (bug #116450).
-	* src/Makefile.am: update shared library version.
-
-2003-08-12 nalin
-	* configure.in: if  isn't found, then we can't use any
-	freetype-specific bits, and that's not useful.  Error out, and say
-	that we need freetype 2.0.2 or newer, which introduced this header
-	into the procedure (bug #116341).
-
-2003-08-12 nalin
-	* src/vte.c: don't create an accessible peer at init() time in
-	debug mode.
-	* gnome-pty-helper/gnome-pty-helper.c(struct pty_info): add a field to
-	keep track of whether or not we created a lastlog record.
-	* gnome-pty-helper/gnome-pty-helper.c(shutdown_pty): also try to
-	write a logout record if pi->lastlog is true, because in doing so we
-	free pi->data, closing a leak (bug #116091).
-
-2003-08-12 nalin
-	* src/vteapp.c(resize_window): don't add the padding in when calculating
-	the new window size.
-
-2003-08-12 nalin
-	* doc/reference/tmpl/vte.sgml: note that dimensions passed in with
-	the resize-window signal include padding (more of bug #119141).
-
-2003-08-12 nalin
-	* src/vte.c(vte_sequence_handler_character_attributes,
-	vte_sequence_handler_decset_internal): remove redundant type checks.
-	* src/vte.c(all signal handlers): return a boolean indicating whether
-	or not to exit the processing loop instance early to allow the
-	application to deal with some input (usually along the lines of a
-	signal requesting that the terminal be resized) (bug #118938).
-
-2003-08-12 nalin
-	* python/vte.override(get_text,get_text_range): reorder arguments to
-	match the order for the C versions (#118882).
-	* python/vte.override(get_text,get_text_range,call_callback): fix
-	refcounting and callback argument marshalling (bug #118882).
-	* python/vte-demo.py: exercise get_text() on "window-raise" signals.
-
-2003-08-12  Padraig O'Briain  
-
-	* src/vteaccess.c:
-	(vte_terminal_initialize): New function containing initialization code
-	previously in vte_terminal_accessible_new. Also set role in
-	this function.
-	(vte_terminal_accessible_class_init): Specify function pointer for
-	vte_terminal_initialize.
-	(vte_terminal_accessible_get_type): Do not set instance data size or
-	GInstanceInitFunc. Remove vte_terminal_accessible_init.
-
-	This fixes bug #119694.
-
-2003-08-11 nalin
-	* python/vte.override: add binding for get_padding() (bug #118834).
-
-2003-08-11 nalin
-	* python/vte.override: add binding for get_cursor_position()
-	(bug #118800).
-
-2003-08-11 nalin
-	* python/vte.defs: give length parameters for feed() and feed_child()
-	default values of -1 (bug #118711).
-	* python/vte.override: use the length parameter if it's supplied to the
-	feed() and feed_child() methods.
-
-2003-08-11 nalin
-	* python/vte.override: add overrides for feed() and feed_child()
-	methods which use the length of the string as given in C, to hopefully
-	allow passing NUL bytes around as part of strings (bug #118711).  Make
-	the length parameter optional, and ignored, to try to avoid breaking
-	existing Python code in an obvious way.
-
-2003-08-11 nalin
-	* src/vte.c(vte_terminal_start_selection,vte_terminal_extend_selection):
-	drop an unnecessary cast-and-check, which we don't need because we have
-	no use for the GtkWidget pointer to the terminal.  Fix initial shift-
-	click (bug #118106).
-
-2003-08-11 nalin
-	* configure.in: error out if we don't find ncurses, curses, or
-	libtermcap development headers (bug #117754).
-
-2003-08-11 nalin
-	* autogen.sh: export WANT_AUTOCONF_2_5 for the sake of Mandrake autoconf
-	wrapper (bug #119066).
-
-2003-08-05 nalin
-	* src/vte.c(vte_sequence_handler_decset_internal,
-	vte_sequence_handler_window_manipulation): include the widget's padding
-	widths in resize requests (bug #119141).
-
-2003-07-30 nalin
-	* autogen.sh: check for autoconf-2.51, autoconf-2.50, autoconf-2.5 when
-	looking for autoconf 2.5x (bug #118627).
-
-2003-07-21 nalin
-	* gnome-pty-helper/configure.in: define _XOPEN_SOURCE_EXTENDED,
-	_XOPEN_SOURCE, and __EXTENSIONS__ for Solaris, as we do in the top-level
-	configure (#117636).
-
-2003-07-16 nalin
-	* gnome-pty-helper/configure.in: check for grantpt in libc and then
-	in libpt.  Check for openpty in libc before checking libutil.  Check for
-	sendmsg in libc before checking libsocket (with libnsl) (#117636).
-
-2003-07-11  Pablo Saratxaga 
-	* configure.in: Added Walloon (wa) to ALL_LINGUAS
-
-2003-07-10 nalin
-	* src/vteregex.h, src/vteregex.c: add.
-	* src/vte.c: use interfaces from vteregex for doing dingus matching.
-
-2003-07-03 nalin
-	* src/vte.c(vte_sequence_handler_return_terminal_status): return an
-	empty string in response to the ENQ control sequence instead of "xterm".
-	Report and patch from Mariano Suárez-Alvarez (#116495).
-
-2003-06-27 nalin
-	* src/iso2022.c: treat the "big5hkscs" encoding as an East Asian
-	encoding, which uses ambiguous widths (#116078).  Report and patch
-	from Roger So.
-	* src/dumpkeys.c, src/iso2022.c, src/iso8859mode.c, src/nativeecho.c,
-	src/utf8echo.c, src/utf8mode.c, src/vte.c: don't use the literal escape
-	character, express it as an octal sequence.
-
-2003-06-16 nalin
-	* src/caps.c: add vertical-tab and form-feed to the list of control
-	sequences.
-	* src/vte.c(vte_controL_sequence_handler_form_feed): add.
-	* src/vte.c(vte_controL_sequence_handler_vertical_tab): add.
-
-2003-06-16 nalin
-	* src/vteaccess.c(xy_from_offset): fix a compiler warning.
-
-2003-06-16 nalin
-	* src/vteint.h: add.  Move private VteTerminal stuff which needs to be
-	shared with other modules in the library here.
-	* src/vtedraw.c, src/vtedraw.h: add get_char_width(), for use in drawing
-	the cursor.
-	* src/vte.c(vte_invalidate_cursor_once): if the character under the
-	cursor doesn't fit into its cell, expose the column to the right of
-	it so that we can paint into the adjacent cell.
-	* src/vte.c(vte_terminal_paint): when clearing the area behind the
-	cursor or drawing the hollow rectangle to indicate its position when
-	we don't have focus, use the visible width of the character instead
-	of just assuming it will fit.  This complies better with assertion 2.
-
-2003-06-09 nalin
-	* src/vte.c(vte_terminal_set_encoding): set the encoding for the iso2022
-	converter (spotted by havill).
-
-2003-06-04 nalin
-	* src/vtebg.c, src/vterdb.c: sync the display before trapping errors
-	to ensure that any errors we'll get will be handled before we remove
-	the error handlers.
-
-2003-06-03 nalin
-	* src/vtebg.c(_vte_bg_get_pixmap, _vte_bg_get_pixbuf): trap X errors
-	while retrieving the contents of the root pixmap.
-	* doc/ambiguous.txt: add.
-	* README: update.
-	* vte.spec: rebuild.
-
-Tue Jun  3 15:50:38 2003  Jonathan Blandford  
-
-	* src/pty.c (n_read): add a missing break in the switch statement.
-
-2003-06-03  Kenneth Rohde Christiansen  
-	* configure.in: Added Limburgish (li) to ALL_LINGUAS.
-
-2003-06-02 nalin
-	* src/Makefile.am: start using libtool versioning in earnest.
-
-2003-06-01 nalin
-	* src/vtegl.c(_vte_gl_set_text_font): compile fix.
-
-2003-05-30 nalin
-	* src/vte.c(vte_sequence_handler_decset_internal): fix logic for
-	skipping over particular settings so that setting 1048 actually works.
-	* src/vte.c(vte_terminal_process_incoming): in debug mode, print out
-	characters with codepoints higher than 255 in hex rather than decimal.
-	* src/iso2022.c(_vte_iso2022_ambiguous_width): rename to
-	_vte_iso2022_ambiguous_width_guess because that's all we can do without
-	more context.
-	* src/iso2022.c(_vte_iso2022_ambiguous_width): add for using the
-	current encoding to determine what the width of an ambiguously-wide
-	character should be.  This seems to work better.
-
-2003-05-30  Padraig O'Briain  
-	* src/vteaccess.c: Add implementation for get_character_extents,
-	get_offset_at_point and get_run_attributes. This fixes bug #110770.
-	Add casts to fix complier warnings on Solaris.
-	
-	* src/vtexft.c (_vte_xft_text_extents): Do not call return as function
-	returns void. Fixes compiler error on Solaris.
-
-2003-05-29 nalin
-	* src/vteapp.c: require -i for icon-title-changed messages, which got
-	really annoying really fast.
-	* src/trie.c(main): use g_quark_from_static_string for static strings.
-
-2003-05-29 nalin
-	* src/vte.c(vte_terminal_send): fix newline stuffing (used in linefeed
-	mode).
-	* src/vte.c(vte_unicode_strlen): rename to vte_unichar_strlen.
-	* src/vte.c(vte_terminal_set_title_internal): don't leak the new title
-	in the unlikely cases.
-	* src/vte.c(vte_terminal_process_incoming): be more careful with control
-	characters to avoid cases where we could be tricked into a loop.
-	* src/vteapp.c: emit a message when the icon title is changed.
-
-2003-05-29 nalin
-	* src/vte.c(vte_terminal_process_incoming): handle control characters
-	in the middle of control sequences.
-	* src/vte.c(vte_sequence_handler_cm): fix origin mode.
-	* src/vte.c(vte_sequence_handler_cv): fix origin mode.
-	* src/vte.c(vte_sequence_handler_cs): snap the cursor to the scrolling
-	region which is set.
-	* src/table.c(_vte_table_extract_number): extract a number digit by
-	digit as we do in the trie parser.
-	* src/vte.h: declare 'struct vte_char_attributes' again to restore API
-	back compat with 0.10.x.
-	* src/iso2022.c(_vte_iso2022_sequence_length): don't recognize PM
-	messages -- Xterm doesn't do anything with them and we don't want to
-	appear to hang when we're really just waiting for the end of the
-	message.
-
-2003-05-28 nalin
-	* src/vtefc.c(_vte_fc_defaults_from_rdb): only apply DPI if we were
-	able to get a value.
-	* src/vterdb.c, src/vterdb.h: use the display and screen of a passed-in
-	widget if asked to do so, else use screen 0 of the default display.
-
-2003-05-28 nalin
-	* configure.in: check for GTK+ 2.2, and if found, force use of
-	multihead-safe APIs to try to flush out some bugs.
-	* src/vte.c, src/vteapp.c, src/vtedraw.c, src/vtefc.c, src/vteglyph.c:
-	clean up some sloppy multihead changes.
-	* src/vte.c, src/vte.h (vte_terminal_match_set_cursor_type): add.
-	* src/vtedraw.c, src/vtedraw.h: add a draw_char() method which is
-	allowed to fail.
-	* src/vte.c(vte_terminal_draw_graphic): separate the width of a column
-	and the number of columns to be drawn.  Use _vte_draw_char() to avoid
-	crude approximations of characters when we have a font for them.
-
-2003-05-21 nalin
-	* src/vte.c(vte_terminal_scroll_region): force an entire window repaint
-	if we're supposed to scroll the background but we're not scrolling the
-	entire window.  This means we need to repaint the scrolled region, and
-	to keep things looking right, we need to repaint everything.
-	* src/vteapp.c(main): enable visible bell if we're disabling the
-	audible bell, and vice-versa.
-	* src/vte.c: flesh out some doc comments.
-	* doc/reference/tmpl/vte.sgml: flesh out some notes on signals.
-
-2003-05-21 nalin
-	* src/vteconv.c(_vte_conv): pass zero bytes which trigger EILSEQ
-	through and keep going.
-	* src/vteconv.c: replace use of g_utf8_strlen with an internal function
-	which doesn't stop counting at NUL characters.
-
-2003-05-21 nalin
-	* src/interpret.c: use _vte_matcher_free_params_array.
-	* src/vte.c(vte_invalidate_cursor_once): add a parameter for indicating
-	if this is a "cursor blink" (periodic) refresh, and if it is set and
-	the cursor isn't supposed to blink, suppress the invalidate.
-
-2003-05-21 nalin
-	* src/iso2022.c(_vte_iso2022_process): free the temporary array.
-	* src/matcher.c(_vte_matcher_free_params_array): add.
-	* src/vte.c: use _vte_matcher_free_params_array instead of the local
-	copy, which is removed.
-	* src/interpret.c, src/table.c, src/trie.c: use
-	_vte_matcher_free_params_array to free parameter arrays instead of
-	g_value_array_free, which doesn't take care of the pointer values.
-	* src/vte.c(vte_sequence_handler_set_title_internal): only attempt to
-	close the conversion descriptor if it was opened successfully.
-	* src/vteapp.c: add the -k option to spin after gtk_main() returns.
-	* src/vtefc.c: make copies of patterns with FcPatternDuplicate so that
-	we know where all of the returned patterns came from.
-	* src/vtexft.c(_vte_xft_font_for_char): set the item in the pattern
-	array to NULL if we successfully opened a font using the pattern.
-
-2003-05-20 nalin
-	* src/iso2022.c: clarify comments near one of the warning messages.
-	* src/vtefc.c(_vte_fc_transcribe_from_pango_font_description): unref
-	the Pango context, which was created for us.
-	* src/vtepango.c: keep track of the Pango context, and unref it when
-	it is no longer needed.
-
-2003-05-20 nalin
-	* src/Makefile.am: try juggling the CFLAGS and LIBS order to let the
-	xft CFLAGS/LIBS take precedence over everything else (#113335).
-
-2003-05-20 nalin
-	* src/ssfe.c: compile fix for Solaris, patch from #113344.
-
-2003-05-20 nalin
-	* src/vte.c: remove no-longer-used tree structure.
-	* src/vtefc.c: free strings returned by g_object_get().
-
-2003-05-20 nalin
-	* src/vte.c(vte_terminal_realize): create the terminal's draw structure.
-	* src/vte.c(vte_terminal_unrealize): free the terminal's draw structure.
-	* src/vteapp.c(main): enforce a clean shutdown by requiring that the
-	terminal and top-level window are both finalized before gtk_main()
-	returns.
-
-2003-05-20 nalin
-	* src/vte.c(vte_terminal_finalize): properly send a SIGHUP to the child
-	process if it hasn't already exited (#112505).
-	* src/vteapp.c: don't exit on EOF, only on child-exited.
-	* src/vte.c(vte_sequence_handler_sf): increment the scrolling offset
-	to avoid flickering when the application has defined a scrolling region
-	with top row == 1.
-
-2003-05-19 nalin
-	* src/iso2022.c, src/keymap.c, src/mev.c, src/vtebg.h, src/vteglyph.h:
-	remove comma from end of enum declaration (#111925).
-	* src/vtetc.c: don't use parameter-as-array-size compiler
-	extension (#111925).
-	* src/ssfe.c: don't assume that the compiler interprets \e correctly,
-	use %c with value of 27 instead (#111925).
-	* doc/reference/Makefile.am: obey CPPFLAGS and LDFLAGS (#111925).
-	* gnome-pty-helper/gnome-utmp.c: only include  if HAVE_UTMP_H
-	was defined (#111925).
-	* src/keymap.c, src/ssfe.c: unconditionally include  if we
-	defined HAVE_CURSES or HAVE_NCURSES, as having the header is a
-	precondition for defining either (#111925).
-	* src/iso2022.c: make each array have at least one element (#111925).
-	* src/pty.c, src/gnome-login-support.c: try to open /dev/ptc if opening
-	/dev/ptmx fails due to ENOENT (#111925).
-
-2003-05-19 nalin
-	* src/vteapp.c: don't exit on eof, just child-exited.
-	* src/vte.c(vte_terminal_eof): don't disconnect from SIGCHLD on eof,
-	the child might still be running.
-
-2003-05-19 nalin
-	* src/Makefile.am: change all instances of "termcap" to "vtetc".
-	* src/termcap.c, src/termcap.h: rename to vtetc.c, vtetc.h, to avoid
-	conflicts with system headers.
-
-2003-05-19 nalin
-	* src/keymap.c: fix KP_PageDown in application keypad mode (#113187).
-	* src/reaper.c: add a finalize method which properly cleans things up
-	so that the singleton can at least theoretically be destroyed (part of
-	a fix for #112172).
-	* src/vte.c: obtain a ref to a reaper object whenever we are waiting
-	for a child to exit.
-	* po/POTFILES.in: add more source files for scanning.
-	* src/iso2022.c: rework pieces to handle incomplete sequences at the
-	end of input.  Check for 8-bit SS2 and SS3 in case of EILSEQ.  Build
-	a fake ISO-8859-1 map for conversions using invalid maps.
-	* src/iso2022.c(_vte_iso2022_state_free): free the state's buffer.
-	* src/vteconv.c: internalize UTF-8 to UTF-8 conversions, fix handling
-	of incomplete sequences at the end of the available data.
-	* src/vte.c: implement send/receive and automatic linefeed modes.
-	* src/vte.c(vte_sequence_handler_sr): invalidate the row which contains
-	the cursor to ensure that it doesn't leave a trail.
-	* src/vte.c(vte_sequence_handler_return_terminal_id): add.
-	* src/vte.c(vte_terminal_feed_child_using_modes): add.
-
-2003-05-19 Telsa Gwynne  
-
-	* configure.in: Add cy (Welsh) to ALL_LINGUAS
-
-2003-05-13 nalin
-	* src/iso2022.c(_vte_iso2022_find_nextctl): don't recognize 8-bit
-	SS2 and SS3 by default, it breaks UTF-8 and other encodings (#112879).
-
-2003-05-13 nalin
-	* src/vtedraw.c, src/vtedraw.h: add _vte_draw_needs_repaint() to
-	indicate if the drawing back-end can only handle entire-window paints.
-	* src/vteconv.c: return a value from _vte_conv_close(), even though
-	it isn't used.
-	* src/vte.c(vte_terminal_paint): don't look at drawing starting at
-	negative row or coumn offsets.
-	* src/vtegl.c: prefer glX double-buffering to GDK's, and use double-
-	buffered possibly-direct windows instead of indirect pixmaps.
-
-2003-05-12 nalin
-	* src/vtebg.c(_vte_bg_get_pixmap, _vte_bg_get_pixbuf): account for the
-	foreign root pixmap not having a colormap by default, using the root
-	window's colormap if it doesn't already have one set.
-
-2003-05-12 nalin
-	* src/iso2022.c(_vte_iso2022_state_new): if we can't convert from the
-	locale encoding to UTF-8, use UTF-8 as the locale encoding (#112614).
-	* src/vtegl.c(_vte_gl_start): enable point smoothing.
-
-2003-05-08 nalin
-	* src/vtedraw.c, src/vtedraw.h (_vte_draw_get_colormap): let the caller
-	control whether or not we return the default colormap.
-	* src/vtegl.c: enable blending.  Don't specify any buffer depths.  Set
-	the current drawable before we do any drawing.  Call gluOrtho2D with
-	the right args to set up the right projection.
-	* src/vteskel.c: quiet compiler warning by removing a "const".
-	* src/vtedraw.c: juggle the preferred render order again.
-
-2003-05-08  Abel Cheung  
-
-	* configure.in: Added "mk" to ALL_LINGUAS.
-
-2003-05-07 nalin
-	* src/iso2022.c: let OSC command sequences be subject to code
-	conversion again (#112485).
-
-2003-05-07 nalin
-	* src/vteconv.c, src/vteconv.h: add VteConv as a thin wrapper around
-	GIConv.
-	* src/iso2022.c: use VteConv.
-	* src/matcher.c(_vte_matcher_find_valid_encoding): remove.
-	* src/matcher.c(_vte_matcher_wide_encoding): remove.
-	* src/trie.c: use VteConv.
-	* src/utf8echo.c: use VteConv.
-	* src/vte.c: use VteConv (#112446).
-
-2003-05-06 nalin
-	* src/vte.c: add "Since: 0.11" to documentation for functions which
-	aren't available in the 0.10 series.
-	* src/iso2022.c: default G2 to JIS0201, G3 to JIS0212 for Japanese,
-	because they appear to not be used by anyone else.
-	* vte.spec: merge with .spec file from RHL.
-
-2003-05-06 nalin
-	* src/vtegl.c: get text rendering semi-working.
-
-2003-05-06 nalin
-	* src/vteft2.c, src/vtegl.c, src/vtepango.c, src/vtepangox.c,
-	src/vtexft.c: when setting up backgrounds, don't deref an existing
-	background before fetching a new one, in case they're the same.
-	* src/vteglyph.c(_vte_glyph_draw): fix computation of the input offset.
-	* src/vtegl.c: implement drawing of backgrounds.
-
-2003-05-06 nalin
-	* src/iso2022.c(_vte_iso2022_map_J): include the whole JIS0201 map
-	instead of just the lower half.
-	* src/iso2022.c(_vte_iso2022_map_get): set the and_mask to clear the
-	high bits of pairs before looking them up in the maps.
-	* src/iso2022.c(_vte_iso2022_fragment_input): recognize the 8-bit
-	versions of SS2 and SS3.
-	* src/iso2022.c(_vte_iso2022_process_control): recognize the 8-bit
-	versions of SS2 and SS3.
-
-2003-05-06  Danilo Šegan  
-
-	* configure.in: Added "sr" and "sr@Latn" to ALL_LINGUAS.
-
-2003-05-05 nalin
-	* src/debug.h: include  for gboolean type definition.
-	* src/matcher.c: include "config.h" and "debug.h".
-	* src/matcher.h: use G_BEGIN_DECLS/G_END_DECLS
-	* src/table.h: use G_BEGIN_DECLS/G_END_DECLS
-	* src/termcap.h: include , again for gboolean.
-	* src/vtebg.h,src/vterdb.h,src/vtergb.h: adjust macro used to prevent
-	multiple inclusions to match the rest of the tree.
-	* src/vtefc.c(_vte_fc_patterns_from_pango_font_desc): provide a callback
-	which can be used to override all defaults.
-	* src/vtegl.h,src/vtexft.h: don't include "config.h"
-	* src/vteglyph.c, src/vteglyph.h: add _vte_glyph_get_uncached().
-
-2003-05-04 nalin
-	* gnome-pty-helper/gnome-login-support.c(n_read,n_write): if ERESTART
-	is defined, treat it like EINTR and EAGAIN.
-	* src/pty.c(n_read,n_write): if ERESTART is defined, treat it like
-	EINTR and EAGAIN.
-
-2003-05-02 nalin
-	* configure.in: define _XOPEN_SOURCE_EXTENDED, _XOPEN_SOURCE, and
-	__EXTENSIONS__ to get definitions for msg_control and msg_controllen
-	on Solaris (#112036).
-	* src/vtedraw.c(_vte_draw_set_scroll): don't try to return a value from
-	this void function (#112036).  Patch from Hidetoshi Tajima.
-	* src/xticker.c: don't include getopt.h, which isn't even needed for
-	regular getopt() (#112036).  Patch from Hidetoshi Tajima.
-
-2003-05-01 nalin
-	* src/vtebg.c(vte_bg_set_root_pixmap,vte_bg_root_pixmap): remove some
-	debugging g_print() calls.
-	* src/iso2022.c(process_cdata): skip over NUL bytes (#112022).
-	* src/vte.c(vte_terminal_background_update): map the bgcolor values to
-	a pixel value before setting the window background color.
-	* src/nativeecho.c(main): echo NUL bytes if asked to do so.
-
-2003-05-01 nalin
-	* src/vtebg.c, src/vtebg.h: add a singleton object for managing
-	copies of background images, either the desktop background, an
-	in-memory pixbuf, or an on-disk file, with tinting.  Using a single
-	store for this stuff lets multiple widgets share images and should
-	reduce both CPU and memory consumption in applications which create
-	more than one VteTerminal instance with similar settings.
-	* src/vtedraw.c, src/vtedraw.h: adapt the set_background_pixbuf()
-	interface to the vtebg method and rename to set_background_image().
-	* src/vteft2.c, src/vtegl.c, src/vtepango.c, src/vtepangox.c,
-	src/vteskel.c, src/vtexft.c: update to work with newer vtebg/vtedraw
-	interfaces.
-	* src/vte.c(vte_terminal_filter_property_changes): remove in favor
-	of vtebg method.  Manage background state for vtebg.
-
-2003-05-01 Kang Jeong-Hee 
-	* doc/reference/Makefile.am: s/index.sgml/index.html/.
-	There's no index.sgml in html directory, but a index.html.
-
-2003-04-29 nalin
-	* src/vte.c(vte_sequence_handler_local_charset): remove the unused
-	DEFAULT_ISO_8859_1 case.
-	* src/vte.c(vte_terminal_class_init): don't call
-	_vte_matcher_narrow_encoding(), because we don't need it any more.
-	Change the error message emitted when _vte_matcher_wide_encoding()
-	fails (#111925), and mark it for translation.
-	* src/trie.c(main): don't call _vte_matcher_narrow_encoding() just
-	to print its result.
-	* src/vte.c(vte_terminal_set_encoding): include the right codeset name
-	in the error message.
-	* src/vteglyph.c(_vte_glyph_get): mark error message for translation.
-	* src/matcher.c, src/matcher.h: remove _vte_matcher_narrow_encoding().
-	Make tables of strings "const".
-
-2003-04-29 nalin
-	* src/vte.c(vte_terminal_unrealize): set the IM context's client window
-	to NULL before unreferencing it to avoid crashes when preedit is active.
-
-2003-04-29 nalin
-	* src/keymap.c: add keymaps for GDK_slash and GDK_question (#108299).
-
-2003-04-29 nalin
-	* src/vterdb.c(_vte_rdb_get): use INT_MAX instead of LONG_MAX when
-	passing in the maximum length, because it's returned in an int.
-
-2003-04-29 nalin
-	* src/iso2022.txt: fix the UTF-8 sample text which corresponds to the
-	ISO-2022-KR sample text so that it actually matches the text.
-
-2003-04-29 nalin
-	* src/iso2022.c(_vte_iso2022_map_U): add map for CP437.
-	* src/unitable.CP437: add.
-	* src/mkunitables.sh: add CP437.
-	* src/Makefile.am: add unitable.CP437 to the file list.
-
-2003-04-29 nalin
-	* src/iso2022.c(_vte_iso2022_process_control): accept and warn about
-	bogus map names (#110300).
-
-2003-04-28 nalin
-	* src/vte.c(vte_invalidate_cursor_once): rework to simplify the logic
-	of how many cells to invalidate when we have a preedit string.
-	* src/vte.c(vte_terminal_paint): draw the preedit string correctly for
-	cases more complicated than the default IM (seems to fix #111767).
-	* src/vterdb.c(_vte_rdb_get): use g_strncpy() and the property length
-	to avoid going past the end of the possibly-not-nul-terminated string.
-	* src/Makefile.am: build a standalone vterdb binary.
-
-2003-04-28 nalin
-	* src/vte.c(vte_terminal_insert_char): add another flag to skip over
-	sanity-checking the buffer when adding characters.
-	* src/vte.c(vte_terminal_process_incoming): sanity-check the buffer
-	only when necessary to save time.
-	* src/vte.c(vte_terminal_scroll_region): invalidate the region which
-	is exposed when we scroll so that the entire cell gets redrawn, avoiding
-	clipping problems (#111683).
-	* src/vte.c(vte_terminal_paint): fix math for determining where to
-	stop drawing.
-	* src/vte.c(vte_terminal_fill_rectangle): rename to ..._int to reduce
-	confusion over which internal drawing commands are offset and which are
-	not.
-	* src/vte.c(vte_terminal_insert_char): if performing a single
-	substitution, check the encoded width of the output char, not the
-	input char, which doesn't have one.
-
-2003-04-28 nalin
-	* src/vterdb.c, src/vterdb.h: add routines for pulling Xft antialiasing
-	and hinting options from the resource database.
-	* src/vtefc.c(_vte_fc_patterns_from_pango_font_desc): apply settings
-	from the resource database after applying settings from GTK+.
-	* src/vtefc.c(_vte_fc_defaults_from_rdb): added, for adding default
-	settings based on the resource database.
-
-2003-04-27 nalin
-	* src/vtefc.c(_vte_fc_defaults_from_gtk): complain when the installed
-	version of GTK+ doesn't support reporting Xft antialiasing and hinting
-	settings.
-
-2003-04-25 nalin
-	* src/vte.c(vte_sequence_handler_sf): freeze the window when scrolling
-	down in a restricted scrolling area again.
-
-2003-04-23 nalin
-	* src/iso2022.c(_vte_iso2022_state_set_codeset): save the new codeset.
-	* src/iso2022.c(process_cdata): compare the new codeset to the name of
-	the UTF-8 codeset instead of the local codeset to see if we need to
-	notify callers of a change.
-
-2003-04-23 nalin
-	* src/vte.c(vte_sequence_handler_sf): don't use the window freeze count
-	to check if it's safe to scroll using gdk_window_scroll(), require other
-	parts of this widget to declare it unsafe for those cases.
-
-2003-04-23 nalin
-	* src/vtexft.c(_vte_xft_char_width): take an explicit XftFont instead
-	of figuring out which one to use ourselves.
-	* src/vtexft.c(_vte_xft_draw_text): pass the XftFont which we're already
-	using to _vte_xft_char_width to save a call to _vte_xft_font_for_char.
-
-2003-04-23 nalin
-	* autogen.sh: accept libtool 1.5 in addition to 1.4 (#15968).
-
-2003-04-23 nalin
-	* src/vte.c,src/vte.h: (_vte_terminal_accessible_ref): add.
-	* src/vteaccess.c(vte_terminal_accessible_new): call
-	_vte_terminal_accessible_ref to ensure that accessible signals are
-	going to be emitted.
-
-2003-04-23 nalin
-	* src/dumpkeys.c: formatting fixup.
-	* src/iso2022.c: formatting fixups.  Try using U+FFFF as the "invalid"
-	marker character instead of '?', because it's actually invalid.
-	* src/pty.c: formatting fixup.
-	* src/reflect.c: formatting fixup.
-	* src/ring.c: formatting fixup.
-	* src/ssfe.c: formatting fixups.
-	* src/trie.c: formatting fixup.
-	* src/vte.c: formatting fixups.
-	* src/vte.c(vte_terminal_get_accessible): don't add a weak pointer to
-	the AtkObject if it isn't a valid AtkObject.  Only emit text-changed
-	signals if we managed to create a valid accessible peer.
-	* src/vteaccess.c: formatting fixups.
-	* src/vteaccess.c(vte_terminal_accessible_init): unset the EXPANDABLE
-	Atk state.  Set the RESIZABLE state.
-	* src/vteaccess.c(vte_terminal_accessible_class_init): Remove
-	spurious(?) call to bind_textdomain.
-	* src/vteaccess.c(vte_terminal_accessible_get_type): check if the
-	accessible peer of our peer's ancestor is derived from GtkAccessible,
-	and if it isn't derive from GtkAccessible instead of that.
-	* src/vteaccess.c(vte_terminal_accessible_get_type): register our
-	factory type.
-	* src/vteaccess.c, src/vteaccess.c: add VteTerminalAccessibleFactory.
-	* src/vtedraw.c: formatting fixup.
-
-2003-04-23 nalin
-	* src/vte.c(vte_terminal_background_update): always refetch the
-	root pixmap if we don't currently have a background image (#111386).
-
-2003-04-23 nalin
-	* src/vteaccess.c: implement an AtkComponent interface (part of
-	#110770).
-	* src/vteaccess.c(vte_terminal_accessible_focus_in): set the focus
-	state on the accessible peer (part of #110770).
-	* src/vteaccess.c(vte_terminal_accessible_focus_out): unset the focus
-	state on the accessible peer (part of #110770).
-	* src/vteaccess.c(vte_terminal_accessible_init): connect to the widget's
-	visibility-notify signals.
-	* src/vteaccess.c(vte_terminal_accessible_finalize): disconnect from
-	the widget's visibility-notify signals.
-
-2003-04-23 nalin
-	* src/vte.c(vte_terminal_background_update): don't bother generating
-	a new pixmap or panning the pixbuf -- we can use the desaturated
-	pixbuf directly now (#111386).
-	* src/vte.c(vte_terminal_paint): use the drawing offsets because we
-	don't regenerate new background pixmaps when the window is moved.
-	* src/vte.c(vte_terminal_draw_cells): add jittered bold text back in,
-	fell out in the drawing overhaul (#111430).
-
-2003-04-22 nalin
-	* src/iso2022.c(_vte_iso2022_fragment_input): account for valid CSI
-	sequences which were missed earlier.
-
-2003-04-22 nalin
-	* src/vte.c(vte_terminal_eof): dispose of the PTY completely.
-	* src/vte.c(vte_terminal_child_exited): dispose of the PTY completely.
-
-2003-04-22 nalin
-	* configure.in: add missing check for recvmsg.
-	* gnome-pty-helper/gnome-login-support.c: formatting and spelling fixes.
-	* gnome-pty-helper/gnome-login-support.c(n_read): reorganize.
-	* gnome-pty-helper/gnome-login-support.c(n_write): add.
-	* gnome-pty-helper/gnome-login-support.h: add prototype for n_write.
-	* gnome-pty-helper/gnome-pty-helper.c: only define the I_SENDFD version
-	of pass_fd() if I_SENDFD is defined, to clarify compile errors when it
-	isn't defined.
-	* src/pty.c(main): exercise session logging.
-	* src/pty.c(_vte_pty_open_with_helper): add more debug messages.
-
-2003-04-22 nalin
-	* src/iso2022.c(_vte_iso2022_map_get): force visible widths to 2 columns
-	for CJK maps which use 2 bytes per character.
-	* src/iso2022.c(_vte_iso2022_fragment_input): recognize CSI/OSC/PM
-	sequences as control sequences and not raw text, allowing us to treat
-	them specially later.
-	* src/iso2022.c(process_control): pass CSI/OSC/PM sequences through
-	unmodified (without going through maps).
-
-2003-04-22 nalin
-	* src/vte.c(vte_invalidate_cursor_once): don't bother doing anything if
-	we're fully obscured (related to #102703).
-
-2003-04-22 nalin
-	* src/vteapp.c(main): stop messing with fontconfig's list of font
-	directories.
-
-2003-04-22 nalin
-	* configure.in: rework link order so that xft2 is linked before anything
-	else.  You're still screwed if you link with both xft1 and xft2 libs,
-	but maybe this'll help (#107285).
-
-2003-04-22 nalin
-	* src/vteglyph.c: fix a couple of #errors.
-	* src/vte.c(vte_invalidate_cells): if the area we're invading is on the
-	edge, invalidate the edge as well.
-	* src/pty.c: implement and use wrappers for read and write which handle
-	EINTR and EAGAIN.
-	* src/vte.c(vte_terminal_scroll_region): don't use gdk_window_scroll if
-	the window is frozen for updates.
-	* src/vte.c(vte_terminal_sequence_handler_sf): when scrolling down while
-	we have a defined scrolling region, freeze the window to avoid flicker
-	when we update the scrolling offsets (#108058).
-
-2003-04-21 nalin
-	* gnome-pty-helper/gnome-login-support.c(n_read): don't bail out if
-	read() returns -1 and errno is either EINTR or EAGAIN, candidate fix for
-	#107534.
-
-2003-04-21 nalin
-	* src/vte.c(vte_terminal_io_read): add a couple of assertions here
-	just to be sure (#108066).
-
-2003-04-21 nalin
-	* src/pty.c(_vte_pty_ptsname): don't depend on PATH_MAX being
-	available and correct (#109805).
-	* src/vte.c(vte_terminal_set_termcap): don't depend on PATH_MAX being
-	available and correct (#109805).
-	* src/vte.c(vte_terminal_io_read): fix signed/unsigned comparison
-	(#108066).
-
-2003-04-21 nalin
-	* Makefile.am: add MESSAGE-OF-DOOM to EXTRA_DIST
-	* src/keymap.c: make Alt+Return generate ESC newline (#108863).
-
-2003-04-21 nalin
-	* src/Makefile.am: drop unitable.KSC5601
-	* src/iso2022.c: fixup comment re: KS X 1001 (#107119).
-	* src/mkunitables.sh: add two characters from KS X 1001:1998 (#107119).
-
-2003-04-21 nalin
-	* src/vte.c(vte_terminal_eof): don't try to process incoming data if
-	there isn't any (#110946).
-	* src/vtexft.c: mark a warning message for translation.
-	* src/vtegl.c: make the warning when glX isn't available debug-only.
-
-2003-04-21 nalin
-	* src/vteglyph.c: use #if HAVE_DECL_XXX instead of #ifdef HAVE_DECL_XXX,
-	noted by Bob Doan.
-
-2003-04-20 nalin
-	* src/vtexft.c: work around for garbled glyphs when drawing runs of
-	text using multiple fonts while mixing bitmap and antialiased fonts
-
-2003-04-17 nalin
-	* src/vte.c: add missing prototype for vte_terminal_process_incoming().
-
-2003-04-17 nalin
-	* src/vteglyph.c(_vte_glyph_get): quiet a compiler warning.
-	* src/iso2022.c: use KSX-1001 instead of KSC-5601 for Korean (#107119),
-	add maps for CNS 11643 planes 3,4,5,6,7 (can't test them, but hey).
-	Rework so that we get the data before it's passed to g_iconv(), and
-	return gunichars.
-	* src/interpret.c: adapt to changes in the iso2022 interfaces.
-	* src/vte.c: adapt to changes in the iso2022 interfaces.
-	* src/mkunitables.sh: add snippets for KSX 1001.
-	* src/iso2022.txt: add iso-2022-cn example text.
-
-2003-04-17 nalin
-	* src/vte.c(vte_terminal_process_incoming): invalidate a larger
-	rectangle to fix behavior wrt openi18n assertion 2.
-
-2003-04-16 nalin
-	* src/vte.c(vte_terminal_paint): fix logic error drawing the cursor
-	which caused ALTGR characters to always be used.  Draw the preedit
-	string in the right location.
-	* src/vte.c(vte_invalidate_cursor_once): expose the visible width of
-	the preedit string, not its length.
-
-2003-04-15 nalin
-	* src/vteaccess.c: fix broken debug message.
-
-2003-04-15 nalin
-	* src/vte.c: make row_data a structure containing an array instead of a
-	simple array.  Add a field to row data structures which tracks whether
-	or not we soft-wrapped from this line to the next one.  Make use of the
-	field when copying text and selecting by "line" (#105189).
-	* src/reflect.c: put the label in a scrolled window to avoid mad loops
-	when we resize it to accomodate more text, which shrinks the terminal,
-	which removes text from the label, which resizes it to be smaller, which
-	gives the terminal more space, which adds text to the viewable area,
-	which requires a bigger label, and so on.
-	* src/vte.c: move vte_terminal_get_text_range logic into
-	vte_terminal_get_text_range_maybe_wrapped for internal use,
-	vte_terminal_get_text likewise.
-
-2003-04-14 nalin
-	* src/vte.c: don't snap the beginning of selection to the next line in
-	select-by-line mode.
-
-2003-04-14 nalin
-	* configure.in, src/vteglyph.c: fix macro invocations so that when
-	LCD and GRAY2/GRAY4 pixel modes are supported by freetype, we don't
-	get confused by them.
-	* src/vtepango.c, src/vtepangox.c: fix background scrolling.
-
-2003-04-14 nalin
-	* autogen.sh: require automake 1.6, 1.5 chokes on AM_LDFLAGS, which 1.7
-	wants instead of LDFLAGS(!).  Require autoconf 2.52 or newer, because
-	older versions bail on configure.in.
-	* configure.in: Check if ft_render_mode_mono, FT_RENDER_MODE_NORMAL,
-	FT_PIXEL_MODE_MONO, ft_pixel_mode_mono, FT_PIXEL_MODE_GRAY2,
-	FT_PIXEL_MODE_GRAY4, FT_PIXEL_MODE_GRAY, ft_pixel_mode_grays,
-	FT_PIXEL_MODE_LCD are declared.
-	* src/vte.c, src/vteapp.c, src/vtefc.c, src/vtepango.c: handle being
-	built with GTK+ 2.0 or 2.2.
-	* src/vtegl.c: disable for GTK+ < 2.2.0.
-	* src/vtepangox.c: use a PangoX context instead of a Pango context
-	when determining font metrics.
-	* src/vteglyph.c: handle the twisty maze of load and render options and
-	pixel modes various versions of freetype support.
-
-2003-04-14 nalin
-	* configure.in: disable pangox, xft, glx drawing if run invoked with
-	the --without-x flag.
-	* vte.pc.in: include CFLAGS found by AC_PATH_XTRA when built with X.
-	* src/iso2022.c(_vte_iso2022_substitute_single): clean up and ensure
-	that ambiguous widths are respected.
-	* src/iso2022.c, src/iso2022.h: add _vte_iso2022_unichar_width().
-	* src/vte.c: remove old xft2/xft1/pango/pangox/core drawing code,
-	making draw the only supported method.  Remove most dependencies on
-	gdkx and Xlib, except for root pixmap ID watching.
-	* src/vtedraw.c: only use pangox, xft if X_DISPLAY_MISSING is not
-	defined.
-	* src/vtedraw.c, src/vtedraw.h: add get_using_fontconfig() method.
-	* src/vte.c(vte_terminal_get_using_xft): use
-	_vte_draw_get_using_fontconfig(), which is what apps really want to
-	know when they call this function.
-	* src/vtegl.c: wrap in #ifndef X_DISPLAY_MISSING.
-	* src/vtepangox.c: wrap in #ifndef X_DISPLAY_MISSING.
-	* src/vtexft.c: wrap in #ifndef X_DISPLAY_MISSING.
-	* src/vteglyph.c(_vte_glyph_cache_set_description): use horizontal
-	advance instead of bitmap width when calculating display widths.
-	Rename to _vte_glyph_cache_set_font_description.
-
-2003-04-09 nalin
-	* src/vte.c: add back some variables which are used after all.
-
-2003-04-09 nalin
-	* configure.in: add specific checks for PangoX and glX.
-	* src/vteft2.c, src/vteft2.h: add drawing method using freetype and
-	GdkRGB.
-	* src/vteglyph.c, src/vteglyph.h: add.
-	* src/vtepangox.c, src/vtepangox.h: add drawing method using PangoX.
-	* src/vtergb.c, src/vtergb.h: add.
-	* src/vtegl.c, src/vtegl.h: add placeholder drawing method using
-	freetype and glX.
-	* src/Makefile.am: add newly-added source files to libvte.la target.
-	* src/vtedraw.c, src/vtedraw.h: add get_visual and get_colormap
-	methods so that drawing methods can override the default visual and
-	colormap.  Rename get_text_base() to get_text_ascent(), which is more
-	correct.  Remove scroll(), which would just wrap gdk_window_scroll().
-	* src/vte.c: fix logic for choosing alternate render methods when
-	VTE_USE_XFT is "0".
-	* src/vteapp.c: add -- option to stop parsing options with getopt.
-	* src/vtefc.c: fix incorrect DPI read due to type mismatch (#109513).
-
-2003-03-31  Laurent Dhima  
-
-	* configure.in: Added "sq" to ALL_LINGUAS.
-	 
-2003-03-26 nalin
-	* src/Makefile.am: specify AM_CFLAGS and AM_LDFLAGS instead of CFLAGS
-	and LDFLAGS so that automake 1.7 doesn't kick us to the curb
-
-2003-03-13  Christian Rose  
-
-	* configure.in: Added "ml" to ALL_LINGUAS.
-
-2003-03-07 nalin	
-	* src/vte.c(vte_terminal_paint): adjust coordinates for the border when
-	clearing rectangles.
-	* src/vteskel.c, src/vteskel.h: add.
-	* src/vtedraw.c: use the skeleton drawing code.
-2003-03-07 nalin	
-	* src/vte.c(vte_terminal_visibility_notify): watch for Visibility
-	events.
-	* src/vte.c(vte_invalidate_cells,vte_invalidate_all): don't synthesize
-	an expose event if we're fully obscured, that's just silly.
-
-2003-03-06 nalin	
-	* src/vte.c, src/vte.h(vte_terminal_set_background_tint_color): take a
-	const GdkColor* instead of a non-const color.
-
-2003-03-06 nalin	
-	* python/vte.defs: regenerate.
-	* python/vte.override: update for vte_char_attributes rename.
-
-2003-03-06 nalin	
-	* src/vte.c, src/vte.h, src/vteaccess.c: rename struct
-	vte_char_attributes to VteCharAttributes, fixup some docs.
-	* doc/reference: finish up docs.
-
-2003-03-05 nalin	
-	* vte.pc.in: add FT2_LIBS and FT2_CFLAGS to our libs and cflags.  Add
-	xft >= 2.0 and fontconfig as hard requirements.
-
-2003-03-05 nalin	
-	* src/vtedraw.c: don't spit out which rendering method we're using
-	except in debug mode.
-
-2003-03-05 nalin	
-	* src/vtepango.c, src/vtexft.c: don't print "Bogus font." when we think
-	the font metrics are screwy.
-
-2003-03-05 nalin	
-	* configure.in: require Xft2 and fontconfig, drop Xft1.  Require
-	freetype2.
-	* src/Makefile.am, src/xticker.c: add xticker, useless but interesting.
-	* src/vte.c, src/vte.h: add vte_terminal_set_scroll_background() to
-	enable background scrolling (where supported by the drawing code).
-	* src/vteapp.c: set the tinting color to the default background color
-	to see what that's like.  Add -s option to toggle scrolling backgrounds.
-	* src/vtefc.c, src/vtefc.h: add.  For converting PangoFontDescriptions
-	to sorted lists of FcPatterns suitable for passing to XftFontOpenPattern
-	or FT_New_Face.
-	* src/vtedraw.c, src/vtedraw.h: add.  New drawing layer.
-	* src/vtepango.c, src/vtepango.h: add.  Drawing layer using Pango.
-	* src/vtexft.c, src/vtexft.h: add.  Drawing layer using Xft2.
-	* src/vte.c: add render type VteRenderDraw for transitional period in
-	preparation for nuking other drawing code.  Merge HAVE_XFT bits into
-	HAVE_XFT2 areas.  Nuke Xft1-specific stuff.  Move drawing of lines
-	and rectangles to dedicated functions.  Always call vte_unichar_width()
-	instead of g_unichar_iswide().
-
-2003-03-04 nalin	
-	* src/vte.c(vte_sequence_handler_set_title_internal): fix swap of
-	one variable for another which prevented stripping of control chars,
-	spotted by Nam SungHyun.
-
-2003-03-04 nalin	
-	* src/vte.c(vte_terminal_insert_char): wrap properly when a scrolling
-	region is set (#107559).
-
-2003-02-28  Takeshi AIHANA 
-
-	* po/ja.po: Added Japanese translations from gnome-2-2.
-
-2003-02-26 nalin
-	* src/iso2022.c(_vte_iso2022_substitute,_vte_iso2022_substitute_single):
-	force characters substituted through the ACS map to have width of 1.
-
-2003-02-26 nalin
-	* src/vte.c(vte_terminal_font_open_xft,vte_terminal_font_open_pango):
-	use an array of codepoints instead of a UTF-8 string so that we can
-	check for lack of font coverage in Xft fonts.
-
-2003-02-26 nalin
-	* src/vte.c: formatting fixups.
-
-2003-02-26 nalin
-	* src/vte.c(vte_terminal_font_open_xft,vte_terminal_font_open_pango):
-	patch from Jungshik Shin for detecting and handling fonts where ASCII
-	characters are double-width (#106618)
-
-2003-02-26  Taneem Ahmed  
-
-	* configure.in:  Added "bn" to ALL_LINGUAS.
-
-2003-02-25 nalin
-	* src/vteapp.c(main): take a shot at implementing xconsole-like
-	functionality when started with the -C flag: we open /dev/console and
-	TIOCCONS it, and just feed data to the widget until we lose ownership
-	of the MIT_CONSOLE_$(hostname) clipboard.
-
-2003-02-25 Samúel Jón Gunnarsson 
-
-	* configure.in: added "is" to ALL_LINGUAS.
-
-2003-02-24 nalin
-	* src/vte.c(vte_sequence_handler_window_manipulation): don't report the
-	user-settable title and icon strings to applications, based on H D
-	Moore's "Terminal Emulator Security Issues" (CAN-2003-0070).
-	* src/vte.c(vte_sequence_handler_set_title_internal): strip out control
-	characters just to be on the safe side.
-
-2003-02-24 nalin
-	* src/vte.c(vte_sequence_handler_decset_internal): home the cursor when
-	we switch to the alternate screen (#105075).
-
-2003-02-23  Duarte Loreto 
-
-        * configure.in: Added "pt" to ALL_LINGUAS.
-
-2003-02-21  Metin Amiroff  
-
-	* configure.in:  Added az to ALL_LINGUAS.
-
-2003-02-20 nalin
-	* src/keymap.c(_vte_keymap_map): in debug mode, skip coverage assertions
-	for specific keys (GDK_2 - GDK_8).
-	* src/keymap.c: remove unshifted entries for GDK_2 - GDK_8 (#106667)
-
-2003-02-20 nalin
-	* src/vte.c(vte_terminal_im_commit,vte_terminal_paste_cb): stop
-	gratuitously resetting the IM context.
-	* src/vte.c(vte_terminal_process_incoming): correctly determine when
-	we have an IM context -- it should be iff we're realized.
-	* src/vte.c(vte_terminal_key_press/release): only filter keypresses
-	through the IM context if we're realized, otherwise it doesn't exist.
-
-2003-02-20 nalin
-	* src/vte.c(vte_terminal_paint): reverse that last change -- don't
-	always assume proportional text.
-	* src/vte.c(vte_sequence_handler_ta): eliminate dead code.
-
-2003-02-20 nalin
-	* src/vte.c(vte_terminal_draw_row): move the initial drawing x left
-	whenever we back up to a previous cell to avoid drawing fragments.
-	* src/vte.c(vte_terminal_paint): always assume non-monospaced text,
-	because the "missing glyph" glyph consistently looks screwy otherwise.
-
-2003-02-20 nalin
-	* src/vte.c(vte_terminal_feed_child): don't reset the input method
-	here -- it may be in the middle of something (Red Hat #81542).
-	* src/vte.c(vte_terminal_im_commit): reset the input method when we
-	get text committed (Red Hat #81542).
-
-2003-02-19 nalin
-	* src/vte.c(vte_terminal_focus_in,vte_terminal_focus_out): if we're not
-	currently realized, don't try to tell our IM context that our focus
-	state changed, because we don't have one.  While we're at it, it's
-	silly to try to force the cursor to be drawn when we're not realized,
-	either.
-	* src/vte.c(vte_terminal_background_update): disconnect self, just in
-	case we were called directly while still queued, which would otherwise
-	leak the source, leading to potential problems later (Red Hat #84368).
-
-2003-02-19 nalin
-	* src/vte.c(vte_terminal_scroll_window): use gdk_window_scroll if the
-	first row to be scrolled is the first visible row, not just if it's the
-	first row we ever saw (Red Hat #83472).
-
-2003-02-19 nalin
-	* src/vte.c(vte_terminal_button_press): grab input focus on button 1
-	press (#106573, Red Hat #84384).
-
-2003-02-19 nalin
-	* src/vte.c(vte_terminal_sequence_handler_bt): add missing chunk of
-	fix for backtab.
-
-2003-02-19 nalin
-	* src/vte.c: turn on update debugging if VTE_DEBUG_FLAGS includes
-	"updates"
-
-2003-02-19 nalin
-	* src/keymap.c: add map entries for unmodified digit keypresses.
-
-2003-02-19 nalin
-	* src/vte.c(vte_terminal_match_add): use the default cursor by default,
-	so that we don't look weird to people who aren't used to the cursor
-	changing this way.
-	* configure.in: forcibly define VTE_DEBUG to "1" when we define it.
-
-2003-02-19 nalin
-	* src/vteaccess.c: emit focus-event signals from the accessible peer
-	when the widget receives focus-in and focus-out events, noted by
-	Marc Mulcahy.
-
-2003-02-18  Roozbeh Pournader  
-
-	* configure.in: Added "fa" to ALL_LINGUAS.
-
-2003-02-18 nalin
-	* src/vte.c, src/vte.h: add vte_terminal_match_set_cursor() (#105986).
-
-2003-02-18 nalin
-	* src/Makefile.am: add @LDFLAGS@ to all of the LDADD clauses, hopefully
-	fixing #105415.
-
-2003-02-17 nalin
-	* src/vte.c(vte_terminal_sequence_handler_cs): recognize and discard
-	invalid arguments (#57453).
-
-2003-02-17 nalin
-	* src/keymap.c: add map entries for Ctrl+digit keys (#106193, Red Hat
-	#83563).
-
-2003-02-17  Alessio Frusciante  
-
-	* configure.in: Added "it" (Italian) to ALL_LINGUAS.
-
-2003-02-16  Dmitry G. Mastrukov  
-
-	* configure.in: Added Belarusian to ALL_LINGUAS.
-
-2003-02-14 nalin
-	* src/vte.c(vte_terminal_sequence_handler_bt): fix to move back to the
-	leftmost column if there are no previous tabstops, exercised by
-	make menuconfig.
-
-2003-02-14 nalin
-	* src/vte.c(vte_terminal_background_update): handle pixbufs with
-	n_channels != 3.
-
-2003-02-14 nalin
-	* src/interpret.c: handle width masks now that we're encoding widths for
-	all characters.
-
-2003-02-14 nalin
-	* src/vte.c: more comments to keep myself from getting confused later.
-
-2003-02-13 nalin
-	* src/vte.c: change the coalescing timeout to 2ms.
-
-2003-02-13 nalin
-	* src/vte.c(vte_terminal_io_read): attempt to coalesce data received
-	within about 10ms to reduce load on the X server on systems where the
-	scheduler wakes us up as soon as we have a few bytes available.  Based
-	on a suggested fix by msw.
-	* src/vte.c(vte_terminal_io_read): never free buf, it's not a heap
-	variable any more.  Spotted by msw.
-
-2003-02-12 nalin
-        * src/vte.c(vte_terminal_finalize): close fd leak.
-        * src/vte.c(vte_terminal_fork_command): close potential fd leak.
-
-2003-02-12 nalin
-	* src/reflect.c(main): handle cases where the widget has no data and
-	returns NULL when we ask for it.
-
-2003-02-12 nalin
-	* src/reflect.c(main): do a complete read of the widget before we
-	start off in main to ensure we have accurate data.
-	* src/vteaccess.c(vte_terminal_accessible_update_private_data_if_needed):
-	only attempt to free the previous snapshot if it existed.
-
-2003-02-12 nalin
-	* src/reflect.c(main): connect to signals before any get emitted.
-	* src/vteaccess.c: use a GString to store snapshot text so that we
-	always have proper length information.
-
-2003-02-12 nalin
-	* src/reflect.c(text_changed_delete): spit out a warning if we receive
-	an out-of-range text_changed::delete signal.
-
-2003-02-11 nalin
-	* src/genwidths, src/uniwidths: add data for tracking ambiguous-width
-	Unicode characters.
-	* src/iso2022.c, src/iso2022.h: add _vte_iso2022_is_ambiguous() for
-	checking if a character is ambiguous, and _vte_iso2022_ambiguous_width()
-	for guessing how wide it should be based on the current locale.  Rename
-	_vte_iso2022_get/set_width to ...encoded_width to clarify the intent,
-	ditto for the related macros.
-	* src/table.c,src/trie.c: use renamed macros for reading encoded widths.
-	* src/iso2022.c(_vte_iso2022_substitute_single,_vte_iso2022_substitute):
-	handle ambiguous widths properly, and always encode a width.
-	* src/Makefile.am: use the default LDFLAGS, I think.
-	* src/vte.c,src/vte.h: add vte_terminal_set_background_tint_color().
-	* src/vte.c(vte_terminal_unrealize): unhook from background update
-	sources, because we may not have a display after that.
-	* src/vte.c(vte_terminal_size_allocate): only queue a background update
-	if we're in transparent mode and either we've been moved or we have no
-	background yet.  If our size changed, force a repaint.
-	* src/vte.c(vte_sequence_handler_window_manipulation): snip off the
-	padding along the edges when responding to requests for the window size
-	and location -- apps have no way to query it.
-	* src/vte.c(vte_terminal_get_text_range): skip over fragments properly.
-	* src/vte.c(vte_terminal_draw_row): skip over fragments properly.
-	* src/vte.c(vte_unichar_width): rework in terms of the width checking
-	in the iso2022 module for consistency.
-
-2003-02-06  Christian Rose  
-
-	* configure.in: Added "id" to ALL_LINGUAS.
-
-2003-02-03 nalin
-	* src/vte.c(vte_terminal_size_allocate): suppress background updates if
-	we haven't moved and the background image already exists (#104868).
-
-2003-01-31 nalin
-	* src/vte.c(vte_terminal_get_accessible): keep a weak pointer to the
-	accessible peer instead of a static pointer (part of #104909).
-	* src/vte.c(vte_terminal_finalize): if the accessible peer still exists,
-	remove its weak pointer before attempting to unref it.
-	* src/vte.c: rename accessible_exists member to accessible_emit, which
-	more accurately reflects its purpose.
-	* src/vteaccess.c(vte_terminal_accessible_update_private_data_if_needed):
-	always update the cursor position, in case text was added or removed
-	without the cursor itself moving.
-	* src/vteaccess.c(vte_terminal_accessible_get_text_somewhere): don't
-	emit a warning when the caller attempts to read the Nth character when
-	we have 0 to N-1, just return an empty string.
-	* src/vteaccess.c(vte_terminal_accessible_new): make the terminal peer
-	a weak pointer (part of #104909).
-	* src/vteaccess.c(vte_terminal_accessible_finalize): if the terminal
-	peer is not NULL, disconnect it as a weak pointer and don't bother
-	disconnecting from its signals (part of #104909).  Add a debug message.
-	* src/vteaccess.c(vte_terminal_accessible_text_finalize):  Add a debug
-	message.
-
-2003-01-31 nalin
-	* src/vte.c(vte_unichar_isgraphic): rename to vte_unichar_is_graphic,
-	to match conventions used elsewhere.
-	* src/vte.c(vte_unichar_is_graphic): count 0xa3, 0x3c0, 0x2592,
-	0x25ae, 0x25c6 as graphic characters.
-	* src/iso2022.txt: add sample text using character set 0.
-
-2003-01-30  Fatih Demir 
-
-	* configure.in: Added "tr" (Turkish) to the languages' list.
-
-2003-01-30 nalin	
-	* MESSAGE-OF-DOOM: added, for scaring people away.
-	* vte.spec: bump to 0.11.x for development.
-	* src/mev.c(main): reset modes before quitting.
-	* src/vte.c(vte_terminal_button_press): don't always extend selection
-	when not in event mode.
-
-2003-01-28 nalin	
-	* configure.in: make debugging support an explicit option to configure.
-	don't automatically enable debugging in maintainer mode.
-
-2003-01-27 nalin	
-	* src/vte.c(vte_terminal_realize): create the "invisible" cursor using
-	a bitmap instead of a pixmap, changing it from a 1x1 black square to
-	nothing.
-
-2003-01-27 nalin	
-	* src/vte.c(vte_terminal_decset_internal): make the various mouse event
-	modes mutually-exclusive, because apps expect them to be (#104395).
-	* src/vte.c: add a prototype for vte_terminal_background_update before
-	it is used to silence a compiler warning.
-
-2003-01-27 nalin	
-	* src/vte.c(vte_terminal_realize): force a background update immediately
-	when we realize instead of queuing it up (#104381).
-
-2003-01-26  Daniel Yacob 
-
-	* configure.in: Added "am" to ALL_LINGUAS.
-
-2003-01-24 nalin
-	* src/vte.c(vte_terminal_background_update): fix declaration order
-	(#13795).
-
-2003-01-24  Nam SungHyun  
-
-	* configure.in: Added "ko" to ALL_LINGUAS.
-
-2003-01-23 nalin
-	* src/caps.c, src/vte.c: recognize and ignore attempts to set text
-	properties 21 and 2L, whatever those are (possible workaround #104154).
-
-2003-01-23 nalin
-	* src/iso2022.c: accept "1" and "2" as aliases for "B" (#104257).
-
-2003-01-23 nalin
-	* configure.in: check for curses if we don't have ncurses (the order
-	is ncurses, curses, libtermcap), as Solaris has neither ncurses nor
-	libtermcap.  Reported by Brian Cameron.
-	* src/keymap.c, src/ssfe.c: accept either curses or ncurses as
-	equivalent.
-
-2003-01-22 nalin
-	* src/Makefile.am, src/mev.c: add mev.
-	* src/vte.c(vte_sequence_handler_clear_screen): don't home the cursor
-	automatically.
-	* src/vte.c(vte_terminal_button_pressed): fix sense of shift overriding
-	event mode.  Ignore double- and triple-click in event mode.
-	* src/vte.c(vte_terminal_scroll): in event mode, send button release
-	events to the terminal if it's expecting them.
-	* src/vte.c(vte_terminal_send_mouse_button_internal): clamp coordinates
-	to existing cells.
-	* src/vte.c(vte_terminal_maybe_send_mouse_drag): compare integral cell
-	locations, not floating point, when choosing whether or not to drop
-	events in cell tracking mode.  Don't lose the modifiers.
-	* src/vte.c(vte_terminal_motion_notify): don't autoscroll in events
-	mode.
-
-2003-01-22 nalin
-	* src/caps.c: accept OSC{number};{string}ST as set-text-parameters,
-	per XTerm docs (part of #104154).
-	* src/keymap.c: revert change to prepend "1;" to keys with
-	modifiers (#104139).
-
-2003-01-22  Christian Rose  
-
-	* configure.in: Added "mn" to ALL_LINGUAS.
-
-2003-01-21 nalin
-	* src/vte.c: streamline background images and transparency handling,
-	should use less memory now.
-
-2003-01-20 nalin
-	* src/reflect.c: add some debugging messages if REFLECT_VERBOSE is
-	set in the environment.
-
-2003-01-20 nalin
-	* src/Makefile.am, src/reflect.c: add reflect-text-view, for testing
-	with GtkTextView for sanity's sake.
-
-2003-01-20 nalin
-	* src/reflect.c: account for atk_text_get_text() being 0-clean.
-
-2003-01-20 nalin
-	* configure.in, src/Makefile.am, src/reflect.c: try to build reflect
-	with both vte and libzvt, building a useless binary if libzvt isn't
-	available.
-
-2003-01-20 nalin
-	* src/vte.c: colors 90-97 and 100-107 are bold colors, noted and patched
-	by Matthijs Melchior (#103874).
-
-2003-01-19  He Qiangqiang  
-
-	* configure.in: Added "zh_CN" (Simplified Chinese) to ALL_LINGUAS.
-
-2003-01-19  Marius Andreiana 
-
-	* configure.in: added 'ro' to ALL_LINGUAS
-
-2003-01-18 nalin
-	* src/vteaccess.c(update_private_data_if_needed): if the caret is past
-	the end of the text, count unichars properly.  Compute the caret
-	location correctly.
-	* src/reflect.c: handle text-caret-moved signals and display the caret.
-
-2003-01-18 nalin
-	* src/iso2022.c: update copyright dates.
-	* src/reflect.c: add.
-	* src/Makefile.am: add reflect (noinst).
-	* src/vteaccess.c(vte_terminal_accessible_get_text): always return a
-	string, even if it's zero-length.  Properly detect and handle requests
-	that go right up to the last byte.
-
-2003-01-18 Andras Timar  
-
-	* configure.in: Added "hu" to ALL_LINGUAS.
-
-2003-01-17 nalin
-	* src/vte.c(vte_terminal_set_size): emit a "text-modified" signal,
-	because what you see changes when you resize the terminal.
-
-2003-01-17 nalin
-	* src/vte.c(vte_terminal_paint): don't draw cursors below or above the
-	screen, correctly compute the clear area when drawing the cursor,
-	if we're ignoring padding in general because we're monospaced, also
-	ignore it when drawing the character under the cursor.
-	* src/vte.c(vte_terminal_io_read): eliminate dead code.
-
-2003-01-17 nalin
-	* src/keymap.c(_vte_keymap_map): if we don't find an entry for the
-	requested key, and the terminal type is "xterm", retry using
-	"xterm-xfree86", possible fix for #103713.
-	* src/vte.c(vte_terminal_draw_row): fix handling of items with
-	width != 1 when computing runs.
-
-2003-01-17 nalin
-	* src/iso2022.c: fix boneheaded "config.h" instead of "../config.h"
-	include, pointed out by Dan Mills and Brian Cameron.
-
-2003-01-16 nalin
-	* configure.in: fix test for whether or not we need to check for termcap
-	* src/Makefile.am: override default includes to not prepend "." to the
-	include path, so that we can include the system  properly
-	* src/keymap.c: define the ncurses scratch buffer for use when we're
-	using termcap
-
-2003-01-16 nalin
-	* configure.in: actually disable attempts to build python bindings if
-	pygtk-2.0 isn't found (#103676)
-
-2003-01-14 nalin
-	* src/keymap.c(_vte_keymap_key_add_key_modifiers): if a key sequence
-	which needs modifiers doesn't have a numeric part, add "1" as the
-	numeric part before adding the modifiers.  Spotted by msw.
-
-2003-01-13 nalin
-	* src/ring.c, src/ring.h: add _vte_ring_insert_preserve(), which
-	scrolls lost items off the top instead of the bottom, as
-	_vte_ring_insert() does.
-	* src/slowcat.c (catfile): check that we didn't read an EOF before
-	attempting to write it.  Skip the more complicated checks and just
-	check that the file pointer isn't stdin before closing it.
-	* src/ssfe.c: cleanups.
-	* src/vte.c(vte_sequence_handler_sf): add lines to the scrollback area
-	when scrolling is restricted but the top line of the area is the
-	topmost visible line (Red Hat #75900).
-
-2003-01-13 nalin
-	* src/nativeecho.c, src/utf8echo.c: don't switch terminal modes before
-	or after echoing bytes -- doing so confuses me now.
-	* src/vte.c: make use of '?' to mark invalid data a compile-time define.
-	* src/vteaccess.c(vte_terminal_accessible_text_scrolled): properly
-	handle scrolling events with delta less than the window size (more
-	of #95901).
-	* src/vteaccess.c(vte_terminal_accessible_finalize): disconnect
-	from text-inserted, text-deleted, text-modified, text-scrolled,
-	cursor-moved, window-title-changed on finalize.
-	* src/vte.c(vte_terminal_key_press,vte_terminal_key_release,
-	vte_terminal_button_press,vte_terminal_button_release,
-	vte_terminal_motion_notify,vte_terminal_focus_in,vte_terminal_focus_out,
-	vte_terminal_scroll): track event modifiers in an object-local modifier
-	variable.
-	* src/vte.c(vte_terminal_key_press): always steal key events from the
-	input method if the meta key is down (#96006).  Don't munge the cursor
-	or keypad modes before passing them to the keymapping routines.  Stop
-	overriding the cursor mode on NumLock (doesn't appear to work as
-	documented in other terminals, needed to modify the keymap mode anyway
-	(#96364)).
-	* configure.in: define HAVE_XFT whenever HAVE_XFT2 is defined -- they're
-	more or less compatible (#103130).
-
-2003-01-10  Abel Cheung  
-
-	* configure.in: Added "zh_TW" to ALL_LINGUAS.
-
-2003-01-10  Dmitry G. Mastrukov  
-
-	* configure.in: Added Russian to ALL_LINGUAS.
-
-2003-01-09  nalin
-	* configure.in: disable the python bindings if we can't find python,
-	from Brian Cameron.
-
-2003-01-09  nalin
-	* src/vte.c: don't just skip reading data if selection is in progress --
-	we wedge if we do that (#101739).  Instead, temporarily stop reading
-	from the child pty.
-	* src/vte.c(vte_terminal_open_font_xft): if we get NULL when matching
-	fonts, use the desired pattern's name when displaying an error,
-	preventing a NULL dereference (#96769).
-	* configure.in: make building of python modules depend on configure
-	having been run with --enable-python. make --enable-python the default.
-	Fix an indentation error in the version check which chokes Python 2.2.2.
-	* src/vte.h, src/vte.c: add new signals to VteTerminalClass (NOTE: may
-	break ABI, so might as well add some padding)
-	* src/vteaccess.c: be more precise about locations in text_changed
-	signals (part of #95901)
-	* src/vte.c: get more selective about when we consider it necessary to
-	emit text-insert and text-delete events.
-
-2003-01-07  nalin
-	* src/vte.c(vte_terminal_key_press): Only suppress meta-sends-escape on
-	Backspace if backspace is mapped to the delete sequence. (#100635)
-
-2003-01-07  nalin
-	* src/vte.c(vte_terminal_setup_background): Use a lookup table
-	instead of a mess of floating point math when desaturating images.
-
-2003-01-06  nalin
-	* src/vte.c(vte_terminal_init): Add the periodic blinking refresh
-	with the normal timeout instead of 0 to avoid wedging when we get
-	created without focus.  Fix suggested by Dennis Haney (#102701).
-
-2003-01-06  nalin
-	* src/vte.c: Use a simple XftPatternGetString/GetDouble pair instead
-	of XftNameUnparse, which isn't in older versions of Xft (#101142).
-	* src/vte.c: Add a flag to VteTerminalPrivate which we can use to keep
-	track of modifications, particularly if they remove text, and toggle
-	it in several sequence handlers.
-	* src/vte.c(vte_terminal_process_incoming): Also emit the "contents
-	changed" signal when the modified flag is TRUE, not enough to fix
-	#95901, but at least making some forward progress.
-
-2003-01-05  Pauli Virtanen 
-
-	* configure.in (ALL_LINGUAS): Added "fi" (Finnish).
-
-2003-01-04  Stanislav Visnovsky  
-
-	* configure.in: (ALL_LINGUAS) Added sk (Slovak).
-	* po/sk.po: Added Slovak translation.
-
-2003-01-02  nalin
-	* configure.in: look for libncurses or libtermcap
-	* vte.pc.in: include other libraries (ncurses, termcap, socket,
-	whatever) in the list of libraries.
-	* src/keymap.c(_vte_keymap_map): for Home and End, consult libncurses
-	or libtermcap if we have no hard-wired mapping and there's none in the
-	termcap file.  Should fix #100472, even in cases where Home and End
-	vary wildly from what I've got on my box.
-	* src/keymap.c: rename cursor/fkey_normal to cursor/fkey_default,
-	which makes a little more sense.
-
-2003-01-02  Zbigniew Chyla  
-
-	* configure.in: (ALL_LINGUAS) Added pl (Polish).
-
-2002-12-22  Artis Trops  
-
-	* configure.in: Added Latvian (lv) to ALL_LINGUAS.
-
-2002-12-19  Yanko Kaneti 
-
-	* configure.in: (ALL_LINGUAS) Added Bulgarian (bg).
-
-2002-12-18  nalin
-	* configure.in: complain if Xft2 and Xft aren't found.
-	* src/vte.c (vte_terminal_paint): if we're not double-buffered, clear
-	the drawing area before we draw text.
-	* src/vteapp.c: add -2 to toggle double-buffering.
-
-2002-12-16  nalin
-	* src/vte.c (vte_terminal_key_press): wire Shift+Home/Shift+End to
-	scroll-to-top and scroll-to-bottom.
-
-2002-12-13  nalin
-	* src/buffer.c: add a short test program.
-	* src/iso2022.c: use hard values instead of GDK defines in the 0 map.
-	Add _vte_iso2022_substitute_single() for performing a single mapping
-	operation.
-	* src/vte.c: use _vte_iso2022_substitute_single() instead of a local
-	mapping table when mapping line-drawing charset data, simplifies	
-	maintenance of the mapping.
-
-2002-12-12  Pablo Saratxaga 
-	* configure.in: Added Catalan (ca), Spanish (es)
-	and Hebrew (he) to ALL_LINGUAS
-
-2002-12-11  nalin
-	* configure.in: define VTE_USE_GNOME_PTY_HELPER if use of the helper
-	is enabled at compile-time (enabled by default).
-	* src/iso2022.c(_vte_iso2022_substitute): force characters received in
-	the line-drawing map to have width = 1 (more #99603), so that we can
-	distinguish them from line-drawing characters received in eucXX, which
-	have width = 2.
-	* src/vte.c(vte_terminal_insert_char): when mapping from line-drawing
-	to gunichars, force a width of 1.
-	* src/vte.c(vte_terminal_process_incoming): extend the bounding box
-	for updates one cell further to the right, in case the cursor is in
-	a cell which contains a wide character.
-	* src/pty.c(_vte_pty_start_helper): spit out a warning if the helper
-	isn't installed.
-	* src/pty.c: don't compile in any gnome-pty-helper-specific code if
-	VTE_USE_GNOME_PTY_HELPER isn't defined.
-
-2002-12-10  nalin
-	* src/buffer.c, src/buffer.h: centralize buffer length sanity checks,
-	add some utility functions for stuffing things into buffers and pulling
-	them back out.
-	* src/debug.c, src/debug.h: add a lifecycle debug class, for tracking
-	down initialization order weirdness.
-	* src/pty.c: try to check that we can run the pty helper before
-	trying to run it, to avoid SIGPIPE failures when it's not installed.
-	* src/vte.c: never grab focus -- let the shell app deal with it.
-	Return TRUE from mouse motion and press/release events to keep them
-	from being passed up. (#101089)
-
-2002-12-09  nalin
-	* configure.in: add "uk" to the list of languages.
-	* src/vte.h: remove the alternate attribute bit -- it's no longer
-	meaningful.
-	* python/vte.override: remove the alternate attribute, add the
-	strikethrough attribute.
-	* src/vte.c (vte_terminal_insert_char): perform drawing character set
-	to Unicode mapping at insertion time if the alternate attribute is set,
-	otherwise discarding the attribute.  If the character being inserted is
-	a graphic character, force its width to 1 or 2 depending on the current
-	codeset (#99603).
-	* src/vte.c (xlfd_from_pango_font_description): take advantage of
-	XftXlfdParse if we were built with Xft, as it appears to handle family
-	aliases.
-	* src/vte.c (vte_terminal_draw_graphic): decide what to draw using
-	Unicode code points (instead of reverse mappings to drawing set), and
-	implement the double-thick versions of many of the existing glyphs.
-	Return a boolean indicating whether or not we drew something.
-	* src/vte.c (vte_terminal_draw_row): if vte_terminal_draw_graphic()
-	returns FALSE, try to draw the graphic character using the current font.
-	* src/vte.c (vte_terminal_paint): if vte_terminal_draw_graphic()
-	returns FALSE, try to draw the graphic character using the current font.
-	* src/caps.c: add the undocumented default 0 to the OSC set text
-	parameters sequence (#100468).
-
-2002-12-03  nalin
-	* README: updates.
-	* src/iso2022.c, src/iso2022.h: add a width mask for overriding widths
-	for ambiguous Unicode characters, and _vte_iso2022_get_width() for
-	reading the width, using unused bits in Unicode in a manner similar to
-	http://www.cl.cam.ac.uk/~mgk25/ucs/iso2022-wc.html
-	* src/table.c,src/trie.c: strip out iso2022 widths when extracting
-	parameters of control sequences.
-	* src/vte.c: heed iso2022 widths when inserting characters into the
-	screen buffer, but clear then before storing them so that copy and
-	paste will continue to work.
-	* src/matcher.c, src/matcher.h: add matcher, a wrapper for table and
-	trie, and move _vte_table_narrow_encoding and _vte_table_wide_encoding
-	to this module.
-
-2002-12-03  nalin
-	* src/pty.c: if TIOCSCTTY is defined, use it, even if it's redundant.
-
-2002-12-02  nalin
-	* po: update-po
-	* src/utf8echo.c: change the default from resetting to the terminal's
-	default encoding before exiting to leaving it alone.  Don't mess with
-	the terminal's encoding if stdout isn't connected to a terminal.
-	* src/nativeecho.c: add, for printing random bytes.
-
-2002-12-02  nalin
-	* src/vte.c: don't zero-fill rows, space-fill them.
-	* src/vte.c(vte_terminal_is_word_char): Don't just fail if the
-	word_chars array doesn't exist.
-
-2002-12-02  nalin
-	* acinclude.m4: add AC_CHECK_CC_OPT from ac-archive.
-	* configure.in: check for cfmakeraw, sys/select.h, compiler support
-	for -std= (#99698)
-	* doc/boxes.txt: change reference to online Docbook reference to the
-	charts at the Unicode web site.
-	* src/dumpkeys.c: make a best-effort at making a terminal raw on systems
-	where cfmakeraw() isn't available, from patch by Brian Cameron.  Wait
-	for up to 1/50 of a second for more bytes we'll consider to be part of
-	a sequence.
-	* src/pty.c(getpt): ensure that the new terminal is opened in non-
-	blocking mode.
-	* src/trie.c: use g_unichar_digit_value() instead of subtracting '0'.
-	* src/vte.c: don't declare the xft_textitem member on non-Xft2 systems,
-	because it uses an Xft2-specific type (#99685).
-	* src/vteapp.c: add $pkgdatadir/fonts to the font path for testing.
-
-2002-11-25  nalin
-	* src/vte.c: fix mapping of Unicode code chars 0x252c and 0x2534 which
-	incorrectly mixed them up (#99474).
-	* src/iso2022.c: fix mapping of 'v' and 'w' from special graphics to
-        Unicode, which masked the above bug.
-
-2002-11-25  nalin
-	* src/vte.c: fix cd() to clear using the current colors.
-
-2002-11-25  nalin
-	* termcaps/xterm: add ta back in -- it's not a key sequence.
-
-2002-11-25  nalin
-	* src/vte.c: fix cd() to clear to the right of the cursor on the current
-	line instead of the entire line (#98844).
-
-2002-11-25  nalin
-	* src/vte.c: add keyboard debug messages when we change keyboard modes.
-	* termcaps/xterm: remove kh definition.
-
-2002-11-25  nalin
-	* src/keymap.c: make keypad arrow keys follow cursor mode (#98604).
-
-2002-11-25  nalin
-	* src/keymap.c: sort out when we add modifiers to keys (#98094).  Fix
-	Alt+Tab.
-	* termcaps/xterm: remove ta definition.
-
-2002-11-25  nalin
-	* src/debug.c, src/debug.h: add keyboard debugging class.
-	* src/dumpkeys.c: refresh on Ctrl-L, reset on 'r'.
-	* src/keymap.c, src/keymap.h: add more setting combinations, and a
-	simplistic check for more complete coverage.
-	* src/vte.c: add debug messages for keyboard handling.  Improve
-	detection of invalid coordinates as a signal that no text is selected
-	or hilited (#98946).
-	* termcaps/xterm.baseline: add a baseline copy of xterm from my termcap,
-	so that I can diff it more easily.
-	* termcaps/xterm: remove key definitions -- xterm's way more complicated
-	than the capability strings suggest.
-	
-2002-11-22  nalin
-	* configure.in: incorporate more correct check for the right version of
-	gtk-doc (#99314).
-
-2002-11-15  Hasbullah BIn Pit 
-
-        * configure.in: Added "ms" to ALL_LINGUAS.
-
-2002-11-11  nalin
-	* src/vte.c: ensure that when we select by line, we include all of the
-	last line, even if it's past the edge of the screen.  Snap selection to
-	the beginning or end of a line when selecting lines which don't exist.
-	Only strip off whitespace if there's nothing but whitespace to the right
-	of the selection.  Chuck the non-wrapping selection code.
-
-2002-11-11  nalin
-	* src/vte.c: properly set the "selecting" flag again when we start
-	selection (#97923).
-
-2002-11-11  nalin
-	* src/vte.c: rework selection so that word- and line-based selection
-	can wrap like XTerm does (#97057,#97719).
-
-2002-11-07  nalin
-	* src/vte.h: doc fixes.
-	* src/dumpkeys.c: use the older alternate-screen decset value.
-	* src/vte.c: fixup screwups on extending selection (#97118).
-
-2002-11-05  nalin
-	* src/vte.c: handle end-of-line selection correctly.  Stop highlighting
-	selection on click, but don't lose it until new text is selected
-	(#97117).
-	* python/vte.override: fix binding for set_colors() to properly take a
-	list of colors for the palette (#97682).
-	* src/vte.c, src/vte.h: add increase-font-size and decrease-font-size
-	to allow mimicking XTerm's behavior on Shift/Control+KP_Add/KP_Subtract
-	* src/vteapp.c: handle increase-font-size and decrease-font-size.
-
-2002-11-05  Abi Brady  
-	* src/vte.c: Add and implement the strikethrough attribute.
-	Change underline to be drawn using the ascent, rather than
-	arbritarily putting it two lines above the bottom of the
- 	charcell - looks much better with large fonts.
-
-2002-11-04  nalin
-	* NEWS: be more verbose.
-	* README: add more items to the TODO list so that I don't forget them.
-	* src/vte.c: ifdef out some of the selection code.
-
-2002-10-30  nalin
-	* src/buffer.c, src/iso2022.c, src/vteaccess.c: add ident tags.
-	* src/vte.c: don't scroll-to-bottom if we're selecting (#97923).
-
-2002-10-30  nalin
-	* src/vteapp.c: implement iconify, deiconify, raise, lower, maximize,
-	restore, refresh, resize, and move signals.
-	* src/vte.c: add vte_terminal_match_remove().
-	* src/vte.c (vte_sequence_handler_cb): clear the current column in
-	addition to columns to the left, spotted by Sam Varshavchik.
-	* src/vte.c:  Use g_array_set_size() to clear arrays instead of
-	removing each element.  Properly initialize new columns with just the
-	default colors and not other attributes (#96978).
-	* src/vte.c (vte_sequence_handler_ta): revert to non-overwriting tabs,
-	otherwise we got occasional drawing artifacts.
-
-2002-10-30  Abi Brady  
-
-	* src/vte.c, src/vte.h : Support dim (halfbright) colours. All the
-	infrastructure for this was here already (apart from making sure bold
-	and half are mutually exclusive).  Add API set_color_dim, and let
-	set_colors take a palette of size 24.
-
-2002-10-29  Abi Brady  
-	* src/iso2022.c (_vte_iso2022_map_[J4]): Map to UCS, not keysyms.
-	(which differ > 0xff).
-
-2002-10-28  Abi Brady  
-	* src/vte.c: Add line-drawing representation for full block. Draw 
-	U+23BA-23BD. Fix drawing of U+23BD (scan line 9) and U+2592 
-	(checkerboard) to use bottom line of the charcell, not the top line of 
-	the one below.
-	* src/iso2022.c: Complete DEC Special Graphics to Unicode map.
-
-2002-10-25  nalin
-	* src/vte.c (vte_terminal_match_check_internal): snip off final
-	newlines when we're matching, they're usually not wanted.
-
-2002-10-24  nalin
-	* src/pty.c, src/pty.h: replace the simpler pty_open() function with
-	a logging version, adding the ability to specify a startup directory
-	(Red Hat #76529).
-	* src/vte.c, src/vte.h: replace the simpler fork_command() function with
-	a logging version, adding the ability to specify a startup directory
-	(Red Hat #76529).
-	* src/vteapp.c: modify call to handle new fork_command().
-	* python/vte.defs: update as above.
-	* python/vte.override: modify call to handle new fork_command(), adding
-	an optional "directory" argument.
-
-2002-10-23  nalin
-	* src/vte.c: refactor the selection code, cleaning up when selection is
-	cleared/started/extended (#95783).
-
-2002-10-22  nalin
-	* src/vte.c: rework how wide characters are stored to allow storing
-	tabs (#95958).
-
-2002-10-21  nalin
-	* python/vte.override: wrap vte_terminal_get_text() and
-	vte_terminal_get_text_range().  Based on patch from ha shao (#96230).
-
-2002-10-21  nalin
-	* src/vte.c, src/vte.h: add a user pointer argument to get_text
-	callbacks (#96230).
-	* src/Makefile.am: bump shared library version because we changed
-	a public function's signature.  Take the opportunity to replace padding
-	fields which had previously been used up.
-
-2002-10-21  jacob berkman  
-	* src/Makefile.am (EXTRA_DIST): include decset, osc, and window
-
-2002-10-18 nalin
-	* src/iso2022.c: use character constants instead of hex constants.
-	* src/iso2022.txt: add more illustrations.
-	* src/decset: scriptlet to save some typing.
-	* src/vte.c: zero-terminate window and icon title strings again.
-	* src/decset, src/osc, src/window: add.
-
-2002-10-18 nalin
-	* src/keymap.c: add a mapping for the escape key.
-
-2002-10-18 nalin
-	* src/vte.c: implement decset 42 (enable/disable NRC processing), but
-	enable it by default.  Implement decset 44 (margin bell).
-	* src/vte.c: do not trust the event->string.  Use gdk_keyval_to_unicode
-	and the built-in keymapping to cope with the weirdness.  Extend the
-	range of characters we controlify from 0x40-0x60 to 0x40-0x7f so that
-	lower-case ascii chars controlify (not a word, I know).
-	* src/keymap.c: add map entries for GDK_Return and GDK_KP_Enter for
-	GDK_CONTROL_MASK = cr, normal = lf.
-
-2002-10-18 nalin
-	* src/vte.c: make sure that strings passed to a commit signal are zero-
-	terminated (#96131).
-	* python/Makefile.am: install the module in site-packages instead of a
-	subdirectory, which doesn't work on my system.
-
-2002-10-17 nalin
-	* src/vte.c: remove vte_terminal_update_scroll_delta, which only did
-	things vte_terminal_adjust_adjustments already did and was only called
-	immediately after.  Fill newly-added lines with the current attributes
-	if the current background isn't the default color (Red Hat #73853).
-	Implement ignored DECSET settings, so that we don't mistakenly complain
-	about settings not being implemented yet when we actually just want to
-	ignore them.
-	* vte.spec: 0.9.2
-
-2002-10-17 nalin
-	* src/vte.c: force the first cursor redraw after focus-in to always be
-	in the foreground color (Red Hat #75908).
-
-2002-10-17 nalin
-	* src/vte.c (vte_terminal_insert_char): force invalidation mode if
-	we're in insert mode to get the entire line redrawn.  Spotted by msw.
-
-2002-10-17 nalin
-	* configure.in: clean up tests for wint_t.  Patch from Brian Cameron.
-
-2002-10-17 nalin
-	* src/pty.c: close a possible race on systems where pty initialization
-	requires more than just opening the pty (for example, Solaris).  Spotted
-	by Brian Cameron.
-	* src/utf8echo.c: don't reset to iso-8859-1 unless -r is used.
-
-2002-10-16 nalin
-	* src/vte.c: remove a bogus assertion for a case which we were already
-	handling a little further down (incorrectly triggered by autowrap).
-
-2002-10-16 nalin
-	* src/vte.c: adjust our adjustments whenever a line might scroll off
-	the top of the buffer.  Fix computation of the new insertion delta to
-	ensure that it never goes below the scroll delta, which should fix the
-	resizing crashes (#94509, #95187, Red Hat #75871), and add some debug
-	assertions to verify this.
-	* configure.in, python/Makefile.am: build the python bindings as a
-	library, not a binary with wacky ldflags.
-
-2002-10-15 nalin
-	* src/vte.c: don't try to close the pty at finalize time if we didn't
-	open it.  Patch from ha shao.
-	* src/keymap.c, src/keymap.h: move the addition of modifiers into a
-	separate function.  Add the function key strings from terminfo for
-	fkey_sun and fkey_hp cases.  Make control+F1 = F13 only in vt220 mode.
-	* src/vte.c: apply modifiers to function keys in normal and legacy
-	modes.
-
-2002-10-14 nalin
-	* src/vte.c: add super-bogus bold text mode (Red Hat #74779).
-
-2002-10-14 nalin
-	* src/caps.c: recognize CSI-r (with no arguments) as resetting the
-	scrolling region in XTerm emulation (Red Hat #75902).
-
-2002-10-14 nalin
-	* src/keymap.c: add mappings for GDK_Page_Up and GDK_Page_Down,
-	missed in the conversion.
-	* src/vte.c: steal GDK_KP_{Add,Subtract,Multiply,Divide} from the
-	input methods (Red Hat #75207).
-
-2002-10-14 nalin
-	* configure.in: more $pkglibdir -> $libexecdir fixing.
-	* doc/Makefile.am: add rules for generating ps and text versions of the
-	ctlseqs docs.
-	* doc/reference/tmpl/vte.sgml: add snippet for "commit".
-	* python/python/vte.defs: update to add a binding for
-	vte_terminal_fork_logged_command().
-	* src/buffer.h: add a warning comment that these are private interfaces.
-	Wrap declarations in G_BEGIN_DECLS/G_END_DECLS.
-	* src/caps.h: add macros for the SS2/SS3 sequences.
-	* src/marshal.list: add a marshaller for the "commit" signal.
-	* src/keymap.c, src/keymap.h: move the getting-more-convoluted
-	keypress-handling code to a shell that parses tables of static info.
-	* src/vte.c: use the keymap for most non-printable keys.  Add a "commit"
-	signal to allow an app to just use the terminal for displaying data and
-	grabbing input (missing functionality noted by ha shao).  Obey the
-	application's desired meta-sends-escape setting.  Recognize HP function
-	key mode.  Recognize and handle legacy XTerm function key mode.  Force
-	a redraw if the child application tries to switch to 80/132 columns,
-	even though we don't usually let them succeed.  Don't try to send
-	keystrokes to the child pty when there is no child pty.  Don't convert
-	final whitespace to newlines when copying text (Red Hat #74611).
-	* python/cat.py: test program for running without a command.
-	* termcaps/xterm: change the definitions for ku/kd/kl/kr to match
-	XTerm in normal cursor mode instead of application cursor mode.
-
-2002-10-11 nalin
-	* src/vte.c: properly distinguish cursor key mode and keypad key mode,
-	obey application mode for cursor keys (#92941).
-	* src/pty.c: reset signal handlers before exec() (Red Hat #75341).
-
-2002-10-11 nalin
-	* src/trie.c: change the typedef of wint_t here to match vte.c (now
-	a gunichar instead of a long).  Spotted by Brian Cameron.
-
-2002-10-11 Brian Cameron 
-	* configure.in: Changed to that wchar.h is included when checking for
-	wint_t on Solaris.  This was needed because on Solaris wint_t is defined
-	to be a long, and in vte.c its definition was recently changed to be a
-	gunichar.  This caused the compile to break on Solaris.
-
-2002-10-10 nalin
-	* configure.in, src/pty.c, gnome-pty-helper/Makefile.am: fix the bits
-	I missed when fixing #95085.
-
-2002-10-10 nalin
-	* src/vteapp.c, python/vte-demo.py: allow specifying the scrollback
-	buffer size.
-	* src/vte.c: if we don't have wint_t, typedef wint_t as a gunichar,
-	not a long.
-
-2002-10-09 nalin
-	* src/buffer.c, src/buffer.h: add.
-	* src/interpret.c, src/vte.c: use _vte_buffer structures instead of
-	char arrays with separate lengths.  Use a scratch buffer for holding
-	the results of conversions.
-	* src/vte.c: separate the pango and pangox drawing paths so that they're
-	easier to tweak and compare to each other.
-	* src/vte.c: ditch the smooth scrolling change, which won't work right
-	anyway (expose events don't get processed until after we finish
-	processing a chunk of data unless we explicitly request it, so using a
-	bbox is both simpler and faster).  Use a mask when creating the cursor
-	we use for hiding the cursor.
-
-2002-10-09 nalin
-	* vte.spec, gnome-pty-helper/Makefile.am: install gnome-pty-helper into
-	the libexecdir, not pkglibdir (#95085).
-	* src/vte.c: obey smooth/jump scrolling options, default is jump scroll.
-
-Mon Oct  7 14:53:12 2002  Owen Taylor  
-	* src/vte.c (vte_font_match): Fix over-aggressive 
-	Xft => Fc conversion - need to call XftDefaultSubstitute to pick up Xft
-	X resources, not FcDefaultSubstitute.
-
-2002-10-01  Stanislav Brabec  
-
-	* configure.in: Added cs to ALL_LINGUAS.
-
-2002-09-24 nalin
-	* src/vte.c(vte_terminal_set_word_chars,vte_terminal_is_word_char):
-	if the list of word characters is NULL or zero-length, try to guess
-	with (g_unichar_isgraph() && !g_unichar_ispunct()), which seems to
-	produce reasonable results (#77134).
-
-2002-09-24 nalin
-	* gnome-pty-helper/acinclude.m4: Fix HAVE_UT_UT_TV for cases where
-	the static initializer might not work right (#93774, patch from
-	Kalpesh Shah).
-
-2002-09-24 nalin
-	* README, gnome-pty-helper/README:  Doc fixups (mention gnome-terminal
-	instead of profterm, note the proper permissions for gnome-pty-helper,
-	#84505).
-
-2002-09-20 nalin
-	* src/ring.c: Fix a ring-buffer manipulation bug (Red Hat #74290) which
-	might cause a new item to be inserted in the wrong location.
-
-2002-09-19 nalin
-	* src/interpret.c: Munge input data the way the terminal does so that
-	conversion failures don't wedge us.
-
-2002-09-19 Brian Cameron 
-	* src/vte.c: Backed out scrolldelay patches from 09-17 and 09-18 at
-	Nalin's request.  Left in the patch which allows programs which 
-	update the screen non-linearly like lynx to work properly.
-
-2002-09-18 Brian Cameron 
-	* src/vte.c: Corrected a problem with yesterday's patch.  I am now
-	properly calling g_source_remove on the scroll_delay timeout
-	function.  This prevents VTE from core dumping if you start up
-	more than one VTE gnome-terminal and exit from one of them.  Also
-	made the vte_scroll_timeout function a little cleaner by using
-	the VTE_IS_TERMINAL macro.
-
-2002-09-17 Brian Cameron 
-	* src/vte.c: Fixed bug with my 09/11 speedup fix which caused programs
-	that update the screen non-linearly like lynx to update incorrectly.
-	Also included a speed improvement which delays the scroll-down for
-	70ms.  Too fast to be noticeable to the user, but it speeds up VTE
-	greatly.
-
-2002-09-13 nalin
-	* src/pty.c: Fix typo which broke builds on systems where MSG_NOSIGNAL
-	is defined.
-
-2002-09-12 Brian Cameron 
-	* configure.in : Added -lsocket to LIBS if socket is in libsocket,
-	so VTE will compile on Solaris.
-
-2002-09-12  jacob berkman  
-
-	* src/pty.c: only use MSG_NOSIGNAL if it's defined
-
-	* gnome-pty-helper/gnome-pty-helper.c (struct pty_info): remove
-	master_fd and slave_fd fields
-	(shutdown_pty): don't close master/slave fd's here...
-	(pty_add): don't take master/slave fd args
-	(open_ptys): ...close master/slave fd's right after passing them
-
-	this fixes a hang after closing a window on os x, not sure why...
-
-	* gnome-pty-helper/Makefile.am (install-exec-hook): remove
-	trailing / after $DESTDIR
-
-	* configure.in: AC_CHECK_FUNC() doesn't do AC_DEFINE(HAVE_FOO), so
-	do that for socket() and socketpair() if they are found
-
-2002-09-12 nalin
-	* src/vte.c(vte_invalidate_cursor_once): Remove the invalidate_cells
-	parameter, because the function is a big no-op if FALSE, in which case
-	we should just not call it instead. (vte_terminal_process_incoming):
-	refresh the right number of rows after processing a block of data.
-
-2002-09-12 Brian Cameron 
-	* src/vte.c Fixed minor error with my previous patch.  This just makes
-	a warning go away.
-  
-2002-09-11 nalin
-	* src/pty.c: Reorder definitions to avoid implicit declaration warnings.
-	* configure.in: Check for socketpair().  Check for socket() in libc
-	before poking around in libsocket.
-	* gnome-pty-helper/configure.in: Check for openpty() in libutil as well,
-	and do so before we check for other functions.
-
-2002-09-11 nalin
-	* configure.in, gnome-pty-helper/cofnigure.in: Test for sendmsg() with
-	AC_CHECK_FUNCS instead of AC_TRY_COMPILE.
-	* acconfig.h: Removed.
-	* src/pty.c: Formatting.
-
-2002-09-11 Brian Cameron 
-	* configure.in: Added check for socket library and SendMsg
-	check. 
-	* acconfig.h: Added this file with a HAVE_SENDMSG definition.
-	* gnome-pty-helper/configure.in: Added checks needed for the
-	source code, including the SendMsg check.
-	* src/pty.c: Corrected _vte_pty_pipe_open so it works on
-	Solaris.
-	*src/vte.c: Made some speed improvements so vte_invalidate_cells
-	is not called for every character in the while loop in 
-	vte_process_incoming, but only once when the while loop is done.
-
-2002-09-11 nalin
-	* gnome-pty-helper: Update from libzvt CVS.
-	* python/Makefile.am: Fix some automake breakage.
-
-2002-09-11 nalin
-	* python/Makefile.am: Fix my broken merge of Jacob's patch to make
-	inability to build python modules non-fatal.
-
-2002-09-11 nalin
-	* src/vte.c: Skip lookups for padding information if we're pretty sure
-	we're using a monospaced font.
-
-2002-09-10 nalin
-	* src/vte.c: Fix from Brian Cameron for uninitialized GError in
-	vte_wc_from_unichar().
-	* src/interpret.c, src/iso2022.c, src/pty.c, src/ring.h, src/table.c,
-	src/table.h, src/trie.c, src/vte.c, src/vteaccess.c: Signed/unsigned
-	int/size_t/gsize and pointer typecast warning fixes from Brian Cameron.
-	* src/vte.c: Avoid invalidating the cursor in the cursor blink
-	timeout unless we have focus.
-
-2002-09-10  Jacob Berkman  
-	* configure.in (ALL_LINGUAS: remove es until the file really gets
-	added.  also it wasn't added alphabetically
-
-2002-09-10 Pablo Gonzalo del Campo 
-
-        * configure.in: Added "es" to ALL_LINGUAS
-
-2002-09-10 nalin
-	* src/pty.c, src/pty.h: Add vte_pty_close() and
-	vte_pty_open_with_logging(), breaking the ABI.
-	* src/vte.c, src/vte.h: Add vte_terminal_fork_logged_command(), breaking
-	the ABI.
-	* gnome-pty-helper/*: Swallow the pty helper bits of gnome-libs,
-	but install into $pkglibdir instead of $sbindir so that existing
-	packages don't suddenly start breaking.
-	* src/termcap.c(_vte_termcap_find_string_length): Fix signature to
-	match the declaration in termcap.h.  From patch by Jacob Berkman.
-
-2002-09-06 nalin
-	* configure.in: Add $X_PRE_LIBS to the front of $X_LIBS, -lX11 and
-	$X_EXTRA_LIBS to the end of $X_LIBS.  Remove some cruftiness and set
-	CPPFLAGS when checking for Xft.  Check for the existence of wchar.h,
-	because it might not exist.  Use an automake conditional to make
-	compilation of the Python bindings non-critical.  From patch by
-	Jacob Berkman.
-	* src/pty.c: Silence compiler warning when exec() fails.  From patch
-	by Jacob Berkman.
-	* src/interpret.c, src/vte.c: Stop including langinfo.h since we don't
-	call nl_langinfo() any more.  Adapted from patch by Jacob Berkman.
-	* src/caps.c: Fill in a couple of missing initializers.
-	* src/vte.c, src/vte.h: Add accessor functions for use in language
-	bindings.
-	* python/vte.defs: Add defs for the new accessor functions.
-	* python/vte-demo.py: Add a scrollbar to the sample window, handle
-	more of the options the C version handles.  Stop expecting additional
-	arguments with a signal that doesn't include any.
-	* python/Makefile.am: We only have one target, so don't bother with
-	target-specific primaries if we can avoid it (#92252).
-	* vte.pc.in: Note build dependencies on ATK, Pango, and PangoX.
-
-2002-09-05 nalin
-	* src/caps.c, src/caps.h, src/debug.c, src/debug.h, src/interpret.c,
-	src/iso2022.c, src/iso2022.h, src/pty.c, src/reaper.c, src/ring.c,
-	src/ring.h, src/table.c, src/table.h, src/termcap.c, src/termcap.h,
-	src/trie.c, src/trie.h, src/utf8echo.c, src/vte.c, src/vteaccess.c,
-	src/vteapp.c: prefix library-internal interfaces with underscores so
-	that gtk-doc doesn't guess they're public.
-	* src/vte.c: return FALSE from focus-in/focus-out/expose handlers.
-
-2002-09-05 nalin
-	* src/caps.h, src/debug.h, src/iso2022.h, src/marshal.h, src/ring.h,
-	src/table.h, src/termcap.h, src/trie.h: add giant warnings about how
-	these headers define library-internal interfaces.
-	* vte.spec: 0.8.18
-
-2002-09-05 nalin
-	* docs/reference: first pass at writing documentation
-	* src/termcap.c: fix how'd-that-ever-work in vte_termcap_strip(), patch
-	from Brian Cameron.  Take \\e as an alias for \\E, which is already
-	an alias for Escape.
-	* src/vte.c(vte_terminal_get_cursor): Return an absolute cursor position
-	instead of a relative position.
-
-2002-09-04  jacob berkman  
-
-	* src/vte.c (vte_default_substitute): only compile the FC_HINT_STYLE
-	part if FC_HINT_STYLE is defined
-
-2002-09-04 nalin
-	* src/vte.c: Add missing  include for Xft2,
-	spotted by Jacob Berkman.
-
-2002-09-04 Brian Cameron 
-	* src/vte.c: Avoid double color deallocations with Xft.
-	* configure.in: Added stropts.h check for Solaris.
-	* src/vte.c: Do not send data to the slave if the length is zero.
-	Some shells on Solaris do not handle this well.
-	* src/pty.c: Added ptem/ldterm/ttcompat ioctls so VTE will work
-	on Solaris.
-
-2002-09-03 nalin
-	* src/vte.c: Avoid double color deallocations with Xft.
-
-2002-09-03 nalin
-	* src/vte.c: Handle color allocation failures with Xft better.
-	* src/vte.h: Clean up typedef declarations.
-
-2002-09-03 nalin
-	* src/marshal.list, src/reaper.c, src/reaper.h, src/vte.c: Modify the
-	child-exited signal to pass a signed int and an unmodified exit status,
-	allowing the callback to check for normal/abnormal exit status.
-
-2002-09-02 nalin
-	* src/vte.c: Don't send zero-length strings to the child -- it may not
-	be able to cope properly.  Spotted by Brian Cameron.
-
-2002-08-30 nalin
-	* src/vte.c: Handle cursor exposes correctly for multicolumn characters,
-	no matter which cell the cursor is in.  Fix autoscrolling boundary
-	checks for when allocation.y != 0.
-
-2002-08-30 nalin
-	* src/vte.c(vte_terminal_insert_char): Wrap correctly to avoid screwing
-	up multicolumn characters.
-
-2002-08-30 nalin
-	* src/vte.c: Get smarter about when it's necessary to start messing
-	with our adjustments (Red Hat #73091).  Change the way we clear the
-	screen so that all of the contents of the current screen become
-	scrollback data.
-
-2002-08-30 nalin
-	* src/vte.c: Register VteTerminalEraseBinding with GObject as an
-	enumerated type.
-	* python/vte.defs: Update.
-	* python/vte.overrides: Ignore vte_terminal_get_text_range().
-
-2002-08-30 nalin
-	* src/vte.c: Restore the focus-in/focus-out handlers -- the defaults
-	don't quite DTRT for us because they miss our im_context (#72946).  When
-	setting the cursor location for the input method, make the Y coordinate
-	relative to the window, not the scrollback buffer.  When resizing the
-	scrollback buffer, clamp the cursor to the set of possible locations,
-	not the visible locations.
-
-2002-08-30 nalin
-	* src/vte.c: Initialize the pty master fd to -1 to avoid spurious
-	window resizes on fd 0.
-	* src/debug.c, src/debug.h: Add a "pty" debug message class.
-
-2002-08-30 nalin
-	* src/iso2022.c: Fix a how'd-that-ever-work bug (not returning anything
-	from vte_iso2022_new()), spotted by Brian Cameron.
-	* configure.in: Use -Wall when building with gcc in maintainer mode.
-	* src/interpret.c, src/ring.h, src/table.c, src/trie.c, src/vte.c,
-	src/vteaccess.c: Warning cleanups.
-
-2002-08-29 nalin
-	* src/vte.c: Clean up bookkeeping for mouse autoscrolling and adjustment
-	change notifications.  Reset the scrolling and insertion deltas when
-	clearing the history.
-	* src/interpret.c: Don't dump data on incomplete conversion errors,
-	which we're going to retry anyway.
-	* src/iso2022.txt: Add iso-2022-kr examples (no workee -- uses GR).
-
-2002-08-28 nalin
-	* src/vte.c, src/vte.h: Add vte_terminal_copy_primary and
-	vte_terminal_paste_primary(), because I really want to let
-	profterm decide default values for key bindings.
-
-2002-08-28  Gustavo Noronha Silva  
-	* configure.in (ALL_LINGUAS): added pt_BR
-
-2002-08-27 nalin
-	* src/vte.c: Stop autoscrolling on button release.
-
-2002-08-27 nalin
-	* src/vte.c: When autoscrolling, clamp the new boundary to what the user
-	can see.
-
-2002-08-27 nalin
-	* src/vte.c: Implement autoscroll (Red Hat #70481).
-
-2002-08-27 nalin
-	* src/vte.c: Only perform cr-lf substitutions when pasting text, not
-	when inputting from a live user (Red Hat #72639).  Bind GDK_ISO_Left_Tab
-	to kB.  Formatting changes.
-	* termcaps/xterm: Bind kB to back-tab (Red Hat #70340).
-
-2002-08-27 nalin
-	* src/vte.c: Don't tamper with the scrolling offsets -- they're updated
-	when we handle adjustment_changed notifications.  Scroll instead of just
-	moving the cursor down when soft-wrapping to the next line.  Avoid
-	emitting adjustment_changed when only the value has changed, likewise
-	for the value and the other fields of the adjustment.
-
-2002-08-27 nalin
-	* src/vte.c: Keep cursor position and scrolling offsets from going
-	wonky when you resize, especially on the alternate screen.  Suppress
-	duplicate adjustment_changed notifications.
-	* src/vteapp.c: Set the MIN_SIZE geometry hints so that we can resize
-	to unreasonably-small dimensions.
-	* src/ring.c, src/ring.h: Add vte_ring_new_with_delta().
-
-2002-08-26 nalin
-	* src/vte.c: Add padding spaces after full lines as well -- spotted by
-	both notting and pjones.
-
-2002-08-26 nalin
-	* src/vte.c: Don't deadlock when substitution fails, spotted by msw.
-
-2002-08-26 nalin
-	* src/vte.c: If GDK_USE_XFT is set, check the value of GDK_USE_XFT, not
-	VTE_USE_XFT.  Spotted by hp.
-
-2002-08-25 nalin
-	* src/vte.c: Heed the reverse-video setting when painting character
-	cells again.  Make selection and matching coordinates global, fixing
-	the selecting-while-scrolling case.  Prevent overdraws into the padding
-	area on the right.
-
-2002-08-25 nalin
-	* src/vte.c: Make nd() move right but not wrap -- according to Strang
-	it's undefined, but xterm doesn't wrap it.  Separate do/DO from sf/SF
-	and up/UP from sr/SR, because the scrolling behavior is supposed to be
-	different.  Add support for decset/decreset 7 (wraparound mode) and
-	1051 (Sun keyboard).  Add support for DECALN.  Remove some type checks
-	from run-time which the compiler can catch with certainty.
-
-2002-08-25  Kjartan Maraas  
-	* configure.in: Added Norwegian (no) to ALL_LINGUAS.
-	
-2002-08-25  Pablo Saratxaga 
-	* configure.in: Added Vietnamese (vi) to ALL_LINGUAS
-
-2002-08-22 nalin
-	* src/caps.c: Bind ENQ to "return-terminal-status".
-	* src/iso2022.c: Fix an off-by-one which incorrectly triggered an
-	assertion.
-	* src/vte.c: Implement send-primary/secondary-device-attributes.  Bind
-	shift+insert to "paste PRIMARY".  Guard against NULL window/icon title
-	when telling the child app what they are.  Prevent DO(), up(), and UP()
-	from scrolling.
-
-2002-08-22 nalin
-	* src/vteapp.c: Set geometry hints using the initial font setup.
-2002-08-22 nalin
-	* src/vte.c, src/vte.h: Make use of the visible bell a separate option
-	from use of the audible bell, allowing both/neither to be used.  Open
-	fonts right away again -- profterm reads the metrics right after calling
-	set_font(), so we have to open fonts ASAP.  Rework the Xft/Pango/Xlib
-	decision code to be more consistent.  Watch for style changes and reset
-	our font to the new style's font when we're already using the old
-	style's font.
-2002-08-21 nalin
-	* src/iso2022.c(vte_iso2022_substitute): Take a vte_table as an
-	additional argument, and don't mess with text that's part of a control
-	sequence, even if it's in shifted-out text.
-	* src/table.c(vte_table_match): Speed up for the no-arguments-requested
-	case, which just became much more common.
-2002-08-21 nalin
-	* src/vte.c(vte_terminal_draw_rows): Cap the maximum number of
-	characters we draw in a single call to vte_terminal_draw_cells at a
-	reasonable number.
-2002-08-21 nalin
-	* src/table.c: Don't overwrite the original pattern pointers before
-	freeing the old value.
-	* src/vte.c: Use the same pango context whenever possible, to save on
-	PangoX startup time.
-2002-08-20 nalin
-	* src/vte.c: Unref the output channel one more time when we're done
-	sending data to the child.  Free the background data GDK property when
-	we're finished with it.  Don't retrieve the pango context when drawing
-	unless Xft has already been disabled.  Don't try to use the pango layout
-	to draw unless it's valid.  Don't try to use the XftDraw item to draw
-	unless it's valid.
-2002-08-20 nalin
-	* src/vte.c: Dispose of the updated substitution context properly when
-	processing blocks of input text.  Spotted by Arjan van de Ven.
-2002-08-20 nalin
-	* src/ring.c: Debug when rows get freed.
-	* src/vte.c: Maybe-release pango contexts after unreffing layouts which
-	refer to them.  Decide on how we want to draw fonts before deciding
-	which fonts to draw, to avoid spurious font loading.  Remove output tags
-	when the output tag's callback is about to return FALSE.
-2002-08-20 nalin
-	* src/vte.c: Don't leak the hintstyle and rgba settings.  Patch from
-	Arjan van de Ven.  Free PangoX contexts when we're done with them,
-	spotted by Arjan van de Ven.
-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 (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
-	the PangoX fontmap and when doing PangoX rendering.
-2002-08-19 nalin
-	* src/mkunitables.sh,src/unitable.*: Add.
-	* src/iso2022.c, src/iso2022.h: Use unitables.
-	* src/caps.c: Remove sequences for designating character sets.  Switch
-	to using a second passed-in buffer for storing results in case the
-	caller doesn't want substitutions done in-place.
-	* src/debug.c, src/debug.h: Add a substitution debug flag.
-	* src/interpret.c: Perform substitution.
-	* src/table.c, src/table.h: Use gssize instead of ssize_t.
-	* src/termcap.c, src/termcap.h: Use gssize instead of ssize_t.
-	* src/utf8echo.c: Use strtol, allowing users to specify code points in
-	hex format.
-2002-08-14 nalin
-	* src/vte.c(vte_terminal_configure_toplevel): repaint the entire window
-	to ensure that any overdraw area we're not paying attention to at least
-	gets cleared to the background.
-	* src/vte.c(vte_terminal_locale_encoding): don't try to second-guess
-	the local encoding, just use the current charset as returned by
-	g_get_charset().
-2002-08-14 nalin
-	* src/vte.c(vte_terminal_reset): drop pending incoming data on reset.
-	* src/vte.c: give reprocessing of pending input data a higher priority
-	than reading it from the child to prevent backlogs on corrupt or invalid
-	multibyte data from building up and whacking us exponentially.
-2002-08-13 nalin
-	* src/vte.c(vte_sequence_handler_delete_lines): initialize lines added
-	to the current default colors.  Spotted by jrb.
-	* src/vte.c(vte_terminal_set_font): don't try to pick up GTK Xft
-	settings unless we're using FontConfig.  Patch from otaylor.
-2002-08-11 nalin
-	* src/vte.c: reorder set/reset processing for decset so that 1049
-	properly represents the combination of 1047 and 1048 (#90027).
-2002-08-11 nalin
-	* src/caps.c: properly escape a sequence which had a bare '%' in it.
-2002-08-11 nalin
-	* src/vte.c: change Xft-related defaults match whichever version of GTK
-	we were built with (hopefully).
-2002-08-11 nalin
-	* src/vte.c: don't bother with cursor blinking or freezing/thawing
-	updates when the widget isn't realized.  Patch from Gustavo Giráldez.
-2002-08-08 nalin
-	* src/vte.c: take extra steps to make sure that the cursor doesn't go
-	back into negative scrollback space.
-2002-08-08 nalin
-	* src/vte.c(vte_terminal_invalidate_all): rewrite.
-2002-08-08 nalin
-	* src/vte.c(vte_terminal_paint,vte_terminal_draw_cells): fill in the
-	background color when drawing the cursor, even if it's going to end up
-	as the default background color, spotted by Peter Jones.  Draw the
-	cursor correctly if it's over a graphic character.
-2002-08-07 nalin
-	* src/vte.c(vte_terminal_draw_cells): once again, avoid drawing NULs.
-	* src/vte.c: add a small pad to each edge (#89048).
-	* src/vteapp.c: handle widget padding.
-2002-08-07 nalin
-	* src/interpret.c: look for $pkgdatadir/termcap/$TERM first, as the
-	widget does, before consulting /etc/termcap.
-	* src/ring.c(vte_ring_free): check for a non-NULL removal function
-	before calling it.
-	* src/vte.c(vte_terminal_key_press): add an option for doing
-	VT220-style or Sun/PC-style modified function keys.  Default to VT220
-	for now, though, pending feedback.
-	* src/vte.c(vte_terminal_reset): scroll to the bottom when resetting.
-2002-08-07 nalin
-	* src/vte.c(vte_terminal_draw_cells): don't trust XftDrawString32() to
-	advance linearly for monospaced fonts (#90164).
-
-2002-08-07 nalin
-	* src/vte.c(vte_terminal_reset): reset the default setting as well
-	(#89506).
-
-2002-08-07 nalin
-	* src/vte.c(vte_terminal_draw_cells): perform Xft remapping for Xft1,
-	switch back to PangoX.
-2002-08-06 nalin
-	* src/vte.c(vte_terminal_set_encoding,
-	vte_sequence_handler_local_charset): use g_get_charset() instead of
-	nl_langinfo() to determine the default codeset, and to check if it's
-	UTF-8.  Patch from Hidetoshi Tajima.
-	* src/vte.c(vte_terminal_set_encoding): don't leak conversion
-	descriptors when changing the encoding fails.  Patch from Hidetoshi
-	Tajima.
-	* src/vte.c(vte_terminal_send): don't read past the converted string
-	when performing paste substitutions.
-	* src/vte.c: rework the straight-Pango rendering routines to call
-	normal Pango instead of PangoX.
-	* src/vte.c(vte_terminal_ensure_cursor): speed up the "add many cells"
-	case a bit.
-2002-08-05 nalin
-	* src/vte.c(vte_cell_is_between): sort the two endpoints correctly and
-	provide a boolean to control whether or not the endpoint is "in".
-	* src/vte.c(vte_cell_draw_rows): check if a cell is selected using
-	the right indicator.
-	* src/vte.c(vte_terminal_get_text): when adding a newline to the end
-	of a returned line, don't show it as being in the rightmost column.
-	* src/vte.c(xlfd_from_pango_font_description): turn the DPI, pixel size,
-	and added info into wildcards.
-	* src/vte.c(vte_terminal_draw_cells): go back to drawing individual
-	cells when using Xlib.
-	* src/vte.c: Compute right-side padding as well as left.
-	* src/vte.c(vte_terminal_init): disable use of PangoX by default.
-	* src/vteapp.c: add -D to add the same patterns profterm does to test
-	dingus hiliting.
-
-2002-08-03  Havoc Pennington  
-
-	* src/vte.c (vte_terminal_setup_background): add a gdk_flush()
-	before the error trap pop, just for paranoia, may help with 
-	#89049
-
-2002-08-02 nalin
-	* src/vte.c(vte_terminal_send): Substitute carriage returns for
-	newlines when pasting text to the child, fixing weird paste behavior
-	in pico and friends.
-
-2002-08-02  Christophe Merlet  
-
-	* configure.in: Added fr to ALL_LINGUAS.
-
-2002-08-01  nalin
-	* src/pty.c, src/pty.h: Expose vte_pty_set_size() and get_size() to
-	localize terminal ioctl usage.
-	* src/ring.c(vte_ring_validate): Don't repeatedly compute the same
-	value when we know it won't change.
-	* src/vte.c(vte_wc_from_unichar): Implement for the non-STDC_ISO_10646
-	case, heavily based on patch from Hidetoshi Tajima.
-	* src/vte.c(vte_terminal_ensure_cursor): Don't initialize the local
-	data unless we have to.
-	* src/vte.c(vte_terminal_process_incoming): Don't insert NUL characters
-	into the display, matching behavior of xterm.
-	* src/vte.c: Clean up use of various G_PRIORITY values throughout to
-	allow for simpler tuning.  Rewrite rendering code to use per-paint
-	PangoLayouts when they're needed, use Xft2's DrawCharSpec function when
-	available, and to cut down on X requests.  Don't paint on expose events
-	if the window isn't realized, drawable, and at least partially visible.
-	Don't deselect previous selection when the user clicks unless there's
-	also a drag first.
-2002-07-31  nalin
-	* src/pty.c: Include  if available, per patch from Hidetoshi
-	Tajima.
-	* src/trie.c: Include missing , spotted by Hidetoshi Tajima.
-	* src/vte.c: Initialize new lines created in insert_lines() to the
-	current default attributes like al() does.
-2002-07-30  nalin
-	* configure.in: Check for wint_t and attempt to allow compiles even
-	when wint_t isn't defined (this type is used only debug code, so it
-	shouldn't break anything).
-	* src/caps.c: Remove "te" and "ti", which are logical, in the same way
-	"so" is, from the known capabilities lists.  Add a "is a key" field to
-	the termcap list so that we don't match against keystrokes in case
-	they're also control sequences.
-	* src/interpret.c: Use tables instead of tries.  Don't add key sequences
-	to the table.
-	* src/pty.c: Fix incorrect invocation in sample.
-	* src/reaper.c: Include stdlib.h to quiet compiler warning.
-	* src/trie.c, src/trie.h: Remove the unused precomputing routines.
-	* src/utf8echo.c: Switch to link with tables instead of tries.
-	* src/vte.c: Switch to using tables instead of tries.  Map
-	cursor-backward to LE instead of le, which handles parameters right.
-	Don't add key sequences to the parsing table.  Tune updates so that
-	they occur less often when we're processing large amounts of data from
-	the child.  Add a 'status-line-changed' signal.  Implement fs() and
-	fix ts().  Add ::get_status_line() to get the contents of the status
-	line.  Obey it() when setting default tabstops.  Implement
-	cursor_next_line(), cursor_lower_left(), cursor_preceding_line(),
-	cursor_horizontal_and_vertical_position(), erase_characters(), and
-	insert_blank_characters().  Implement nw().
-
-2002-07-26  nalin
-	* src/vte.c: Initialize new lines added for al().  Spotted by jrb.
-
-2002-07-25  Ole Laursen  
-
-	* configure.in: Added Danish translation.
-
-2002-07-25  nalin
-	* README: Note that bold isn't broken any more.
-	* termcaps/xterm: Note that k; was added.
-	* src/pty.c: Set the proper number of columns in the window size.
-	* src/ring.h: Change macro argument names to hopefully not step on
-	application code.
-	* src/vte.c: Set the terminal size to the default size as specified in
-	termcap at init-time.
-2002-07-24  nalin
-	* src/pty.c: Add private vte_pty_set_size() function.
-	* src/pty.c, src/pty.h: vte_pty_open() takes size arguments now.
-	* src/vte.c: Open the PTY with the proper initial size.
-2002-07-23  nalin
-	* src/ring.c, ring.h: Expose the ring implementation and convert several
-	simple functions into macros.
-	* src/vteapp.c: Pass all long options on to gtk_init().
-2002-07-23  nalin
-	* src/vte.c: Fix realize/unrealize to be properly reversible.  Use the
-	font from the default style unless we're explicitly given one.
-	* src/vteapp.c: Don't set base size or minimum size geometry hints when
-	sizing the terminal widget.
-2002-07-22  nalin
-	* src/pty.c(vte_pty_ptsname): Fix an incorrect logic check.
-2002-07-19  nalin
-	* src/vte.c(vte_terminal_set_color_internal): If we're changing the
-	background color, apply it to the widget's window as well, from msw.
-2002-07-19  nalin
-	* src/vte.c: Undo the scrolling changes -- there too many combinations
-	of circumstances that cause them to not work right.
-2002-07-18  nalin
-	* src/vte.c: Fudge the repaint line count by one when scrolling regions
-	to ensure that the old cursor gets repainted.  Calculate the area which
-	needs to be repainted when reverse-scrolling correctly.
-2002-07-18  nalin
-	* src/vte.c: Implement enough of set-mode and reset-mode to allow
-	toggling of insert mode using this sequence.  Move all scrolling into
-	vte_terminal_scroll_region and use gdk_draw_drawable to avoid repainting
-	from scratch whenever possible.
-2002-07-17  nalin
-	* configure.in: Actually set ALL_LINGUAS so translations get installed.
-	* README: Document the weirdness that is cursor movement around wide
-	characters.
-	* src/vte.defs: Bind set_color_bold().
-	* src/debug.c: Suppress warnings when $VTE_DEBUG_FLAGS isn't set.
-	* src/pty.c, src/reaper.c, src/termcap.c, src/trie.c: Provide for
-	debug messages in the test program.
-	* src/interpret.c, src/trie.c: Use libc stdio instead of g_print for
-	printing what might be part of a multibyte sequence because g_print
-	checks for validity.
-	* src/interpret.c, src/trie.c, src/utf8echo.c, src/vte.c: Use gunichar
-	instead of wchar_t in places where a gunichar is expected.  Provide a
-	means for converting from wchar_t to gunichar for the sake of X11 calls
-	which want a wchar_t.
-	* src/trie.c: Provide vte_trie_wide_encoding() for finding a giconv
-	target which is hopefully compatible with gunichar.  Likewise provide
-	vte_trie_narrow_encoding() to find one compatible with iso-8859-1.
-	* src/vte.c: Fall back to ISO-8859-1 if we can't set things up for the
-	current locale encoding at startup time.  Fall back to the current
-	encoding if we can't perform a given dynamic switch.
-2002-07-16  nalin
-	* configure.in: Set GETTEXT_PACKAGE correctly, noted by menthos.
-
-2002-07-16  nalin
-	* src/vte.c (vte_terminal_set_colors): Guess at an appropriate bold
-	version of the foreground color instead of hard-coding in a default.
-	* src/vte.c, src/vte.h (vte_terminal_set_color_bold): Add.
-
-2002-07-16  nalin
-	* src/trie.c: Correctly check for g_iconv_open() failure.
-	* src/vte.c (vte_terminal_set_encoding): Try to give a meaningful
-	error when g_iconv_open() fails, even though we're screwed.
-
-2002-07-15  nalin
-	* src/vte.c: wrap the new Xft/fontconfig-specific code in HAVE_XFT
-	* src/vte.c: Revert some changes in how new cells were initialized,
-	removing various cosmetic problems.
-	* src/vte.c (vte_terminal_process_incoming): Discard the proper number
-	of characters when we don't recognize a sequence, previously we left
-	one byte that should have been removed.
-
-2002-07-14  Havoc Pennington  
-	* src/vte.c (vte_terminal_get_cursor_position): decrement spaces
-	as we go through the loop, it was nice and infinite.
-
-2002-07-13 nalin
-	* src/vte.c (vte_terminal_get_text): Add the proper number of attribute
-	structs to the attribute array to fix crashes which occurred when the
-	buffer contains non-ASCII text (Red Hat #67930).
-2002-07-12 nalin
-	* src/vte.c: Small optimization in the al() and dl() handlers.  al()
-	doesn't move the cursor, per GNU termcap docs.  Check for a pixbuf in
-	the bgfx check instead of pixmap, which was the wrong type.
-2002-07-12 nalin
-	* src/vte.c: Add patch to heed Xft/fontconfig settings as kept by GTK.
-	Based on patch from otaylor.
-2002-07-12 nalin
-	* src/slowcat.c: Added.
-	* src/vteapp.c: Add -a/-b flags to control audible bell and blinking
-	cursors.  Only send "pwd" as an initial command if there wasn't a
-	command specified on the command line.  Add a simple help message.
-	* src/vte.c: Bind F13-F35 per termcap.  Treat GDK_KP_Delete as
-	GDK_Delete.  Map Ctrl+F1-F12 to F13-F24.  Fix dc() to ensure that the
-	rows stays full and that newly-added cells get the default attributes.
-	Fix cl() to clear all rows on the screen with the default attributes
-	(bce).  Default to using Xft if available for consistency with GTK.
-2002-07-11 nalin
-	* src/vte.c: Treat super, hyper, meta, and alt as modifiers when
-	deciding to scroll-on-keypress.  Noted by jrb.
-	* src/vte.c: Always map \r and \n to cr and so, even when they're
-	defined by the termcap.
-	* src/vte.c, src/vte.h: Rework how default colors are set up, and add
-	vte_terminal_set_color_foreground and vte_terminal_set_color_background.
-	* src/vte.h: Remove includes for local headers which apps are not
-	likely to never use, cleaning up the namespace a little.
-	* python/vte.defs: Bind vte_terminal_set_color_{fore,back}ground.
-	* src/debug.h, src/ring.h: Use G_BEGIN_DECLS/G_END_DECLS.
-	* src/reaper.h: Use G_BEGIN_DECLS/G_END_DECLS in the right place.
-	* src/vteapp.c: Add -B/-T flags to set background images and
-	transparency.
-2002-07-02 nalin
-	* src/vte.c: Make shift+button1 extend selection.
-2002-07-01 nalin
-	* src/vte.c (vte_terminal_draw_char): Draw unicode line-drawing code
-	points natively as we do for the GR1 support, in case the current font
-	doesn't include glyphs for them.
-	* src/vte.c: Test for g_iconv_open() failure properly (compare result
-	to ((GIConv)-1), not NULL).
-	* src/vte.c: Rework recovery from illegal sequence errors in the input
-	stream to be much more aggressive about it.
-2002-06-25 nalin
-	* src/vte.c: Bind F10 to "k;", not "k0".
-	* termcaps/xterm: Add "k;" defined as F10.
-2002-06-25 nalin
-	* src/vte.c (vte_terminal_reset_rowdata): Check for redundant resizes.
-	* src/vte.c (vte_terminal_set_scrollback_lines): Keep the alternate
-	screen buffer size the same as the window height, because xterm's
-	alternate screen doesn't backscroll.
-	* src/vte.c (vte_terminal_get_text): Don't append spaces to multicolumn
-	characters when reading the screen's contents.
-	* src/vte.c: Don't overexpose neighboring cells any more.  Cleanups.
-	* src/ring.h, src/ring.c: Add vte_ring_max() to read a ring's maximum
-	size.
-2002-06-24 nalin
-	* src/vte.c (vte_sequence_handler_decset_internal): Treat option 1049
-	as a combination of 1047 and 1048.
-	* src/vte.c (vte_terminal_finalize): When finalizing while holding the
-	selection, throw the selection onto the clipboard without an owner so
-	that it doesn't just disappear.
-2002-06-19 nalin
-	* src/vte.c (vte_sequence_handler_set_title_int): Fix a logic bug
-	that got rid of the title always, not just when conversion failed.
-2002-06-19 nalin
-	* src/vte.c: Clear the alternate screen when switching to it.
-2002-06-18 nalin
-	* src/vte.c: Fix refs/derefs with IOChannels and sources.  Clean up
-	I/O GIConv descriptors at finalize-time.
-2002-06-18 nalin
-	* src/vte.c: Make cursor_visible a widget-wide (not per-screen) setting.
-2002-06-18 nalin
-	* autogen.sh: Correct automake version check to require 1.5, heads
-	up from Glynn Foster.
-2002-06-18 nalin
-	* src/trie.c (vte_trie_match, vte_trie_match_x): Sort out greedy vs.
-	non-greedy pattern matching.
-	* src/vte.c (vte_sequence_handler_decset_internal): Make 1047 an alias
-	for 47 (use alternate buffer), and handle cursor save/restore properly.
-2002-06-14 nalin
-	* src/vte.c, src/vte.h (vte_terminal_fork_command): Add a parameter for
-	passing in environment variables to add.
-	* src/termcap.c: Preprocess out unused comment() and generate() funcs.
-	* src/Makefile.am: Bump library version number.
-	* vte.spec: 0.4.0
-2002-06-14 nalin
-	* configure.in, python/Makefile.am: Handle cases where pygtk isn't
-	installed in the prefix we're configuring for.
-	* src/Makefile.am: Link libvte to its library dependencies.
-2002-06-13 nalin
-	* src/vteaccess.c: Stop watching for hierarchy-changed signals -- the
-	accessible container which is our parent handles it already (from msw).
-2002-06-13 nalin
-	* src/vteaccess.c: Re-read cursor position immediately on "cursor-moved"
-	events, and emit the "text-caret-moved" signal then as well.  Don't
-	override the signal handlers for signals we emit, bad things can
-	happen (from msw).
-2002-06-12 nalin
-	* src/vte.c: Re-read the termcap when we change emulation, because
-	the location of the file may have changed.
-	* src/reaper.c: Also tell the parent the child died when the child
-	dies due to an uncaught signal.
-	* python/vte.override (_wrap_vte_terminal_fork_command): Handle default
-	value for the command.
-2002-06-12 msw
-	* python/vte.override (_wrap_vte_terminal_fork_command): implement
-2002-06-12 msw
-	* acinclude.m4: added AM_CHECK_PYTHON_HEADERS from pygtk
-	* configure.in: rewrote python checks to be more robust
-	* python/Makefile.am (CFLAGS): include @PYTHON_INCLUDES@
-2002-06-12 msw
-	* src/vte.c (vte_terminal_get_accessible): turn the logic around
-	to be the right way
-2002-06-12 nalin
-	* src/vte.c: Cache the result of vte_terminal_get_accessible() and
-	unref it at finalize-time.  Add debug messages to log signals emitted
-	by the widget.  Implement vte_terminal_get_encoding and
-	vte_terminal_get_emulation, emit signals when these change.
-	* src/vteaccess.c: Emit a "text_caret_moved" signal when the cursor
-	moves.
-	* configure.in, src/Makefile.am: Add rules for building python modules.
-2002-06-12 msw
-	* src/vteaccess.c (vte_terminal_accessible_get_text): accept
-	end_offset of -1, which means "until the end".
-	* src/vteaccess.c (vte_terminal_accessible_new): never set the
-	description to a NULL pointer
-2002-06-10 nalin
-	* Makefile.am, configure.in: Include gettext support.
-	* src/vte.c, src/vte.h: Expose vte_terminal_set_encoding().
-	* src/vte.c: Finish merging otaylor's Xft2 patch (oops).  Compute
-	padding correctly.
-	* src/pty.c, src/reaper.c, src/trie.c, src/vte.c: Mark warnings for
-	possible translation.
-2002-06-07 nalin
-	* src/vte.c: Center characters in their cells, caching their extents.
-2002-06-06 nalin
-	* src/vte.c, src/vte.h: Add get_cursor_position(). Remove get_snapshot()
-	and free_shapshot().
-	* src/vte.c: Fix a logic bug that caused us to scroll to the bottom
-	even if the user just pressed and released a modifier key.  Fix saving
-	of the font in set_font() in most cases, where we weren't saving the
-	new font before.  Scroll-to-bottom on input method commits, which are
-	also the result of keystrokes, when scroll-on-keystroke is enabled.
-	* src/vteaccess.c: Rework to use get_text() and get_cursor_position()
-	instead of get_snapshot(), so that selection and accessibility both
-	agree on what's visible (or "visible").
-2002-06-05 nalin
-	* configure.in: Check for pangoxft with Xft1 or Xft2, hopefully getting
-	things right for either case.  Originally from patch by andersca.
-	* src/reaper.c, src/reaper.h: Add a singleton object to watch for
-	SIGCHLD when child processes quit.
-	* src/vte.c: Emit a "child-exited" signal when a child started with
-	fork_command() exits.
-	* src/vte.c: Make a better guess at font metrics when using Xft by
-	measuring the extents for a string of representative characters.
-	* src/vte.defs: Add.  Not very useful yet.
-2002-05-31 nalin
-	* src/vte.c: Implement font setting using PangoX to convert Pango
-	font descriptions to core font xlfds for use when drawing with Xlib.
-2002-05-29 nalin
-	* src/trie.c, src,vte.c: Finish switching iconv to g_iconv.  I think
-	this was a part of Hidetoshi Tajima's patch that I lost.  Free regexes
-	when we're done with them.
-2002-05-28 nalin
-	* src/vte.c: Fix matching when scrolling delta isn't zero.  Fix async
-	background updating (report from Richard Neal Plana).  Fix cb() and ce()
-	when the cursor is on a line without data (needed to create it) and when
-	cells being cleared don't exist (needed to create them) (report from
-	Garret LeSage).
-	* src/vte.c, src/vteaccess.c: Always free the segment when freeing
-	arrays and strings.
-
-2002-05-24 nalin
-	* autogen.sh: Call libtoolize. (#82836)
-	* src/vte.c: Fix stupid segfault in set_scrollback_lines.  (Patch
-	from notting.)  Make another attempt to convert Pango font descriptions
-	to xlfds.
-	* src/vteapp.c: Add -c, -f, -t command-line flags for easier testing.
-
-2002-05-22 nalin
-	* src/vte.c: Fix hiliting of matched strings.
-
-2002-05-21 nalin
-	* src/vte.c: Filter key release events through input methods.  (Patch
-	from otaylor.)  When building with gcc, use -std=c99.
-
-2002-05-21 nalin
-	* autogen.sh, src/termcap.c, src/utf8echo.c, src/vte.c: Patch from
-	Hidetoshi Tajima to fix building on Solaris systems, remove use of
-	syntax that might be specific to gcc, and fix an overrun in
-	vte_termcap_generate().  (#82433)
-
-2002-05-18 andersca
-	* src/vte.c: Don't queue a background update if the background isn't
-	transparent.
-
-2002-05-16 nalin
-	* src/vte.c: Snip trailing whitespace off of copied lines, insert
-	an end-of-line only when the copied line doesn't go to the right edge,
-	don't overrun right edge, even in insert mode.  Fix displaying of
-	underlined text.  Finish implementing matching.
-
-2002-05-15 nalin
-	* src/vte.c: Send kI on insert key.  Don't send drag events when the
-	child has only asked for click events.  Fix crashbugs in selection.
-	When getting scroll events, send mouse 4/5 events to the child instead
-	of performing a history scroll if the child wants mouse events.  Start
-	adding match support, merging how selection views the buffer with how
-	matching views the buffer, though matching doesn't work yet.
-
-2002-05-14 nalin
-	* src/vte.c: Don't try to draw nul characters, most fonts can't.  Don't
-	send motion-tracking events to the child unless we're dragging.  Fix
-	ce so that it works even right after startup.  Make sure that repainting
-	the entire window actually exposes the visible parts of the window.  Fix
-	tab clearing to also allow removal of the current tabstop.  Implement
-	save-mode and restore-mode.  Start on reverse-video mode.  Don't scroll
-	on modifier keypress events.  Rework part of clipboard copy.
-	* termcaps/xterm: Add missing F11/F12/End keysyms to bundled xterm
-	termcap.
-2002-05-13 nalin
-	* src/debug.c: Add "ALL" as a debug flag, aliased to everything.
-	* src/pty.c: Print debug info after redirecting stdio.
-	* src/trie.c: When debugging, count only decision nodes.
-	* src/vte.c: Fix se, for real this time.  Add a mostly-ignored protected
-	attribute.  Handle am, bw, ul flags properly.  Make cd clear the current
-	line, too.  Make ce fill the current default attributes through the end
-	of the line.  Handle cS.  Fix cv to work when we have a scrollback
-	buffer.  Handle ll, mp.  Line wrap on nd.  Reset tab stops on hard
-	reset only.  Handle soft-reset and full-reset.  Handle uc.  Initialize
-	scrollback line count properly.  Tweak drawing of alternate 'a' to
-	get rid of artifacts.  Reset insert mode, cursor visibility, and
-	scrolling regions when resetting.
-2002-05-10 nalin
-	* src/vte.c: Fix IC, which should *always* be done in insert mode,
-	from otaylor.  Make delete mode do nothing.
-2002-05-09 nalin
-	* src/vte.c: Fixes to usage of iconv, from otaylor.  Remap certain
-	characters which are missing in the current Xft font to similar
-	characters if they are in the font, from otaylor.  Change default
-	emulation to "xterm", cleaning up confusion over what standout really
-	means.  Reorganize some internals.  Complain when an application sends
-	us a key-press sequence, as if we knew what to do with one of those.
-	Implement bt, ct, st.  Reimplement ta.
-	* src/debug.c, src/debug.h: Added.
-2002-05-08 nalin
-	* src/vte.c: Implement mouse motion-event and any-event tracking.
-2002-05-07 nalin
-	* src/vte.c: Implement the rest of the special graphics characters.
-2002-05-06 nalin
-	* src/vte.c: Finish implementing window-manipulation sequences.  Rename
-	signals to be more consistent.  Add thin wrappers for emitting signals,
-	and use them everywhere.  Support pangox even when XFT isn't available.
-	Try to provide bold text again.  Add signals for most of the window
-	manipulation control sequences.  Start handling mouse button events.
-	Hide the mouse cursor when we get keyboard events.  Use a different
-	mouse cursor if the child is mouse-aware.  Handle eA() by treating it as
-	as().
-	* src/caps.c, src/caps.h: Export definitions of VTE_CAP_CSI and friends.
-2002-05-04 nalin
-	* src/vte.c: Implement device-status-report and dec-device-status-
-	report.  Clamp location values in sequence_handler_cm() to the
-	dimensions of the terminal window so that resize(1) will work right.
-	Start handling window-manipulation sequences.
-2002-05-03 nalin
-	* src/termcap.c: Export a vte_termcap_strip() function for preprocessing
-	escape sequences and whatnot from capability values.
-	* src/typescrypt: Removed.
-	* src/vte.c: Pass the hard-coded xterm-specific capabilities through
-	vte_termcap_strip(), which fixes a few weird bugs.  Discard invalid
-	might-be-control-sequence sequences, like other emulators do.  Don't
-	consider modifier keys, by themselves, to be enough to scroll-on-key.
-	When snapshotting, actually snapshot all of a row instead of just the
-	last character.  Don't run past the end of snapshot contents when
-	reading them.
-	* src/vteaccess.c: Clamp offsets so that they always sort right.
-2002-05-02 nalin
-	* src/termcap.c: Fix handling of triple-digit escaped characters,
-	which weren't being processed right if the first digit was '1' instead
-	of '0'.
-	* src/trie.c: Rework trie matching to return the address of the
-	character which ended the match attempt, which should cut down on
-	useless initial-substring checks.  Fix a subtle bug which caused
-	intermittent off-by-somenumber errors in the return address.
-	* src/vte.c:  Remove several gdk_window_scroll() calls which apparently
-	aren't buffered.  Convert invalid multibyte characters to '?' instead of
-	just dropping them.  Provide a means of setting the backspace/delete
-	bindings.  Add a poor xlfd_from_pango mapping function which would need
-	serious work to be useful.  Get rid of warnings when we're transparent
-	and the root window pixmap isn't as big as the root window because it's
-	been tiled.  Setup bindings using the export functions.  Set the default
-	terminal size to 80x24 instead of 60x18, which was originally chosen for
-	debugging purposes.  Don't use $SHELL as the command to invoke when
-	starting up a default command (as in the test app) -- libtool wrappers
-	keep screwing this up.  Don't limit the number of characters we skip
-	over in invalid multibyte sequences -- sometimes that's not enough.
-	Hook up ts/te, ks/ke sequence handlers.
-	* src/vteaccess.h: Fix a crashbug due to mismatch between parent field
-	in the object's structure and its inherited object's type.  Fix more
-	crash bugs due to initialization weirdness.  More to go.
-2002-05-01 nalin
-	* src/vte.c: Try @pkgdatadir@/termcap/$TERM when reading termcap files.
-	This fixes the app on systems with no /etc/termcap, and also speeds up
-	loads and reduces memory consumption for xterm-color at the expense of
-	making on-the-fly emulation changes impossible.  Don't xor reverse with
-	itself when drawing characters (this broke when snapshotting was added).
-	* termcaps/Makefile.am, termcaps/xterm-color: include a default termcap
-	for xterm-color.
-	* src/termcap.c src/termcap.h: make _find_boolean return a gboolean
-	instead of an int.
-	
-2002-04-30 nalin
-	* src/vte.c: Disconnect from toplevel window_configure events at
-	finalize-time.
-
-2002-04-30 18:06  nalin
-	* src/vte.c: Track and free idle task tags properly.  Change F11 and
-	F12 capabilities from 'k;' and 'F1' to 'F1' and 'F2'.  Send a NUL on
-	control space. (#80350)  Allow setting and checking of word characters,
-	and change select-by-word behavior to use the word character list.
-	Emit "contents_changed" signals whenever the visible contents change,
-	and "cursor_moved" when the cursor moves.  Add snapshotting method.
-	Scroll when auto-margin handling moves the cursor to the next line.
-	Assume that the locale charset is actually ISO-8859-1 when we're in
-	a UTF-8 locale, so we don't toggle from UTF-8 to UTF-8.  Treat
-	GDK_KP_Page_Up as a GDK_Page_Up, ditto for GDK_KP_Page_Down and
-	GDK_KP_Tab and GDK_KP_Space.  Add vte_terminal_get_font().  Don't bother
-	messing with ring buffers if we're resizing them to their current sizes.
-	* src/pty.c, src/vte.c: Return a pid from vte_terminal_fork_command().
-	* src/vteaccess.c, src/vteaccess.h: Add VteTerminalAccessible object
-	type.  It might even work, mostly.
-
-2002-04-29 14:25  nalin
-	* src/vte.c: Handle me() by resetting all attributes (including
-	colors, which we weren't resetting before).
-
-2002-04-29 10:57  nalin
-	* src/vte.c: Handle kb by treating it as a backspace.  Make pangox
-	rendering the default.  Handle control-key sequences better, unless
-	the input method is hiding the modifiers from us.  Set the default
-	TERM variable to "xterm-color".
-	* src/vte.c src/vte.h: Get rid of vte_terminal_set_core_font().
-
-2002-04-26 19:14  nalin
-	* src/vte.c: Punt all changes to background images and transparency
-	to an idle task.  Only insert newlines into the copy buffer when the
-	last column in a given line doesn't have a character in it.
-2002-04-26 17:35  notting
-	* src/pty.c: use execlp/execvp
-
-2002-04-26 12:09  nalin
-	* src/Makefile.am, src/ring.c, ring.h: add a ring buffer for storing
-	scrollback data.
-	* src/vte.c: use a ring buffer instead of a GArray to hold scrollback
-	rows.  Fix a bug in that.  Try to preserve what the user sees when the
-	scrollback size changes.
-	* src/vteapp.c: set a default scrollback buffer size of 100.
-2002-04-26 00:49  nalin
-	* Makefile.am: run autogen before tagging so that the tag is always
-	correct.
-	* README: update.
-	* configure.in: add pangox to the list of GTK+ 2.0 modules we link with.
-	* src/vte.c, src/vte.h: add vte_terminal_set_scrollback_lines(), add
-	some code to use pangox for rendering before trying core rendering,
-	which should make font selection actually work.
-	* vte.spec: tweak description text.
-
-2002-04-25 12:23  nalin
-
-	* Makefile.am: Uncomment the tag target.
-
-2002-04-25 12:22  nalin
-
-	* HACKING, Makefile.am, configure.in: Add some targets for building
-	tarballs in a hopefully-reproducible way.
-
-2002-04-25 12:12  nalin
-
-	* src/vte.c: Let GDK_USE_XFT turn on Xft as well as
-	VTE_USE_XFT.
-
-2002-04-25 01:45  nalin
-
-	* src/vte.c: Handle decoding errors
-	better.
-
-2002-04-25 00:49  nalin
-
-	* vte.spec: Include pkgconfig files in the package.
-
-2002-04-25 00:43  nalin
-
-	* src/vte.c: src/vte.c: Make multiple calls to
-	set_background_transparent() and set_background_image() do the
-	right thing.
-
-2002-04-25 00:05  nalin
-
-	* src/vte.c: Reverse the sanity check in
-	vte_terminal_set_background_image_file() so that it rejects
-	zero-length strings, not the other way around.
-
-2002-04-24 23:54  nalin
-
-	* src/trie.c: Demote some debug messages to being trie-specific
-	debug messages.
-	* src/vte.h: Declare vte_terminal_set_core_font() for non-Xft use.
-	* src/vte.c: Adjust idle priorities to make the terminal be more
-	responsive. Fix a double-free that corrupted the heap on core font
-	loads. Rework some pixbuf handling to only create new pixbufs when
-	we need to modify what we are given. Revert a patch for profterm
-	crackiness that's gone now.
-
-2002-04-24 20:49  nalin
-
-	* README: update to-do list.
-	* autogen.sh: remove --disable-shared.
-	* src/pty.c: remove a memory leak.
-	* src/termcap.c: fix a possible read-before-start-of-buffer.
-	* src/trie.c: use iconv instead of mbrstowcs, even if it's just
-	ASCII->W_CHAR_T.
-	* src/vte.c: fix a few memory leaks. Only reset the IM context when
-	we're realized, which is the only time we actually have an IM context.
-	Don't create a copy of a pixbuf if we don't need to desaturate it,
-	just ref it and use it directly.
-
-2002-04-23 19:40  nalin
-
-	* src/vte.c: Display UTF-8 preedit strings properly, fix
-	copy (no, really this time), and reset IM contexts when pasting
-	text in.
-
-2002-04-23 18:01  nalin
-
-	* src/pty.c: Print debug messages before redirecting stdio.
-	* src/vte.c: Fix displaying of highlighted multi-column text.
-	Use the GTK global setting for cursor blinking to control das
-	blinkencursor.
-	* src/vte.h: Remove function for setting blinking timeout.
-
-2002-04-23 15:54  nalin
-
-	* src/pty.c: Fix a compile warning.
-
-2002-04-23 15:54  nalin
-
-	* autogen.sh: Default to include optimization, even for debugging. 
-	* configure.in: Move AM_CONFIG_HEADER to the top.
-	* src/pty.c: Create non-login shells by default (when argv is NULL,
-	otherwise it's up to the caller anyway.
-	*  src/vte.c: Add mostly-complete input method support.
-	* src/vte.h: Add vte_terminal_im_append_menuitems().
-
-2002-04-23 13:04  hp
-
-	* src/vte.c, src/vte.h: add vte_terminal_set_font
-
-2002-04-22 17:00  hp
-
-	* src/vte.c: when setting background color, use allocated color,
-	and don't overwrite with bg of None
-
-2002-04-22 16:50  hp
-
-	* src/vte.c: use gdk_rgb_find_color to allocate X colors
-
-2002-04-22 16:35  nalin
-
-	* src/vte.c, src/vte.h, src/vteapp.c: Add vte_terminal_feed_child() to
-	send UTF-8 strings to the child process, and actually apply Havoc's
-	fix right this time.
-
-2002-04-22 09:56  nalin
-
-	* src/vte.c: Prevent double-free of incoming buffer
-	(patch from Havoc).
-
-2002-04-16 01:43  nalin
-
-	* README: Fix typo.
-	* src/vte.c: Make blinking cursors stay on while the user is typing,
-	desaturate images using integer math.
-
-2002-04-05 00:58  nalin
-
-	* vte.spec: Add less useless descriptions. 
-	* src/vte.c: Fix an uninitialized variable and missing declaration
-	error.
-
-2002-03-24 21:52  nalin
-
-	* src/vte.c: Ensure that there's a data row
-	whenever we scroll forward, fixing strangeness when I suspend and
-	resume vim.
-
-2002-03-24 19:08  nalin
-
-	* src/vte.c: Copy to clipboard synchronously, which
-	fixes a number of problems.  Implement background transparency.
-
-2002-03-17 20:59  nalin
-
-	* src/vte.c: Rework backgrounds to take advantage of gdk's automatic
-	drawing.
-	* src/vteapp.c: Try to enable transparency if no background
-	image is present.
-
-2002-03-17 20:58  nalin
-
-	* autogen.sh, configure.in: Adjust warnings used when in maintainer
-	mode.
-
-2002-03-17 01:15  nalin
-
-	* src/vte.c: Draw the cursor as an unfilled box when the widget does
-	not have focus.
-
-2002-03-17 01:04  nalin
-
-	* src/vte.c: Fix handling of scroll-on-output to always scroll when
-	only we're at the bottom of the buffer.
-	* src/vteapp.c: Disable scroll-on-output by default.
-
-2002-03-17 00:45  nalin
-
-	* src/vte.c src/vte.h: Rework tiling of background images, and
-	implement a blinking cursor.
-	* src/vteapp.c: Set blinking cursor by default.
-
-2002-03-14 02:58  nalin
-
-	* src/caps.c: Corrections to some xterm control sequences.
-
-2002-03-14 02:32  nalin
-
-	* configure.in: Define PACKAGE correctly.
-	* src/vte.c src/vteapp.c: Move most of the tear-down code into the
-	widget finalize method; handle EOF and widget destruction correctly
-	to prevent segfaults.
-
-2002-03-14 00:48  nalin
-
-	* configure.in: * configure.in: Define PACKAGE.
-
-2002-03-14 00:18  nalin
-
-	* configure.in: Disable gdk-pixbuf's deprecated functions.
-	* vte.c: Discard non-ascii bytes to clear logjams that
-	happen when we pass invalid terminal data to iconv().
-
-2002-03-13 23:07  nalin
-
-	* src/iso8859mode.c, src/utf8mode.c, src/vte.c, src/vte.h:
-	add missing includes
-	* vte.c vte.h: implement background color setting, provide
-	a function for setting the defaults, tile background images
-	properly
-
-2002-03-13 21:12  nalin
-
-	* configure.in, vte.pc.in, src/vte.c: Remove gdk-pixbuf-xlib
-	dependency by using just gdk-pixbuf. 
-	* src/vte.c: Perform background image desaturation locally.
-
-2002-03-13 14:37  nalin
-
-	* src/vte.c: Don't add the widget's allocation offsets
-	when generating expose events.
-
-2002-03-13 14:22  nalin
-
-	* src/vteapp.c: Don't try to use transparency for now.
-
-2002-03-13 13:29  andersca
-
-	* src/vte.c, src/vte.h: Add more functions that profterm can use.
-
-2002-03-13 12:51  andersca
-
-	* .cvsignore, vte.pc.in: Silent cvs and add gdk-pixbuf-xlib to
-	depends in the .pc.in file
-
-2002-03-13 12:37  andersca
-
-	* src/.cvsignore: Sliff sloff
-
-2002-03-13 12:37  andersca
-
-	* src/.cvsignore: sssh
-
-2002-03-13 12:19  nalin
-
-	* configure.in: Add gdk-pixbuf-xlib-2.0 as a module requirement.
-
-2002-03-13 01:21  nalin
-
-	* src/vte.c, vte.h, vteapp.c: * vte.c: Add set_size,
-	set_audible_bell, set_scroll_on_output, set_scroll_on_keystroke,
-	copy_clipboard, paste_clipboard, set_background_image,
-	set_background_image_file, and set_background_saturation.  Also
-	added a broken set_background_transparent.
-
-2002-03-12 22:35  nalin
-
-	* src/vte.h: adjust the name of a declared function (was _set_size,
-	is _size_set)
-
-2002-03-12 22:11  nalin
-
-	* src/vte.c: Get rid of a global copy of the parent class.
-	* vte.c: Implement ec, ic, and IC handlers.
-
-2002-03-12 22:10  nalin
-
-	* src/vte.h: Fix a typo in a comment (we don't "omit" signals).
-
-2002-03-12 15:48  nalin
-
-	* src/caps.c: Recognize xterm cursor-character-absolute sequence.
-	* src/vte.c: Handle cursor-character-absolute.  Change the default font
-	to "mono" 14 point when using Xft.
-
-2002-03-12 15:22  nalin
-
-	* src/vte.c: Handle the ve (cursor visible) control sequence.
-
-2002-03-12 15:19  nalin
-
-	* src/vte.c: Handle dec private mode set (cursor visibility).
-
-2002-03-12 15:13  nalin
-
-	* src/vte.c, src/vte.h, src/vteapp.h: fix signed/unsigned problems
-	(fixes from alexl)
-
-2002-03-11 20:29  nalin
-
-	* src/vte.c: Make scroll-on-output scroll on control sequences, too.
-
-2002-03-11 20:19  nalin
-
-	* src/Makefile.am, src/iso8859mode.c, src/utf8mode.c:
-	Add simple programs for moving a terminal in and out of UTF-8 mode.
-	* src/vte.c: Be more verbose about iconv() errors.  Implement dc and DC
-	handlers.  Handle auto-wrapping (the "am" flag).  Remove scrolling
-	cheats from the al handler, which made the window jump.
-
-2002-03-11 02:39  andersca
-
-	* src/vte.c: Add a finalize handler and free our title strings
-	there.
-
-2002-03-11 02:05  nalin
-
-	* Makefile.am, configure.in, src/vte.c, src/vte.h, src/vteapp.c:
-	Emit "window_title_changed" and "icon_title_changed" when the
-	titles change, and store the new values in a public field so that a
-	handler can retrieve the values (patch from Anders Carlsson).
-
-2002-03-11 01:54  nalin
-
-	* vte.pc.in: Add vte.pc, from Anders Carlsson.
-
-2002-03-11 01:47  nalin
-
-	* src/vte.c: Fix a duplicate-idle-handler bug.
-
-2002-03-11 01:32  nalin
-
-	* README, src/vte.c: Fix selection (except maybe the end-of-line
-	stuff).
-
-2002-03-10 23:44  nalin
-
-	* src/vte.c: Whoops, I broke selection.  Fix that.  Implement
-	selection by lines.
-
-2002-03-10 23:08  nalin
-
-	* src/vte.c: Move character rendering into a common function so
-	that the cursor is always drawn the same as other characters (fixes
-	previous glitches when using Xft and when the cursor was over an
-	alternate charset character).
-
-2002-03-10 03:31  nalin
-
-	* src/vte.c: Differentiate between single, double, and triple-click
-	for selection (still need to do something with that info).
-
-2002-03-10 03:16  nalin
-
-	* stamp-h.in: remove this file
-
-2002-03-10 03:15  nalin
-
-	* configure.in: Don't check for pango because we never call pango
-	directly.
-
-2002-03-10 03:13  nalin
-
-	* src/vte.c: Deselect properly when something else is inserted into
-	the clipboard.
-
-2002-03-10 02:26  nalin
-
-	* AUTHORS, HACKING, README, src/utf8echo.c, src/vte.c: Fix
-	wide-character handling (now handles mid-stream encoding changes
-	correctly).  Updates to the meager docs.
-
-2002-03-09 02:41  nalin
-
-	* Makefile.am, vte.spec, src/Makefile.am: Add a .spec file (make
-	dist; rpm -ts vte*.tar.gz; rpm --rebuild) to make building a
-	package easier.
-
-2002-03-09 02:24  nalin
-
-	* src/vte.c: skip over space columns when selecting
-
-2002-03-09 02:20  nalin
-
-	* src/pty.c, src/vteapp.c: Use a login shell by default.
-
-2002-03-09 02:10  nalin
-
-	* src/vte.c, src/vte.h, src/vteapp.c: Rework input queueing to allow for
-	feeding without a pty.	Use gdk_window_scroll() in _al and _up
-	handlers, and in the _do handler, because it's usually faster.
-
-2002-03-08 02:52  nalin
-
-	* src/vte.c: Implement copy and almost-correct selection
-	highlighting.
-
-2002-03-07 21:30  nalin
-
-	* src/vte.c: Use a queue for pasting data.  Try to get dragging
-	detected right (doesn't work).
-
-2002-03-05 19:21  nalin
-
-	* src/vte.c: Mark the beginning of a selected area.
-
-2002-03-05 19:17  nalin
-
-	* src/vte.c: Make pasting asynchronous.
-
-2002-03-05 19:07  nalin
-
-	* src/vte.c: actually free clipboard data when finished with it
-
-2002-03-05 19:02  nalin
-
-	* src/vte.c: Implement middle-button paste.
-
-2002-03-05 18:55  nalin
-
-	* src/vte.c: Properly convert from utf-8 or wchar_t strings when
-	sending data to the pseudo-terminal.
-
-2002-03-04 19:53  nalin
-
-	* src/vte.c: Implement shift/pgup/pgdown scrolling.  Make
-	scroll-on-keypress and -on-output easier to toggle.
-
-2002-03-04 19:26  nalin
-
-	* src/vte.c: Spec out the rest of the alternate characters I
-	haven't implemented yet.  Remove a function that can't be easily
-	written (scroll_rows).	Correctly update the insertion delta when
-	scrolling, to fix man(1) again.
-
-2002-03-04 19:16  nalin
-
-	* src/vte.c: Discard redundant cursor-position exposes.
-
-2002-03-04 18:57  nalin
-
-	* src/termcap.c, src/termcap.h, src/vte.c: Use ssize_t to measure string
-	offsets in termcap, and don't assume that all capabilities have
-	values.  This fixes some nasty crashes.
-
-2002-03-04 11:53  nalin
-
-	* src/vte.c: add a missing bounds-check in the erase-in-row
-	function
-
-2002-03-04 01:13  nalin
-
-	* README, src/vte.c: Send the slave pty's erase character when the
-	user hits backspace.
-
-2002-03-04 00:59  nalin
-
-	* src/vte.c: Draw cursors to fill the entire cell.  Draw the blank
-	alternate character (ooh, tough).  Remove a redundant expose.
-
-2002-03-03 23:49  nalin
-
-	* src/trie.c: stop using wcsnlen, which is a GNU extension
-
-2002-03-03 23:43  nalin
-
-	* src/caps.h, src/pty.h, src/termcap.h, src/trie.h, src/vte.c,
-	src/vte.h: Add support for the line-drawing characters in the special
-	characters and line-drawing character set. (See
-	[http://vt100.net/docs/vt102-ug/table5-13.html].)
-
-2002-03-03 21:57  nalin
-
-	* src/pty.c, src/pty.h, src/vte.c: Properly differentiate insertion
-	delta (working screen) from scrolling delta.	Add environment setting
-	to the pty code.
-
-2002-02-27 21:54  nalin
-
-	* src/trie.c, src/vte.c, src/vte.h: Make the Xft support use long-lived
-	data items.  Clean up a lot of other Xft-related code.
-
-2002-02-27 10:45  nalin
-
-	* src/vte.c: actually hook up the nd handler to the "nd" sequence
-
-2002-02-27 00:05  nalin
-
-	* autogen.sh, configure.in, src/vte.c, src/vte.h: - Add sub-optimal
-	Xft rendering (set VTE_USE_XFT to "1" to try it); still needs
-	quite a bit of work to be useful.  Implement character-position-absolute
-	and line-position-absolute, which I  think are the only sequences which
-	emacs uses and which weren't implemented.
-
-2002-02-25 12:43  nalin
-
-	* src/Makefile.am: distcheck fixes
-
-2002-02-25 12:41  nalin
-
-	* README: add that line-drawing does not work to README
-
-2002-02-25 12:40  nalin
-
-	* configure.in, src/Makefile.am: tree fixups
-
-2002-02-25 12:38  nalin
-
-	* configure.in: fix autoconf reference file problem
-
-2002-02-25 12:38  nalin
-
-	* src/Makefile.in: remove stuff which should never have been added
-
-2002-02-25 12:37  nalin
-
-	* configure.ac, configure.in, src/Makefile.in: rename configure.ac
-	to configure.in, remove 2.5isms
-
-2002-02-25 12:35  nalin
-
-	* doc/ctlseqs.ps, Makefile.in, aclocal.m4, config.h.in, configure:
-	remove stuff that should never have been in there
-
-2002-02-25 12:30  nalin
-
-	* AUTHORS, ChangeLog, Makefile.am, NEWS, README, autogen.sh,
-	configure.ac, COPYING, HACKING, Makefile.in, aclocal.m4,
-	config.h.in, configure, stamp-h.in, doc/ctlseqs.ms, doc/ctlseqs.ps,
-	doc/readme.txt, doc/vttest.tar.gz, src/Makefile.am,
-	src/Makefile.in, src/caps.c, src/caps.h, src/interpret.c,
-	src/marshal.list, src/pty.c, src/pty.h, src/termcap.c,
-	src/termcap.h, src/trie.c, src/trie.h, src/typescript,
-	src/utf8echo.c, src/vte.c, src/vte.h, src/vteapp.c: Initial
-	revision
-
-2002-02-25 12:30  nalin
-
-	* AUTHORS, ChangeLog, Makefile.am, NEWS, README, autogen.sh,
-	configure.ac, COPYING, HACKING, Makefile.in, aclocal.m4,
-	config.h.in, configure, stamp-h.in, doc/ctlseqs.ms, doc/ctlseqs.ps,
-	doc/readme.txt, doc/vttest.tar.gz, src/Makefile.am,
-	src/Makefile.in, src/caps.c, src/caps.h, src/interpret.c,
-	src/marshal.list, src/pty.c, src/pty.h, src/termcap.c,
-	src/termcap.h, src/trie.c, src/trie.h, src/typescript,
-	src/utf8echo.c, src/vte.c, src/vte.h, src/vteapp.c: imported from
-	private cvs
-
-Local Variables:
-coding: utf-8
-End:
-vim: encoding=utf-8:
diff --git a/Makefile.meson b/Makefile.meson
index a7b9747..1fde79c 100644
--- a/Makefile.meson
+++ b/Makefile.meson
@@ -1,22 +1,21 @@
 # Copyright © 2019 Christian Persch
 #
-# This library is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or (at your
-# option) any later version.
+# This library is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
 #
-# This library is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
-# General Public License for more details.
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
 # along with this library.  If not, see .
 
 srcdir=@srcdir@
 builddir=@builddir@
-vte_gtk3_api_version = @vte_gtk3_api_version@
-vte_gtk4_api_version = @vte_gtk4_api_version@
+vte_api_version = @vte_api_version@
 
 #
 
@@ -24,11 +23,25 @@ NTHREADS = 1
 NJOBS = -j$(NTHREADS)
 NINJA = ninja $(NJOBS)
 
+MESON = meson
+
 #
 
 all:
 	$(NINJA)
 
+gtk3:
+	$(NINJA) src/app/vte-$(vte_api_version)
+
+gtk4:
+	$(NINJA) src/app/vte-$(vte_api_version)-gtk4
+
+doc-gtk3:
+	$(NINJA) doc/reference/vte-$(vte_api_version)
+
+doc-gtk4:
+	$(NINJA) doc/reference/vte-$(vte_api_version)-gtk4
+
 check:
 	MESON_TESTTHREADS=$(NTHREADS) $(NINJA) test
 
@@ -38,11 +51,16 @@ clean:
 coverage:
 	$(NINJA) coverage
 
-doc:
-	$(NINJA) vte-$(vte_gtk3_api_version)-doc
+doc: doc-gtk3 doc-gtk4
 
 install:
 	$(NINJA) install
 
 uninstall:
 	$(NINJA) uninstall
+
+dist:
+	$(MESON) dist --no-tests
+
+distcheck:
+	$(MESON) dist
diff --git a/NEWS b/NEWS
deleted file mode 100644
index 31cc6b4..0000000
--- a/NEWS
+++ /dev/null
@@ -1,1244 +0,0 @@
-0.49.1
-======
-* Implement hyperlink feature (Egmont Koblinger, #779734)
-* Bug fixes
-
-0.45.90
-=======
-
-* VTE now depends on PCRE2, and GRegex (which uses PCRE1 internally)
-use is deprecated.
-
-0.37.0
-======
-* New API: vte-2.91
-* Many improvements and bug fixes
-* Translation updates
-
-0.36.0
-======
-* Build fixes (#726604)
-* Docs updates
-
-0.35.90
-=======
-* prompt: Use precmd hook on zsh (#724982)
-* Fix many compiler warnings
-* Remove obsolete gtk+-2.0 conditional code
-* Support OSC 19 and 119 sequences (#725974)
-* Also pass Ctrl-F1 to applications (#726438)
-* Nicer box drawing characters (#709556)
-
-0.35.2
-======
-* Colour palette handling fixes (#640040)
-* Add support for OSC 104 (reset colors) (#640040)
-* Add support for OSC 1?1[017] (fg, bg, highlight colors) (#640040)
-* Add support for OSC 112 (reset cursor color) (#640040)
-* Make OSC response use the same terminator as the query (#722446)
-* Maintain selection when rewrapping (#722635)
-* Fix selection with widget padding adjustment (#722873)
-
-0.35.1
-======
-* Support for 16 million colors (#704449)
-* Fix Home/End and some other keys (#600659, #643233, #710349)
-* Add API to enable/disable rewrap on resize (#336238)
-* Fix a longstanding performance regression (#721944)
-* Bug fixes (#586950, #619891, #672210, #685759, #691972, #720977, #721522)
-
-0.35.0
-======
-* Build fixes
-* Portability fixes (#710165)
-* Rewrap contents upon window resize (#336238)
-* Bug fixes (#4993, #13299, #542087, #686097, #693013, #705985, #709692,
-  #709584, #709930, #710426, #710481, #710483, #710484, #710488, #710486)
-
-Many thanks to Egmont Koblinger who contributed most of these bug fixes!
-
-0.34.9
-======
-* Lines disappear after positioning back the cursor (#708496)
-* Garbage displayed after resizing whilst using an alternate screen (#415277)
-* vte uses too many file descriptors (part of #646098)
-* Incorrect scrollbar position after the "less" command (#676075)
-* Add support for DEC 1007 to set the alternate scroll mode (#518405, #709060)
-* Use O_TMPFILE when available (#704705)
-* Improvements to scrollback storage (#637275) 
-* Aborts on assertion (#676075)
-* zsh - lots of blank space upon resizing VTE based terminals (#708213)
-* Misc fixes
-
-0.34.8
-======
-- Build fixes
-- Fix crash on pathological fonts (#708196)
-- Use correct character attributes around graphic characters (part of #707221)
-- Make extended fore/background colour handling more xterm-like (#616436)
-
-0.34.7
-======
-- Honour gtk-enable-primary-paste setting
-- Redraw when changing colours (#702415)
-
-0.34.6
-======
-- vte.sh bugfix
-- Add new flag for vte_terminal_fork_command_full() to not copy the 
-  parent  environment
-- Allow the empty string to OSC 6 and OSC 7 to unset a previously
-  set value
-
-0.34.5
-======
-- Improved vte.sh script (#697475): It is now not necessary anymore
-  to manually change PS1. On distributions that automatically source
-  /etc/profile.d/*.sh scripts for all interactive shells (ie Fedora),
-  no manual intervention is needed at all; for others the only change
-  required is to source the vte.sh script.
-  Also, the script now works for both bash and zsh shells.
-
-0.34.4
-======
-- Improved vte.sh script (#697225)
-
-0.34.3
-======
-- Introspection fixes (#676999, #690003)
-- Build fixes (#690554)
-- Portability fixes (#694494)
-- Translation updates
-
-0.34.2
-======
-- Translation updates
-
-0.34.1
-======
-* End selection mode misses Shift release (#683730)
-* Don't report shift-left-button release (#683729)
-* xterm extended mouse tracking mode (#681329)
-* Support SGR 3 (italic text) (#685223)
-
-0.34.0
-======
-* Support escape sequences to set the current directory (#675987)
-* Fixed drawing of Box Drawing and Block Elements characters (#682692)
-* Introspection fixes (#679805, #681714)
-* Build fixes
-
-0.32.2
-======
-- emulation: Fix DoS by malicious escape sequences (#676090)
-- widget: Fix crash with NULL tag in match_check (#676886)
-- keymap: Treat ALT as META (#663779)
- 
-0.32.1
-======
-- pty: Fix custom child setup function (#672649)
-- leak fix in vte_draw_set_text_font() (#672757)
-- emulation: Fix off-by-one error in interpretation of ECH (#670037)
-
-0.32.0
-======
-- Use GResource for our default termcap
-- build fixes for interix (#652290)
-- Allocate PTYs with openpty on BSD (#670758)
-- Introspection fixes (#648183, #655402, #661716)
-- Fix mouse whell scrolling with gtk+ 3.4 (#671305)
-- Use correct library name for glade integration (#671760)
-- gnome-pty-helper: Respect SUID_CFLAGS and SUID_LDFLAGS (#670732)
-
-0.31.0
-======
-- Don't override the widget background colour
-- Add missing (closure) annotation on VteSelectionFunc (#655405, Evan Nemerson)
-- use gtk_drag_check_threshold() (#654691, Dan Winship)
-- Add urxvt extended mouse tracking mode support (#662423, Egmont Koblinger)
-- Add runtime check for X11 display (#660151, Young-Ho Cha)
-- Build fixes (#661121, #616001)
-- Translation updates
-
-0.30.1
-======
-- Translation updates
-
-0.30.0
-======
-- Translation updates
-
-0.29.1
-======
-- Bugs fixed:
-  - Bug 657581 - gdk-3.0 supports multiple targets; the "target" variable is gone
-  - Bug 657584 - vte needs to properly set VTE_API_VERSION
-
-0.29.0
-======
-- Drop GTK 2 support
-- Fix accessibility with GTK 3.1 (#654630)
-- Translation updates
-
-0.28.1
-======
-- Bugs fixed:
-   * Bug 652124 - malicious escape sequence causes gnome-terminal to exhaust memory
-- Translation updates
-
-0.28.0
-======
-- Bugs fixed:
-   * Bug 642184 - vte does not build against new glade (with gladeui-2.0)
-- Translation updates
-
-0.27.90
-=======
-- Fix shrinking terminal on gtk3
-- Translation updates
-
-0.27.5
-======
-- Fix build with recent GTK+
-- Translation updates
-
-0.27.4
-======
-- Fix build with recent GTK+
-- Introspection fixes for fork_command_full
-- Translation updates
-
-0.27.3
-======
-- Add a gsettings .enums.xml file for vte's enum types
-- Fix build with latest gtk 3
-- Fix introspection annotations and require gobject-introspection 0.9.0
-- Bugs fixed:
-  * Bug 628870 - Clarify error message
-- Translation updates
-
-0.27.2
-======
-(See git log)
-
-0.27.1
-======
-
-- Bugs fixed:
-  * Bug 631589 - Pass the correct TERM value inside envp when spawning
-  * Bug 631903 - Report correct minimum/natural sizes for GTK+ 3
-  * Bug 632257 - vte leaks FDs
-- Translation updates
-
-0.25.90
-=======
-
-- Make vte parallel-buildable with gtk 2 and gtk 3
-- Bugs fixed:
-  * Bug 617690 - Setting default fg color should not cancel underline
-  * Bug 614658 - text selection with mouse is buggy when using the shift key
-  * Bug 618749 - set terminal widget background color to terminal background
-  * Bug 601926 - Don't hardcode meta to alt
-  * Bug 618097 - Broken backtab (cbt)
-  * Bug 621298 - Cursor invisible (plain black) in (xfce) Terminal & terminator
-  * Bug 626676 - Cleanup vte_terminal_determine_colors
-  * Bug 620493 - strict aliasing warning
-- Translation updates
-
-0.25.1
-=======
-- Add support for searching the buffer.  New public API:
-  vte_terminal_search_[sg]et_regex
-  vte_terminal_search_find_(previous|next)
-
-0.24.1
-======
-- Bugs fixed: https://bugzilla.gnome.org/buglist.cgi?status_whiteboard_type=substring;chfieldto=2010-04-26%2012%3A00%3A00;query_format=advanced;chfieldfrom=2010-03-29;status_whiteboard=fixed-0-24;bug_status=RESOLVED;resolution=FIXED;product=vte
-- Translation updates
-
-0.24.0
-======
-- Updated API docs
-- Cache backgrounds as cairo surfaces
-- Translation updates
-
-0.23.5
-=======
-- Fix unintented soversion bump
-
-0.23.4
-=======
-- Add public API vte_terminal_write_contents()
-- Update docs
-
-0.23.3
-=======
-- Disable symbol deprecation stuff since they were broken
-- Merge pangocairo draw impl into vtedraw (Kristian Høgsberg)
-- Bugs fixed in this release:
-    Bug 534526 - Flickering when resizing a vte widget
-    Bug 605299 - Please support xterm bracketed paste mode
-
-0.23.2
-=======
-- Fix overflow with unlimited scrollback lines
-- Require glib >= 2.22.0
-- Deprecate vte_terminal_get_padding
-- Add VteTerminal::inner-border style property
-- vteapp: Add --cursor-shape option
-- Bugs fixed in this release:
-    Bug 604966 - Fix "select all" to include text occurring after the visible region
-    Bug 604135 - [PATCH] fix behaviour of set-scrolling-region
-    Bug 603733 - Remove deprecated Glib symbol
-    Bug 603713 - ibeam/underline cursor broken with large inner-border
-    Bug 471920 - Expose the border width property
-    Bug 601265 -  gnome-terminal assert failure: table.c:723:_vte_table_match
-    Revert "Bug 591648 - Don't clear the screen when switching to the alternate screen"
-
-0.23.1
-=======
-- Various crash and bug fixes
-- Rework mouse selection to be more robust.  In particular, PRIMARY selection
-  now only changes when mouse button is released, not upon every motion when
-  selecting.
-- Interpret and document negative number of scrollback lines as infinite
-- We now chain unhandled motion-notify events up such that the parent widget
-  can give them a shot.
-- Bugs fixed in this release:
-    Bug 597604 - assertion failed: (_vte_ring_contains (ring, position))
-    Bug 598124 - The selection does not only change when the mousebutton is released
-    Bug 598090 - LMB Mouse up event not registered when opining context popup menu
-    Bug 587463 - "select all"+copy from gnome-terminal includes lines no longer in scrollback
-    Bug 585370 - Incomplete disabling of python
-    Bug 597242 - libvte color and cursor glitches
-    Bug 591648 - Don't clear the screen when switching to the alternate screen
-    Bug 595445 - Motion notify events are not propagated to parent widget
-    Bug 569184 - vte generates unnecessary ioctl(I_FIND) kernel warnings
-    Bug 599444 - Scrollback index type mess
-    Bug 598814 - text.getText(0, -1) triggers assertion in vteaccess.c
-    Bug 596739 - Python bindings leak memory
-    Bug 597165 - void return in vte.c
-    Bug 587894 - the environment passing with python does no longer work
-
-0.22.2
-=======
-- Fix crash introduced in previous release
-- Fix a11y assertion failure
-- Improve selection at the end of row
-- Bugs fixed in this release:
-    https://bugs.launchpad.net/ubuntu/+source/gnome-terminal/+bug/435646
-    Bug 596444 - word-select includes \n when the word ends at the edge of the terminal
-    Bug 596460 - 0.22.1 kills vte based apps
-
-0.22.1
-=======
-- Fix crash on terminal reset
-- Fix build on Solaris
-- Bugs fixed in this release:
-    Bug 596365 - libvte crashes when issueing 'reset' in a terminal
-    Bug 588033 - background tabs may lose lines off the bottom of the scrollback
-    Bug 596163 - Doesn't display expected background color in ncurses apps
-    Bug 596011 - Problem compiling vte 0.22.0 on Solaris
-
-0.22.0
-=======
-- New stable release series
-
-0.21.7
-=======
-- Fix tab and wide-char handling
-- Revert symbol-hiding that was breaking build in some cases
-
-0.21.6
-=======
-- Another rewrite of the ring.  Stores ring data on tmp files on disk now.
-  Please report any regressions.
-- Mark library-internal symbols as such
-
-0.21.5
-=======
-- Finish ring rewrite.  Scrollback buffer consumes ten times less
-  memory now, and better, doesn't allocate from the heap, so closing
-  tabs actually releases memory.
-
-0.21.4
-=======
-- Remove another stale assert()
-- Oops, use the right map decoding function is iso2022 code
-
-0.21.3
-=======
-- Really fix the ring this time
-- Enable g_assert().  May trigger some bogus ones now.  Please report.
-
-0.21.2
-=======
-- Bugs fixed in this release:
-    Bug 592990 - gnome terminal crashes with glibc detected
-
-0.21.1
-=======
-- Redesigning the vte buffer ring is going on.  Please report any misbehavior
-- Bugs fixed in this release:
-    Bug 590824 - gnome-terminal crashed with SIGSEGV after hiting ctrl+o
-    Bug 572230 - text mode program rendering is strange in cjk locale.
-    Bug 588200 - bashisms in shell scripts
-
-0.20.5
-=======
-- Followup release to undo unintentded .soname bump
-
-0.20.4
-=======
-- New enum value VTE_ERASE_TTY.
-- Make VTE_ERASE_AUTO send \H for backspace if terminal erase is undefined.
-- Bugs fixed in this release:
-    Bug 584281 - build: avoid double installation of xterm
-    Bug 543379 - VTE sends NUL/^@ for backspace
-
-0.20.3
-=======
-- Bugs fixed in this release:
-    Bug 583129 - [python] allow passing None as command or directory option
-    Bug 583078 - [python] allow passing of environment as a dictionary
-
-0.20.2
-=======
-- Bugs fixed in this release:
-    Bug 567064 - Work around buggy iconv
-
-0.20.1
-=======
-- Bugs fixed in this release:
-    Bug 574491 – gnome-pty-helper can prevent volumes from being unmounted
-    Bug 576504 – vte does not pass its testsuite.
-    Bug 573674 – reset resets width to 80 chars
-    Bug 576797 – Double-click sometimes stops working
-
-0.20.0
-=======
-- Support using a real bold font instead of pseudo-bolding
-- Respond to fontconfig configuration changes
-- Bugs fixed in this release:
-    Bug 54926 – Should try bold version of font before pseudo-bolding
-    Bug 570208 – vte fails to build outside source tree
-    Bug 548272 – Fix output of CSI 13,14, 18-21
-    Bug 565688 – [gnome-pty-helper] using openpty in a bad way
-    Bug 566795 – VTE fails to build in trunk
-    Bug 524170 – Support initc terminfo capability and change-cursor-color
-    Bug 566730 – vte_terminal_set_color_cursor() calls invalidate_all but
-                 it doesn't have to
-    Bug 565679 – alloca is discouraged
-    Bug 565675 – typo in configure.in cause ncurses checking fail
-    Bug 565663 – compile failure because use static function in another .h
-                 file
-    Bug 575398 – configure warns about term.h under OpenSolaris
-    Bug 574616 – "real" transparency not working from python bindings
-    Bug 574025 – Crash in _vte_terminal_insert_char
-
-0.19.4
-======
-- Support for correct rendering of combining characters
-- Fix background rendering.
-- Misc bug fixes.
-- Bugs fixed in this release:
-	Bug 564535 – check for gperf in autogen.sh
-	Bug 149631 – gnome-terminal doesn't combine combining chars in utf8
-	Bug 564057 – src/pty.c does not compile with
-		--disable-gnome-pty-helper
-	Bug 562695 - ship pkg-config file for python bindings
-	Bug 563752 – pangocairo backend recreates cairo_surface_t for
-		background drawing
-	Bug 163213 – Cursor should remain visible when selected
-
-0.19.3
-======
-- Really fix the rendering bug.
-- Bugs fixed in this release:
-	Red Hat Bug 474618 -  gnome-terminal sometime leaves empty begining
-		of the line
-
-0.19.2
-======
-- Rewrote text selection.  Much less buggy now.  Specially block-mode.
-- Fixed rendering bug caused by wrong tab handling introduced in 0.19.0.
-- More deprecation.  VteReaper is deprecated and will be removed in 1.0.
-- Minor optimizations in the pangocairo backend.  Only one FcFontSort now
-  instead of the previous two.
-- Bugs fixed in this release:
-	Red Hat Bug 474618 -  gnome-terminal sometime leaves empty begining
-		of the line
-	Bug 563274 – Misspelled word in src code
-	Bug 563024 – In alternate-screen, selection can copy out of screen
-		boundaries
-	Bug 552096 – Detect tgetent if provided by libtinfo
-	Bug 559818 – redundant selection-changed signal on deselection
-	Bug 471480 – select single character
-	Bug 110371 – Cannot select newline at end of full line
-	Bug 112172 – Get rid of VteReaper
-	Bug 560667 – invalid definition of VTE_INVALID_SOURCE
-	Bug 541441 – Dehighlight links on visibility notify?
-
-0.19.1
-======
-- New, PangoCairo, rendering backend.  This is functionally equivalent to the
-  previous default backend which was Xft.  And just a tad bit faster.
-- All other backends are removed.
-- Configurable cursor shape (block, underline, I-beam).
-- Preliminary object properties added to VteTerminal.
-- Vte now depends on glib, pango, gtk+, and nothing else.
-- API that will be removed in vte 1.0 has been marked deprecated in this
-  release.
-- gnome-pty-helper does no longer depend on and link to glib
-- General code maintenance and cleanup.
-- Misc bug fixes.
-- Bugs fixed in this release:
-	Bug 562806 – crash in Terminal: Typing "cd " just after ...
-	Bug 562511 – scrollbar doesn't sit at the bottom
-	Bug 540951 – The gnome-pty-helper is spawn when its not needed
-	Bug 465036 – gnome-pty-helper locks /var/run/utmp
-	Bug 127870 – terminal garbled and needs 'reset' after cat'ing file
-	Bug 317236 – vte resynchrones too late on invalid UTF-8
-	Bug 107031 – device-control-string error
-	Bug 521420 – vte closes connection to child before all output is read
-		Patch from Thomas Leonard
-	Bug 514632 – Problem with cursor in emacs in gnome-terminal
-	Bug 459553 – gnome-terminal cannot shows circled digits with the
-		correct width on ja_JP.PCK
-		Patch from Takao Fujiwara
-	Bug 562385 – gnome-pty-helper goes to 100% cpu usage
-	Bug 562332 – cleanup font infos on exit?
-	Bug 562338 – don't need to connect to bunch of xft settings
-	Bug 488960 – gnome-terminal on Solaris 10 does not clean up utmpx on
-		exit (intermittent)
-	Bug 561366 – remove antialias setting for 1.0
-	Bug 562187 – Add make rules for calling gperf
-	Bug 416518 – Do something about uniwidths
-	Bug 500191 – Remove vteseq-table.h?
-	Bug 514457 – Use g_strv_length()
-	Bug 542561 – Doesn't build when disabling gnome-pty-helper
-	Bug 560766 – Deprecate and remove vte_terminal_get_using_xft()
-	Bug 536894 – Confusing use of "free" as variable-name in ring
-		functions
-	Bug 561713 – crash on font cache cleanup
-	Bug 560819 – Remove obsolete backends
-	Bug 560818 – pangocairo backend doesn't share font cache across
-		widgets
-	Bug 560977 – Cleaning up GTK Includes in vte
-	Bug 561185 – pangocairo backend sets antialias incorrectly
-	Bug 560817 – pagocairo backend doesn't have correct opacity support	
-	Bug 560991 – Unsetting background doesn't work
-	Bug 395599 – Add pangocairo backend
-	Bug 557375 – >=vte-0.16.14 breaks highlighting on activity
-        Bug 556398 – maybe deprecate vte_terminal_get_char_ascent/descent
-        Bug 339819 – LibVTE terminals in GLADE
-        Bug 399364 – Implement properties
-        Bug 556328 – Document set-scroll-adjustment parameters
-	Bug 549835 – Feature Request: Configurable cursor appearance
-        Bug 509204 – child-exited signal does not provide exit code
-        Bug 539130 – building g-t fails due to GtkType etc. deprecation
-
-0.17.4
-======
-- Translation updates
-
-0.17.3
-======
-- Update python bindings to bind new API from 0.17.1
-- Bugs fixed in this release:
-	Bug 538344 – Anjuta hangs when program is executed in terminal
-
-
-0.17.2
-======
-- Bugs fixed in this release:
-	Bug 546940 – Crash when selecting text
-
-0.17.1
-======
-- New API to:
-  * Make the cursor blinking follow the gtk setting by default, with a
-    possible override.
-  * Set named cursors on matches.
-  * Do GRegex matching, to be used alternatively to the old vteregex matching.
-  * Add set-scroll-adjustments signal, needed to allow adding a VteTerminal
-    into a GtkScrolledWindow.
-  * Add version check macro.
-- Misc bug fixes.
-- Bugs fixed in this release:
-	Bug 546366 – hard to select last tab char on a line
-	Bug 545924 – tab characters not handled correctly after ncurses clear	
-		Patch from Patryk Zawadzki
-	Bug 542795 – VTE_CJK_WIDTH don't work
-        Bug 399744 – Hide more font-aa implementation details
-        Bug 510903 – use gtk-cursor-blink setting
-        Bug 539130 – building g-t fails due to GtkType etc. deprecation
-	Bug 540182 – crash in geany with vte trunk
-	Bug 535552 – vte_terminal_set_allow_bold doesn't queue redraw
-        Bug 535469 – support named cursors on matches
-        Bug 418918 – Switch to GRegex
-        Bug 535467 – implement set-scroll-adjustments signal
-        Bug 535468 – need version check macros
-	Bug 515972 – Bold black is black in vte's default palette
-
-0.16.14
-=======
-- Bugs fixed in this release:
-	Bug 536632 – vte build failure in ring.c:210: error: expected
-		expression before 'do'
-	Bug 535022 – ambiguous width in utf8 locale
-	Bug 534148 – Use g_listenv() instead of environ
-	Bug 516869 – vte displays nothing on GTK+/DirectFB
-		Original patch by Jérémy Bobbio.
-	Fix "GLib-CRITICAL **: g_io_add_watch_full: assertion
-	                       `channel != NULL' failed"
-
-0.16.13
-=======
-- Minor optimization.
-- Bugs fixed in this release:
-	Bug 517709 – VTE's pty.c makes 4096 getrlimit calls when it only needs
-	one
-	Bug 449131 – Wrong gettext domain
-
-0.16.12
-=======
-- More work around Gdk backends that don't issue GdkVisibilityNotify.
-- Bugs fixed in this release:
-	Bug 503164 – Drawing problems for VTE with gtk+-quartz
-	Bug 449131 – Wrong gettext domain
-
-0.16.11
-=======
-- Work around Gdk backends that don't issue GdkVisibilityNotify.
-- Try transliteration when pasting text into a non-UTF-8 locale.
-- Bugs fixed in this release:
-	Bug 503164 – Drawing problems for VTE with gtk+-quartz
-	Bug 319687 – Pasting of text containing characters not in the
-		terminal's encoding silently fails
-
-0.16.10
-=======
-- Smart tab character: you can now copy/paste tab characters printed by cat,
-  diff, and other line-oriented tools and get the tab character in the
-  clipboard, instead of multiple spaces.  The selection indicates that by
-  being all or none.
-- Misc bug fixes and optimizations.
-- Bugs fixed in this release:
-	* src/vtedraw.c (_vte_draw_init_user): Make VTE_BACKEND=list list
-	available backends to stderr.
-
-	Bug 497246 – Kill vte_iso2022_fragment_input
-	Bug 412435 – Invalid variable name in Makefile.am
-	Bug 416561 – Rendering issue in VtePango
-	Bug 416558 – Rendering errors in VteFT2
-	Bug 403217 – Outdated README
-	Bug 118967 – single line scrolling with "Ctrl+Shift+ArrowUp/ArrowDown"
-		Patch from Mauricio and Mariano Suárez-Alvarez
-	Bug 353610 – Don't convert tab characters upon copying
-	Bug 499892 – strikethrough line is too high
-	Bug 499891 – vte with opacity set, shows invisible chars
-	Bug 499896 – Alternate charset isn't an attribute, though we treat it
-		as one.
-	Bug 499893 – cell.attr.protect is unused
-	Bug 499287 – Fix doc coverage regression
-	Bug 142640 – FcConfigSubstitute in place of _vte_fc_defaults_from_gtk
-		to get antialias and hinting value
-	Bug 439384 – gnome-terminal on feisty crashes when giving wrong locale
-		environment
-	Bug 483642 – vte_terminal_feed crash when 8190 characters passed
-	Bug 480735 – Underlining whitespace not reliable
-		Original patch by Steven Skovran.
-
-0.16.9
-======
-- Slightly improved pango backend
-- Misc bug fixes.
-- Bugs fixed in this release:
-	Bug 469862 – Handling of wrapped links in gnome-terminal is broken
-	Bug 471901 – troubles with pad
-	Bug 153265 – Handle Sun Cut, Copy, Paste keys
-		Patch by Brian Cameron.
-	Bug 471484 – vteapp resize weirdness
-	Bug 434230 – Spaces are not underlined
-		Original patch by Santtu Lakkala.
-	Bug 450069 – vte crash on removing a terminal tab
-
-0.16.8
-======
-- Quick followup release with no code changes, to fix missing
-  documentation index in the tarball.
-
-0.16.7
-======
-- Misc bug fixes.
-- Bugs fixed in this release:
-	Bug 337252 – ALT + Arrow keys don't work in irssi through gnome-terminal
-		Patch by James Bowes
-	Bug 448259 – Mapping for Ctrl-_
-		Patch by Andrey Melnikov.
-	Bug 449809 – use python-config to get python includes
-		Patch by Sebastien Bacher.
-	Bug 450745 – VTE's response to CSI 2 1 t incorrectly formatted
-		Patch by Dale Sedivec.
-
-0.16.6
-======
-- Misc bug fixes.
-- Bugs fixed in this release:
-	Bug 445620 – Some characters shows different in different locales.
-		Patch from Zealot
-	Bug 372743 – vte_terminal_set_colors doesn't work as advertised
-
-0.16.5
-======
-- Fix issue with 'some strange "underline" line where cursor is
-  located and blinking'.
-
-0.16.4
-======
-- Misc bug fixes.
-- Bugs fixed in this release:
-	Bug 429278 – Cursor drawn strangely in joe
-	cf Bug 439247 – scrolling vim in full screen is painfully slow and takes up 100% of the cpu
-	Bug 440475 – Display glitch with transparent backgroud
-	Bug 375112 – ctrl-key combinations yielding just key
-		Original patch by  and refactored by Loïc Minier.
-	Bug 440377 – gnome-terminal cannot refresh terminal when accessibility enabled
-		Original patch by Li Yuan.
-	Bug 433776 – gnome-terminal crashes when open preedit area
-
-0.16.3
-======
-- Remove false warnings about missing glyphs in the Xft backend.
-- Rename --enable-debugging configure option to --enable-debug to
-  match other modules.
-- Fix some of refresh issue where terminals stopped updating after
-  changing workspaces.
-- Bugs fixed in this release:
-	Bug 429189 – Vte-WARNING's
-	Bug 415044 – Use --enable-debug rather than --enable-debugging
-	Bug 414716 – Refresh issue after changing workspaces
-
-0.16.2
-======
-- Consider ambiguous-width chars if VTE_CJK_WIDTH env var is set and we
-  are under a CJK locale.
-- Minor optimization
-- Bugs fixed in this release:
-	Bug 431799 – Regex highlighting is broken
-
-0.16.1
-======
-- Lots of bug fixes by Chris Wilson
-- New feature: mouse scroll-wheel now feeds three arrow-up/down keys to the
-  terminal if in the "alternate" mode.  The alternate mode is used by apps
-  like vim, less, emacs, screen, etc.  This makes the scroll-wheel usable
-  in a state that it was of no use before.
-- Bugs fixed in this release:
-	Bug 426870 – vte often passes NUL to functions requiring valid unichar
-	Bug 419644 – Links do not get highlighted anymore
-	Bug 404757 – URL matching doesn't work with PCRE
-	Bug 426541 – crash on IRM escape code
-	Bug 424184 – Make scroll wheel send Page Up/Down when it makes sense
-		Original patch by Shaun McCance and refined by Baris Cicek.
-	Bug 425767 – vte_terminal_set_color_highlight should test for
-		NULL before _vte_debug_print
-	Bug 422385 – vte appears at the top of the root window even when
-		packed at the bottom of it
-		Patch by Dodji Seketeli.
-	Bug 420935 – glyph can be cropped with not fitting in a cell
-	Bug 420067 – Does not handle expose events whilst processing
-		unseen incoming data
-	Bug 415381 – Improve performance of vte_terminal_insert_char()
-	Bug 418073 – Opacity ignored for vtexft
-	Bug 418910 – Asymmetric scrolling with mouse wheel
-	Bug 416634 – Rendering glitch as autowrapped chars are outside
-		invalidated bbox
-	Bug 416635 – Rendering glitch: double draw of line below exposed region
-	Bug 418588 – Invalid read when drawing preedit cursor
-	Bug 417652 – Scrolling bug exposed by nvi
-	Bug 417301 – Terminal widgets don't respond to DPI changes
-
-0.16.0
-======
-- Fix some minor bugs.  More regressions to be fixed later.
-- Bugs fixed in this release:
-	Bug 414716 – gnome-terminal-2.17.92: terminal window dies...
-	Bug 414586 – Terminal screen blinks when menu is opened for the first time
-	Bug 413068 – new line added to tab when opened
-
-0.15.6
-======
-- Fix various bugs introduced in last couple of releases.
-- Bugs fixed in this release:
-	Bug 410534 – Slow content scrolling, takes 100% of CPU.
-	Bug 413068 – new line added to tab when opened
-	Bug 413262 – Incorrectly coloured tabs
-	Bug 413102 – Incorrect highlighting in vim
-	Bug 413158 – Cursor trails
-	Bug 413078 – Crash during opening a new tab whilst scrolling
-	Bug 412717 – Crash when opening a new tab with window maximized
-
-0.15.5
-======
-This is a quick followup release to 0.15.4 to fix a crasher recently
-introduced.
-- Fix a newly-introduced crasher
-- Do not link to libpython in the python bindings
-- Bugs fixed in this release:
-	Bug 412562 – Crash in vte_terminal_match_hilite_update
-	Bug 410986 – Fails to build with -z defs
-
-0.15.4
-======
-This is yet another release including awesome work of Chris Wilson.
-Hopefully mostly bugs fixed with this release and not many introduced.
-- Bugs fixed in this release:
-	Bug 412361 – Yet another mouse selection regression...
-	Bug 411000 – Orca repeats old text in gnome-terminal
-	Bug 410534 – Slow content scrolling, takes 100% of CPU.
-	Bug 410463 – Poor interactive performance with multiple terminals
-	Bug 159078 – slow highlight
-	Bug 411276 – SVN trunk compilation error
-	Bug 410986 – Fails to build with -z defs
-		Patch by Loïc Minier.
-	Bug 410819 – slider not correctly positioned after calling less
-	Bug 410534 – Slow content scrolling, takes 100% of CPU.
-	Bug 410463 – Poor interactive performance with multiple terminals
-	RedHat Bug 113195: First line displayed incorrectly if prompt changes background color
-	RedHat Bug 123845: gnome-terminal not parsing cursor position escape sequence properly
-	Bug 409055 – Terminal stays blank
-	Bug 409241 – gnome-terminal crashed with SIGSEGV in vte_terminal_draw_graphic()
-	Bug 407945 – "GNOME" Terminal" regression after "vte" update when using "csh"
-	Bug 408536 – trouble compiling vte 0.15.3
-	Bug 408040 – vte automagic hyperlinks
-		Patch by Gilles Dartiguelongue.
-	Bug 407839 – Use of environ breaks build on Solaris
-		Original patch by Damien Carbery.
-	Bug 407358 – regression in mouse selection
-
-0.15.3
-======
-This is another release including awesome work of one Chris Wilson.  Lots of
-bugs with the previous release are fixed in this one and some new ones are
-introduced.  Doh!
-
-- Faster control sequence matching, using gperf-generated tables now
-- Faster regex matching
-- Improved expose handling
-- Improved control sequence matching
-- Various optimizations
-- Various cleanups
-- Bugs fixed in this release:
-	Bug 407091 – vte_terminal_fork_command() env argument changed semantic
-		in 0.15.2
-		Original patch by Michael Vogt.
-	Bug 323393 – Hyper-sensitive selection
-	Bug 406763 – Selecting double-wide characters
-	Bug 363597 – Scrollback in profile dialog doesn't work
-	Bug 345344 – Pattern matching is inefficient
-	Bug 324246 – Performance degredation with large numbers of highlighted
-		addresses/URLs
-	Bug 86119 – "select all" feature
-		Original patch by Simone Gotti.
-	Bug 342059 – ASCII escape sequences don't work as expected
-		Patch by Mariano Suárez-Alvarez.
-	Bug 404757 – URL matching doesn't work with PCRE
-	Bug 403028 – decset mode 12 = blinking cursor
-	cf Bug 342338 – suffers from memory fragmentation
-	Bug 106618 – CJK 'fixed width' font and 's p a c e d o u t' issue
-	cf Bug 83285 – Treacle-slow scrolling in gnome-terminal on
-		unaccelerated X server
-	Bug 322241 – Please switch to pkg-config to check for freetype
-	Bug 322240 – Usage of pkg-config privates header
-	cf Bug 403275 – crash in Terminal: I was typing reset on th...
-	Bug 403159 – XftDrawSetClipRectangles() silently fails on ppc->i386
-	Bug 382245 – __PyGtk_API multiply defined in python module
-	Bug 155687 – Scroll region \E[NN;MMr should set cursor to home
-	Bug 147784 – cursor unvisible under mouse highlight
-	Bug 368894 – crash in Terminal: I started gnome-terminal...
-	Bug 402329 – Rendering problem with underlines and cursor
-	Bug 336105 – gnome-terminal crashes when termcap not found
-	Bug 401215 – Multi-pass renderering
-	Bug 157267 – _vte_terminal_fudge_pango_colors() breaks Japanese input
-		style
-		Patch by ynakai@redhat.com.
-	Bug 400834 – Use a global display/process timeout
-	Bug 401082 – double-draw issue
-	Bug 318307 – Cursor colour changes to foreground when unfocused
-	Bug 317449 – The cursor disappears when clicking on windows above
-		gnome-terminal
-	Bug 400759 – update problem with vte trunk
-	Bug 400671 – crash in Terminal: detaching of tabs
-	Bug 399137 – UTF-8 problem in VteAccess
-	Bug 400493 – Mouse selection seriously broken
-	Bug 400438 – _vte_invalidate_all triggered on GDK_VISIBILITY_UNOBSCURED
-	cf Bug 400072 – Handling of ; in control sequences
-	cf Bug 399617 – Avoid memory allocations during an expose event.
-	Bug 147495 – screen flicker when opening new terminal windows
-	Bug 334755 – Incomplete information from vte_terminal_get_font
-	Bug 400184 – _vte_pty_open declaration mismatch - breaks on Solaris
-	Bug 335269 – Change the way vte handles PangoFontDescription behind
-		vte_terminal_set_font
-	Bug 123591 – vte_terminal_fork_command succeeds even when it does not
-
-0.15.2
-======
-This is a very exciting release.  Most of the changes are made by Chris Wilson
-who just got access to the vte repository.  On his first day he committed more
-than 20 large patches, cleaning various parts of the code base and optimizing
-too!  As a result of huge changes in this release, some regressions, specially
-on less common systems/architectures is expected.  Please file bugs.
-
-Highlights of improvements in this release:
-- Moving around in vim and mc is a lot faster now, thanks to much
-  smaller areas that will be redrawn with this release.
-- Mouse wheel is usable in mc now, since we don't generate release
-  events for scroll wheel events anymore.
-- Faster.  One of the internal timers was completely removed, and
-  lots of unnecessary work is not done anymore.  Particularly when
-  the widget is not visible.
-- Switched to using g_spawn_async to fork the child process, so we
-  can now enjoy the error checking implemented in that functions.
-  Failed forks now return an error message.
-- Accessibility improvements.
-- New environment variable VTE_BACKEND, to choose which rendering
-  backend to use.  The old VTE_USE_* env vars are deprecated and
-  not functional anymore.
-- Bugs fixed in this release:
-	Bug 399137 - continuation.
-	Bug 132316 – terminal widget's context menu posting isn't exposed as an AtkAction
-		     Original patch by 
-	Bug 156161 – AccessibleText_getTextAtOffset returns wrong values in gnome-terminal
-		     Patch by 
-	Bug 399137 – UTF-8 problem in VteAccess
-	Bug 123591 – vte_terminal_fork_command succeeds even when it does not
-	Bug 345514 – -no-undefined doesn't work with latest libtool
-	Bug 162003 – vte configure.in X checking can fail
-	           – though this may cause other regressions!
-	Bug 314669 – Please specialize AC_PATH_XTRA
-	Bug 389538 – crash in Terminal: nothing
-	Bug 161479 – Scroll wheel generates Release events
-	Bug 398602 – Build Failure
-	Bug 397724 – Orca incorrect echo's certain input in gnome-terminal
-		     when key echo is set to off (on Ubuntu Feisty).
-	Bug 398244 – Gnome-terminal opens a huge sized window
-	Bug 398243 – Crash
-	Bug 398116 – lags behind when widget not visible
-	Bug 398083 – background not painted correctly when starting up
-	Bug 397414 - port vteapp to GOption
-	Bug 395373 - Allow the user to specify backend priorities.
-	Bug 346554 – Fancy prompt triggers update problem
-	Bug 397439 – Performance enhancement patch series
-	Bug 161342 – Vte slow with mc and vim
-	Bug 387171 – vte fails to install on FreeBSD due to missing header
-		     Patch from Roy Marples
-	Bug 396831 – Unable to compile without X
-		     Patch from Chris Wilson
-	Bug 394890 – Segfault when running vte or gnome-terminal
-
-0.15.1
-	Bug 354061 – Excessive use of strlen by _vte_termcap_create
-		     Patch from Ryan Lortie
-	Bug 387475 – Gtk-Warning spew in gnome-terminal
-		     Patch from Ryan Lortie
-	Bug 387482 – Variable modified in signal handler should be volatile
-		     Patch from Bastien Nocera
-	Red Hat Bug 218626: "last -ad" print junk in last column
-
-0.15.0
-	Bug 356552 – cursor timeout runs all the time [Ryan Lortie]
-	Bug 307396 – Mouse scroll mode not controllable [Mariano Suárez-Alvarez]
-	Bug 356602 – const cast warning fixes for libvte [Ryan]
-	Bug 150858 – In gnome-terminal, the deleted character reported as "space" [Rich Burridge]
-	Bug 337252 – ALT + Arrow keys don't work in irssi through gnome-terminal [Mariano]
-
-0.14.1
-	Bug 358344 – autoscroll only works one way in fullscreen [PATCH]
-	             Patch by Egmont Koblinger
-	Bug 353756 – font setting cleanup
-	Bug 356616 – libvte broken with new autotools
-	Bug 354024 – Suppress multiple warnings for missing control sequence
-	             handlers
-	             Patch from Chris Wilson
-	Bug 354620 – vte-0.14.0: undefined C code
-	             Patch from Ales Nosek
-	Define G_LOG_DOMAIN=Vte.
-
-0.14.0
-	Minor doc syntax update.
-	Fix bug causing empty lines to not being copied.
-
-0.13.7
-	Bug 350236 – Cannot copy text; invalid character sequence errors
-	Bug 352439 – URL highlighting seriously broken
-	Bug 351494 – Gnome-terminal doesn't kills bash on tab close
-	             Patch from Aivars Kalvans
-	Bug 352365 – font caching problem for not-found glyphs
-
-0.13.6
-	Bug 351696 – crash on Terminal, check ->window before setting
-	             icon/window title
-	Bug 350623 – Accessible text getTextAtOffset is broken
-	             Patch from Willie Walker
-
-0.13.5
-	Bug 158200 – terminal backspace behavior not set to UTF-8 mode
-	             Based on patch from Egmont Koblinger
-	Bug 348814 – crash on Terminal
-	             Patch from Aivars Kalvans
-
-0.13.4
-	Fix selection that I broke in last release.
-	Bug 336947 – [patch] Redundant vte_terminal_set_font_full() calls
-	             Patch from Aivars Kalvans
-	Bug 134800 – gnome-termnal hung up when input by ATOK
-	             Patch from Yukihiro Nakai  
-	Bug 339983 – gnome-pty-helper should log username
-	             Patch from Brian Cameron
-
-0.13.3
-	Bug 121904 – copy-paste of empty line
-	Bug 25290 – Small UI tweak to select-by-word (only select only letter
-	            at a time for non-word characters)
-	Bug 339986 – Patch to select localized strings exactly
-		     Patch from Takao Fujiwara
-	Bug 311855 – Race in vte leads to blocking of input.
-		     Patch from Kalle Raiskila
-	Bug 342396 – Ctrl-space sends " ", not NUL.
-	Bug 345377 – real transparency
-		     Patch from Kristian Høgsberg 
-	Bug 345514 – -no-undefined doesn't work with latest libtool
-	Bug 141985 – vte does not respond to 'CSI 2 1 t' or 'CSI 2 0 t' with
-		     the correct window/icon title
-		     Patch from Mariano Suárez-Alvarez
-
-0.13.2
-	Bug 344666 – Problems with *_CFLAGS and *_LDFLAGS in makefiles
-	             Patch from Stepan Kasal .
-	Bug 339529 – gnome-terminal (vte) crashes when detatched window is
-	             closed
-	Bug 342549 – uninitialized var (coverity)
-	             Patch from Paolo Borelli.
-	Bug 342082 – vte_invalidate_region() may check whether terminal is
-	             realiazed or not
-	             Patch from Kouhei Sutou.
-	Bug 340363 – vte Cygwin build fixes
-	             Patch from Cygwin Ports maintainer
-	Bug 341793 – vte.h doesn't need to include X11/Xlib.h
-	             Patch from Kouhei Sutou
-	Require intltool 0.35.0 to have translations in the dist tarballs.
-	Fix typo which may have been causing things like crashes.
-
-0.13.1
-	Use intltool 0.34.90 to make sure tarball includes po files.
-	Bug 339980 – nativeecho needs glib in LDADD to build on Solaris
-	             Patch from Brian Cameron.
-	Bug 331803 – style needs to be attached/detached to the window on
-	             realize/unrealize
-	             Patch from Benjamin Berg  .
-	Pass -no-undefined linker flag.
-
-0.13.0
-	Removed obsolete #ifde GTK_CHECK_VERSION(2,2,0) checks.
-	Bug 339448 – selection doesn't respect hard newlines
-	Bug 148720 – Word selection erroneously captures text from next line
-	Bug 126376 – Uncoinditional definition of _XOPEN_SOURCE breaks build
-	             on NetBSD
-	Bug 97719 – Selection: double/triple click doesn't cross line boundaries
-	Bug 160782 – Vte isn't multi-screen safe
-	Bug 330441 – Remove libzvt support
-	Bug 328850 – Crash when pasting selection
-	Bug 160134 – mouse events occurring past column 95 are not passed
-	             through to terminal application
-		     New public function vte_terminal_feed_child_binary
-	Bug 135230 – Feature request to attach VTE to existing pty
-	             New public function vte_terminal_set_pty
-	Bug 337442 – [patch] Reduce .plt section
-	             We use a regexp to limit exported symbols now.
-	Bug 142247 – use of uninitialized value
-	Bug 149633 – gnome-terminal messes up boxdrawing chars aligment
-	Bug 144456 – UK pound currency symbol rendered incorrectly
-	Bug 307403 – xticker doublefree
-	Bug 337877 – Patch to use po/LINGUAS
-	Bug 337552 – Insufficient version requirement for gtk+
-	Bug 168251 – add support for 256 colors terminals
-	Bug 120276 – Wishlist: Support Rectangular Selection
-	Bug 336117 – [patch] Use g_slice API
-	Bug 336128 – vim scrolling issues - emulation errors
-	Bug 334385 – Use intltool
-	Bug 104841 – scrolling doesn't work inside "screen" windows
-	Bug 333768 – vteapp debug stuff should be conditional
-
-0.12.0   - Released with no code changes.
-
-0.11.21	 - Revert change introduced in 0.11.19 that made vte very unresponsive
-	   with tall terminal windows. (bug #333776)
-	 - Step up COALESCE_TIMEOUT and DISPLAY_TIMEOUT from 2ms to 10ms.
-	   This is more compatible with the update timeout that we are doing
-	   at 25ms, but needs testing.
-
-0.11.20	 - Revert patch introduced in 0.11.16 that was corrupting the Xft
-	   font cache. (bug #309322)
-
-0.11.19	 - Revert Shift+Insert to paste PRIMARY.  Use Ctrl+Shirt+Insert to
-	   paste CLIPBOARD (bug #123844)
-	 - Improvements to the update throttling handler.
-	 - gnome-pty-helper minor race condition fix.
-	 - Use getpwnam to correctly log multiple users with the same UID
-	   (bug #319564, Laszlo Peter)
-	 - A couple minor build fixes.
-
-0.11.18	 - Fix bug #317235 - Use U+FFFD instead of U-FFFF for invalid
-	   codepoints. (Egmont Koblinger)
-	 - Modernized the build system.  Depending on gnome-common  for
-	   autogen.sh now and make distcheck works.
-	 - Limit redrawings to a maximum of 40fps.  Makes vte run about
-	   three times faster.
-	 - Use GObject private data internally. (Behdad)
-	 - Optimize the sequence handler code and split it into a
-	   separate file. (Behdad)
-	 - Fix bug #123844 - primary and clipboard selections are broken.
-	   (Behdad)
-	 - Fix bug #161337 - double free. (Guilherme de S. Pastore)
-	 - Code cleanup and misc fixes. (Behdad)
-
-0.11.17  - Revert .pc changes from previous release (Olav Vitters)
-	 - Fix bug #170032 - gnome-terminal has problems with ANSI
-	   (save and restore cursor position) (Olav Vitters)
-	 - Fix bug #321909 – vte does not install devhelp file
-	   (Guilherme de S. Pastore)
-	 - Apply patch from Kjartan Maraas to replace g_return* with
-	   g_assert in static functions (Guilherme de S. Pastore)
-	 - Avoid guessing the user's shell until we make sure it is
-	   really necessary (Guilherme de S. Pastore)
-	 - Disable asserts by default (Guilherme de S. Pastore)
-
-0.11.16  - Optimize memory used for fonts (Mike Hearn)
-	 - Fix crasher with accessibility (Padraig O'Briain)
-	 - Fix some warning from GDK (Michele Baldessari)
-	 - Fix python build problems (Manish Sing)
-	 - Fix generation of the forkpty() method for python.
-	   (Michael Vogt)
-	 - Cleanups for the .pc file (Steve Langasek)
-	 - Don't emit signals for every character of output. Huge performance
-	   improvement with a11y enabled. Patch from Padraig O'Briain.
-
-0.11.15  - Fix check for recvmsg () (Robert Basch)
-	 - Make it possible to implement atkText selection methods
-	   for VteAccessible. Bug #113590. (Padraig O'Briain)
-	 - Don't crash if there's no termcap file (Michele Baldessari)
-	 - Make VTE work on some Net/OpenBSD on sparc and macppc
-	   (Dan Winship, Rich Edelman, Adrian Bunk)
-
-0.11.14  - Fix a crasher on reparent (Michele Baldessari)
-	 - Fix a crash in a11y related code (Padraig O'Briain)
-	 - Fix a crash in the pango backend (Michele Baldessari)
-	 - Fix a crash from not unsetting the user data on the
-	   gdk window (Matthias Clasen)
-	 - Fix a crash in the python bindings when changing color
-	   (Michele Baaldessari, Ethan Glasser-Kamp)
-
-0.11.13  - Back out one of the previous patches from Fedora since it had
-	   issues (Reported by Warren Togami)
-	 - Reduce memory consumption with more that one tab a whole lot
-	   (Aivars Kalvans)
-	 - Make the python bindings work again (Manish Singh)
-	 - Build fix (Ali Akcaagac)
-	 - Updated translations ug (Abduxukur Abdurixit), rw (Steve Murphy),
-	   xh (Adi Attar))
-
-0.11.12: - Performance improvements:
-	   - Two patches from bug #137864 (Benjamin Otte)
-	   - Patch from bug #143914 (Søren Sandmann)
-	 - Fix crash when resizing a terminal running minicom (Søren Sandmann)
-	   Closes bug #163814 and duplicate.
-	 - Adjust timeouts to make us behave like xterm when
-	   outputing large amounts of text and still be fast (Kjartan)
-	 - Fix build with VTE_DEBUG enabled (Kjartan)
-	 - Build fixes for NetBSD and Darwin. Bug #126377 (Adrian Bunk)
-	 - Build fixes for AIX. Bug #161352
-	 - Make keypad behave like in xterm. Bug #128099. (jylefort at brutele be)
-	 - Fix black background in new terminals. Bug #125364. (Fedora)
-	 - Fix scrolling issues. Bug #168210 (Fedora)
-	 - Fix screen corruption with multibyte charsets. Bug #168211 (Fedora)
-	 - Redraw terminal fully before scrolling. Bug #168212 (Fedora)
-	 - Fix crash with IM-methods. Bug #168213 (Fedora)
-	 - Fix for scrolling back then forward. Bug 122150 (Benjamin Otte)
-	 - Make terminal report correct type. Bug 130761 (Mariano)
-	 - Updated translations:
-	   Estii (et), Old English (ang), Canadian English (en_CA),
-	   Spanish (es), Hungarian (hu), Albanian (sq), Norwegian bokmål
-	   (nb), Bosnian (bs), Finnish (fi), Oriya (or), Georgian (ka),
-	   Hindi (hi)
-0.11.11: Add APIs for setting font with/without antialiasing, cursor color,
-	 hilite color, and a forkpty()-alike.  Fix meta-space.  Use glib 2.4's
-	 child watch API if available.
-	 Add a configure switch for setting the default emulation instead of
-	 hard-coding it to be "xterm".
-	 Tweak autowrapping of text to handle cases where the terminal has
-	 both LP and xn capabilities.
-	 Truncate empty lines when copying text to mimic xterm.
-	 Internally abstract out matching APIs, though we still use POSIX regex.
-	 Try to set UTF8 line editing mode under sufficiently-new Linux.
-	 Obey Pango's specified attributes when displaying pre-edit text.
-	 Never steal modifier keys which might affect the input method from
-	 the input methods.
-	 Fix python binding so that help() lists the terminal class.
-0.11.10: Fix cases where the application sets the encoding.  Adjust display of
-         way-too-wide characters to better comply with openi18n.
-0.11.9: Accessibility improvements.  Multihead fixes.  Revert to the 0.10 way
-        of determining how wide an ambiguously-wide character should be.  Fix
-        origin mode.  Fix linefeed mode, really.  Fix saving/restoring the
-        cursor position via DECSET/DECRST.  Fix handling of control characters
-        in the middle of control sequences.  Don't subject users to my crude
-        approximation of U00A3 if any available font can be used instead.
-0.11.8: Fix some memory leaks.  Fix compilation on Solaris.  Fix Ctrl-Space.
-0.11.7: Properly recognizes 8-bit versions of SS2 and SS3 intermixed with
-        UTF-8.  Add Macedonian and Welsh translations (yay GTP!).  Fix keypad
-        page down key in application keypad mode.  Internalize some conversions
-        to work better on platforms which lack a gunichar-compatible iconv
-        target or UTF-8 to UTF-8 conversions.
-0.11.6: Recognizes 8-bit versions of SS2 and SS3.
-        Shares pixmap and pixbuf backgrounds between multiple terminal widgets
-        within the same process, reducing both memory and CPU use.
-0.11.5: Support for PC437.  Fix Ctrl+/.  Use xrdb font settings if GTK+ doesn't
-        have anything to say.
-0.11.4: Speedier transparency update when you move the windows, fixes for
-        flickering when scrolling part of the screen, accessibility fixes.
-        Bold works again.
-0.11.3: Reworked handling of ISO-2022 text, handles Chinese and Korean
-        correctly.
-0.11.2: Fix for wrapping when selecting by word or lines.  Fix to conform to
-        OpenI18N assertions.
-0.11.1: A native FT2 drawing backend which may be faster than Pango on systems
-        without Xft2.  Support for scrolling backgrounds for everyone.
-0.11.0: Support for using font sets for better Unicode coverage when drawing
-        using Xft2.  Support for scrolling backgrounds with Xft2.
-0.10: Rewrote selection to better integrate dingus and autoscroll support.  The
-      previous implementation was just a mess.  Changed the APIs so that callers
-      have to decide whether or not to log (NOTE: this breaks gnome-terminal
-      versions before 2.1.1 and 2.0.2).
-0.9: Added integration with gnome-pty-helper.  This makes the lastlog/utmp/wtmp
-     stuff work.
-0.8: Added iso-2022 and national replacement character substitutions.  Line
-     drawing characters are now represented as Unicode code points internally,
-     so if you select a graphical line, you'll get the right results when you
-     paste it.
-0.7: Broke rendering code up into a couple of pieces to take advantage of
-     Xft2 and Xlib APIs for drawing more than one character at a time.
-0.6: Replaced the trie parser with a table-driven parser which is faster but
-     only accurate enough for ANSI-compatible terminal types.  At some point
-     I'll add a redirection layer to use the older code for other terminals.
-0.5: Store characters as gunichars internally instead of wchar_t's.  Most of
-     the internal processing is performed on gunichars anyway.
-0.4: Support for Xft2 (which lets us do things faster than Xft1), and python
-     bindings.
-0.3: Initial accessibility peer implementation.
-
-prehistory
-
-Local Variables:
-coding: utf-8
-End:
diff --git a/README.md b/README.md
index 7479284..51e41cc 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,19 @@ Virtual TErminal
 
 VTE provides a virtual terminal widget for GTK applications.
 
+Source & Releases
+-----------------
+
+To get the source code, use
+```
+$ git clone https://gitlab.gnome.org/GNOME/vte
+```
+
+To get the source for a release version, use the corresponding git tag, or
+download a tarball at
+https://gitlab.gnome.org/GNOME/vte/-/archive/TAG/vte-TAG.tar.bz2
+replacing `TAG` with the desired tag's name (e.g. `0.64.0`).
+
 Installation
 ------------
 
diff --git a/bindings/gir/meson.build b/bindings/gir/meson.build
index dba5a2d..68a58e2 100644
--- a/bindings/gir/meson.build
+++ b/bindings/gir/meson.build
@@ -1,15 +1,15 @@
 # Copyright © 2018, 2019 Iñigo Martínez
-# Copyright © 2019 Christian Persch
+# Copyright © 2019, 2020, 2021 Christian Persch
 #
-# This library is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or (at your
-# option) any later version.
+# This library is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
 #
-# This library is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
-# General Public License for more details.
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
 # along with this library.  If not, see .
@@ -18,6 +18,7 @@ gir_dep = dependency('gobject-introspection-1.0', version: '>= 0.9.0')
 
 if get_option('gtk3')
   libvte_gtk3_gir_includes = [
+    'cairo-1.0',
     'Gdk-3.0',
     'Gtk-3.0',
     'Pango-1.0',
@@ -29,10 +30,40 @@ if get_option('gtk3')
     includes: libvte_gtk3_gir_includes,
     dependencies: libvte_gtk3_dep,
     extra_args: '-DVTE_COMPILATION',
-    nsversion: vte_gtk3_api_version,
+    nsversion: vte_api_version,
     namespace: 'Vte',
     export_packages: vte_gtk3_api_name,
     header: 'vte' / 'vte.h',
     install: true,
   )
 endif
+
+if get_option('gtk4')
+  libvte_gtk4_gir_includes = [
+    'cairo-1.0',
+    'Graphene-1.0',
+    'Gsk-4.0',
+    'Gdk-4.0',
+    'Gtk-4.0',
+    'Pango-1.0',
+  ]
+
+  # Ideally, the gir would be named something like "VteGtk4" instead,
+  # but it seems that's not possible. So work around it using "Vte"
+  # as namespace with this nsversion hack:
+  vte_gtk4_gir_nsversion = '@0@.@1@'.format(vte_api_major_version + 1, vte_api_minor_version)
+
+  libvte_gtk4_gir = gnome.generate_gir(
+    libvte_gtk4,
+    dependencies: libvte_gtk4_dep,
+    export_packages: vte_gtk4_api_name,
+    extra_args: '-DVTE_COMPILATION',
+    header: 'vte' / 'vte.h',
+    includes: libvte_gtk4_gir_includes,
+    install: true,
+    namespace: 'Vte',
+    nsversion: vte_gtk4_gir_nsversion,
+    sources: libvte_gtk4_public_headers + libvte_common_doc_sources,
+    symbol_prefix: 'vte',
+  )
+endif
diff --git a/bindings/glade/hicolor_actions_16x16_widget-vte-terminal.png b/bindings/glade/hicolor_actions_16x16_widget-vte-terminal.png
new file mode 100644
index 0000000..e767bc6
Binary files /dev/null and b/bindings/glade/hicolor_actions_16x16_widget-vte-terminal.png differ
diff --git a/bindings/glade/hicolor_actions_22x22_widget-vte-terminal.png b/bindings/glade/hicolor_actions_22x22_widget-vte-terminal.png
new file mode 100644
index 0000000..94a41cf
Binary files /dev/null and b/bindings/glade/hicolor_actions_22x22_widget-vte-terminal.png differ
diff --git a/bindings/glade/meson.build b/bindings/glade/meson.build
new file mode 100644
index 0000000..6bca2ae
--- /dev/null
+++ b/bindings/glade/meson.build
@@ -0,0 +1,42 @@
+# Copyright © 2020 Aleksandr Mezin
+# Copyright © 2020 Christian Persch
+#
+# This library is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this library.  If not, see .
+
+gladedir = vte_datadir / 'glade'
+cataloguedir =  gladedir / 'catalogs'
+pixmapdir = gladedir / 'pixmaps'
+
+catalog_conf = configuration_data()
+catalog_conf.set('VTE_API_VERSION', vte_api_version)
+catalog_conf.set('VERSION', vte_version)
+
+configure_file(
+  input: 'vte.xml.in',
+  configuration: catalog_conf,
+  install_dir: cataloguedir,
+  output: vte_gtk3_api_name + '.xml',
+)
+
+install_data(
+  'hicolor_actions_16x16_widget-vte-terminal.png',
+  install_dir: pixmapdir / 'hicolor' / '16x16' / 'actions',
+  rename: 'widget-vte-terminal.png',
+)
+
+install_data(
+  'hicolor_actions_22x22_widget-vte-terminal.png',
+  install_dir: pixmapdir / 'hicolor' / '22x22' / 'actions',
+  rename: 'widget-vte-terminal.png',
+)
diff --git a/bindings/glade/vte.xml.in b/bindings/glade/vte.xml.in
new file mode 100644
index 0000000..cb34396
--- /dev/null
+++ b/bindings/glade/vte.xml.in
@@ -0,0 +1,18 @@
+
+
+  
+    
+  
+
+  
+    
+  
+
+
diff --git a/bindings/meson.build b/bindings/meson.build
index 76ee9b0..2fc8dd6 100644
--- a/bindings/meson.build
+++ b/bindings/meson.build
@@ -1,23 +1,27 @@
 # Copyright © 2018, 2019 Iñigo Martínez
 # Copyright © 2019 Christian Persch
 #
-# This library is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or (at your
-# option) any later version.
+# This library is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
 #
-# This library is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
-# General Public License for more details.
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
 # along with this library.  If not, see .
 
+if get_option('glade') and get_option('gtk3')
+  subdir('glade')
+endif
+
 if get_option('gir') and (get_option('gtk3') or get_option('gtk4'))
   subdir('gir')
 endif
 
-if get_option('vapi') and get_option('gtk3')
+if get_option('vapi') and (get_option('gtk3') or get_option('gtk4'))
   subdir('vala')
 endif
diff --git a/bindings/vala/app.gresource.xml b/bindings/vala/app.gresource.xml
deleted file mode 100644
index 9095d32..0000000
--- a/bindings/vala/app.gresource.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-  
-    app.ui
-    search-popover.ui
-  
-
diff --git a/bindings/vala/app.ui b/bindings/vala/app.ui
deleted file mode 100644
index bfcedd5..0000000
--- a/bindings/vala/app.ui
+++ /dev/null
@@ -1,152 +0,0 @@
-
-
-
-  
-  
-
diff --git a/bindings/vala/app.vala b/bindings/vala/app.vala
deleted file mode 100644
index 20248c1..0000000
--- a/bindings/vala/app.vala
+++ /dev/null
@@ -1,1099 +0,0 @@
-/*
- * Copyright © 2001,2002 Red Hat, Inc.
- * Copyright © 2014 Christian Persch
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see .
- */
-
-namespace Test
-{
-
-[GtkTemplate (ui = "/org/gnome/vte/test/app/ui/search-popover.ui")]
-class SearchPopover : Gtk.Popover
-{
-  public Vte.Terminal terminal { get; construct set; }
-
-  [GtkChild] private Gtk.SearchEntry search_entry;
-  [GtkChild] private Gtk.Button search_prev_button;
-  [GtkChild] private Gtk.Button search_next_button;
-  [GtkChild] private Gtk.Button close_button;
-  [GtkChild] private Gtk.ToggleButton  match_case_checkbutton;
-  [GtkChild] private Gtk.ToggleButton entire_word_checkbutton;
-  [GtkChild] private Gtk.ToggleButton regex_checkbutton;
-  [GtkChild] private Gtk.ToggleButton wrap_around_checkbutton;
-  [GtkChild] private Gtk.Button reveal_button;
-  [GtkChild] private Gtk.Revealer revealer;
-
-  private bool regex_caseless = false;
-  private string? regex_pattern = null;
-  private bool has_regex = false;
-
-  public SearchPopover(Vte.Terminal term,
-                       Gtk.Widget relative_to)
-  {
-    Object(relative_to: relative_to, terminal: term);
-
-    close_button.clicked.connect(() => { hide(); });
-    reveal_button.bind_property("active", revealer, "reveal-child");
-
-#if GTK_3_16
-    search_entry.next_match.connect(() => { search(false); });
-    search_entry.previous_match.connect(() => { search(true); });
-#endif
-    search_entry.search_changed.connect(() => { update_regex(); });
-
-    search_next_button.clicked.connect(() => { search(false); });
-    search_prev_button.clicked.connect(() => { search(true); });
-
-    match_case_checkbutton.toggled.connect(() => { update_regex(); });
-    entire_word_checkbutton.toggled.connect(() => { update_regex(); });
-    regex_checkbutton.toggled.connect(() => { update_regex(); });
-
-    wrap_around_checkbutton.toggled.connect(() => {
-        terminal.search_set_wrap_around(wrap_around_checkbutton.active);
-      });
-
-    update_sensitivity();
-  }
-
-  private bool have_regex()
-  {
-	return has_regex;
-  }
-
-  private void update_sensitivity()
-  {
-    bool can_search = have_regex();
-
-    search_prev_button.set_sensitive(can_search);
-    search_next_button.set_sensitive(can_search);
-  }
-
-  private void update_regex()
-  {
-    string search_text;
-    string pattern = null;
-    bool caseless = false;
-    GLib.Regex? gregex = null;
-    Vte.Regex? regex = null;
-
-    search_text = search_entry.get_text();
-    caseless = !match_case_checkbutton.active;
-
-    if (regex_checkbutton.active) {
-      pattern = search_text;
-    } else {
-      pattern = GLib.Regex.escape_string(search_text);
-    }
-
-    if (entire_word_checkbutton.active)
-      pattern = "\\b" + pattern + "\\b";
-
-    if (caseless == regex_caseless &&
-        pattern == regex_pattern)
-      return;
-
-    regex_pattern = null;
-    regex_caseless = caseless;
-
-    if (search_text.length != 0) {
-      try {
-        if (!Options.no_pcre) {
-          uint32 flags;
-
-          flags = 0x40080400u /* PCRE2_UTF | PCRE2_NO_UTF_CHECK | PCRE2_MULTILINE */;
-          if (caseless)
-            flags |= 0x00000008u; /* PCRE2_CASELESS */
-          regex = new Vte.Regex.for_search(pattern, pattern.length, flags);
-
-          try {
-            regex.jit(0x00000001u /* PCRE2_JIT_COMPLETE */);
-            regex.jit(0x00000002u /* PCRE2_JIT_PARTIAL_SOFT */);
-          } catch (Error e) {
-            if (e.code != -45 /* PCRE2_ERROR_JIT_BADOPTION */) /* JIT not supported */
-              printerr("JITing regex \"%s\" failed: %s\n", pattern, e.message);
-          }
-        } else {
-          GLib.RegexCompileFlags flags;
-
-          flags = GLib.RegexCompileFlags.OPTIMIZE |
-                  GLib.RegexCompileFlags.MULTILINE;
-          if (caseless)
-            flags |= GLib.RegexCompileFlags.CASELESS;
-
-          gregex = new GLib.Regex(pattern, flags, 0);
-        }
-
-        regex_pattern = pattern;
-        search_entry.set_tooltip_text(null);
-      } catch (Error e) {
-        regex = null;
-        gregex = null;
-        search_entry.set_tooltip_text(e.message);
-      }
-    } else {
-      regex = null;
-      gregex = null;
-      search_entry.set_tooltip_text(null);
-    }
-
-    if (!Options.no_pcre) {
-      has_regex = regex != null;
-      terminal.search_set_regex(regex, 0);
-    } else {
-      has_regex = gregex != null;
-      terminal.search_set_gregex(gregex, 0);
-    }
-
-    update_sensitivity();
-  }
-
-  private void search(bool backward)
-  {
-    if (!have_regex())
-      return;
-
-    if (backward)
-      terminal.search_find_previous();
-    else
-      terminal.search_find_next();
-  }
-
-} /* class SearchPopover */
-
-[GtkTemplate (ui = "/org/gnome/vte/test/app/ui/window.ui")]
-class Window : Gtk.ApplicationWindow
-{
-  [GtkChild] private Gtk.Scrollbar scrollbar;
-  [GtkChild] private Gtk.Box terminal_box;
-  /* [GtkChild] private Gtk.Box notifications_box; */
-  [GtkChild] private Gtk.Widget readonly_emblem;
-  /* [GtkChild] private Gtk.Button copy_button; */
-  /* [GtkChild] private Gtk.Button paste_button; */
-  [GtkChild] private Gtk.ToggleButton find_button;
-  [GtkChild] private Gtk.MenuButton gear_button;
-
-  private Vte.Terminal terminal;
-  private Gtk.Clipboard clipboard;
-  private GLib.Pid child_pid;
-  private SearchPopover search_popover;
-  private uint launch_idle_id;
-
-  private string[] builtin_dingus = {
-    "(((gopher|news|telnet|nntp|file|http|ftp|https)://)|(www|ftp)[-A-Za-z0-9]*\\.)[-A-Za-z0-9\\.]+(:[0-9]*)?",
-    "(((gopher|news|telnet|nntp|file|http|ftp|https)://)|(www|ftp)[-A-Za-z0-9]*\\.)[-A-Za-z0-9\\.]+(:[0-9]*)?/[-A-Za-z0-9_\\$\\.\\+\\!\\*\\(\\),;:@&=\\?/~\\#\\%]*[^]'\\.}>\\) ,\\\"]"
-  };
-
-  private const GLib.ActionEntry[] action_entries = {
-    { "copy",        action_copy_cb,       "s" },
-    { "copy-match",  action_copy_match_cb, "s" },
-    { "paste",       action_paste_cb           },
-    { "reset",       action_reset_cb,      "b" },
-    { "find",        action_find_cb            },
-    { "quit",        action_quit_cb            }
-  };
-
-  public Window(App app)
-  {
-    Object(application: app);
-
-    /* Create terminal and connect scrollbar */
-    terminal = new Vte.Terminal();
-    var margin = Options.extra_margin;
-    if (margin > 0) {
-      terminal.margin_start =
-        terminal.margin_end =
-        terminal.margin_top =
-        terminal.margin_bottom = margin;
-    }
-
-    scrollbar.set_adjustment(terminal.get_vadjustment());
-
-    /* Create actions */
-    add_action_entries (action_entries, this);
-
-    /* Property actions */
-    var action = new GLib.PropertyAction ("input-enabled", terminal, "input-enabled");
-    add_action(action);
-    action.notify["state"].connect((obj, pspec) => {
-        GLib.Action a = (GLib.Action)obj;
-        readonly_emblem.set_visible(!a.state.get_boolean());
-      });
-
-    /* Find */
-    search_popover = new SearchPopover(terminal, find_button);
-    search_popover.closed.connect(() => {
-        if (find_button.active)
-          find_button.set_active(false);
-      });
-
-    find_button.toggled.connect(() => {
-        var active = find_button.active;
-        if (search_popover.visible != active)
-          search_popover.set_visible(active);
-      });
-
-    /* Gear menu */
-    /* FIXME: figure out how to put this into the .ui file */
-    var menu = new GLib.Menu();
-
-    var section = new GLib.Menu();
-    section.append("_Copy", "win.copy");
-    section.append("_Paste", "win.paste");
-    section.append("_Find…", "win.find");
-    menu.append_section(null, section);
-
-    section = new GLib.Menu();
-    section.append("_Reset", "win.reset(false)");
-    section.append("Reset and C_lear", "win.reset(true)");
-    section.append("_Input enabled", "win.input-enabled");
-    menu.append_section(null, section);
-
-    section = new GLib.Menu();
-    section.append("_Quit", "win.quit");
-    menu.append_section(null, section);
-
-    gear_button.set_menu_model(menu);
-
-    /* set_resize_mode(Gtk.ResizeMode.IMMEDIATE); */
-
-    clipboard = get_clipboard(Gdk.SELECTION_CLIPBOARD);
-    clipboard.owner_change.connect(clipboard_owner_change_cb);
-
-    title = "Terminal";
-
-    /* Set ARGB visual */
-    if (Options.transparency_percent != 0) {
-      if (!Options.no_argb_visual) {
-        var screen = get_screen();
-        Gdk.Visual? visual = screen.get_rgba_visual();
-        if (visual != null)
-          set_visual(visual);
-      }
-
-      /* Without this transparency doesn't work; see bug #729884. */
-      app_paintable = true;
-    }
-
-    /* Signals */
-    terminal.popup_menu.connect(popup_menu_cb);
-    terminal.button_press_event.connect(button_press_event_cb);
-    terminal.char_size_changed.connect(char_size_changed_cb);
-    terminal.child_exited.connect(child_exited_cb);
-    terminal.decrease_font_size.connect(decrease_font_size_cb);
-    terminal.deiconify_window.connect(deiconify_window_cb);
-    terminal.icon_title_changed.connect(icon_title_changed_cb);
-    terminal.iconify_window.connect(iconify_window_cb);
-    terminal.increase_font_size.connect(increase_font_size_cb);
-    terminal.lower_window.connect(lower_window_cb);
-    terminal.maximize_window.connect(maximize_window_cb);
-    terminal.move_window.connect(move_window_cb);
-    terminal.raise_window.connect(raise_window_cb);
-    terminal.realize.connect(realize_cb);
-    terminal.refresh_window.connect(refresh_window_cb);
-    terminal.resize_window.connect(resize_window_cb);
-    terminal.restore_window.connect(restore_window_cb);
-    terminal.selection_changed.connect(selection_changed_cb);
-    terminal.window_title_changed.connect(window_title_changed_cb);
-    if (Options.object_notifications)
-      terminal.notify.connect(notify_cb);
-
-    /* Settings */
-    if (Options.no_double_buffer)
-      terminal.set_double_buffered(false);
-
-    if (Options.encoding != null) {
-      try {
-        terminal.set_encoding(Options.encoding);
-      } catch (Error e) {
-        printerr("Failed to set encoding: %s\n", e.message);
-      }
-    }
-
-    if (Options.word_char_exceptions != null)
-      terminal.set_word_char_exceptions(Options.word_char_exceptions);
-
-    terminal.set_allow_hyperlink(!Options.no_hyperlink);
-    terminal.set_audible_bell(Options.audible);
-    terminal.set_cjk_ambiguous_width(Options.get_cjk_ambiguous_width());
-    terminal.set_cursor_blink_mode(Options.get_cursor_blink_mode());
-    terminal.set_cursor_shape(Options.get_cursor_shape());
-    terminal.set_mouse_autohide(true);
-    terminal.set_rewrap_on_resize(!Options.no_rewrap);
-    terminal.set_scroll_on_output(false);
-    terminal.set_scroll_on_keystroke(true);
-    terminal.set_scrollback_lines(Options.scrollback_lines);
-
-    /* Style */
-    if (Options.font_string != null) {
-      var desc = Pango.FontDescription.from_string(Options.font_string);
-      terminal.set_font(desc);
-    }
-
-    terminal.set_colors(Options.get_color_fg(),
-                        Options.get_color_bg(),
-                        null);
-    terminal.set_color_cursor(Options.get_color_cursor_background());
-    terminal.set_color_cursor_foreground(Options.get_color_cursor_foreground());
-    terminal.set_color_highlight(Options.get_color_hl_bg());
-    terminal.set_color_highlight_foreground(Options.get_color_hl_fg());
-
-    /* Dingus */
-    if (!Options.no_builtin_dingus)
-      add_dingus(builtin_dingus);
-    if (Options.dingus != null)
-      add_dingus(Options.dingus);
-
-    /* Done! */
-    terminal_box.pack_start(terminal);
-    terminal.show();
-
-    update_paste_sensitivity();
-    update_copy_sensitivity();
-
-    terminal.grab_focus();
-
-    assert(!get_realized());
-  }
-
-  private void add_dingus(string[] dingus)
-  {
-    const Gdk.CursorType cursors[] = { Gdk.CursorType.GUMBY, Gdk.CursorType.HAND1 };
-
-    for (int i = 0; i < dingus.length; ++i) {
-      try {
-        int tag;
-
-        if (!Options.no_pcre) {
-          Vte.Regex regex;
-
-          regex = new Vte.Regex.for_match(dingus[i], dingus[i].length,
-                                          0x40080408u /* PCRE2_UTF | PCRE2_NO_UTF_CHECK | PCRE2_CASELESS | PCRE2_MULTILINE */);
-          try {
-            regex.jit(0x00000001u /* PCRE2_JIT_COMPLETE */);
-            regex.jit(0x00000002u /* PCRE2_JIT_PARTIAL_SOFT */);
-          } catch (Error e) {
-            if (e.code != -45 /* PCRE2_ERROR_JIT_BADOPTION */) /* JIT not supported */
-              printerr("JITing regex \"%s\" failed: %s\n", dingus[i], e.message);
-          }
-
-          tag = terminal.match_add_regex(regex, 0);
-        } else {
-          GLib.Regex regex;
-
-          regex = new GLib.Regex(dingus[i],
-                                 GLib.RegexCompileFlags.OPTIMIZE |
-                                 GLib.RegexCompileFlags.MULTILINE,
-                                 0);
-          tag = terminal.match_add_gregex(regex, 0);
-        }
-
-        terminal.match_set_cursor_type(tag, cursors[i % cursors.length]);
-      } catch (Error e) {
-        printerr("Failed to compile regex \"%s\": %s\n", dingus[i], e.message);
-      }
-    }
-  }
-
-  private void adjust_font_size(double factor)
-  {
-    var columns = terminal.get_column_count();
-    var rows = terminal.get_row_count();
-
-    terminal.set_font_scale(terminal.get_font_scale() * factor);
-
-    update_geometry();
-    resize_to_geometry((int)columns, (int)rows);
-  }
-
-  public void apply_geometry()
-  {
-    /* The terminal needs to be realized first, so that when parsing the
-     * geometry, the right geometry hints are already in place.
-     */
-    terminal.realize();
-
-    if (Options.geometry != null) {
-      if (parse_geometry(Options.geometry)) {
-        /* After parse_geometry(), we can get the default size in
-         * width/height increments, i.e. in grid size.
-         */
-        int columns, rows;
-        get_default_size(out columns, out rows);
-        terminal.set_size(columns, rows);
-        resize_to_geometry(columns, rows);
-      } else
-        printerr("Failed to parse geometry spec \"%s\"\n", Options.geometry);
-    } else {
-      /* In GTK+ 3.0, the default size of a window comes from its minimum
-       * size not its natural size, so we need to set the right default size
-       * explicitly */
-      set_default_geometry((int)terminal.get_column_count(),
-                           (int)terminal.get_row_count());
-    }
-  }
-
-  private void launch_command(string command) throws Error
-  {
-    string[] argv;
-
-    Shell.parse_argv(command, out argv);
-    launch_idle_id = GLib.Idle.add(() => {
-        try {
-          terminal.spawn_sync(Vte.PtyFlags.DEFAULT,
-                              Options.working_directory,
-                              argv,
-                              Options.environment,
-                              GLib.SpawnFlags.SEARCH_PATH,
-                              null, /* child setup */
-                              out child_pid,
-                              null /* cancellable */);
-          print("Fork succeeded, PID %d\n", child_pid);
-        } catch (Error e) {
-          printerr("Failed to fork: %s\n", e.message);
-        }
-        launch_idle_id = 0;
-        return false;
-      });
-  }
-
-  private void launch_shell() throws Error
-  {
-    string? shell;
-
-    shell = Vte.get_user_shell();
-    if (shell == null || shell[0] == '\0')
-      shell = Environment.get_variable("SHELL");
-    if (shell == null || shell[0] == '\0')
-      shell = "/bin/sh";
-
-    launch_command(shell);
-  }
-
-  private void fork() throws Error
-  {
-    Vte.Pty pty;
-    Posix.pid_t pid;
-
-    pty = new Vte.Pty.sync(Vte.PtyFlags.DEFAULT, null);
-
-    pid = Posix.fork();
-
-    switch (pid) {
-    case -1: /* error */
-      printerr("Error forking: %m");
-      break;
-    case 0: /* child */ {
-      pty.child_setup();
-
-      for (int i = 0; ; i++) {
-        switch (i % 3) {
-        case 0:
-        case 1:
-          print("%d\n", i);
-          break;
-        case 2:
-          printerr("%d\n", i);
-          break;
-        }
-        Posix.sleep(1);
-      }
-    }
-    default: /* parent */
-      terminal.set_pty(pty);
-      terminal.watch_child(pid);
-      print("Child PID is %d (mine is %d).\n", (int)pid, (int)Posix.getpid());
-      break;
-    }
-  }
-
-  public void launch()
-  {
-    try {
-      if (Options.command != null)
-        launch_command(Options.command);
-      else if (!Options.no_shell)
-        launch_shell();
-      else
-        fork();
-    } catch (Error e) {
-      printerr("Error: %s\n", e.message);
-    }
-  }
-
-  private void update_copy_sensitivity()
-  {
-    var action = lookup_action("copy") as GLib.SimpleAction;
-    action.set_enabled(terminal.get_has_selection());
-  }
-
-  private void update_paste_sensitivity()
-  {
-    Gdk.Atom[] targets;
-    bool can_paste;
-
-    if (clipboard.wait_for_targets(out targets))
-      can_paste = Gtk.targets_include_text(targets);
-    else
-      can_paste = false;
-
-    var action = lookup_action("paste") as GLib.SimpleAction;
-    action.set_enabled(can_paste);
-  }
-
-  private void update_geometry()
-  {
-    if (Options.no_geometry_hints)
-      return;
-    if (!terminal.get_realized())
-      return;
-
-    terminal.set_geometry_hints_for_window(this);
-  }
-
-  /* Callbacks */
-
-  private void action_copy_cb(GLib.SimpleAction action, GLib.Variant? parameter)
-  {
-    size_t len;
-    unowned string str = parameter.get_string(out len);
-    
-    terminal.copy_clipboard_format(str == "html" ? Vte.Format.HTML : Vte.Format.TEXT);
-  }
-
-  private void action_copy_match_cb(GLib.SimpleAction action, GLib.Variant? parameter)
-  {
-    size_t len;
-    unowned string str = parameter.get_string(out len);
-    clipboard.set_text(str, (int)len);
-  }
-
-  private void action_paste_cb()
-  {
-    terminal.paste_clipboard();
-  }
-
-  private void action_reset_cb(GLib.SimpleAction action, GLib.Variant? parameter)
-  {
-    bool clear;
-    Gdk.ModifierType modifiers;
-
-    if (parameter != null) {
-      clear = parameter.get_boolean();
-    } else if (Gtk.get_current_event_state(out modifiers))
-      clear = (modifiers & Gdk.ModifierType.CONTROL_MASK) != 0;
-    else
-      clear = false;
-
-    terminal.reset(true, clear);
-  }
-
-  private void action_find_cb()
-  {
-    find_button.set_active(true);
-  }
-
-  private void action_quit_cb()
-  {
-    destroy();
-  }
-
-  private bool popup_menu_cb()
-  {
-    return show_context_menu(0, Gtk.get_current_event_time(), null);
-  }
-
-  private bool button_press_event_cb(Gtk.Widget widget, Gdk.EventButton event)
-  {
-    if (event.button != 3)
-      return false;
-
-    return show_context_menu(event.button, event.time, event);
-  }
-
-  private bool show_context_menu(uint button, uint32 timestamp, Gdk.Event? event)
-  {
-    if (Options.no_context_menu)
-      return false;
-
-    var menu = new GLib.Menu();
-    menu.append("_Copy", "win.copy::text");
-    menu.append("Copy As _HTML", "win.copy::html");
-
-#if VALA_0_24
-    if (event != null) {
-      var hyperlink = terminal.hyperlink_check_event(event);
-      if (hyperlink != null)
-        menu.append("Copy _Hyperlink", "win.copy-match::" + hyperlink);
-      var match = terminal.match_check_event(event, null);
-      if (match != null)
-        menu.append("Copy _Match", "win.copy-match::" + match);
-    }
-#endif
-
-    menu.append("_Paste", "win.paste");
-
-    var popup = new Gtk.Menu.from_model(menu);
-    popup.attach_to_widget(this, null);
-    popup.popup(null, null, null, button, timestamp);
-    if (button == 0)
-      popup.select_first(true);
-
-    return true;
-  }
-
-  private void char_size_changed_cb(Vte.Terminal terminal, uint width, uint height)
-  {
-    update_geometry();
-  }
-
-  private void child_exited_cb(Vte.Terminal terminal, int status)
-  {
-    printerr("Child exited with status %x\n", status);
-
-    if (Options.output_filename != null) {
-      try {
-        var file = GLib.File.new_for_commandline_arg(Options.output_filename);
-        var stream = file.replace(null, false, GLib.FileCreateFlags.NONE, null);
-        terminal.write_contents_sync(stream, Vte.WriteFlags.DEFAULT, null);
-      } catch (Error e) {
-        printerr("Failed to write output to \"%s\": %s\n",
-                 Options.output_filename, e.message);
-      }
-    }
-
-    if (Options.keep)
-      return;
-
-    destroy();
-  }
-
-  private void clipboard_owner_change_cb(Gtk.Clipboard clipboard, Gdk.Event event)
-  {
-    update_paste_sensitivity();
-  }
-
-  private void decrease_font_size_cb(Vte.Terminal terminal)
-  {
-    adjust_font_size(1.0 / 1.2);
-  }
-
-  public void deiconify_window_cb(Vte.Terminal terminal)
-  {
-    deiconify();
-  }
-
-  private void icon_title_changed_cb(Vte.Terminal terminal)
-  {
-    get_window().set_icon_name(terminal.get_icon_title());
-  }
-
-  private void iconify_window_cb(Vte.Terminal terminal)
-  {
-    iconify();
-  }
-
-  private void increase_font_size_cb(Vte.Terminal terminal)
-  {
-    adjust_font_size(1.2);
-  }
-
-  private void lower_window_cb(Vte.Terminal terminal)
-  {
-    if (!get_realized())
-      return;
-
-    get_window().lower();
-  }
-
-  private void maximize_window_cb(Vte.Terminal terminal)
-  {
-    maximize();
-  }
-
-  private void move_window_cb(Vte.Terminal terminal, uint x, uint y)
-  {
-    move((int)x, (int)y);
-  }
-
-  private void notify_cb(Object object, ParamSpec pspec)
-  {
-    if (pspec.owner_type != typeof(Vte.Terminal))
-      return;
-
-    var value = GLib.Value(pspec.value_type);
-    object.get_property(pspec.name, ref value);
-    var str = value.strdup_contents();
-    print("NOTIFY property \"%s\" value %s\n", pspec.name, str);
-  }
-
-  private void raise_window_cb(Vte.Terminal terminal)
-  {
-    if (!get_realized())
-      return;
-
-    get_window().raise();
-  }
-
-  private void realize_cb(Gtk.Widget widget)
-  {
-    update_geometry();
-  }
-
-  private void refresh_window_cb(Vte.Terminal terminal)
-  {
-    queue_draw();
-  }
-
-  private void resize_window_cb(Vte.Terminal terminal, uint columns, uint rows)
-  {
-    if (columns < 2 || rows < 2)
-      return;
-
-    terminal.set_size((int)columns, (int)rows);
-    resize_to_geometry((int)columns, (int)rows);
-  }
-
-  private void restore_window_cb(Vte.Terminal terminal)
-  {
-    unmaximize();
-  }
-
-  private void selection_changed_cb(Vte.Terminal terminal)
-  {
-    update_copy_sensitivity();
-  }
-
-  private void window_title_changed_cb(Vte.Terminal terminal)
-  {
-    set_title(terminal.get_window_title());
-  }
-
-} /* class Window */
-
-class App : Gtk.Application
-{
-  public App()
-  {
-    Object(application_id: "org.gnome.Vte.Test.App",
-           flags: ApplicationFlags.NON_UNIQUE);
-
-    var settings = Gtk.Settings.get_default();
-    settings.gtk_enable_mnemonics = false;
-    settings.gtk_enable_accels = false;
-    /* Make gtk+ CSD not steal F10 from the terminal */
-    settings.gtk_menu_bar_accel = null;
-  }
-
-  protected override void startup()
-  {
-    base.startup();
-
-    for (uint i = 0; i < Options.n_windows.clamp(0, 16); i++)
-      new Window(this);
-  }
-
-  protected override void activate()
-  {
-    foreach (Gtk.Window win in this.get_windows()) {
-      if (!(win is Window))
-        continue;
-
-      var window = win as Window;
-      window.apply_geometry();
-      window.present();
-      window.launch();
-    }
-  }
-} /* class App */
-
-  namespace Options
-  {
-    public static bool audible = false;
-    public static string? command = null;
-    private static string? cjk_ambiguous_width_string = null;
-    private static string? cursor_blink_mode_string = null;
-    private static string? cursor_background_color_string = null;
-    private static string? cursor_foreground_color_string = null;
-    private static string? cursor_shape_string = null;
-    public static string[]? dingus = null;
-    public static bool debug = false;
-    public static string? encoding = null;
-    public static string[]? environment = null;
-    public static int extra_margin = 0;
-    public static string? font_string = null;
-    public static string? geometry = null;
-    private static string? hl_bg_color_string = null;
-    private static string? hl_fg_color_string = null;
-    public static string? icon_title = null;
-    public static bool keep = false;
-    public static bool no_argb_visual = false;
-    public static bool no_builtin_dingus = false;
-    public static bool no_context_menu = false;
-    public static bool no_double_buffer = false;
-    public static bool no_geometry_hints = false;
-    public static bool no_hyperlink = false;
-    public static bool no_pcre = false;
-    public static bool no_rewrap = false;
-    public static bool no_shell = false;
-    public static bool object_notifications = false;
-    public static string? output_filename = null;
-    public static bool reverse = false;
-    public static int scrollback_lines = 512;
-    public static int transparency_percent = 0;
-    public static bool version = false;
-    public static int n_windows = 1;
-    public static string? word_char_exceptions = null;
-    public static string? working_directory = null;
-
-    private static int parse_enum(Type type, string str)
-    {
-      int value = 0;
-      EnumClass enum_klass = (EnumClass)type.class_ref();
-      unowned EnumValue? enum_value = enum_klass.get_value_by_nick(str);
-      if (enum_value != null)
-        value = enum_value.value;
-      else
-        printerr("Failed to parse enum value \"%s\" as type \"%s\"\n",
-                 str, type.qname().to_string());
-      return value;
-    }
-
-    /*
-    private static uint parse_flags(Type type, string str)
-    {
-      uint value = 0;
-      var flags_klass = (FlagsClass)type.class_ref();
-      string[]? flags = str.split(",|", -1);
-
-      if (flags == null)
-        return value;
-
-      for (int i = 0; i < flags.length; i++) {
-        unowned FlagsValue? flags_value = flags_klass.get_value_by_nick(flags[i]);
-        if (flags_value != null)
-          value |= flags_value.value;
-        else
-          printerr("Failed to parse flags value \"%s\" as type \"%s\"\n",
-                   str, type.qname().to_string());
-      }
-      return value;
-    }
-    */
-
-    public static int get_cjk_ambiguous_width()
-    {
-      if (cjk_ambiguous_width_string == null)
-        return 1;
-      if (cjk_ambiguous_width_string == "narrow")
-        return 1;
-      if (cjk_ambiguous_width_string == "wide")
-        return 2;
-      printerr("Failed to parse \"%s\" argument to --cjk-width. Allowed values are \"narrow\" or \"wide\".\n", cjk_ambiguous_width_string);
-      return 1;
-    }
-
-    public static Gdk.RGBA get_color_bg()
-    {
-      var color = Gdk.RGBA();
-      color.alpha = (double)(100 - transparency_percent.clamp(0, 100)) / 100.0;
-      if (Options.reverse) {
-        color.red = color.green = color.blue = 1.0;
-      } else {
-        color.red = color.green = color.blue = 0.0;
-      }
-      return color;
-    }
-
-    public static Gdk.RGBA get_color_fg()
-    {
-      var color = Gdk.RGBA();
-      color.alpha = 1.0;
-      if (Options.reverse) {
-        color.red = color.green = color.blue = 0.0;
-      } else {
-        color.red = color.green = color.blue = 1.0;
-      }
-      return color;
-    }
-
-    private static Gdk.RGBA? get_color(string? str)
-    {
-      if (str == null)
-        return null;
-      var color = Gdk.RGBA();
-      if (!color.parse(str)) {
-        printerr("Failed to parse \"%s\" as color.\n", str);
-        return null;
-      }
-      return color;
-    }
-
-    public static Gdk.RGBA? get_color_cursor_background()
-    {
-      return get_color(cursor_background_color_string);
-    }
-
-    public static Gdk.RGBA? get_color_cursor_foreground()
-    {
-      return get_color(cursor_foreground_color_string);
-    }
-
-    public static Gdk.RGBA? get_color_hl_bg()
-    {
-      return get_color(hl_bg_color_string);
-    }
-
-    public static Gdk.RGBA? get_color_hl_fg()
-    {
-      return get_color(hl_fg_color_string);
-    }
-
-    public static Vte.CursorBlinkMode get_cursor_blink_mode()
-    {
-      Vte.CursorBlinkMode value;
-      if (cursor_blink_mode_string != null)
-        value = (Vte.CursorBlinkMode)parse_enum(typeof(Vte.CursorBlinkMode),
-                                                cursor_blink_mode_string);
-      else
-        value = Vte.CursorBlinkMode.SYSTEM;
-      return value;
-    }
-
-    public static Vte.CursorShape get_cursor_shape()
-    {
-      Vte.CursorShape value;
-      if (cursor_shape_string != null)
-        value = (Vte.CursorShape)parse_enum(typeof(Vte.CursorShape),
-                                            cursor_shape_string);
-      else
-        value = Vte.CursorShape.BLOCK;
-      return value;
-    }
-
-    const OptionEntry[] entries = {
-      { "audible-bell", 'a', 0, OptionArg.NONE, ref audible,
-        "Use audible terminal bell", null },
-      { "command", 'c', 0, OptionArg.STRING, ref command,
-        "Execute a command in the terminal", null },
-      { "cjk-width", 0, 0, OptionArg.STRING, ref cjk_ambiguous_width_string,
-        "Specify the cjk ambiguous width to use for UTF-8 encoding", "NARROW|WIDE" },
-      { "cursor-blink", 0, 0, OptionArg.STRING, ref cursor_blink_mode_string,
-        "Cursor blink mode (system|on|off)", "MODE" },
-      { "cursor-background-color", 0, 0, OptionArg.STRING, ref cursor_background_color_string,
-        "Enable a colored cursor background", null },
-      { "cursor-foreground-color", 0, 0, OptionArg.STRING, ref cursor_foreground_color_string,
-        "Enable a colored cursor foreground", null },
-      { "cursor-shape", 0, 0, OptionArg.STRING, ref cursor_shape_string,
-        "Set cursor shape (block|underline|ibeam)", null },
-      { "dingu", 'D', 0, OptionArg.STRING_ARRAY, ref dingus,
-        "Add regex highlight", null },
-      { "debug", 'd', 0,OptionArg.NONE, ref debug,
-        "Enable various debugging checks", null },
-      { "encoding", 0, 0, OptionArg.STRING, ref encoding,
-        "Specify the terminal encoding to use", null },
-      { "env", 0, 0, OptionArg.STRING_ARRAY, ref environment,
-        "Add environment variable to the child\'s environment", "VAR=VALUE" },
-      { "extra-margin", 0, 0, OptionArg.INT, ref extra_margin,
-        "Add extra margin around the terminal widget", "MARGIN" },
-      { "font", 'f', 0, OptionArg.STRING, ref font_string,
-        "Specify a font to use", null },
-      { "gregex", 0, 0, OptionArg.NONE, ref no_pcre,
-        "Use GRegex instead of PCRE2", null },
-      { "geometry", 'g', 0, OptionArg.STRING, ref geometry,
-        "Set the size (in characters) and position", "GEOMETRY" },
-      { "highlight-background-color", 0, 0, OptionArg.STRING, ref hl_bg_color_string,
-        "Enable distinct highlight background color for selection", null },
-      { "highlight-foreground-color", 0, 0, OptionArg.STRING, ref hl_fg_color_string,
-        "Enable distinct highlight foreground color for selection", null },
-      { "icon-title", 'i', 0, OptionArg.NONE, ref icon_title,
-        "Enable the setting of the icon title", null },
-      { "keep", 'k', 0, OptionArg.NONE, ref keep,
-        "Live on after the command exits", null },
-      { "no-argb-visual", 0, 0, OptionArg.NONE, ref no_argb_visual,
-        "Don't use an ARGB visual", null },
-      { "no-builtin-dingus", 0, 0, OptionArg.NONE, ref no_builtin_dingus,
-        "Highlight URLs inside the terminal", null },
-      { "no-context-menu", 0, 0, OptionArg.NONE, ref no_context_menu,
-        "Disable context menu", null },
-      { "no-double-buffer", '2', 0, OptionArg.NONE, ref no_double_buffer,
-        "Disable double-buffering", null },
-      { "no-geometry-hints", 'G', 0, OptionArg.NONE, ref no_geometry_hints,
-        "Allow the terminal to be resized to any dimension, not constrained to fit to an integer multiple of characters", null },
-      { "no-hyperlink", 'H', 0, OptionArg.NONE, ref no_hyperlink,
-        "Disable hyperlinks", null },
-      { "no-rewrap", 'R', 0, OptionArg.NONE, ref no_rewrap,
-        "Disable rewrapping on resize", null },
-      { "no-shell", 'S', 0, OptionArg.NONE, ref no_shell,
-        "Disable spawning a shell inside the terminal", null },
-      { "object-notifications", 'N', 0, OptionArg.NONE, ref object_notifications,
-        "Print VteTerminal object notifications", null },
-      { "output-file", 0, 0, OptionArg.FILENAME, ref output_filename,
-        "Save terminal contents to file at exit", null },
-      { "reverse", 0, 0, OptionArg.NONE, ref reverse,
-        "Reverse foreground/background colors", null },
-      { "scrollback-lines", 'n', 0, OptionArg.INT, ref scrollback_lines,
-        "Specify the number of scrollback-lines", null },
-      { "transparent", 'T', 0, OptionArg.INT, ref transparency_percent,
-        "Enable the use of a transparent background", "0..100" },
-      { "version", 0, 0, OptionArg.NONE, ref version,
-        "Show version", null },
-      { "windows", 0, 0, OptionArg.INT, ref n_windows,
-        "Open multiple windows (default: 1)", "NUMBER" },
-      { "word-char-exceptions", 0, 0, OptionArg.STRING, ref word_char_exceptions,
-        "Specify the word char exceptions", "CHARS" },
-      { "working-directory", 'w', 0, OptionArg.FILENAME, ref working_directory,
-        "Specify the initial working directory of the terminal", null },
-      { null }
-    };
-  }
-
-  public static int main(string[] argv)
-  {
-    Intl.setlocale (LocaleCategory.ALL, "");
-
-    if (Environment.get_variable("VTE_CJK_WIDTH") != null) {
-      printerr("VTE_CJK_WIDTH is not supported anymore, use --cjk-width instead\n");
-    }
-    /* Not interested in silly debug spew, bug #749195 */
-    if (Environment.get_variable("G_ENABLE_DIAGNOSTIC") == null) {
-      Environment.set_variable("G_ENABLE_DIAGNOSTIC", "0", true);
-    }
-    Environment.set_prgname("vte-app");
-    Environment.set_application_name("Terminal");
-
-    try {
-      var context = new OptionContext("— simple VTE test application");
-      context.set_help_enabled(true);
-      context.add_main_entries(Options.entries, null);
-      context.add_group(Gtk.get_option_group(true));
-      context.parse(ref argv);
-    } catch (OptionError e) {
-      printerr("Error parsing arguments: %s\n", e.message);
-      return 1;
-    }
-
-    if (Options.version) {
-      print("Simple VTE Test Application %s\n", Config.VERSION);
-      return 0;
-    }
-
-    if (Options.debug)
-      Gdk.Window.set_debug_updates(Options.debug);
-
-    var app = new App();
-    return app.run(null);
-  }
-
-} /* namespace */
diff --git a/bindings/vala/config.vapi b/bindings/vala/config.vapi
deleted file mode 100644
index a164a43..0000000
--- a/bindings/vala/config.vapi
+++ /dev/null
@@ -1,5 +0,0 @@
-[CCode (cprefix = "", lower_case_cprefix = "", cheader_filename = "config.h")]
-namespace Config
-{
-  public const string VERSION;
-}
diff --git a/bindings/vala/meson.build b/bindings/vala/meson.build
index 809e678..fd3c6d5 100644
--- a/bindings/vala/meson.build
+++ b/bindings/vala/meson.build
@@ -1,21 +1,20 @@
 # Copyright © 2018, 2019 Iñigo Martínez
 # Copyright © 2019 Christian Persch
 #
-# This library is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or (at your
-# option) any later version.
+# This library is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
 #
-# This library is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
-# General Public License for more details.
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
 # along with this library.  If not, see .
 
 assert(get_option('gir'), 'gir is required for vala support')
-assert(get_option('gtk3'), 'vala support only available for gtk3')
 
 add_languages('vala', required: true)
 
@@ -24,77 +23,39 @@ assert(valac.version().version_compare('>= 0.24.0'), 'vala >= 0.24 required')
 
 posix_dep = valac.find_library('posix')
 
-libvte_gtk3_vapi_deps = [
+libvte_common_vapi_deps = [
   'gio-2.0',
   'glib-2.0',
   'pango',
-  'gtk+-3.0',
 ]
 
-libvte_gtk3_vapi_dep = gnome.generate_vapi(
-  vte_gtk3_api_name,
-  sources: libvte_gtk3_gir[0],
-  packages: libvte_gtk3_vapi_deps,
-  install: true,
-)
+if get_option('gtk3')
 
-# Vala test application
+  libvte_gtk3_vapi_deps = libvte_common_vapi_deps + [
+    'gtk+-3.0',
+  ]
 
-vapp_resource_data = files(
-  'app.ui',
-  'search-popover.ui',
-)
+  libvte_gtk3_vapi_dep = gnome.generate_vapi(
+    vte_gtk3_api_name,
+    sources: libvte_gtk3_gir[0],
+    packages: libvte_gtk3_vapi_deps,
+    install: true,
+  )
 
-vapp_resource_sources = gnome.compile_resources(
-  'appresources',
-  'app.gresource.xml',
-  c_name: 'app',
-  dependencies: vapp_resource_data,
-  export: true,
-)
-
-vapp_sources = vapp_resource_sources + files(
-  'config.vapi',
-  'app.vala'
-)
-
-vapp_cflags = [
-  '-Wno-unused-but-set-variable',
-  '-Wno-unused-variable',
-]
-
-vapp_valaflags = [
-  '--enable-deprecated'
-]
-
-if valac.version().version_compare('>= 0.31.1')
-  vapp_valaflags += '--disable-since-check'
 endif
 
-if gtk3_dep.version().version_compare('>= 3.16')
-  vapp_valaflags += '--define=GTK_3_16'
+if get_option('gtk4')
+
+  libvte_gtk4_vapi_deps = libvte_common_vapi_deps + [
+    'graphene-gobject-1.0',
+    'gtk4',
+  ]
+
+  libvte_gtk4_vapi_dep = gnome.generate_vapi(
+    vte_gtk4_api_name,
+    sources: libvte_gtk4_gir[0],
+    packages: libvte_gtk4_vapi_deps,
+    install: true,
+  )
+
 endif
-
-vapp_incs = [
-  top_inc,
-  src_inc,
-  vte_inc,
-]
-
-vapp_deps = [
-  gio_dep,
-  glib_dep,
-  gtk3_dep,
-  libvte_gtk3_vapi_dep,
-  posix_dep,
-]
-
-vapp = executable(
-  'vala-test',
-  sources: vapp_sources,
-  include_directories: vapp_incs,
-  dependencies: vapp_deps,
-  c_args: vapp_cflags,
-  vala_args: vapp_valaflags,
-  install: false,
-)
diff --git a/bindings/vala/search-popover.ui b/bindings/vala/search-popover.ui
deleted file mode 100644
index 24aab5f..0000000
--- a/bindings/vala/search-popover.ui
+++ /dev/null
@@ -1,249 +0,0 @@
-
-
-
-  
-  
-
diff --git a/build-aux/org.gnome.vte.gtk3.json b/build-aux/org.gnome.vte.gtk3.json
new file mode 100644
index 0000000..1bdbdf7
--- /dev/null
+++ b/build-aux/org.gnome.vte.gtk3.json
@@ -0,0 +1,31 @@
+{
+    "app-id" : "org.gnome.vte.gtk4",
+    "runtime" : "org.gnome.Platform",
+    "runtime-version" : "master",
+    "sdk" : "org.gnome.Sdk",
+    "command" : "vte-2.91",
+    "finish-args" : [
+        "--device=dri",
+        "--socket=fallback-x11",
+        "--socket=wayland",
+        "--socket=ssh-auth"
+    ],
+    "modules" : [
+        {
+            "name" : "vte",
+            "buildsystem" : "meson",
+            "config-opts" : [
+                "-Dglade=false",
+                "-Dgtk3=true",
+                "-Dgtk4=false",
+                "-Dvapi=false"
+            ],
+            "sources" : [
+                {
+                    "type" : "file",
+                    "path" : ".."
+                }
+            ]
+        }
+    ]
+}
diff --git a/build-aux/org.gnome.vte.gtk4.json b/build-aux/org.gnome.vte.gtk4.json
new file mode 100644
index 0000000..dd4405f
--- /dev/null
+++ b/build-aux/org.gnome.vte.gtk4.json
@@ -0,0 +1,31 @@
+{
+    "app-id" : "org.gnome.vte.gtk4",
+    "runtime" : "org.gnome.Platform",
+    "runtime-version" : "master",
+    "sdk" : "org.gnome.Sdk",
+    "command" : "vte-2.91-gtk4",
+    "finish-args" : [
+        "--device=dri",
+        "--socket=fallback-x11",
+        "--socket=wayland",
+        "--socket=ssh-auth"
+    ],
+    "modules" : [
+        {
+            "name" : "vte",
+            "buildsystem" : "meson",
+            "config-opts" : [
+                "-Dglade=false",
+                "-Dgtk3=false",
+                "-Dgtk4=true",
+                "-Dvapi=false"
+            ],
+            "sources" : [
+                {
+                    "type" : "file",
+                    "path" : ".."
+                }
+            ]
+        }
+    ]
+}
diff --git a/debian/README.Debian b/debian/README.Debian
deleted file mode 100644
index db9f170..0000000
--- a/debian/README.Debian
+++ /dev/null
@@ -1,11 +0,0 @@
-vte3 (1:0.34.6-2) unstable; urgency=low
-
-  * To make new tabs opened within Gnome Terminal have the same
-    working directory as the current tab, it is necessary for the shell
-    running in the terminal to cooperate. For this, vte installs a bash
-    shell script that you must source in your ~/.bashrc.
-
-    For example, you can put this at the end of your ~/.bashrc:
-    [[ -s "/etc/profile.d/vte.sh" ]] && . "/etc/profile.d/vte.sh"
-
- -- Fabian Greffrath   Wed, 12 Jun 2013 21:31:51 +0200
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644
index 519e148..0000000
--- a/debian/changelog
+++ /dev/null
@@ -1,23 +0,0 @@
-vte2.91 (0.60.1-ok4) yangtze; urgency=medium
-
-  * update debian/libvte-2.91-0.symbols
-
- -- root   Wed, 13 Mar 2024 02:39:10 +0000
-
-vte2.91 (0.60.1-ok3) yangtze; urgency=medium
-
-  * Add rv64g nocheck and vala.app error repair
-
- -- root   Thu, 29 Feb 2024 11:34:13 +0000
-
-vte2.91 (0.60.1-ok2) yangtze; urgency=medium
-
-  * update version info
-
- -- luzhiping   Mon, 22 Aug 2022 14:27:18 +0800
-
-vte2.91 (0.60.1-ok1) yangtze; urgency=medium
-
-  * Build for openKylin.
-
- -- openKylinBot   Mon, 25 Apr 2022 22:03:04 +0800
diff --git a/debian/control b/debian/control
deleted file mode 100644
index 5ce5f77..0000000
--- a/debian/control
+++ /dev/null
@@ -1,132 +0,0 @@
-Source: vte2.91
-Section: libs
-Priority: optional
-Maintainer: Openkylin Developers 
-XSBC-Original-Maintainer: Debian GNOME Maintainers 
-Uploaders: Iain Lane , Jeremy Bicha , Laurent Bigonville 
-Build-Depends: debhelper-compat (= 12),
-               dh-sequence-gnome,
-               dh-sequence-gir,
-               gettext,
-               gtk-doc-tools,
-               libgirepository1.0-dev (>= 0.9.12),
-               libglib2.0-dev (>= 2.52.0),
-               libgnutls28-dev (>= 3.2.7),
-               libgtk-3-dev (>= 3.20),
-               libicu-dev,
-               libpango1.0-dev (>= 1.22.0),
-               libpcre2-dev (>= 10.21),
-               libsystemd-dev (>= 220) [linux-any],
-               libxml2-utils,
-               meson (>= 0.50.0),
-               valac (>= 0.31.1)
-Rules-Requires-Root: no
-Build-Depends-Indep: libatk1.0-doc ,
-                     libglib2.0-doc ,
-                     libgtk-3-doc 
-Standards-Version: 4.5.0
-XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/vte2.91.git
-XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/vte2.91
-Vcs-Browser: https://salsa.debian.org/gnome-team/vte2.91
-Vcs-Git: https://salsa.debian.org/gnome-team/vte2.91.git
-Homepage: https://wiki.gnome.org/Apps/Terminal/VTE
-
-Package: libvte-2.91-0
-Architecture: any
-Depends: libvte-2.91-common (= ${binary:Version}),
-         ${misc:Depends},
-         ${shlibs:Depends}
-Multi-Arch: same
-Description: Terminal emulator widget for GTK+ 3.0 - runtime files
- The VTE library provides a terminal emulator widget VteTerminal for
- applications using the GTK+ toolkit. It also provides the VtePTY object
- containing functions for starting a new process on a new
- pseudo-terminal and for manipulating pseudo-terminals.
- .
- This package contains the runtime library, needed by programs using the
- VTE widget with GTK+ 3.0.
-
-Package: libvte-2.91-0-udeb
-Package-Type: udeb
-Build-Profiles: 
-Section: debian-installer
-Architecture: any
-Depends: ${misc:Depends},
-         ${shlibs:Depends}
-Description: Terminal emulator widget for GTK+ 3.0 - minimal runtime
- The VTE library provides a terminal emulator widget VteTerminal for
- applications using the GTK+ toolkit. It also provides the VtePTY object
- containing functions for starting a new process on a new
- pseudo-terminal and for manipulating pseudo-terminals.
- .
- This package contains the minimal runtime library for GTK+ 3.0 needed
- by the Debian installer.
-
-Package: gir1.2-vte-2.91
-Architecture: any
-Section: introspection
-Depends: ${gir:Depends},
-         ${misc:Depends}
-Multi-Arch: same
-Description: GObject introspection data for the VTE library
- This package contains introspection data for VTE, a terminal emulator
- widget for GTK+.
- .
- It can be used by interpreters understanding the GIRepository format to
- write programs using the VTE widget for GTK+ 3.0.
-
-Package: libvte-2.91-dev
-Architecture: any
-Section: libdevel
-Depends: gir1.2-vte-2.91 (= ${binary:Version}),
-         libglib2.0-dev (>= 2.40.0),
-         libgnutls28-dev (>= 3.2.7),
-         libgtk-3-dev (>= 3.12.0),
-         libpango1.0-dev (>= 1.22.0),
-         libpcre2-dev (>= 10.21),
-         libvte-2.91-0 (= ${binary:Version}),
-         libvte-2.91-common,
-         zlib1g-dev,
-         ${misc:Depends}
-Recommends: libvte-2.91-doc
-Conflicts: libvte-2.90-dev
-Multi-Arch: same
-Description: Terminal emulator widget for GTK+ 3.0 - development files
- The VTE library provides a terminal emulator widget VteTerminal for
- applications using the GTK+ toolkit. It also provides the VtePTY object
- containing functions for starting a new process on a new
- pseudo-terminal and for manipulating pseudo-terminals.
- .
- This package contains development files for the VTE library and its
- Python bindings. It is needed to develop and build programs using the
- VTE widget with GTK+ 3.0.
-
-Package: libvte-2.91-common
-Architecture: any
-Depends: ${misc:Depends}, ${shlibs:Depends}
-Replaces: libvte-2.91-0 (<= 0.60.0-0)
-Breaks: libvte-2.91-0 (<= 0.60.0-0)
-Multi-Arch: foreign
-Description: Terminal emulator widget for GTK+ 3.0 - common files
- The VTE library provides a terminal emulator widget VteTerminal for
- applications using the GTK+ toolkit. It also provides the VtePTY object
- containing functions for starting a new process on a new
- pseudo-terminal and for manipulating pseudo-terminals.
- .
- This package contains internationalization files for the VTE library
- and common files for the GTK+ 3.x version.
-
-Package: libvte-2.91-doc
-Architecture: all
-Multi-Arch: foreign
-Section: doc
-Depends: ${misc:Depends}
-Build-Profiles: 
-Description: Terminal emulator widget for GTK+ 3.0 - documentation
- The VTE library provides a terminal emulator widget VteTerminal for
- applications using the GTK+ toolkit. It also provides the VtePTY object
- containing functions for starting a new process on a new
- pseudo-terminal and for manipulating pseudo-terminals.
- .
- This package contains documentation files for the VTE library for GTK+
- 3.x.
diff --git a/debian/control.in b/debian/control.in
deleted file mode 100644
index e4fef35..0000000
--- a/debian/control.in
+++ /dev/null
@@ -1,132 +0,0 @@
-Source: vte2.91
-Section: libs
-Priority: optional
-Maintainer: Ubuntu Developers 
-XSBC-Original-Maintainer: Debian GNOME Maintainers 
-Uploaders: @GNOME_TEAM@
-Build-Depends: debhelper-compat (= 12),
-               dh-sequence-gnome,
-               dh-sequence-gir,
-               gettext,
-               gtk-doc-tools,
-               libgirepository1.0-dev (>= 0.9.12),
-               libglib2.0-dev (>= 2.52.0),
-               libgnutls28-dev (>= 3.2.7),
-               libgtk-3-dev (>= 3.20),
-               libicu-dev,
-               libpango1.0-dev (>= 1.22.0),
-               libpcre2-dev (>= 10.21),
-               libsystemd-dev (>= 220) [linux-any],
-               libxml2-utils,
-               meson (>= 0.50.0),
-               valac (>= 0.31.1)
-Rules-Requires-Root: no
-Build-Depends-Indep: libatk1.0-doc ,
-                     libglib2.0-doc ,
-                     libgtk-3-doc 
-Standards-Version: 4.5.0
-XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/vte2.91.git
-XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/vte2.91
-Vcs-Browser: https://salsa.debian.org/gnome-team/vte2.91
-Vcs-Git: https://salsa.debian.org/gnome-team/vte2.91.git
-Homepage: https://wiki.gnome.org/Apps/Terminal/VTE
-
-Package: libvte-2.91-0
-Architecture: any
-Depends: libvte-2.91-common (= ${binary:Version}),
-         ${misc:Depends},
-         ${shlibs:Depends}
-Multi-Arch: same
-Description: Terminal emulator widget for GTK+ 3.0 - runtime files
- The VTE library provides a terminal emulator widget VteTerminal for
- applications using the GTK+ toolkit. It also provides the VtePTY object
- containing functions for starting a new process on a new
- pseudo-terminal and for manipulating pseudo-terminals.
- .
- This package contains the runtime library, needed by programs using the
- VTE widget with GTK+ 3.0.
-
-Package: libvte-2.91-0-udeb
-Package-Type: udeb
-Build-Profiles: 
-Section: debian-installer
-Architecture: any
-Depends: ${misc:Depends},
-         ${shlibs:Depends}
-Description: Terminal emulator widget for GTK+ 3.0 - minimal runtime
- The VTE library provides a terminal emulator widget VteTerminal for
- applications using the GTK+ toolkit. It also provides the VtePTY object
- containing functions for starting a new process on a new
- pseudo-terminal and for manipulating pseudo-terminals.
- .
- This package contains the minimal runtime library for GTK+ 3.0 needed
- by the Debian installer.
-
-Package: gir1.2-vte-2.91
-Architecture: any
-Section: introspection
-Depends: ${gir:Depends},
-         ${misc:Depends}
-Multi-Arch: same
-Description: GObject introspection data for the VTE library
- This package contains introspection data for VTE, a terminal emulator
- widget for GTK+.
- .
- It can be used by interpreters understanding the GIRepository format to
- write programs using the VTE widget for GTK+ 3.0.
-
-Package: libvte-2.91-dev
-Architecture: any
-Section: libdevel
-Depends: gir1.2-vte-2.91 (= ${binary:Version}),
-         libglib2.0-dev (>= 2.40.0),
-         libgnutls28-dev (>= 3.2.7),
-         libgtk-3-dev (>= 3.12.0),
-         libpango1.0-dev (>= 1.22.0),
-         libpcre2-dev (>= 10.21),
-         libvte-2.91-0 (= ${binary:Version}),
-         libvte-2.91-common,
-         zlib1g-dev,
-         ${misc:Depends}
-Recommends: libvte-2.91-doc
-Conflicts: libvte-2.90-dev
-Multi-Arch: same
-Description: Terminal emulator widget for GTK+ 3.0 - development files
- The VTE library provides a terminal emulator widget VteTerminal for
- applications using the GTK+ toolkit. It also provides the VtePTY object
- containing functions for starting a new process on a new
- pseudo-terminal and for manipulating pseudo-terminals.
- .
- This package contains development files for the VTE library and its
- Python bindings. It is needed to develop and build programs using the
- VTE widget with GTK+ 3.0.
-
-Package: libvte-2.91-common
-Architecture: any
-Depends: ${misc:Depends}, ${shlibs:Depends}
-Replaces: libvte-2.91-0 (<= 0.60.0-2ubuntu1)
-Breaks: libvte-2.91-0 (<= 0.60.0-2ubuntu1)
-Multi-Arch: foreign
-Description: Terminal emulator widget for GTK+ 3.0 - common files
- The VTE library provides a terminal emulator widget VteTerminal for
- applications using the GTK+ toolkit. It also provides the VtePTY object
- containing functions for starting a new process on a new
- pseudo-terminal and for manipulating pseudo-terminals.
- .
- This package contains internationalization files for the VTE library
- and common files for the GTK+ 3.x version.
-
-Package: libvte-2.91-doc
-Architecture: all
-Multi-Arch: foreign
-Section: doc
-Depends: ${misc:Depends}
-Build-Profiles: 
-Description: Terminal emulator widget for GTK+ 3.0 - documentation
- The VTE library provides a terminal emulator widget VteTerminal for
- applications using the GTK+ toolkit. It also provides the VtePTY object
- containing functions for starting a new process on a new
- pseudo-terminal and for manipulating pseudo-terminals.
- .
- This package contains documentation files for the VTE library for GTK+
- 3.x.
diff --git a/debian/copyright b/debian/copyright
deleted file mode 100644
index 970fc72..0000000
--- a/debian/copyright
+++ /dev/null
@@ -1,199 +0,0 @@
-Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: vte
-Source: https://download.gnome.org/sources/vte/
-
-Files: *
-Copyright: 2001-2010 Red Hat, Inc.
-           2008-2018 Christian Persch
-License: LGPL-2.1+
-
-Files: po/*.po
-Copyright: 2002-2017 Free Software Foundation, Inc.
-           2003-2017 the vte authors
-           2002-2014 Kjartan Maraas
-           2003 Mətin Əmirov
-           2003 The FarsiWeb Project Group
-           2003-2008 GNOME Foundation
-           2004 Tamil Translation Team
-           2004 Aiet Kolkhi
-           2005 Canonical Ltd.
-           2006 Gnome i18n Project for Latvian
-           2007 Swecha Telugu Localisation Team
-           2007-2010 The GNOME Project
-           2010 The IFSUG Translation Group
-           2010 Fran Diéguez
-           Adam Weinberger
-           Croatiann team
-License: LGPL-2.1+
-
-Files:
- src/attr.hh
- src/color-triple.hh
- src/modes-ecma.hh
- src/modes-private.hh
- src/modes-test.cc
- src/modes.hh
- src/parser-arg.hh
- src/parser-c01.hh
- src/parser-charset-tables.hh
- src/parser-charset.hh
- src/parser-cmd.hh
- src/parser-csi.hh
- src/parser-dcs.hh
- src/parser-esc.hh
- src/parser-glue.hh
- src/parser-osc.hh
- src/parser-reply.hh
- src/parser-string.hh
- src/parser-test.cc
- src/parser.cc
- src/parser.hh
- src/refptr-test.cc
- src/refptr.hh
- src/tabstops-test.cc
- src/tabstops.hh
- src/vteseq.cc
- src/widget.cc
- src/widget.hh
-Copyright: 2001-2010 Red Hat, Inc.
-           2015 David Herrmann
-           2008-2018 Christian Persch
-License: LGPL-3+
-
-Files:
- src/utf8-test.cc
-Copyright: 2015-2016 Mozilla Foundation
-           2018 Christian Persch
-License: LGPL-3+ and Expat
-
-Files:
- src/utf8.cc
- src/utf8.hh
-Copyright: 2008-2009 Bjoern Hoerhmann
-License: Expat
-
-Files: src/vtestream-file.h
-Copyright: 2009,2010 Red Hat, Inc.
-           2013 Google, Inc.
-License: LGPL-2.1+
-
-Files:
- src/app/*
- src/parser-cat.cc
- src/vte.sh
-Copyright: 2001-2003 Red Hat, Inc.
-           2006 Shaun McCance 
-           2013 Peter De Wachter 
-           2017-2018 Christian Persch
-License: GPL-3+
-
-Files: src/box_drawing_generate.sh
-       perf/img.sh
-       perf/256test.sh
-       perf/sgr-test.sh
-Copyright: 2014-2017 Egmont Koblinger
-License: GPL-2+
-
-Files: src/test-vte-sh.sh
-Copyright: 2013 Christian Persch
-License: GPL-2+
-
-Files: src/app/app.gresource.xml
-       bindings/vala/app.vala
-       bindings/vala/app.gresource.xml
-Copyright: 2001,2002 Red Hat, Inc.
-           2014 Christian Persch
-License: GPL-2+
-
-License: LGPL-2.1+
- This package is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- .
- This package is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- Lesser General Public License for more details.
- .
- You should have received a copy of the GNU Lesser General Public License
- along with this program. If not, see .
- .
- On Debian systems, the complete text of the GNU Lesser General
- Public License can be found in "/usr/share/common-licenses/LGPL-2".
-
-License: LGPL-3+
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
- .
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- Lesser General Public License for more details.
- .
- You should have received a copy of the GNU Lesser General Public License
- along with this program. If not, see .
- .
- On Debian systems, the complete text of the GNU Lesser General
- Public License can be found in "/usr/share/common-licenses/LGPL-3".
-
-License: GPL-2+
- This package is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- .
- This package is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- .
- You should have received a copy of the GNU General Public License
- along with this program. If not, see 
- .
- On Debian systems, the complete text of the GNU General Public
- License version 2 can be found in "/usr/share/common-licenses/GPL-2".
-
-License: GPL-3+
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- .
- This package is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- .
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
- .
- On Debian systems, the complete text of the GNU General Public
- License version 3 can be found in "/usr/share/common-licenses/GPL-3".
-
-License: Expat
- Permission is hereby granted, free of charge, to any
- person obtaining a copy of this software and associated
- documentation files (the "Software"), to deal in the
- Software without restriction, including without
- limitation the rights to use, copy, modify, merge,
- publish, distribute, sublicense, and/or sell copies of
- the Software, and to permit persons to whom the Software
- is furnished to do so, subject to the following
- conditions:
- .
- The above copyright notice and this permission notice
- shall be included in all copies or substantial portions
- of the Software.
- .
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
- ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
- TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
- SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
- IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
diff --git a/debian/gir1.2-vte-2.91.install b/debian/gir1.2-vte-2.91.install
deleted file mode 100644
index 1123ce4..0000000
--- a/debian/gir1.2-vte-2.91.install
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/*/girepository-1.0/Vte-2.91.typelib
diff --git a/debian/libvte-2.91-0-udeb.install b/debian/libvte-2.91-0-udeb.install
deleted file mode 100644
index 107faa4..0000000
--- a/debian/libvte-2.91-0-udeb.install
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/*/libvte*.so.*
diff --git a/debian/libvte-2.91-0.docs b/debian/libvte-2.91-0.docs
deleted file mode 100644
index edc0071..0000000
--- a/debian/libvte-2.91-0.docs
+++ /dev/null
@@ -1 +0,0 @@
-NEWS
diff --git a/debian/libvte-2.91-0.install b/debian/libvte-2.91-0.install
deleted file mode 100644
index 1faccec..0000000
--- a/debian/libvte-2.91-0.install
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/*/libvte-2.91.so.*
diff --git a/debian/libvte-2.91-0.symbols b/debian/libvte-2.91-0.symbols
deleted file mode 100644
index 2053217..0000000
--- a/debian/libvte-2.91-0.symbols
+++ /dev/null
@@ -1,155 +0,0 @@
-libvte-2.91.so.0 libvte-2.91-0 #MINVER#
-* Build-Depends-Package: libvte-2.91-dev
- vte_cursor_blink_mode_get_type@Base 0
- vte_cursor_shape_get_type@Base 0
- vte_erase_binding_get_type@Base 0
- vte_format_get_type@Base 0.49.92
- vte_get_encoding_supported@Base 0.60.0
- vte_get_encodings@Base 0.60.0
- vte_get_features@Base 0.40.2
- vte_get_major_version@Base 0.40.2
- vte_get_micro_version@Base 0.40.2
- vte_get_minor_version@Base 0.40.2
-#MISSING: 0.42.0-1# vte_get_resource@Base 0
- vte_get_user_shell@Base 0
- vte_pty_child_setup@Base 0
- vte_pty_close@Base 0
- vte_pty_error_get_type@Base 0
- vte_pty_error_quark@Base 0
- vte_pty_flags_get_type@Base 0
- vte_pty_get_fd@Base 0
- vte_pty_get_size@Base 0
- vte_pty_get_type@Base 0
- vte_pty_new_foreign_sync@Base 0
- vte_pty_new_sync@Base 0
- vte_pty_set_size@Base 0
- vte_pty_set_utf8@Base 0
- vte_pty_spawn_async@Base 0.47.90
- vte_pty_spawn_finish@Base 0.47.90
- vte_regex_error_get_type@Base 0.45.90
- vte_regex_error_quark@Base 0.45.90
- vte_regex_get_type@Base 0.45.90
- vte_regex_jit@Base 0.45.90
- vte_regex_new_for_match@Base 0.45.90
- vte_regex_new_for_search@Base 0.45.90
- vte_regex_ref@Base 0.45.90
- vte_regex_substitute@Base 0.55.90
- vte_regex_unref@Base 0.45.90
- (optional=useful only for debugging, skipped by introspection too)vte_set_test_flags@Base 0.54.0
- vte_terminal_copy_clipboard@Base 0
- vte_terminal_copy_clipboard_format@Base 0.49.92
- vte_terminal_copy_primary@Base 0
- vte_terminal_event_check_gregex_simple@Base 0.44.0
- vte_terminal_event_check_regex_simple@Base 0.45.90
- vte_terminal_feed@Base 0
- vte_terminal_feed_child@Base 0
- vte_terminal_feed_child_binary@Base 0
- vte_terminal_get_allow_bold@Base 0
- vte_terminal_get_allow_hyperlink@Base 0.49.92
- vte_terminal_get_audible_bell@Base 0
- vte_terminal_get_bold_is_bright@Base 0.51.90
- vte_terminal_get_cell_height_scale@Base 0.51.90
- vte_terminal_get_cell_width_scale@Base 0.51.90
- vte_terminal_get_char_height@Base 0
- vte_terminal_get_char_width@Base 0
- vte_terminal_get_cjk_ambiguous_width@Base 0
- vte_terminal_get_color_background_for_draw@Base 0.54.0
- vte_terminal_get_column_count@Base 0
- vte_terminal_get_current_directory_uri@Base 0
- vte_terminal_get_current_file_uri@Base 0
- vte_terminal_get_cursor_blink_mode@Base 0
- vte_terminal_get_cursor_position@Base 0
- vte_terminal_get_cursor_shape@Base 0
- vte_terminal_get_enable_bidi@Base 0.57.90
- vte_terminal_get_enable_shaping@Base 0.57.90
- vte_terminal_get_encoding@Base 0
- vte_terminal_get_font@Base 0
- vte_terminal_get_font_scale@Base 0
- vte_terminal_get_geometry_hints@Base 0
- vte_terminal_get_has_selection@Base 0
- vte_terminal_get_icon_title@Base 0
- vte_terminal_get_input_enabled@Base 0
- vte_terminal_get_mouse_autohide@Base 0
- vte_terminal_get_pty@Base 0
- vte_terminal_get_rewrap_on_resize@Base 0
- vte_terminal_get_row_count@Base 0
- vte_terminal_get_scroll_on_keystroke@Base 0.51.90
- vte_terminal_get_scroll_on_output@Base 0.51.90
- vte_terminal_get_scrollback_lines@Base 0.51.90
- vte_terminal_get_text@Base 0
- vte_terminal_get_text_blink_mode@Base 0.51.90
- vte_terminal_get_text_include_trailing_spaces@Base 0
- vte_terminal_get_text_range@Base 0
- vte_terminal_get_type@Base 0
- vte_terminal_get_window_title@Base 0
- vte_terminal_get_word_char_exceptions@Base 0.40.2
- vte_terminal_hyperlink_check_event@Base 0.49.92
- vte_terminal_match_add_gregex@Base 0
- vte_terminal_match_add_regex@Base 0.45.90
- vte_terminal_match_check@Base 0
- vte_terminal_match_check_event@Base 0
- vte_terminal_match_remove@Base 0
- vte_terminal_match_remove_all@Base 0
- vte_terminal_match_set_cursor@Base 0
- vte_terminal_match_set_cursor_name@Base 0
- vte_terminal_match_set_cursor_type@Base 0
- vte_terminal_new@Base 0
- vte_terminal_paste_clipboard@Base 0
- vte_terminal_paste_primary@Base 0
- vte_terminal_pty_new_sync@Base 0
- vte_terminal_reset@Base 0
- vte_terminal_search_find_next@Base 0
- vte_terminal_search_find_previous@Base 0
- vte_terminal_search_get_gregex@Base 0
- vte_terminal_search_get_regex@Base 0.45.90
- vte_terminal_search_get_wrap_around@Base 0
- vte_terminal_search_set_gregex@Base 0
- vte_terminal_search_set_regex@Base 0.45.90
- vte_terminal_search_set_wrap_around@Base 0
- vte_terminal_select_all@Base 0
- vte_terminal_set_allow_bold@Base 0
- vte_terminal_set_allow_hyperlink@Base 0.49.92
- vte_terminal_set_audible_bell@Base 0
- vte_terminal_set_backspace_binding@Base 0
- vte_terminal_set_bold_is_bright@Base 0.51.90
- vte_terminal_set_cell_height_scale@Base 0.51.90
- vte_terminal_set_cell_width_scale@Base 0.51.90
- vte_terminal_set_cjk_ambiguous_width@Base 0
- vte_terminal_set_clear_background@Base 0.51.90
- vte_terminal_set_color_background@Base 0
- vte_terminal_set_color_bold@Base 0
- vte_terminal_set_color_cursor@Base 0
- vte_terminal_set_color_cursor_foreground@Base 0.44.0
- vte_terminal_set_color_foreground@Base 0
- vte_terminal_set_color_highlight@Base 0
- vte_terminal_set_color_highlight_foreground@Base 0
- vte_terminal_set_colors@Base 0
- vte_terminal_set_cursor_blink_mode@Base 0
- vte_terminal_set_cursor_shape@Base 0
- vte_terminal_set_default_colors@Base 0
- vte_terminal_set_delete_binding@Base 0
- vte_terminal_set_enable_bidi@Base 0.57.90
- vte_terminal_set_enable_shaping@Base 0.57.90
- vte_terminal_set_encoding@Base 0
- vte_terminal_set_font@Base 0
- vte_terminal_set_font_scale@Base 0
- vte_terminal_set_geometry_hints_for_window@Base 0
- vte_terminal_set_input_enabled@Base 0
- vte_terminal_set_mouse_autohide@Base 0
- vte_terminal_set_pty@Base 0
- vte_terminal_set_rewrap_on_resize@Base 0
- vte_terminal_set_scroll_on_keystroke@Base 0
- vte_terminal_set_scroll_on_output@Base 0
- vte_terminal_set_scrollback_lines@Base 0
- vte_terminal_set_size@Base 0
- vte_terminal_set_text_blink_mode@Base 0.51.90
- vte_terminal_set_word_char_exceptions@Base 0.40.2
- vte_terminal_spawn_async@Base 0.47.90
- vte_terminal_spawn_sync@Base 0
- vte_terminal_unselect_all@Base 0
- vte_terminal_watch_child@Base 0
- vte_terminal_write_contents_sync@Base 0
- vte_text_blink_mode_get_type@Base 0.51.90
- vte_write_flags_get_type@Base 0
- (optional=template|regex|arch=rv64g riscv64)"_ZN.*@Base" 0
- (optional=template|regex|arch=rv64g riscv64)"_ZS.*@Base" 0
diff --git a/debian/libvte-2.91-common.install b/debian/libvte-2.91-common.install
deleted file mode 100644
index 04cf00b..0000000
--- a/debian/libvte-2.91-common.install
+++ /dev/null
@@ -1,4 +0,0 @@
-etc/profile.d/
-usr/lib/systemd/
-usr/libexec/
-usr/share/locale
diff --git a/debian/libvte-2.91-dev.install b/debian/libvte-2.91-dev.install
deleted file mode 100644
index b55442b..0000000
--- a/debian/libvte-2.91-dev.install
+++ /dev/null
@@ -1,5 +0,0 @@
-usr/include/vte-2.91
-usr/lib/*/libvte-2.91.so
-usr/lib/*/pkgconfig/vte-2.91.pc
-usr/share/gir-1.0
-usr/share/vala/vapi
diff --git a/debian/libvte-2.91-doc.install b/debian/libvte-2.91-doc.install
deleted file mode 100644
index 95af827..0000000
--- a/debian/libvte-2.91-doc.install
+++ /dev/null
@@ -1 +0,0 @@
-usr/share/gtk-doc
diff --git a/debian/rules b/debian/rules
deleted file mode 100755
index 97d900c..0000000
--- a/debian/rules
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/make -f
-
-binaries := $(shell dh_listpackages)
-LIB_PKG := $(shell sed -rn 's/^Package:[[:space:]]*(libvte-[0-9\.-]+)[[:space:]]*$$/\1/p' debian/control)
-UDEB_PKG := $(LIB_PKG)-udeb
-
-ifeq ($(DEB_HOST_ARCH), rv64g)
-	export DEB_BUILD_OPTIONS=nocheck
-endif
-
-
-export DEB_BUILD_MAINT_OPTIONS = hardening=+all
-export DEB_LDFLAGS_MAINT_APPEND = -Wl,-O1 -Wl,-z,defs -Wl,--as-needed
-
-%:
-	dh $@
-
-CONFFLAGS_deb = \
-	-Ddocs=true \
-	-Dgir=true \
-	-Dgnutls=true
-
-CONFFLAGS_udeb = \
-	-Ddocs=false \
-	-Dgir=false \
-	-Dgnutls=false \
-	-Dvapi=false \
-	-D_systemd=false
-
-override_dh_auto_configure:
-	dh_auto_configure --builddirectory=build-deb -- $(CONFFLAGS_deb)
-ifneq ($(filter %-udeb,$(binaries)),)
-	dh_auto_configure --builddirectory=build-udeb -- $(CONFFLAGS_udeb)
-endif
-
-override_dh_auto_build:
-	dh_auto_build --builddirectory=build-deb
-ifneq ($(filter %-udeb,$(binaries)),)
-	dh_auto_build --builddirectory=build-udeb
-endif
-
-override_dh_auto_install:
-	dh_auto_install --builddirectory=build-deb \
-		--destdir=debian/tmp/deb
-	rm debian/tmp/deb/usr/bin/vte-2.91
-ifneq ($(filter %-udeb,$(binaries)),)
-	dh_auto_install --builddirectory=build-udeb \
-		--destdir=debian/tmp/udeb
-	rm debian/tmp/udeb/usr/bin/vte-2.91
-	rm debian/tmp/udeb/usr/libexec/vte-urlencode-cwd
-endif
-	mv debian/tmp/deb/etc/profile.d/vte.sh \
-		debian/tmp/deb/etc/profile.d/vte-2.91.sh
-
-override_dh_auto_clean:
-	dh_auto_clean --builddirectory=build-deb
-ifneq ($(filter %-udeb,$(binaries)),)
-	dh_auto_clean --builddirectory=build-udeb
-endif
-
-override_dh_clean:
-	rm -f debian/libvte-2.91-common.install.kfreebsd
-	rm -f debian/libvte-2.91-common.install.hurd
-	dh_clean
-
-override_dh_auto_test:
-	dh_auto_test --builddirectory=build-deb
-
-override_dh_makeshlibs:
-	dh_makeshlibs -p$(LIB_PKG) --add-udeb=$(UDEB_PKG) -V -- -c4
-	dh_makeshlibs --remaining-packages
-
-override_dh_install:
-	grep -E -v 'lib/systemd' debian/libvte-2.91-common.install > debian/libvte-2.91-common.install.kfreebsd
-	grep -E -v 'lib/systemd' debian/libvte-2.91-common.install > debian/libvte-2.91-common.install.hurd
-ifneq ($(filter %-udeb,$(binaries)),)
-	dh_install -p$(UDEB_PKG) --sourcedir=debian/tmp/udeb
-endif
-	dh_install --remaining-packages --sourcedir=debian/tmp/deb
-
-override_dh_missing:
-	dh_missing --fail-missing
diff --git a/debian/source/format b/debian/source/format
deleted file mode 100644
index 89ae9db..0000000
--- a/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (native)
diff --git a/debian/tests/build b/debian/tests/build
deleted file mode 100755
index 986c337..0000000
--- a/debian/tests/build
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/sh
-# autopkgtest check: Build and run a program against VTE, to verify that the
-# headers and pkg-config file are installed correctly
-# Based on d/tests/build from glib2.0
-# (C) 2012 Canonical Ltd.
-# (C) 2018 Simon McVittie
-# Authors: Martin Pitt, Simon McVittie
-
-set -eux
-
-mode=dynamic
-
-getopt_temp="$(getopt -o '' --long 'static' -n debian/tests/build -- "$@")"
-eval set -- "$getopt_temp"
-
-while true; do
-    case "$1" in
-        (--static)
-            mode=static
-            shift
-            continue
-            ;;
-
-        (--)
-            shift
-            break
-            ;;
-
-        (*)
-            echo "getopt: Internal error" >&2
-            exit 2
-    esac
-done
-
-WORKDIR=$(mktemp -d)
-trap 'rm -rf "$WORKDIR"' 0 INT QUIT ABRT PIPE TERM
-cd "$WORKDIR"
-
-if [ -n "${DEB_HOST_GNU_TYPE:-}" ]; then
-    CROSS_COMPILE="${DEB_HOST_GNU_TYPE}-"
-else
-    CROSS_COMPILE=
-fi
-
-cat < example.c
-#include 
-
-int main(void)
-{
-    g_assert_cmpuint (VTE_TYPE_REGEX, !=, G_TYPE_INVALID);
-    return 0;
-}
-EOF
-
-cflags=
-pcflags=
-
-case "$mode" in
-(static)
-    cflags=-static
-    pcflags=--static
-    ;;
-esac
-
-# shellcheck disable=SC2046
-"${CROSS_COMPILE}gcc" $cflags -o "$mode" example.c $("${CROSS_COMPILE}pkg-config" $pcflags --cflags --libs vte-2.91)
-echo "build ($mode): OK"
-[ -x "$mode" ]
-"./$mode"
-echo "run ($mode): OK"
diff --git a/debian/tests/control b/debian/tests/control
deleted file mode 100644
index 344275d..0000000
--- a/debian/tests/control
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests: build
-Depends: build-essential, libvte-2.91-dev
-Restrictions: allow-stderr superficial
diff --git a/debian/watch b/debian/watch
deleted file mode 100644
index 0f483cf..0000000
--- a/debian/watch
+++ /dev/null
@@ -1,3 +0,0 @@
-version=4
-https://download.gnome.org/sources/vte/([\d\.]+[02468])/ \
-	vte@ANY_VERSION@@ARCHIVE_EXT@
diff --git a/doc/ambiguous.txt b/doc/ambiguous.txt
index 6e24e26..255e94a 100644
--- a/doc/ambiguous.txt
+++ b/doc/ambiguous.txt
@@ -15,7 +15,7 @@ the context in which they appear.
 
 Width information is crucial for terminal-based applications which need
 to address the screen:  if the application draws five characters and
-expects the cursor to be in moved six columns to the right, and the
+expects the cursor to be moved six columns to the right, and the
 terminal moves the cursor seven (or five, or any number other than six),
 display bugs manifest.
 
@@ -28,9 +28,9 @@ locale information.
 There are basically four approaches to solving this problem:
 A) Force characters with ambiguous width to be single-width.
 B) Force characters with ambiguous width to be double-width.
-C) Force characters with ambiguous width to be have a width value based
+C) Force characters with ambiguous width to have a width value based
    on the locale's region.
-D) Force characters with ambiguous width to be have a width value based
+D) Force characters with ambiguous width to have a width value based
    on the locale's encoding.
 
 Methods A and B will produce display bugs, because they don't take into
diff --git a/doc/reference/licence.md b/doc/reference/licence.md
new file mode 100644
index 0000000..6c0b1d9
--- /dev/null
+++ b/doc/reference/licence.md
@@ -0,0 +1,27 @@
+# Copyright © 2022 Christian Persch
+#
+# This library is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this library.  If not, see .
+
+This documentation is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published
+by the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This documentation is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this documentation.  If not, see .
diff --git a/doc/reference/meson.build b/doc/reference/meson.build
index 88cd671..beffb32 100644
--- a/doc/reference/meson.build
+++ b/doc/reference/meson.build
@@ -1,108 +1,97 @@
-# Copyright © 2018, 2019 Iñigo Martínez
+# Copyright © 2021, 2022 Christian Persch
 #
-# This library is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or (at your
-# option) any later version.
+# This library is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
 #
-# This library is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
-# General Public License for more details.
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public License
 # along with this library.  If not, see .
 
-# Meson insufficiency! Would be so much easier to just make this
-# (vte_gtk3_sources - vte_gtk3_public_headers).filter('.h'), but
-# but there is no array subtraction or filtering. Or just allow listing the
-# headers that we DO want to get scanned.
-# So instead just list all the headers here again... :-(
+assert(get_option('gir'), 'Introspection must be enabled to build docs')
 
-private_headers = [
-  'buffer.h',
-  'caps.hh',
-  'cell.hh',
-  'config.h',
-  'debug.h',
-  'keymap.h',
-  'marshal.h',
-  'modes.hh',
-  'modes-ecma.hh',
-  'modes-private.hh',
-  'parser.hh',
-  'parser-arg.hh',
-  'parser-c01.hh',
-  'parser-charset.hh',
-  'parser-charset-tables.hh',
-  'parser-cmd.hh',
-  'parser-csi.hh',
-  'parser-dcs.hh',
-  'parser-esc.hh',
-  'parser-glue.hh',
-  'parser-osc.hh',
-  'parser-reply.hh',
-  'parser-string.hh',
-  'ring.hh',
-  'tabstops.hh',
-  'vteconv.h',
-  'vtedraw.h',
-  'vteinternal.hh',
-  'vterowdata.hh',
-  'vtestream-base.h',
-  'vtestream-file.h',
-  'vtestream.h',
-  'vtetypebuiltins.h',
-  'vteunistr.h',
+gidocgen = find_program('gi-docgen', required: true)
+
+doc_conf = configuration_data()
+doc_conf.set('version', meson.project_version())
+
+doc_sources = [
+  'licence.md',
 ]
 
-scan_args = [
-  '--deprecated-guards="VTE_DISABLE_DEPRECATED"',
-  '--ignore-decorators=_VTE_GNUC_NONNULL\s*\([^)]*\)',
-]
-
-glib_prefix = glib_dep.get_pkgconfig_variable('prefix')
-
-version_conf = configuration_data()
-version_conf.set('VERSION', vte_version)
-
-content_files = configure_file(
-  input: 'version.xml.in',
-  output: '@BASENAME@',
-  configuration: version_conf
-)
+docdir = vte_datadir / 'doc'
 
 if get_option('gtk3')
-  gtk3_prefix = gtk3_dep.get_pkgconfig_variable('prefix')
 
-  fixxref_args = [
-    '--html-dir=' + (vte_prefix / gnome.gtkdoc_html_dir(vte_gtk3_api_name)),
-    '--extra-dir=' + (glib_prefix / gnome.gtkdoc_html_dir('glib')),
-    '--extra-dir=' + (glib_prefix / gnome.gtkdoc_html_dir('gio')),
-    '--extra-dir=' + (gtk3_prefix / gnome.gtkdoc_html_dir('gdk')),
-    '--extra-dir=' + (gtk3_prefix / gnome.gtkdoc_html_dir('gdk-pixbuf')),
-    '--extra-dir=' + (gtk3_prefix / gnome.gtkdoc_html_dir('gtk')),
-  ]
-
-  gnome.gtkdoc(
-    'vte',
-    main_xml: 'vte-docs.xml',
-    module_version: vte_api_version,
-    src_dir: [src_inc, vte_inc],
-    ignore_headers: private_headers,
-    include_directories: top_inc,
-    dependencies: libvte_gtk3_dep,
-    c_args: '-DVTE_COMPILATION',
-    namespace: 'vte',
-    scan_args: scan_args,
-    mkdb_args: '--source-suffixes=h,hh,c,cc',
-    fixxref_args: fixxref_args,
-    gobject_typesfile: 'vte.types',
-    content_files: content_files,
+  libvte_gtk3_docs_toml = configure_file(
+    configuration: doc_conf,
+    input: 'vte-gtk3.toml.in',
     install: true,
+    install_dir: docdir / vte_gtk3_api_name,
+    output: vte_gtk3_api_name + '.toml',
   )
-endif
+
+  libvte_gtk3_docs = custom_target(
+    vte_gtk3_api_name,
+    command: [
+      gidocgen,
+      'generate',
+      '--config', '@INPUT0@',
+      '--content-dir', meson.current_source_dir(),
+      '--fatal-warnings',
+      '--no-namespace-dir',
+      '--output-dir', '@OUTPUT@',
+      '--quiet',
+      '@INPUT1@',
+    ],
+    depend_files: [doc_sources,],
+    input: [
+      libvte_gtk3_docs_toml,
+      libvte_gtk3_gir[0],
+    ],
+    install: true,
+    install_dir: docdir,
+    output: vte_gtk3_api_name,
+  )
+
+endif # gtk3
 
 if get_option('gtk4')
-  assert(false, 'not yet supported')
-endif
+
+  libvte_gtk4_docs_toml = configure_file(
+    configuration: doc_conf,
+    input: 'vte-gtk4.toml.in',
+    install: true,
+    install_dir: docdir / vte_gtk4_api_name,
+    output: vte_gtk4_api_name + '.toml',
+  )
+
+  libvte_gtk4_docs = custom_target(
+    vte_gtk4_api_name,
+    command: [
+      gidocgen,
+      'generate',
+      '--config', '@INPUT0@',
+      '--content-dir', meson.current_source_dir(),
+      '--fatal-warnings',
+      '--no-namespace-dir',
+      '--output-dir', '@OUTPUT@',
+      '--quiet',
+      '@INPUT1@',
+    ],
+    depend_files: [doc_sources,],
+    input: [
+      libvte_gtk4_docs_toml,
+      libvte_gtk4_gir[0],
+    ],
+    install: true,
+    install_dir: docdir,
+    output: vte_gtk4_api_name,
+  )
+
+endif # gtk4
diff --git a/doc/reference/version.xml.in b/doc/reference/version.xml.in
deleted file mode 100644
index d78bda9..0000000
--- a/doc/reference/version.xml.in
+++ /dev/null
@@ -1 +0,0 @@
-@VERSION@
diff --git a/doc/reference/vte-docs.xml b/doc/reference/vte-docs.xml
deleted file mode 100644
index 61a390e..0000000
--- a/doc/reference/vte-docs.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
-]>
-
-  
-
-  
-    VTE Reference Manual
-    
-      Documentation for VTE version &version;.
-      The latest version of this documentation can be found on-line at the
-      GNOME Library.
-    
-
-    
-      2009
-      2010
-      Christian Persch
-    
-
-    
-      
-        Permission is granted to copy, distribute and/or modify this document
-        under the terms of the GNU Lesser General Public Licence, Version 2.1
-        or (at your option) any later version published by the Free Software Foundation.
-
-        You may obtain a copy of the GNU Lesser General Public Licence
-        from the Free Software Foundation at
-        GNU Licences web site
-        or by writing to:
-
-        
- The Free Software Foundation, Inc., - 51 Franklin St – Fifth Floor, - Boston, MA 02110-1301, - USA -
-
-
-
- - - API Reference - - - - - - - - - - - - - - - - Object Hierarchy - - - - - Index - - - - Index of deprecated symbols - - - - Index of new symbols in 0.40 - - - - Index of new symbols in 0.44 - - - - Index of new symbols in 0.46 - - - - Index of new symbols in 0.48 - - - - Index of new symbols in 0.50 - - - - Index of new symbols in 0.52 - - - - Index of new symbols in 0.54 - - - - Index of new symbols in 0.56 - - - - Index of new symbols in 0.58 - - - - - - - Licence - - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - Licence as published by the Free Software Foundation; either - version 2.1 of the Licence, or (at your option) any later version. - - - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public Licence for - more details. - - - - You may obtain a copy of the GNU Lesser General Public Licence - from the Free Software Foundation at - GNU Licences web site - or by writing to: - -
- The Free Software Foundation, Inc., - 51 Franklin St – Fifth Floor, - Boston, MA 02110-1301, - USA -
-
-
- -
diff --git a/doc/reference/vte-gtk3.toml.in b/doc/reference/vte-gtk3.toml.in new file mode 100644 index 0000000..aa453f6 --- /dev/null +++ b/doc/reference/vte-gtk3.toml.in @@ -0,0 +1,54 @@ +# Copyright © 2022 Christian Persch +# +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library. If not, see . + +[library] +authors = "VTE developers" +browse_url = "https://gitlab.gnome.org/GNOME/vte/" +dependencies = ["Gdk-3.0", "Gtk-3.0", "GObject-2.0", "Pango-1.0"] +description = "Virtual TErminal widget" +devhelp = true +license = "LGPL-3.0-or-later" +repository_url = "https://gitlab.gnome.org/GNOME/vte.git" +search_index = true +version = "@version@" +website_url = "https://wiki.gnome.org/Apps/Terminal" + + [dependencies."Gdk-3.0"] + description = "The GDK 3.0 toolkit" + docs_url = "https://docs.gtk.org/gdk3/" + name = "GDK" + + [dependencies."Gtk-3.0"] + description = "The GTK+ 3.0 toolkit" + docs_url = "https://docs.gtk.org/gtk3/" + name = "GTK" + + [dependencies."GObject-2.0"] + description = "The GObject 2.0 toolkit" + docs_url = "https://docs.gtk.org/gobject/" + name = "GObject" + + [dependencies."Pango-1.0"] + description = "The Pango 1.0 toolkit" + docs_url = "https://docs.gtk.org/Pango/" + name = "Pango" + +[theme] +name = "basic" +show_class_hierarchy = true +show_index_summary = true + +[source-location] +base_url = "https://gitlab.gnome.org/GNOME/vte/-/blob/master/" diff --git a/doc/reference/vte-gtk4.toml.in b/doc/reference/vte-gtk4.toml.in new file mode 100644 index 0000000..65027e8 --- /dev/null +++ b/doc/reference/vte-gtk4.toml.in @@ -0,0 +1,59 @@ +# Copyright © 2022 Christian Persch +# +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library. If not, see . + +[library] +authors = "VTE developers" +browse_url = "https://gitlab.gnome.org/GNOME/vte/" +dependencies = ["Gdk-4.0", "Graphene-1.0", "Gtk-4.0", "GObject-2.0", "Pango-1.0"] +description = "Virtual TErminal widget" +devhelp = true +license = "LGPL-3.0-or-later" +repository_url = "https://gitlab.gnome.org/GNOME/vte.git" +search_index = true +version = "@version@" +website_url = "https://wiki.gnome.org/Apps/Terminal" + + [dependencies."Gdk-4.0"] + description = "The GDK 4.0 toolkit" + docs_url = "https://docs.gtk.org/gdk4/" + name = "GDK" + + [dependencies."Graphene-1.0"] + description = "The GSK 1.0 toolkit" + docs_url = "https://ebassi.github.io/graphene/docs/" + name = "Graphene" + + [dependencies."Gtk-4.0"] + description = "The GTK+ 4.0 toolkit" + docs_url = "https://docs.gtk.org/gtk4/" + name = "GTK" + + [dependencies."GObject-2.0"] + description = "The GObject 2.0 toolkit" + docs_url = "https://docs.gtk.org/gobject/" + name = "GObject" + + [dependencies."Pango-1.0"] + description = "The Pango 1.0 toolkit" + docs_url = "https://docs.gtk.org/Pango/" + name = "Pango" + +[theme] +name = "basic" +show_class_hierarchy = true +show_index_summary = true + +[source-location] +base_url = "https://gitlab.gnome.org/GNOME/vte/-/blob/master/" diff --git a/doc/reference/vte-overrides.txt b/doc/reference/vte-overrides.txt deleted file mode 100644 index e69de29..0000000 diff --git a/doc/reference/vte-sections.txt b/doc/reference/vte-sections.txt deleted file mode 100644 index 20067c8..0000000 --- a/doc/reference/vte-sections.txt +++ /dev/null @@ -1,240 +0,0 @@ -
-vte-terminal -VteTerminal -VteTerminal -VteCursorBlinkMode -VteCursorShape -VteEraseBinding -VteTextBlinkMode -VteFormat -VteWriteFlags -VteSelectionFunc -vte_terminal_new -vte_terminal_feed -vte_terminal_feed_child -vte_terminal_select_all -vte_terminal_unselect_all -vte_terminal_copy_clipboard_format -vte_terminal_paste_clipboard -vte_terminal_copy_primary -vte_terminal_paste_primary -vte_terminal_set_size -vte_terminal_set_font_scale -vte_terminal_get_font_scale -vte_terminal_set_audible_bell -vte_terminal_get_audible_bell -vte_terminal_set_allow_bold -vte_terminal_get_allow_bold -vte_terminal_set_bold_is_bright -vte_terminal_get_bold_is_bright -vte_terminal_set_allow_hyperlink -vte_terminal_get_allow_hyperlink -vte_terminal_set_scroll_on_output -vte_terminal_get_scroll_on_output -vte_terminal_set_scroll_on_keystroke -vte_terminal_get_scroll_on_keystroke -vte_terminal_set_cell_height_scale -vte_terminal_get_cell_height_scale -vte_terminal_set_cell_width_scale -vte_terminal_get_cell_width_scale -vte_terminal_set_color_bold -vte_terminal_set_color_foreground -vte_terminal_set_color_background -vte_terminal_set_color_cursor -vte_terminal_set_color_cursor_foreground -vte_terminal_set_color_highlight -vte_terminal_set_color_highlight_foreground -vte_terminal_set_colors -vte_terminal_set_default_colors -vte_terminal_set_cursor_shape -vte_terminal_get_cursor_shape -vte_terminal_get_cursor_blink_mode -vte_terminal_set_cursor_blink_mode -vte_terminal_get_text_blink_mode -vte_terminal_set_text_blink_mode -vte_terminal_set_scrollback_lines -vte_terminal_get_scrollback_lines -vte_terminal_set_font -vte_terminal_get_font -vte_terminal_get_has_selection -vte_terminal_set_backspace_binding -vte_terminal_set_delete_binding -vte_terminal_set_mouse_autohide -vte_terminal_get_mouse_autohide -vte_terminal_set_enable_bidi -vte_terminal_get_enable_bidi -vte_terminal_set_enable_shaping -vte_terminal_get_enable_shaping -vte_terminal_reset -vte_terminal_get_text -vte_terminal_get_text_range -vte_terminal_get_cursor_position -vte_terminal_hyperlink_check_event -vte_terminal_match_add_regex -vte_terminal_match_remove -vte_terminal_match_remove_all -vte_terminal_match_check -vte_terminal_match_check_event -vte_terminal_match_set_cursor_name -vte_terminal_set_cjk_ambiguous_width -vte_terminal_get_cjk_ambiguous_width -vte_terminal_set_word_char_exceptions -vte_terminal_get_word_char_exceptions -vte_terminal_set_input_enabled -vte_terminal_get_input_enabled -vte_terminal_write_contents_sync -vte_terminal_search_find_next -vte_terminal_search_find_previous -vte_terminal_search_get_regex -vte_terminal_search_get_wrap_around -vte_terminal_search_set_regex -vte_terminal_search_set_wrap_around -vte_terminal_event_check_regex_simple - - -vte_get_user_shell -vte_get_features -vte_get_encodings -vte_get_encoding_supported - - -VteTerminalSpawnAsyncCallback -vte_terminal_spawn_async -vte_terminal_get_pty -vte_terminal_set_pty -vte_terminal_pty_new_sync -vte_terminal_watch_child - - -vte_terminal_set_clear_background -vte_terminal_get_color_background_for_draw - - -VTE_TYPE_CURSOR_BLINK_MODE -vte_cursor_blink_mode_get_type -VTE_TYPE_CURSOR_SHAPE -vte_cursor_shape_get_type -VTE_TYPE_ERASE_BINDING -vte_erase_binding_get_type -VTE_TYPE_TEXT_BLINK_MODE -vte_text_blink_mode_get_type -VTE_TYPE_FORMAT -vte_format_get_type -VTE_TYPE_WRITE_FLAGS -vte_write_flags_get_type -VTE_TYPE_TERMINAL -vte_terminal_get_type -VTE_IS_TERMINAL -VTE_TERMINAL -VTE_TERMINAL_GET_CLASS -VTE_IS_TERMINAL_CLASS -VTE_TERMINAL_CLASS - - -vte_terminal_get_char_height -vte_terminal_get_char_width -vte_terminal_get_column_count -vte_terminal_get_row_count -vte_terminal_get_window_title -vte_terminal_get_current_directory_uri -vte_terminal_get_current_file_uri - - -vte_terminal_copy_clipboard -vte_terminal_match_set_cursor -vte_terminal_match_set_cursor_type -vte_terminal_match_add_gregex -vte_terminal_search_get_gregex -vte_terminal_search_set_gregex -vte_terminal_event_check_gregex_simple -vte_terminal_spawn_sync -vte_terminal_get_geometry_hints -vte_terminal_set_geometry_hints_for_window -vte_terminal_get_icon_title -vte_terminal_set_encoding -vte_terminal_get_encoding -vte_terminal_get_text_include_trailing_spaces -vte_terminal_set_rewrap_on_resize -vte_terminal_get_rewrap_on_resize -vte_terminal_feed_child_binary - - -VteCharAttributes -VteTerminalClassPrivate -
- -
-vte-regex -VteRegex -VteRegex -vte_regex_ref -vte_regex_unref -vte_regex_new_for_match -vte_regex_new_for_search -vte_regex_jit -vte_regex_substitute - - -VTE_TYPE_REGEX -vte_regex_get_type -VTE_REGEX_ERROR -vte_regex_error_quark -
- -
-vte-pty -Vte PTY -VtePtyFlags -VtePtyError -VtePty -vte_pty_new_sync -vte_pty_new_foreign_sync -vte_pty_child_setup -vte_pty_get_fd -vte_pty_set_size -vte_pty_get_size -vte_pty_set_term -vte_pty_set_utf8 - - -VTE_SPAWN_NO_PARENT_ENVV -VTE_SPAWN_NO_SYSTEMD_SCOPE -VTE_SPAWN_REQUIRE_SYSTEMD_SCOPE -vte_pty_spawn_async -vte_pty_spawn_finish - - -vte_pty_flags_get_type -VTE_TYPE_PTY_FLAGS -vte_pty_error_get_type -VTE_TYPE_PTY_ERROR -vte_pty_error_quark -VTE_PTY_ERROR -vte_pty_get_type -VTE_TYPE_PTY -VTE_PTY -VTE_PTY_CLASS -VTE_IS_PTY -VTE_IS_PTY_CLASS -VTE_PTY_GET_CLASS -VtePtyClass - - -vte_pty_close -
- -
-vte-version -Version Information - -VTE_MAJOR_VERSION -vte_get_major_version -VTE_MINOR_VERSION -vte_get_minor_version -VTE_MICRO_VERSION -vte_get_micro_version - - -VTE_CHECK_VERSION - -
diff --git a/doc/reference/vte.types b/doc/reference/vte.types deleted file mode 100644 index d7db2a0..0000000 --- a/doc/reference/vte.types +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include -#include -#include -#include "vte.h" - -vte_pty_get_type -vte_terminal_get_type -vte_regex_get_type - -vte_pty_error_get_type -vte_pty_flags_get_type -vte_cursor_blink_mode_get_type -vte_cursor_shape_get_type -vte_erase_binding_get_type -vte_write_flags_get_type -vte_regex_error_get_type diff --git a/doc/scrolling-region.txt b/doc/scrolling-region.txt new file mode 100644 index 0000000..1bfdef1 --- /dev/null +++ b/doc/scrolling-region.txt @@ -0,0 +1,183 @@ +Here is what Xterm 388 and VTE 0.76 do for some of the escape sequences. +DEC STD 070 might say otherwise, and reportedly the actual behavior of DEC hardware is yet again different. +See https://gitlab.gnome.org/GNOME/vte/-/issues/2526 for details. + +The black area inside (excluding) the stripes is the terminal area. +The blue rectangle is the scrolling region. +The words written on the canvas show what happens if the cursor is at that location when the said escape sequence arrives. +Some escape sequences are 90° or 180° rotations of each other, they share a common picture, it should be obvious to rotate. + + +  CUU (similarly: CUD, CUB ~ BS ~ CR, CUF ~ printing a letter)  + +CUU, CUD, CUB, CUF: The picture shows the behavior written in DEC STD 070 (pp. 5-41..5-48) and implemented in Xterm and VTE. +Reportedly DEC terminals behave differently: If the cursor is outside the scroll area then it doesn't stop at the margin. + +CR, BS: The picture shows the behavior implemented in Xterm and VTE. +DEC STD 070 (pp. 5-58, 5-63) says that if the cursor is outside the scroll area then it doesn't stop at the margin. +Reportedly DEC's actual behavior matches this. + +🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙 +🮙🮙▏ s t o p s h e r e , n o s c r o l l i n g ▕🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 ↑ moves up 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙▏ s t  o p s h e r e , n o s c r o l l i  n g ▕🮙🮙 +🮙🮙   🮙🮙 +🮙🮙   🮙🮙 +🮙🮙   🮙🮙 +🮙🮙   🮙🮙 +🮙🮙   ↑ moves up 🮙🮙 +🮙🮙   🮙🮙 +🮙🮙 ↑ moves up   🮙🮙 +🮙🮙   🮙🮙 +🮙🮙  ↑ moves up  🮙🮙 +🮙🮙   🮙🮙 +🮙🮙   🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 ↑ moves up 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙 + + +  RI (similarly: IND ~ LF, DECFI, DECBI)  + +The picture shows the behavior implemented in Xterm and VTE. +DEC STD 070 (pp. 5-34..5-40) says that even if the cursor hits the margin outside the scroll area then the scroll area is +scrolled. Reportedly DEC terminals move the cursor in this case. + +🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙 +🮙🮙▏ s t o p s h e r e , n o s c r o l l i n g ▕🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 ↑ moves up 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙▏ stops here, no scrolling ▕▏ stops here and scrolls the blue region ▕▏ stops here, no scrolling ▕🮙🮙 +🮙🮙   🮙🮙 +🮙🮙   🮙🮙 +🮙🮙   🮙🮙 +🮙🮙   🮙🮙 +🮙🮙   ↑ moves up 🮙🮙 +🮙🮙   🮙🮙 +🮙🮙 ↑ moves up   🮙🮙 +🮙🮙   🮙🮙 +🮙🮙  ↑ moves up  🮙🮙 +🮙🮙   🮙🮙 +🮙🮙   🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 ↑ moves up 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙 + + +  SU, SD  + +The picture shows the behavior implemented in Xterm and VTE. +According to DEC STD 070 (pp. 5-91..5-92) they move the page relative to the window, an entirely different concept unrelated +to margins. See also https://gitlab.gnome.org/GNOME/vte/-/issues/2663#note_1860599. + +🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 scrolls 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 the 🮙🮙 +🮙🮙   🮙🮙 +🮙🮙  blue  🮙🮙 +🮙🮙   🮙🮙 +🮙🮙  region,  🮙🮙 +🮙🮙   🮙🮙 +🮙🮙  no  🮙🮙 +🮙🮙   🮙🮙 +🮙🮙  matter  🮙🮙 +🮙🮙   🮙🮙 +🮙🮙  where  🮙🮙 +🮙🮙   🮙🮙 +🮙🮙  the 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 cursor 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 is 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙 + + +  IL, DL, DECIC, DECDC, SL, SR  + +IL, DL, DECIC, DECDC: The picture shows what's written in DEC STD 070 (pp. 5-146..5-151) and implemented in Xterm and VTE. +Reportedly the behavior of DEC terminals also matches. + +SL, SR aren't available in DEC, they could be an Xterm extension. + +🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 does nothing 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ 🮙🮙 +🮙🮙 ▕ ▏ 🮙🮙 +🮙🮙 ▕ scrolls the blue region, further restricted to: ▏ 🮙🮙 +🮙🮙 ▕ - IL, DL: cursor's row and below ▏ 🮙🮙 +🮙🮙 ▕ - DECIC, DECDC: cursor's column and its right ▏ 🮙🮙 +🮙🮙 ▕ - SL, SR: no further restriction ▏ 🮙🮙 +🮙🮙 ▕ ▏ does nothing 🮙🮙 +🮙🮙 ▕ ·<-------------------------------------------------->▏ 🮙🮙 +🮙🮙 does nothing ▕ ^ DECIC, DECDC ▏ 🮙🮙 +🮙🮙 ▕ | ▏ 🮙🮙 +🮙🮙 ▕ | IL, DL ▏ 🮙🮙 +🮙🮙 ▕ | ▏ 🮙🮙 +🮙🮙 ▕ v ▏ 🮙🮙 +🮙🮙 ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 does nothing 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙 🮙🮙 +🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙 + + +  ICH, DCH  + +The picture shows the behavior written in DEC STD 070 (pp. 5-142..5-145) and implemented in Xterm and VTE. +Reportedly DEC hardware behave differently if the cursor is outside the top/bottom margins, they shift to/from the right +edge of the screen rather than the right margin. + +🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙 +🮙🮙 ▕ ▏ 🮙🮙 +🮙🮙 ▕ ▏ 🮙🮙 +🮙🮙 ▕ scrolls ·<--->▏ 🮙🮙 +🮙🮙 ▕ the ▏ 🮙🮙 +🮙🮙 ▕ cursor's ▏ d 🮙🮙 +🮙🮙 ▕ row ▏ o 🮙🮙 +🮙🮙 ▕ between ▏ e 🮙🮙 +🮙🮙 ▕ the ▏ s 🮙🮙 +🮙🮙 d ▕ cursor ▏ 🮙🮙 +🮙🮙 o ▕ and ▏ n 🮙🮙 +🮙🮙 e ▕ the ·<------------------>▏ o 🮙🮙 +🮙🮙 s ▕ right ▏ t 🮙🮙 +🮙🮙 ▕ margin ▏ h 🮙🮙 +🮙🮙 n ▕ (the ▏ i 🮙🮙 +🮙🮙 o ▕ top ▏ n 🮙🮙 +🮙🮙 t ▕ and ▏ g 🮙🮙 +🮙🮙 h ▕ bottom ▏ 🮙🮙 +🮙🮙 i ▕ margins ▏ 🮙🮙 +🮙🮙 n ▕ don't ▏ 🮙🮙 +🮙🮙 g ▕ matter) ▏ 🮙🮙 +🮙🮙 ▕ ▏ 🮙🮙 +🮙🮙 ▕ ·<-------------------------------------------------->▏ 🮙🮙 +🮙🮙 ▕ ▏ 🮙🮙 +🮙🮙 ▕ ▏ 🮙🮙 +🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙🮙 + diff --git a/meson.build b/meson.build index 55b4b1c..ce2961a 100644 --- a/meson.build +++ b/meson.build @@ -1,15 +1,15 @@ # Copyright © 2018, 2019 Iñigo Martínez # Copyright © 2019 Christian Persch # -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. # -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser -# General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this library. If not, see . @@ -17,36 +17,49 @@ project( 'vte', ['c', 'cpp'], - version: '0.60.1', + version: '0.76.0', license: ['LGPL-3.0-or-later', 'GPL-3.0-or-later'], default_options: [ 'buildtype=release', - 'c_std=gnu11', - 'cpp_std=gnu++17', 'warning_level=0', 'b_ndebug=false', ], - meson_version: '>= 0.50.0', + meson_version: '>= 0.60.0', ) -# Requirements +# Compiler requirements -gtk3_req_version = '3.20.0' -gtk3_min_req_version = '3.18' -gtk3_max_allowed_version = '3.20' -gtk4_req_version = '4.0.0' +c_req_std = 'gnu11' +cxx_req_std = 'gnu++20' +gxx_req_version = '10.0' +clangxx_req_version = '11.0' +py_req_version = '3.7' +# Version requirements + +gtk3_req_version = '3.24.0' +gtk3_min_req_version = '3.24' +gtk3_max_allowed_version = '3.24' + +gtk4_req_version = '4.14.0' +gtk4_min_req_version = '4.14' +gtk4_max_allowed_version = '4.14' + +cairo_req_version = '1.0' +cairo_gobject_req_version = '1.0' fribidi_req_version = '1.0.0' -gio_req_version = '2.52.0' -glib_req_version = '2.52.0' -glib_min_req_version = '2.52' -glib_max_allowed_version = '2.52' +gio_req_version = '2.72.0' +glib_req_version = '2.72.0' +glib_min_req_version = '2.72' +glib_max_allowed_version = '2.72' gnutls_req_version = '3.2.7' icu_uc_req_version = '4.8' pango_req_version = '1.22.0' pcre2_req_version = '10.21' systemd_req_version = '220' +liblz4_req_version = '1.9' + # API vte_api_major_version = 2 @@ -54,11 +67,8 @@ vte_api_minor_version = 91 vte_api_version = '@0@.@1@'.format(vte_api_major_version, vte_api_minor_version) vte_api_name = 'vte-@0@.@1@'.format(vte_api_major_version, vte_api_minor_version) -vte_gtk3_api_version = '@0@.@1@'.format(vte_api_major_version, vte_api_minor_version) -vte_gtk4_api_version = '@0@.@1@'.format(vte_api_major_version + 1, vte_api_minor_version) - -vte_gtk3_api_name = 'vte-' + vte_gtk3_api_version -vte_gtk4_api_name = 'vte-' + vte_gtk4_api_version +vte_gtk3_api_name = 'vte-' + vte_api_version +vte_gtk4_api_name = 'vte-' + vte_api_version + '-gtk4' vte_gtk3_api_path = vte_gtk3_api_name / 'vte' vte_gtk4_api_path = vte_gtk4_api_name / 'vte' @@ -99,18 +109,73 @@ vte_systemduserunitdir = vte_prefix / 'lib' / 'systemd' / 'user' # Debug -enable_debug = get_option('debugg') or get_option('debug') or get_option('buildtype').contains('debug') +enable_debug = get_option('dbg') or get_option('debug') or get_option('buildtype').contains('debug') # Meson modules gnome = import('gnome') pkg = import('pkgconfig') +py = import('python') # Compilers +# When using 'c_std' / 'cpp_std' in the default_options of project(), +# then later changing that requirement there, meson will *not* update +# the actual std used. E.g. +# ''' +# project(..., default_options: ['cpp_std=gnu++17']) +# assert(get_option('cpp_std') == 'gnu++17') +# ''' +# Now change both of the '17' to '20' and build; meson will update the +# build files and trip on the assert since it still uses cpp_std=gnu++17. +# And it allows the user to override the c/cpp_std option from the command +# line. +# +# Therefore, instead of using default_options, add the required -std=... +# options to the compiler options directly. + +# C compiler + cc = meson.get_compiler('c') + +c_std_opt = '-std=' + c_req_std +assert(cc.has_argument(c_std_opt), 'option ' + c_std_opt + ' not supported by ' + cc.get_id()) +add_project_arguments(c_std_opt, language: 'c') + +# C++ compiler + cxx = meson.get_compiler('cpp') +cxx_std_opt = '-std=' + cxx_req_std +assert(cxx.has_argument(cxx_std_opt), 'option ' + cxx_std_opt + ' not supported by ' + cxx.get_id()) +add_project_arguments(cxx_std_opt, language: 'cpp') + +# The above only checks that the compiler supports the given -std option, +# but not that the compiler really supports that C++ standard version. +# Do a simple version check based on +# https://gcc.gnu.org/projects/cxx-status.html and +# https://clang.llvm.org/cxx_status.html +# for the C++ features that vte actually uses. + +if cxx.get_id() == 'gcc' + assert(cxx.version().version_compare('>=' + gxx_req_version), 'needs g++ >= ' + gxx_req_version + ' for ' + cxx_req_std + ' support') +endif + +if cxx.get_id() == 'clang' + assert(cxx.version().version_compare('>=' + clangxx_req_version), 'needs clang++ >= ' + clangxx_req_version + ' for ' + cxx_req_std + ' support') +endif + +# Python interpreter + +py_req_modules = [ + 'dataclasses', +] + +python = py.find_installation(modules: py_req_modules) +assert(python.language_version().version_compare('>=' + py_req_version), 'needs python3 >= ' + py_req_version) + +# Include directories + top_inc = include_directories('.') # Start config.h @@ -119,11 +184,11 @@ config_h = configuration_data() config_h.set_quoted('GETTEXT_PACKAGE', vte_gettext_domain) config_h.set_quoted('VERSION', vte_version) -config_h.set('VTE_DEBUG', enable_debug) -config_h.set('WITH_A11Y', get_option('a11y')) -config_h.set('WITH_FRIBIDI', get_option('fribidi')) -config_h.set('WITH_GNUTLS', get_option('gnutls')) -config_h.set('WITH_ICU', get_option('icu')) +config_h.set10('VTE_DEBUG', enable_debug) +config_h.set10('WITH_A11Y', get_option('a11y')) +config_h.set10('WITH_FRIBIDI', get_option('fribidi')) +config_h.set10('WITH_GNUTLS', get_option('gnutls')) +config_h.set10('WITH_ICU', get_option('icu')) ver = glib_min_req_version.split('.') config_h.set('GLIB_VERSION_MIN_REQUIRED', '(G_ENCODE_VERSION(' + ver[0] + ',' + ver[1] + '))') @@ -140,28 +205,53 @@ if get_option('gtk3') gtk3_version_cppflags += '-DGDK_VERSION_MAX_ALLOWED=(G_ENCODE_VERSION(' + ver[0] + ',' + ver[1] + '))' endif -# FIXME AC_USE_SYSTEM_EXTENSIONS also supported non-gnu systems -config_h.set10('_GNU_SOURCE', true) +if get_option('gtk4') + gtk4_version_cppflags = [] -# Check headers + ver = gtk4_min_req_version.split('.') + gtk4_version_cppflags += '-DGDK_VERSION_MIN_REQUIRED=(G_ENCODE_VERSION(' + ver[0] + ',' + ver[1] + '))' -check_headers = [ - 'locale.h', - 'pty.h', - 'stropts.h', - 'sys/resource.h', - 'sys/select.h', - 'sys/syslimits.h', - 'sys/termios.h', - 'sys/types.h', - 'sys/wait.h', - 'termios.h', - 'util.h', - 'wchar.h', + ver = gtk4_max_allowed_version.split('.') + gtk4_version_cppflags += '-DGDK_VERSION_MAX_ALLOWED=(G_ENCODE_VERSION(' + ver[0] + ',' + ver[1] + '))' +endif + +# Enable libc features + +libc_feature_defines = [ + ['_GNU_SOURCE', '1'], + ['_POSIX_C_SOURCE', '200809L'], + ['_XOPEN_SOURCE', '700'], + ['_XOPEN_SOURCE_EXTENDED', '1'], ] -foreach header: check_headers - config_h.set('HAVE_' + header.underscorify().to_upper(), cxx.has_header(header)) +system = host_machine.system() + +if system == 'freebsd' + # Defining _POSIX_C_SOURCE above makes freebsd not expose some functionality + # that's hidden behind __BSD_VISIBLE. Not defininy any of the above however + # makes it expose verything. + + libc_feature_defines = [] + +elif system == 'darwin' + # See issue #2592 + libc_feature_defines += [ + ['_DARWIN_C_SOURCE', '1'], + ] + +elif system == 'netbsd' + libc_feature_defines += [ + ['_NETBSD_SOURCE', '1'], + ] + +elif system == 'openbsd' + libc_feature_defines += [ + ['_BSD_SOURCE', '1'], + ] +endif + +foreach f: libc_feature_defines + config_h.set(f[0], f[1]) endforeach # Check for symbols @@ -176,71 +266,170 @@ endforeach # Check for functions -check_functions_required = [ - 'fork', - 'grantpt', - 'posix_openpt', - 'ptsname', - 'tcgetattr', - 'unlockpt', -] +libm_dep = cxx.find_library('m') -foreach func: check_functions_required - assert(cxx.has_function(func), func + ' not found') -endforeach +# Note that we cannot use compiler.has_function() due to +# https://github.com/mesonbuild/meson/issues/8075 . So +# Hand-roll our own check functions, also checking for +# the correct function prototype. +# [func name, func type, includes, deps, required] check_functions = [ - # Misc I/O routines. - 'explicit_bzero', - 'pread', - 'pwrite', - # Misc string routines. - 'strchrnul', - # for vtespawn - 'fdwalk', + [ + 'fork', + 'pid_t (*func)(void)', + ['sys/types.h', 'unistd.h'], + [], + true, + ], + [ + 'grantpt', + 'int (*func)(int)', + ['stdlib.h'], + [], + true, + ], + [ + 'posix_openpt', + 'int (*func)(int)', + ['stdlib.h', 'fcntl.h'], + [], + true, + ], + [ + 'ptsname', + 'char* (*func)(int)', + ['stdlib.h'], + [], + true, + ], + [ + 'tcgetattr', + 'int (*func)(int, struct termios*)', + ['termios.h', 'unistd.h'], + [], + true, + ], + [ + 'unlockpt', + 'int (*func)(int)', + ['stdlib.h'], + [], + true, + ], + [ + 'explicit_bzero', + 'void (*func)(void*, size_t)', + ['string.h'], + [], + false, + ], + [ + 'fdwalk', + 'int (*func)(int (*)(void*, int), void*)', + ['stdlib.h'], + [], + false, + ], + [ + 'pread', + 'ssize_t (*func)(int, void*, size_t off_t)', + ['unistd.h'], + [], + false, + ], + [ + 'pwrite', + 'ssize_t (*func)(int, const void*, size_t, off_t)', + ['unistd.h'], + [], + false, + ], + [ + 'strchrnul', + 'const char* (*func)(const char*, int)', + ['string.h'], + [], + false, + ], + [ + 'close_range', + 'int (*func)(unsigned int, unsigned int, int)', + ['unistd.h'], + [], + false, + ], + + # Math functions + + [ + 'ceil', + 'double (*func)(double)', + ['math.h'], + [libm_dep], + true, + ], + [ + 'floor', + 'double (*func)(double)', + ['math.h'], + [libm_dep], + true, + ], + [ + 'round', + 'double (*func)(double)', + ['math.h'], + [libm_dep], + false, + ], ] foreach func: check_functions - config_h.set('HAVE_' + func.underscorify().to_upper(), cxx.has_function(func)) -endforeach + __name=func[0] + __prot=func[1] + __incs=func[2] + __deps=func[3] + __reqd=func[4] -# Math functions + __code = '' + foreach __inc: __incs + __code += ''' + #if __has_include(<@0@>) + #include <@0@> + #endif + '''.format(__inc) + endforeach -libm_dep = cxx.find_library('m') + __code += ''' + int main(void) { + @0@ = &@1@; + long long b = (long long)func; + return (int)b; + } + '''.format(__prot, __name) -check_math_functions_required = [ - 'ceil', - 'floor', -] + __args = [] + foreach f: libc_feature_defines + __args += '-D@0@=@1@'.format(f[0], f[1]) + endforeach -foreach func: check_math_functions_required - assert(cxx.has_function(func, dependencies: libm_dep), func + ' not found') -endforeach + __have = cxx.compiles( + __code, + args: __args, + dependencies: __deps, + name: __name, + ) -check_math_functions = [ - 'round', -] - -foreach func: check_math_functions - config_h.set('HAVE_' + func.underscorify().to_upper(), cxx.has_function(func, dependencies: libm_dep)) + if __reqd + assert(__have, __name + ' not found') + else + config_h.set10('HAVE_' + __name.underscorify().to_upper(), __have) + endif endforeach # Compiler -# Meson has a misfeature where it allows the user to override the -std option -# for the C/C++ compiler. Disallow that. - -assert(get_option('c_std') == 'gnu11', 'cannot override C std version') -assert(get_option('cpp_std') == 'gnu++17', 'cannot override C++ std version') - -# Meson only checks that -std supports the given string, but *not* that -# the compiler really supports that C++ standard version. Do a simple version -# check based on https://gcc.gnu.org/projects/cxx-status.html#cxx17 - -if cxx.get_id() == 'gcc' - assert(cxx.version().version_compare('>= 7.0'), 'needs G++ >= 7 for C++17 support') -endif - # Asserts must not be disabled assert(get_option('b_ndebug') == 'false', 'assertions may not be disabled') @@ -272,11 +461,14 @@ compiler_flags_common = [ '-Wmissing-format-attribute', '-Wmissing-include-dirs', '-Wmissing-noreturn', + '-Wno-deprecated-declarations', '-Wno-address-of-packed-member', + '-Wno-c99-designator', '-Wno-missing-field-initializers', '-Wno-packed', '-Wno-switch-enum', '-Wno-unused-parameter', + '-Wno-volatile', '-Wshadow', '-Wshift-negative-value', '-Wsign-compare', @@ -299,8 +491,6 @@ compiler_flags_common = [ '-fdiagnostics-show-option', '-fno-common', '-fno-semantic-interposition', - '-fstack-protector', - '-fstack-protector-strong', ] if enable_debug @@ -336,12 +526,16 @@ compiler_flags_cxx_only = [ ] compiler_flags_cxx_required = [ - '-fno-exceptions', - '-fno-rtti', '-fvisibility-inlines-hidden', '-fvisibility=hidden', ] +if cxx.get_id() == 'clang' + compiler_flags_cxx_only += [ + '-Wno-unknown-attributes', # get rid of warnings about unimplemented [[(un)likely]] + ] +endif + global_cflags = cc.get_supported_arguments(compiler_flags_common + compiler_flags_common_undesirable + compiler_flags_c_only) @@ -354,7 +548,6 @@ foreach flag: compiler_flags_cxx_required assert(cxx.has_argument(flag), flag + ' is required but not supported') endforeach - # These flags have to be tested together compiler_flags_common_multi = [ @@ -375,15 +568,24 @@ foreach flags : compiler_flags_common_multi endif endforeach -# ... and now make these flags the default +release_args = [] +if not enable_debug + release_args += ['-DG_DISABLE_ASSERT', '-DG_DISABLE_CAST_CHECKS'] +endif +# ... and now make these flags the default add_project_arguments(global_cflags, language: 'c') add_project_arguments(global_cxxflags, language: 'cpp') # Linker flags linker_flags = [ - [ '-Wl,-Bsymbolic-functions', get_option('_b_symbolic_functions'),], + ['-Wl,-Bsymbolic', false,], + ['-Wl,-Bsymbolic-functions', get_option('_b_symbolic_functions'),], + + # See issue vte#2535. + ['-fstack-protector', false], + ['-fstack-protector-strong', false], ] foreach flag: linker_flags @@ -402,13 +604,15 @@ endforeach # Dependencies -gio_dep = dependency('gio-2.0', version: '>=' + gio_req_version) -glib_dep = dependency('glib-2.0', version: '>=' + glib_req_version) -gobject_dep = dependency('gobject-2.0') -pango_dep = dependency('pango', version: '>=' + pango_req_version) -pcre2_dep = dependency('libpcre2-8', version: '>=' + pcre2_req_version) -pthreads_dep = dependency('threads') -zlib_dep = dependency('zlib') +cairo_dep = dependency('cairo', version: '>=' + cairo_req_version) +cairo_gobject_dep = dependency('cairo-gobject', version: '>=' + cairo_gobject_req_version) +gio_dep = dependency('gio-2.0', version: '>=' + gio_req_version) +glib_dep = dependency('glib-2.0', version: '>=' + glib_req_version) +gobject_dep = dependency('gobject-2.0') +pango_dep = dependency('pango', version: '>=' + pango_req_version) +pcre2_dep = dependency('libpcre2-8', version: '>=' + pcre2_req_version) +pthreads_dep = dependency('threads') +liblz4_dep = dependency('liblz4', version: '>=' + liblz4_req_version) if get_option('fribidi') fribidi_dep = dependency('fribidi', version: '>=' + fribidi_req_version) @@ -429,7 +633,7 @@ else endif if get_option('gtk4') - gtk4_dep = dependency('gtk+-4.0', version: '>=' + gtk4_req_version) + gtk4_dep = dependency('gtk4', version: '>=' + gtk4_req_version) else gtk4_dep = dependency('', required: false) endif @@ -446,14 +650,16 @@ else systemd_dep = dependency('', required: false) endif -config_h.set('WITH_SYSTEMD', systemd_dep.found()) +config_h.set10('WITH_SYSTEMD', systemd_dep.found()) # Write config.h -configure_file( - output: 'config.h', - configuration: config_h, -) +config_sources = [ + configure_file( + output: 'config.h', + configuration: config_h, + ), +] # Subdirs @@ -465,13 +671,18 @@ if get_option('docs') subdir('doc/reference') endif +# Dist + +meson.add_dist_script( + find_program('meson_changelog.sh'), +) + # Simple compat Makefile makefile_conf = configuration_data() makefile_conf.set('srcdir', meson.current_source_dir()) makefile_conf.set('builddir', meson.current_build_dir()) -makefile_conf.set('vte_gtk3_api_version', vte_gtk3_api_version) -makefile_conf.set('vte_gtk4_api_version', vte_gtk4_api_version) +makefile_conf.set('vte_api_version', vte_api_version) configure_file( input: 'Makefile.meson', @@ -509,9 +720,24 @@ output += ' GTK+ 4.0: ' + get_option('gtk4').to_string() + '\n' output += ' ICU: ' + get_option('icu').to_string() + '\n' output += ' GIR: ' + get_option('gir').to_string() + '\n' output += ' systemd: ' + systemd_dep.found().to_string() + '\n' +output += ' Glade: ' + get_option('glade').to_string() + '\n' output += ' Vala: ' + get_option('vapi').to_string() + '\n' output += '\n' output += ' Prefix: ' + get_option('prefix') + '\n' message(output) +# Check stable/unstable status + +if (vte_minor_version % 2) != 0 + if (vte_micro_version >= 99) + warning('This is a release candidate release!\n') + elif (vte_micro_version > 90) + warning('This is a beta release!\n') + else + warning('This is an unstable development release!\n') + endif +else + message('This is a stable release.') +endif + # Done diff --git a/meson_changelog.sh b/meson_changelog.sh new file mode 100755 index 0000000..6e4cad0 --- /dev/null +++ b/meson_changelog.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# Copyright © 2021 Christian Persch +# +# This programme is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at your +# option) any later version. +# +# This programme is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this programme. If not, see . + +set -e + +top_srcdir="$MESON_SOURCE_ROOT" +top_builddir="MESON_BUILD_ROOT" +top_distdir="$MESON_DIST_ROOT" + +if ! test -e "${top_srcdir}"/.git; then + echo "Must be run from gnome-terminal git checkout" + exit 1 +fi + +if ! test -e "${top_distdir}"; then + echo "Must be run from 'meson dist'" + exit 1 +fi + +GIT_DIR="${top_srcdir}"/.git git log --stat > "${top_distdir}"/ChangeLog diff --git a/meson_options.txt b/meson_options.txt index f8143f7..b7b6b38 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,14 +1,14 @@ # Copyright © 2018, 2019 Iñigo Martínez # -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. # -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser -# General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this library. If not, see . @@ -30,7 +30,7 @@ option( ) option( - 'debugg', # for some reason, 'debug' is "reserved" + 'dbg', # for some reason, 'debug' is "reserved" type: 'boolean', value: false, description: 'Enable extra debugging functionality', @@ -57,6 +57,13 @@ option( description: 'Enable FriBidi support', ) +option( + 'glade', + type: 'boolean', + value : true, + description: 'Install a glade catalogue file' +) + option( 'gnutls', type: 'boolean', @@ -74,7 +81,7 @@ option( option( 'gtk4', type: 'boolean', - value: false, + value: true, description: 'Enable GTK+ 4.0 widget', ) diff --git a/perf/256test.sh b/perf/256test.sh index 051ac45..7c6543a 100755 --- a/perf/256test.sh +++ b/perf/256test.sh @@ -3,9 +3,9 @@ # Test 256 color support along with bold and dim attributes. # Copyright (C) 2014 Egmont Koblinger # -# This program is free software; you can redistribute it and/or modify +# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, @@ -13,9 +13,8 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . sep=':' if [ "$1" = "-colon" -o "$1" = "-official" -o "$1" = "-dejure" ]; then diff --git a/perf/deco.sh b/perf/deco.sh index bce86e2..1b7fc2b 100755 --- a/perf/deco.sh +++ b/perf/deco.sh @@ -4,9 +4,9 @@ # Copyright © 2014 Egmont Koblinger # Copyright © 2018 Christian Persch # -# This program is free software; you can redistribute it and/or modify +# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, @@ -14,9 +14,8 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . sep=":" sepsep="::" diff --git a/perf/img.sh b/perf/img.sh index 60de518..bef4d72 100755 --- a/perf/img.sh +++ b/perf/img.sh @@ -3,9 +3,9 @@ # Image viewer for terminals that support true colors. # Copyright (C) 2014 Egmont Koblinger # -# This program is free software; you can redistribute it and/or modify +# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, @@ -13,9 +13,8 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . sep1=':' sep2='::' diff --git a/perf/printwinsize.py b/perf/printwinsize.py new file mode 100755 index 0000000..34f869a --- /dev/null +++ b/perf/printwinsize.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# Copyright © 2020 Christian Persch +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import array, fcntl, sys, termios + +buffer = array.array('H', [0, 0, 0, 0]) +ret = fcntl.ioctl(sys.stdin.fileno(), termios.TIOCGWINSZ, buffer) +if ret != 0: + print(f'ioctl(TIOCGWINSZ) failed: {ret}') + sys.exit(1) + +print(f'{buffer[0]} rows ({buffer[3]} px), {buffer[1]} columns ({buffer[2]} px)') +sys.exit(0) diff --git a/perf/sgr-test.sh b/perf/sgr-test.sh index 82dc0dd..3633f3b 100755 --- a/perf/sgr-test.sh +++ b/perf/sgr-test.sh @@ -3,9 +3,9 @@ # Tester for various SGR attributes. # Copyright (C) 2017 Egmont Koblinger # -# This program is free software; you can redistribute it and/or modify +# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, @@ -13,18 +13,17 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . words=( Efg Ijk Pqr Xyz) words_comment=(normal "green text" "magenta background" "bright red underline") words_start=( "" 32 45 58:5:9) words_end=( "" 39 49 59) -attr_name=(bold dim italic underline underline "double underline" "double underline" "curly underline" blink reverse hidden strikethrough overline) -attr_start=( 1 2 3 4 4:1 21 4:2 4:3 5 7 8 9 53) -attr_end=( 22 22 23 24 4:0 24 4:0 4:0 25 27 28 29 55) +attr_name=(bold dim italic underline underline "double underline" "double underline" "curly underline" "dotted underline" "dashed underline" blink reverse hidden strikethrough overline) +attr_start=( 1 2 3 4 4:1 21 4:2 4:3 4:4 4:5 5 7 8 9 53) +attr_end=( 22 22 23 24 4:0 24 4:0 4:0 4:0 4:0 25 27 28 29 55) col_name=("normal") col_start=("") diff --git a/po/LINGUAS b/po/LINGUAS index 4804eb0..effdfbb 100644 --- a/po/LINGUAS +++ b/po/LINGUAS @@ -1,5 +1,6 @@ # please keep this list sorted alphabetically # +ab am an ang @@ -15,6 +16,7 @@ bn_IN bs ca ca@valencia +ckb cs cy da diff --git a/po/POTFILES.in b/po/POTFILES.in index 69e94a0..22dc0f9 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,3 +1,4 @@ src/pty.cc src/vte.cc src/vtegtk.cc +src/spawn.cc diff --git a/po/POTFILES.skip b/po/POTFILES.skip index be9e5e1..13d510d 100644 --- a/po/POTFILES.skip +++ b/po/POTFILES.skip @@ -2,6 +2,9 @@ bindings/vala/app.ui bindings/vala/search-popover.ui src/vtespawn.cc src/app/app.cc -src/app/appmenu.ui -src/app/search-popover.ui -src/app/window.ui +src/app/appmenu-gtk3.ui +src/app/appmenu-gtk4.ui +src/app/search-popover-gtk3.ui +src/app/search-popover-gtk4.ui +src/app/window-gtk3.ui +src/app/window-gtk4.ui diff --git a/po/ab.po b/po/ab.po new file mode 100644 index 0000000..7b89269 --- /dev/null +++ b/po/ab.po @@ -0,0 +1,58 @@ +# Abkhazian translation for vte. +# Copyright (C) 2022 vte's COPYRIGHT HOLDER +# This file is distributed under the same license as the vte package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: vte master\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2022-01-29 11:51+0000\n" +"PO-Revision-Date: 2022-01-29 11:51+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Abkhazian \n" +"Language: ab\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/vte.cc:7693 +msgid "WARNING" +msgstr "АГӘҼАНҴАРА" + +#: src/vte.cc:7695 +msgid "GnuTLS not enabled; data will be written to disk unencrypted!" +msgstr "GnuTLS аҿакӡам; Адыррақәа шифрркрада ианызаауоит адиск аҟны!" + +#: src/spawn.cc:122 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Аанкылара зымуо аканал %s ашьақәыргылара залымшеит: " + +#: src/spawn.cc:167 +#, c-format +msgid "poll error: %s" +msgstr "Азҵаараҭараан иҟалеит агха: %s" + +#: src/spawn.cc:174 +msgid "Operation timed out" +msgstr "Азыԥшразы ишәзаԥҵәаз аамҭа нцәеит" + +#: src/spawn.cc:184 +msgid "Operation was cancelled" +msgstr "Аоперациа аҟәыхуп" + +#: src/spawn.cc:202 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Иаҿыгоу аканал (%s) аҟынтә аиагара залымшахеит" + +#: src/spawn.cc:637 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Аизакхьӡынҵа “%s” ахь аиасра залымшахеит: %s" + +#: src/spawn.cc:706 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Иаҿыгоу апроцесс “%s” аҟаҵара залымшахеит:" diff --git a/po/be.po b/po/be.po index afb1768..1ce08c5 100644 --- a/po/be.po +++ b/po/be.po @@ -6,66 +6,53 @@ msgid "" msgstr "" "Project-Id-Version: vte.master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-09-02 17:55+0000\n" -"PO-Revision-Date: 2018-09-07 14:20+0300\n" -"Last-Translator: Yuras Shumovich \n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2021-08-19 14:57+0300\n" +"Last-Translator: Launchpad translators\n" "Language-Team: Belarusian \n" "Language: be\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.1.1\n" +"X-Generator: Poedit 3.0\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3989 -#, c-format -msgid "Error reading from child: %s." -msgstr "Памылка чытання даных ад нашчадка: %s." - -#: ../src/vte.cc:4139 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Памылка (%s) пераўтварэння даных ад нашчадка: ігнаруецца." - -#: ../src/vte.cc:8131 +#: src/vte.cc:7763 msgid "WARNING" -msgstr "АСЦЯРОЖНА" +msgstr "ПАПЯРЭДЖАННЕ" -#: ../src/vte.cc:8132 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS не ўключаны; даныя будуць запісаны на дыск незашыфраванымі!" -#: ../src/vtegtk.cc:3664 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Не ўдалося пераўтварыць знакі з %s у %s." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Не ўдалося наладзіць канал без блакіравання: %s" -#~ msgid "Attempt to set invalid NRC map '%c'." -#~ msgstr "Спроба ўжыць хібную NRC-карту \"%c\"." +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "памылка апытання: %s" -#~ msgid "Unrecognized identified coding system." -#~ msgstr "Неапазнаная ідэнтыфікаваная сістэма кадавання." +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Скончыўся тэрмін чакання аперацыі" -#~ msgid "Attempt to set invalid wide NRC map '%c'." -#~ msgstr "Спроба ўжыць хібную шырокафарматную NRC-карту \"%c\"." +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Аперацыя скасавана" -#~ msgid "Duplicate (%s/%s)!" -#~ msgstr "Дублікат (%s/%s)." +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Не ўдалося прачытаць даныя з канала нашчадка (%s)" -#~ msgid "Could not open console.\n" -#~ msgstr "Не ўдалося адкрыць кансоль.\n" +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Не ўдалося змяніць на каталог «%s»: %s" -#~ msgid "Could not parse the geometry spec passed to --geometry" -#~ msgstr "Не ўдалося разабраць спецыфікацыю памераў акна, пададзеных для опцыі --geometry" - -#~ msgid "Error compiling regular expression \"%s\"." -#~ msgstr "Памылка кампіляцыі рэгулярнага выразу \"%s\"." - -#~ msgid "Unable to send data to child, invalid charset convertor" -#~ msgstr "Не ўдалося паслаць даныя нашчадку: хібны модуль пераўтварэння знаказбору" - -#~ msgid "Error reading PTY size, using defaults: %s\n" -#~ msgstr "Памылка чытання памеру PTY: выкарыстоўваецца прадвызначаны: %s\n" - -#~ msgid "_vte_conv_open() failed setting word characters" -#~ msgstr "_vte_conv_open() не здолеў настроіць знакі, якія ўжываюцца ў словах" +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Не ўдалося выканаць працэс-нашчадак «%s»: " diff --git a/po/bg.po b/po/bg.po index c24238a..1a94adc 100644 --- a/po/bg.po +++ b/po/bg.po @@ -1,16 +1,18 @@ # Bulgarian translation of vte po-file. # Copyright (C) 2002, 2007, 2007, 2010, 2014, 2017 Free Software Foundation, Inc. +# Copyright (C) 2021, 2023 Alexander Shopov. # This file is distributed under the same license as the vte package. # Alexander Shopov , 2002, 2007, 2010, 2014, 2017. +# Alexander Shopov , 2021, 2023. # Vladimir "Kaladan" Petkov , 2005. # Yavor Doganov , 2005. # msgid "" msgstr "" "Project-Id-Version: vte master\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-02 09:32+0300\n" -"PO-Revision-Date: 2017-08-25 10:55+0200\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2021-06-28 13:45+0000\n" +"PO-Revision-Date: 2021-07-04 14:21+0200\n" "Last-Translator: Alexander Shopov \n" "Language-Team: Bulgarian \n" "Language: bg\n" @@ -19,28 +21,43 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../src/iso2022.cc:73 ../src/iso2022.cc:81 ../src/iso2022.cc:111 -#: ../src/vtegtk.cc:3423 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Неуспешно преобразуването на знаците от %s към %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:4067 -#, c-format -msgid "Error reading from child: %s." -msgstr "Грешка при четене от дъщерния процес: %s." - -#: ../src/vte.cc:4206 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "" -"Грешка (%s) при преобразуването на данните за дъщерния процес, пропускане." - -#: ../src/vte.cc:8148 +#: src/vte.cc:7751 msgid "WARNING" msgstr "ПРЕДУПРЕЖДЕНИЕ" -#: ../src/vte.cc:8149 -msgid "GNUTLS not enabled; data will be written to disk unencrypted!" -msgstr "GNUTLS не е включена. Данните ще бъдат записани в нешифриран вид." +#: src/vte.cc:7753 +msgid "GnuTLS not enabled; data will be written to disk unencrypted!" +msgstr "GnuTLS не е включена. Данните ще бъдат записани нешифрирани!" + +#: src/spawn.cc:110 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Неуспешно задаване на канала да е без блокиране: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "грешка при заявка „poll“: %s" + +#: src/spawn.cc:162 +msgid "Operation timed out" +msgstr "Времето за действието изтече" + +#: src/spawn.cc:172 +msgid "Operation was cancelled" +msgstr "Действието е отменено" + +#: src/spawn.cc:190 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Грешка при четене от дъщерния процес (%s)" + +#: src/spawn.cc:620 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Директорията не може да се смени на „%s“: %s" + +#: src/spawn.cc:689 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Дъщерният процес не може да се изпълни „%s“: " diff --git a/po/ca.po b/po/ca.po index f32a6e6..589fc2f 100644 --- a/po/ca.po +++ b/po/ca.po @@ -2,91 +2,64 @@ # Copyright © 2002, 2003, 2007 Free Software Foundation, Inc. # Enric Balletbó Serra , 2002. # Jordi Mallach , 2003, 2007. -# Gil Forcada , 2014. +# Gil Forcada , 2014-2020. # msgid "" msgstr "" "Project-Id-Version: vte 0.11.6\n" -"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" -"product=vte&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2017-08-20 20:38+0000\n" -"PO-Revision-Date: 2017-08-21 23:29+0200\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-07-03 02:37+0200\n" "Last-Translator: Gil Forcada \n" "Language-Team: Catalan \n" "Language: ca\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" -"X-Generator: Poedit 1.8.11\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"X-Generator: Gtranslator 3.36.0\n" -#: ../src/iso2022.cc:73 ../src/iso2022.cc:81 ../src/iso2022.cc:111 -#: ../src/vtegtk.cc:3423 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "No es pot convertir el caràcter %s a %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:4067 -#, c-format -msgid "Error reading from child: %s." -msgstr "S'ha produït un error en llegir del fill: %s." - -#: ../src/vte.cc:4206 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "" -"S'ha produït un error (%s) en convertir dades per al fill; s'ometrà la " -"conversió." - -#: ../src/vte.cc:8148 +#: src/vte.cc:7763 msgid "WARNING" msgstr "AVÍS" -#: ../src/vte.cc:8149 -msgid "GNUTLS not enabled; data will be written to disk unencrypted!" -msgstr "GNUTLS no està habilitat; les dades s'escriuran al disc sense xifrar!" +#: src/vte.cc:7765 +#| msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +msgid "GnuTLS not enabled; data will be written to disk unencrypted!" +msgstr "" +"El GNUTLS no està habilitat; s'escriuran les dades al disc sense xifrar!" -#~ msgid "Copy" -#~ msgstr "Copia" +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "S'ha produït un error en establir el conducte com a no bloquejable: %s" -#~ msgid "Paste" -#~ msgstr "Enganxa" +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "s'ha produït un error en l'enquesta: %s" -#~ msgid "Reset (use Ctrl to reset and clear)" -#~ msgstr "Reinicia (utilitzeu Ctrl per reiniciar i netejar)" +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "L'operació ha excedit el temps" -#~ msgid "Reset" -#~ msgstr "Reinicia" +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "S'ha cancel·lat l'operació" -#~ msgid "Toggle input enabled setting" -#~ msgstr "Commuta el paràmetre del mètode d'entrada actiu" +#: src/spawn.cc:189 +#, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "S'ha produït un error en llegir del conducte fill (%s)" -#~ msgid "Input" -#~ msgstr "Entrada" +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "No s'ha pogut canviar al directori «%s»:%s" -#~ msgid "Attempt to set invalid NRC map '%c'." -#~ msgstr "S'ha intentat fixar el mapa NRC invàlid «%c»." +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "No s'ha pogut executar el procés fill «%s»: " -#~ msgid "Unrecognized identified coding system." -#~ msgstr "No s'ha reconegut el sistema de codificació identificat." - -#~ msgid "Attempt to set invalid wide NRC map '%c'." -#~ msgstr "S'ha intentat fixar el mapa global NRC «%c»." - -#~ msgid "Could not open console.\n" -#~ msgstr "No s'ha pogut obrir la consola.\n" - -#~ msgid "Could not parse the geometry spec passed to --geometry" -#~ msgstr "" -#~ "No s'ha pogut analitzar l'especificació geomètrica indicada a --geometry" - -#~ msgid "Unable to send data to child, invalid charset convertor" -#~ msgstr "" -#~ "No s'ha pogut enviar les dades al fill, el convertidor de codificació no " -#~ "és vàlid" - -#~ msgid "Error reading PTY size, using defaults: %s\n" -#~ msgstr "" -#~ "S'ha produït un error en llegir la mida de PTY; s'utilitzarà el valor per " -#~ "defecte: %s\n" diff --git a/po/ckb.po b/po/ckb.po new file mode 100644 index 0000000..7fcddb1 --- /dev/null +++ b/po/ckb.po @@ -0,0 +1,43 @@ +# Kurdish (Sorani) translation for vte2.91 +# Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020 +# This file is distributed under the same license as the vte2.91 package. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: vte2.91\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2019-05-13 09:31+0000\n" +"PO-Revision-Date: 2020-05-05 01:16+0300\n" +"Last-Translator: Jwtiyar Nariman \n" +"Language-Team: Kurdish (Sorani) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2020-05-04 22:12+0000\n" +"X-Generator: Poedit 2.3\n" +"Language: ckb\n" + +#. Translators: %s is replaced with error message returned by strerror(). +#: ../src/vte.cc:3928 +#, c-format +msgid "Error reading from child: %s." +msgstr "هەڵەی خوێندنەوە لە مناڵەوە: %s." + +#: ../src/vte.cc:4078 +#, c-format +msgid "Error (%s) converting data for child, dropping." +msgstr "هەڵە(%s) لە گۆڕینی زانیاری فۆر منداڵ، فڕێدان." + +#: ../src/vte.cc:7889 +msgid "WARNING" +msgstr "ئاگاداربە" + +#: ../src/vte.cc:7890 +msgid "GnuTLS not enabled; data will be written to disk unencrypted!" +msgstr "GnuTLS چالاک نیە؛ زانیارییەکان دەکرێنە سەر پەپکە بێ ئەوەی پارێزراوبکرێن!" + +#: ../src/vtegtk.cc:3666 +#, c-format +msgid "Unable to convert characters from %s to %s." +msgstr "نەتوانرا نووسەکان بگۆڕدرێت لە %s بۆ %s." diff --git a/po/cs.po b/po/cs.po index 54f2f75..dbb5b35 100644 --- a/po/cs.po +++ b/po/cs.po @@ -4,15 +4,14 @@ # # Miloslav Trmac , 2002, 2003, 2004. # Pavel Šefránek , 2008. -# Marek Černocký , 2010, 2014, 2016, 2018. +# Marek Černocký , 2010, 2014, 2016, 2018, 2020. # msgid "" msgstr "" "Project-Id-Version: vte\n" -"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" -"product=vte&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2018-05-21 18:38+0000\n" -"PO-Revision-Date: 2018-05-22 13:53+0200\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-08-25 11:22+0200\n" "Last-Translator: Marek Černocký \n" "Language-Team: čeština \n" "Language: cs\n" @@ -22,27 +21,43 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Gtranslator 2.91.7\n" -#: ../src/iso2022.cc:71 ../src/iso2022.cc:79 ../src/iso2022.cc:109 -#: ../src/vtegtk.cc:3605 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Nelze převést znaky z %s do %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3958 -#, c-format -msgid "Error reading from child: %s." -msgstr "Chyba při čtení od potomka: %s." - -#: ../src/vte.cc:4098 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Chyba (%s) při převodu dat pro potomka, zahazuje se." - -#: ../src/vte.cc:8150 +#: src/vte.cc:7763 msgid "WARNING" msgstr "VAROVÁNÍ" -#: ../src/vte.cc:8151 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "Není povoleno GnuTLS – data budou na disku uložena nezašifrovaná!" + +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Selhalo nastavení roury jako neblokující: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "Chyba dotazování (poll): %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Vypršel časový limit operace" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Operace byla zrušena" + +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Selhalo čtení z roury potomka (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Selhala změna složky na „%s“: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Selhalo spuštění procesu potomka „%s“: " diff --git a/po/da.po b/po/da.po index d05a520..5ce5541 100644 --- a/po/da.po +++ b/po/da.po @@ -1,129 +1,64 @@ -# Danish translation of vte. +# Danish translation for vte. # Copyright (C) 2002-07, 2016, 2018 Free Software Foundation, Inc. # This file is distributed under the same license as the vte package. # Ole Laursen , 2002, 03. # Peter Bach , 2007. -# Kenneth Nielsen . 2010 +# Kenneth Nielsen , 2010. # Ask Hjorth Larsen , 2016, 2018. +# scootergrisen, 2020. # msgid "" msgstr "" "Project-Id-Version: vte\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2018-08-30 21:05+0200\n" -"Last-Translator: Ask Hjorth Larsen \n" +"POT-Creation-Date: 2020-04-27 18:50+0000\n" +"PO-Revision-Date: 2020-04-28 23:34+0200\n" +"Last-Translator: scootergrisen\n" "Language-Team: Danish \n" "Language: da\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" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Fejl ved læsning fra underproces: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Fejl (%s) ved konvertering af data for underproces, dropper." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7843 msgid "WARNING" msgstr "ADVARSEL" -#: ../src/vte.cc:8180 +#: src/vte.cc:7845 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS er ikke slået til; data vil blive skrevet ukrypteret til disken!" -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:104 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Kunne ikke konvertere tegn fra %s til %s." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Kunne ikke indstille pipe som ikke-blokerende: %s" -#~ msgid "Copy" -#~ msgstr "Kopiér" +#: src/spawn.cc:148 +#, c-format +msgid "poll error: %s" +msgstr "fejl ved poll: %s" -#~ msgid "Paste" -#~ msgstr "Indsæt" +#: src/spawn.cc:154 +msgid "Operation timed out" +msgstr "Handlingen fik timeout" -#~ msgid "Reset (use Ctrl to reset and clear)" -#~ msgstr "Nulstil (brug Ctrl til at nulstille og rydde)" +#: src/spawn.cc:164 +msgid "Operation was cancelled" +msgstr "Handlingen blev annulleret" -#~ msgid "Reset" -#~ msgstr "Nulstil" +#: src/spawn.cc:182 +#, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "Kunne ikke læse fra underpipe (%s)" -#~ msgid "Toggle input enabled setting" -#~ msgstr "Slå input-indstillingen til eller fra" +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Kunne ikke skifte til mappen “%s”: %s" -#~ msgid "Input" -#~ msgstr "Input" - -#~ msgid "Attempt to set invalid NRC map '%c'." -#~ msgstr "Forsøg på at sætte ugyldig NRC-afbildning '%c'." - -#~ msgid "Unrecognized identified coding system." -#~ msgstr "Ukendt identificeret kodningssystem." - -#~ msgid "Attempt to set invalid wide NRC map '%c'." -#~ msgstr "Forsøg på at sætte ugyldig bred NRC-afbildning '%c'." - -#~ msgid "Could not open console.\n" -#~ msgstr "Kunne ikke åbne konsol.\n" - -#~ msgid "Could not parse the geometry spec passed to --geometry" -#~ msgstr "Kunne ikke fortolke geometrispecifikationen sendt med --geometry" - -#~ msgid "Unable to send data to child, invalid charset convertor" -#~ msgstr "" -#~ "Kunne ikke sende data til underproces, ugyldig konvertering af tegnsæt" - -#~ msgid "Error reading PTY size, using defaults: %s\n" -#~ msgstr "Fejl ved indlæsning af PTY-størrelse, bruger standardværdier: %s.\n" - -#~ msgid "Duplicate (%s/%s)!" -#~ msgstr "Optræder mere end én gang (%s/%s)!" - -#~ msgid "Error compiling regular expression \"%s\"." -#~ msgstr "Fejl ved oversættelse af regulært udtryk “%s”." - -#~ msgid "_vte_conv_open() failed setting word characters" -#~ msgstr "_vte_iconv_open() kunne ikke sætte ordtegn" - -#~ msgid "can not run %s" -#~ msgstr "kan ikke køre %s" - -#~ msgid "Error creating signal pipe." -#~ msgstr "Fejl ved oprettelse af signaldatakanal." - -#~ msgid "No handler for control sequence `%s' defined." -#~ msgstr "Ingen håndtering for kontrolsekvensen '%s' er defineret." - -#~ msgid "Error setting PTY size: %s." -#~ msgstr "Fejl ved angivelse af PTY-størrelse: %s." - -#~ msgid "Got unexpected (key?) sequence `%s'." -#~ msgstr "Modtog uventet (taste-?) sekvens '%s'." - -#~ msgid "Unknown pixel mode %d.\n" -#~ msgstr "Ukendt pixeltilstand %d.\n" - -#~ msgid "Can not find appropiate font for character U+%04x.\n" -#~ msgstr "Kan ikke finde passende skrifttype for tegn U+%04x.\n" - -#~ msgid "Error adding `%s' to environment, continuing." -#~ msgstr "Fejl ved tilføjelse af '%s' til miljøet, fortsætter." - -#~ msgid "Error allocating draw, disabling Xft." -#~ msgstr "Fejl ved allokering af tegning, deaktiverer Xft." - -#~ msgid "Error allocating context, disabling Pango." -#~ msgstr "Fejl ved allokering af kontekst, deaktiverer Pango." - -#~ msgid "Error allocating layout, disabling Pango." -#~ msgstr "Fejl ved allokering af layout, deaktiverer Pango." - -#~ msgid "Character 0x%x is undefined, allocating one column." -#~ msgstr "Tegn 0x%x er ikke defineret, allokerer en kolonne." +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Kunne ikke køre underprocessen “%s”: " diff --git a/po/de.po b/po/de.po index 4c75d70..1895cd6 100644 --- a/po/de.po +++ b/po/de.po @@ -5,47 +5,74 @@ # Hendrik Richter , 2007. # Andre Klapper , 2007. # Mario Blättermann , 2010, 2014, 2016. -# Tim Sabsch , 2018. +# Tim Sabsch , 2018, 2020. # msgid "" msgstr "" "Project-Id-Version: vte master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2018-07-27 14:47+0200\n" +"POT-Creation-Date: 2020-09-04 08:17+0000\n" +"PO-Revision-Date: 2020-09-07 20:27+0200\n" "Last-Translator: Tim Sabsch \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.9\n" +"X-Generator: Poedit 2.4.1\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Fehler beim Lesen von Kind: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Fehler (%s) beim Konvertieren der Daten für Kind, abgebrochen." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7770 msgid "WARNING" msgstr "WARNUNG" -#: ../src/vte.cc:8180 +#: src/vte.cc:7772 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "" "GnuTLS ist nicht aktiviert, die Daten werden unverschlüsselt auf die " "Festplatte geschrieben!" -#: ../src/vtegtk.cc:3618 +# So ähnlich habe ich es im Internet gelesen. +# Es handelt sich hierbei um eine Pipeline, +# Es gibt eine Einstellung "nicht blockierend" +# und eine die den Lese- oder Schreibzugriff auf die Pipe verweigert soweit ich mich erinnere. +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Zeichen konnten nicht von %s nach %s konvertiert werden." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Fehler beim Setzen der nicht-blockierenden Pipe: %s" + +#: src/spawn.cc:156 +#, c-format +msgid "poll error: %s" +msgstr "Poll-Fehler: %s" + +#: src/spawn.cc:163 +msgid "Operation timed out" +msgstr "Zeitüberschreitung bei Vorgang" + +#: src/spawn.cc:173 +msgid "Operation was cancelled" +msgstr "Vorgang wurde abgebrochen" + +#: src/spawn.cc:191 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Fehler beim Lesen von der Kind-Pipe (%s)" + +#: src/spawn.cc:621 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Wechsel zu Verzeichnis »%s« fehlgeschlagen: %s" + +#: src/spawn.cc:690 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Ausführung des Kind-Prozesses »%s« fehlgeschlagen: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Fehler (%s) beim Konvertieren der Daten für Kind, abgebrochen." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Zeichen konnten nicht von %s nach %s konvertiert werden." #~ msgid "Copy" #~ msgstr "Kopieren" diff --git a/po/el.po b/po/el.po index 6a706b6..47d2a6a 100644 --- a/po/el.po +++ b/po/el.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: el\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" +"POT-Creation-Date: 2023-08-06 13:23+0000\n" "PO-Revision-Date: 2018-08-15 14:13+0300\n" "Last-Translator: Efstathios Iosifidis \n" "Language-Team: team@gnome.gr\n" @@ -23,32 +23,57 @@ msgstr "" "X-Generator: Poedit 2.0.9\n" "X-Project-Style: gnome\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Σφάλμα ανάγνωσης από θυγατρική διεργασία: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "" -"Σφάλμα (%s) μετατροπής δεδομένων από θυγατρική διεργασία, απορρίπτεται." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7699 msgid "WARNING" msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ" -#: ../src/vte.cc:8180 +#: src/vte.cc:7701 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "" -"Δεν είναι ενεργοποιημένο το GNUTLS, τα δεδομένα που θα εγγραφούν στο " -"δίσκο δεν θα είναι κρυπτογραφημένα!" +"Δεν είναι ενεργοποιημένο το GNUTLS, τα δεδομένα που θα εγγραφούν στο δίσκο " +"δεν θα είναι κρυπτογραφημένα!" -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:124 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Αδύνατη η μετατροπή χαρακτήρων από %s σε %s." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Αποτυχία ορισμού μη αποκλειστικού αγωγού: %s" + +#: src/spawn.cc:169 +#, c-format +msgid "poll error: %s" +msgstr "Σφάλμα poll: %s" + +#: src/spawn.cc:176 +msgid "Operation timed out" +msgstr "Η λειτουργία έληξε λόγω χρονικού ορίου" + +#: src/spawn.cc:186 +msgid "Operation was cancelled" +msgstr "Η λειτουργία ακυρώθηκε" + +#: src/spawn.cc:204 +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "Αποτυχία ανάγνωσης από από θυγατρική διεργασία (%s)" + +#: src/spawn.cc:639 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Αποτυχία αλλαγής καταλόγου σε “%s”: %s" + +#: src/spawn.cc:708 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Αποτυχία εκτέλεσης θυγατρικής διεργασίας «%s»: " + +#, c-format +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "" +#~ "Σφάλμα (%s) μετατροπής δεδομένων από θυγατρική διεργασία, απορρίπτεται." + +#, c-format +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Αδύνατη η μετατροπή χαρακτήρων από %s σε %s." #~ msgid "Copy" #~ msgstr "Αντιγραφή" diff --git a/po/en_GB.po b/po/en_GB.po index 13e1404..fdf16d6 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the vte package. # Gareth Owen , 2004. # Philip Withnall , 2010. -# Zander Brown , 2019. +# Zander Brown , 2019-2020. # msgid "" msgstr "" "Project-Id-Version: vte\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2019-04-14 20:50+0000\n" -"PO-Revision-Date: 2019-08-25 01:15+0100\n" +"POT-Creation-Date: 2020-04-27 18:50+0000\n" +"PO-Revision-Date: 2020-05-18 13:01+0100\n" "Last-Translator: Zander Brown \n" "Language-Team: English - United Kingdom \n" "Language: en_GB\n" @@ -18,32 +18,55 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Gtranslator 3.32.1\n" +"X-Generator: Gtranslator 3.36.0\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: src/vte.cc:3928 -#, c-format -msgid "Error reading from child: %s." -msgstr "Error reading from child: %s." - -#: src/vte.cc:4078 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Error (%s) converting data for child, dropping." - -#: src/vte.cc:7889 +#: src/vte.cc:7843 msgid "WARNING" msgstr "WARNING" -#: src/vte.cc:7890 -#| msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +#: src/vte.cc:7845 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS not enabled; data will be written to disk unencrypted!" -#: src/vtegtk.cc:3653 +#: src/spawn.cc:104 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Unable to convert characters from %s to %s." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Failed to set pipe non-blocking: %s" + +#: src/spawn.cc:148 +#, c-format +msgid "poll error: %s" +msgstr "poll error: %s" + +#: src/spawn.cc:154 +msgid "Operation timed out" +msgstr "Operation timed out" + +#: src/spawn.cc:164 +msgid "Operation was cancelled" +msgstr "Operation was cancelled" + +#: src/spawn.cc:182 +#, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "Failed to read from child pipe (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Failed to change to directory “%s”: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Failed to execute child process “%s”: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Error (%s) converting data for child, dropping." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Unable to convert characters from %s to %s." #~ msgid "Attempt to set invalid NRC map '%c'." #~ msgstr "Attempt to set invalid NRC map '%c'." diff --git a/po/eo.po b/po/eo.po index c30b5d6..8f39c3e 100644 --- a/po/eo.po +++ b/po/eo.po @@ -2,49 +2,73 @@ # Copyright (C) 2008 Free Software Foundation, Inc. # This file is distributed under the same license as the vte package. # Brian CROOM <>, 2008 -# Kristjan SCHMIDT , 2010, 2017. +# Kristjan SCHMIDT , 2010-2020. +# msgid "" msgstr "" "Project-Id-Version: vte\n" -"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=vte&ke" -"ywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2017-02-28 06:44+0000\n" -"PO-Revision-Date: 2017-06-10 17:44+0200\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-11-28 17:31+0100\n" "Last-Translator: Kristjan SCHMIDT \n" "Language-Team: Esperanto \n" "Language: eo\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" -"X-Generator: Virtaal 0.7.1\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"X-Generator: Gtranslator 3.38.0\n" "X-Project-Style: gnome\n" -#: ../src/iso2022.cc:73 ../src/iso2022.cc:81 ../src/iso2022.cc:111 -#: ../src/vtegtk.cc:3262 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Ne eblas konverti signojn de %s al %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:4014 -#, c-format -msgid "Error reading from child: %s." -msgstr "Eraro dum legado de ido: %s." - -#: ../src/vte.cc:4153 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Eraro (%s) dum konverti datumojn por ido, ignorante." - -#: ../src/vte.cc:7922 +#: src/vte.cc:7763 msgid "WARNING" msgstr "AVERTO" -#: ../src/vte.cc:7923 -msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +#: src/vte.cc:7765 +#| msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "" -"GNUTLS ne estas enŝaltita; datumoj estos skribitaj sen ĉifrado al la disko!" +"GnuTLS ne estas ŝaltita; datumoj estos skribitaj sen ĉifrado al la disko!" + +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Malsukcesis agordi dukton al neblokada: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "enketa eraro: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "La operacio eltempiĝis" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "La operacio estas nuligita" + +#: src/spawn.cc:189 +#, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "Malsukcesis legi de duktido (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Malsukcesis ŝanĝi dosierujon “%s”: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Malsukcesis plenumi procezidon “%s”: " + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Ne eblas konverti signojn de %s al %s." + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Eraro (%s) dum konverti datumojn por ido, ignorante." #~ msgid "Attempt to set invalid NRC map '%c'." #~ msgstr "Provi agordi nevalidan NRC-mapon '%c'." diff --git a/po/es.po b/po/es.po index 987ed2f..8f477ac 100644 --- a/po/es.po +++ b/po/es.po @@ -10,51 +10,72 @@ # Francisco Javier F. Serrador , 2004. # Rodrigo Marcos Fombellida , 2007. # Jorge González , 2010. -# Daniel Mustieles , 2014, 2016, 2018. +# Daniel Mustieles , 2014-2020. # msgid "" msgstr "" "Project-Id-Version: vte.HEAD\n" -"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" -"product=vte&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2018-05-21 18:38+0000\n" -"PO-Revision-Date: 2018-05-22 13:02+0200\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-04-27 18:50+0000\n" +"PO-Revision-Date: 2020-04-28 17:39+0200\n" "Last-Translator: Daniel Mustieles \n" "Language-Team: es \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Gtranslator 2.91.6\n" +"X-Generator: Gtranslator 3.36.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../src/iso2022.cc:71 ../src/iso2022.cc:79 ../src/iso2022.cc:109 -#: ../src/vtegtk.cc:3605 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "No se pueden convertir caracteres de %s a %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3958 -#, c-format -msgid "Error reading from child: %s." -msgstr "Error al leer desde el hijo: %s." - -#: ../src/vte.cc:4098 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Error (%s) al convertir datos desde el hijo, omitiendo." - -#: ../src/vte.cc:8150 +#: src/vte.cc:7843 msgid "WARNING" msgstr "ADVERTENCIA" -#: ../src/vte.cc:8151 -#| msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +#: src/vte.cc:7845 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "" "GNUTLS no está activado; lo datos se escribirán en el disco sin cifrar." +#: src/spawn.cc:104 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Falló al establecer la tubería no bloqueante: %s" + +#: src/spawn.cc:148 +#, c-format +msgid "poll error: %s" +msgstr "error de consulta: %s" + +#: src/spawn.cc:154 +msgid "Operation timed out" +msgstr "Ha expirado el tiempo de la operación" + +#: src/spawn.cc:164 +msgid "Operation was cancelled" +msgstr "Se canceló la operación" + +#: src/spawn.cc:182 +#, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "Error al leer desde la tubería hija (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Falló al cambiar a la carpeta «%s»: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Falló al ejecutar el proceso hijo «%s»: " + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "No se pueden convertir caracteres de %s a %s." + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Error (%s) al convertir datos desde el hijo, omitiendo." + #~ msgid "Copy" #~ msgstr "Copiar" diff --git a/po/eu.po b/po/eu.po index dabd7eb..e74e9b2 100644 --- a/po/eu.po +++ b/po/eu.po @@ -4,45 +4,67 @@ # # Alberto Fernández Benito , 2003. # Iñaki Larrañaga Murgoitio , 2004, 2007, 2008, 2010, 2014, 2016. -# Asier Sarasua Garmendia , 2019. +# Asier Sarasua Garmendia , 2019, 2020. # msgid "" msgstr "Project-Id-Version: vte master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2019-04-14 20:50+0000\n" -"PO-Revision-Date: 2019-07-14 10:00+0100\n" -"Last-Translator: Asier Sarasua Garmendia \n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-05-30 10:00+0100\n" +"Last-Translator: Asier Sarasua Garmendia \n" "Language-Team: Basque \n" "Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 2.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: src/vte.cc:3928 -#, c-format -msgid "Error reading from child: %s." -msgstr "Errorea umetik irakurtzean: %s." - -#: src/vte.cc:4078 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Errorea datuak bihurtzean (%s) haurrarentzako, jaregiten." - -#: src/vte.cc:7889 +#: src/vte.cc:7763 msgid "WARNING" msgstr "ABISUA" -#: src/vte.cc:7890 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GNUTLS ez dago gaituta, datuak zifratu gabe idatziko dira diskoan!" -#: src/vtegtk.cc:3653 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Karaktereak ezin dira %s-(e)tik %s-(e)ra bihurtu." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Huts egin du kanalizazioa ez-blokeatzaile gisa ezartzeak: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "kontsultaren errorea: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Eragiketak denbora agortu du" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Eragiketa bertan behera utzi da" + +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Ezin izan da kanalizazio umetik irakurri (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Ezin izan da “%s” direktoriora aldatu: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Ezin izan da “%s” prozesu haurra exekutatu: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Errorea datuak bihurtzean (%s) haurrarentzako, jaregiten." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Karaktereak ezin dira %s-(e)tik %s-(e)ra bihurtu." #~ msgid "Copy" #~ msgstr "Kopiatu" diff --git a/po/fa.po b/po/fa.po index 0281470..8b92991 100644 --- a/po/fa.po +++ b/po/fa.po @@ -3,44 +3,68 @@ # Copyright (C) 2010 The IFSUG Translation Group # Roozbeh Pournader , 2003. # Arash Mousavi , 2010, 2015, 2016. +# Danial Behzadi , 2017-2020. # msgid "" msgstr "" "Project-Id-Version: vte\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2019-09-07 11:33+0000\n" -"PO-Revision-Date: 2019-09-14 20:54+0000\n" +"POT-Creation-Date: 2020-04-27 18:50+0000\n" +"PO-Revision-Date: 2020-05-13 17:32+0000\n" "Last-Translator: Arash Mousavi \n" "Language-Team: Persian\n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.3\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: src/vte.cc:4184 -#, c-format -msgid "Error reading from child: %s." -msgstr "خطا در خواندن از فرزند: %s." - -#: src/vte.cc:4334 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "خطا (%s) در تبدیل داده برای فرزند. درحال رها کردن." - -#: src/vte.cc:8258 +#: src/vte.cc:7843 msgid "WARNING" msgstr "هشدار" -#: src/vte.cc:8259 +#: src/vte.cc:7845 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS به کارنیفتاده؛ داده‌ها بدون رمزنگاری روی دیسک نوشته خواهند شد!" -#: src/vtegtk.cc:3873 +#: src/spawn.cc:104 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "نمی‌توان نویسه‌ها را از %s به %s تبدیل کرد." +msgid "Failed to set pipe nonblocking: %s" +msgstr "شکست در تنظیم نامسدودی لوله: %s" + +#: src/spawn.cc:148 +#, c-format +msgid "poll error: %s" +msgstr "خطای رأی: %s" + +#: src/spawn.cc:154 +msgid "Operation timed out" +msgstr "زمان عملیات به سر رسید" + +#: src/spawn.cc:164 +msgid "Operation was cancelled" +msgstr "عملیات لغو شده بود" + +#: src/spawn.cc:182 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "خطا در خواندن از لولهٔ فرزند(%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "شکست در تعویض به شاخهٔ %s: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "شکست در اجرای فرایند فرزند %s: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "خطا (%s) در تبدیل داده برای فرزند. درحال رها کردن." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "نمی‌توان نویسه‌ها را از %s به %s تبدیل کرد." #~ msgid "Copy" #~ msgstr "رونوشت" diff --git a/po/fi.po b/po/fi.po index f696644..6e1e0d2 100644 --- a/po/fi.po +++ b/po/fi.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: vte\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2018-08-17 21:03+0300\n" +"POT-Creation-Date: 2021-02-22 17:16+0000\n" +"PO-Revision-Date: 2021-02-27 11:57+0200\n" "Last-Translator: Jiri Grönroos \n" "Language-Team: suomi \n" "Language: fi\n" @@ -19,31 +19,55 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Poedit 2.4.2\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Virhe lapselta lukemisessa: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Virhe (%s) datan muuntamisessa lapselle, putoaa pois." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7710 msgid "WARNING" msgstr "VAROITUS" -#: ../src/vte.cc:8180 +#: src/vte.cc:7712 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS ei ole käytössä; tiedot kirjoitetaan levylle ilman salausta!" -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:110 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Merkkien muuntaminen merkistöstä %s merkistöön %s ei onnistu." +msgid "Failed to set pipe nonblocking: %s" +msgstr "" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "" + +#: src/spawn.cc:162 +msgid "Operation timed out" +msgstr "Toiminto aikakatkaistiin" + +#: src/spawn.cc:172 +msgid "Operation was cancelled" +msgstr "Toiminto peruttiin" + +#: src/spawn.cc:190 +#, fuzzy, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "Virhe lapselta lukemisessa: %s." + +#: src/spawn.cc:620 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "" + +#: src/spawn.cc:689 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Lapsiprosessin “%s” suorittaminen epäonnistui: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Virhe (%s) datan muuntamisessa lapselle, putoaa pois." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Merkkien muuntaminen merkistöstä %s merkistöön %s ei onnistu." #~ msgid "Copy" #~ msgstr "Kopioi" diff --git a/po/fr.po b/po/fr.po index 7f17722..4f444fa 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1,5 +1,5 @@ # French translation of vte. -# Copyright (C) 2002-2016 Free Software Foundation, Inc. +# Copyright (C) 2002-2020 Free Software Foundation, Inc. # This file is under the same license as the vte package. # # Laurent Richard , 2002. @@ -7,47 +7,62 @@ # Jonathan Ernst , 2007. # Stéphane Raimbault , 2007. # Charles Monzat , 2018. +# Thibault Martin , 2020. # msgid "" msgstr "" "Project-Id-Version: vte 0.14.1\n" -"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" -"product=vte&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2018-05-21 18:38+0000\n" -"PO-Revision-Date: 2018-05-21 21:39+0200\n" -"Last-Translator: Charles Monzat \n" -"Language-Team: français \n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-08-10 11:59+0000\n" +"PO-Revision-Date: 2020-09-05 20:35+0200\n" +"Last-Translator: Thibault Martin \n" +"Language-Team: GNOME French Team \n" "Language: fr\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" -"X-Generator: Gtranslator 2.91.7\n" +"X-Generator: Gtranslator 3.36.0\n" -#: ../src/iso2022.cc:71 ../src/iso2022.cc:79 ../src/iso2022.cc:109 -#: ../src/vtegtk.cc:3605 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Impossible de convertir les caractères %s en %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3958 -#, c-format -msgid "Error reading from child: %s." -msgstr "Erreur lors de la lecture du fils : « %s »." - -#: ../src/vte.cc:4098 -#, 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.cc:8150 +#: src/vte.cc:7770 msgid "WARNING" msgstr "AVERTISSEMENT" -#: ../src/vte.cc:8151 -#| msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +#: src/vte.cc:7772 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "" "GnuTLS n’est pas activé ; les données seront écrites sur le disque sans être " "chiffrées !" + +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Impossible d’établir le tube non-bloquant : %s" + +#: src/spawn.cc:156 +#, c-format +msgid "poll error: %s" +msgstr "erreur d’inspection : %s" + +#: src/spawn.cc:163 +msgid "Operation timed out" +msgstr "Expiration du délai de l’opération" + +#: src/spawn.cc:173 +msgid "Operation was cancelled" +msgstr "L’opération a été annulée" + +#: src/spawn.cc:191 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Erreur lors de la lecture du tube fils (%s)" + +#: src/spawn.cc:621 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Impossible de passer dans le répertoire « %s » : %s" + +#: src/spawn.cc:690 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Impossible d’exécuter le processus fils « %s » : " diff --git a/po/fur.po b/po/fur.po index c265d4a..e9d3d0c 100644 --- a/po/fur.po +++ b/po/fur.po @@ -6,43 +6,63 @@ msgid "" msgstr "" "Project-Id-Version: vte vte-0-34\n" -"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" -"product=vte&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2018-05-21 18:38+0000\n" -"PO-Revision-Date: 2018-05-26 11:00+0200\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-07-11 21:33+0200\n" "Last-Translator: Fabio Tomat \n" "Language-Team: Friulian \n" "Language: fur\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.7\n" +"X-Generator: Poedit 2.3.1\n" -#: ../src/iso2022.cc:71 ../src/iso2022.cc:79 ../src/iso2022.cc:109 -#: ../src/vtegtk.cc:3605 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Impussibil convertî i caratars di %s a %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3958 -#, c-format -msgid "Error reading from child: %s." -msgstr "Erôr leint dal procès fî: %s." - -#: ../src/vte.cc:4098 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Erôr (%s) convertint i dâts par il proces fî, a restaran come prime." - -#: ../src/vte.cc:8150 +#: src/vte.cc:7763 msgid "WARNING" msgstr "AVERTIMENT" -#: ../src/vte.cc:8151 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" -msgstr "" -"GnuTLS no abilitât; i dâts a vignaran scrits tal disc cence jessi cifrâts!" +msgstr "GnuTLS no abilitât; i dâts a vignaran scrits tal disc cence jessi cifrâts!" + +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "No si è rivâts a stabilî il condot no-blocant: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "erôr di interogazion: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Operazion scjadude" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "La operazion e je stade anulade" + +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "No si è rivâts a lei dal condot dal fi (%s)." + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "No si è rivâts a lâ te cartele “%s”: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "No si è rivâts a eseguî il procès fi “%s”: " + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Impussibil convertî i caratars di %s a %s." + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Erôr (%s) convertint i dâts par il proces fî, a restaran come prime." #~ msgid "Copy" #~ msgstr "Copie" @@ -57,8 +77,7 @@ msgstr "" #~ msgstr "No puès analizâ le specifiche di geometrie pasade a --geometry" #~ msgid "Unable to send data to child, invalid charset convertor" -#~ msgstr "" -#~ "Impussibil inviâ dâts al procès fî, convertidôr di caratars no valit" +#~ msgstr "Impussibil inviâ dâts al procès fî, convertidôr di caratars no valit" #~ msgid "Error reading PTY size, using defaults: %s\n" #~ msgstr "Erôr leint la dimension PTY, doprarai i valôrs di default: %s\n" diff --git a/po/gl.po b/po/gl.po index 4a9f7af..67344a6 100644 --- a/po/gl.po +++ b/po/gl.po @@ -5,46 +5,69 @@ # Ignacio Casal Quinteiro , 2007, 2008. # Mancomún - Centro de Referencia e Servizos de Software Libre , 2009. # Fran Diéguez , 2010, 2011. -# Fran Dieguez , 2014, 2016, 2018. +# Fran Dieguez , 2014-2020. +# msgid "" msgstr "" "Project-Id-Version: gl\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2018-08-30 00:33+0200\n" +"POT-Creation-Date: 2021-02-22 17:16+0000\n" +"PO-Revision-Date: 2020-08-04 09:31+0200\n" "Last-Translator: Fran Dieguez \n" "Language-Team: Proxecto Trasno \n" "Language: gl\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" -"X-Generator: Virtaal 0.7.1\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"X-Generator: Gtranslator 3.36.0\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Produciuse un erro ao ler desde o fillo: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Produciuse un erro (%s) ao converter os datos do fillo; eliminando." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7710 msgid "WARNING" msgstr "AVISO" -#: ../src/vte.cc:8180 -#| msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +#: src/vte.cc:7712 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS non está activado; os datos escribiranse no disco sen cifrar!" -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:110 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Non foi posíbel converter os caracteres desde %s a %s." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Produciuse un fallo ao estabelecer a tubería non bloqueante: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "erro de consulta: %s" + +#: src/spawn.cc:162 +msgid "Operation timed out" +msgstr "Expirou o tempo da operación" + +#: src/spawn.cc:172 +msgid "Operation was cancelled" +msgstr "Cancelouse a operación" + +#: src/spawn.cc:190 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Produciuse un erro ao ler desde a tubería filla (%s)" + +#: src/spawn.cc:620 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Produciuse un fallo ao cambiar ao directorio «%s»: %s" + +#: src/spawn.cc:689 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Produciuse un fallo ao executar o proceso fillo «%s»: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Produciuse un erro (%s) ao converter os datos do fillo; eliminando." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Non foi posíbel converter os caracteres desde %s a %s." #~ msgid "Copy" #~ msgstr "Copiar" diff --git a/po/he.po b/po/he.po index 8e18f4c..0ee00e1 100644 --- a/po/he.po +++ b/po/he.po @@ -8,42 +8,64 @@ msgid "" msgstr "" "Project-Id-Version: vte.HEAD.he\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-08-09 20:35+0300\n" -"PO-Revision-Date: 2016-08-09 20:35+0300\n" -"Last-Translator: Yosef Or Boczko \n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2021-08-26 18:15+0000\n" +"PO-Revision-Date: 2021-09-27 11:49+0300\n" +"Last-Translator: Yaron Shahrabani \n" "Language-Team: עברית <>\n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Gtranslator 2.91.6\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 3.0\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n==2 ? 1 : n>10 && n%10==0 ? 2 : 3);\n" -#: ../src/iso2022.cc:73 ../src/iso2022.cc:81 ../src/iso2022.cc:111 -#: ../src/vtegtk.cc:3069 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "לא ניתן להמיר תווים מ־%s ל־%s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:4003 -#, c-format -msgid "Error reading from child: %s." -msgstr "שגיאה בקריאה מהילד: %s." - -#: ../src/vte.cc:4142 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "שגיאה (%s) בהמרת מידע לילד, זורק." - -#: ../src/vte.cc:7911 +#: src/vte.cc:7670 msgid "WARNING" -msgstr "WARNING" +msgstr "אזהרה" -#: ../src/vte.cc:7912 -msgid "GNUTLS not enabled; data will be written to disk unencrypted!" -msgstr "GNUTLS not enabled; data will be written to disk unencrypted!" +#: src/vte.cc:7672 +msgid "GnuTLS not enabled; data will be written to disk unencrypted!" +msgstr "‫GnuTLS אינו זמין, הנתונים ייכתבו לכונן ללא הצפנה!" + +#: src/spawn.cc:110 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "הגדרת הצינורית כך שלא תחסום נכשלה: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "שגיאת תשאול: %s" + +#: src/spawn.cc:162 +msgid "Operation timed out" +msgstr "הזמן שהוקצב לפעולה הסתיים" + +#: src/spawn.cc:172 +msgid "Operation was cancelled" +msgstr "הפעולה בוטלה" + +#: src/spawn.cc:190 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "הקריאה מצינורית הצאצא (%s) נכשלה" + +#: src/spawn.cc:620 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "מעבר לתיקייה אחרת „%s” נכשל: %s" + +#: src/spawn.cc:689 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "הפעלת התהליך הצאצא „%s” נכשלה: " + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "לא ניתן להמיר תווים מ־%s ל־%s." + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "שגיאה (%s) בהמרת מידע לילד, זורק." #~ msgid "Copy" #~ msgstr "העתקה" @@ -120,8 +142,7 @@ msgstr "GNUTLS not enabled; data will be written to disk unencrypted!" #~ msgid "Using fontset \"%s\", which is missing these character sets: %s." #~ msgstr "משתמש בערכת הגופן \"%s\", אשר חסר בה ערכות התוים: %s." -#~ msgid "" -#~ "Failed to load Xft font pattern \"%s\", falling back to default font." +#~ msgid "Failed to load Xft font pattern \"%s\", falling back to default font." #~ msgstr "נכשל בטעינת דפוס הגופנים של Xft \"%s\", חוזר לגופן ברירת המחדל." #~ msgid "Failed to load default Xft font." diff --git a/po/hr.po b/po/hr.po index 676319e..deb02c2 100644 --- a/po/hr.po +++ b/po/hr.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: vte 0\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2018-09-02 19:00+0200\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-08-23 14:41+0200\n" "Last-Translator: gogo \n" "Language-Team: Croatian \n" "Language: hr\n" @@ -14,31 +14,54 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2016-09-15 11:47+0000\n" -"X-Generator: Poedit 2.1.1\n" +"X-Generator: Poedit 2.4.1\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Greška prilikom čitanja nadređenog: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Greška (%s) pri pretvorbi podataka za nadređenog, odbacujem." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7763 msgid "WARNING" msgstr "UPOZORENJE" -#: ../src/vte.cc:8180 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GNUTLS nije omogućen; podaci će biti zapisivani nešifrirano na disk!" -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Nemoguća pretvorba znakova iz %s u %s." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Neuspjelo postavljanje pipe neblokiranja: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "poll greška: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Istek vremena radnje" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Radnja je prekinuta" + +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Greška prilikom čitanja nadređenog slivnika (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Neuspjela promjena u direktorij “%s”: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Neuspjelo pokretanje podređenog procesa “%s”: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Greška (%s) pri pretvorbi podataka za nadređenog, odbacujem." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Nemoguća pretvorba znakova iz %s u %s." #~ msgid "Attempt to set invalid NRC map '%c'." #~ msgstr "Pokušaj postavljanja neispravne NRC mape '%c'." diff --git a/po/hu.po b/po/hu.po index 17fdd1c..af97280 100644 --- a/po/hu.po +++ b/po/hu.po @@ -1,48 +1,74 @@ # Hungarian translation for vte. -# Copyright (C) 2003-2016 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2007, 2008, 2010, 2014, 2016, 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the vte package. # # Andras Timar , 2003. # Laszlo Dvornik , 2004. # Gabor Kelemen , 2005, 2007, 2008, 2010. -# Balázs Úr , 2014, 2016. +# Balázs Úr , 2014, 2016, 2020. +# Balázs Meskó , 2020. msgid "" msgstr "" "Project-Id-Version: vte master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2018-08-31 12:51+0200\n" -"Last-Translator: Meskó Balázs \n" -"Language-Team: Hungarian \n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-09-07 01:36+0200\n" +"Last-Translator: Balázs Meskó \n" +"Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.8\n" +"X-Generator: Lokalize 19.12.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Hiba a gyermekből olvasás közben: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Hiba (%s) történt az adatkonverzió közben a gyermek számára, eldobva." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7763 msgid "WARNING" msgstr "FIGYELMEZTETÉS" -#: ../src/vte.cc:8180 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "" "A GnuTLS nincs engedélyezve. Az adatok titkosítatlanul lesznek a lemezre " "írva!" -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Nem lehet átalakítani a karaktereket %s és %s között." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Nem sikerült nem blokkolóra állítani a csővezetéket: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "lekérdezési hiba: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "A művelet túllépte az időkorlátot" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "A művelet megszakítva" + +#: src/spawn.cc:189 +#, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "Nem sikerült olvasni a gyermek csővezetékből (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Nem sikerült átváltani a(z) „%s” könyvtárra: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Nem sikerült végrehajtani a(z) „%s” gyermekfolyamatot: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "" +#~ "Hiba (%s) történt az adatkonverzió közben a gyermek számára, eldobva." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Nem lehet átalakítani a karaktereket %s és %s között." diff --git a/po/id.po b/po/id.po index d006df3..99ec67c 100644 --- a/po/id.po +++ b/po/id.po @@ -4,13 +4,13 @@ # # # Mohammad DAMT , 2005. +# Kukuh Syafaat , 2018, 2020. msgid "" msgstr "" "Project-Id-Version: vte.master.id\n" -"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" -"product=vte&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2018-05-21 18:38+0000\n" -"PO-Revision-Date: 2018-05-26 12:56+0700\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-05-31 14:10+0700\n" "Last-Translator: Kukuh Syafaat \n" "Language-Team: GNOME Indonesian Translation Team \n" @@ -18,34 +18,56 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Poedit 2.3.1\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ../src/iso2022.cc:71 ../src/iso2022.cc:79 ../src/iso2022.cc:109 -#: ../src/vtegtk.cc:3605 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Tidak dapat mengkonversi karakter dari %s ke %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3958 -#, c-format -msgid "Error reading from child: %s." -msgstr "Galat sewaktu membaca dari anak: %s." - -#: ../src/vte.cc:4098 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Galat (%s) sewaktu mengkonversi data untuk anak, dibuang." - -#: ../src/vte.cc:8150 +#: src/vte.cc:7763 msgid "WARNING" msgstr "PERINGATAN" -#: ../src/vte.cc:8151 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GNUTLS tidak difungsikan; data akan ditulis ke disk tanpa enkripsi!" +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Gagal mengatur nonblocking pipa: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "galat poll: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Waktu operasi habis" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Operasi dibatalkan" + +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Gagal membaca dari pipa anak (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Gagal mengubah ke direktori “%s”: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Gagal menjalankan proses anak “%s”: " + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Tidak dapat mengkonversi karakter dari %s ke %s." + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Galat (%s) sewaktu mengkonversi data untuk anak, dibuang." + #~ msgid "Copy" #~ msgstr "Salin" diff --git a/po/is.po b/po/is.po index 1b36c86..dd87d9c 100644 --- a/po/is.po +++ b/po/is.po @@ -1,47 +1,70 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Samúel Jón Gunnarsson , 2003. -# Sveinn í Felli , 2015, 2017. +# Sveinn í Felli , 2015, 2017, 2022. msgid "" msgstr "" "Project-Id-Version: vte\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=vte&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2016-09-17 18:49+0000\n" -"PO-Revision-Date: 2017-03-01 11:45+0000\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2021-08-26 18:15+0000\n" +"PO-Revision-Date: 2022-01-29 11:42+0000\n" "Last-Translator: Sveinn í Felli \n" -"Language-Team: Icelandic \n" +"Language-Team: Icelandic \n" "Language: is\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" -"X-Generator: Lokalize 1.5\n" +"X-Generator: Lokalize 19.12.3\n" -#: ../src/iso2022.cc:73 ../src/iso2022.cc:81 ../src/iso2022.cc:111 -#: ../src/vtegtk.cc:3072 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Ekki tókst að umbreyta stöfum frá %s yfir í %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:4002 -#, c-format -msgid "Error reading from child: %s." -msgstr "Villa. Ekki tókst að lesa frá afleiðu: %s" - -#: ../src/vte.cc:4141 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Villa (%s) við umbreytingu á gögnum frá afleiðu, hætti við." - -#: ../src/vte.cc:7910 +#: src/vte.cc:7670 msgid "WARNING" msgstr "AÐVÖRUN" -#: ../src/vte.cc:7911 -msgid "GNUTLS not enabled; data will be written to disk unencrypted!" -msgstr "GNUTLS er ekki virkt; gögn verða skrifuð ódulrituð á disk!" +#: src/vte.cc:7672 +#| msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +msgid "GnuTLS not enabled; data will be written to disk unencrypted!" +msgstr "GnuTLS er ekki virkt; gögn verða skrifuð ódulrituð á disk!" + +#: src/spawn.cc:110 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Gat ekki sett pípu sem ólokandi: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "villa í athugun: %s" + +#: src/spawn.cc:162 +msgid "Operation timed out" +msgstr "Aðgerð rann út á tíma" + +#: src/spawn.cc:172 +msgid "Operation was cancelled" +msgstr "Hætt var við aðgerð" + +#: src/spawn.cc:190 +#, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "Gat ekki lesið úr undirferlispípu (%s)" + +#: src/spawn.cc:620 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Gat ekki farið í möppuna '%s': %s" + +#: src/spawn.cc:689 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Gat ekki keyrt undirferlið “%s”: " + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Ekki tókst að umbreyta stöfum frá %s yfir í %s." + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Villa (%s) við umbreytingu á gögnum frá afleiðu, hætti við." #~ msgid "Copy" #~ msgstr "Afrita" diff --git a/po/it.po b/po/it.po index ef1a83e..53414b5 100644 --- a/po/it.po +++ b/po/it.po @@ -1,47 +1,62 @@ # Italian translation of vte. -# Copyright (C) 2003-2010, 2015, 2016, 2018 THE vte'S COPYRIGHT HOLDER +# Copyright (C) 2003-2010, 2015, 2016, 2018, 2020 THE vte'S COPYRIGHT HOLDER # This file is distributed under the same license as the vte package. # Francesco Marletta , 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010. -# Milo Casagrande , 2015, 2018. +# Milo Casagrande , 2015, 2018, 2020. # Gianvito Cavasoli , 2016. # msgid "" msgstr "" "Project-Id-Version: vte\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2018-08-27 10:02+0200\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-09-03 09:14+0200\n" "Last-Translator: Milo Casagrande \n" "Language-Team: Italiano \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Poedit 2.4.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Errore nella lettura dal processo figlio: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "" -"Errore (%s) nel convertire i dati per il processo figlio, rimarranno " -"invariati." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7763 msgid "WARNING" msgstr "Attenzione" -#: ../src/vte.cc:8180 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" -msgstr "GNUTLS non abilitato; i dati saranno scritti sul disco non cifrati." +msgstr "GnuTLS non abilitato; i dati saranno scritti sul disco non cifrati." -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Impossibile convertire i caratteri da %s a %s." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Impostazione del non-blocco per la pipe non riuscita: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "Errore di polling: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Tempo esaurito per l'operazione" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "L'operazione è stata annullata" + +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Lettura dalla pipe figlia non riuscita (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Cambio della directory in «%s» non riuscito: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Esecuzione del processo figlio «%s» non riuscita: " diff --git a/po/ja.po b/po/ja.po index 2fec9c3..82bf9b0 100644 --- a/po/ja.po +++ b/po/ja.po @@ -1,17 +1,17 @@ # vte ja.po. -# Copyright (C) 2003-2019 Free Software Foundation, Inc. +# Copyright (C) 2003, 2007, 2010, 2019-2020 Free Software Foundation, Inc. # This file is distributed under the same license as the vte package. # Takeshi AIHANA , 2003, 2007. # KAMAGASAKO Masatoshi , 2003. # Takayuki KUSANO < 2010. -# sicklylife , 2019. +# sicklylife , 2019-2020. # msgid "" msgstr "" "Project-Id-Version: vte master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2019-09-24 11:11+0000\n" -"PO-Revision-Date: 2019-10-08 21:15+0900\n" +"POT-Creation-Date: 2020-06-08 23:16+0000\n" +"PO-Revision-Date: 2020-06-10 18:45+0900\n" "Last-Translator: sicklylife \n" "Language-Team: Japanese \n" "Language: ja\n" @@ -19,29 +19,54 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: src/vte.cc:4185 -#, c-format -msgid "Error reading from child: %s." -msgstr "子プロセスの読み込み中にエラー: %s。" - -#: src/vte.cc:4335 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "子プロセスのデータ変換中にエラー (%s) が発生しました。取り消します。" - -#: src/vte.cc:8259 +#: src/vte.cc:7761 msgid "WARNING" msgstr "警告" -#: src/vte.cc:8260 +#: src/vte.cc:7763 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" -msgstr "GnuTLS が有効になっていないため、データを暗号化せずにディスクへ書き込みます!" +msgstr "" +"GnuTLS が有効になっていないため、データを暗号化せずにディスクへ書き込みます!" -#: src/vtegtk.cc:3873 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "%s から %s への文字変換に失敗しました。" +msgid "Failed to set pipe nonblocking: %s" +msgstr "パイプをノンブロッキングに設定できませんでした: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "poll エラー: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "操作がタイムアウトしました" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "操作がキャンセルされました" + +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "子プロセスのパイプからの読み取りに失敗しました (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "ディレクトリ“%s”への変更に失敗しました: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "子プロセス“%s”の起動に失敗しました: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "" +#~ "子プロセスのデータ変換中にエラー (%s) が発生しました。取り消します。" + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "%s から %s への文字変換に失敗しました。" #~ msgid "Attempt to set invalid NRC map '%c'." #~ msgstr "無効な NRC マップ '%c' を設定しようとしています" diff --git a/po/ka.po b/po/ka.po index c48e166..489d880 100644 --- a/po/ka.po +++ b/po/ka.po @@ -1,119 +1,60 @@ -# Georgian translation of vte. -# Copyright (C) 2004 Aiet Kolkhi -# This file is distributed under the same license as the vte package. -# Aiet Kolkhi , 2004. +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. # msgid "" msgstr "" -"Project-Id-Version: 0.1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-03-13 00:22-0500\n" -"PO-Revision-Date: 2006-03-18 03:09+0100\n" -"Last-Translator: Aiet Kolkhi \n" -"Language-Team: Georgian \n" +"Project-Id-Version: vte\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2022-06-24 20:12+0000\n" +"PO-Revision-Date: 2022-06-25 09:21+0200\n" +"Last-Translator: Temuri Doghonadze \n" +"Language-Team: Georgian <(nothing)>\n" "Language: ka\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 3.1\n" -#: src/iso2022.c:792 src/iso2022.c:803 src/iso2022.c:852 src/vte.c:1590 +#: src/vte.cc:7688 +msgid "WARNING" +msgstr "გაფრთხილება" + +#: src/vte.cc:7690 +msgid "GnuTLS not enabled; data will be written to disk unencrypted!" +msgstr "GnuTLS ჩართული არაა; მონაცემები დისკზე დაშიფვრის გარეშე ჩაიწერება!" + +#: src/spawn.cc:124 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "ვერ დავაკონვერტირე სიტყვები %s-იდან %s-ზე." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Pipe-ის დაუბლოკავ რეჟიმზე გადართვის პრობლემა: %s" -#: src/iso2022.c:1582 +#: src/spawn.cc:169 #, c-format -msgid "Attempt to set invalid NRC map '%c'." -msgstr "თქვენ ცადეთ არასწორი NRC map '%c'-ის დაყენება." +msgid "poll error: %s" +msgstr "პოლის შეცდომა: %s" -# Application signalled an "identified coding system" we haven't heard of. See ECMA-35 for gory details. -#. Application signalled an "identified coding system" we haven't heard of. See ECMA-35 for gory details. -#: src/iso2022.c:1623 -msgid "Unrecognized identified coding system." -msgstr "ამოუცნობი იდენტიფიკაციის კოდირების სისტემა (ECMA-35)." +#: src/spawn.cc:176 +msgid "Operation timed out" +msgstr "ოპერაციის ვადა გავიდა" -#: src/iso2022.c:1672 src/iso2022.c:1698 +#: src/spawn.cc:186 +msgid "Operation was cancelled" +msgstr "ოპერაცია გაუქმდა" + +#: src/spawn.cc:204 #, c-format -msgid "Attempt to set invalid wide NRC map '%c'." -msgstr "თქვენ ცადეთ არაწორი ფართო wide NRC map-ის, «%c»-ის დაწეება." +msgid "Failed to read from child pipe (%s)" +msgstr "მონაცემთა წაკითხვა ქვეპროცესის არხიდან ვერ მოხერხდა (%s)" -#: src/pty.c:329 +#: src/spawn.cc:639 #, c-format -msgid "Error adding `%s' to environment, continuing." -msgstr "შეცდომა '%s'-ის environment-ში ჩამატებისას. ვაგრძელებ." +msgid "Failed to change to directory “%s”: %s" +msgstr "საქაღალდის ცვლილების შეცდომა \"%s\": %s" -# 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). -#. 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/spawn.cc:708 #, c-format -msgid "can not run %s" -msgstr "ვერ ვიძახებ %s-ს" - -#: src/reaper.c:156 -msgid "Error creating signal pipe." -msgstr "ვერ შევქმენი signal pipe." - -#: src/trie.c:412 -#, c-format -msgid "Duplicate (%s/%s)!" -msgstr "დუბლირებულია (%s/%s)!" - -#: src/vte.c:1016 -#, c-format -msgid "Error compiling regular expression \"%s\"." -msgstr "სამწუხაროდ ვერ დავაკომპილირე regular expression „%s“." - -#: src/vte.c:2472 -#, c-format -msgid "No handler for control sequence `%s' defined." -msgstr "control sequence „%s“-სათვის ჰენდლერი არ არის განსაზღვრული." - -#. Translators: %s is replaced with error message returned by strerror(). -#: src/vte.c:3315 -#, c-format -msgid "Error reading from child: %s." -msgstr "ვერ წავიკითხე child «%s»-დან." - -#: src/vte.c:3437 src/vte.c:4331 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "შეცდომა (%s) მონაცემის ქვე-სტრუქტურაში ინტეგრირებისას. გამოვტოვებ." - -#: src/vte.c:6284 -#, c-format -msgid "Error reading PTY size, using defaults: %s." -msgstr "ვერ ვკითხულობ PTY ზომას, ვიყენებ სტანდარტებს: %s." - -#: src/vte.c:6320 -#, c-format -msgid "Error setting PTY size: %s." -msgstr "PTY-ს ზომა ვერ დავაწესე: %s." - -# Aaargh. We're screwed. -#. Aaargh. We're screwed. -#: src/vte.c:10629 -msgid "_vte_conv_open() failed setting word characters" -msgstr "_vte_conv_open() ჩაიშალა. ვაწესებ word characters-ს" - -# Bail back to normal mode. -#. Bail back to normal mode. -#: src/vteapp.c:736 -msgid "Could not open console.\n" -msgstr "კონსოლი ვერ იხსნება.\n" - -#: src/vteglyph.c:579 -#, c-format -msgid "Unknown pixel mode %d.\n" -msgstr "უცნობი პიქსელის რეჟიმი %d.\n" - -#: src/vtexft.c:714 -#, c-format -msgid "Can not draw character U+%04x.\n" -msgstr "ვერ ვაჩვენე ასო U+%04x.\n" - -#~ msgid "Got unexpected (key?) sequence `%s'." -#~ msgstr "მოულოდნელი (key?) sequence «%s»." +msgid "Failed to execute child process “%s”: " +msgstr "შვილობილი პროცესის გაშვების შეცდომა %s: " diff --git a/po/kk.po b/po/kk.po index daccab9..4e81d09 100644 --- a/po/kk.po +++ b/po/kk.po @@ -7,39 +7,63 @@ msgid "" msgstr "" "Project-Id-Version: vte master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2018-08-25 22:37+0500\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-09-12 19:05+0500\n" "Last-Translator: Baurzhan Muftakhidinov \n" "Language-Team: Kazakh \n" "Language: kk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.1.1\n" +"X-Generator: Poedit 2.4.1\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Ұрпақтан оқу қатесі: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Ұрпақ үшін деректерді түрлендіру қатесі (%s), тасталады." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7763 msgid "WARNING" msgstr "ЕСКЕРТУ" -#: ../src/vte.cc:8180 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS іске қосылмаған; деректер дискке шифрленбеген түрде жазылатын болады!" -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Таңбаларды %s жинағынан %s жинағына түрлендіру мүмкін емес." +msgid "Failed to set pipe nonblocking: %s" +msgstr "" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Әрекетті күту мерзімі аяқталды" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Әрекеттен бас тартылды" + +#: src/spawn.cc:189 +#, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "" + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Ұрпақ үшін деректерді түрлендіру қатесі (%s), тасталады." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Таңбаларды %s жинағынан %s жинағына түрлендіру мүмкін емес." #~ msgid "Copy" #~ msgstr "Көшіріп алу" diff --git a/po/ko.po b/po/ko.po index fbaa2b5..32903f0 100644 --- a/po/ko.po +++ b/po/ko.po @@ -2,14 +2,14 @@ # This file is distributed under the same license as the vte package. # # Nam SungHyun , 2003 -# Changwoo Ryu , 2007, 2009, 2010, 2014, 2016, 2018. +# Changwoo Ryu , 2007, 2009, 2010, 2014, 2016, 2018, 2020. # msgid "" msgstr "" "Project-Id-Version: vte\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2018-08-25 16:45+0900\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-08-29 19:54+0900\n" "Last-Translator: Changwoo Ryu \n" "Language-Team: GNOME Korea \n" "Language: ko\n" @@ -17,27 +17,46 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "하위 프로세스에서 읽기 오류: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "" -"하위 프로세스를 위한 데이터 변환에 오류가 발생했습니다. (%s) 그만둡니다." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7763 msgid "WARNING" msgstr "경고" -#: ../src/vte.cc:8180 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS 사용하지 않음. 데이터를 암호화하지 않은 상태로 디스크에 씁니다" -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "문자를 %s을(를) %s(으)로 변환할 수 없습니다." +msgid "Failed to set pipe nonblocking: %s" +msgstr "파이프를 넌블럭으로 설정하는데 실패했습니다: %s" + +# system call 오류이므로 그대로 +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "poll 오류: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "작업 제한 시간 초과" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "작업이 취소되었습니다" + +# (%s) 오류 설명(strerror) +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "하위 파이프에서 읽기 실패 (%s)" + +# chdir 실패 +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "“%s” 디렉터리로 이동 실패: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "“%s” 하위 프로세스 실행 실패: " diff --git a/po/lt.po b/po/lt.po index a0fb09a..5cd53cf 100644 --- a/po/lt.po +++ b/po/lt.po @@ -4,14 +4,14 @@ # Tomas Kuliavas , 2003. # Gintautas Miliauskas , 2007. # Rimas Kudelis , 2010, 2014. -# Aurimas Černius , 2016, 2018. +# Aurimas Černius , 2016-2020. # msgid "" msgstr "" "Project-Id-Version: lt\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2018-08-11 18:19+0300\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-07-12 20:42+0300\n" "Last-Translator: Aurimas Černius \n" "Language-Team: Lietuvių \n" "Language: lt\n" @@ -19,35 +19,58 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" -"%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Gtranslator 2.91.7\n" +"%100<10 || n%100>=20) ? 1 : 2)\n" +"X-Generator: Gtranslator 3.36.0\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Įvyko klaida skaitant duomenis iš antrinio proceso: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "" -"Įvyko klaida (%s) keičiant duomenis gautus iš antrinio proceso, nutraukiame " -"darbą." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7763 msgid "WARNING" msgstr "ĮSPĖJIMAS" -#: ../src/vte.cc:8180 -#| msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GNUTLS nėra įjungta; duomenys bus rašomi į diską nešifruojant!" -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Nepavyko perversti simbolių iš %s į %s." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Nepavyko kanalo padaryti neblokuojančiu: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "poll klaida: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Baigėsi veiksmo laikas" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Veiksmas buvo nutrauktas" + +#: src/spawn.cc:189 +#, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "Įvyko klaida skaitant iš antrinio kanalo (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Nepavyko pakeisti katalogo į „%s“: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Nepavyko vykdyti antrinio proceso „%s“: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "" +#~ "Įvyko klaida (%s) keičiant duomenis gautus iš antrinio proceso, " +#~ "nutraukiame darbą." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Nepavyko perversti simbolių iš %s į %s." #~ msgid "Copy" #~ msgstr "Kopijuoti" diff --git a/po/lv.po b/po/lv.po index 68e7209..399bebd 100644 --- a/po/lv.po +++ b/po/lv.po @@ -5,13 +5,13 @@ # Artis Trops , 2002. # Raivis Dejus , 2006. # Peteris Krisjanis , 2009. -# Rudolfs , 2011, 2016, 2018. +# Rudolfs , 2011, 2016, 2018, 2020. msgid "" msgstr "" "Project-Id-Version: lv\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2018-08-31 21:06+0200\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-09-12 16:08+0300\n" "Last-Translator: Rūdolfs Mazurs \n" "Language-Team: Latvian \n" "Language: lv\n" @@ -20,32 +20,55 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 :" " 2);\n" -"X-Generator: Lokalize 2.0\n" +"X-Generator: Lokalize 19.12.3\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Kļūda lasot no bērna: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Kļūda (%s) konvertējot datus bērnam, pamet." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7763 msgid "WARNING" msgstr "BRĪDINĀJUMS" -#: ../src/vte.cc:8180 -#| msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS nav ieslēgti; dati diskā tiks ierakstīti nešifrēti!" -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Neiespējami pārveidot rakstzīmes no %s uz %s." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Neizdevās iestatīt programmkanālu kā nebloķējošu: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "vaicāšanas kļūda: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Darbībai iestājās noildze" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Darbība tika atcelta" + +#: src/spawn.cc:189 +#, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "Nevarēja nolasīt no bērna programkanāla (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Nevarēja pāriet uz direktoriju “%s” — %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Nevarēja izpildīt bērnprocesu “%s”: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Kļūda (%s) konvertējot datus bērnam, pamet." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Neiespējami pārveidot rakstzīmes no %s uz %s." #~ msgid "Attempt to set invalid NRC map '%c'." #~ msgstr "Mēģinājums iestatīt nederīgu NRC karti '%c'." diff --git a/po/meson.build b/po/meson.build index 14ca4dd..4c48d36 100644 --- a/po/meson.build +++ b/po/meson.build @@ -1,14 +1,14 @@ # Copyright © 2018, 2019 Iñigo Martínez # -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. # -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser -# General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this library. If not, see . diff --git a/po/nb.po b/po/nb.po index b4c1d21..56f8343 100644 --- a/po/nb.po +++ b/po/nb.po @@ -1,13 +1,13 @@ # Norwegian (bokmål) translation of vte. -# Copyright (C) Kjartan Maraas, 2002-2014. +# Copyright (C) Kjartan Maraas, 2002-2020. # Free Software Foundation, 2002. # msgid "" msgstr "" -"Project-Id-Version: vte 0.46.x\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-16 12:39+0200\n" -"PO-Revision-Date: 2016-10-16 12:38+0200\n" +"Project-Id-Version: vte 0.62.x\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-09-12 19:27+0000\n" +"PO-Revision-Date: 2021-01-25 15:05+0100\n" "Last-Translator: Kjartan Maraas \n" "Language-Team: Norwegian Bokmål \n" "Language: nb\n" @@ -15,28 +15,44 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../src/iso2022.cc:73 ../src/iso2022.cc:81 ../src/iso2022.cc:111 -#: ../src/vtegtk.cc:3072 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Kan ikke konvertere tegn fra %s til %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:4002 -#, c-format -msgid "Error reading from child: %s." -msgstr "Feil under lesing fra underprosess: %s." - -#: ../src/vte.cc:4141 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Feil (%s) ved konvertering av data for underprosess. Hopper over." - -#: ../src/vte.cc:7910 +#: src/vte.cc:7764 msgid "WARNING" msgstr "ADVARSEL" -#: ../src/vte.cc:7911 -msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +#: src/vte.cc:7766 +msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "" "GNUTLS er ikke aktivert; data vil bli skrevet til disk uten kryptering!" + +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Klarte ikke å sette rør til ikke-blokkerende: %s" + +#: src/spawn.cc:156 +#, c-format +msgid "poll error: %s" +msgstr "feil ved henting: %s" + +#: src/spawn.cc:163 +msgid "Operation timed out" +msgstr "Operasjonen fikk tidsavbrudd" + +#: src/spawn.cc:173 +msgid "Operation was cancelled" +msgstr "Operasjonen ble avbrutt" + +#: src/spawn.cc:191 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Feil under lesing fra underrør (%s)" + +#: src/spawn.cc:621 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Klarte ikke å endre til katalog «%s»: %s" + +#: src/spawn.cc:690 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Klarte ikke å kjøre underprosess «%s»: " diff --git a/po/ne.po b/po/ne.po index eaf2956..fe998cd 100644 --- a/po/ne.po +++ b/po/ne.po @@ -3,112 +3,109 @@ msgid "" msgstr "" "Project-Id-Version: vte.HEAD.ne\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-04-25 03:21+0100\n" -"PO-Revision-Date: 2007-12-20 15:48+0545\n" -"Last-Translator: Shyam Krishna Bal \n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2021-02-22 17:16+0000\n" +"PO-Revision-Date: 2021-04-23 22:36+0545\n" +"Last-Translator: Pawan Chitrakar \n" "Language-Team: Nepali \n" "Language: ne\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.11.4\n" -"Plural-Forms: nplurals=2; plural=n !=1\n" +"X-Generator: Poedit 2.4.2\n" +"Plural-Forms: nplurals=2; plural=n !=1;\n" -#: ../src/iso2022.c:791 ../src/iso2022.c:799 ../src/iso2022.c:830 -#: ../src/vte.c:1797 +#: src/vte.cc:7710 +msgid "WARNING" +msgstr "चेतावनी" + +#: src/vte.cc:7712 +msgid "GnuTLS not enabled; data will be written to disk unencrypted!" +msgstr "GnuTLS सक्षम पारिएको छैन; गुप्तिकरण नगरिएको डिस्कमा डाटा लेखिनेछ!" + +#: src/spawn.cc:110 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "%s बाट %s मा क्यारेक्टरहरू रूपान्तरण गर्न असक्षम ।" +msgid "Failed to set pipe nonblocking: %s" +msgstr "पाइप अवरोध बिहिन सेट गर्न असफल भयो: %s" -#: ../src/iso2022.c:1539 +#: src/spawn.cc:155 #, c-format -msgid "Attempt to set invalid NRC map '%c'." -msgstr "अवैध एनआरसी मानचित्र '%c' सेट गर्न प्रयास गर्नुहोस् ।" +msgid "poll error: %s" +msgstr "सर्वेक्षण त्रुटि: %s" -#. Application signalled an "identified coding system" we haven't heard of. See ECMA-35 for gory details. -#: ../src/iso2022.c:1569 -msgid "Unrecognized identified coding system." -msgstr "अपरिचित कोडिङ प्रणाली ।" +#: src/spawn.cc:162 +msgid "Operation timed out" +msgstr "सञ्चालन समय समाप्त भयो" -#: ../src/iso2022.c:1628 ../src/iso2022.c:1655 +#: src/spawn.cc:172 +msgid "Operation was cancelled" +msgstr "सञ्चालन रद्द भएको छ" + +#: src/spawn.cc:190 #, c-format -msgid "Attempt to set invalid wide NRC map '%c'." -msgstr "अवैध फराकिलो एनआरसी मानचित्र '%c' सेट गर्न प्रयास गर्नुहोस् ।" +msgid "Failed to read from child pipe (%s)" +msgstr "शाखा प्रक्रिया (%s)बाट पढ्न असफल" -#. 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:837 +#: src/spawn.cc:620 #, c-format -msgid "can not run %s" -msgstr "%s चलाउन सकिँदैन" +msgid "Failed to change to directory “%s”: %s" +msgstr "निर्देशिका \"%s\" मा परिवर्तन गर्न असफल भयो: %s" -#: ../src/reaper.c:136 -msgid "Error creating signal pipe." -msgstr "साङ्केतिक पाइप सिर्जना गर्दा त्रुटि ।" - -#: ../src/trie.c:414 +#: src/spawn.cc:689 #, c-format -msgid "Duplicate (%s/%s)!" -msgstr "नक्कली (%s/%s)!" +msgid "Failed to execute child process “%s”: " +msgstr "शाखा प्रक्रिया \"%s\" कार्यान्वयन गर्न असफल भयो: " -#: ../src/vte.c:1187 -#, c-format -msgid "Error compiling regular expression \"%s\"." -msgstr "नियमित अभिव्यक्ति कम्पाइल गर्दा त्रुटि \"%s\" ।" +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "%s बाट %s मा क्यारेक्टरहरू रूपान्तरण गर्न असक्षम ।" -#: ../src/vte.c:2657 ../src/vte.c:2662 -#, c-format -msgid "No handler for control sequence `%s' defined." -msgstr "नियन्त्रण अनुक्रम `%s' का लागि कुनै ह्यान्डलर परिभाषित गरिएको छैन ।" +#~ msgid "Attempt to set invalid NRC map '%c'." +#~ msgstr "अवैध एनआरसी मानचित्र '%c' सेट गर्न प्रयास गर्नुहोस् ।" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.c:3627 -#, c-format -msgid "Error reading from child: %s." -msgstr "शाखाबाट पढ्दा त्रुटि: %s." +#~ msgid "Unrecognized identified coding system." +#~ msgstr "अपरिचित कोडिङ प्रणाली ।" -#: ../src/vte.c:3743 -msgid "Unable to send data to child, invalid charset convertor" -msgstr "शाखामा डेटा पठाउन असक्षम, अवैध क्यारेक्टर सेट रूपान्तरक" +#~ msgid "Attempt to set invalid wide NRC map '%c'." +#~ msgstr "अवैध फराकिलो एनआरसी मानचित्र '%c' सेट गर्न प्रयास गर्नुहोस् ।" -#: ../src/vte.c:3754 ../src/vte.c:4631 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "शाखाका लागि डेटा रूपान्तरण गर्दा, छोड्दा त्रुटि (%s) ।" +#~ msgid "can not run %s" +#~ msgstr "%s चलाउन सकिँदैन" -#: ../src/vte.c:6866 -#, c-format -msgid "Error reading PTY size, using defaults: %s." -msgstr "पूर्वनिर्धारित प्रयोग गरेर, पीटीवाई साइज पढ्दा त्रुटि: %s." +#~ msgid "Error creating signal pipe." +#~ msgstr "साङ्केतिक पाइप सिर्जना गर्दा त्रुटि ।" -#: ../src/vte.c:6895 -#, c-format -msgid "Error setting PTY size: %s." -msgstr "पीटीवाई साइज सेट गर्दा त्रुटि: %s." +#~ msgid "Duplicate (%s/%s)!" +#~ msgstr "नक्कली (%s/%s)!" -#. Aaargh. We're screwed. -#: ../src/vte.c:11348 -msgid "_vte_conv_open() failed setting word characters" -msgstr "शब्द क्यारेक्टर सेटिङ गर्दा _vte_conv_open() असफल भयो" +#~ msgid "Error compiling regular expression \"%s\"." +#~ msgstr "नियमित अभिव्यक्ति कम्पाइल गर्दा त्रुटि \"%s\" ।" -#: ../src/vteseq.c:3926 -#, c-format -msgid "Got unexpected (key?) sequence `%s'." -msgstr "अनपेक्षित (key?) अनुक्रम `%s' प्राप्त भयो ।" +#~ msgid "No handler for control sequence `%s' defined." +#~ msgstr "नियन्त्रण अनुक्रम `%s' का लागि कुनै ह्यान्डलर परिभाषित गरिएको छैन ।" -#. Bail back to normal mode. -#: ../src/vteapp.c:774 -msgid "Could not open console.\n" -msgstr "कन्सोल खोल्न सकिएन ।\n" +#~ msgid "Unable to send data to child, invalid charset convertor" +#~ msgstr "शाखामा डेटा पठाउन असक्षम, अवैध क्यारेक्टर सेट रूपान्तरक" -#: ../src/vteapp.c:838 -msgid "Could not parse the geometry spec passed to --geometry" -msgstr "ज्यामितिमा पास गरिएको ज्यामिति स्पेक पद वर्णन गर्न सकिएन" +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "शाखाका लागि डेटा रूपान्तरण गर्दा, छोड्दा त्रुटि (%s) ।" -#: ../src/vteglyph.c:562 -#, c-format -msgid "Unknown pixel mode %d.\n" -msgstr "अज्ञात पिक्सेल मोड %d ।\n" +#~ msgid "Error reading PTY size, using defaults: %s." +#~ msgstr "पूर्वनिर्धारित प्रयोग गरेर, पीटीवाई साइज पढ्दा त्रुटि: %s." +#~ msgid "Error setting PTY size: %s." +#~ msgstr "पीटीवाई साइज सेट गर्दा त्रुटि: %s." + +#~ msgid "_vte_conv_open() failed setting word characters" +#~ msgstr "शब्द क्यारेक्टर सेटिङ गर्दा _vte_conv_open() असफल भयो" + +#~ msgid "Got unexpected (key?) sequence `%s'." +#~ msgstr "अनपेक्षित (key?) अनुक्रम `%s' प्राप्त भयो ।" + +#~ msgid "Could not open console.\n" +#~ msgstr "कन्सोल खोल्न सकिएन ।\n" + +#~ msgid "Could not parse the geometry spec passed to --geometry" +#~ msgstr "ज्यामितिमा पास गरिएको ज्यामिति स्पेक पद वर्णन गर्न सकिएन" + +#~ msgid "Unknown pixel mode %d.\n" +#~ msgstr "अज्ञात पिक्सेल मोड %d ।\n" diff --git a/po/nl.po b/po/nl.po index 24edfe2..4afc2ef 100644 --- a/po/nl.po +++ b/po/nl.po @@ -4,47 +4,70 @@ # Reinout van Schouwen , 2002 # Tino Meinen 2003 # Wouter Bolsterlee , 2007, 2010 -# Nathan Follens , 2015, 2017 +# Nathan Follens , 2015, 2017, 2020 # msgid "" msgstr "" "Project-Id-Version: vte\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2019-02-24 11:27+0100\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-08-25 15:23+0200\n" "Last-Translator: Nathan Follens \n" -"Language-Team: Dutch \n" +"Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.1\n" +"X-Generator: Poedit 2.4.1\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Er is een fout opgetreden bij lezen van kind: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Fout (%s) bij converteren gegevens voor dochter, laat het vallen." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7763 msgid "WARNING" msgstr "WAARSCHUWING" -#: ../src/vte.cc:8180 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "" "GnuTLS niet ingeschakeld, gegevens zullen onversleuteld naar de schijf " "worden geschreven!" -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Kan tekens niet converteren van %s naar %s." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Niet-blokkerend instellen van pijp is mislukt: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "pollfout: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Time-out bij bewerking" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Bewerking geannuleerd" + +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Lezen van dochterpijplijn (%s) is mislukt" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Wijzigen naar map ‘%s’ is mislukt: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Uitvoeren van dochterproces ‘%s’ is mislukt: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Fout (%s) bij converteren gegevens voor dochter, laat het vallen." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Kan tekens niet converteren van %s naar %s." #~ msgid "Copy" #~ msgstr "Kopiëren" diff --git a/po/oc.po b/po/oc.po index 77b96d0..0a7911a 100644 --- a/po/oc.po +++ b/po/oc.po @@ -8,44 +8,66 @@ msgid "" msgstr "" "Project-Id-Version: vte 0.14.1\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2018-06-22 08:58+0200\n" -"Last-Translator: Cédric Valmary (totenoc.eu) \n" +"POT-Creation-Date: 2021-02-22 17:16+0000\n" +"PO-Revision-Date: 2021-05-13 16:54+0200\n" +"Last-Translator: Quentin PAGÈS\n" "Language-Team: Tot En Òc\n" "Language: oc\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" -"X-Generator: Virtaal 0.7.1\n" +"X-Generator: Poedit 2.4.3\n" "X-Project-Style: gnome\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Error al moment de la lectura del filh : « %s »." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Error (%s) al moment de la conversion de donadas pel filh, abandon." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7710 msgid "WARNING" msgstr "AVERTIMENT" -#: ../src/vte.cc:8180 -#| msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +#: src/vte.cc:7712 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "" "GnuTLS es pas activat ; las donadas seràn escritas sul disc sens èsser " "chifradas !" -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:110 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Impossible de convertir los caractèrs %s en %s." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Fracàs de la mesa en plaça d'una pipa non blocanta : %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "error de poll : %s" + +#: src/spawn.cc:162 +msgid "Operation timed out" +msgstr "L’operacion a expirat" + +#: src/spawn.cc:172 +msgid "Operation was cancelled" +msgstr "L'operacion es estada anullada" + +#: src/spawn.cc:190 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Error al moment de la lectura del filh (%s)" + +#: src/spawn.cc:620 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Fracàs del cambiament de repertòri « %s » : %s" + +#: src/spawn.cc:689 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "L'execucion del processus filh a fracassat « %s » : " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Error (%s) al moment de la conversion de donadas pel filh, abandon." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Impossible de convertir los caractèrs %s en %s." #~ msgid "Copy" #~ msgstr "Copiar" diff --git a/po/pa.po b/po/pa.po index 0b3c7c8..6efcff7 100644 --- a/po/pa.po +++ b/po/pa.po @@ -2,96 +2,109 @@ # This file is distributed under the same license as the PACKAGE package. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. # -# A S Alam , 2004, 2005, 2006, 2007, 2009, 2010, 2014. +# A S Alam , 2004, 2005, 2006, 2007, 2009, 2010, 2014, 2021. msgid "" msgstr "" "Project-Id-Version: vte.HEAD\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=vte&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2014-09-21 11:44+0000\n" -"PO-Revision-Date: 2014-09-21 08:40-0500\n" -"Last-Translator: A S Alam \n" -"Language-Team: Punjabi/Panjabi \n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2021-02-06 10:13-0800\n" +"Last-Translator: A S Alam \n" +"Language-Team: Punjabi \n" "Language: pa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 1.5\n" +"X-Generator: Lokalize 20.08.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../src/app.ui.h:1 -msgid "Copy" -msgstr "ਕਾਪੀ ਕਰੋ" +#: src/vte.cc:7763 +msgid "WARNING" +msgstr "ਸਾਵਾਧਾਨ" -#: ../src/app.ui.h:2 -msgid "Paste" -msgstr "ਚੇਪੋ" +#: src/vte.cc:7765 +msgid "GnuTLS not enabled; data will be written to disk unencrypted!" +msgstr "" +"GnuTLS ਸਮਰੱਥ ਨਹੀਂ ਹੈ; ਡਿਸਕ ਉੱਤੇ ਲਿਖਿਆ ਡਾਟਾ ਬਿਨਾਂ-ਇੰਕ੍ਰਿਪਸ਼ਨ ਦੇ ਲਿਖਿਆ ਜਾਵੇਗਾ!" -#: ../src/app.ui.h:3 -msgid "Reset (use Ctrl to reset and clear)" -msgstr "ਮੁੜ-ਸੈੱਟ (ਮੁੜ-ਸੈੱਟ ਤੇ ਸਾਫ਼ ਕਰਨ ਲਈ Ctrl ਵਰਤੋਂ)" - -#: ../src/app.ui.h:4 -msgid "Reset" -msgstr "ਮੁੜ-ਸੈੱਟ" - -#: ../src/app.ui.h:5 -msgid "Toggle input enabled setting" -msgstr "ਇੰਪੁੱਟ ਯੋਗ ਕੀਤੀ ਸੈਟਿੰਗ ਬਦਲੋ" - -#: ../src/app.ui.h:6 -msgid "Input" -msgstr "ਇੰਪੁੱਟ" - -#: ../src/iso2022.c:791 ../src/iso2022.c:799 ../src/iso2022.c:830 -#: ../src/vte.c:1998 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "ਇਸ ਸੰਕੇਤ %s ਤੋਂ %s ਤਬਦੀਲ ਕਰਨ ਤੋਂ ਅਸਮਰੱਥ ਹੈ।" +msgid "Failed to set pipe nonblocking: %s" +msgstr "ਪਾਈਪ ਬਿਨ-ਬਲਾਕਿੰਗ ਸੈੱਟ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ: %s" -#: ../src/iso2022.c:1496 +#: src/spawn.cc:155 #, c-format -msgid "Attempt to set invalid NRC map '%c'." -msgstr "ਗਲਤ NRC ਮੈਪ'%c' ਸੈੱਟ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਹੈ।" +msgid "poll error: %s" +msgstr "ਪੋਲ ਗਲਤੀ: %s" -#. Application signalled an "identified coding system" we haven't heard of. See ECMA-35 for gory details. -#: ../src/iso2022.c:1526 -msgid "Unrecognized identified coding system." -msgstr "ਅਣਜਾਣ ਸ਼ਨਾਖਤੀ ਕੋਡਿੰਗ ਸਿਸਟਮ ਹੈ।" +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "ਕਾਰਵਾਈ ਲਈ ਸਮਾਂ ਸਮਾਪਤ" -#: ../src/iso2022.c:1585 ../src/iso2022.c:1612 +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "ਕਾਰਵਾਈ ਰੱਦ ਕੀਤੀ ਗਈ ਸੀ" + +#: src/spawn.cc:189 #, c-format -msgid "Attempt to set invalid wide NRC map '%c'." -msgstr "ਗਲਤ ਚੌਡ਼ਾ NRC ਮੈਪ'%c' ਸੈੱਟ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਹੈ।" +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "ਚਲਾਈਡ ਪਾਈਪ (%s) ਤੋਂ ਪੜ੍ਹਨ ਦੌਰਾਨ ਫੇਲ੍ਹ ਹੈ" -#. Bail back to normal mode. -#: ../src/vteapp.c:1027 -msgid "Could not open console.\n" -msgstr "ਕੰਨਸੋਲ ਖੋਲ੍ਹਿਆ ਨਹੀ ਜਾ ਸਕਿਆ।\n" - -#: ../src/vteapp.c:1137 -msgid "Could not parse the geometry spec passed to --geometry" -msgstr "--geometry ਨੂੰ ਦਿੱਤੀ ਜੁਮੈਟਰੀ ਗਿਣਤੀ ਨੂੰ ਪਾਰਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.c:4164 +#: src/spawn.cc:576 #, c-format -msgid "Error reading from child: %s." -msgstr "ਚਲਾਈਡ ਤੋਂ ਪੜ੍ਹਨ ਦੌਰਾਨ ਗਲਤੀ: %s।" +msgid "Failed to change to directory “%s”: %s" +msgstr "ਡਾਇਰੈਕਟਰੀ “%s” ਬਦਲਣ ਲਈ ਅਸਫ਼ਲ ਹੈ: %s" -#: ../src/vte.c:4300 -msgid "Unable to send data to child, invalid charset convertor" -msgstr "ਚਾਈਲਡ ਨੂੰ ਡਾਟਾ ਭੇਜਣ ਲਈ ਅਸਮਰੱਥ, ਅਢੁੱਕਵਾਂ ਅੱਖਰ-ਸੈੱਟ ਕੰਨਵਰਟਰ" - -#: ../src/vte.c:4311 ../src/vte.c:5315 +#: src/spawn.cc:645 #, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "ਗਲਤੀ (%s) ਚਲਾਈਡ ਲਈ ਡਾਟਾ ਬਦਲਣ ਦੌਰਾਨ, ਛੱਡਿਆ ਗਿਆ।" +msgid "Failed to execute child process “%s”: " +msgstr "“%s” ਚਲਾਈਡ ਪਰੋਸੈਸ ਚਲਾਉਣ ਲਈ ਅਸਫ਼ਲ ਹੈ: " -#: ../src/vte.c:7628 -#, c-format -msgid "Error reading PTY size, using defaults: %s\n" -msgstr "PTY ਅਕਾਰ ਪਡ਼੍ਹਨ ਵਿੱਚ ਗਲਤੀ, ਡਿਫਾਲਟ ਦੀ ਵਰਤੋਂ: %s\n" +#~ msgid "Copy" +#~ msgstr "ਕਾਪੀ ਕਰੋ" + +#~ msgid "Paste" +#~ msgstr "ਚੇਪੋ" + +#~ msgid "Reset (use Ctrl to reset and clear)" +#~ msgstr "ਮੁੜ-ਸੈੱਟ (ਮੁੜ-ਸੈੱਟ ਤੇ ਸਾਫ਼ ਕਰਨ ਲਈ Ctrl ਵਰਤੋਂ)" + +#~ msgid "Reset" +#~ msgstr "ਮੁੜ-ਸੈੱਟ" + +#~ msgid "Toggle input enabled setting" +#~ msgstr "ਇੰਪੁੱਟ ਯੋਗ ਕੀਤੀ ਸੈਟਿੰਗ ਬਦਲੋ" + +#~ msgid "Input" +#~ msgstr "ਇੰਪੁੱਟ" + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "ਇਸ ਸੰਕੇਤ %s ਤੋਂ %s ਤਬਦੀਲ ਕਰਨ ਤੋਂ ਅਸਮਰੱਥ ਹੈ।" + +#~ msgid "Attempt to set invalid NRC map '%c'." +#~ msgstr "ਗਲਤ NRC ਮੈਪ'%c' ਸੈੱਟ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਹੈ।" + +#~ msgid "Unrecognized identified coding system." +#~ msgstr "ਅਣਜਾਣ ਸ਼ਨਾਖਤੀ ਕੋਡਿੰਗ ਸਿਸਟਮ ਹੈ।" + +#~ msgid "Attempt to set invalid wide NRC map '%c'." +#~ msgstr "ਗਲਤ ਚੌਡ਼ਾ NRC ਮੈਪ'%c' ਸੈੱਟ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਹੈ।" + +#~ msgid "Could not open console.\n" +#~ msgstr "ਕੰਨਸੋਲ ਖੋਲ੍ਹਿਆ ਨਹੀ ਜਾ ਸਕਿਆ।\n" + +#~ msgid "Could not parse the geometry spec passed to --geometry" +#~ msgstr "--geometry ਨੂੰ ਦਿੱਤੀ ਜੁਮੈਟਰੀ ਗਿਣਤੀ ਨੂੰ ਪਾਰਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" + +#~ msgid "Unable to send data to child, invalid charset convertor" +#~ msgstr "ਚਾਈਲਡ ਨੂੰ ਡਾਟਾ ਭੇਜਣ ਲਈ ਅਸਮਰੱਥ, ਅਢੁੱਕਵਾਂ ਅੱਖਰ-ਸੈੱਟ ਕੰਨਵਰਟਰ" + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "ਗਲਤੀ (%s) ਚਲਾਈਡ ਲਈ ਡਾਟਾ ਬਦਲਣ ਦੌਰਾਨ, ਛੱਡਿਆ ਗਿਆ।" + +#~ msgid "Error reading PTY size, using defaults: %s\n" +#~ msgstr "PTY ਅਕਾਰ ਪਡ਼੍ਹਨ ਵਿੱਚ ਗਲਤੀ, ਡਿਫਾਲਟ ਦੀ ਵਰਤੋਂ: %s\n" #~ msgid "can not run %s" #~ msgstr "%s ਚਲਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ" diff --git a/po/pl.po b/po/pl.po index 0c9bea0..37a3193 100644 --- a/po/pl.po +++ b/po/pl.po @@ -1,17 +1,17 @@ # Polish translation for vte. -# Copyright © 2003-2018 the vte authors. +# Copyright © 2003-2020 the vte authors. # This file is distributed under the same license as the vte package. # Zbigniew Chyla , 2003. # Artur Flinta , 2003-2007. -# Piotr Drąg , 2010-2018. -# Aviary.pl , 2010-2018. +# Piotr Drąg , 2010-2020. +# Aviary.pl , 2010-2020. # msgid "" msgstr "" "Project-Id-Version: vte\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-05-27 07:48+0200\n" -"PO-Revision-Date: 2018-05-27 07:49+0200\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-08-16 12:50+0200\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "Language: pl\n" @@ -21,33 +21,48 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: ../src/iso2022.cc:71 ../src/iso2022.cc:79 ../src/iso2022.cc:109 -#: ../src/vtegtk.cc:3605 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Nie można przekonwertować znaków z %s na %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3958 -#, c-format -msgid "Error reading from child: %s." -msgstr "Błąd podczas odczytywania z procesu potomnego: %s." - -#: ../src/vte.cc:4098 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "" -"Błąd (%s) podczas konwertowania danych dla procesu potomnego. Porzucanie." - -#: ../src/vte.cc:8150 +#: src/vte.cc:7763 msgid "WARNING" msgstr "OSTRZEŻENIE" -#: ../src/vte.cc:8151 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "" "Nie włączono obsługi biblioteki GnuTLS. Dane zapisywane na dysku nie będą " "zaszyfrowane." +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Ustawienie potoku na nieblokujący się nie powiodło: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "błąd odpytywania: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Działanie przekroczyło czas oczekiwania" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Działanie zostało anulowane" + +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Odczytanie z potoku potomnego (%s) się nie powiodło" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Przejście do katalogu „%s” się nie powiodło: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Wykonanie procesu potomnego „%s” się nie powiodło: " + msgid "Command completed" msgstr "Ukończono polecenie" diff --git a/po/pt.po b/po/pt.po index d54c795..df12121 100644 --- a/po/pt.po +++ b/po/pt.po @@ -3,50 +3,74 @@ # This file is distributed under the same license as the vte package. # Duarte Loreto , 2003, 2004, 2007, 2008, 2010. # Pedro Albuquerque , 2015. +# Juliano de Souza Camargo , 2020. # msgid "" msgstr "" "Project-Id-Version: 2.32\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=vte&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2016-05-16 08:25+0000\n" -"PO-Revision-Date: 2016-05-22 13:19+0100\n" -"Last-Translator: Tiago Santos \n" -"Language-Team: Português \n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-09-11 20:58-0300\n" +"Last-Translator: Juliano de Souza Camargo \n" +"Language-Team: Portuguese <>\n" "Language: pt\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" -"X-Generator: Poedit 1.5.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"X-Generator: Gtranslator 3.36.0\n" "X-Project-Style: gnome\n" -#: ../src/iso2022.cc:73 ../src/iso2022.cc:81 ../src/iso2022.cc:111 -#: ../src/vtegtk.cc:3090 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Impossível converter caracteres de %s em %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:4248 -#, c-format -msgid "Error reading from child: %s." -msgstr "Erro ao ler do filho: %s." - -#: ../src/vte.cc:4387 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Erro (%s) ao converter dados do filho, a ignorá-los." - -#: ../src/vte.cc:8156 +#: src/vte.cc:7763 msgid "WARNING" msgstr "AVISO" -#: ../src/vte.cc:8157 -msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +#: src/vte.cc:7765 +#| msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "" "GNUTLS não está ativo; os dados serão escritos no disco desencriptados!" +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Falhou em definir um encaminhamento inbloqueável: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "erro de sondagem: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "A operação expirou" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "A operação foi cancelada" + +#: src/spawn.cc:189 +#, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "Falhou ao ler do encaminhamento filho: %s." + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Falhou ao alterar o diretório “%s”: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Falhou ao correr o processo filho “%s”: " + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Impossível converter caracteres de %s em %s." + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Erro (%s) ao converter dados do filho, a ignorá-los." + #~ msgid "Copy" #~ msgstr "Copiar" diff --git a/po/pt_BR.po b/po/pt_BR.po index 7ae8a8d..005094b 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -5,49 +5,74 @@ # Leonardo Ferreira Fontenelle , 2007. # Lucas Mazzardo Veloso , 2007. # Enrico Nicoletto , 2014. -# Rafael Fontenelle , 2016. # Ricardo Silva Veloso , 2018. +# Rafael Fontenelle , 2016-2020. +# msgid "" msgstr "" "Project-Id-Version: 2.0\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-06-20 20:20+0000\n" -"PO-Revision-Date: 2018-08-11 23:58-0300\n" -"Last-Translator: Ricardo Silva Veloso \n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-08-10 08:58-0300\n" +"Last-Translator: Rafael Fontenelle \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\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" -"X-Generator: Poedit 2.1\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"X-Generator: Gtranslator 3.36.0\n" "X-Project-Style: gnome\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3966 -#, c-format -msgid "Error reading from child: %s." -msgstr "Erro ao ler do filho: %s." - -#: ../src/vte.cc:4122 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Erro (%s) ao converter dados para filho, descartando." - -#: ../src/vte.cc:8179 +#: src/vte.cc:7763 msgid "WARNING" msgstr "AVISO" -#: ../src/vte.cc:8180 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "" -"O GnuTLS não está habilitado; os dados serão escritos " -"descriptografados em um disco!" +"O GnuTLS não está habilitado; os dados serão escritos descriptografados em " +"um disco!" -#: ../src/vtegtk.cc:3618 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Não foi possível converter caracteres de %s para %s." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Falha ao definir um encadeamento não bloqueante: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "erro de poll: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "A operação esgotou tempo limite" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "A operação foi cancelada" + +#: src/spawn.cc:189 +#, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "Falha ao ler de um pipe filho (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Falha ao mudar para o diretório “%s”: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Falha ao executar o processo filho “%s”: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Erro (%s) ao converter dados para filho, descartando." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Não foi possível converter caracteres de %s para %s." #~ msgid "Copy" #~ msgstr "Copiar" diff --git a/po/ro.po b/po/ro.po index 466132d..8dcdf8f 100644 --- a/po/ro.po +++ b/po/ro.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: vte\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-05-31 09:34+0000\n" -"PO-Revision-Date: 2018-06-17 21:39+0300\n" +"POT-Creation-Date: 2020-04-27 18:50+0000\n" +"PO-Revision-Date: 2020-05-03 14:52+0300\n" "Last-Translator: Florentina Mușat \n" "Language-Team: Gnome Romanian Translation Team\n" @@ -19,37 +19,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2);;\n" -"X-Generator: Poedit 2.0.8\n" +"X-Generator: Poedit 2.3\n" "X-Launchpad-Export-Date: 2009-01-14 02:40+0000\n" "X-Project-Style: gnome\n" -#: ../src/iso2022.cc:71 ../src/iso2022.cc:79 ../src/iso2022.cc:109 -#: ../src/vtegtk.cc:3605 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Nu se pot converti caracterele din %s în %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3958 -#, c-format -msgid "Error reading from child: %s." -msgstr "Eroare la citirea datelor de la procesul copil: %s." - -#: ../src/vte.cc:4098 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "" -"Eroare (%s) în timpul convertirii datelor pentru procesul copil, se " -"abandonează acțiunea." - -#: ../src/vte.cc:8150 +#: src/vte.cc:7843 msgid "WARNING" msgstr "AVERTIZARE" -#: ../src/vte.cc:8151 +#: src/vte.cc:7845 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS nu este activat; datele vor fi scrise pe disc necriptate!" +#: src/spawn.cc:104 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Nu s-a putut stabili conexiunea neblocată: %s" + +#: src/spawn.cc:148 +#, c-format +msgid "poll error: %s" +msgstr "eroare sondaj: %s" + +#: src/spawn.cc:154 +msgid "Operation timed out" +msgstr "Operația a expirat" + +#: src/spawn.cc:164 +msgid "Operation was cancelled" +msgstr "Operația a fost anulată" + +#: src/spawn.cc:182 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Nu s-a putut citi de la conexiunea inferioară (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Nu s-a putut schimba la directorul „%s”: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Nu s-a putut executa procesul inferior „%s”: " + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Nu se pot converti caracterele din %s în %s." + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "" +#~ "Eroare (%s) în timpul convertirii datelor pentru procesul copil, se " +#~ "abandonează acțiunea." + #~ msgid "Copy" #~ msgstr "Copiază" diff --git a/po/ru.po b/po/ru.po index 011c90e..4bc6522 100644 --- a/po/ru.po +++ b/po/ru.po @@ -11,43 +11,67 @@ msgid "" msgstr "" "Project-Id-Version: ru\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-09-02 17:55+0000\n" -"PO-Revision-Date: 2018-09-10 23:12+0300\n" -"Last-Translator: Stas Solovey \n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2021-06-28 15:08+0300\n" +"Last-Translator: Alexey Rubtsov \n" "Language-Team: Русский \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.1.1\n" +"X-Generator: Poedit 3.0\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3989 -#, c-format -msgid "Error reading from child: %s." -msgstr "Произошла ошибка при чтении из потомка: %s." - -#: ../src/vte.cc:4139 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "" -"Произошла ошибка (%s) при преобразовании данных для потомка, отбрасывается." - -#: ../src/vte.cc:8131 +#: src/vte.cc:7763 msgid "WARNING" msgstr "ПРЕДУПРЕЖДЕНИЕ" -#: ../src/vte.cc:8132 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "" "GnuTLS не включён; данные будут записаны на диск в незашифрованном виде!" -#: ../src/vtegtk.cc:3664 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Не удалось преобразовать символы из набора %s в набор %s." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Не удалось установить неблокирующий канал: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "ошибка опроса: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Превышено время ожидания операции" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Операция отменена" + +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Не удалось считать из дочернего канала (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Не удалось перейти в каталог «%s»: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Не удалось выполнить дочерний процесс «%s»: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "" +#~ "Произошла ошибка (%s) при преобразовании данных для потомка, " +#~ "отбрасывается." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Не удалось преобразовать символы из набора %s в набор %s." #~ msgid "Copy" #~ msgstr "Копировать" diff --git a/po/sk.po b/po/sk.po index a5deaad..348fc22 100644 --- a/po/sk.po +++ b/po/sk.po @@ -9,30 +9,60 @@ msgid "" msgstr "" "Project-Id-Version: vte\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2019-11-17 20:59+0000\n" -"PO-Revision-Date: 2020-01-20 18:07+0100\n" +"POT-Creation-Date: 2020-09-12 19:27+0000\n" +"PO-Revision-Date: 2020-09-17 09:37+0200\n" "Last-Translator: Dušan Kazik \n" "Language-Team: Slovak \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.4\n" +"X-Generator: Poedit 2.4.1\n" -#: src/vte.cc:8012 +#: src/vte.cc:7764 msgid "WARNING" msgstr "UPOZORNENIE" -#: src/vte.cc:8013 +#: src/vte.cc:7766 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "Šifrovanie GnuTLS nie je povolené. Údaje budú zapísané na disk nešifrované!" +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Zlyhalo nastavenie neblokovaného zreťazenia: %s" + +#: src/spawn.cc:156 +#, c-format +msgid "poll error: %s" +msgstr "chyba dopytovania. %s" + +#: src/spawn.cc:163 +msgid "Operation timed out" +msgstr "Čas operácie vypršal" + +#: src/spawn.cc:173 +msgid "Operation was cancelled" +msgstr "Operácia bola zrušená" + +#: src/spawn.cc:191 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Chyba pri čítaní z dcérskeho zreťazenia (%s)" + +#: src/spawn.cc:621 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Zlyhala zmena adresára na „%s“: %s" + +#: src/spawn.cc:690 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Zlyhalo spustenie dcérskeho procesu „%s“: " + #~ msgid "Unable to convert characters from %s to %s." #~ msgstr "Nepodarilo sa previesť znaky z %s do %s." -#~ msgid "Error reading from child: %s." -#~ msgstr "Chyba pri čítaní z potomka: %s." - #~ msgid "Error (%s) converting data for child, dropping." #~ msgstr "Chyba (%s) pri prevode dát pre potomka, ukončuje sa." diff --git a/po/sl.po b/po/sl.po index c37506d..d98979e 100644 --- a/po/sl.po +++ b/po/sl.po @@ -3,15 +3,14 @@ # This file is distributed under the same license as the program package. # # Andraž Tori 2002. -# Matej Urbančič , + 2006–2018. +# Matej Urbančič , + 2006–2020. # msgid "" msgstr "" "Project-Id-Version: vte\n" -"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" -"product=vte&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2018-05-28 09:47+0000\n" -"PO-Revision-Date: 2018-05-30 20:49+0200\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-06-20 22:27+0000\n" +"PO-Revision-Date: 2020-06-22 21:55+0200\n" "Last-Translator: Matej Urbančič \n" "Language-Team: Slovenian GNOME Translation Team \n" "Language: sl_SI\n" @@ -21,34 +20,57 @@ msgstr "" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" "%100==4 ? 3 : 0);\n" "X-Poedit-SourceCharset: utf-8\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Poedit 2.3\n" -#: ../src/iso2022.cc:71 ../src/iso2022.cc:79 ../src/iso2022.cc:109 -#: ../src/vtegtk.cc:3605 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Ni mogoče pretvoriti znakov iz %s v %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3958 -#, c-format -msgid "Error reading from child: %s." -msgstr "Napaka med branjem podrejenega predmeta: %s." - -#: ../src/vte.cc:4098 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "" -"Napaka (%s) pretvarjanja podatkov za podrejeni predmet; izvajanjeukaza je " -"preklicano." - -#: ../src/vte.cc:8150 +#: src/vte.cc:7761 msgid "WARNING" msgstr "OPOZORILO" -#: ../src/vte.cc:8151 +#: src/vte.cc:7763 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" -msgstr "Paket GNUTLS ni omogočen; podatki bodo na disk zapisani na nešifriran način!" +msgstr "" +"Paket GnuTLS ni omogočen; podatki bodo na disk zapisani na nešifriran način!" + +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Ni mogoče nastaviti cevi: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "napaka preverjanja: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Opravilo je časovno poteklo" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Opravilo je preklicano" + +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Napaka med branjem podrejenega vodila (%s)." + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Spreminjanje mape je spodletelo »%s«: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Izvajanje podrejenega opravila je spodletelo »%s«: " + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Ni mogoče pretvoriti znakov iz %s v %s." + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "" +#~ "Napaka (%s) pretvarjanja podatkov za podrejeni predmet; izvajanjeukaza je " +#~ "preklicano." #~ msgid "Copy" #~ msgstr "Kopiraj" @@ -84,7 +106,10 @@ msgstr "Paket GNUTLS ni omogočen; podatki bodo na disk zapisani na nešifriran #~ msgstr "Ni mogoče razčleniti geometrije določene z oznako --geometry" #~ msgid "Unable to send data to child, invalid charset convertor" -#~ msgstr "Ni mogoče poslati podatkov podrejenemu opravilu; neveljaven pretvornik znakovnega nabora" +#~ msgstr "" +#~ "Ni mogoče poslati podatkov podrejenemu opravilu; neveljaven pretvornik " +#~ "znakovnega nabora" #~ msgid "Error reading PTY size, using defaults: %s\n" -#~ msgstr "Napaka med branjem velikosti PTY, uporabljena bo privzeta vrednost: %s\n" +#~ msgstr "" +#~ "Napaka med branjem velikosti PTY, uporabljena bo privzeta vrednost: %s\n" diff --git a/po/sr.po b/po/sr.po index d43cc9c..b87aac2 100644 --- a/po/sr.po +++ b/po/sr.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: vte\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-10-15 14:29+0000\n" -"PO-Revision-Date: 2019-02-28 21:30+0100\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-08-31 16:37+0200\n" "Last-Translator: Марко М. Костић \n" "Language-Team: српски \n" "Language: sr\n" @@ -19,31 +19,54 @@ msgstr "" "Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n" "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Project-Style: gnome\n" -"X-Generator: Poedit 2.2\n" +"X-Generator: Poedit 2.4.1\n" -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3826 -#, c-format -msgid "Error reading from child: %s." -msgstr "Грешка при читању потпроцеса: %s." - -#: ../src/vte.cc:3976 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Грешка (%s) при промени података за потпроцес — обустављам." - -#: ../src/vte.cc:7822 +#: src/vte.cc:7763 msgid "WARNING" msgstr "УПОЗОРЕЊЕ" -#: ../src/vte.cc:7823 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "Гну-ТЛС није омогућен, подаци ће бити записани на диск нешифровани!" -#: ../src/vtegtk.cc:3655 +#: src/spawn.cc:111 #, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Не могу да пребацим знакове из „%s“ у „%s“." +msgid "Failed to set pipe nonblocking: %s" +msgstr "Нисам успео да подесим цевку (пајп) у режим неблокирања: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "грешка праћења промене: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Радња је истекла" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Радња је отказана" + +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Грешка при читању дете-цевке (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Нисам успео да се пребацим у директоријум „%s“: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Нисам успео да извршим дете процес „%s“: " + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Грешка (%s) при промени података за потпроцес — обустављам." + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Не могу да пребацим знакове из „%s“ у „%s“." #~ msgid "Copy" #~ msgstr "Умножи" diff --git a/po/sv.po b/po/sv.po index 26c5a16..2ddb798 100644 --- a/po/sv.po +++ b/po/sv.po @@ -1,49 +1,70 @@ # Swedish messages for vte. -# Copyright © 2002, 2003, 2006, 2007, 2010, 2016, 2018 Free Software Foundation, Inc. +# Copyright © 2002, 2003, 2006, 2007, 2010, 2016, 2018, 2020 Free Software Foundation, Inc. # Christian Rose , 2002, 2003. # Daniel Nylander , 2006, 2007, 2010. -# Anders Jonsson , 2016, 2018. +# Anders Jonsson , 2016, 2018, 2020. # msgid "" msgstr "" "Project-Id-Version: vte\n" -"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" -"product=vte&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2018-05-21 18:38+0000\n" -"PO-Revision-Date: 2018-05-23 22:35+0200\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-08-24 18:25+0200\n" "Last-Translator: Anders Jonsson \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.7\n" +"X-Generator: Poedit 2.4.1\n" -#: ../src/iso2022.cc:71 ../src/iso2022.cc:79 ../src/iso2022.cc:109 -#: ../src/vtegtk.cc:3605 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Kan inte konvertera tecken från %s till %s." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3958 -#, c-format -msgid "Error reading from child: %s." -msgstr "Fel vid läsning från barn: %s." - -#: ../src/vte.cc:4098 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Fel (%s) vid konvertering av data för barn, kastar." - -#: ../src/vte.cc:8150 +#: src/vte.cc:7763 msgid "WARNING" msgstr "VARNING" -#: ../src/vte.cc:8151 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS inte aktiverat; data kommer skrivas till disk okrypterade!" +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Misslyckades med att göra rör icke-blockerande: %s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "poll-fel: %s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "Åtgärdens tidsgräns överskreds" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "Åtgärden avbröts" + +#: src/spawn.cc:189 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Misslyckades med att läsa från underordnat rör (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Misslyckades med att byta till katalogen ”%s”: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Misslyckades med att köra underordnad process ”%s”: " + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "Kan inte konvertera tecken från %s till %s." + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "Fel (%s) vid konvertering av data för barn, kastar." + #~ msgid "Copy" #~ msgstr "Kopiera" @@ -135,27 +156,19 @@ msgstr "GnuTLS inte aktiverat; data kommer skrivas till disk okrypterade!" #~ msgstr "Vet inte hur man konverterar till/från gunichar-data!" #~ msgid "Using fontset \"%s\", which is missing these character sets: %s." -#~ msgstr "" -#~ "Använder typsnittssamlingen \"%s\", som saknar dessa teckensamlingar: %s." +#~ msgstr "Använder typsnittssamlingen \"%s\", som saknar dessa teckensamlingar: %s." -#~ 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." +#~ 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." #~ msgid "Failed to load default Xft font." #~ msgstr "Misslyckades med att läsa in Xft-standardtypsnittet." #~ msgid "Failed to load font set \"%s\", falling back to default font." -#~ msgstr "" -#~ "Misslyckades med att läsa in typsnittssamlingen \"%s\", använder " -#~ "standardtypsnittet." +#~ msgstr "Misslyckades med att läsa in typsnittssamlingen \"%s\", använder standardtypsnittet." #~ msgid "Failed to load default font, crashing or behaving abnormally." -#~ msgstr "" -#~ "Misslyckades med att läsa in standardtypsnittet, kraschar eller beter mig " -#~ "onormalt." +#~ msgstr "Misslyckades med att läsa in standardtypsnittet, kraschar eller beter mig onormalt." #~ msgid "Error allocating draw, disabling Xft." #~ msgstr "Fel vid allokering av ritbar yta, deaktiverar Xft." diff --git a/po/tr.po b/po/tr.po index ad1312e..ec10535 100644 --- a/po/tr.po +++ b/po/tr.po @@ -1,6 +1,5 @@ -# translation of vte.HEAD.tr.po to Turkish # Turkish translation of vte. -# Copyright (C) 2003 vte's COPYRIGHT HOLDER +# Copyright (C) 2003-2022 vte's COPYRIGHT HOLDER # This file is distributed under the same license as the vte package. # # Görkem Çetin , 2003. @@ -9,111 +8,60 @@ # Volkan Yalçın , 2011. # Yaşar Şentürk , 2014. # Muhammet Kara , 2016. -# Emin Tufan Çetin , 2018. +# Emin Tufan Çetin , 2018, 2020. # msgid "" msgstr "" -"Project-Id-Version: vte.HEAD.tr\n" +"Project-Id-Version: vte master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-05-31 09:34+0000\n" -"PO-Revision-Date: 2018-06-14 12:27+0300\n" -"Last-Translator: Emin Tufan Çetin \n" +"POT-Creation-Date: 2023-02-03 20:46+0000\n" +"PO-Revision-Date: 2023-02-20 22:23+0300\n" +"Last-Translator: Sabri Ünal \n" "Language-Team: Türkçe \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Gtranslator 2.91.7\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 3.1.1\n" -#: ../src/iso2022.cc:71 ../src/iso2022.cc:79 ../src/iso2022.cc:109 -#: ../src/vtegtk.cc:3605 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "Karakterler %sʼden %sʼe dönüştürülemiyor." - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3958 -#, c-format -msgid "Error reading from child: %s." -msgstr "Çocuk süreçten okunurken hata: %s." - -#: ../src/vte.cc:4098 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "Çocuk süreç için veriyi çevirirken hata (%s), bırakılıyor." - -#: ../src/vte.cc:8150 +#: src/vte.cc:7728 msgid "WARNING" msgstr "UYARI" -#: ../src/vte.cc:8151 -#| msgid "GNUTLS not enabled; data will be written to disk unencrypted!" +#: src/vte.cc:7730 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS etkin değil; veriler diske şifrelenmemiş olarak yazılacak!" -#~ msgid "Copy" -#~ msgstr "Kopyala" +#: src/spawn.cc:124 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Boru nonblocking ayarlanamadı. %s" -#~ msgid "Paste" -#~ msgstr "Yapıştır" +#: src/spawn.cc:169 +#, c-format +msgid "poll error: %s" +msgstr "poll hatası: %s" -#~ msgid "Reset (use Ctrl to reset and clear)" -#~ msgstr "Sıfırla (Sıfırlamak ve temizlemek için Ctrl'yi kullanın)" +#: src/spawn.cc:176 +msgid "Operation timed out" +msgstr "İşlem zaman aşımına uğradı" -#~ msgid "Reset" -#~ msgstr "Sıfırla" +#: src/spawn.cc:186 +msgid "Operation was cancelled" +msgstr "İşlem iptal edildi" -#~ msgid "Toggle input enabled setting" -#~ msgstr "Girişi aç/kapa" +#: src/spawn.cc:204 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Çocuk borudan (%s) okunamadı" -#~ msgid "Input" -#~ msgstr "Giriş" +#: src/spawn.cc:639 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "“%s” dizinine değiştirilemedi: %s" -#~ msgid "Could not open console.\n" -#~ msgstr "Konsol açılamadı.\n" - -#~ msgid "Could not parse the geometry spec passed to --geometry" -#~ msgstr "--geometry'de belirtilen geometri belirtimi ayrıştırılamadı" - -#~ msgid "Unable to send data to child, invalid charset convertor" -#~ msgstr "Alt sürece veri gönderilemedi, geçersiz karakter kümesi çevirici" - -#~ msgid "Error reading PTY size, using defaults: %s\n" -#~ msgstr "PTY boyutu okunurken hata, öntanımlı değerler kullanılıyor: %s\n" - -#~ msgid "Attempt to set invalid NRC map '%c'." -#~ msgstr "Geçersiz NRC haritası '%c' ayarlanmaya çalışıldı." - -#~ msgid "Unrecognized identified coding system." -#~ msgstr "Anımsanmayan tanımlanmış kodlama sistemi." - -#~ msgid "Attempt to set invalid wide NRC map '%c'." -#~ msgstr "Geçersiz geniş NRC haritası '%c' ayarlanmaya çalışıldı." - -#~ msgid "Duplicate (%s/%s)!" -#~ msgstr "Çift (%s/%s)!" - -#~ msgid "Error compiling regular expression \"%s\"." -#~ msgstr "Düzenli ifade derlenirken hata: \"%s\"." - -#~ msgid "_vte_conv_open() failed setting word characters" -#~ msgstr "_vte_iconv_open() kelime karakterlerini ayarlarken başarısız oldu" - -#~ msgid "can not run %s" -#~ msgstr "%s çalıştırılamadı" - -#~ msgid "Error creating signal pipe." -#~ msgstr "Sinyal borusu oluştururken hata." - -#~ msgid "No handler for control sequence `%s' defined." -#~ msgstr "`%s' kontrol serisi için işlemci tanımlanmamış." - -#~ msgid "Error setting PTY size: %s." -#~ msgstr "PTY boyutu ayarlanırken hata: %s." - -#~ msgid "Got unexpected (key?) sequence `%s'." -#~ msgstr "Beklenmeyen (tuş?) serisi `%s' alındı." - -#~ msgid "Unknown pixel mode %d.\n" -#~ msgstr "Bilinmeyen benek kipi %d.\n" +#: src/spawn.cc:708 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "“%s” çocuk süreci çalıştırılamadı: " diff --git a/po/uk.po b/po/uk.po index 5f17d04..b4b3680 100644 --- a/po/uk.po +++ b/po/uk.po @@ -9,22 +9,55 @@ msgid "" msgstr "" "Project-Id-Version: vte\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2020-02-29 20:14+0000\n" -"PO-Revision-Date: 2020-03-02 18:31+0200\n" +"POT-Creation-Date: 2020-04-27 18:50+0000\n" +"PO-Revision-Date: 2020-04-27 23:42+0300\n" "Last-Translator: Yuri Chornoivan \n" -"Language-Team: Ukrainian \n" +"Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<" "=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Lokalize 20.03.70\n" +"X-Generator: Lokalize 20.07.70\n" -#: src/vte.cc:7837 +#: src/vte.cc:7843 msgid "WARNING" msgstr "ПОПЕРЕДЖЕННЯ" -#: src/vte.cc:7839 +#: src/vte.cc:7845 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS не увімкнено; дані буде записано на диск без шифрування!" + +#: src/spawn.cc:104 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "Не вдалося зробити так, щоб канал не блокувався: %s" + +#: src/spawn.cc:148 +#, c-format +msgid "poll error: %s" +msgstr "помилка опитування: %s" + +#: src/spawn.cc:154 +msgid "Operation timed out" +msgstr "Перевищено час очікування на виконання дії" + +#: src/spawn.cc:164 +msgid "Operation was cancelled" +msgstr "Дію скасовано" + +#: src/spawn.cc:182 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "Не вдалося прочитати дані з дочірнього каналу (%s)" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "Не вдалося змінити каталог на «%s»: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "Не вдалося виконати дочірній процес «%s»: " diff --git a/po/zh_CN.po b/po/zh_CN.po index 8ab706a..ba7aa51 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -6,47 +6,71 @@ # Yang Zhang , 2007. # Aron Xu , 2010. # Mingcong Bai , 2018. +# 王滋涵 Zephyr Wang , 2020. # msgid "" msgstr "" "Project-Id-Version: vte master\n" -"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" -"product=vte&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2018-05-21 18:38+0000\n" -"PO-Revision-Date: 2018-05-23 22:25+0800\n" -"Last-Translator: Mingcong Bai \n" -"Language-Team: Chinese (simplified) \n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" +"POT-Creation-Date: 2020-05-27 19:17+0000\n" +"PO-Revision-Date: 2020-06-15 16:23+0800\n" +"Last-Translator: 王滋涵 Zephyr Wang \n" +"Language-Team: Chinese - China \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Gtranslator 3.36.0\n" +"Plural-Forms: nplurals=1; plural=0\n" -#: ../src/iso2022.cc:71 ../src/iso2022.cc:79 ../src/iso2022.cc:109 -#: ../src/vtegtk.cc:3605 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "无法将字符从 %s 转换至 %s。" - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3958 -#, c-format -msgid "Error reading from child: %s." -msgstr "从子程序读取数据时出错:%s" - -#: ../src/vte.cc:4098 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "从子程序转换数据时出错 (%s),放弃。" - -#: ../src/vte.cc:8150 +#: src/vte.cc:7763 msgid "WARNING" msgstr "警告" -#: ../src/vte.cc:8151 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS 未启用;写入磁盘的数据没有加密!" +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "无法设置管道非阻塞:%s" + +#: src/spawn.cc:155 +#, c-format +msgid "poll error: %s" +msgstr "轮询错误:%s" + +#: src/spawn.cc:161 +msgid "Operation timed out" +msgstr "操作超时" + +#: src/spawn.cc:171 +msgid "Operation was cancelled" +msgstr "操作已取消" + +#: src/spawn.cc:189 +#, c-format +#| msgid "Error reading from child: %s." +msgid "Failed to read from child pipe (%s)" +msgstr "无法从子管道(%s)读取" + +#: src/spawn.cc:576 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "无法更改到目录“%s”: %s" + +#: src/spawn.cc:645 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "无法执行子进程“%s”:" + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "无法将字符从 %s 转换至 %s。" + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "从子程序转换数据时出错 (%s),放弃。" + #~ msgid "Copy" #~ msgstr "复制" diff --git a/po/zh_TW.po b/po/zh_TW.po index ee3d75f..18325e5 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -7,41 +7,63 @@ msgid "" msgstr "" "Project-Id-Version: vte 0.25.90\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2018-05-31 09:34+0000\n" -"PO-Revision-Date: 2018-06-09 11:43+0800\n" -"Last-Translator: Chao-Hsiung Liao \n" +"POT-Creation-Date: 2020-09-12 19:27+0000\n" +"PO-Revision-Date: 2020-09-22 23:12+0800\n" +"Last-Translator: Cheng-Chia Tseng \n" "Language-Team: Chinese (Taiwan) \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.8\n" +"X-Generator: Poedit 2.4.1\n" -#: ../src/iso2022.cc:71 ../src/iso2022.cc:79 ../src/iso2022.cc:109 -#: ../src/vtegtk.cc:3605 -#, c-format -msgid "Unable to convert characters from %s to %s." -msgstr "無法將字元從 %s 轉換至 %s。" - -#. Translators: %s is replaced with error message returned by strerror(). -#: ../src/vte.cc:3958 -#, c-format -msgid "Error reading from child: %s." -msgstr "從副進程讀取資料時出現錯誤:%s" - -#: ../src/vte.cc:4098 -#, c-format -msgid "Error (%s) converting data for child, dropping." -msgstr "從副進程轉換資料時出現錯誤 (%s),放棄。" - -#: ../src/vte.cc:8150 +#: src/vte.cc:7764 msgid "WARNING" msgstr "警告" -#: ../src/vte.cc:8151 +#: src/vte.cc:7766 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS 未啟用;資料將以未加密的方式寫入到磁碟 !" +#: src/spawn.cc:111 +#, c-format +msgid "Failed to set pipe nonblocking: %s" +msgstr "無法設定導管不鎖定:%s" + +#: src/spawn.cc:156 +#, c-format +msgid "poll error: %s" +msgstr "測調錯誤:%s" + +#: src/spawn.cc:163 +msgid "Operation timed out" +msgstr "操作逾時" + +#: src/spawn.cc:173 +msgid "Operation was cancelled" +msgstr "操作已取消" + +#: src/spawn.cc:191 +#, c-format +msgid "Failed to read from child pipe (%s)" +msgstr "無法從子導管 (%s) 讀取" + +#: src/spawn.cc:621 +#, c-format +msgid "Failed to change to directory “%s”: %s" +msgstr "無法變更至「%s」目錄:%s" + +#: src/spawn.cc:690 +#, c-format +msgid "Failed to execute child process “%s”: " +msgstr "無法執行「%s」子程序:" + +#~ msgid "Unable to convert characters from %s to %s." +#~ msgstr "無法將字元從 %s 轉換至 %s。" + +#~ msgid "Error (%s) converting data for child, dropping." +#~ msgstr "從副進程轉換資料時出現錯誤 (%s),放棄。" + #~ msgid "Copy" #~ msgstr "複製" diff --git a/src/app/app.gresource.xml b/src/app/app-gtk3.gresource.xml similarity index 61% rename from src/app/app.gresource.xml rename to src/app/app-gtk3.gresource.xml index 4b69e56..071007a 100644 --- a/src/app/app.gresource.xml +++ b/src/app/app-gtk3.gresource.xml @@ -2,23 +2,23 @@ - search-popover.ui - window.ui - appmenu.ui + search-popover-gtk3.ui + window-gtk3.ui + appmenu-gtk3.ui diff --git a/src/app/app-gtk4.gresource.xml b/src/app/app-gtk4.gresource.xml new file mode 100644 index 0000000..6c76b21 --- /dev/null +++ b/src/app/app-gtk4.gresource.xml @@ -0,0 +1,24 @@ + + + + + search-popover-gtk4.ui + window-gtk4.ui + appmenu-gtk4.ui + + diff --git a/src/app/app.cc b/src/app/app.cc index 0c7eed5..e4e7b97 100644 --- a/src/app/app.cc +++ b/src/app/app.cc @@ -13,7 +13,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ #include "config.h" @@ -23,50 +23,86 @@ #include #include #include +#include #include #include #include +#include #include #include #include #include -#include "vtepcre2.h" -#include "glib-glue.hh" #include +#include +#include + +#include "std-glue.hh" +#include "cairo-glue.hh" +#include "glib-glue.hh" +#include "gtk-glue.hh" +#include "libc-glue.hh" +#include "pango-glue.hh" +#include "pcre2-glue.hh" +#include "refptr.hh" +#include "vte-glue.hh" /* options */ +static void G_GNUC_PRINTF(2, 3) +verbose_fprintf(FILE* fp, + char const* format, + ...); + +#define verbose_print(...) verbose_fprintf(stdout, __VA_ARGS__) +#define verbose_printerr(...) verbose_fprintf(stderr, __VA_ARGS__) + +#define CONFIG_GROUP "VteApp Configuration" + class Options { public: gboolean allow_window_ops{false}; gboolean audible_bell{false}; gboolean backdrop{false}; + gboolean bidi{true}; gboolean bold_is_bright{false}; + gboolean bold{true}; + gboolean builtin_dingus{true}; gboolean console{false}; + gboolean context_menu{true}; gboolean debug{false}; + gboolean decorations{true}; + gboolean fallback_scrolling{true}; + gboolean feed_stdin{false}; + gboolean geometry_hints{true}; + gboolean hyperlink{true}; gboolean icon_title{false}; gboolean keep{false}; - gboolean no_argb_visual{false}; - gboolean no_bidi{false}; - gboolean no_bold{false}; - gboolean no_builtin_dingus{false}; - gboolean no_context_menu{false}; - gboolean no_double_buffer{false}; - gboolean no_geometry_hints{false}; - gboolean no_hyperlink{false}; - gboolean no_rewrap{false}; - gboolean no_scrollbar{false}; - gboolean no_shaping{false}; - gboolean no_shell{false}; - gboolean no_systemd_scope{false}; + gboolean kinetic_scrolling{true}; gboolean object_notifications{false}; + gboolean overlay_scrollbar{false}; + gboolean pty{true}; gboolean require_systemd_scope{false}; gboolean reverse{false}; + gboolean rewrap{true}; + gboolean scroll_on_insert{false}; + gboolean scroll_on_keystroke{true}; + gboolean scroll_on_output{false}; + gboolean scroll_unit_is_pixels{false}; + gboolean scrollbar{true}; + gboolean shaping{true}; + gboolean shell{true}; + gboolean sixel{true}; + gboolean systemd_scope{true}; gboolean test_mode{false}; + gboolean track_clipboard_targets{false}; + gboolean use_scrolled_window{false}; + gboolean use_theme_colors{false}; gboolean version{false}; gboolean whole_window_transparent{false}; + gboolean xfill{true}; + gboolean yfill{true}; bool bg_color_set{false}; bool fg_color_set{false}; bool cursor_bg_color_set{false}; @@ -79,6 +115,7 @@ public: char* font_string{nullptr}; char* geometry{nullptr}; char* output_filename{nullptr}; + char* title{nullptr}; char* word_char_exceptions{nullptr}; char* working_directory{nullptr}; char** dingus{nullptr}; @@ -101,6 +138,14 @@ public: VteCursorBlinkMode cursor_blink_mode{VTE_CURSOR_BLINK_SYSTEM}; VteCursorShape cursor_shape{VTE_CURSOR_SHAPE_BLOCK}; VteTextBlinkMode text_blink_mode{VTE_TEXT_BLINK_ALWAYS}; + VteAlign xalign{VteAlign(-1)}; + VteAlign yalign{VteAlign(-1)}; + vte::glib::RefPtr css{}; + +#if VTE_GTK == 3 + gboolean argb_visual{true}; + gboolean double_buffer{true}; +#endif /* VTE_GTK == 3 */ ~Options() { g_clear_object(&background_pixbuf); @@ -116,8 +161,106 @@ public: g_strfreev(environment); } + auto fds() + { + auto fds = std::vector{}; + fds.reserve(m_fds.size()); + for (auto& fd : m_fds) + fds.emplace_back(fd.get()); + + return fds; + } + + auto map_fds() + { + return m_map_fds; + } + + auto environment_for_spawn() const noexcept + { + auto envv = g_get_environ(); + + // Merge in extra variables + if (environment) { + for (auto i = 0; environment[i]; ++i) { + auto const eq = strchr(environment[i], '='); + if (eq) { + auto const var = vte::glib::take_string(g_strndup(environment[i], eq - environment[i])); + envv = g_environ_setenv(envv, var.get(), eq + 1, true); + } else { + envv = g_environ_unsetenv(envv, environment[i]); + } + } + } + + // Cleanup environment + // List of variables and prefixes copied from gnome-terminal. + for (auto const& var : {"COLORTERM", + "COLUMNS", + "DESKTOP_STARTUP_ID", + "EXIT_CODE", + "EXIT_STATUS", + "GIO_LAUNCHED_DESKTOP_FILE", + "GIO_LAUNCHED_DESKTOP_FILE_PID", + "GJS_DEBUG_OUTPUT", + "GJS_DEBUG_TOPICS", + "GNOME_DESKTOP_ICON", + "INVOCATION_ID", + "JOURNAL_STREAM", + "LINES", + "LISTEN_FDNAMES", + "LISTEN_FDS", + "LISTEN_PID", + "MAINPID", + "MANAGERPID", + "NOTIFY_SOCKET", + "NOTIFY_SOCKET", + "PIDFILE", + "PWD", + "REMOTE_ADDR", + "REMOTE_PORT", + "SERVICE_RESULT", + "SHLVL", + "TERM", + "VTE_VERSION", + "WATCHDOG_PID", + "WATCHDOG_USEC", + "WINDOWID"}) { + envv = g_environ_unsetenv(envv, var); + } + + for (auto const& prefix : {"GNOME_TERMINAL_", + + // other terminals + "FOOT_", + "ITERM2_", + "MC_", + "MINTTY_", + "PUTTY_", + "RXVT_", + "TERM_", + "URXVT_", + "WEZTERM_", + "XTERM_"}) { + for (auto i = 0; envv[i]; ++i) { + if (!g_str_has_prefix (envv[i], prefix)) + continue; + + auto const eq = strchr(envv[i], '='); + g_assert(eq); + auto const var = vte::glib::take_string(g_strndup(envv[i], eq - envv[i])); + envv = g_environ_unsetenv(envv, var.get()); + } + } + + return vte::glib::take_strv(envv); + } + private: + std::vector m_fds{}; + std::vector m_map_fds{}; + bool parse_enum(GType type, char const* str, int& value, @@ -167,12 +310,101 @@ private: if (!gdk_rgba_parse(&color, str)) { g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Failed to parse \"%s\" as color", str); - *value_set = false; + if (value_set) + *value_set = false; return false; } *value = color; - *value_set = true; + if (value_set) + *value_set = true; + return true; + } + + int parse_fd_arg(char const* arg, + char** end_ptr, + GError** error) + { + errno = 0; + char* end = nullptr; + auto const v = g_ascii_strtoll(arg, &end, 10); + if (errno || end == arg || v < G_MININT || v > G_MAXINT) { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed to parse \"%s\" as file descriptor number", arg); + return -1; + } + if (v == -1) { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "\"%s\" is not a valid file descriptor number", arg); + return -1; + } + + if (end_ptr) { + *end_ptr = end; + } else if (*end) { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Extra characters after number in \"%s\"", arg); + return -1; + } + + return int(v); + } + + bool parse_fd_arg(char const* str, + GError** error) + { + char *end = nullptr; + auto fd = parse_fd_arg(str, &end, error); + if (fd == -1) + return FALSE; + + auto map_to = int{}; + if (*end == '=' || *end == ':') { + map_to = parse_fd_arg(end + 1, nullptr, error); + if (map_to == -1) + return false; + + if (map_to == STDIN_FILENO || + map_to == STDOUT_FILENO || + map_to == STDERR_FILENO) { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Cannot map file descriptor to %d (reserved)", map_to); + return false; + } + } else if (*end) { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed to parse \"%s\" as file descriptor assignment", str); + return false; + } else { + map_to = fd; + } + + /* N:M assigns, N=M assigns a dup of N. Always dup stdin/out/err since + * we need to output messages ourself there, too. + */ + auto new_fd = int{}; + if (*end == '=' || fd < 3) { + new_fd = vte::libc::fd_dup_cloexec(fd, 3); + if (new_fd == -1) { + auto errsv = vte::libc::ErrnoSaver{}; + g_set_error (error, G_IO_ERROR, g_io_error_from_errno(errsv), + "Failed to duplicate file descriptor %d: %s", + fd, g_strerror(errsv)); + return false; + } + } else { + new_fd = fd; + if (vte::libc::fd_set_cloexec(fd) == -1) { + auto errsv = vte::libc::ErrnoSaver{}; + g_set_error (error, G_IO_ERROR, g_io_error_from_errno(errsv), + "Failed to set cloexec on file descriptor %d: %s", + fd, g_strerror(errsv)); + return false; + } + } + + m_fds.emplace_back(new_fd); + m_map_fds.emplace_back(map_to); return true; } @@ -184,12 +416,59 @@ private: return true; } +#if VTE_GTK == 4 + static void + parse_css_error_cb(GtkCssProvider* provider, + void* section, + GError* error, + GError** ret_error) noexcept + { + if (error) + *ret_error = g_error_copy(error); + } +#endif /* VTE_GTK == 4 */ + + bool + parse_css(char const* value, + GError** error) + { + auto provider = vte::glib::take_ref(gtk_css_provider_new()); +#if VTE_GTK == 3 + if (!gtk_css_provider_load_from_path(provider.get(), value, error)) + return false; + + g_object_set_data_full(G_OBJECT(provider.get()), "VTEAPP_PATH", + g_strdup(value), GDestroyNotify(g_free)); + +#elif VTE_GTK == 4 + GError* err = nullptr; + auto const id = g_signal_connect(provider.get(), "parsing-error", + G_CALLBACK(parse_css_error_cb), &err); + + gtk_css_provider_load_from_path(provider.get(), value); + g_signal_handler_disconnect(provider.get(), id); + if (err) { + g_propagate_prefixed_error(error, err, + "Error parsing CSS file \"%s\": ", + value); + return false; + } +#endif /* VTE_GTK */ + + css = std::move(provider); + return true; + } + static gboolean parse_background_image(char const* option, char const* value, void* data, GError** error) { Options* that = static_cast(data); g_clear_object(&that->background_pixbuf); that->background_pixbuf = gdk_pixbuf_new_from_file(value, error); + if (that->background_pixbuf) + g_object_set_data_full(G_OBJECT(that->background_pixbuf), "VTEAPP_PATH", + g_strdup(value), GDestroyNotify(g_free)); + return that->background_pixbuf != nullptr; } @@ -241,6 +520,20 @@ private: return that->parse_color(value, &that->bg_color, &set, error); } + static gboolean + parse_css_file(char const* option, char const* value, void* data, GError** error) + { + Options* that = static_cast(data); + return that->parse_css(value, error); + } + + static gboolean + parse_fd(char const* option, char const* value, void* data, GError** error) + { + Options* that = static_cast(data); + return that->parse_fd_arg(value, error); + } + static gboolean parse_fg_color(char const* option, char const* value, void* data, GError** error) { @@ -296,6 +589,451 @@ private: return true; } + static gboolean + parse_xalign(char const* option, char const* value, void* data, GError** error) + { + auto const that = static_cast(data); + auto v = int{}; + auto const rv = that->parse_enum(VTE_TYPE_ALIGN, value, v, error); + if (rv) + that->xalign = VteAlign(v); + return rv; + } + + static gboolean + parse_yalign(char const* option, char const* value, void* data, GError** error) + { + auto const that = static_cast(data); + auto v = int{}; + auto const rv = that->parse_enum(VTE_TYPE_ALIGN, value, v, error); + if (rv) + that->yalign = VteAlign(v); + return rv; + } + + char const* + default_config_path() { + auto const dh = g_get_user_config_dir(); + auto ini_path = vte::glib::take_string(g_build_filename(dh, "vteapp.ini", nullptr)); + return g_intern_string(ini_path.get()); + } + + bool + load_config(GKeyFile* keyfile, + char const* path, + GError** error) + { + if (!g_key_file_load_from_file(keyfile, + path ? path : default_config_path(), + GKeyFileFlags(G_KEY_FILE_KEEP_COMMENTS | + G_KEY_FILE_KEEP_TRANSLATIONS), + error)) + return false; + + // Load the config from the keyfile. Don't error out on invalid + // data, just ignore it. + + auto load_bool_option = [&](char const* key, + gboolean* ptr) noexcept -> void + { + auto err = vte::glib::Error{}; + auto const v = g_key_file_get_boolean(keyfile, CONFIG_GROUP, key, err); + if (!err.error()) + *ptr = v != false; + }; + + load_bool_option("AllowWindowOps", &allow_window_ops); + load_bool_option("AudibleBell", &audible_bell); + load_bool_option("Backdrop", &backdrop); + load_bool_option("BboldIsBright", &bold_is_bright); + load_bool_option("BiDi", &bidi); + load_bool_option("Bold", &bold); + load_bool_option("BuiltinDingus", &builtin_dingus); + load_bool_option("ContextMenu", &context_menu); + load_bool_option("Debug", &debug); + load_bool_option("Decorations", &decorations); + load_bool_option("FallbackScrolling", &fallback_scrolling); + load_bool_option("GeometryHints", &geometry_hints); + load_bool_option("Hyperlink", &hyperlink); + load_bool_option("Keep", &keep); + load_bool_option("KineticScrolling", &kinetic_scrolling); + load_bool_option("ObjectNotifications", &object_notifications); + load_bool_option("OverlayScrollbar", &overlay_scrollbar); + load_bool_option("Pty", &pty); + load_bool_option("RequireSystemdScope", &require_systemd_scope); + load_bool_option("Reverse", &reverse); + load_bool_option("Rewrap", &rewrap); + load_bool_option("ScrollUnitIsPixels", &scroll_unit_is_pixels); + load_bool_option("Scrollbar", &scrollbar); + load_bool_option("ScrolledWindow", &use_scrolled_window); + load_bool_option("Shaping", &shaping); + load_bool_option("Shell", &shell); + load_bool_option("Sixel", &sixel); + load_bool_option("SystemdScope", &systemd_scope); + load_bool_option("TestMode", &test_mode); + load_bool_option("TrackClipboardTargets", &track_clipboard_targets); + load_bool_option("UseThemeColors", &use_theme_colors); + load_bool_option("WholeWindowTransparent", &whole_window_transparent); + load_bool_option("XFill", &xfill); + load_bool_option("YFill", &yfill); +#if VTE_GTK == 3 + load_bool_option("ArgbVisual", &argb_visual); + load_bool_option("DoubleBuffer", &double_buffer); +#endif /* VTE_GTK == 3 */ + + auto load_color_option = [&](char const* key, + GdkRGBA* ptr, + bool* setptr) noexcept -> void + { + auto str = vte::glib::take_string + (g_key_file_get_string(keyfile, CONFIG_GROUP, key, nullptr)); + if (!str) + return; + + parse_color(str.get(), ptr, setptr, nullptr); + }; + + load_color_option("BackgroundColor", &bg_color, &bg_color_set); + load_color_option("CursorBackgroundColor", &cursor_bg_color, &cursor_bg_color_set); + load_color_option("CursorForegroundColor", &cursor_fg_color, &cursor_fg_color_set); + load_color_option("ForegroundColor", &fg_color, &fg_color_set); + load_color_option("HighlightBackgroundColor", &hl_bg_color, &hl_bg_color_set); + load_color_option("HighlightForegroundColor", &hl_fg_color, &hl_fg_color_set); + + auto load_double_option = [&](char const* key, + double* ptr) noexcept -> void + { + auto err = vte::glib::Error{}; + auto const v = g_key_file_get_double(keyfile, CONFIG_GROUP, key, err); + if (!err.error() && + std::isfinite(v)) + *ptr = v; + }; + + load_double_option("CellHeightScale", &cell_height_scale); + load_double_option("CellWidthScale", &cell_width_scale); + + auto load_enum_option = [&](char const* key, + GType enum_type, + auto* ptr) noexcept -> void + { + auto str = vte::glib::take_string + (g_key_file_get_string(keyfile, CONFIG_GROUP, key, nullptr)); + if (!str) + return; + + auto v = 0; + if (parse_enum(enum_type, str.get(), v, nullptr)) + *ptr = (typeof *ptr)v; + }; + + load_enum_option("BackgroundExtend", CAIRO_GOBJECT_TYPE_EXTEND, &background_extend); + load_enum_option("TextBlink", VTE_TYPE_TEXT_BLINK_MODE, &text_blink_mode); + load_enum_option("CursorBlink", VTE_TYPE_CURSOR_BLINK_MODE, &cursor_blink_mode); + load_enum_option("CursorShape", VTE_TYPE_CURSOR_SHAPE, &cursor_shape); + load_enum_option("XAlign", VTE_TYPE_ALIGN, &xalign); + load_enum_option("YAlign", VTE_TYPE_ALIGN, &yalign); + + auto load_int_option = [&](char const* key, + int* ptr) noexcept -> void + { + auto err = vte::glib::Error{}; + auto v = g_key_file_get_integer(keyfile, CONFIG_GROUP, key, err); + if (!err.error()) + *ptr = v; + }; + + load_int_option("ExtraMargin", &extra_margin); + load_int_option("ScrollbackLines", &scrollback_lines); + load_int_option("Transparent", &transparency_percent); // 0..100 + load_int_option("Verbosity", &verbosity); + + auto load_string_option = [&](char const* key, + char** ptr, + bool raw = false) noexcept -> void + { + auto str = vte::glib::take_string + (g_key_file_get_string(keyfile, CONFIG_GROUP, key, nullptr)); + + // FIXME: decode to allow non-UTF-8 if @raw + if (*ptr) + g_free(*ptr); + *ptr = str.release(); + }; + + load_string_option("Encoding", &encoding); + load_string_option("Font", &font_string); + load_string_option("Geometry", &geometry); + load_string_option("Title", &title); + load_string_option("WordCharExceptions", &word_char_exceptions); + load_string_option("WorkingDirectory", &working_directory, true); + + auto load_strv_option = [&](char const* key, + char*** ptr, + bool raw = false) noexcept -> void + { + auto len = gsize{0}; + auto strv = vte::glib::take_strv + (g_key_file_get_string_list(keyfile, CONFIG_GROUP, key, &len, nullptr)); + // FIXME: decode to allow non-UTF-8 if @raw + if (*ptr) + g_strfreev(*ptr); + *ptr = strv.release(); + }; + + load_strv_option("Dingu", &dingus, false); + load_strv_option("Env", &environment, true); + + // load bgimage option + { + auto str = vte::glib::take_string + (g_key_file_get_string(keyfile, CONFIG_GROUP, "BackgroundImage", nullptr)); + if (str) { + g_clear_object(&background_pixbuf); + background_pixbuf = gdk_pixbuf_new_from_file(str.get(), nullptr); + if (background_pixbuf) + g_object_set_data_full(G_OBJECT(background_pixbuf), "VTEAPP_PATH", + g_strdup(str.get()), GDestroyNotify(g_free)); + + } + } + + // load CJK width option + { + auto str = vte::glib::take_string + (g_key_file_get_string(keyfile, CONFIG_GROUP, "CJKWidth", nullptr)); + if (str) { + auto v = 1; + if (parse_width_enum(str.get(), v, nullptr)) + cjk_ambiguous_width = v; + } + }; + + // load css option + { + auto str = vte::glib::take_string + (g_key_file_get_string(keyfile, CONFIG_GROUP, "CssFile", nullptr)); + if (str) + parse_css(str.get(), nullptr); + }; + + // Note that the following command line options don't + // have a config file equivalent: + // --fd, --feed-stdin, --output-file, --version + + return true; + } + + bool + save_config(GKeyFile* keyfile, + char const* save_path, + GError** error) + { + // Store the config into the keyfile. + + auto const defopt = Options{}; // for default values + + auto save_bool_option = [&](char const* key, + bool v, + bool dv) noexcept -> void + { + if (v == dv) + return; + + g_key_file_set_boolean(keyfile, CONFIG_GROUP, key, v); + }; + + save_bool_option("AllowWindowOps" , allow_window_ops, defopt.allow_window_ops); + save_bool_option("AudibleBell" , audible_bell, defopt.audible_bell); + save_bool_option("Backdrop" , backdrop, defopt.backdrop); + save_bool_option("BboldIsBright" , bold_is_bright, defopt.bold_is_bright); + save_bool_option("BiDi" , bidi, defopt.bidi); + save_bool_option("Bold" , bold, defopt.bold); + save_bool_option("BuiltinDingus" , builtin_dingus, defopt.builtin_dingus); + save_bool_option("ContextMenu" , context_menu, defopt.context_menu); + save_bool_option("Debug" , debug, defopt.debug); + save_bool_option("Decorations" , decorations, defopt.decorations); + save_bool_option("FallbackScrolling" , fallback_scrolling, defopt.fallback_scrolling); + save_bool_option("GeometryHints" , geometry_hints, defopt.geometry_hints); + save_bool_option("Hyperlink" , hyperlink, defopt.hyperlink); + save_bool_option("Keep" , keep, defopt.keep); + save_bool_option("KineticScrolling" , kinetic_scrolling, defopt.kinetic_scrolling); + save_bool_option("ObjectNotifications" , object_notifications, defopt.object_notifications); + save_bool_option("OverlayScrollbar" , overlay_scrollbar, defopt.overlay_scrollbar); + save_bool_option("Pty" , pty, defopt.pty); + save_bool_option("RequireSystemdScope" , require_systemd_scope, defopt.require_systemd_scope); + save_bool_option("Reverse" , reverse, defopt.reverse); + save_bool_option("Rewrap" , rewrap, defopt.rewrap); + save_bool_option("ScrollUnitIsPixels" , scroll_unit_is_pixels, defopt.scroll_unit_is_pixels); + save_bool_option("Scrollbar" , scrollbar, defopt.scrollbar); + save_bool_option("ScrolledWindow" , use_scrolled_window, defopt.use_scrolled_window); + save_bool_option("Shaping" , shaping, defopt.shaping); + save_bool_option("Shell" , shell, defopt.shell); + save_bool_option("Sixel" , sixel, defopt.sixel); + save_bool_option("SystemdScope" , systemd_scope, defopt.systemd_scope); + save_bool_option("TestMode" , test_mode, defopt.test_mode); + save_bool_option("TrackClipboardTargets" , track_clipboard_targets, defopt.track_clipboard_targets); + save_bool_option("UseThemeColors" , use_theme_colors, defopt.use_theme_colors); + save_bool_option("WholeWindowTransparent" , whole_window_transparent, defopt.whole_window_transparent); + save_bool_option("XFill" , xfill, defopt.xfill); + save_bool_option("YFill" , yfill, defopt.yfill); +#if VTE_GTK == 3 + save_bool_option("ArgbVisual" , argb_visual, defopt.argb_visual); + save_bool_option("DoubleBuffer" , double_buffer, defopt.double_buffer); +#endif /* VTE_GTK == 3 */ + + auto save_color_option = [&](char const* key, + GdkRGBA const& color, + bool set) noexcept -> void + { + if (!set) + return; + + auto str = vte::glib::take_string(gdk_rgba_to_string(&color)); + g_key_file_set_string(keyfile, CONFIG_GROUP, key, str.get()); + }; + + save_color_option("BackgroundColor", bg_color, bg_color_set); + save_color_option("CursorBackgroundColor", cursor_bg_color, cursor_bg_color_set); + save_color_option("CursorForegroundColor", cursor_fg_color, cursor_fg_color_set); + save_color_option("ForegroundColor", fg_color, fg_color_set); + save_color_option("HighlightBackgroundColor", hl_bg_color, hl_bg_color_set); + save_color_option("HighlightForegroundColor", hl_fg_color, hl_fg_color_set); + + auto save_double_option = [&](char const* key, + double v, + double dv) noexcept -> void + { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" + if (v == dv) + return; +#pragma GCC diagnostic pop + + g_key_file_set_double(keyfile, CONFIG_GROUP, key, v); + }; + + save_double_option("CellHeightScale" , cell_height_scale, defopt.cell_height_scale); + save_double_option("CellWidthScale" , cell_width_scale, defopt.cell_width_scale); + + auto save_enum_option = [&](char const* key, + GType enum_type, + auto v, + auto dv) noexcept -> void + { + if (v == dv) + return; + + auto enum_klass = reinterpret_cast(g_type_class_ref(enum_type)); + if (auto const ev = g_enum_get_value(enum_klass, int(v))) { + g_key_file_set_string(keyfile, CONFIG_GROUP, key, ev->value_nick); + } + g_type_class_unref(enum_klass); + }; + + save_enum_option("BackgroundExtend" , CAIRO_GOBJECT_TYPE_EXTEND, background_extend, defopt.background_extend); + save_enum_option("TextBlink" , VTE_TYPE_TEXT_BLINK_MODE, text_blink_mode, defopt.text_blink_mode); + save_enum_option("CursorBlink" , VTE_TYPE_CURSOR_BLINK_MODE, cursor_blink_mode, defopt.cursor_blink_mode); + save_enum_option("CursorShape" , VTE_TYPE_CURSOR_SHAPE, cursor_shape, defopt.cursor_shape); + save_enum_option("XAlign" , VTE_TYPE_ALIGN, xalign, defopt.xalign); + save_enum_option("YAlign" , VTE_TYPE_ALIGN, yalign, defopt.yalign); + + auto save_int_option = [&](char const* key, + int v, + int dv) noexcept -> void + { + if (v == dv) + return; + + g_key_file_set_integer(keyfile, CONFIG_GROUP, key, v); + }; + + save_int_option("ExtraMargin" , extra_margin, defopt.extra_margin); + save_int_option("ScrollbackLines" , scrollback_lines, defopt.scrollback_lines); + save_int_option("Transparent" , transparency_percent, defopt.transparency_percent); // 0..100 + save_int_option("Verbosity" , verbosity, defopt.verbosity); + + auto save_string_option = [&](char const* key, + char const* v, + char const* dv, + bool raw = false) noexcept -> void + { + if (!v || g_strcmp0(v, dv) == 0) + return; + + // FIXME: encode to allow non-UTF-8 if @raw + if (raw && !g_utf8_validate(v, -1, nullptr)) + return; + + g_key_file_set_string(keyfile, CONFIG_GROUP, key, v); + }; + + save_string_option("Encoding" , encoding, defopt.encoding); + save_string_option("Font" , font_string, defopt.font_string); + save_string_option("Geometry" , geometry, defopt.geometry); + save_string_option("Title" , title, defopt.title); + save_string_option("WordCharExceptions" , word_char_exceptions, defopt.word_char_exceptions); + save_string_option("WorkingDirectory" , working_directory, defopt.working_directory, true); + + auto save_strv_option = [&](char const* key, + char const* const* v, + char const* const* dv, + bool raw = false) noexcept -> void + { + if (!v || (v && dv && g_strv_equal(v, dv))) + return; + + // FIXME: encode to allow non-UTF-8 if @raw + if (raw) { + for (auto i = 0; v[i]; ++i) { + if (!g_utf8_validate(v[i], -1, nullptr)) + return; + } + } + + g_key_file_set_string_list(keyfile, CONFIG_GROUP, key, + v, g_strv_length((char**)v)); + }; + + save_strv_option("Dingu" , dingus, defopt.dingus, false); + save_strv_option("Env" , environment, defopt.environment, true); + + // save bgimage option + { + if (background_pixbuf) { + auto const path = (char const*)g_object_get_data(G_OBJECT(background_pixbuf), "VTEAPP_PATH"); + if (path) { + // FIXME: encode to allow non-UTF-8 + g_key_file_set_string(keyfile, CONFIG_GROUP, "BackgroundImage", path); + } + } + } + + // save CJK width option + { + if (cjk_ambiguous_width != defopt.cjk_ambiguous_width) { + g_key_file_set_string(keyfile, CONFIG_GROUP, "CJKWidth", + cjk_ambiguous_width == 2 ? "wide" : "narrow"); + } + }; + + // save css option + { + if (css) { + auto const path = (char const*)g_object_get_data(G_OBJECT(css.get()), "VTEAPP_PATH"); + if (path) { + // FIXME: encode to allow non-UTF-8 + g_key_file_set_string(keyfile, CONFIG_GROUP, "CssFile", path); + } + } + }; + + // Now save to keyfile + return g_key_file_save_to_file(keyfile, + save_path ? save_path : default_config_path(), + error); + } + public: double get_alpha() const @@ -303,7 +1041,7 @@ public: return double(100 - CLAMP(transparency_percent, 0, 100)) / 100.0; } - GdkRGBA get_color_bg() const + double get_alpha_bg() const { double alpha; if (background_pixbuf != nullptr) @@ -313,8 +1051,24 @@ public: else alpha = get_alpha(); + return alpha; + } + + double get_alpha_bg_for_draw() const + { + double alpha; + if (whole_window_transparent) + alpha = 1.0; + else + alpha = get_alpha(); + + return alpha; + } + + GdkRGBA get_color_bg() const + { GdkRGBA color{bg_color}; - color.alpha = alpha; + color.alpha = get_alpha_bg(); return color; } @@ -327,15 +1081,184 @@ public: char* argv[], GError** error) { - bool dummy_bool; + auto entries = std::vector{}; + + auto add_bool_option = [&](char const* option, + char const short_option, + char const* negated_option, + char const negated_short_option, + int flags, + gboolean* arg_data, + char const* desc, + char const* negated_desc) constexpr noexcept -> void + { + entries.emplace_back(option, + short_option, + // hide this option if it's the default anyway + flags | (*arg_data ? G_OPTION_FLAG_HIDDEN : 0), + G_OPTION_ARG_NONE, + arg_data, + desc, + nullptr); + entries.emplace_back(negated_option, + negated_short_option, + // hide this option if it's the default anyway + flags | (*arg_data ? 0 : G_OPTION_FLAG_HIDDEN) | G_OPTION_FLAG_REVERSE, + G_OPTION_ARG_NONE, + arg_data, + negated_desc, + nullptr); + }; + + add_bool_option("allow-window-ops", 0, "no-allow-window-ops", 0, + 0, &allow_window_ops, + "Allow window operations (resize, move, raise/lower, (de)iconify)", + "Disallow window operations (resize, move, raise/lower, (de)iconify)"); + add_bool_option("audible-bell", 'a', "no-audible-bell", 0, + 0, &audible_bell, + "Enable audible terminal bell", + "Disable audible terminal bell"); + add_bool_option("backdrop", 0, "no-backdrop", 0, + 0, &backdrop, + "Enable dimming when toplevel unfocused", + "Disable dimming when toplevel unfocused"); + add_bool_option("bold-is-bright", 'B', "no-bold-is-bright", 0, + 0, &bold_is_bright, + "Bold to also brightens colors", + "Bold does not also brightens colors"); + add_bool_option("debug", 'd', "no-debug", 0, + 0, &debug, + "Enable various debugging checks", + "Disable various debugging checks"); + add_bool_option("keep", 'k', "no-keep", 0, + 0, &keep, + "Live on after the command exits", + "Exit after the command exits"); + add_bool_option("bidi", 0, "no-bidi", 0, + 0, &bidi, + "Enable BiDi", + "Disable BiDi"); + add_bool_option("bold", 0, "no-bold", 0, + 0, &bold, + "Enable bold", + "Disable bold"); + add_bool_option("builtin-dingus", 0, "no-builtin-dingus", 0, + 0, &builtin_dingus, + "Highlight URLs inside the terminal", + "Don't highlight URLs inside the terminal"); + add_bool_option("context-menu", 0, "no-context-menu", 0, + 0, &context_menu, + "Enable context menu", + "Disable context menu"); + add_bool_option("decorations", 0, "no-decorations", 0, + 0, &decorations, + "Enable window decorations", + "Disable window decorations"); + add_bool_option("fallback-scrolling", 0, "no-fallback-scrolling", 0, + 0, &fallback_scrolling, + "Enable fallback scrolling", + "Disable fallback scrolling"); + add_bool_option("geometry-hints", 0, "no-geometry-hints", 'G', + 0,&geometry_hints, + "Allow the terminal to be resized to any dimension, not constrained to fit to an integer multiple of characters", + "Disallow the terminal to be resized to any dimension, not constrained to fit to an integer multiple of characters"); + add_bool_option("hyperlink", 0, "no-hyperlink", 'H', + 0, &hyperlink, + "Enable hyperlinks", + "Disable hyperlinks"); + add_bool_option("kinetic-scrolling", 0, "no-kinetic-scrolling", 0, + 0, &kinetic_scrolling, + "Enable kinetic scrolling", + "Disable kinetic scrolling"); + add_bool_option("pty", 0, "no-pty", 0, + 0, &pty, + "Enable PTY creation with --no-shell", + "Disable PTY creation with --no-shell"); + add_bool_option("rewrap", 0, "no-rewrap", 'R', + 0, &rewrap, + "Enable rewrapping on resize", + "Disable rewrapping on resize"); + add_bool_option("scrollbar", 0, "no-scrollbar", 0, + 0, &scrollbar, + "Enable scrollbar", + "Disable scrollbar"); + add_bool_option("shaping", 0, "no-shaping", 0, + 0, &shaping, + "Enable Arabic shaping", + "Disable Arabic shaping"); + add_bool_option("shell", 0, "no-shell", 'S', + 0, &shell, + "Enable spawning a shell inside the terminal", + "Disable spawning a shell inside the terminal"); + add_bool_option("sixel", 0, "no-sixel", 0, + 0, &sixel, + "Enable SIXEL images", + "Disable SIXEL images"); + add_bool_option("systemd-scope", 0, "no-systemd-scope", 0, + 0, &systemd_scope, + "Enable using systemd user scope", + "Disble using systemd user scope"); + add_bool_option("overlay-scrollbar", 'N', "no-overlay-scrollbar", 0, + 0, &overlay_scrollbar, + "Use overlay scrollbar", + "Use regular scrollbar"); + add_bool_option("reverse", 0, "no-reverse", 0, + 0, &reverse, + "Reverse foreground/background colors", + "Don't reverse foreground/background colors"); + add_bool_option("require-systemd-scope", 0, "no-require-systemd-scope", 0, + 0, &require_systemd_scope, + "Require use of a systemd user scope", + "Don't require use of a systemd user scope"); + add_bool_option("scroll-unit-is-pixels", 0, "no-scroll-unit-is-pixels", 0, + 0, &scroll_unit_is_pixels, + "Use pixels as scroll unit", + "Use lines as scroll unit"); + add_bool_option("track-clipboard-targets", 0, "no-track-clipboard-targets", 0, + G_OPTION_FLAG_HIDDEN, &track_clipboard_targets, + "Track clipboard targets", + "Don't track clipboard targets"); + add_bool_option("whole-window-transparent", 0, "no-whole-window-transparent", 0, + 0, &whole_window_transparent, + "Make the whole window transparent", + "Don't make the whole window transparent"); + add_bool_option("scrolled-window", 0, "no-scrolled-window", 0, + G_OPTION_FLAG_HIDDEN, &use_scrolled_window, + "Use a GtkScrolledWindow", + "Don't use a GtkScrolledWindow"); + add_bool_option("use-theme-colors", 0, "no-use-theme-colors", 0, + 0, &use_theme_colors, + "Use foreground and background colors from the gtk+ theme", + "Don't use foreground and background colors from the gtk+ theme"); + + add_bool_option("xfill", 0, "no-xfill", 0, + 0, &xfill, + "Fill horizontally", + "Don't fill horizontally"); + add_bool_option("yfill", 0, "no-yfill", 0, + 0, &yfill, + "Fill vertically", + "Don't fill vertically"); + add_bool_option("object-notifications", 'N', "no-object-notifications", 0, + 0, &object_notifications, + "Print VteTerminal object notifications", + "Don't print VteTerminal object notifications"); + +#if VTE_GTK == 3 + add_bool_option("argb-visual", 0, "no-argb-visual", 0, + 0, &argb_visual, + "Use an ARGB visual", + "Don't use an ARGB visual"); + add_bool_option("double-buffer", 0, "no-double-buffer", '2', + 0, &double_buffer, + "Enable double-buffering", + "Disable double-buffering"); +#endif /* VTE_GTK == 3 */ + + entries.push_back({}); // terminate + char* dummy_string = nullptr; - GOptionEntry const entries[] = { - { "allow-window-ops", 0, 0, G_OPTION_ARG_NONE, &allow_window_ops, - "Allow window operations (resize, move, raise/lower, (de)iconify)", nullptr }, - { "audible-bell", 'a', 0, G_OPTION_ARG_NONE, &audible_bell, - "Use audible terminal bell", nullptr }, - { "backdrop", 0, 0,G_OPTION_ARG_NONE, &backdrop, - "Dim when toplevel unfocused", nullptr }, + GOptionEntry const more_entries[] = { { "background-color", 0, 0, G_OPTION_ARG_CALLBACK, (void*)parse_bg_color, "Set default background color", "COLOR" }, { "background-image", 0, 0, G_OPTION_ARG_CALLBACK, (void*)parse_background_image, @@ -344,8 +1267,6 @@ public: "Set background image extend", "EXTEND" }, { "blink", 0, 0, G_OPTION_ARG_CALLBACK, (void*)parse_text_blink, "Text blink mode (never|focused|unfocused|always)", "MODE" }, - { "bold-is-bright", 'B', 0, G_OPTION_ARG_NONE, &bold_is_bright, - "Bold also brightens colors", nullptr }, { "cell-height-scale", 0, 0, G_OPTION_ARG_DOUBLE, &cell_height_scale, "Add extra line spacing", "1.0..2.0" }, { "cell-width-scale", 0, 0, G_OPTION_ARG_DOUBLE, &cell_width_scale, @@ -360,16 +1281,20 @@ public: "Enable a colored cursor foreground", "COLOR" }, { "cursor-shape", 0, 0, G_OPTION_ARG_CALLBACK, (void*)parse_cursor_shape, "Set cursor shape (block|underline|ibeam)", nullptr }, + { "css-file", 0, G_OPTION_FLAG_FILENAME, G_OPTION_ARG_CALLBACK, (void*)parse_css_file, + "Load CSS from FILE", "FILE" }, { "dingu", 'D', 0, G_OPTION_ARG_STRING_ARRAY, &dingus, "Add regex highlight", nullptr }, - { "debug", 'd', 0,G_OPTION_ARG_NONE, &debug, - "Enable various debugging checks", nullptr }, { "encoding", 0, 0, G_OPTION_ARG_STRING, &encoding, "Specify the terminal encoding to use", "ENCODING" }, { "env", 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &environment, "Add environment variable to the child\'s environment", "VAR=VALUE" }, { "extra-margin", 0, 0, G_OPTION_ARG_INT, &extra_margin, "Add extra margin around the terminal widget", "MARGIN" }, + { "fd", 0, 0, G_OPTION_ARG_CALLBACK, (void*)parse_fd, + "Pass file descriptor N (as M) to the child process", "N[:M]|N[=M]" }, + { "feed-stdin", 'B', 0, G_OPTION_ARG_NONE, &feed_stdin, + "Feed input to the terminal", nullptr }, { "font", 'f', 0, G_OPTION_ARG_STRING, &font_string, "Specify a font to use", nullptr }, { "foreground-color", 0, 0, G_OPTION_ARG_CALLBACK, (void*)parse_fg_color, @@ -382,44 +1307,11 @@ public: "Enable distinct highlight foreground color for selection", "COLOR" }, { "icon-title", 'i', 0, G_OPTION_ARG_NONE, &icon_title, "Enable the setting of the icon title", nullptr }, - { "keep", 'k', 0, G_OPTION_ARG_NONE, &keep, - "Live on after the command exits", nullptr }, - { "no-argb-visual", 0, 0, G_OPTION_ARG_NONE, &no_argb_visual, - "Don't use an ARGB visual", nullptr }, - { "no-bidi", 0, 0, G_OPTION_ARG_NONE, &no_bidi, - "Disable BiDi", nullptr }, - { "no-bold", 0, 0, G_OPTION_ARG_NONE, &no_bold, - "Disable bold", nullptr }, - { "no-builtin-dingus", 0, 0, G_OPTION_ARG_NONE, &no_builtin_dingus, - "Highlight URLs inside the terminal", nullptr }, - { "no-context-menu", 0, 0, G_OPTION_ARG_NONE, &no_context_menu, - "Disable context menu", nullptr }, - { "no-double-buffer", '2', 0, G_OPTION_ARG_NONE, &no_double_buffer, - "Disable double-buffering", nullptr }, - { "no-geometry-hints", 'G', 0, G_OPTION_ARG_NONE, &no_geometry_hints, - "Allow the terminal to be resized to any dimension, not constrained to fit to an integer multiple of characters", nullptr }, - { "no-hyperlink", 'H', 0, G_OPTION_ARG_NONE, &no_hyperlink, - "Disable hyperlinks", nullptr }, - { "no-rewrap", 'R', 0, G_OPTION_ARG_NONE, &no_rewrap, - "Disable rewrapping on resize", nullptr }, - { "no-scrollbar", 0, 0, G_OPTION_ARG_NONE, &no_scrollbar, - "Disable scrollbar", nullptr }, - { "no-shaping", 0, 0, G_OPTION_ARG_NONE, &no_shaping, - "Disable Arabic shaping", nullptr }, - { "no-shell", 'S', 0, G_OPTION_ARG_NONE, &no_shell, - "Disable spawning a shell inside the terminal", nullptr }, - { "no-systemd-scope", 0, 0, G_OPTION_ARG_NONE, &no_systemd_scope, - "Don't use systemd user scope", nullptr }, - { "object-notifications", 'N', 0, G_OPTION_ARG_NONE, &object_notifications, - "Print VteTerminal object notifications", nullptr }, { "output-file", 0, 0, G_OPTION_ARG_FILENAME, &output_filename, "Save terminal contents to file at exit", nullptr }, - { "reverse", 0, 0, G_OPTION_ARG_NONE, &reverse, - "Reverse foreground/background colors", nullptr }, - { "require-systemd-scope", 0, 0, G_OPTION_ARG_NONE, &require_systemd_scope, - "Require use of a systemd user scope", nullptr }, { "scrollback-lines", 'n', 0, G_OPTION_ARG_INT, &scrollback_lines, "Specify the number of scrollback-lines (-1 for infinite)", nullptr }, + { "title", 0, 0, G_OPTION_ARG_STRING, &title, "Set the initial title of the window", "TITLE" }, { "transparent", 'T', 0, G_OPTION_ARG_INT, &transparency_percent, "Enable the use of a transparent background", "0..100" }, { "verbose", 'v', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, @@ -427,12 +1319,17 @@ public: "Enable verbose debug output", nullptr }, { "version", 0, 0, G_OPTION_ARG_NONE, &version, "Show version", nullptr }, - { "whole-window-transparent", 0, 0, G_OPTION_ARG_NONE, &whole_window_transparent, - "Make the whole window transparent", NULL }, { "word-char-exceptions", 0, 0, G_OPTION_ARG_STRING, &word_char_exceptions, "Specify the word char exceptions", "CHARS" }, { "working-directory", 'w', 0, G_OPTION_ARG_FILENAME, &working_directory, "Specify the initial working directory of the terminal", nullptr }, + { "xalign", 0, 0, G_OPTION_ARG_CALLBACK, (void*)parse_xalign, + "Horizontal alignment (start|end|center)", "ALIGN" }, + { "yalign", 0, 0, G_OPTION_ARG_CALLBACK, (void*)parse_yalign, + "Vertical alignment (fill|start|end|center)", "ALIGN" }, + + { "test-mode", 0, 0, G_OPTION_ARG_NONE, &test_mode, + "Enable test mode", nullptr }, /* Options for compatibility with the old vteapp test application */ { "border-width", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_INT, &extra_margin, @@ -441,59 +1338,151 @@ public: nullptr, nullptr }, { "console", 'C', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &console, nullptr, nullptr }, - { "double-buffer", '2', G_OPTION_FLAG_REVERSE | G_OPTION_FLAG_HIDDEN, - G_OPTION_ARG_NONE, &no_double_buffer, nullptr, nullptr }, { "pty-flags", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &dummy_string, nullptr, nullptr }, { "scrollbar-policy", 'P', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &dummy_string, nullptr, nullptr }, - { "scrolled-window", 'W', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, - &dummy_bool, nullptr, nullptr }, - { "shell", 'S', G_OPTION_FLAG_REVERSE | G_OPTION_FLAG_HIDDEN, - G_OPTION_ARG_NONE, &no_shell, nullptr, nullptr }, -#ifdef VTE_DEBUG - { "test-mode", 0, 0, G_OPTION_ARG_NONE, &test_mode, - "Enable test mode", nullptr }, -#endif + { nullptr } }; + gboolean no_load_config = false; + char* load_config_path = nullptr; + char* save_config_path = nullptr; + GOptionEntry const config_entries[] = { + { "load-config", + 0, + 0, + G_OPTION_ARG_FILENAME, + &load_config_path, + "Load configuration from file", + "FILE" }, + { "save-config", + 0, + 0, + G_OPTION_ARG_FILENAME, + &save_config_path, + "Save configuration to file", + "FILE" }, + { "no-load-config", + 0, + 0, + G_OPTION_ARG_NONE, + &no_load_config, + "Don't load default configuration", + nullptr }, + { nullptr }, + }; + /* Look for '--' */ for (int i = 0; i < argc; i++) { if (!g_str_equal(argv[i], "--")) continue; i++; /* skip it */ + if (i == argc) { + g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "No command specified after -- terminator"); + return false; + } + exec_argv = g_new(char*, argc - i + 1); int j; for (j = 0; i < argc; i++, j++) exec_argv[j] = g_strdup(argv[i]); exec_argv[j] = nullptr; + + argc = i; break; } - auto context = g_option_context_new("[-- COMMAND …] — VTE test application"); - g_option_context_set_help_enabled(context, true); - g_option_context_set_translation_domain(context, GETTEXT_PACKAGE); + auto config_ini = vte::take_freeable(g_key_file_new()); - auto group = g_option_group_new(nullptr, nullptr, nullptr, this, nullptr); - g_option_group_set_translation_domain(group, GETTEXT_PACKAGE); - g_option_group_add_entries(group, entries); - g_option_context_set_main_group(context, group); + do { + // First, parse the --no-load-config and --load-config + // options + auto context = vte::take_freeable(g_option_context_new(nullptr)); + g_option_context_set_help_enabled(context.get(), false); + g_option_context_set_ignore_unknown_options(context.get(), true); + g_option_context_set_translation_domain(context.get(), GETTEXT_PACKAGE); - g_option_context_add_group(context, gtk_get_option_group(true)); + auto err = vte::glib::Error{}; + auto group = g_option_group_new(nullptr, nullptr, nullptr, this, nullptr); + g_option_group_set_translation_domain(group, GETTEXT_PACKAGE); + g_option_group_add_entries(group, config_entries); + g_option_context_set_main_group(context.get(), group); - bool rv = g_option_context_parse(context, &argc, &argv, error); + // This will remove parsed options from @argv and + // leave unrecognised options to be parsed again below. + if (!g_option_context_parse(context.get(), &argc, &argv, err)) + break; + + if (!no_load_config) { + // Allow default load to fail + if (!load_config(config_ini.get(), nullptr, err) && + !err.matches(G_FILE_ERROR, G_FILE_ERROR_NOENT)) { + verbose_printerr("Failed to load default configuration: %s\n", err.message()); + } + } + + if (load_config_path && !load_config(config_ini.get(), load_config_path, error)) { + g_free(load_config_path); + g_free(save_config_path); + break; // don't bail out + } + } while (false); + + { + // Now parse all options. (We add the above-handled options too, + // so that --help can output them; but since they are already + // removed from argv they won't be processed again. + auto context = vte::take_freeable + (g_option_context_new("[-- COMMAND …] — VTE test application")); + g_option_context_set_help_enabled(context.get(), true); + g_option_context_set_translation_domain(context.get(), GETTEXT_PACKAGE); + + auto group = g_option_group_new(nullptr, nullptr, nullptr, this, nullptr); + g_option_group_set_translation_domain(group, GETTEXT_PACKAGE); + g_option_group_add_entries(group, entries.data()); + g_option_group_add_entries(group, more_entries); + g_option_context_set_main_group(context.get(), group); + +#if VTE_GTK == 3 + g_option_context_add_group(context.get(), gtk_get_option_group(true)); +#endif + + if (!g_option_context_parse(context.get(), &argc, &argv, error)) + return false; + } - g_option_context_free(context); g_free(dummy_string); - if (reverse) - std::swap(fg_color, bg_color); + // Now save the combined config, if requested + if (save_config_path && + !save_config(config_ini.get(), save_config_path, error)) { + return false; + } - return rv; + if (reverse) { + using std::swap; + swap(fg_color, bg_color); + } + + if (use_scrolled_window) { + geometry_hints = false; + } + +#if VTE_GTK == 4 + if (!gtk_init_check()) { + g_set_error_literal(error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "Failed to initialise gtk+"); + return false; + } +#endif /* VTE_GTK == 4 */ + + return true; } -}; +}; // class Options Options options{}; /* global */ @@ -513,9 +1502,6 @@ verbose_fprintf(FILE* fp, va_end(args); } -#define verbose_print(...) verbose_fprintf(stdout, __VA_ARGS__) -#define verbose_printerr(...) verbose_fprintf(stderr, __VA_ARGS__) - /* regex */ static void @@ -530,7 +1516,7 @@ jit_regex(VteRegex* regex, } } -static VteRegex* +static vte::Freeable compile_regex_for_search(char const* pattern, bool caseless, GError** error) @@ -543,10 +1529,10 @@ compile_regex_for_search(char const* pattern, if (regex != nullptr) jit_regex(regex, pattern); - return regex; + return vte::take_freeable(regex); } -static VteRegex* +static vte::Freeable compile_regex_for_match(char const* pattern, bool caseless, GError** error) @@ -559,7 +1545,7 @@ compile_regex_for_match(char const* pattern, if (regex != nullptr) jit_regex(regex, pattern); - return regex; + return vte::take_freeable(regex); } /* search popover */ @@ -622,7 +1608,11 @@ vteapp_search_popover_update_sensitivity(VteappSearchPopover* popover) static void vteapp_search_popover_update_regex(VteappSearchPopover* popover) { - char const* search_text = gtk_entry_get_text(GTK_ENTRY(popover->search_entry)); +#if VTE_GTK == 3 + auto search_text = gtk_entry_get_text(GTK_ENTRY(popover->search_entry)); +#elif VTE_GTK == 4 + auto search_text = gtk_editable_get_text(GTK_EDITABLE(popover->search_entry)); +#endif /* VTE_GTK */ bool caseless = gtk_toggle_button_get_active(popover->match_case_checkbutton) == FALSE; char* pattern; @@ -648,17 +1638,15 @@ vteapp_search_popover_update_regex(VteappSearchPopover* popover) if (search_text[0] != '\0') { auto error = vte::glib::Error{}; auto regex = compile_regex_for_search(pattern, caseless, error); - vte_terminal_search_set_regex(popover->terminal, regex, 0); - if (regex != nullptr) - vte_regex_unref(regex); + vte_terminal_search_set_regex(popover->terminal, regex.get(), 0); if (error.error()) { - popover->has_regex = true; + popover->has_regex = false; popover->regex_pattern = pattern; /* adopt */ pattern = nullptr; /* adopted */ gtk_widget_set_tooltip_text(popover->search_entry, nullptr); } else { - popover->has_regex = false; + popover->has_regex = true; gtk_widget_set_tooltip_text(popover->search_entry, error.message()); } } @@ -785,10 +1773,18 @@ static GtkWidget* vteapp_search_popover_new(VteTerminal* terminal, GtkWidget* relative_to) { - return reinterpret_cast(g_object_new(VTEAPP_TYPE_SEARCH_POPOVER, - "terminal", terminal, - "relative-to", relative_to, - nullptr)); + auto popover = reinterpret_cast(g_object_new(VTEAPP_TYPE_SEARCH_POPOVER, + "terminal", terminal, +#if VTE_GTK == 3 + "relative-to", relative_to, +#endif + nullptr)); + +#if VTE_GTK == 4 + gtk_widget_set_parent(popover, relative_to); +#endif + + return popover; } /* terminal */ @@ -826,35 +1822,53 @@ vteapp_terminal_realize(GtkWidget* widget) { GTK_WIDGET_CLASS(vteapp_terminal_parent_class)->realize(widget); - VteappTerminal* terminal = VTEAPP_TERMINAL(widget); - if (options.background_pixbuf != nullptr) { - auto surface = gdk_cairo_surface_create_from_pixbuf(options.background_pixbuf, - 0 /* take scale from window */, - gtk_widget_get_window(widget)); - terminal->background_pattern = cairo_pattern_create_for_surface(surface); - cairo_surface_destroy(surface); + if (!options.background_pixbuf) + return; - cairo_pattern_set_extend(terminal->background_pattern, options.background_extend); - } + auto terminal = VTEAPP_TERMINAL(widget); + +#if VTE_GTK == 3 + auto surface = vte::take_freeable + (gdk_cairo_surface_create_from_pixbuf(options.background_pixbuf, + 0 /* take scale from window */, + gtk_widget_get_window(widget))); +#elif VTE_GTK == 4 + auto const width = gdk_pixbuf_get_width(options.background_pixbuf); + auto const height = gdk_pixbuf_get_height(options.background_pixbuf); + auto surface = vte::take_freeable(cairo_image_surface_create(CAIRO_FORMAT_ARGB32, + width, height)); + auto cr = vte::take_freeable(cairo_create(surface.get())); + gdk_cairo_set_source_pixbuf(cr.get(), options.background_pixbuf, 0, 0); + cairo_paint(cr.get()); + cairo_surface_flush(surface.get()); // FIXME necessary? +#endif + terminal->background_pattern = cairo_pattern_create_for_surface(surface.get()); + + cairo_pattern_set_extend(terminal->background_pattern, options.background_extend); } static void vteapp_terminal_unrealize(GtkWidget* widget) { - VteappTerminal* terminal = VTEAPP_TERMINAL(widget); +#if VTE_GTK == 3 + auto terminal = VTEAPP_TERMINAL(widget); + if (terminal->background_pattern != nullptr) { cairo_pattern_destroy(terminal->background_pattern); terminal->background_pattern = nullptr; } +#endif /* VTE_GTK */ GTK_WIDGET_CLASS(vteapp_terminal_parent_class)->unrealize(widget); } -static gboolean -vteapp_terminal_draw(GtkWidget* widget, - cairo_t* cr) +#if VTE_GTK == 3 +static void +vteapp_terminal_draw_background(GtkWidget* widget, + cairo_t* cr) { - VteappTerminal* terminal = VTEAPP_TERMINAL(widget); + auto terminal = VTEAPP_TERMINAL(widget); + if (terminal->background_pattern != nullptr) { cairo_push_group(cr); @@ -874,11 +1888,26 @@ vteapp_terminal_draw(GtkWidget* widget, cairo_paint(cr); cairo_pop_group_to_source(cr); - cairo_paint_with_alpha(cr, bg.alpha); + cairo_paint_with_alpha(cr, options.get_alpha_bg_for_draw()); } +} +#endif /* VTE_GTK == 3 */ - auto rv = GTK_WIDGET_CLASS(vteapp_terminal_parent_class)->draw(widget, cr); +#if VTE_GTK == 4 +static void +vteapp_terminal_draw_background(GtkWidget* widget, + GtkSnapshot* snapshot) +{ +} +#endif /* VTE_GTK == 4 */ + +#if VTE_GTK == 3 +static void +vteapp_terminal_draw_backdrop(GtkWidget* widget, + cairo_t* cr) +{ + auto terminal = VTEAPP_TERMINAL(widget); if (terminal->use_backdrop && terminal->has_backdrop) { cairo_set_operator(cr, CAIRO_OPERATOR_OVER); @@ -888,30 +1917,164 @@ vteapp_terminal_draw(GtkWidget* widget, gtk_widget_get_allocated_height(widget)); cairo_paint(cr); } +} +#elif VTE_GTK == 4 +static void +vteapp_terminal_draw_backdrop(GtkWidget* widget, + GtkSnapshot* snapshot) +{ + static const GdkRGBA rgba = {0, 0, 0, BACKDROP_ALPHA}; + auto terminal = VTEAPP_TERMINAL(widget); + + if (terminal->use_backdrop && terminal->has_backdrop) { + auto const rect = GRAPHENE_RECT_INIT(.0f, + .0f, + float(gtk_widget_get_allocated_width(widget)), + float(gtk_widget_get_allocated_height(widget))); + gtk_snapshot_append_color(snapshot, &rgba, &rect); + } +} +#endif + +#if VTE_GTK == 3 + +static gboolean +vteapp_terminal_draw(GtkWidget* widget, + cairo_t* cr) +{ + vteapp_terminal_draw_background(widget, cr); + + auto const rv = GTK_WIDGET_CLASS(vteapp_terminal_parent_class)->draw(widget, cr); + + vteapp_terminal_draw_backdrop(widget, cr); return rv; } +#endif /* VTE_GTK == 3 */ + +static void +vteapp_terminal_update_theme_colors(GtkWidget* widget) +{ + if (!options.use_theme_colors) + return; + + auto terminal = VTEAPP_TERMINAL(widget); + auto context = gtk_widget_get_style_context(widget); + +#if VTE_GTK == 3 + auto const flags = gtk_style_context_get_state(context); +#endif + + auto theme_fg = GdkRGBA{}; + gtk_style_context_get_color(context, +#if VTE_GTK == 3 + flags, +#endif + &theme_fg); + + auto theme_bg = GdkRGBA{}; +#if VTE_GTK == 3 + G_GNUC_BEGIN_IGNORE_DEPRECATIONS; + gtk_style_context_get_background_color(context, flags, &theme_bg); + G_GNUC_END_IGNORE_DEPRECATIONS; +#elif VTE_GTK == 4 + // FIXMEgtk4 "background-color" lookup always fails + if (!gtk_style_context_lookup_color(context, "text_view_bg", &theme_bg)) { + verbose_print("Failed to get theme background color\n"); + return; + } +#endif + + auto dti = [](double d) -> unsigned { return std::clamp(unsigned(d*255), 0u, 255u); }; + + verbose_print("Theme colors: foreground is #%02X%02X%02X, background is #%02X%02X%02X\n", + dti(theme_fg.red), dti(theme_fg.green), dti(theme_fg.blue), + dti(theme_bg.red), dti(theme_bg.green), dti(theme_bg.blue)); + + theme_fg.alpha = 1.; + theme_bg.alpha = options.get_alpha_bg(); + vte_terminal_set_colors(VTE_TERMINAL(terminal), &theme_fg, &theme_bg, nullptr, 0); +} + +#if VTE_GTK == 3 + static void vteapp_terminal_style_updated(GtkWidget* widget) { GTK_WIDGET_CLASS(vteapp_terminal_parent_class)->style_updated(widget); - auto context = gtk_widget_get_style_context(widget); - auto flags = gtk_style_context_get_state(context); + auto terminal = VTEAPP_TERMINAL(widget); - VteappTerminal* terminal = VTEAPP_TERMINAL(widget); + auto context = gtk_widget_get_style_context(widget); + auto const flags = gtk_style_context_get_state(context); + terminal->has_backdrop = (flags & GTK_STATE_FLAG_BACKDROP) != 0; + + vteapp_terminal_update_theme_colors(widget); +} + +#endif /* VTE_GTK == 3 */ + +#if VTE_GTK == 4 + +static void +vteapp_terminal_snapshot(GtkWidget* widget, + GtkSnapshot* snapshot_object) +{ + vteapp_terminal_draw_background(widget, snapshot_object); + + GTK_WIDGET_CLASS(vteapp_terminal_parent_class)->snapshot(widget, snapshot_object); + + vteapp_terminal_draw_backdrop(widget, snapshot_object); +} + +static void +vteapp_terminal_css_changed(GtkWidget* widget, + GtkCssStyleChange* change) +{ + GTK_WIDGET_CLASS(vteapp_terminal_parent_class)->css_changed(widget, change); + + vteapp_terminal_update_theme_colors(widget); +} + +static void +vteapp_terminal_state_flags_changed(GtkWidget* widget, + GtkStateFlags old_flags) +{ + GTK_WIDGET_CLASS(vteapp_terminal_parent_class)->state_flags_changed(widget, old_flags); + + auto terminal = VTEAPP_TERMINAL(widget); + auto const flags = gtk_widget_get_state_flags(widget); terminal->has_backdrop = (flags & GTK_STATE_FLAG_BACKDROP) != 0; } +static void +vteapp_terminal_system_setting_changed(GtkWidget* widget, + GtkSystemSetting setting) +{ + GTK_WIDGET_CLASS(vteapp_terminal_parent_class)->system_setting_changed(widget, setting); + + // FIXMEgtk4 find a way to update colours on theme change like gtk3 above +} + +#endif /* VTE_GTK == 4 */ + static void vteapp_terminal_class_init(VteappTerminalClass *klass) { - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); + auto widget_class = GTK_WIDGET_CLASS(klass); widget_class->realize = vteapp_terminal_realize; widget_class->unrealize = vteapp_terminal_unrealize; + +#if VTE_GTK == 3 widget_class->draw = vteapp_terminal_draw; widget_class->style_updated = vteapp_terminal_style_updated; +#elif VTE_GTK == 4 + widget_class->snapshot = vteapp_terminal_snapshot; + widget_class->css_changed = vteapp_terminal_css_changed; + widget_class->state_flags_changed = vteapp_terminal_state_flags_changed; + widget_class->system_setting_changed = vteapp_terminal_system_setting_changed; +#endif } static void @@ -921,8 +2084,10 @@ vteapp_terminal_init(VteappTerminal *terminal) terminal->has_backdrop = false; terminal->use_backdrop = options.backdrop; +#if VTE_GTK == 3 if (options.background_pixbuf != nullptr) vte_terminal_set_clear_background(VTE_TERMINAL(terminal), false); +#endif /* VTE_GTK == 3 */ } static GtkWidget * @@ -947,9 +2112,9 @@ struct _VteappWindow { GtkApplicationWindow parent; /* from GtkWidget template */ - GtkWidget* window_box; + GtkWidget* window_grid; GtkScrollbar* scrollbar; - /* GtkBox* notifications_box; */ + /* GtkGrid* notifications_grid; */ GtkWidget* readonly_emblem; /* GtkButton* copy_button; */ /* GtkButton* paste_button; */ @@ -958,12 +2123,9 @@ struct _VteappWindow { /* end */ VteTerminal* terminal; - GtkClipboard* clipboard; GPid child_pid; GtkWidget* search_popover; - bool fullscreen{false}; - /* used for updating the geometry hints */ int cached_cell_width{0}; int cached_cell_height{0}; @@ -971,6 +2133,15 @@ struct _VteappWindow { int cached_chrome_height{0}; int cached_csd_width{0}; int cached_csd_height{0}; + +#if VTE_GTK == 3 + GtkClipboard* clipboard; + GdkWindowState window_state{GdkWindowState(0)}; +#endif +#if VTE_GTK == 4 + GdkClipboard* clipboard; + GdkToplevelState toplevel_state{GdkToplevelState(0)}; +#endif }; struct _VteappWindowClass { @@ -994,12 +2165,11 @@ vteapp_window_add_dingus(VteappWindow* window, char const* const* dingus) { for (auto i = 0; dingus[i] != nullptr; i++) { - auto tag = int{-1}; + auto tag = -1; auto error = vte::glib::Error{}; auto regex = compile_regex_for_match(dingus[i], true, error); if (regex) { - tag = vte_terminal_match_add_regex(window->terminal, regex, 0); - vte_regex_unref(regex); + tag = vte_terminal_match_add_regex(window->terminal, regex.get(), 0); } if (error.error()) { @@ -1015,6 +2185,10 @@ vteapp_window_add_dingus(VteappWindow* window, static void vteapp_window_update_geometry(VteappWindow* window) { + if (!options.geometry_hints) + return; + +#if VTE_GTK == 3 GtkWidget* window_widget = GTK_WIDGET(window); GtkWidget* terminal_widget = GTK_WIDGET(window->terminal); @@ -1028,7 +2202,7 @@ vteapp_window_update_geometry(VteappWindow* window) * This includes the terminal's padding in the chrome. */ GtkRequisition contents_req; - gtk_widget_get_preferred_size(window->window_box, nullptr, &contents_req); + gtk_widget_get_preferred_size(window->window_grid, nullptr, &contents_req); int chrome_width = contents_req.width - cell_width * columns; int chrome_height = contents_req.height - cell_height * rows; g_assert_cmpint(chrome_width, >=, 0); @@ -1042,7 +2216,7 @@ vteapp_window_update_geometry(VteappWindow* window) */ GtkAllocation toplevel, contents; gtk_widget_get_allocation(window_widget, &toplevel); - gtk_widget_get_allocation(window->window_box, &contents); + gtk_widget_get_allocation(window->window_grid, &contents); csd_width = toplevel.width - contents.width; csd_height = toplevel.height - contents.height; @@ -1053,7 +2227,7 @@ vteapp_window_update_geometry(VteappWindow* window) * since only then we know the CSD size. Only set the geometry when * anything has changed. */ - if (!options.no_geometry_hints && + if (options.geometry_hints && (cell_height != window->cached_cell_height || cell_width != window->cached_cell_width || chrome_width != window->cached_chrome_width || @@ -1095,19 +2269,48 @@ vteapp_window_update_geometry(VteappWindow* window) window->cached_cell_width, window->cached_cell_height, window->cached_chrome_width, window->cached_chrome_height, window->cached_csd_width, window->cached_csd_height); +#elif VTE_GTK == 4 + // FIXMEgtk4 there appears to be no way to do this with gtk4 ? maybe go to X/wayland + // directly to set the geometry hints? +#endif } +#include + static void vteapp_window_resize(VteappWindow* window) { - /* Don't do this for maximised or tiled windows. */ - auto win = gtk_widget_get_window(GTK_WIDGET(window)); - if (win != nullptr && - (gdk_window_get_state(win) & (GDK_WINDOW_STATE_MAXIMIZED | - GDK_WINDOW_STATE_FULLSCREEN | - GDK_WINDOW_STATE_TILED)) != 0) + /* Can't do this when not using geometry hints */ + if (!options.geometry_hints) return; + /* Don't do this for fullscreened, maximised, or tiled windows. */ +#if VTE_GTK == 3 + if (window->window_state & (GDK_WINDOW_STATE_MAXIMIZED | + GDK_WINDOW_STATE_FULLSCREEN | + GDK_WINDOW_STATE_TILED | +#if GTK_CHECK_VERSION(3,22,23) + GDK_WINDOW_STATE_TOP_TILED | + GDK_WINDOW_STATE_BOTTOM_TILED | + GDK_WINDOW_STATE_LEFT_TILED | + GDK_WINDOW_STATE_RIGHT_TILED | +#endif + 0)) + return; +#elif VTE_GTK == 4 + if (window->toplevel_state & (GDK_TOPLEVEL_STATE_MAXIMIZED | + GDK_TOPLEVEL_STATE_FULLSCREEN | + GDK_TOPLEVEL_STATE_TILED | + GDK_TOPLEVEL_STATE_TOP_TILED | + GDK_TOPLEVEL_STATE_BOTTOM_TILED | + GDK_TOPLEVEL_STATE_LEFT_TILED | + GDK_TOPLEVEL_STATE_RIGHT_TILED)) + return; +#endif /* VTE_GTK */ + +#if VTE_GTK == 3 + // FIXMEgtk4 + /* First, update the geometry hints, so that the cached_* members are up-to-date */ vteapp_window_update_geometry(window); @@ -1121,11 +2324,13 @@ vteapp_window_resize(VteappWindow* window) columns, rows, pixel_width, pixel_height); gtk_window_resize(GTK_WINDOW(window), pixel_width, pixel_height); +#endif /* VTE_GTK == 3 FIXMEgtk4 */ } static void vteapp_window_parse_geometry(VteappWindow* window) { +#if VTE_GTK == 3 /* First update the geometry hints, so that gtk_window_parse_geometry() * knows the char width/height and base size increments. */ @@ -1136,7 +2341,7 @@ vteapp_window_parse_geometry(VteappWindow* window) if (!rv) verbose_printerr("Failed to parse geometry spec \"%s\"\n", options.geometry); - else if (!options.no_geometry_hints) { + else if (options.geometry_hints) { /* After parse_geometry(), we can get the default size in * width/height increments, i.e. in grid size. */ @@ -1160,7 +2365,7 @@ vteapp_window_parse_geometry(VteappWindow* window) /* In GTK+ 3.0, the default size of a window comes from its minimum * size not its natural size, so we need to set the right default size * explicitly */ - if (!options.no_geometry_hints) { + if (options.geometry_hints) { /* Grid based */ gtk_window_set_default_geometry(GTK_WINDOW(window), vte_terminal_get_column_count(window->terminal), @@ -1170,6 +2375,9 @@ vteapp_window_parse_geometry(VteappWindow* window) vteapp_window_resize(window); } } +#elif VTE_GTK == 4 + // FIXMEgtk4 ???? +#endif /* VTE_GTK */ } static void @@ -1200,8 +2408,16 @@ window_spawn_cb(VteTerminal* terminal, if (error != nullptr) { verbose_printerr("Spawning failed: %s\n", error->message); - if (!options.keep) + auto msg = vte::glib::take_string(g_strdup_printf("Spawning failed: %s", error->message)); + if (options.keep) + vte_terminal_feed(window->terminal, msg.get(), -1); + else { +#if VTE_GTK == 3 gtk_widget_destroy(GTK_WIDGET(window)); +#elif VTE_GTK == 4 + gtk_window_destroy(GTK_WINDOW(window)); +#endif + } } } @@ -1211,18 +2427,23 @@ vteapp_window_launch_argv(VteappWindow* window, GError** error) { auto const spawn_flags = GSpawnFlags(G_SPAWN_SEARCH_PATH_FROM_ENVP | - (options.no_systemd_scope ? VTE_SPAWN_NO_SYSTEMD_SCOPE : 0) | + VTE_SPAWN_NO_PARENT_ENVV | + (options.systemd_scope ? 0 : VTE_SPAWN_NO_SYSTEMD_SCOPE) | (options.require_systemd_scope ? VTE_SPAWN_REQUIRE_SYSTEMD_SCOPE : 0)); - vte_terminal_spawn_async(window->terminal, - VTE_PTY_DEFAULT, - options.working_directory, - argv, - options.environment, - spawn_flags, - nullptr, nullptr, nullptr, /* child setup, data and destroy */ - 30 * 1000 /* 30s timeout */, - nullptr /* cancellable */, - window_spawn_cb, window); + auto fds = options.fds(); + auto map_fds = options.map_fds(); + vte_terminal_spawn_with_fds_async(window->terminal, + VTE_PTY_DEFAULT, + options.working_directory, + argv, + options.environment_for_spawn().get(), + fds.data(), fds.size(), + map_fds.data(), map_fds.size(), + spawn_flags, + nullptr, nullptr, nullptr, /* child setup, data and destroy */ + -1 /* default timeout of 30s */, + nullptr /* cancellable */, + window_spawn_cb, window); return true; } @@ -1268,18 +2489,21 @@ static bool vteapp_window_fork(VteappWindow* window, GError** error) { - auto pty = vte_pty_new_sync(VTE_PTY_DEFAULT, nullptr, error); - if (pty == nullptr) + auto pty = vte::glib::take_ref(vte_pty_new_sync(VTE_PTY_DEFAULT, nullptr, error)); + if (!pty) return false; auto pid = fork(); switch (pid) { - case -1: /* error */ - g_set_error(error, G_IO_ERROR, G_IO_ERROR_FAILED, "Error forking: %m"); + case -1: { /* error */ + auto errsv = vte::libc::ErrnoSaver{}; + g_set_error(error, G_IO_ERROR, g_io_error_from_errno(errsv), + "Error forking: %s", g_strerror(errsv)); return false; + } case 0: /* child */ { - vte_pty_child_setup(pty); + vte_pty_child_setup(pty.get()); for (auto i = 0; ; i++) { switch (i % 3) { @@ -1295,13 +2519,30 @@ vteapp_window_fork(VteappWindow* window, } } default: /* parent */ - vte_terminal_set_pty(window->terminal, pty); + vte_terminal_set_pty(window->terminal, pty.get()); vte_terminal_watch_child(window->terminal, pid); verbose_print("Child PID is %d (mine is %d).\n", (int)pid, (int)getpid()); break; } - g_object_unref(pty); + return true; +} + +static gboolean +tick_cb(VteappWindow* window) +{ + static int i = 0; + char buf[256]; + auto s = g_snprintf(buf, sizeof(buf), "%d\r\n", i++); + vte_terminal_feed(window->terminal, buf, s); + return G_SOURCE_CONTINUE; +} + +static bool +vteapp_window_tick(VteappWindow* window, + GError** error) +{ + g_timeout_add_seconds(1, (GSourceFunc) tick_cb, window); return true; } @@ -1315,10 +2556,12 @@ vteapp_window_launch(VteappWindow* window) rv = vteapp_window_launch_argv(window, options.exec_argv, error); else if (options.command != nullptr) rv = vteapp_window_launch_commandline(window, options.command, error); - else if (!options.no_shell) + else if (options.shell) rv = vteapp_window_launch_shell(window, error); - else + else if (options.pty) rv = vteapp_window_fork(window, error); + else + rv = vteapp_window_tick(window, error); if (!rv) verbose_printerr("Error launching: %s\n", error.message()); @@ -1332,19 +2575,37 @@ window_update_copy_sensitivity(VteappWindow* window) vte_terminal_get_has_selection(window->terminal)); } +static void +window_update_fullscreen_state(VteappWindow* window) +{ +#if VTE_GTK == 3 + auto const fullscreen = (window->window_state & GDK_WINDOW_STATE_FULLSCREEN) != 0; +#elif VTE_GTK == 4 + auto const fullscreen = (window->toplevel_state & GDK_TOPLEVEL_STATE_FULLSCREEN) != 0; +#endif + auto action = g_action_map_lookup_action(G_ACTION_MAP(window), "fullscreen"); + g_simple_action_set_state(G_SIMPLE_ACTION(action), g_variant_new_boolean (fullscreen)); +} + static void window_update_paste_sensitivity(VteappWindow* window) { + bool can_paste = false; + +#if VTE_GTK == 3 GdkAtom* targets; int n_targets; - bool can_paste = false; if (gtk_clipboard_wait_for_targets(window->clipboard, &targets, &n_targets)) { can_paste = gtk_targets_include_text(targets, n_targets); g_free(targets); } +#elif VTE_GTK == 4 + auto formats = gdk_clipboard_get_formats(window->clipboard); + can_paste = gdk_content_formats_contain_gtype(formats, G_TYPE_STRING); +#endif /* VTE_GTK */ - auto action = g_action_map_lookup_action(G_ACTION_MAP(window), "copy"); + auto action = g_action_map_lookup_action(G_ACTION_MAP(window), "paste"); g_simple_action_set_enabled(G_SIMPLE_ACTION(action), can_paste); } @@ -1368,10 +2629,15 @@ window_action_copy_match_cb(GSimpleAction* action, GVariant* parameter, void* data) { - VteappWindow* window = VTEAPP_WINDOW(data); - gsize len; - char const* str = g_variant_get_string(parameter, &len); + auto window = VTEAPP_WINDOW(data); + + auto len = size_t{}; + auto str = g_variant_get_string(parameter, &len); +#if VTE_GTK == 3 gtk_clipboard_set_text(window->clipboard, str, len); +#elif VTE_GTK == 4 + gdk_clipboard_set_text(window->clipboard, str); +#endif } static void @@ -1388,16 +2654,23 @@ window_action_reset_cb(GSimpleAction* action, GVariant* parameter, void* data) { - VteappWindow* window = VTEAPP_WINDOW(data); - bool clear; - GdkModifierType modifiers; + auto window = VTEAPP_WINDOW(data); + auto clear = false; if (parameter != nullptr) clear = g_variant_get_boolean(parameter); - else if (gtk_get_current_event_state(&modifiers)) + else { + auto modifiers = GdkModifierType{}; +#if VTE_GTK == 3 + if (!gtk_get_current_event_state(&modifiers)) + modifiers = GdkModifierType(0); +#elif VTE_GTK == 4 + // FIXMEgtk4! + modifiers = GdkModifierType(0); +#endif + clear = (modifiers & GDK_CONTROL_MASK) != 0; - else - clear = false; + } vte_terminal_reset(window->terminal, true, clear); } @@ -1411,7 +2684,6 @@ window_action_find_cb(GSimpleAction* action, gtk_toggle_button_set_active(window->find_button, true); } - static void window_action_fullscreen_state_cb (GSimpleAction *action, GVariant *state, @@ -1430,38 +2702,61 @@ window_action_fullscreen_state_cb (GSimpleAction *action, /* The window-state-changed callback will update the action's actual state */ } -static bool -vteapp_window_show_context_menu(VteappWindow* window, - guint button, - guint32 timestamp, - GdkEvent* event) +static void +window_setup_context_menu_cb(VteTerminal* terminal, + VteEventContext const* context, + VteappWindow* window) { - if (options.no_context_menu) - return false; + if (!options.context_menu) + return; - auto menu = g_menu_new(); - g_menu_append(menu, "_Copy", "win.copy::text"); - g_menu_append(menu, "Copy As _HTML", "win.copy::html"); + // context == nullptr when the menu is dismissed after being shown + if (!context) { + verbose_print("setup-context-menu reset\n"); + vte_terminal_set_context_menu_model(terminal, nullptr); + return; + } - if (event != nullptr) { - auto hyperlink = vte_terminal_hyperlink_check_event(window->terminal, event); - if (hyperlink != nullptr) { - verbose_print("Hyperlink: %s\n", hyperlink); - GVariant* target = g_variant_new_string(hyperlink); - auto item = g_menu_item_new("Copy _Hyperlink", nullptr); - g_menu_item_set_action_and_target_value(item, "win.copy-match", target); - g_menu_append_item(menu, item); - g_object_unref(item); + verbose_print("setup-context-menu\n"); + + auto menu = vte::glib::take_ref(g_menu_new()); + g_menu_append(menu.get(), "_Copy", "win.copy::text"); + g_menu_append(menu.get(), "Copy As _HTML", "win.copy::html"); + +#if VTE_GTK == 4 + double x, y; +#endif + if ( +#if VTE_GTK == 3 + auto const event = vte_event_context_get_event(context) +#elif VTE_GTK == 4 + vte_event_context_get_coordinates(context, &x, &y) +#endif // VTE_GTK + ) { +#if VTE_GTK == 3 + auto hyperlink = vte::glib::take_string(vte_terminal_hyperlink_check_event(window->terminal, event)); +#elif VTE_GTK == 4 + auto hyperlink = vte::glib::take_string(vte_terminal_check_hyperlink_at(window->terminal, x, y)); +#endif + if (hyperlink) { + verbose_print("Hyperlink: %s\n", hyperlink.get()); + auto target = g_variant_new_string(hyperlink.get()); /* floating */ + auto item = vte::glib::take_ref(g_menu_item_new("Copy _Hyperlink", nullptr)); + g_menu_item_set_action_and_target_value(item.get(), "win.copy-match", target); + g_menu_append_item(menu.get(), item.get()); } - auto match = vte_terminal_match_check_event(window->terminal, event, nullptr); - if (match != nullptr) { - verbose_print("Match: %s\n", match); - GVariant* target = g_variant_new_string(match); - auto item = g_menu_item_new("Copy _Match", nullptr); - g_menu_item_set_action_and_target_value(item, "win.copy-match", target); - g_menu_append_item(menu, item); - g_object_unref(item); +#if VTE_GTK == 3 + auto match = vte::glib::take_string(vte_terminal_match_check_event(window->terminal, event, nullptr)); +#elif VTE_GTK == 4 + auto match = vte::glib::take_string(vte_terminal_check_match_at(window->terminal, x, y, nullptr)); +#endif // VTE_GTK + if (match) { + verbose_print("Match: %s\n", match.get()); + auto target = g_variant_new_string(match.get()); /* floating */ + auto item = vte::glib::take_ref(g_menu_item_new("Copy _Match", nullptr)); + g_menu_item_set_action_and_target_value(item.get(), "win.copy-match", target); + g_menu_append_item(menu.get(), item.get()); } /* Test extra match API */ @@ -1471,63 +2766,49 @@ vteapp_window_show_context_menu(VteappWindow* window, auto error = vte::glib::Error{}; auto regex = compile_regex_for_match(extra_pattern, false, error); error.assert_no_error(); - vte_terminal_event_check_regex_simple(window->terminal, event, - ®ex, 1, 0, - &extra_match); + VteRegex* regexes[1] = {regex.get()}; +#if VTE_GTK == 3 + vte_terminal_event_check_regex_simple(window->terminal, event, + regexes, G_N_ELEMENTS(regexes), + 0, + &extra_match); +#elif VTE_GTK == 4 + vte_terminal_check_regex_simple_at(window->terminal, x, y, + regexes, G_N_ELEMENTS(regexes), + 0, + &extra_match); + +#endif // VTE_GTK if (extra_match != nullptr && - (extra_subst = vte_regex_substitute(regex, extra_match, "$2 $1", + (extra_subst = vte_regex_substitute(regex.get(), extra_match, "$2 $1", PCRE2_SUBSTITUTE_EXTENDED | PCRE2_SUBSTITUTE_GLOBAL, error)) == nullptr) { verbose_printerr("Substitution failed: %s\n", error.message()); } - vte_regex_unref(regex); - if (extra_match != nullptr) { if (extra_subst != nullptr) verbose_print("%s match: %s => %s\n", extra_pattern, extra_match, extra_subst); else verbose_print("%s match: %s\n", extra_pattern, extra_match); } - g_free(hyperlink); - g_free(match); g_free(extra_match); g_free(extra_subst); } - g_menu_append(menu, "_Paste", "win.paste"); + g_menu_append(menu.get(), "_Paste", "win.paste"); - if (window->fullscreen) - g_menu_append(menu, "_Fullscreen", "win.fullscreen"); +#if VTE_GTK == 3 + auto const fullscreen = (window->window_state & GDK_WINDOW_STATE_FULLSCREEN) != 0; +#elif VTE_GTK == 4 + auto const fullscreen = gtk_window_is_fullscreen(GTK_WINDOW(window)); +#endif // VTE_GTK + if (fullscreen) + g_menu_append(menu.get(), "_Fullscreen", "win.fullscreen"); - auto popup = gtk_menu_new_from_model(G_MENU_MODEL(menu)); - gtk_menu_attach_to_widget(GTK_MENU(popup), GTK_WIDGET(window->terminal), nullptr); - gtk_menu_popup(GTK_MENU(popup), nullptr, nullptr, nullptr, nullptr, button, timestamp); - if (button == 0) - gtk_menu_shell_select_first(GTK_MENU_SHELL(popup), true); - - return true; -} - -static gboolean -window_popup_menu_cb(GtkWidget* widget, - VteappWindow* window) -{ - return vteapp_window_show_context_menu(window, 0, gtk_get_current_event_time(), nullptr); -} - -static gboolean -window_button_press_cb(GtkWidget* widget, - GdkEventButton* event, - VteappWindow* window) -{ - if (event->button != GDK_BUTTON_SECONDARY) - return false; - - return vteapp_window_show_context_menu(window, event->button, event->time, - reinterpret_cast(event)); + vte_terminal_set_context_menu_model(terminal, G_MENU_MODEL(menu.get())); } static void @@ -1552,16 +2833,22 @@ window_child_exited_cb(VteTerminal* term, verbose_printerr("Child terminated\n"); if (options.output_filename != nullptr) { - auto file = g_file_new_for_commandline_arg(options.output_filename); + auto file = vte::glib::take_ref + (g_file_new_for_commandline_arg(options.output_filename)); auto error = vte::glib::Error{}; - auto stream = g_file_replace(file, nullptr, false, G_FILE_CREATE_NONE, nullptr, error); - g_object_unref(file); - if (stream != nullptr) { + auto stream = vte::glib::take_ref(g_file_replace(file.get(), + nullptr, + false, + G_FILE_CREATE_NONE, + nullptr, + error)); + + if (stream) { vte_terminal_write_contents_sync(window->terminal, - G_OUTPUT_STREAM(stream), + G_OUTPUT_STREAM(stream.get()), VTE_WRITE_DEFAULT, - nullptr, error); - g_object_unref(stream); + nullptr, + error); } if (error.error()) { @@ -1575,9 +2862,15 @@ window_child_exited_cb(VteTerminal* term, if (options.keep) return; +#if VTE_GTK == 3 gtk_widget_destroy(GTK_WIDGET(window)); +#elif VTE_GTK == 4 + gtk_window_destroy(GTK_WINDOW(window)); +#endif } +#if VTE_GTK == 3 + static void window_clipboard_owner_change_cb(GtkClipboard* clipboard, GdkEvent* event, @@ -1586,6 +2879,18 @@ window_clipboard_owner_change_cb(GtkClipboard* clipboard, window_update_paste_sensitivity(window); } +#elif VTE_GTK == 4 + +static void +window_clipboard_formats_notify_cb(GdkClipboard* clipboard, + GParamSpec* pspec, + VteappWindow* window) +{ + window_update_paste_sensitivity(window); +} + +#endif /* VTE_GTK */ + static void window_decrease_font_size_cb(VteTerminal* terminal, VteappWindow* window) @@ -1607,7 +2912,12 @@ window_deiconify_window_cb(VteTerminal* terminal, if (!options.allow_window_ops) return; +#if VTE_GTK == 3 gtk_window_deiconify(GTK_WINDOW(window)); +#elif VTE_GTK == 4 + auto toplevel = GDK_TOPLEVEL(gtk_native_get_surface(GTK_NATIVE(window))); + gdk_toplevel_present(toplevel, nullptr); // FIXMEgtk4 nullptr not allowed +#endif } static void @@ -1617,26 +2927,20 @@ window_iconify_window_cb(VteTerminal* terminal, if (!options.allow_window_ops) return; +#if VTE_GTK == 3 gtk_window_iconify(GTK_WINDOW(window)); -} - -static void -window_icon_title_changed_cb(VteTerminal* terminal, - VteappWindow* window) -{ - if (!options.icon_title) - return; - - gdk_window_set_icon_name(gtk_widget_get_window(GTK_WIDGET(window)), - vte_terminal_get_icon_title(window->terminal)); +#elif VTE_GTK == 4 + auto toplevel = GDK_TOPLEVEL(gtk_native_get_surface(GTK_NATIVE(window))); + gdk_toplevel_minimize(toplevel); +#endif } static void window_window_title_changed_cb(VteTerminal* terminal, VteappWindow* window) { - gtk_window_set_title(GTK_WINDOW(window), - vte_terminal_get_window_title(window->terminal)); + auto const title = vte_terminal_get_window_title(window->terminal); + gtk_window_set_title(GTK_WINDOW(window), title && title[0] ? title : "Terminal"); } static void @@ -1648,7 +2952,12 @@ window_lower_window_cb(VteTerminal* terminal, if (!gtk_widget_get_realized(GTK_WIDGET(window))) return; +#if VTE_GTK == 3 gdk_window_lower(gtk_widget_get_window(GTK_WIDGET(window))); +#elif VTE_GTK == 4 + auto toplevel = GDK_TOPLEVEL(gtk_native_get_surface(GTK_NATIVE(window))); + gdk_toplevel_lower(toplevel); +#endif } static void @@ -1660,7 +2969,12 @@ window_raise_window_cb(VteTerminal* terminal, if (!gtk_widget_get_realized(GTK_WIDGET(window))) return; +#if VTE_GTK == 3 gdk_window_raise(gtk_widget_get_window(GTK_WIDGET(window))); +#elif VTE_GTK == 4 + auto toplevel = GDK_TOPLEVEL(gtk_native_get_surface(GTK_NATIVE(window))); + gdk_toplevel_present(toplevel, nullptr); // FIXMEgtk4 gdk_toplevel_raise() doesn't exist?? +#endif } static void @@ -1692,9 +3006,26 @@ window_move_window_cb(VteTerminal* terminal, if (!options.allow_window_ops) return; +#if VTE_GTK == 3 gtk_window_move(GTK_WINDOW(window), x, y); +#elif VTE_GTK == 4 + // FIXMEgtk4 +#endif } +#if VTE_GTK == 4 + +static void +window_toplevel_notify_state_cb(GdkToplevel* toplevel, + GParamSpec* pspec, + VteappWindow* window) +{ + window->toplevel_state = gdk_toplevel_get_state(toplevel); + window_update_fullscreen_state(window); +} + +#endif /* VTE_GTK == 4 */ + static void window_notify_cb(GObject* object, GParamSpec* pspec, @@ -1785,11 +3116,18 @@ vteapp_window_constructed(GObject *object) G_OBJECT_CLASS(vteapp_window_parent_class)->constructed(object); - gtk_window_set_title(GTK_WINDOW(window), "Terminal"); + gtk_window_set_title(GTK_WINDOW(window), + options.title && options.title[0] ? options.title : "Terminal"); + + if (!options.decorations) + gtk_window_set_decorated(GTK_WINDOW(window), false); /* Create terminal and connect scrollbar */ window->terminal = reinterpret_cast(vteapp_terminal_new()); + gtk_widget_set_hexpand(GTK_WIDGET(window->terminal), true); + gtk_widget_set_vexpand(GTK_WIDGET(window->terminal), true); + auto margin = options.extra_margin; if (margin >= 0) { gtk_widget_set_margin_start(GTK_WIDGET(window->terminal), margin); @@ -1798,10 +3136,21 @@ vteapp_window_constructed(GObject *object) gtk_widget_set_margin_bottom(GTK_WIDGET(window->terminal), margin); } - gtk_range_set_adjustment(GTK_RANGE(window->scrollbar), - gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(window->terminal))); - if (options.no_scrollbar) { + if (options.scrollbar && !options.use_scrolled_window) { + auto vadj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(window->terminal)); +#if VTE_GTK == 3 + gtk_range_set_adjustment(GTK_RANGE(window->scrollbar), vadj); +#elif VTE_GTK == 4 + gtk_scrollbar_set_adjustment(GTK_SCROLLBAR(window->scrollbar), vadj); +#endif + } + + if (!options.scrollbar || options.use_scrolled_window) { +#if VTE_GTK == 3 gtk_widget_destroy(GTK_WIDGET(window->scrollbar)); +#elif VTE_GTK == 4 + gtk_grid_remove(GTK_GRID(window->window_grid), GTK_WIDGET(window->scrollbar)); +#endif window->scrollbar = nullptr; } @@ -1819,44 +3168,58 @@ vteapp_window_constructed(GObject *object) g_action_map_add_action_entries(map, entries, G_N_ELEMENTS(entries), window); /* Property actions */ - auto action = g_property_action_new("input-enabled", window->terminal, "input-enabled"); - g_action_map_add_action(map, G_ACTION(action)); - g_object_unref(action); - g_signal_connect(action, "notify::state", G_CALLBACK(window_input_enabled_state_cb), window); + auto action = vte::glib::take_ref + (g_property_action_new("input-enabled", window->terminal, "input-enabled")); + g_action_map_add_action(map, G_ACTION(action.get())); + g_signal_connect(action.get(), "notify::state", G_CALLBACK(window_input_enabled_state_cb), window); + +#if VTE_GTK == 4 + auto gear_popover = gtk_menu_button_get_popover(GTK_MENU_BUTTON(window->gear_button)); + gtk_widget_set_halign(GTK_WIDGET(gear_popover), GTK_ALIGN_END); +#endif /* Find */ window->search_popover = vteapp_search_popover_new(window->terminal, GTK_WIDGET(window->find_button)); + g_signal_connect(window->search_popover, "closed", G_CALLBACK(window_search_popover_closed_cb), window); g_signal_connect(window->find_button, "toggled", G_CALLBACK(window_find_button_toggled_cb), window); /* Clipboard */ +#if VTE_GTK == 3 window->clipboard = gtk_widget_get_clipboard(GTK_WIDGET(window), GDK_SELECTION_CLIPBOARD); g_signal_connect(window->clipboard, "owner-change", G_CALLBACK(window_clipboard_owner_change_cb), window); +#elif VTE_GTK == 4 + window->clipboard = gtk_widget_get_clipboard(GTK_WIDGET(window)); + g_signal_connect(window->clipboard, "notify::formats", G_CALLBACK(window_clipboard_formats_notify_cb), window); +#endif /* VTE_GTK */ /* Set ARGB visual */ if (options.transparency_percent >= 0) { - if (!options.no_argb_visual) { +#if VTE_GTK == 3 + if (options.argb_visual) { auto screen = gtk_widget_get_screen(GTK_WIDGET(window)); auto visual = gdk_screen_get_rgba_visual(screen); if (visual != nullptr) gtk_widget_set_visual(GTK_WIDGET(window), visual); - } + } /* Without this transparency doesn't work; see bug #729884. */ gtk_widget_set_app_paintable(GTK_WIDGET(window), true); + +#elif VTE_GTK == 4 + // FIXMEgtk4 +#endif /* VTE_GTK == 3 */ } /* Signals */ - g_signal_connect(window->terminal, "popup-menu", G_CALLBACK(window_popup_menu_cb), window); - g_signal_connect(window->terminal, "button-press-event", G_CALLBACK(window_button_press_cb), window); + g_signal_connect(window->terminal, "setup-context-menu", G_CALLBACK(window_setup_context_menu_cb), window); g_signal_connect(window->terminal, "char-size-changed", G_CALLBACK(window_cell_size_changed_cb), window); g_signal_connect(window->terminal, "child-exited", G_CALLBACK(window_child_exited_cb), window); g_signal_connect(window->terminal, "decrease-font-size", G_CALLBACK(window_decrease_font_size_cb), window); g_signal_connect(window->terminal, "deiconify-window", G_CALLBACK(window_deiconify_window_cb), window); - g_signal_connect(window->terminal, "icon-title-changed", G_CALLBACK(window_icon_title_changed_cb), window); g_signal_connect(window->terminal, "iconify-window", G_CALLBACK(window_iconify_window_cb), window); g_signal_connect(window->terminal, "increase-font-size", G_CALLBACK(window_increase_font_size_cb), window); g_signal_connect(window->terminal, "lower-window", G_CALLBACK(window_lower_window_cb), window); @@ -1872,11 +3235,13 @@ vteapp_window_constructed(GObject *object) g_signal_connect(window->terminal, "notify", G_CALLBACK(window_notify_cb), window); /* Settings */ - if (options.no_double_buffer) { +#if VTE_GTK == 3 + if (!options.double_buffer) { G_GNUC_BEGIN_IGNORE_DEPRECATIONS; gtk_widget_set_double_buffered(GTK_WIDGET(window->terminal), false); G_GNUC_END_IGNORE_DEPRECATIONS; } +#endif /* VTE_GTK == 3 */ if (options.encoding != nullptr) { auto error = vte::glib::Error{}; @@ -1887,29 +3252,38 @@ vteapp_window_constructed(GObject *object) if (options.word_char_exceptions != nullptr) vte_terminal_set_word_char_exceptions(window->terminal, options.word_char_exceptions); - vte_terminal_set_allow_hyperlink(window->terminal, !options.no_hyperlink); + vte_terminal_set_allow_hyperlink(window->terminal, options.hyperlink); vte_terminal_set_audible_bell(window->terminal, options.audible_bell); - vte_terminal_set_allow_bold(window->terminal, !options.no_bold); + vte_terminal_set_allow_bold(window->terminal, options.bold); vte_terminal_set_bold_is_bright(window->terminal, options.bold_is_bright); vte_terminal_set_cell_height_scale(window->terminal, options.cell_height_scale); vte_terminal_set_cell_width_scale(window->terminal, options.cell_width_scale); vte_terminal_set_cjk_ambiguous_width(window->terminal, options.cjk_ambiguous_width); vte_terminal_set_cursor_blink_mode(window->terminal, options.cursor_blink_mode); vte_terminal_set_cursor_shape(window->terminal, options.cursor_shape); - vte_terminal_set_enable_bidi(window->terminal, !options.no_bidi); - vte_terminal_set_enable_shaping(window->terminal, !options.no_shaping); + vte_terminal_set_enable_bidi(window->terminal, options.bidi); + vte_terminal_set_enable_shaping(window->terminal, options.shaping); + vte_terminal_set_enable_sixel(window->terminal, options.sixel); + vte_terminal_set_enable_fallback_scrolling(window->terminal, options.fallback_scrolling); vte_terminal_set_mouse_autohide(window->terminal, true); - vte_terminal_set_rewrap_on_resize(window->terminal, !options.no_rewrap); - vte_terminal_set_scroll_on_output(window->terminal, false); - vte_terminal_set_scroll_on_keystroke(window->terminal, true); + vte_terminal_set_rewrap_on_resize(window->terminal, options.rewrap); + vte_terminal_set_scroll_on_insert(window->terminal, options.scroll_on_insert); + vte_terminal_set_scroll_on_output(window->terminal, options.scroll_on_output); + vte_terminal_set_scroll_on_keystroke(window->terminal, options.scroll_on_keystroke); + vte_terminal_set_scroll_unit_is_pixels(window->terminal, options.scroll_unit_is_pixels); vte_terminal_set_scrollback_lines(window->terminal, options.scrollback_lines); vte_terminal_set_text_blink_mode(window->terminal, options.text_blink_mode); + if (options.xalign != VteAlign(-1)) + vte_terminal_set_xalign(window->terminal, options.xalign); + if (options.yalign != VteAlign(-1)) + vte_terminal_set_yalign(window->terminal, options.yalign); + vte_terminal_set_xfill(window->terminal, options.xfill); + vte_terminal_set_yfill(window->terminal, options.yfill); /* Style */ if (options.font_string != nullptr) { - auto desc = pango_font_description_from_string(options.font_string); - vte_terminal_set_font(window->terminal, desc); - pango_font_description_free(desc); + auto desc = vte::take_freeable(pango_font_description_from_string(options.font_string)); + vte_terminal_set_font(window->terminal, desc.get()); } auto fg = options.get_color_fg(); @@ -1928,14 +3302,47 @@ vteapp_window_constructed(GObject *object) gtk_widget_set_opacity (GTK_WIDGET (window), options.get_alpha()); /* Dingus */ - if (!options.no_builtin_dingus) + if (options.builtin_dingus) vteapp_window_add_dingus(window, builtin_dingus); if (options.dingus != nullptr) vteapp_window_add_dingus(window, options.dingus); /* Done! */ - gtk_box_pack_start(GTK_BOX(window->window_box), GTK_WIDGET(window->terminal), - true, true, 0); + if (options.use_scrolled_window) { +#if VTE_GTK == 3 + auto sw = gtk_scrolled_window_new(nullptr, nullptr); + gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(window->terminal)); +#elif VTE_GTK == 4 + auto sw = gtk_scrolled_window_new(); + gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(sw), GTK_WIDGET(window->terminal)); +#endif /* VTE_GTK */ + gtk_scrolled_window_set_kinetic_scrolling(GTK_SCROLLED_WINDOW(sw), + options.kinetic_scrolling); + + auto vpolicy = GTK_POLICY_ALWAYS; + if (!options.scrollbar) + vpolicy = GTK_POLICY_EXTERNAL; + else if (options.overlay_scrollbar) + vpolicy = GTK_POLICY_AUTOMATIC; + + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), + GTK_POLICY_NEVER, // hpolicy + vpolicy); + gtk_scrolled_window_set_overlay_scrolling(GTK_SCROLLED_WINDOW(sw), + options.overlay_scrollbar); + + gtk_grid_attach(GTK_GRID(window->window_grid), sw, + 0, 0, 1, 1); + gtk_widget_set_halign(GTK_WIDGET(sw), GTK_ALIGN_FILL); + gtk_widget_set_valign(GTK_WIDGET(sw), GTK_ALIGN_FILL); + gtk_widget_show(sw); + } else { + gtk_grid_attach(GTK_GRID(window->window_grid), GTK_WIDGET(window->terminal), + 0, 0, 1, 1); + } + + gtk_widget_set_halign(GTK_WIDGET(window->terminal), GTK_ALIGN_FILL); + gtk_widget_set_valign(GTK_WIDGET(window->terminal), GTK_ALIGN_FILL); gtk_widget_show(GTK_WIDGET(window->terminal)); window_update_paste_sensitivity(window); @@ -1954,16 +3361,33 @@ vteapp_window_dispose(GObject *object) if (window->clipboard != nullptr) { g_signal_handlers_disconnect_by_func(window->clipboard, +#if VTE_GTK == 3 (void*)window_clipboard_owner_change_cb, +#elif VTE_GTK == 4 + (void*)window_clipboard_formats_notify_cb, +#endif window); window->clipboard = nullptr; } if (window->search_popover != nullptr) { +#if VTE_GTK == 3 gtk_widget_destroy(window->search_popover); +#elif VTE_GTK == 4 + gtk_widget_unparent(window->search_popover); // this destroys the popover +#endif /* VTE_GTK */ window->search_popover = nullptr; } + // Disconnect all signal handlers from the terminal + g_signal_handlers_disconnect_matched(window->terminal, + GSignalMatchType(G_SIGNAL_MATCH_DATA), + 0, // signal id + 0, // detail quark + nullptr, // closure + nullptr, // func + window); + G_OBJECT_CLASS(vteapp_window_parent_class)->dispose(object); } @@ -1975,9 +3399,36 @@ vteapp_window_realize(GtkWidget* widget) /* Now we can know the CSD size, and thus apply the geometry. */ VteappWindow* window = VTEAPP_WINDOW(widget); verbose_print("VteappWindow::realize\n"); + +#if VTE_GTK == 3 + auto win = gtk_widget_get_window(GTK_WIDGET(window)); + window->window_state = gdk_window_get_state(win); +#elif VTE_GTK == 4 + auto surface = gtk_native_get_surface(GTK_NATIVE(widget)); + window->toplevel_state = gdk_toplevel_get_state(GDK_TOPLEVEL(surface)); + g_signal_connect(surface, "notify::state", + G_CALLBACK(window_toplevel_notify_state_cb), window); +#endif + + window_update_fullscreen_state(window); + vteapp_window_resize(window); } +static void +vteapp_window_unrealize(GtkWidget* widget) +{ +#if VTE_GTK == 4 + auto window = VTEAPP_WINDOW(widget); + auto toplevel = gtk_native_get_surface(GTK_NATIVE(widget)); + g_signal_handlers_disconnect_by_func(toplevel, + (void*)window_toplevel_notify_state_cb, + window); +#endif + + GTK_WIDGET_CLASS(vteapp_window_parent_class)->unrealize(widget); +} + static void vteapp_window_show(GtkWidget* widget) { @@ -1989,6 +3440,8 @@ vteapp_window_show(GtkWidget* widget) vteapp_window_resize(window); } +#if VTE_GTK == 3 + static void vteapp_window_style_updated(GtkWidget* widget) { @@ -2004,18 +3457,17 @@ static gboolean vteapp_window_state_event (GtkWidget* widget, GdkEventWindowState* event) { - VteappWindow* window = VTEAPP_WINDOW(widget); + auto window = VTEAPP_WINDOW(widget); + window->window_state = event->new_window_state; - if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) { - window->fullscreen = (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) != 0; - - auto action = reinterpret_cast(g_action_map_lookup_action(G_ACTION_MAP(window), "fullscreen")); - g_simple_action_set_state(action, g_variant_new_boolean (window->fullscreen)); - } + if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) + window_update_fullscreen_state(window); return GTK_WIDGET_CLASS(vteapp_window_parent_class)->window_state_event(widget, event); } +#endif /* VTE_GTK == 3 */ + static void vteapp_window_class_init(VteappWindowClass* klass) { @@ -2025,15 +3477,21 @@ vteapp_window_class_init(VteappWindowClass* klass) GtkWidgetClass* widget_class = GTK_WIDGET_CLASS(klass); widget_class->realize = vteapp_window_realize; + widget_class->unrealize = vteapp_window_unrealize; widget_class->show = vteapp_window_show; + +#if VTE_GTK == 3 widget_class->style_updated = vteapp_window_style_updated; widget_class->window_state_event = vteapp_window_state_event; +#elif VTE_GTK == 4 + // FIXMEgtk4 window state event +#endif gtk_widget_class_set_template_from_resource(widget_class, "/org/gnome/vte/app/ui/window.ui"); - gtk_widget_class_bind_template_child(widget_class, VteappWindow, window_box); + gtk_widget_class_bind_template_child(widget_class, VteappWindow, window_grid); gtk_widget_class_bind_template_child(widget_class, VteappWindow, scrollbar); - /* gtk_widget_class_bind_template_child(widget_class, VteappWindow, notification_box); */ + /* gtk_widget_class_bind_template_child(widget_class, VteappWindow, notification_grid); */ gtk_widget_class_bind_template_child(widget_class, VteappWindow, readonly_emblem); /* gtk_widget_class_bind_template_child(widget_class, VteappWindow, copy_button); */ /* gtk_widget_class_bind_template_child(widget_class, VteappWindow, paste_button); */ @@ -2046,6 +3504,9 @@ vteapp_window_new(GApplication* app) { return reinterpret_cast(g_object_new(VTEAPP_TYPE_WINDOW, "application", app, +#if VTE_GTK == 4 + "handle-menubar-accel", false, +#endif nullptr)); } @@ -2063,6 +3524,8 @@ typedef struct _VteappApplicationClass VteappApplicationClass; struct _VteappApplication { GtkApplication parent; + + guint input_source; }; struct _VteappApplicationClass { @@ -2090,21 +3553,155 @@ app_action_close_cb(GSimpleAction* action, { GtkApplication* application = GTK_APPLICATION(data); auto window = gtk_application_get_active_window(application); - if (window != nullptr) - gtk_widget_destroy(GTK_WIDGET(window)); + if (window == nullptr) + return; + +#if VTE_GTK == 3 + gtk_widget_destroy(GTK_WIDGET(window)); +#elif VTE_GTK == 4 + gtk_window_destroy(GTK_WINDOW(window)); +#endif } +static gboolean +app_stdin_readable_cb(int fd, + GIOCondition condition, + VteappApplication* application) +{ + auto eos = bool{false}; + if (condition & G_IO_IN) { + auto window = gtk_application_get_active_window(GTK_APPLICATION(application)); + auto terminal = VTEAPP_IS_WINDOW(window) ? VTEAPP_WINDOW(window)->terminal : nullptr; + + char buf[4096]; + auto r = int{0}; + do { + errno = 0; + r = read(fd, buf, sizeof(buf)); + if (r > 0 && terminal != nullptr) + vte_terminal_feed(terminal, buf, r); + } while (r > 0 || errno == EINTR); + + if (r == 0) + eos = true; + } + + if (eos) { + application->input_source = 0; + return G_SOURCE_REMOVE; + } + + return G_SOURCE_CONTINUE; +} + +#if VTE_GTK == 3 + +static void +app_clipboard_targets_received_cb(GtkClipboard* clipboard, + GdkAtom* targets, + int n_targets, + VteappApplication* application) +{ + verbose_print("Clipboard has %d targets:", n_targets); + + for (auto i = 0; i < n_targets; ++i) { + auto atom_name = vte::glib::take_string(gdk_atom_name(targets[i])); + verbose_print(" %s", atom_name.get()); + } + verbose_print("\n"); +} + +static void +app_clipboard_owner_change_cb(GtkClipboard* clipboard, + GdkEvent* event G_GNUC_UNUSED, + VteappApplication* application) +{ + verbose_print("Clipboard owner-change, requesting targets\n"); + + /* We can do this without holding a reference to @application since + * the application lives as long as the process. + */ + gtk_clipboard_request_targets(clipboard, + (GtkClipboardTargetsReceivedFunc)app_clipboard_targets_received_cb, + application); +} + +#elif VTE_GTK == 4 + +static void +app_clipboard_changed_cb(GdkClipboard* clipboard, + VteappApplication* application) +{ + auto formats = gdk_clipboard_get_formats(clipboard); + auto str = vte::glib::take_string(gdk_content_formats_to_string(formats)); + + verbose_print("Clipboard owner changed, targets now %s\n", str.get()); +} + +#endif /* VTE_GTK */ + G_DEFINE_TYPE(VteappApplication, vteapp_application, GTK_TYPE_APPLICATION) static void vteapp_application_init(VteappApplication* application) { g_object_set(gtk_settings_get_default(), - "gtk-enable-mnemonics", FALSE, "gtk-enable-accels", FALSE, +#if VTE_GTK == 3 + "gtk-enable-mnemonics", FALSE, /* Make gtk+ CSD not steal F10 from the terminal */ "gtk-menu-bar-accel", nullptr, +#endif nullptr); + + if (options.css) { +#if VTE_GTK == 3 + gtk_style_context_add_provider_for_screen(gdk_screen_get_default (), + GTK_STYLE_PROVIDER(options.css.get()), + GTK_STYLE_PROVIDER_PRIORITY_USER); +#elif VTE_GTK == 4 + gtk_style_context_add_provider_for_display(gdk_display_get_default (), + GTK_STYLE_PROVIDER(options.css.get()), + GTK_STYLE_PROVIDER_PRIORITY_USER); +#endif + } + + if (options.feed_stdin) { + g_unix_set_fd_nonblocking(STDIN_FILENO, true, nullptr); + application->input_source = g_unix_fd_add(STDIN_FILENO, + GIOCondition(G_IO_IN | G_IO_HUP | G_IO_ERR), + (GUnixFDSourceFunc)app_stdin_readable_cb, + application); + } + + if (options.track_clipboard_targets) { +#if VTE_GTK == 3 + auto clipboard = gtk_clipboard_get_for_display(gdk_display_get_default(), + GDK_SELECTION_CLIPBOARD); + app_clipboard_owner_change_cb(clipboard, nullptr, application); + g_signal_connect(clipboard, "owner-change", + G_CALLBACK(app_clipboard_owner_change_cb), application); + +#elif VTE_GTK == 4 + auto clipboard = gdk_display_get_clipboard(gdk_display_get_default()); + app_clipboard_changed_cb(clipboard, application); + g_signal_connect(clipboard, "changed", + G_CALLBACK(app_clipboard_changed_cb), application); +#endif /* VTE_GTK */ + } +} + +static void +vteapp_application_dispose(GObject* object) +{ + VteappApplication* application = VTEAPP_APPLICATION(object); + + if (application->input_source != 0) { + g_source_remove(application->input_source); + application->input_source = 0; + } + + G_OBJECT_CLASS(vteapp_application_parent_class)->dispose(object); } static void @@ -2134,6 +3731,9 @@ vteapp_application_activate(GApplication* application) static void vteapp_application_class_init(VteappApplicationClass* klass) { + GObjectClass* object_class = G_OBJECT_CLASS(klass); + object_class->dispose = vteapp_application_dispose; + GApplicationClass* application_class = G_APPLICATION_CLASS(klass); application_class->startup = vteapp_application_startup; application_class->activate = vteapp_application_activate; @@ -2180,18 +3780,37 @@ main(int argc, return EXIT_SUCCESS; } +#if VTE_GTK == 3 if (options.debug) gdk_window_set_debug_updates(true); -#ifdef VTE_DEBUG +#endif /* VTE_GTK == 3 */ + +#if VTE_DEBUG if (options.test_mode) { vte_set_test_flags(VTE_TEST_FLAGS_ALL); options.allow_window_ops = true; } #endif - auto app = vteapp_application_new(); - auto rv = g_application_run(app, 0, nullptr); - g_object_unref(app); + auto reset_termios = bool{false}; + struct termios saved_tcattr; + if (options.feed_stdin && isatty(STDIN_FILENO)) { + /* Put terminal in raw mode */ + + struct termios tcattr; + if (tcgetattr(STDIN_FILENO, &tcattr) == 0) { + saved_tcattr = tcattr; + cfmakeraw(&tcattr); + if (tcsetattr(STDIN_FILENO, TCSANOW, &tcattr) == 0) + reset_termios = true; + } + } + + auto app = vte::glib::take_ref(vteapp_application_new()); + auto rv = g_application_run(app.get(), 0, nullptr); + + if (reset_termios) + tcsetattr(STDIN_FILENO, TCSANOW, &saved_tcattr); return rv; } diff --git a/src/app/appmenu.ui b/src/app/appmenu-gtk3.ui similarity index 93% rename from src/app/appmenu.ui rename to src/app/appmenu-gtk3.ui index f43a086..1883aca 100644 --- a/src/app/appmenu.ui +++ b/src/app/appmenu-gtk3.ui @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . --> diff --git a/src/app/appmenu-gtk4.ui b/src/app/appmenu-gtk4.ui new file mode 100644 index 0000000..ac64ebb --- /dev/null +++ b/src/app/appmenu-gtk4.ui @@ -0,0 +1,33 @@ + + + + +
+ + _New Terminal + app.new + +
+
+ + _Close + app.close + +
+
+
diff --git a/src/app/meson.build b/src/app/meson.build index 1bed916..857f7f1 100644 --- a/src/app/meson.build +++ b/src/app/meson.build @@ -1,29 +1,23 @@ # Copyright © 2018, 2019 Iñigo Martínez # Copyright © 2019 Christian Persch # -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. # -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser -# General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this library. If not, see . -app_sources = glib_glue_sources + files( +app_sources = config_sources + debug_sources + glib_glue_sources + libc_glue_sources + pango_glue_sources + pcre2_glue_sources + refptr_sources + std_glue_sources + vte_glue_sources + files( 'app.cc', ) -app_resource_data = files( - 'appmenu.ui', - 'search-popover.ui', - 'window.ui', -) - app_common_cppflags = [ '-DG_LOG_DOMAIN="VTE"', '-DLOCALEDIR="@0@"'.format(vte_prefix / vte_localedir), @@ -36,23 +30,58 @@ app_common_deps = [ if get_option('gtk3') + app_gtk3_resource_data = files( + 'appmenu-gtk3.ui', + 'search-popover-gtk3.ui', + 'window-gtk3.ui', + ) + app_gtk3_resource_sources = gnome.compile_resources( - 'resources.cc', - 'app.gresource.xml', + 'resources-gtk3.cc', + 'app-gtk3.gresource.xml', c_name: 'app', - dependencies: app_resource_data, + dependencies: app_gtk3_resource_data, ) app_gtk3_sources = app_sources + app_gtk3_resource_sources - app_gtk3_cppflags = app_common_cppflags + gtk3_version_cppflags + app_gtk3_cppflags = app_common_cppflags + gtk3_version_cppflags + ['-DVTE_GTK=3',] app_gtk3_deps = app_common_deps + [libvte_gtk3_dep] app_gtk3 = executable( - 'vte-' + vte_gtk3_api_version, + 'vte-' + vte_api_version, app_gtk3_sources, dependencies: app_gtk3_deps, cpp_args: app_gtk3_cppflags, include_directories: top_inc, - install: true, + install: not meson.is_subproject(), + ) +endif + +if get_option('gtk4') + + app_gtk4_resource_data = files( + 'appmenu-gtk4.ui', + 'search-popover-gtk4.ui', + 'window-gtk4.ui', + ) + + app_gtk4_resource_sources = gnome.compile_resources( + 'resources-gtk4.cc', + 'app-gtk4.gresource.xml', + c_name: 'app', + dependencies: app_gtk4_resource_data, + ) + + app_gtk4_sources = app_sources + [app_gtk4_resource_sources,] + app_gtk4_cppflags = app_common_cppflags + gtk4_version_cppflags + ['-DVTE_GTK=4',] + app_gtk4_deps = app_common_deps + [libvte_gtk4_dep] + + app_gtk4 = executable( + 'vte-' + vte_api_version + '-gtk4', + app_gtk4_sources, + dependencies: app_gtk4_deps, + cpp_args: app_gtk4_cppflags, + include_directories: top_inc, + install: not meson.is_subproject(), ) endif diff --git a/src/app/search-popover.ui b/src/app/search-popover-gtk3.ui similarity index 99% rename from src/app/search-popover.ui rename to src/app/search-popover-gtk3.ui index 0ecec70..fbad2d0 100644 --- a/src/app/search-popover.ui +++ b/src/app/search-popover-gtk3.ui @@ -1,5 +1,4 @@ - diff --git a/src/app/search-popover-gtk4.ui b/src/app/search-popover-gtk4.ui new file mode 100644 index 0000000..0d6f77c --- /dev/null +++ b/src/app/search-popover-gtk4.ui @@ -0,0 +1,159 @@ + + + + + + diff --git a/src/app/window.ui b/src/app/window-gtk3.ui similarity index 88% rename from src/app/window.ui rename to src/app/window-gtk3.ui index 0aea16e..b7bdb01 100644 --- a/src/app/window.ui +++ b/src/app/window-gtk3.ui @@ -1,5 +1,4 @@ - @@ -75,9 +74,13 @@ vte-terminal utilities-terminal - + True False + 0 + 0 + True + True @@ -88,18 +91,18 @@ vertical False 0 + False + True - False - True - end - 1 + 1 + 0 - + True False True @@ -191,22 +194,25 @@ - + True False - vertical - 6 + 6 + 6 + False + True False Read-only emblem-readonly True + False + False - False - True - 0 + 0 + 0 diff --git a/src/app/window-gtk4.ui b/src/app/window-gtk4.ui new file mode 100644 index 0000000..12ad26c --- /dev/null +++ b/src/app/window-gtk4.ui @@ -0,0 +1,176 @@ + + + + + +
+ + _New Terminal + app.new + +
+
+ + _Copy + win.copy + text + + + Copy As _HTML + win.copy + html + + + _Paste + win.paste + +
+
+ + _Find… + win.find + +
+
+ + _Reset + win.reset + false + + + Reset and Cl_ear + win.reset + true + + + _Input enabled + win.input-enabled + +
+
+ + _Fullscreen + win.fullscreen + +
+
+ +
diff --git a/src/attr.hh b/src/attr.hh index d3273af..e47151b 100644 --- a/src/attr.hh +++ b/src/attr.hh @@ -1,24 +1,38 @@ /* * Copyright © 2018, 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once #include +#include "debug.h" + +enum ShellIntegrationMode { + /* Command output, selected by OSC 133;C ST. + * This is the default mode, the one reset operations reset to, + * so it's safer and easier to make this number 0. + * Also presumably attr_stream compresses better this way. */ + eNORMAL = 0, + /* Shell prompt, selected by OSC 133;A ST. */ + ePROMPT, + /* The command typed by the user, selected by OSC 133;B ST. */ + eCOMMAND, +}; + #define VTE_ATTR_VALUE_MASK(bits) ((1U << (bits)) - 1U) #define VTE_ATTR_MASK(shift,bits) (VTE_ATTR_VALUE_MASK(bits) << (shift)) @@ -47,9 +61,9 @@ #define VTE_ATTR_ITALIC_MASK (VTE_ATTR_MASK(VTE_ATTR_ITALIC_SHIFT, VTE_ATTR_ITALIC_BITS)) #define VTE_ATTR_ITALIC (1U << VTE_ATTR_ITALIC_SHIFT) -/* 0: none, 1: single, 2: double, 3: curly */ +/* 0: none, 1: single, 2: double, 3: curly, 4: dotted, 5: dashed */ #define VTE_ATTR_UNDERLINE_SHIFT (VTE_ATTR_ITALIC_SHIFT + VTE_ATTR_ITALIC_BITS) -#define VTE_ATTR_UNDERLINE_BITS (2) +#define VTE_ATTR_UNDERLINE_BITS (3) #define VTE_ATTR_UNDERLINE_MASK (VTE_ATTR_MASK(VTE_ATTR_UNDERLINE_SHIFT, VTE_ATTR_UNDERLINE_BITS)) #define VTE_ATTR_UNDERLINE_VALUE_MASK (VTE_ATTR_VALUE_MASK(VTE_ATTR_UNDERLINE_BITS)) #define VTE_ATTR_UNDERLINE(v) ((v) << VTE_ATTR_UNDERLINE_SHIFT) @@ -85,6 +99,13 @@ #define VTE_ATTR_INVISIBLE_MASK (VTE_ATTR_MASK(VTE_ATTR_INVISIBLE_SHIFT, VTE_ATTR_INVISIBLE_BITS)) #define VTE_ATTR_INVISIBLE (1U << VTE_ATTR_INVISIBLE_SHIFT) +/* Holds an enum ShellIntegrationMode */ +#define VTE_ATTR_SHELLINTEGRATION_SHIFT (VTE_ATTR_INVISIBLE_SHIFT + VTE_ATTR_INVISIBLE_BITS) +#define VTE_ATTR_SHELLINTEGRATION_BITS (2) +#define VTE_ATTR_SHELLINTEGRATION_MASK (VTE_ATTR_MASK(VTE_ATTR_SHELLINTEGRATION_SHIFT, VTE_ATTR_SHELLINTEGRATION_BITS)) +#define VTE_ATTR_SHELLINTEGRATION_VALUE_MASK (VTE_ATTR_VALUE_MASK(VTE_ATTR_SHELLINTEGRATION_BITS)) +#define VTE_ATTR_SHELLINTEGRATION(v) ((v) << VTE_ATTR_SHELLINTEGRATION_SHIFT) + /* Used internally only */ #define VTE_ATTR_BOXED_SHIFT (31) #define VTE_ATTR_BOXED_BITS (1) @@ -119,7 +140,7 @@ static inline void vte_attr_set_value(uint32_t* attr, unsigned int shift, uint32_t value) { - g_assert_cmpuint(value << shift, <=, mask); /* assurance */ + vte_assert_cmpuint(value << shift, <=, mask); /* assurance */ *attr = (*attr & ~mask) | ((value << shift) & mask /* assurance */); } diff --git a/src/bidi.cc b/src/bidi.cc index da6b1e8..4f65ed9 100644 --- a/src/bidi.cc +++ b/src/bidi.cc @@ -1,19 +1,18 @@ /* * Copyright © 2018–2019 Egmont Koblinger * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ /* @@ -41,19 +40,16 @@ * https://terminal-wg.pages.freedesktop.org/bidi/ */ -#include - -#ifdef WITH_FRIBIDI -#include -#endif +#include "config.h" #include "bidi.hh" #include "debug.h" #include "vtedefines.hh" #include "vteinternal.hh" -#ifdef WITH_FRIBIDI +#if WITH_FRIBIDI static_assert (sizeof (FriBidiChar) == sizeof (gunichar), "Unexpected FriBidiChar size"); +static_assert (sizeof (FriBidiStrIndex) == sizeof (int), "Unexpected FriBidiStrIndex size"); #endif /* Don't do Arabic ligatures as per bug 142. */ @@ -72,7 +68,7 @@ BidiRow::~BidiRow() void BidiRow::set_width(vte::grid::column_t width) { - g_assert_cmpint(width, >=, 0); + vte_assert_cmpint(width, >=, 0); if (G_UNLIKELY (width > G_MAXUSHORT)) { width = G_MAXUSHORT; } @@ -100,30 +96,6 @@ BidiRow::set_width(vte::grid::column_t width) m_width = width; } -/* Converts from logical to visual column. Offscreen columns are mirrored - * for RTL lines, e.g. (assuming 80 columns) -1 <=> 80, -2 <=> 81 etc. */ -vte::grid::column_t -BidiRow::log2vis(vte::grid::column_t col) const -{ - if (col >= 0 && col < m_width) { - return m_log2vis[col]; - } else { - return m_base_rtl ? m_width - 1 - col : col; - } -} - -/* Converts from visual to logical column. Offscreen columns are mirrored - * for RTL lines, e.g. (assuming 80 columns) -1 <=> 80, -2 <=> 81 etc. */ -vte::grid::column_t -BidiRow::vis2log(vte::grid::column_t col) const -{ - if (col >= 0 && col < m_width) { - return m_vis2log[col]; - } else { - return m_base_rtl ? m_width - 1 - col : col; - } -} - /* Whether the cell at the given visual position has RTL directionality. * For offscreen columns the line's base direction is returned. */ bool @@ -170,7 +142,7 @@ BidiRow::log_is_rtl(vte::grid::column_t col) const vteunistr BidiRow::vis_get_shaped_char(vte::grid::column_t col, vteunistr s) const { - g_assert_cmpint (col, >=, 0); + vte_assert_cmpint (col, >=, 0); if (col >= m_width || m_vis_shaped_base_char[col] == 0) return s; @@ -179,7 +151,7 @@ BidiRow::vis_get_shaped_char(vte::grid::column_t col, vteunistr s) const } -#ifdef WITH_FRIBIDI +#if WITH_FRIBIDI static inline bool is_arabic(gunichar c) { @@ -206,15 +178,9 @@ BidiRunner::explicit_line_shape(vte::grid::row_t row) auto width = m_ringview->get_width(); - GArray *fribidi_chars_array = nullptr; - FriBidiParType pbase_dir = FRIBIDI_PAR_RTL; FriBidiLevel level; FriBidiChar *fribidi_chars; - FriBidiCharType *fribidi_chartypes; - FriBidiBracketType *fribidi_brackettypes; - FriBidiJoiningType *fribidi_joiningtypes; - FriBidiLevel *fribidi_levels; int count; @@ -223,7 +189,11 @@ BidiRunner::explicit_line_shape(vte::grid::row_t row) gunichar base; int i, j; /* visual columns */ - fribidi_chars_array = g_array_sized_new (FALSE, FALSE, sizeof (FriBidiChar), width); + VteBidiChars *fribidi_chars_array = &m_fribidi_chars_array; + vte_bidi_chars_set_size(fribidi_chars_array, 0); + vte_bidi_chars_reserve(fribidi_chars_array, width); + + static thread_local auto workspace = Workspace{}; /* Walk in visual order from right to left. */ i = width - 1; @@ -237,12 +207,12 @@ BidiRunner::explicit_line_shape(vte::grid::row_t row) } /* Found an Arabic character. Keep walking to the left, extracting the word. */ - g_array_set_size(fribidi_chars_array, 0); + vte_bidi_chars_set_size(fribidi_chars_array, 0); j = i; do { - auto prev_len = fribidi_chars_array->len; + G_GNUC_UNUSED auto prev_len = vte_bidi_chars_get_size (fribidi_chars_array); _vte_unistr_append_to_gunichars (cell->c, fribidi_chars_array); - g_assert_cmpint (fribidi_chars_array->len, >, prev_len); + vte_assert_cmpint (vte_bidi_chars_get_size (fribidi_chars_array), >, prev_len); j--; if (j >= 0) { @@ -257,15 +227,17 @@ BidiRunner::explicit_line_shape(vte::grid::row_t row) /* Extracted the Arabic run. Do the BiDi. */ - /* Convenience stuff, we no longer need the auto-growing GArray wrapper. */ - count = fribidi_chars_array->len; - fribidi_chars = (FriBidiChar *) fribidi_chars_array->data; + /* Convenience stuff, we no longer need the auto-growing wrapper. */ + count = vte_bidi_chars_get_size (fribidi_chars_array); + fribidi_chars = vte_bidi_chars_get_data (fribidi_chars_array); + + workspace.reserve(count); /* Run the BiDi algorithm on the paragraph to get the embedding levels. */ - fribidi_chartypes = g_newa (FriBidiCharType, count); - fribidi_brackettypes = g_newa (FriBidiBracketType, count); - fribidi_joiningtypes = g_newa (FriBidiJoiningType, count); - fribidi_levels = g_newa (FriBidiLevel, count); + auto fribidi_chartypes = workspace.char_types_data(); + auto fribidi_brackettypes = workspace.bracket_types_data(); + auto fribidi_joiningtypes = workspace.joining_types_data(); + auto fribidi_levels = workspace.levels_data(); fribidi_get_bidi_types (fribidi_chars, count, fribidi_chartypes); fribidi_get_bracket_types (fribidi_chars, count, fribidi_chartypes, fribidi_brackettypes); @@ -295,7 +267,7 @@ BidiRunner::explicit_line_shape(vte::grid::row_t row) /* Walk through the Arabic word again. */ j = i; while (count > 0) { - g_assert_cmpint (j, >=, 0); + vte_assert_cmpint (j, >=, 0); cell = _vte_row_data_get(row_data, bidirow->vis2log(j)); c = cell->c; base = _vte_unistr_get_base(c); @@ -313,7 +285,7 @@ BidiRunner::explicit_line_shape(vte::grid::row_t row) i = j - 1; } - g_array_free (fribidi_chars_array, TRUE); + vte_bidi_chars_set_size (fribidi_chars_array, 0); } #endif /* WITH_FRIBIDI */ @@ -350,7 +322,7 @@ BidiRunner::explicit_line(vte::grid::row_t row, bool rtl, bool do_shaping) } } -#ifdef WITH_FRIBIDI +#if WITH_FRIBIDI if (do_shaping) explicit_line_shape(row); #endif @@ -375,7 +347,7 @@ BidiRunner::paragraph(vte::grid::row_t start, vte::grid::row_t end, return; } -#ifdef WITH_FRIBIDI +#if WITH_FRIBIDI /* Have a consistent limit on the number of rows in a paragraph * that can get implicit BiDi treatment, which is independent from * the current scroll position. */ @@ -400,7 +372,7 @@ BidiRunner::explicit_paragraph(vte::grid::row_t start, vte::grid::row_t end, } } -#ifdef WITH_FRIBIDI +#if WITH_FRIBIDI /* Figure out the mapping for the implicit paragraph between the given rows. * Returns success. */ bool @@ -422,6 +394,9 @@ BidiRunner::implicit_paragraph(vte::grid::row_t start, vte::grid::row_t end, boo FriBidiStrIndex *fribidi_map; FriBidiStrIndex *fribidi_to_term; BidiRow *bidirow; + VteBidiChars *fribidi_chars_array; + VteBidiIndexes *fribidi_map_array; + VteBidiIndexes *fribidi_to_term_array; auto width = m_ringview->get_width(); @@ -437,9 +412,17 @@ BidiRunner::implicit_paragraph(vte::grid::row_t start, vte::grid::row_t end, boo int fl, fv; /* fribidi logical and visual */ unsigned int col; - GArray *fribidi_chars_array = g_array_sized_new (FALSE, FALSE, sizeof (FriBidiChar), (end - start) * width); - GArray *fribidi_map_array = g_array_sized_new (FALSE, FALSE, sizeof (FriBidiStrIndex), (end - start) * width); - GArray *fribidi_to_term_array = g_array_sized_new (FALSE, FALSE, sizeof (FriBidiStrIndex), (end - start) * width); + fribidi_chars_array = &m_fribidi_chars_array; + vte_bidi_chars_set_size (fribidi_chars_array, 0); + vte_bidi_chars_reserve (fribidi_chars_array, (end - start) * width); + + fribidi_map_array = &m_fribidi_map_array; + vte_bidi_indexes_set_size (fribidi_map_array, 0); + vte_bidi_indexes_reserve (fribidi_map_array, (end - start) * width); + + fribidi_to_term_array = &m_fribidi_to_term_array; + vte_bidi_indexes_set_size (fribidi_to_term_array, 0); + vte_bidi_indexes_reserve (fribidi_to_term_array, (end - start) * width); /* Extract the paragraph's contents, omitting unused and fragment cells. */ @@ -526,7 +509,7 @@ BidiRunner::implicit_paragraph(vte::grid::row_t start, vte::grid::row_t end, boo row_data = m_ringview->get_row(row); for (tl = 0; tl < row_data->len; tl++) { - auto prev_len = fribidi_chars_array->len; + auto prev_len = vte_bidi_chars_get_size(fribidi_chars_array); FriBidiStrIndex val; cell = _vte_row_data_get (row_data, tl); @@ -538,36 +521,39 @@ BidiRunner::implicit_paragraph(vte::grid::row_t start, vte::grid::row_t end, boo * Note: see the static assert at the top of this file. */ _vte_unistr_append_to_gunichars (cell->c ? cell->c : ' ', fribidi_chars_array); /* Make sure at least one character was produced. */ - g_assert_cmpint (fribidi_chars_array->len, >, prev_len); + vte_assert_cmpint (vte_bidi_chars_get_size(fribidi_chars_array), >, prev_len); /* Track the base character, assign to it its current index in fribidi_chars. * Don't track combining accents, assign -1's to them. */ val = prev_len; - g_array_append_val (fribidi_map_array, val); + vte_bidi_indexes_append (fribidi_map_array, &val); val = tl; - g_array_append_val (fribidi_to_term_array, val); + vte_bidi_indexes_append (fribidi_to_term_array, &val); prev_len++; val = -1; - while (prev_len++ < fribidi_chars_array->len) { - g_array_append_val (fribidi_map_array, val); - g_array_append_val (fribidi_to_term_array, val); + while (prev_len++ < vte_bidi_chars_get_size(fribidi_chars_array)) { + vte_bidi_indexes_append (fribidi_map_array, &val); + vte_bidi_indexes_append (fribidi_to_term_array, &val); } } - lines[++line] = fribidi_chars_array->len; + lines[++line] = vte_bidi_chars_get_size(fribidi_chars_array); } - /* Convenience stuff, we no longer need the auto-growing GArray wrapper. */ - count = fribidi_chars_array->len; - fribidi_chars = (FriBidiChar *) fribidi_chars_array->data; - fribidi_map = (FriBidiStrIndex *) fribidi_map_array->data; - fribidi_to_term = (FriBidiStrIndex *) fribidi_to_term_array->data; + /* Convenience stuff, we no longer need the auto-growing wrapper. */ + count = vte_bidi_chars_get_size(fribidi_chars_array); + fribidi_chars = vte_bidi_chars_get_data(fribidi_chars_array); + fribidi_map = vte_bidi_indexes_get_data(fribidi_map_array); + fribidi_to_term = vte_bidi_indexes_get_data(fribidi_to_term_array); /* Run the BiDi algorithm on the paragraph to get the embedding levels. */ - fribidi_chartypes = g_newa (FriBidiCharType, count); - fribidi_brackettypes = g_newa (FriBidiBracketType, count); - fribidi_joiningtypes = g_newa (FriBidiJoiningType, count); - fribidi_levels = g_newa (FriBidiLevel, count); + static thread_local auto workspace = Workspace{}; + workspace.reserve(count); + + fribidi_chartypes = workspace.char_types_data(); + fribidi_brackettypes = workspace.bracket_types_data(); + fribidi_joiningtypes = workspace.joining_types_data(); + fribidi_levels = workspace.levels_data(); pbase_dir = autodir ? (rtl ? FRIBIDI_PAR_WRTL : FRIBIDI_PAR_WLTR) : (rtl ? FRIBIDI_PAR_RTL : FRIBIDI_PAR_LTR ); @@ -579,9 +565,9 @@ BidiRunner::implicit_paragraph(vte::grid::row_t start, vte::grid::row_t end, boo if (level == (FriBidiLevel)(-1)) { /* error */ - g_array_free (fribidi_chars_array, TRUE); - g_array_free (fribidi_map_array, TRUE); - g_array_free (fribidi_to_term_array, TRUE); + vte_bidi_chars_set_size (fribidi_chars_array, 0); + vte_bidi_indexes_set_size (fribidi_map_array, 0); + vte_bidi_indexes_set_size (fribidi_to_term_array, 0); return false; } @@ -592,14 +578,14 @@ BidiRunner::implicit_paragraph(vte::grid::row_t start, vte::grid::row_t end, boo } /* For convenience, from now on this variable contains the resolved (i.e. possibly autodetected) value. */ - g_assert_cmpint (pbase_dir, !=, FRIBIDI_PAR_ON); + vte_assert_cmpint (pbase_dir, !=, FRIBIDI_PAR_ON); rtl = (pbase_dir == FRIBIDI_PAR_RTL || pbase_dir == FRIBIDI_PAR_WRTL); if (!rtl && level == 0) { /* Fast and memory saving shortcut for LTR-only paragraphs. */ - g_array_free (fribidi_chars_array, TRUE); - g_array_free (fribidi_map_array, TRUE); - g_array_free (fribidi_to_term_array, TRUE); + vte_bidi_chars_set_size (fribidi_chars_array, 0); + vte_bidi_indexes_set_size (fribidi_map_array, 0); + vte_bidi_indexes_set_size (fribidi_to_term_array, 0); explicit_paragraph (start, end, false, false); return true; } @@ -705,14 +691,14 @@ BidiRunner::implicit_paragraph(vte::grid::row_t start, vte::grid::row_t end, boo } if (!rtl) { /* Unused cells on the right for LTR paragraphs */ - g_assert_cmpint (tv, ==, row_data->len); + vte_assert_cmpint (tv, ==, row_data->len); for (; tv < width; tv++) { bidirow->m_vis2log[tv] = tv; bidirow->m_vis_rtl[tv] = false; bidirow->m_vis_shaped_base_char[tv] = 0; } } - g_assert_cmpint (tv, ==, width); + vte_assert_cmpint (tv, ==, width); /* From vis2log create the log2vis mapping too. * In debug mode assert that we have a bijective mapping. */ @@ -728,14 +714,14 @@ BidiRunner::implicit_paragraph(vte::grid::row_t start, vte::grid::row_t end, boo if (_vte_debug_on (VTE_DEBUG_BIDI)) { for (tl = 0; tl < width; tl++) { - g_assert_cmpint (bidirow->m_log2vis[tl], !=, -1); + vte_assert_cmpint (bidirow->m_log2vis[tl], !=, -1); } } } - g_array_free (fribidi_chars_array, TRUE); - g_array_free (fribidi_map_array, TRUE); - g_array_free (fribidi_to_term_array, TRUE); + vte_bidi_chars_set_size (fribidi_chars_array, 0); + vte_bidi_indexes_set_size (fribidi_map_array, 0); + vte_bidi_indexes_set_size (fribidi_to_term_array, 0); return true; } #endif /* WITH_FRIBIDI */ @@ -767,7 +753,7 @@ vte_bidi_get_mirror_char (vteunistr unistr, gboolean mirror_box_drawing, vteunis if (G_UNLIKELY (mirror_box_drawing)) base_ch_mirrored = 0x2500 + mirrored_2500[base_ch - 0x2500]; } else { -#ifdef WITH_FRIBIDI +#if WITH_FRIBIDI /* Prefer the FriBidi variant as that's more likely to be in sync with the rest of our BiDi stuff. */ fribidi_get_mirror_char (base_ch, &base_ch_mirrored); #else @@ -782,3 +768,4 @@ vte_bidi_get_mirror_char (vteunistr unistr, gboolean mirror_box_drawing, vteunis *out = unistr_mirrored; return unistr_mirrored == unistr; } + diff --git a/src/bidi.hh b/src/bidi.hh index 82025fe..46d2988 100644 --- a/src/bidi.hh +++ b/src/bidi.hh @@ -1,19 +1,18 @@ /* * Copyright © 2018–2019 Egmont Koblinger * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -26,6 +25,42 @@ #include "vtetypes.hh" #include "vteunistr.h" +#if WITH_FRIBIDI +#include +#include "bidiarrays.hh" + +// FIXME: make gdkarrayimpl a template! + +#define GDK_ARRAY_NAME vte_bidi_char_types +#define GDK_ARRAY_TYPE_NAME VteBidiCharTypes +#define GDK_ARRAY_ELEMENT_TYPE FriBidiCharType +#define GDK_ARRAY_BY_VALUE 1 +#define GDK_ARRAY_NO_MEMSET +#include "gdkarrayimpl.c" + +#define GDK_ARRAY_NAME vte_bidi_bracket_types +#define GDK_ARRAY_TYPE_NAME VteBidiBracketTypes +#define GDK_ARRAY_ELEMENT_TYPE FriBidiBracketType +#define GDK_ARRAY_BY_VALUE 1 +#define GDK_ARRAY_NO_MEMSET +#include "gdkarrayimpl.c" + +#define GDK_ARRAY_NAME vte_bidi_joining_types +#define GDK_ARRAY_TYPE_NAME VteBidiJoiningTypes +#define GDK_ARRAY_ELEMENT_TYPE FriBidiJoiningType +#define GDK_ARRAY_BY_VALUE 1 +#define GDK_ARRAY_NO_MEMSET +#include "gdkarrayimpl.c" + +#define GDK_ARRAY_NAME vte_bidi_levels +#define GDK_ARRAY_TYPE_NAME VteBidiLevels +#define GDK_ARRAY_ELEMENT_TYPE FriBidiLevel +#define GDK_ARRAY_BY_VALUE 1 +#define GDK_ARRAY_NO_MEMSET +#include "gdkarrayimpl.c" + +#endif // WITH_FRIBIDI + namespace vte { namespace base { @@ -48,8 +83,26 @@ public: BidiRow& operator= (BidiRow const& o) = delete; BidiRow& operator= (BidiRow&& o) = delete; - vte::grid::column_t log2vis(vte::grid::column_t col) const; - vte::grid::column_t vis2log(vte::grid::column_t col) const; + // Converts from logical to visual column. Offscreen columns are mirrored + // for RTL lines, e.g. (assuming 80 columns) -1 <=> 80, -2 <=> 81 etc. + inline vte::grid::column_t log2vis(vte::grid::column_t col) const { + if (col >= 0 && col < m_width) { + return m_log2vis[col]; + } else { + return m_base_rtl ? m_width - 1 - col : col; + } + } + + // Converts from visual to logical column. Offscreen columns are mirrored + // for RTL lines, e.g. (assuming 80 columns) -1 <=> 80, -2 <=> 81 etc. + inline vte::grid::column_t vis2log(vte::grid::column_t col) const { + if (col >= 0 && col < m_width) { + return m_vis2log[col]; + } else { + return m_base_rtl ? m_width - 1 - col : col; + } + } + bool log_is_rtl(vte::grid::column_t col) const; bool vis_is_rtl(vte::grid::column_t col) const; vteunistr vis_get_shaped_char(vte::grid::column_t col, vteunistr s) const; @@ -82,8 +135,20 @@ private: /* BidiRunner is not a "real" class, rather the collection of methods that run the BiDi algorithm. */ class BidiRunner { public: - constexpr BidiRunner(RingView *ringview) : m_ringview{ringview} { } - ~BidiRunner() { } + BidiRunner(RingView *ringview) : m_ringview{ringview} { +#if WITH_FRIBIDI + vte_bidi_chars_init(&m_fribidi_chars_array); + vte_bidi_indexes_init(&m_fribidi_map_array); + vte_bidi_indexes_init(&m_fribidi_to_term_array); +#endif + } + ~BidiRunner() { +#if WITH_FRIBIDI + vte_bidi_chars_clear(&m_fribidi_chars_array); + vte_bidi_indexes_clear(&m_fribidi_map_array); + vte_bidi_indexes_clear(&m_fribidi_to_term_array); +#endif + } // prevent accidents BidiRunner(BidiRunner& o) = delete; @@ -99,13 +164,78 @@ public: private: RingView *m_ringview; -#ifdef WITH_FRIBIDI - void explicit_line_shape(vte::grid::row_t row); -#endif - void explicit_line(vte::grid::row_t row, bool rtl, bool do_shaping); void explicit_paragraph(vte::grid::row_t start, vte::grid::row_t end, bool rtl, bool do_shaping); -#ifdef WITH_FRIBIDI + +#if WITH_FRIBIDI + + class Workspace { + private: + std::size_t m_capacity{0}; + + VteBidiCharTypes m_char_types_array; + VteBidiBracketTypes m_bracket_types_array; + VteBidiJoiningTypes m_joining_types_array; + VteBidiLevels m_levels_array; + + public: + + Workspace() + { + vte_bidi_char_types_init(&m_char_types_array); + vte_bidi_bracket_types_init(&m_bracket_types_array); + vte_bidi_joining_types_init(&m_joining_types_array); + vte_bidi_levels_init(&m_levels_array); + } + + ~Workspace() + { + vte_bidi_char_types_clear(&m_char_types_array); + vte_bidi_bracket_types_clear(&m_bracket_types_array); + vte_bidi_joining_types_clear(&m_joining_types_array); + vte_bidi_levels_clear(&m_levels_array); + } + + Workspace(Workspace const&) = delete; + Workspace(Workspace&&) = delete; + + Workspace& operator=(Workspace const&) = delete; + Workspace& operator=(Workspace&&) = delete; + + inline auto char_types_data() const noexcept { return vte_bidi_char_types_get_data(&m_char_types_array); } + inline auto bracket_types_data() const noexcept { return vte_bidi_bracket_types_get_data(&m_bracket_types_array); } + inline auto joining_types_data() const noexcept { return vte_bidi_joining_types_get_data(&m_joining_types_array); } + inline auto levels_data() const noexcept { return vte_bidi_levels_get_data(&m_levels_array); } + + void reserve(std::size_t capacity) + { + if (capacity <= m_capacity) + return; + + vte_bidi_char_types_reserve(&m_char_types_array, capacity); + vte_bidi_bracket_types_reserve(&m_bracket_types_array, capacity); + vte_bidi_joining_types_reserve(&m_joining_types_array, capacity); + vte_bidi_levels_reserve(&m_levels_array, capacity); + + m_capacity = capacity; + } + + void set_size(std::size_t size) + { + vte_bidi_char_types_set_size(&m_char_types_array, size); + vte_bidi_bracket_types_set_size(&m_bracket_types_array, size); + vte_bidi_joining_types_set_size(&m_joining_types_array, size); + vte_bidi_levels_set_size(&m_levels_array, size); + } + + }; // class Workspace + + VteBidiChars m_fribidi_chars_array; + VteBidiIndexes m_fribidi_map_array; + VteBidiIndexes m_fribidi_to_term_array; + + void explicit_line_shape(vte::grid::row_t row); + bool implicit_paragraph(vte::grid::row_t start, vte::grid::row_t end, bool do_shaping); #endif }; diff --git a/src/bidiarrays.hh b/src/bidiarrays.hh new file mode 100644 index 0000000..2eef354 --- /dev/null +++ b/src/bidiarrays.hh @@ -0,0 +1,34 @@ +/* + * Copyright © 2023 Christian Hergert + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#define GDK_ARRAY_NAME vte_bidi_chars +#define GDK_ARRAY_TYPE_NAME VteBidiChars +#define GDK_ARRAY_ELEMENT_TYPE gunichar +#define GDK_ARRAY_BY_VALUE 1 +#define GDK_ARRAY_PREALLOC 8 +#define GDK_ARRAY_NO_MEMSET +#include "gdkarrayimpl.c" + +#define GDK_ARRAY_NAME vte_bidi_indexes +#define GDK_ARRAY_TYPE_NAME VteBidiIndexes +#define GDK_ARRAY_ELEMENT_TYPE int +#define GDK_ARRAY_BY_VALUE 1 +#define GDK_ARRAY_PREALLOC 8 +#define GDK_ARRAY_NO_MEMSET +#include "gdkarrayimpl.c" diff --git a/src/box-drawing.hh b/src/box-drawing.hh new file mode 100644 index 0000000..282c0f8 --- /dev/null +++ b/src/box-drawing.hh @@ -0,0 +1,863 @@ +/* + * Copyright © 2014, 2023 Egmont Koblinger + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +/* + * Define the user-defined literal suffix "_str2bin" which interprets a + * byte string as binary number. + * Even bytes (e.g. ' ', '.', '0') mean bit 0. + * Odd bytes (e.g. '#', '%', '1') mean bit 1. + */ +constexpr uint32_t operator""_str2bin(char const* str, + std::size_t len) +{ + auto val = uint32_t{0}; + while (*str) { + val = (val << 1) | (static_cast(*str) & 1); + ++str; + } + return val; +} + +/* + * Definition of most of the glyphs in the 2500..257F range as 5x5 bitmaps + * (bits 24..0 in the obvious order), see bug 709556 and ../doc/boxes.txt + */ +static constinit uint32_t const _vte_draw_box_drawing_bitmaps[128] = { + + /* U+2500 - BOX DRAWINGS LIGHT HORIZONTAL */ + " " + " " + "#####" + " " + " "_str2bin, + + /* U+2501 - BOX DRAWINGS HEAVY HORIZONTAL */ + " " + "#####" + "#####" + "#####" + " "_str2bin, + + /* U+2502 - BOX DRAWINGS LIGHT VERTICAL */ + " # " + " # " + " # " + " # " + " # "_str2bin, + + /* U+2503 - BOX DRAWINGS HEAVY VERTICAL */ + " ### " + " ### " + " ### " + " ### " + " ### "_str2bin, + + /* U+2504 - BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL */ + 0, /* not handled here */ + + /* U+2505 - BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL */ + 0, /* not handled here */ + + /* U+2506 - BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL */ + 0, /* not handled here */ + + /* U+2507 - BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL */ + 0, /* not handled here */ + + /* U+2508 - BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL */ + 0, /* not handled here */ + + /* U+2509 - BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL */ + 0, /* not handled here */ + + /* U+250A - BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL */ + 0, /* not handled here */ + + /* U+250B - BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL */ + 0, /* not handled here */ + + /* U+250C - BOX DRAWINGS LIGHT DOWN AND RIGHT */ + " " + " " + " ###" + " # " + " # "_str2bin, + + /* U+250D - BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY */ + " " + " ###" + " ###" + " ###" + " # "_str2bin, + + /* U+250E - BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT */ + " " + " " + " ####" + " ### " + " ### "_str2bin, + + /* U+250F - BOX DRAWINGS HEAVY DOWN AND RIGHT */ + " " + " ####" + " ####" + " ####" + " ### "_str2bin, + + /* U+2510 - BOX DRAWINGS LIGHT DOWN AND LEFT */ + " " + " " + "### " + " # " + " # "_str2bin, + + /* U+2511 - BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY */ + " " + "### " + "### " + "### " + " # "_str2bin, + + /* U+2512 - BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT */ + " " + " " + "#### " + " ### " + " ### "_str2bin, + + /* U+2513 - BOX DRAWINGS HEAVY DOWN AND LEFT */ + " " + "#### " + "#### " + "#### " + " ### "_str2bin, + + /* U+2514 - BOX DRAWINGS LIGHT UP AND RIGHT */ + " # " + " # " + " ###" + " " + " "_str2bin, + + /* U+2515 - BOX DRAWINGS UP LIGHT AND RIGHT HEAVY */ + " # " + " ###" + " ###" + " ###" + " "_str2bin, + + /* U+2516 - BOX DRAWINGS UP HEAVY AND RIGHT LIGHT */ + " ### " + " ### " + " ####" + " " + " "_str2bin, + + /* U+2517 - BOX DRAWINGS HEAVY UP AND RIGHT */ + " ### " + " ####" + " ####" + " ####" + " "_str2bin, + + /* U+2518 - BOX DRAWINGS LIGHT UP AND LEFT */ + " # " + " # " + "### " + " " + " "_str2bin, + + /* U+2519 - BOX DRAWINGS UP LIGHT AND LEFT HEAVY */ + " # " + "### " + "### " + "### " + " "_str2bin, + + /* U+251A - BOX DRAWINGS UP HEAVY AND LEFT LIGHT */ + " ### " + " ### " + "#### " + " " + " "_str2bin, + + /* U+251B - BOX DRAWINGS HEAVY UP AND LEFT */ + " ### " + "#### " + "#### " + "#### " + " "_str2bin, + + /* U+251C - BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ + " # " + " # " + " ###" + " # " + " # "_str2bin, + + /* U+251D - BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY */ + " # " + " ###" + " ###" + " ###" + " # "_str2bin, + + /* U+251E - BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT */ + " ### " + " ### " + " ####" + " # " + " # "_str2bin, + + /* U+251F - BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT */ + " # " + " # " + " ####" + " ### " + " ### "_str2bin, + + /* U+2520 - BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT */ + " ### " + " ### " + " ####" + " ### " + " ### "_str2bin, + + /* U+2521 - BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY */ + " ### " + " ####" + " ####" + " ####" + " # "_str2bin, + + /* U+2522 - BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY */ + " # " + " ####" + " ####" + " ####" + " ### "_str2bin, + + /* U+2523 - BOX DRAWINGS HEAVY VERTICAL AND RIGHT */ + " ### " + " ####" + " ####" + " ####" + " ### "_str2bin, + + /* U+2524 - BOX DRAWINGS LIGHT VERTICAL AND LEFT */ + " # " + " # " + "### " + " # " + " # "_str2bin, + + /* U+2525 - BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY */ + " # " + "### " + "### " + "### " + " # "_str2bin, + + /* U+2526 - BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT */ + " ### " + " ### " + "#### " + " # " + " # "_str2bin, + + /* U+2527 - BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT */ + " # " + " # " + "#### " + " ### " + " ### "_str2bin, + + /* U+2528 - BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT */ + " ### " + " ### " + "#### " + " ### " + " ### "_str2bin, + + /* U+2529 - BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY */ + " ### " + "#### " + "#### " + "#### " + " # "_str2bin, + + /* U+252A - BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY */ + " # " + "#### " + "#### " + "#### " + " ### "_str2bin, + + /* U+252B - BOX DRAWINGS HEAVY VERTICAL AND LEFT */ + " ### " + "#### " + "#### " + "#### " + " ### "_str2bin, + + /* U+252C - BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ + " " + " " + "#####" + " # " + " # "_str2bin, + + /* U+252D - BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT */ + " " + "### " + "#####" + "### " + " # "_str2bin, + + /* U+252E - BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT */ + " " + " ###" + "#####" + " ###" + " # "_str2bin, + + /* U+252F - BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY */ + " " + "#####" + "#####" + "#####" + " # "_str2bin, + + /* U+2530 - BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT */ + " " + " " + "#####" + " ### " + " ### "_str2bin, + + /* U+2531 - BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY */ + " " + "#### " + "#####" + "#### " + " ### "_str2bin, + + /* U+2532 - BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY */ + " " + " ####" + "#####" + " ####" + " ### "_str2bin, + + /* U+2533 - BOX DRAWINGS HEAVY DOWN AND HORIZONTAL */ + " " + "#####" + "#####" + "#####" + " ### "_str2bin, + + /* U+2534 - BOX DRAWINGS LIGHT UP AND HORIZONTAL */ + " # " + " # " + "#####" + " " + " "_str2bin, + + /* U+2535 - BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT */ + " # " + "### " + "#####" + "### " + " "_str2bin, + + /* U+2536 - BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT */ + " # " + " ###" + "#####" + " ###" + " "_str2bin, + + /* U+2537 - BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY */ + " # " + "#####" + "#####" + "#####" + " "_str2bin, + + /* U+2538 - BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT */ + " ### " + " ### " + "#####" + " " + " "_str2bin, + + /* U+2539 - BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY */ + " ### " + "#### " + "#####" + "#### " + " "_str2bin, + + /* U+253A - BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY */ + " ### " + " ####" + "#####" + " ####" + " "_str2bin, + + /* U+253B - BOX DRAWINGS HEAVY UP AND HORIZONTAL */ + " ### " + "#####" + "#####" + "#####" + " "_str2bin, + + /* U+253C - BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ + " # " + " # " + "#####" + " # " + " # "_str2bin, + + /* U+253D - BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT */ + " # " + "### " + "#####" + "### " + " # "_str2bin, + + /* U+253E - BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT */ + " # " + " ###" + "#####" + " ###" + " # "_str2bin, + + /* U+253F - BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY */ + " # " + "#####" + "#####" + "#####" + " # "_str2bin, + + /* U+2540 - BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT */ + " ### " + " ### " + "#####" + " # " + " # "_str2bin, + + /* U+2541 - BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT */ + " # " + " # " + "#####" + " ### " + " ### "_str2bin, + + /* U+2542 - BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT */ + " ### " + " ### " + "#####" + " ### " + " ### "_str2bin, + + /* U+2543 - BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT */ + " ### " + "#### " + "#####" + "#### " + " # "_str2bin, + + /* U+2544 - BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT */ + " ### " + " ####" + "#####" + " ####" + " # "_str2bin, + + /* U+2545 - BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT */ + " # " + "#### " + "#####" + "#### " + " ### "_str2bin, + + /* U+2546 - BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT */ + " # " + " ####" + "#####" + " ####" + " ### "_str2bin, + + /* U+2547 - BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY */ + " ### " + "#####" + "#####" + "#####" + " # "_str2bin, + + /* U+2548 - BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY */ + " # " + "#####" + "#####" + "#####" + " ### "_str2bin, + + /* U+2549 - BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY */ + " ### " + "#### " + "#####" + "#### " + " ### "_str2bin, + + /* U+254A - BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY */ + " ### " + " ####" + "#####" + " ####" + " ### "_str2bin, + + /* U+254B - BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL */ + " ### " + "#####" + "#####" + "#####" + " ### "_str2bin, + + /* U+254C - BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL */ + 0, /* not handled here */ + + /* U+254D - BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL */ + 0, /* not handled here */ + + /* U+254E - BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL */ + 0, /* not handled here */ + + /* U+254F - BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL */ + 0, /* not handled here */ + + /* U+2550 - BOX DRAWINGS DOUBLE HORIZONTAL */ + " " + "#####" + " " + "#####" + " "_str2bin, + + /* U+2551 - BOX DRAWINGS DOUBLE VERTICAL */ + " # # " + " # # " + " # # " + " # # " + " # # "_str2bin, + + /* U+2552 - BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE */ + " " + " ###" + " # " + " ###" + " # "_str2bin, + + /* U+2553 - BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE */ + " " + " " + " ####" + " # # " + " # # "_str2bin, + + /* U+2554 - BOX DRAWINGS DOUBLE DOWN AND RIGHT */ + " " + " ####" + " # " + " # ##" + " # # "_str2bin, + + /* U+2555 - BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE */ + " " + "### " + " # " + "### " + " # "_str2bin, + + /* U+2556 - BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE */ + " " + " " + "#### " + " # # " + " # # "_str2bin, + + /* U+2557 - BOX DRAWINGS DOUBLE DOWN AND LEFT */ + " " + "#### " + " # " + "## # " + " # # "_str2bin, + + /* U+2558 - BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE */ + " # " + " ###" + " # " + " ###" + " "_str2bin, + + /* U+2559 - BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE */ + " # # " + " # # " + " ####" + " " + " "_str2bin, + + /* U+255A - BOX DRAWINGS DOUBLE UP AND RIGHT */ + " # # " + " # ##" + " # " + " ####" + " "_str2bin, + + /* U+255B - BOX DRAWINGS UP SINGLE AND LEFT DOUBLE */ + " # " + "### " + " # " + "### " + " "_str2bin, + + /* U+255C - BOX DRAWINGS UP DOUBLE AND LEFT SINGLE */ + " # # " + " # # " + "#### " + " " + " "_str2bin, + + /* U+255D - BOX DRAWINGS DOUBLE UP AND LEFT */ + " # # " + "## # " + " # " + "#### " + " "_str2bin, + + /* U+255E - BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE */ + " # " + " ###" + " # " + " ###" + " # "_str2bin, + + /* U+255F - BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE */ + " # # " + " # # " + " # ##" + " # # " + " # # "_str2bin, + + /* U+2560 - BOX DRAWINGS DOUBLE VERTICAL AND RIGHT */ + " # # " + " # ##" + " # " + " # ##" + " # # "_str2bin, + + /* U+2561 - BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE */ + " # " + "### " + " # " + "### " + " # "_str2bin, + + /* U+2562 - BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE */ + " # # " + " # # " + "## # " + " # # " + " # # "_str2bin, + + /* U+2563 - BOX DRAWINGS DOUBLE VERTICAL AND LEFT */ + " # # " + "## # " + " # " + "## # " + " # # "_str2bin, + + /* U+2564 - BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE */ + " " + "#####" + " " + "#####" + " # "_str2bin, + + /* U+2565 - BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE */ + " " + " " + "#####" + " # # " + " # # "_str2bin, + + /* U+2566 - BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL */ + " " + "#####" + " " + "## ##" + " # # "_str2bin, + + /* U+2567 - BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE */ + " # " + "#####" + " " + "#####" + " "_str2bin, + + /* U+2568 - BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE */ + " # # " + " # # " + "#####" + " " + " "_str2bin, + + /* U+2569 - BOX DRAWINGS DOUBLE UP AND HORIZONTAL */ + " # # " + "## ##" + " " + "#####" + " "_str2bin, + + /* U+256A - BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE */ + " # " + "#####" + " # " + "#####" + " # "_str2bin, + + /* U+256B - BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE */ + " # # " + " # # " + "#####" + " # # " + " # # "_str2bin, + + /* U+256C - BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL */ + " # # " + "## ##" + " " + "## ##" + " # # "_str2bin, + + /* U+256D - BOX DRAWINGS LIGHT ARC DOWN AND RIGHT */ + 0, /* not handled here */ + + /* U+256E - BOX DRAWINGS LIGHT ARC DOWN AND LEFT */ + 0, /* not handled here */ + + /* U+256F - BOX DRAWINGS LIGHT ARC UP AND LEFT */ + 0, /* not handled here */ + + /* U+2570 - BOX DRAWINGS LIGHT ARC UP AND RIGHT */ + 0, /* not handled here */ + + /* U+2571 - BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT */ + 0, /* not handled here */ + + /* U+2572 - BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT */ + 0, /* not handled here */ + + /* U+2573 - BOX DRAWINGS LIGHT DIAGONAL CROSS */ + 0, /* not handled here */ + + /* U+2574 - BOX DRAWINGS LIGHT LEFT */ + " " + " " + "### " + " " + " "_str2bin, + + /* U+2575 - BOX DRAWINGS LIGHT UP */ + " # " + " # " + " # " + " " + " "_str2bin, + + /* U+2576 - BOX DRAWINGS LIGHT RIGHT */ + " " + " " + " ###" + " " + " "_str2bin, + + /* U+2577 - BOX DRAWINGS LIGHT DOWN */ + " " + " " + " # " + " # " + " # "_str2bin, + + /* U+2578 - BOX DRAWINGS HEAVY LEFT */ + " " + "### " + "### " + "### " + " "_str2bin, + + /* U+2579 - BOX DRAWINGS HEAVY UP */ + " ### " + " ### " + " ### " + " " + " "_str2bin, + + /* U+257A - BOX DRAWINGS HEAVY RIGHT */ + " " + " ###" + " ###" + " ###" + " "_str2bin, + + /* U+257B - BOX DRAWINGS HEAVY DOWN */ + " " + " " + " ### " + " ### " + " ### "_str2bin, + + /* U+257C - BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT */ + " " + " ###" + "#####" + " ###" + " "_str2bin, + + /* U+257D - BOX DRAWINGS LIGHT UP AND HEAVY DOWN */ + " # " + " # " + " ### " + " ### " + " ### "_str2bin, + + /* U+257E - BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT */ + " " + "### " + "#####" + "### " + " "_str2bin, + + /* U+257F - BOX DRAWINGS HEAVY UP AND LIGHT DOWN */ + " ### " + " ### " + " ### " + " # " + " # "_str2bin, + +}; diff --git a/src/box_drawing.txt b/src/box_drawing.txt deleted file mode 100644 index 966c34f..0000000 --- a/src/box_drawing.txt +++ /dev/null @@ -1,768 +0,0 @@ -U+2500 - light horizontal -░░░░░ -░░░░░ -▓▓▓▓▓ -░░░░░ -░░░░░ -U+2501 - heavy horizontal -░░░░░ -▓▓▓▓▓ -▓▓▓▓▓ -▓▓▓▓▓ -░░░░░ -U+2502 - light vertical -░░▓░░ -░░▓░░ -░░▓░░ -░░▓░░ -░░▓░░ -U+2503 - heavy vertical -░▓▓▓░ -░▓▓▓░ -░▓▓▓░ -░▓▓▓░ -░▓▓▓░ -U+2504 - not handled here: light triple dash horizontal -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+2505 - not handled here: heavy triple dash horizontal -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+2506 - not handled here: light triple dash vertical -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+2507 - not handled here: heavy triple dash vertical -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+2508 - not handled here: light quadruple dash horizontal -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+2509 - not handled here: heavy quadruple dash horizontal -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+250A - not handled here: light quadruple dash vertical -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+250B - not handled here: heavy quadruple dash vertical -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+250C - light down and right -░░░░░ -░░░░░ -░░▓▓▓ -░░▓░░ -░░▓░░ -U+250D - down light and right heavy -░░░░░ -░░▓▓▓ -░░▓▓▓ -░░▓▓▓ -░░▓░░ -U+250E - down heavy and right light -░░░░░ -░░░░░ -░▓▓▓▓ -░▓▓▓░ -░▓▓▓░ -U+250F - heavy down and right -░░░░░ -░▓▓▓▓ -░▓▓▓▓ -░▓▓▓▓ -░▓▓▓░ -U+2510 - light down and left -░░░░░ -░░░░░ -▓▓▓░░ -░░▓░░ -░░▓░░ -U+2511 - down light and left heavy -░░░░░ -▓▓▓░░ -▓▓▓░░ -▓▓▓░░ -░░▓░░ -U+2512 - down heavy and left light -░░░░░ -░░░░░ -▓▓▓▓░ -░▓▓▓░ -░▓▓▓░ -U+2513 - heavy down and left -░░░░░ -▓▓▓▓░ -▓▓▓▓░ -▓▓▓▓░ -░▓▓▓░ -U+2514 - light up and right -░░▓░░ -░░▓░░ -░░▓▓▓ -░░░░░ -░░░░░ -U+2515 - up light and right heavy -░░▓░░ -░░▓▓▓ -░░▓▓▓ -░░▓▓▓ -░░░░░ -U+2516 - up heavy and right light -░▓▓▓░ -░▓▓▓░ -░▓▓▓▓ -░░░░░ -░░░░░ -U+2517 - heavy up and right -░▓▓▓░ -░▓▓▓▓ -░▓▓▓▓ -░▓▓▓▓ -░░░░░ -U+2518 - light up and left -░░▓░░ -░░▓░░ -▓▓▓░░ -░░░░░ -░░░░░ -U+2519 - up light and left heavy -░░▓░░ -▓▓▓░░ -▓▓▓░░ -▓▓▓░░ -░░░░░ -U+251A - up heavy and left light -░▓▓▓░ -░▓▓▓░ -▓▓▓▓░ -░░░░░ -░░░░░ -U+251B - heavy up and left -░▓▓▓░ -▓▓▓▓░ -▓▓▓▓░ -▓▓▓▓░ -░░░░░ -U+251C - light vertical and right -░░▓░░ -░░▓░░ -░░▓▓▓ -░░▓░░ -░░▓░░ -U+251D - vertical light and right heavy -░░▓░░ -░░▓▓▓ -░░▓▓▓ -░░▓▓▓ -░░▓░░ -U+251E - up heavy and right down light -░▓▓▓░ -░▓▓▓░ -░▓▓▓▓ -░░▓░░ -░░▓░░ -U+251F - down heavy and right up light -░░▓░░ -░░▓░░ -░▓▓▓▓ -░▓▓▓░ -░▓▓▓░ -U+2520 - vertical heavy and right light -░▓▓▓░ -░▓▓▓░ -░▓▓▓▓ -░▓▓▓░ -░▓▓▓░ -U+2521 - down light and right up heavy -░▓▓▓░ -░▓▓▓▓ -░▓▓▓▓ -░▓▓▓▓ -░░▓░░ -U+2522 - up light and right down heavy -░░▓░░ -░▓▓▓▓ -░▓▓▓▓ -░▓▓▓▓ -░▓▓▓░ -U+2523 - heavy vertical and right -░▓▓▓░ -░▓▓▓▓ -░▓▓▓▓ -░▓▓▓▓ -░▓▓▓░ -U+2524 - light vertical and left -░░▓░░ -░░▓░░ -▓▓▓░░ -░░▓░░ -░░▓░░ -U+2525 - vertical light and left heavy -░░▓░░ -▓▓▓░░ -▓▓▓░░ -▓▓▓░░ -░░▓░░ -U+2526 - up heavy and left down light -░▓▓▓░ -░▓▓▓░ -▓▓▓▓░ -░░▓░░ -░░▓░░ -U+2527 - down heavy and left up light -░░▓░░ -░░▓░░ -▓▓▓▓░ -░▓▓▓░ -░▓▓▓░ -U+2528 - vertical heavy and left light -░▓▓▓░ -░▓▓▓░ -▓▓▓▓░ -░▓▓▓░ -░▓▓▓░ -U+2529 - down light and left up heavy -░▓▓▓░ -▓▓▓▓░ -▓▓▓▓░ -▓▓▓▓░ -░░▓░░ -U+252A - up light and left down heavy -░░▓░░ -▓▓▓▓░ -▓▓▓▓░ -▓▓▓▓░ -░▓▓▓░ -U+252B - heavy vertical and left -░▓▓▓░ -▓▓▓▓░ -▓▓▓▓░ -▓▓▓▓░ -░▓▓▓░ -U+252C - light down and horizontal -░░░░░ -░░░░░ -▓▓▓▓▓ -░░▓░░ -░░▓░░ -U+252D - left heavy and right down light -░░░░░ -▓▓▓░░ -▓▓▓▓▓ -▓▓▓░░ -░░▓░░ -U+252E - right heavy and left down light -░░░░░ -░░▓▓▓ -▓▓▓▓▓ -░░▓▓▓ -░░▓░░ -U+252F - down light and horizontal heavy -░░░░░ -▓▓▓▓▓ -▓▓▓▓▓ -▓▓▓▓▓ -░░▓░░ -U+2530 - down heavy and horizontal light -░░░░░ -░░░░░ -▓▓▓▓▓ -░▓▓▓░ -░▓▓▓░ -U+2531 - right light and left down heavy -░░░░░ -▓▓▓▓░ -▓▓▓▓▓ -▓▓▓▓░ -░▓▓▓░ -U+2532 - left light and right down heavy -░░░░░ -░▓▓▓▓ -▓▓▓▓▓ -░▓▓▓▓ -░▓▓▓░ -U+2533 - heavy down and horizontal -░░░░░ -▓▓▓▓▓ -▓▓▓▓▓ -▓▓▓▓▓ -░▓▓▓░ -U+2534 - light up and horizontal -░░▓░░ -░░▓░░ -▓▓▓▓▓ -░░░░░ -░░░░░ -U+2535 - left heavy and right up light -░░▓░░ -▓▓▓░░ -▓▓▓▓▓ -▓▓▓░░ -░░░░░ -U+2536 - right heavy and left up light -░░▓░░ -░░▓▓▓ -▓▓▓▓▓ -░░▓▓▓ -░░░░░ -U+2537 - up light and horizontal heavy -░░▓░░ -▓▓▓▓▓ -▓▓▓▓▓ -▓▓▓▓▓ -░░░░░ -U+2538 - up heavy and horizontal light -░▓▓▓░ -░▓▓▓░ -▓▓▓▓▓ -░░░░░ -░░░░░ -U+2539 - right light and left up heavy -░▓▓▓░ -▓▓▓▓░ -▓▓▓▓▓ -▓▓▓▓░ -░░░░░ -U+253A - left light and right up heavy -░▓▓▓░ -░▓▓▓▓ -▓▓▓▓▓ -░▓▓▓▓ -░░░░░ -U+253B - heavy up and horizontal -░▓▓▓░ -▓▓▓▓▓ -▓▓▓▓▓ -▓▓▓▓▓ -░░░░░ -U+253C - light vertical and horizontal -░░▓░░ -░░▓░░ -▓▓▓▓▓ -░░▓░░ -░░▓░░ -U+253D - left heavy and right vertical light -░░▓░░ -▓▓▓░░ -▓▓▓▓▓ -▓▓▓░░ -░░▓░░ -U+253E - right heavy and left vertical light -░░▓░░ -░░▓▓▓ -▓▓▓▓▓ -░░▓▓▓ -░░▓░░ -U+253F - vertical light and horizontal heavy -░░▓░░ -▓▓▓▓▓ -▓▓▓▓▓ -▓▓▓▓▓ -░░▓░░ -U+2540 - up heavy and down horizontal light -░▓▓▓░ -░▓▓▓░ -▓▓▓▓▓ -░░▓░░ -░░▓░░ -U+2541 - down heavy and up horizontal light -░░▓░░ -░░▓░░ -▓▓▓▓▓ -░▓▓▓░ -░▓▓▓░ -U+2542 - vertical heavy and horizontal light -░▓▓▓░ -░▓▓▓░ -▓▓▓▓▓ -░▓▓▓░ -░▓▓▓░ -U+2543 - left up heavy and right down light -░▓▓▓░ -▓▓▓▓░ -▓▓▓▓▓ -▓▓▓▓░ -░░▓░░ -U+2544 - right up heavy and left down light -░▓▓▓░ -░▓▓▓▓ -▓▓▓▓▓ -░▓▓▓▓ -░░▓░░ -U+2545 - left down heavy and right up light -░░▓░░ -▓▓▓▓░ -▓▓▓▓▓ -▓▓▓▓░ -░▓▓▓░ -U+2546 - right down heavy and left up light -░░▓░░ -░▓▓▓▓ -▓▓▓▓▓ -░▓▓▓▓ -░▓▓▓░ -U+2547 - down light and up horizontal heavy -░▓▓▓░ -▓▓▓▓▓ -▓▓▓▓▓ -▓▓▓▓▓ -░░▓░░ -U+2548 - up light and down horizontal heavy -░░▓░░ -▓▓▓▓▓ -▓▓▓▓▓ -▓▓▓▓▓ -░▓▓▓░ -U+2549 - right light and left vertical heavy -░▓▓▓░ -▓▓▓▓░ -▓▓▓▓▓ -▓▓▓▓░ -░▓▓▓░ -U+254A - left light and right vertical heavy -░▓▓▓░ -░▓▓▓▓ -▓▓▓▓▓ -░▓▓▓▓ -░▓▓▓░ -U+254B - heavy vertical and horizontal -░▓▓▓░ -▓▓▓▓▓ -▓▓▓▓▓ -▓▓▓▓▓ -░▓▓▓░ -U+254C - not handled here: light double dash horizontal -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+254D - not handled here: heavy double dash horizontal -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+254E - not handled here: light double dash vertical -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+254F - not handled here: heavy double dash vertical -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+2550 - double horizontal -░░░░░ -▓▓▓▓▓ -░░░░░ -▓▓▓▓▓ -░░░░░ -U+2551 - double vertical -░▓░▓░ -░▓░▓░ -░▓░▓░ -░▓░▓░ -░▓░▓░ -U+2552 - down single and right double -░░░░░ -░░▓▓▓ -░░▓░░ -░░▓▓▓ -░░▓░░ -U+2553 - down double and right single -░░░░░ -░░░░░ -░▓▓▓▓ -░▓░▓░ -░▓░▓░ -U+2554 - double down and right -░░░░░ -░▓▓▓▓ -░▓░░░ -░▓░▓▓ -░▓░▓░ -U+2555 - down single and left double -░░░░░ -▓▓▓░░ -░░▓░░ -▓▓▓░░ -░░▓░░ -U+2556 - down double and left single -░░░░░ -░░░░░ -▓▓▓▓░ -░▓░▓░ -░▓░▓░ -U+2557 - double down and left -░░░░░ -▓▓▓▓░ -░░░▓░ -▓▓░▓░ -░▓░▓░ -U+2558 - up single and right double -░░▓░░ -░░▓▓▓ -░░▓░░ -░░▓▓▓ -░░░░░ -U+2559 - up double and right single -░▓░▓░ -░▓░▓░ -░▓▓▓▓ -░░░░░ -░░░░░ -U+255A - double up and right -░▓░▓░ -░▓░▓▓ -░▓░░░ -░▓▓▓▓ -░░░░░ -U+255B - up single and left double -░░▓░░ -▓▓▓░░ -░░▓░░ -▓▓▓░░ -░░░░░ -U+255C - up double and left single -░▓░▓░ -░▓░▓░ -▓▓▓▓░ -░░░░░ -░░░░░ -U+255D - double up and left -░▓░▓░ -▓▓░▓░ -░░░▓░ -▓▓▓▓░ -░░░░░ -U+255E - vertical single and right double -░░▓░░ -░░▓▓▓ -░░▓░░ -░░▓▓▓ -░░▓░░ -U+255F - vertical double and right single -░▓░▓░ -░▓░▓░ -░▓░▓▓ -░▓░▓░ -░▓░▓░ -U+2560 - double vertical and right -░▓░▓░ -░▓░▓▓ -░▓░░░ -░▓░▓▓ -░▓░▓░ -U+2561 - vertical single and left double -░░▓░░ -▓▓▓░░ -░░▓░░ -▓▓▓░░ -░░▓░░ -U+2562 - vertical double and left single -░▓░▓░ -░▓░▓░ -▓▓░▓░ -░▓░▓░ -░▓░▓░ -U+2563 - double vertical and left -░▓░▓░ -▓▓░▓░ -░░░▓░ -▓▓░▓░ -░▓░▓░ -U+2564 - down single and horizontal double -░░░░░ -▓▓▓▓▓ -░░░░░ -▓▓▓▓▓ -░░▓░░ -U+2565 - down double and horizontal single -░░░░░ -░░░░░ -▓▓▓▓▓ -░▓░▓░ -░▓░▓░ -U+2566 - double down and horizontal -░░░░░ -▓▓▓▓▓ -░░░░░ -▓▓░▓▓ -░▓░▓░ -U+2567 - up single and horizontal double -░░▓░░ -▓▓▓▓▓ -░░░░░ -▓▓▓▓▓ -░░░░░ -U+2568 - up double and horizontal single -░▓░▓░ -░▓░▓░ -▓▓▓▓▓ -░░░░░ -░░░░░ -U+2569 - double up and horizontal -░▓░▓░ -▓▓░▓▓ -░░░░░ -▓▓▓▓▓ -░░░░░ -U+256A - vertical single and horizontal double -░░▓░░ -▓▓▓▓▓ -░░▓░░ -▓▓▓▓▓ -░░▓░░ -U+256B - vertical double and horizontal single -░▓░▓░ -░▓░▓░ -▓▓▓▓▓ -░▓░▓░ -░▓░▓░ -U+256C - double vertical and horizontal -░▓░▓░ -▓▓░▓▓ -░░░░░ -▓▓░▓▓ -░▓░▓░ -U+256D - not handled here: light arc down and right -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+256E - not handled here: light arc down and left -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+256F - not handled here: light arc up and left -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+2570 - not handled here: light arc up and right -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+2571 - not handled here: light diagonal upper right to lower left -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+2572 - not handled here: light diagonal upper left to lower right -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+2573 - not handled here: light diagonal cross -░░░░░ -░░░░░ -░░░░░ -░░░░░ -░░░░░ -U+2574 - light left -░░░░░ -░░░░░ -▓▓▓░░ -░░░░░ -░░░░░ -U+2575 - light up -░░▓░░ -░░▓░░ -░░▓░░ -░░░░░ -░░░░░ -U+2576 - light right -░░░░░ -░░░░░ -░░▓▓▓ -░░░░░ -░░░░░ -U+2577 - light down -░░░░░ -░░░░░ -░░▓░░ -░░▓░░ -░░▓░░ -U+2578 - heavy left -░░░░░ -▓▓▓░░ -▓▓▓░░ -▓▓▓░░ -░░░░░ -U+2579 - heavy up -░▓▓▓░ -░▓▓▓░ -░▓▓▓░ -░░░░░ -░░░░░ -U+257A - heavy right -░░░░░ -░░▓▓▓ -░░▓▓▓ -░░▓▓▓ -░░░░░ -U+257B - heavy down -░░░░░ -░░░░░ -░▓▓▓░ -░▓▓▓░ -░▓▓▓░ -U+257C - light left and heavy right -░░░░░ -░░▓▓▓ -▓▓▓▓▓ -░░▓▓▓ -░░░░░ -U+257D - light up and heavy down -░░▓░░ -░░▓░░ -░▓▓▓░ -░▓▓▓░ -░▓▓▓░ -U+257E - heavy left and light right -░░░░░ -▓▓▓░░ -▓▓▓▓▓ -▓▓▓░░ -░░░░░ -U+257F - heavy up and light down -░▓▓▓░ -░▓▓▓░ -░▓▓▓░ -░░▓░░ -░░▓░░ diff --git a/src/box_drawing_generate.sh b/src/box_drawing_generate.sh deleted file mode 100755 index 6451c4a..0000000 --- a/src/box_drawing_generate.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env bash -# Copyright © 2014 Egmont Koblinger -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -cat <<"END" -/* Generated by box_drawing_generate.sh; do not edit! */ - -#define VTE_BOX_DRAWING_5_BY_5_BITMAP(x11, x12, x13, x14, x15, \ - x21, x22, x23, x24, x25, \ - x31, x32, x33, x34, x35, \ - x41, x42, x43, x44, x45, \ - x51, x52, x53, x54, x55) \ - (((x11) << 24) | ((x12) << 23) | ((x13) << 22) | ((x14) << 21) | ((x15) << 20) | \ - ((x21) << 19) | ((x22) << 18) | ((x23) << 17) | ((x24) << 16) | ((x25) << 15) | \ - ((x31) << 14) | ((x32) << 13) | ((x33) << 12) | ((x34) << 11) | ((x35) << 10) | \ - ((x41) << 9) | ((x42) << 8) | ((x43) << 7) | ((x44) << 6) | ((x45) << 5) | \ - ((x51) << 4) | ((x52) << 3) | ((x53) << 2) | ((x54) << 1) | ((x55))) - -/* Definition of most of the glyphs in the 2500..257F range as 5x5 bitmaps - (bits 24..0 in the obvious order), see bug 709556 and ../doc/boxes.txt */ -static const guint32 _vte_draw_box_drawing_bitmaps[128] = { -END - -LC_ALL=C -pos=$((0x2500)) -while [ $pos -lt $((0x2580)) ]; do - read header - echo -e "\\t/* $header */" - echo -e "\\tVTE_BOX_DRAWING_5_BY_5_BITMAP(" - for y in 1 2 3 4 5; do - echo -ne '\t\t' - read line - for x in 1 2 3 4 5; do - if [ "${line:0:3}" == "▓" ]; then - echo -n '1' - else - echo -n '0' - fi - line="${line:3}" - if [ $x = 5 -a $y = 5 ]; then - echo -n ')' - fi - echo -n ', ' - if [ $x = 5 ]; then - echo - fi - done - done - echo - pos=$((pos+1)) -done < "$1" - -cat <<"END" -}; - -#undef VTE_BOX_DRAWING_5_BY_5_BITMAP -END diff --git a/src/buffer.h b/src/buffer.h index 0d92473..a8e90f3 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -1,19 +1,18 @@ /* * Copyright 2009 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ /* The interfaces in this file are subject to change at any time. */ diff --git a/src/cairo-glue.hh b/src/cairo-glue.hh new file mode 100644 index 0000000..6f10d9c --- /dev/null +++ b/src/cairo-glue.hh @@ -0,0 +1,32 @@ +/* + * Copyright © 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include + +#include "std-glue.hh" + +namespace vte { + +VTE_DECLARE_FREEABLE(cairo_font_options_t, cairo_font_options_destroy); +VTE_DECLARE_FREEABLE(cairo_rectangle_list_t, cairo_rectangle_list_destroy); +VTE_DECLARE_FREEABLE(cairo_region_t, cairo_region_destroy); +VTE_DECLARE_FREEABLE(cairo_surface_t, cairo_surface_destroy); +VTE_DECLARE_FREEABLE(cairo_t, cairo_destroy); + +} // namespace vte diff --git a/src/caps.hh b/src/caps.hh index 0fa8562..2ef61f4 100644 --- a/src/caps.hh +++ b/src/caps.hh @@ -1,19 +1,18 @@ /* * Copyright (C) 2001,2002 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ /* The interfaces in this file are subject to change at any time. */ diff --git a/src/cell.hh b/src/cell.hh index 63b908c..8222a71 100644 --- a/src/cell.hh +++ b/src/cell.hh @@ -2,19 +2,18 @@ * Copyright (C) 2002 Red Hat, Inc. * Copyright © 2018, 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ /* The interfaces in this file are subject to change at any time. */ @@ -146,6 +145,7 @@ typedef struct _VTE_GNUC_PACKED VteCellAttr { CELL_ATTR_BOOL(blink, BLINK) CELL_ATTR_BOOL(dim, DIM) CELL_ATTR_BOOL(invisible, INVISIBLE) + CELL_ATTR_UINT(shellintegration, SHELLINTEGRATION) /* ATTR_BOOL(boxed, BOXED) */ } VteCellAttr; static_assert(sizeof (VteCellAttr) == 16, "VteCellAttr has wrong size"); diff --git a/src/chunk.cc b/src/chunk.cc index 5049aa6..1371cf8 100644 --- a/src/chunk.cc +++ b/src/chunk.cc @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -26,9 +26,6 @@ namespace vte { namespace base { -static_assert(sizeof(Chunk) <= Chunk::k_chunk_size - 2 *sizeof(void*), "Chunk too large"); -static_assert(offsetof(Chunk, data) == offsetof(Chunk, dataminusone) + 1, "Chunk layout wrong"); - void Chunk::recycle() noexcept { @@ -39,7 +36,7 @@ Chunk::recycle() noexcept std::stack, std::list>> Chunk::g_free_chunks; Chunk::unique_type -Chunk::get(void) noexcept +Chunk::get(Chunk const* chain_to) noexcept { Chunk* chunk; if (!g_free_chunks.empty()) { @@ -51,6 +48,9 @@ Chunk::get(void) noexcept chunk = new Chunk(); } + if (chain_to) + chunk->chain(chain_to); + return Chunk::unique_type(chunk); } void diff --git a/src/chunk.hh b/src/chunk.hh index 65bce52..26549de 100644 --- a/src/chunk.hh +++ b/src/chunk.hh @@ -1,32 +1,42 @@ /* - * Copyright © 2018 Christian Persch + * Copyright © 2018, 2020 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once +#include #include +#include +#include #include #include #include +#include namespace vte { namespace base { class Chunk { + // A Chunk contains the raw data read from PTY. + // + // Data will be read in blocks and accumulated into chunks. + // Chunks will be processed in (potentially) multiple + // parts (by potentially multiple (sub)parsers). + // private: class Recycler { public: @@ -39,24 +49,110 @@ private: void recycle() noexcept; - static unsigned int const k_max_free_chunks = 16; + static constexpr const unsigned k_max_free_chunks = 16u; + static constexpr const unsigned k_chunk_size = 0x2000u - 2 * sizeof(void*); + static constexpr const unsigned k_overlap_size = 1u; enum class Flags : uint8_t { - eSEALED = 1u << 0, - eEOS = 1u << 1, + eSEALED = 1u << 0, + eEOS = 1u << 1, + eCHAINED = 1u << 2, }; + uint8_t* m_data{nullptr}; + size_t m_capacity{0}; + size_t m_start{k_overlap_size}; + size_t m_size{k_overlap_size}; + uint8_t m_flags{0}; + public: + + // Returns: pointer to the raw data storage (includes space for pre-begin data) + inline constexpr uint8_t* data() const noexcept { return m_data; } + + // Returns: the storage capacity of data() + inline constexpr auto capacity() const noexcept { return m_capacity; } + + // Returns: pointer to where to start reading available data (inside data()) + inline constexpr uint8_t const* begin_reading() const noexcept { assert(m_start <= m_size); return data() + m_start; } + + // Returns: pointer to the end of available data() + inline constexpr uint8_t const* end_reading() const noexcept { return data() + m_size; }; + + // Returns: how much data there is to read between begin_reading() and end_reading() + inline constexpr auto size_reading() const noexcept { return m_size - m_start; } + + // Returns: whether there is any data to read + inline constexpr bool has_reading() const noexcept { return begin_reading() < end_reading(); } + + // Sets the value returned by begin_reading(). To be used after + // processing some data, so that the next round knows where to start. + void set_begin_reading(uint8_t const* ptr) noexcept + { + assert(ptr >= data() && + (!chained() || ptr > data()) && + ptr <= data() + capacity()); + m_start = unsigned(ptr - data()); + } + + // Returns: pointer to buffer to write data into + // Note that there is *always* at least one byte writable at begin_writing()-1 + // to be used when reading from a PTY in CPKT mode. + inline constexpr uint8_t* begin_writing() const noexcept { assert(m_size > 0); return data() + m_size; } + + // Returns: size of begin_writing() buffer + inline constexpr auto capacity_writing() const noexcept { return m_capacity - m_size; } + + // Add to chunk size. To be called after writing data to begin_writing(). + inline void add_size(ssize_t len) + { + assert(len >= 0 && size_t(len) <= capacity_writing()); + m_size += len; + } + + // Chain this Chunk to some other Chunk. + // If the other chunk isn't EOS, we + // copy the last k_overlap_size byte(s) from it to the start of + // the new chunk, and set the new chunk as chained. + // This will allow rewinding the stream during processing, + // without keeping the preceding chunk around. + void chain(Chunk const* previous) + { + assert(m_size == k_overlap_size && m_start == m_size); // or call reset() here? + + if (!previous->eos()) { + std::memcpy(m_data, + previous->m_data + previous->m_size - k_overlap_size, + k_overlap_size); + + set_chained(); + } + } + + // Special-case operator new, so that we can allocate + // the chunk data together with the instance. + void* operator new(std::size_t count) + { + assert(count < k_chunk_size); + return std::malloc(k_chunk_size); + } + + // Special-case operator delete for pairing with operator new. + void operator delete(void* ptr) + { + std::free(ptr); + } + + // Type to use when storing a Chunk, so that chunks can be recycled. using unique_type = std::unique_ptr; - static unsigned int const k_chunk_size = 0x2000; + Chunk() + : m_data{reinterpret_cast(this) + sizeof(*this)}, + m_capacity{k_chunk_size - sizeof(*this)} + { + std::memset(m_data, 0, k_overlap_size); + } - unsigned int len{0}; - uint8_t m_flags{0}; - uint8_t dataminusone; /* Hack: Keep it right before data, so that data[-1] is valid and usable */ - uint8_t data[k_chunk_size - 2 * sizeof(void*) - 2 - sizeof(unsigned int)]; - - Chunk() = default; Chunk(Chunk const&) = delete; Chunk(Chunk&&) = delete; ~Chunk() = default; @@ -64,24 +160,43 @@ public: Chunk& operator= (Chunk const&) = delete; Chunk& operator= (Chunk&&) = delete; + // Resets the chunk. Reset chunks will not be rewindable! void reset() noexcept { - len = 0; + std::memset(m_data, 0, k_overlap_size); + m_start = m_size = k_overlap_size; m_flags = 0; } - inline constexpr size_t capacity() const noexcept { return sizeof(data); } - inline constexpr size_t remaining_capacity() const noexcept { return capacity() - len; } + // Returns: a new or recycled Chunk + static unique_type get(Chunk const* chain_to) noexcept; - static unique_type get() noexcept; + // Prune recycled chunks static void prune(unsigned int max_size = k_max_free_chunks) noexcept; + // Returns: whether the chunk is sealed, i.e. must not be used + // to write more data into inline constexpr bool sealed() const noexcept { return m_flags & (uint8_t)Flags::eSEALED; } + + // Seal the chunk inline void set_sealed() noexcept { m_flags |= (uint8_t)Flags::eSEALED; } + // Returns: whether the chunk is an EOS (end-of-stream) inline constexpr bool eos() const noexcept { return m_flags & (uint8_t)Flags::eEOS; } + + // Set the chunk EOS inline void set_eos() noexcept { m_flags |= (uint8_t)Flags::eEOS; } + // Returns: whether the chunk was chained to some other chunk + // and thus m_start may be set to < k_overlap_size. + inline constexpr bool chained() const noexcept { return m_flags & (uint8_t)Flags::eCHAINED; } + + // Set the chunk as chained + inline void set_chained() noexcept { m_flags |= (uint8_t)Flags::eCHAINED; } + + // Get the maximum chunk size + static inline constexpr unsigned max_size() noexcept { return k_chunk_size; } + private: /* Note that this is using the standard deleter, not Recycler */ diff --git a/src/clipboard-gtk.cc b/src/clipboard-gtk.cc new file mode 100644 index 0000000..2105d09 --- /dev/null +++ b/src/clipboard-gtk.cc @@ -0,0 +1,836 @@ +/* + * Copyright © 2020, 2022 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include "config.h" + +#include "clipboard-gtk.hh" +#include "glib-glue.hh" +#include "gtk-glue.hh" +#include "widget.hh" +#include "vteinternal.hh" + +#include +#include +#include + +#define MIME_TYPE_TEXT_PLAIN_UTF8 "text/plain;charset=utf-8" +#define MIME_TYPE_TEXT_HTML_UTF8 "text/html;charset=utf-8" +#define MIME_TYPE_TEXT_HTML_UTF16 "text/html" + +namespace vte::platform { + +// Note: +// Each Clipboard is owned via std::shared_ptr by Widget, which drops that ref on unrealize. +// The Clipboard keeps a std::weak_ref back on Widget, and converts that to a std::shared_ptr +// via .lock() only when it wants to dispatch a callback. +// Clipboard::Offer and Clipboard::Request own their Clipboard as a std::shared_ptr. + +Clipboard::Clipboard(Widget& delegate, + ClipboardType type) /* throws */ + : m_delegate{delegate.weak_from_this()}, + m_type{type} +{ + auto display = gtk_widget_get_display(delegate.gtk()); + + switch (type) { + case ClipboardType::PRIMARY: + m_clipboard = vte::glib::make_ref +#if VTE_GTK == 3 + (gtk_clipboard_get_for_display(display, GDK_SELECTION_PRIMARY)); +#elif VTE_GTK == 4 + (gdk_display_get_primary_clipboard(display)); +#endif + break; + case ClipboardType::CLIPBOARD: + m_clipboard = vte::glib::make_ref +#if VTE_GTK == 3 + (gtk_clipboard_get_for_display(display, GDK_SELECTION_CLIPBOARD)); +#elif VTE_GTK == 4 + (gdk_display_get_clipboard(display)); +#endif + break; + } + + if (!m_clipboard) + throw std::runtime_error{"Failed to create clipboard"}; +} + +class Clipboard::Offer { +#if VTE_GTK == 4 + friend class ContentProvider; +#endif +public: + Offer(Clipboard& clipboard, + OfferGetCallback get_callback, + OfferClearCallback clear_callback) + : m_clipboard{clipboard.shared_from_this()}, + m_get_callback{get_callback}, + m_clear_callback{clear_callback} + { + } + + ~Offer() = default; + + auto& clipboard() const noexcept { return *m_clipboard; } + + static void run(std::unique_ptr offer, + ClipboardFormat format) noexcept; + +private: + std::shared_ptr m_clipboard; + OfferGetCallback m_get_callback; + OfferClearCallback m_clear_callback; + +#if VTE_GTK == 3 + + void dispatch_get(ClipboardFormat format, + GtkSelectionData* data) noexcept + try + { + if (auto delegate = clipboard().m_delegate.lock()) { + auto str = (*delegate.*m_get_callback)(clipboard(), format); + if (!str) + return; + + switch (format) { + case ClipboardFormat::TEXT: + // This makes yet another copy of the data... :( + gtk_selection_data_set_text(data, str->data(), str->size()); + break; + + case ClipboardFormat::HTML: { + auto const target = gtk_selection_data_get_target(data); + + if (target == gdk_atom_intern_static_string(MIME_TYPE_TEXT_HTML_UTF8)) { + // This makes yet another copy of the data... :( + gtk_selection_data_set(data, + target, + 8, + reinterpret_cast(str->data()), + str->size()); + } else if (target == gdk_atom_intern_static_string(MIME_TYPE_TEXT_HTML_UTF16)) { + auto [html, len] = text_to_utf16_mozilla(*str); + + // This makes yet another copy of the data... :( + if (html) { + gtk_selection_data_set(data, + target, + 16, + reinterpret_cast(html.get()), + len); + } + } + break; + } + } + } + } + catch (...) + { + vte::log_exception(); + } + + void dispatch_clear() noexcept + try + { + if (auto delegate = clipboard().m_delegate.lock()) { + (*delegate.*m_clear_callback)(clipboard()); + } + } + catch (...) + { + vte::log_exception(); + } + + static void + clipboard_get_cb(GtkClipboard* clipboard, + GtkSelectionData* data, + guint info, + void* user_data) noexcept + { + if (int(info) != vte::to_integral(ClipboardFormat::TEXT) && + int(info) != vte::to_integral(ClipboardFormat::HTML)) + return; + + reinterpret_cast(user_data)->dispatch_get(ClipboardFormat(info), data); + } + + static void + clipboard_clear_cb(GtkClipboard* clipboard, + void* user_data) noexcept + { + // Assume ownership of the Offer, and delete it after dispatching the callback + auto offer = std::unique_ptr{reinterpret_cast(user_data)}; + offer->dispatch_clear(); + } + + static std::pair + targets_for_format(ClipboardFormat format) + { + switch (format) { + case vte::platform::ClipboardFormat::TEXT: { + static GtkTargetEntry *text_targets = nullptr; + static int n_text_targets; + + if (text_targets == nullptr) { + auto list = vte::take_freeable(gtk_target_list_new(nullptr, 0)); + gtk_target_list_add_text_targets(list.get(), + vte::to_integral(ClipboardFormat::TEXT)); + + text_targets = gtk_target_table_new_from_list(list.get(), &n_text_targets); + } + + return {text_targets, n_text_targets}; + } + + case vte::platform::ClipboardFormat::HTML: { + static GtkTargetEntry *html_targets = nullptr; + static int n_html_targets; + + if (html_targets == nullptr) { + auto list = vte::take_freeable(gtk_target_list_new(nullptr, 0)); + gtk_target_list_add_text_targets(list.get(), + vte::to_integral(ClipboardFormat::TEXT)); + gtk_target_list_add(list.get(), + gdk_atom_intern_static_string(MIME_TYPE_TEXT_HTML_UTF8), + 0, + vte::to_integral(ClipboardFormat::HTML)); + gtk_target_list_add(list.get(), + gdk_atom_intern_static_string(MIME_TYPE_TEXT_HTML_UTF16), + 0, + vte::to_integral(ClipboardFormat::HTML)); + + html_targets = gtk_target_table_new_from_list(list.get(), &n_html_targets); + } + + return {html_targets, n_html_targets}; + } + default: + g_assert_not_reached(); + } + } + +#endif /* VTE_GTK == 3 */ + + static std::pair + text_to_utf16_mozilla(std::string_view const& str) noexcept + { + // Use g_convert() instead of g_utf8_to_utf16() since the former + // adds a BOM which Mozilla requires for text/html format. + auto len = size_t{}; + auto data = g_convert(str.data(), str.size(), + "UTF-16", // conver to UTF-16 + "UTF-8", // convert from UTF-8 + nullptr, // out bytes_read + &len, + nullptr); + return {vte::glib::take_string(data), len}; + } + +}; // class Clipboard::Offer + + +#if VTE_GTK == 4 + +static void* task_tag; + +using VteContentProvider = GdkContentProvider; + +class ContentProvider { +public: + ContentProvider(VteContentProvider* native) + : m_native{native} + { + } + + ContentProvider() = default; + ~ContentProvider() = default; + + ContentProvider(ContentProvider const&) = delete; + ContentProvider(ContentProvider&&) = delete; + + ContentProvider& operator=(ContentProvider const&) = delete; + ContentProvider& operator=(ContentProvider&&) = delete; + + void take_offer(std::unique_ptr offer) + { + m_offer = std::move(offer); + } + + void set_format(ClipboardFormat format) + { + m_format = format; + m_content_formats = format_to_content_formats(format); + } + + void content_changed() + { + } + + void attach_clipboard(GdkClipboard* gdk_clipboard) + { + } + + void + detach_clipboard(GdkClipboard* gdk_clipboard) + { + if (auto const delegate = m_offer->clipboard().m_delegate.lock()) { + (*delegate.*m_offer->m_clear_callback)(m_offer->clipboard()); + } + } + + GdkContentFormats* + ref_formats() + { + return m_content_formats ? gdk_content_formats_ref(m_content_formats.get()) : nullptr; + } + + GdkContentFormats* + ref_storable_formats() + { + return format_to_content_formats(ClipboardFormat::TEXT).release(); + } + + void + write_mime_type_async(char const* mime_type, + GOutputStream* stream, + int io_priority, + GCancellable* cancellable, + GAsyncReadyCallback callback, + void* user_data) + { + auto task = vte::glib::take_ref(g_task_new(m_native, cancellable, callback, user_data)); + g_task_set_priority(task.get(), io_priority); + g_task_set_source_tag(task.get(), &task_tag); +#if GLIB_CHECK_VERSION(2, 60, 0) + g_task_set_name(task.get(), "vte-content-provider-write-async"); +#endif + + auto const format = format_from_mime_type(mime_type); + if (format == ClipboardFormat::INVALID) + return g_task_return_new_error(task.get(), G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, + "Unknown format"); + + if (auto const delegate = m_offer->clipboard().m_delegate.lock()) { + auto str = (*delegate.*m_offer->m_get_callback)(m_offer->clipboard(), format); + if (!str) + return g_task_return_new_error(task.get(), G_IO_ERROR, G_IO_ERROR_NOT_FOUND, + "Nothing on offer"); + + auto bytes = vte::Freeable{}; + switch (format_from_mime_type(mime_type)) { + case ClipboardFormat::TEXT: { + bytes = vte::take_freeable(g_bytes_new_with_free_func(g_strndup(str->data(), str->size()), + str->size(), + g_free, nullptr)); + break; + } + + case ClipboardFormat::HTML: { + auto const type = std::string_view{mime_type}; + if (type == MIME_TYPE_TEXT_HTML_UTF8) { + bytes = vte::take_freeable(g_bytes_new_with_free_func(g_strndup(str->data(), str->size()), + str->size(), + g_free, nullptr)); + } else if (type == MIME_TYPE_TEXT_HTML_UTF16) { + auto [html, len] = m_offer->text_to_utf16_mozilla(*str); + + if (html) { + bytes = vte::take_freeable(g_bytes_new_with_free_func(html.release(), len, g_free, nullptr)); + break; + } else { + return g_task_return_new_error(task.get(), G_IO_ERROR, G_IO_ERROR_INVALID_DATA, + "Invalid data"); + } + } + + break; + } + case ClipboardFormat::INVALID: + default: + break; + } + + if (bytes) { + auto provider = vte::glib::take_ref(gdk_content_provider_new_for_bytes(mime_type, bytes.release())); + return gdk_content_provider_write_mime_type_async(provider.get(), + mime_type, + stream, + io_priority, + cancellable, + write_mime_type_async_done_cb, + task.release()); // transfer + } + } + + return g_task_return_new_error(task.get(), G_IO_ERROR, G_IO_ERROR_NOT_FOUND, + "Offer expired"); + } + + bool + write_mime_type_finish(GAsyncResult* result, + GError** error) + { + auto const task = G_TASK(result); + return g_task_propagate_boolean(task, error); + } + + bool + get_value(GValue* value, + GError** error) + { + if (G_VALUE_HOLDS(value, G_TYPE_STRING)) { + if (auto const delegate = m_offer->clipboard().m_delegate.lock()) { + auto const str = (*delegate.*m_offer->m_get_callback)(m_offer->clipboard(), ClipboardFormat::TEXT); + if (!str) + return false; + + g_value_take_string(value, g_strndup(str->data(), str->size())); + return true; + } + } + + return false; + } + + void + offer() noexcept + { + gdk_clipboard_set_content(m_offer->clipboard().platform(), m_native); + } + + +private: + VteContentProvider* m_native{nullptr}; /* unowned */ + + std::unique_ptr m_offer; + + ClipboardFormat m_format{ClipboardFormat::INVALID}; + vte::Freeable m_content_formats; + + vte::Freeable + format_to_content_formats(ClipboardFormat format) noexcept + { + auto builder = vte::take_freeable(gdk_content_formats_builder_new()); + + switch (format) { + case ClipboardFormat::TEXT: + gdk_content_formats_builder_add_mime_type(builder.get(), + MIME_TYPE_TEXT_PLAIN_UTF8); + break; + case ClipboardFormat::HTML: + gdk_content_formats_builder_add_mime_type(builder.get(), + MIME_TYPE_TEXT_HTML_UTF8); + gdk_content_formats_builder_add_mime_type(builder.get(), + MIME_TYPE_TEXT_HTML_UTF16); + break; + case ClipboardFormat::INVALID: + default: + __builtin_unreachable(); + } + + return vte::take_freeable(gdk_content_formats_builder_to_formats(builder.release())); + } + + ClipboardFormat + format_from_mime_type(std::string_view const& mime_type) noexcept + { + if (mime_type == MIME_TYPE_TEXT_PLAIN_UTF8) + return ClipboardFormat::TEXT; + else if (mime_type == MIME_TYPE_TEXT_HTML_UTF8 || + mime_type == MIME_TYPE_TEXT_HTML_UTF16) + return ClipboardFormat::HTML; + else + return ClipboardFormat::INVALID; + } + + static void + write_mime_type_async_done_cb(GObject* source, + GAsyncResult* result, + void* user_data) noexcept + try + { + auto const provider = GDK_CONTENT_PROVIDER(source); + auto const task = vte::glib::take_ref(reinterpret_cast(user_data)); // ref added on ::write_mime_type_async + + auto error = vte::glib::Error{}; + if (!gdk_content_provider_write_mime_type_finish(provider, result, error)) { + return g_task_return_error(task.get(), error.release()); + } + + return g_task_return_boolean(task.get(), true); + } + catch (...) + { + vte::log_exception(); + } + +}; // class ContentProvider + +#define VTE_TYPE_CONTENT_PROVIDER (vte_content_provider_get_type()) +#define VTE_CONTENT_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), VTE_TYPE_CONTENT_PROVIDER, VteContentProvider)) +#define VTE_CONTENT_PROVIDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), VTE_TYPE_CONTENT_PROVIDER, VteContentProviderClass)) +#define VTE_IS_CONTENT_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), VTE_TYPE_CONTENT_PROVIDER)) +#define VTE_IS_CONTENT_PROVIDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), VTE_TYPE_CONTENT_PROVIDER)) +#define VTE_CONTENT_PROVIDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), VTE_TYPE_CONTENT_PROVIDER, VteContentProviderClass)) + +using VteContentProviderClass = GdkContentProviderClass; + +static GType vte_content_provider_get_type(void); + +G_DEFINE_TYPE_WITH_CODE(VteContentProvider, vte_content_provider, GDK_TYPE_CONTENT_PROVIDER, + { + VteContentProvider_private_offset = + g_type_add_instance_private(g_define_type_id, sizeof(ContentProvider)); + }); + +template +static inline auto +IMPL(T* that) +{ + auto const pthat = reinterpret_cast(that); + return std::launder(reinterpret_cast(vte_content_provider_get_instance_private(pthat))); +} + +static void +vte_content_provider_content_changed(GdkContentProvider* provider) noexcept +try +{ + GDK_CONTENT_PROVIDER_CLASS(vte_content_provider_parent_class)->content_changed(provider); + + IMPL(provider)->content_changed(); +} +catch (...) +{ + vte::log_exception(); +} + +static void +vte_content_provider_attach_clipboard(GdkContentProvider* provider, + GdkClipboard* clipboard) noexcept +try +{ + GDK_CONTENT_PROVIDER_CLASS(vte_content_provider_parent_class)->attach_clipboard(provider, + clipboard); + + IMPL(provider)->attach_clipboard(clipboard); +} +catch (...) +{ + vte::log_exception(); +} + +static void +vte_content_provider_detach_clipboard(GdkContentProvider* provider, + GdkClipboard* clipboard) noexcept +try +{ + GDK_CONTENT_PROVIDER_CLASS(vte_content_provider_parent_class)->detach_clipboard(provider, + clipboard); + + IMPL(provider)->detach_clipboard(clipboard); +} +catch (...) +{ + vte::log_exception(); +} + +static GdkContentFormats* +vte_content_provider_ref_formats(GdkContentProvider* provider) noexcept +try +{ + return IMPL(provider)->ref_formats(); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +static GdkContentFormats* +vte_content_provider_ref_storable_formats(GdkContentProvider* provider) noexcept +try +{ + return IMPL(provider)->ref_storable_formats(); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +static void +vte_content_provider_write_mime_type_async(GdkContentProvider* provider, + char const* mime_type, + GOutputStream* stream, + int io_priority, + GCancellable* cancellable, + GAsyncReadyCallback callback, + void* user_data) noexcept +try +{ + return IMPL(provider)->write_mime_type_async(mime_type, + stream, + io_priority, + cancellable, + callback, user_data); +} +catch (...) +{ + vte::log_exception(); +} + +static gboolean +vte_content_provider_write_mime_type_finish(GdkContentProvider* provider, + GAsyncResult* result, + GError** error) noexcept +try +{ + assert(g_task_is_valid(result, provider)); + assert(g_task_get_source_tag(G_TASK(result)) == &task_tag); + + return IMPL(provider)->write_mime_type_finish(result, error); +} +catch (...) +{ + vte::glib::set_error_from_exception(error); + return false; +} + +static gboolean +vte_content_provider_get_value(GdkContentProvider* provider, + GValue* value, + GError** error) noexcept +try +{ + if (IMPL(provider)->get_value(value, error)) + return true; + + return GDK_CONTENT_PROVIDER_CLASS(vte_content_provider_parent_class)->get_value(provider, + value, + error); +} +catch (...) +{ + vte::glib::set_error_from_exception(error); + return false; +} + +static void +vte_content_provider_init(VteContentProvider* provider) +try +{ + auto place = vte_content_provider_get_instance_private(provider); + new (place) ContentProvider{provider}; +} +catch (...) +{ + vte::log_exception(); + g_error("Failed to create ContentProvider\n"); +} + +static void +vte_content_provider_finalize(GObject* object) noexcept +{ + IMPL(object)->~ContentProvider(); + + G_OBJECT_CLASS(vte_content_provider_parent_class)->finalize(object); +} + +static void +vte_content_provider_class_init(VteContentProviderClass *klass) +{ + auto gobject_class = G_OBJECT_CLASS(klass); + gobject_class->finalize = vte_content_provider_finalize; + + auto provider_class = GDK_CONTENT_PROVIDER_CLASS(klass); + provider_class->content_changed = vte_content_provider_content_changed; + provider_class->attach_clipboard = vte_content_provider_attach_clipboard; + provider_class->detach_clipboard = vte_content_provider_detach_clipboard; + provider_class->ref_formats = vte_content_provider_ref_formats; + provider_class->ref_storable_formats = vte_content_provider_ref_storable_formats; + provider_class->write_mime_type_async = vte_content_provider_write_mime_type_async; + provider_class->write_mime_type_finish = vte_content_provider_write_mime_type_finish; + provider_class->get_value = vte_content_provider_get_value; +} + +static auto +vte_content_provider_new(void) noexcept +{ + return reinterpret_cast + (g_object_new(VTE_TYPE_CONTENT_PROVIDER, nullptr)); +} + +#endif /* VTE_GTK == 4 */ + +void +Clipboard::Offer::run(std::unique_ptr offer, + ClipboardFormat format) noexcept +{ +#if VTE_GTK == 3 + auto [targets, n_targets] = targets_for_format(format); + + // Transfers ownership of *offer to the clipboard. If setting succeeds, + // the clipboard will own *offer until the clipboard_data_clear_cb + // callback is called. + // If setting the clipboard fails, the clear callback will never be + // called. + if (gtk_clipboard_set_with_data(offer->clipboard().platform(), + targets, n_targets, + clipboard_get_cb, + clipboard_clear_cb, + offer.get())) { + gtk_clipboard_set_can_store(offer->clipboard().platform(), targets, n_targets); + offer.release(); // transferred to clipboard above + } +#elif VTE_GTK == 4 + // It seems that to make the content available lazily (i.e. only + // generate it when the clipboard contents are requested), or + // receive a notification when said content no longer owns the + // clipboard, one has to write a new GdkContentProvider implementation. + auto const provider = vte::glib::take_ref(vte_content_provider_new()); + // Transfers ownership of *offer to the provider. + auto const impl = IMPL(provider.get()); + impl->take_offer(std::move(offer)); + impl->set_format(format); + impl->offer(); +#endif /* VTE_GTK */ +} + +class Clipboard::Request { +public: + Request(Clipboard& clipboard, + RequestDoneCallback done_callback, + RequestFailedCallback failed_callback) + : m_clipboard{clipboard.shared_from_this()}, + m_done_callback{done_callback}, + m_failed_callback{failed_callback} + { + } + + ~Request() = default; + + auto& clipboard() const noexcept { return *m_clipboard; } + + static void run(std::unique_ptr request) noexcept + { + auto const platform = request->clipboard().platform(); +#if VTE_GTK == 3 + gtk_clipboard_request_text(platform, + text_received_cb, + request.release()); +#elif VTE_GTK == 4 + gdk_clipboard_read_text_async(platform, + nullptr, // cancellable + GAsyncReadyCallback(text_received_cb), + request.release()); +#endif /* VTE_GTK */ + } + +private: + std::shared_ptr m_clipboard; + RequestDoneCallback m_done_callback; + RequestFailedCallback m_failed_callback; + +#if VTE_GTK == 3 + void dispatch(char const *text) noexcept + try + { + if (auto const delegate = clipboard().m_delegate.lock()) { + if (text) + (*delegate.*m_done_callback)(clipboard(), {text, strlen(text)}); + else + (*delegate.*m_failed_callback)(clipboard()); + } + } + catch (...) + { + vte::log_exception(); + } + + static void text_received_cb(GtkClipboard *clipboard, + char const* text, + gpointer data) noexcept + { + auto const request = std::unique_ptr{reinterpret_cast(data)}; + request->dispatch(text); + } + +#elif VTE_GTK == 4 + + void dispatch(GObject* source, + GAsyncResult* result) noexcept + try + { + // Well done gtk4 to not simply tell us also the length of the received text! + auto const text = vte::glib::take_string + (gdk_clipboard_read_text_finish(GDK_CLIPBOARD(source), + result, + nullptr)); + + if (auto const delegate = clipboard().m_delegate.lock()) { + if (text) + (*delegate.*m_done_callback)(clipboard(), {text.get(), strlen(text.get())}); + else + (*delegate.*m_failed_callback)(clipboard()); + } + } + catch (...) + { + vte::log_exception(); + } + + static void text_received_cb(GObject* source, + GAsyncResult* result, + gpointer data) noexcept + { + auto const request = std::unique_ptr{reinterpret_cast(data)}; + request->dispatch(source, result); + } + +#endif /* VTE_GTK */ + +}; // class Clipboard::Request + +void +Clipboard::offer_data(ClipboardFormat format, + OfferGetCallback get_callback, + OfferClearCallback clear_callback) /* throws */ +{ + Offer::run(std::make_unique(*this, get_callback, clear_callback), format); +} + +void +Clipboard::set_text(char const* text, + size_t size) noexcept +{ +#if VTE_GTK == 3 + gtk_clipboard_set_text(platform(), text, size); +#elif VTE_GTK == 4 + // This API sucks + gdk_clipboard_set_text(platform(), text); +#endif /* VTE_GTK */ +} + +void +Clipboard::request_text(RequestDoneCallback done_callback, + RequestFailedCallback failed_callback) /* throws */ +{ + Request::run(std::make_unique(*this, done_callback, failed_callback)); +} + +} // namespace vte::platform diff --git a/src/clipboard-gtk.hh b/src/clipboard-gtk.hh new file mode 100644 index 0000000..c09fd6f --- /dev/null +++ b/src/clipboard-gtk.hh @@ -0,0 +1,104 @@ +/* + * Copyright © 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include +#include +#include + +#include + +#include "glib-glue.hh" +#include "refptr.hh" +#include "fwd.hh" + +namespace vte::platform { + +enum class ClipboardFormat { + TEXT, + HTML, +#if VTE_GTK == 4 + INVALID = -1 +#endif +}; + +enum class ClipboardType { + CLIPBOARD = 0, + PRIMARY = 1 +}; + +#if VTE_GTK == 4 +class ContentProvider; +#endif + +class Clipboard : public std::enable_shared_from_this { +#if VTE_GTK == 4 + friend class ContentProvider; +#endif +public: + Clipboard(Widget& delegate, + ClipboardType type) /* throws */; + ~Clipboard() = default; + + Clipboard(Clipboard const&) = delete; + Clipboard(Clipboard&&) = delete; + + Clipboard& operator=(Clipboard const&) = delete; + Clipboard& operator=(Clipboard&&) = delete; + + constexpr auto type() const noexcept { return m_type; } + + void disown() noexcept + { + m_delegate.reset(); + } + + using OfferGetCallback = std::optional(Widget::*)(Clipboard const&, + ClipboardFormat format); + using OfferClearCallback = void (Widget::*)(Clipboard const&); + using RequestDoneCallback = void (Widget::*)(Clipboard const&, + std::string_view const&); + using RequestFailedCallback = void (Widget::*)(Clipboard const&); + + void offer_data(ClipboardFormat format, + OfferGetCallback get_callback, + OfferClearCallback clear_callback) /* throws */; + + void set_text(char const* text, + size_t size) noexcept; + + void request_text(RequestDoneCallback done_callback, + RequestFailedCallback failed_callback) /* throws */; + +private: +#if VTE_GTK == 3 + vte::glib::RefPtr m_clipboard; +#elif VTE_GTK == 4 + vte::glib::RefPtr m_clipboard; +#endif + std::weak_ptr m_delegate; + ClipboardType m_type; + + auto platform() const noexcept { return m_clipboard.get(); } + + class Offer; + class Request; + +}; // class Clipboard + +} // namespace vte::platform diff --git a/src/color-triple.hh b/src/color-triple.hh index 3f94672..ebe6bd4 100644 --- a/src/color-triple.hh +++ b/src/color-triple.hh @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once diff --git a/src/cxx-utils.hh b/src/cxx-utils.hh new file mode 100644 index 0000000..c74c0f3 --- /dev/null +++ b/src/cxx-utils.hh @@ -0,0 +1,70 @@ +/* + * Copyright © 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include +#include +#include +#include + +namespace vte { + +// This is like std::clamp, except that it doesn't throw when +// max_v +constexpr inline T const& +clamp(T const& v, + T const& min_v, + T const& max_v) +{ + return std::max(std::min(v, max_v), min_v); +} + +// Converts from E to the underlying integral type, where E is an enum +// with integral underlying type. +template +inline constexpr auto to_integral(E e) noexcept + -> std::enable_if_t && + std::is_integral_v>, + std::underlying_type_t> +{ + return static_cast>(e); +} + +#if VTE_DEBUG +void log_exception(char const* func = __builtin_FUNCTION(), + char const* filename = __builtin_FILE(), + int const line = __builtin_LINE()) noexcept; +#else +void log_exception() noexcept; +#endif + +template +class FreeablePtrDeleter { +public: + void operator()(T* obj) const + { + if (obj) + func(obj); + } +}; + +template +using FreeablePtr = std::unique_ptr>; + +} // namespace vte diff --git a/src/debug.cc b/src/debug.cc index 5b1b0d8..8c20cbc 100644 --- a/src/debug.cc +++ b/src/debug.cc @@ -1,19 +1,18 @@ /* * Copyright (C) 2002,2003 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -28,7 +27,7 @@ guint _vte_debug_flags; void _vte_debug_init(void) { -#ifdef VTE_DEBUG +#if VTE_DEBUG const GDebugKey keys[] = { { "misc", VTE_DEBUG_MISC }, { "io", VTE_DEBUG_IO }, @@ -60,11 +59,12 @@ _vte_debug_init(void) { "ringview", VTE_DEBUG_RINGVIEW }, { "bidi", VTE_DEBUG_BIDI }, { "conversion", VTE_DEBUG_CONVERSION }, + { "exceptions", VTE_DEBUG_EXCEPTIONS }, }; _vte_debug_flags = g_parse_debug_string (g_getenv("VTE_DEBUG"), keys, G_N_ELEMENTS (keys)); - _vte_debug_print(0xFFFFFFFF, "VTE debug flags = %x\n", _vte_debug_flags); + _vte_debug_print(0xFFFFFFFFu, "VTE debug flags = %x\n", _vte_debug_flags); #endif /* VTE_DEBUG */ } @@ -72,7 +72,7 @@ const char * _vte_debug_sequence_to_string(const char *str, gssize length) { -#if defined(VTE_DEBUG) +#if VTE_DEBUG static const char codes[][6] = { "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", "BS", "HT", "LF", "VT", "FF", "CR", "SO", "SI", @@ -125,7 +125,7 @@ _vte_debug_sequence_to_string(const char *str, #endif /* VTE_DEBUG */ } -#ifdef VTE_DEBUG +#if VTE_DEBUG static bool hexdump_line(GString* str, size_t ofs, @@ -156,7 +156,7 @@ _vte_debug_hexdump(char const* str, uint8_t const* buf, size_t len) { -#ifdef VTE_DEBUG +#if VTE_DEBUG GString* s = g_string_new(str); g_string_append_printf(s, " len = 0x%x = %u\n", (unsigned int)len, (unsigned int)len); diff --git a/src/debug.h b/src/debug.h index 4fd498a..0876e3e 100644 --- a/src/debug.h +++ b/src/debug.h @@ -1,19 +1,18 @@ /* * Copyright (C) 2002 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ /* The interfaces in this file are subject to change at any time. */ @@ -36,37 +35,38 @@ G_BEGIN_DECLS -typedef enum { - VTE_DEBUG_MISC = 1 << 0, - VTE_DEBUG_PARSER = 1 << 1, - VTE_DEBUG_IO = 1 << 2, - VTE_DEBUG_UPDATES = 1 << 3, - VTE_DEBUG_EVENTS = 1 << 4, - VTE_DEBUG_SIGNALS = 1 << 5, - VTE_DEBUG_SELECTION = 1 << 6, - VTE_DEBUG_SUBSTITUTION = 1 << 7, - VTE_DEBUG_RING = 1 << 8, - VTE_DEBUG_PTY = 1 << 9, - VTE_DEBUG_CURSOR = 1 << 10, - VTE_DEBUG_KEYBOARD = 1 << 11, - VTE_DEBUG_LIFECYCLE = 1 << 12, - VTE_DEBUG_WORK = 1 << 13, - VTE_DEBUG_CELLS = 1 << 14, - VTE_DEBUG_TIMEOUT = 1 << 15, - VTE_DEBUG_DRAW = 1 << 16, - VTE_DEBUG_ALLY = 1 << 17, - VTE_DEBUG_ADJ = 1 << 18, - VTE_DEBUG_PANGOCAIRO = 1 << 19, - VTE_DEBUG_WIDGET_SIZE = 1 << 20, - VTE_DEBUG_STYLE = 1 << 21, - VTE_DEBUG_RESIZE = 1 << 22, - VTE_DEBUG_REGEX = 1 << 23, - VTE_DEBUG_HYPERLINK = 1 << 24, - VTE_DEBUG_MODES = 1 << 25, - VTE_DEBUG_EMULATION = 1 << 26, - VTE_DEBUG_RINGVIEW = 1 << 27, - VTE_DEBUG_BIDI = 1 << 28, - VTE_DEBUG_CONVERSION = 1 << 29, +typedef enum : unsigned { + VTE_DEBUG_MISC = 1u << 0, + VTE_DEBUG_PARSER = 1u << 1, + VTE_DEBUG_IO = 1u << 2, + VTE_DEBUG_UPDATES = 1u << 3, + VTE_DEBUG_EVENTS = 1u << 4, + VTE_DEBUG_SIGNALS = 1u << 5, + VTE_DEBUG_SELECTION = 1u << 6, + VTE_DEBUG_SUBSTITUTION = 1u << 7, + VTE_DEBUG_RING = 1u << 8, + VTE_DEBUG_PTY = 1u << 9, + VTE_DEBUG_CURSOR = 1u << 10, + VTE_DEBUG_KEYBOARD = 1u << 11, + VTE_DEBUG_LIFECYCLE = 1u << 12, + VTE_DEBUG_WORK = 1u << 13, + VTE_DEBUG_CELLS = 1u << 14, + VTE_DEBUG_TIMEOUT = 1u << 15, + VTE_DEBUG_DRAW = 1u << 16, + VTE_DEBUG_ALLY = 1u << 17, + VTE_DEBUG_ADJ = 1u << 18, + VTE_DEBUG_PANGOCAIRO = 1u << 19, + VTE_DEBUG_WIDGET_SIZE = 1u << 20, + VTE_DEBUG_STYLE = 1u << 21, + VTE_DEBUG_RESIZE = 1u << 22, + VTE_DEBUG_REGEX = 1u << 23, + VTE_DEBUG_HYPERLINK = 1u << 24, + VTE_DEBUG_MODES = 1u << 25, + VTE_DEBUG_EMULATION = 1u << 26, + VTE_DEBUG_RINGVIEW = 1u << 27, + VTE_DEBUG_BIDI = 1u << 28, + VTE_DEBUG_CONVERSION = 1u << 29, + VTE_DEBUG_EXCEPTIONS = 1u << 30, } VteDebugFlags; void _vte_debug_init(void); @@ -86,13 +86,13 @@ _vte_debug_on(guint flags) return (_vte_debug_flags & flags) != 0; } -#ifdef VTE_DEBUG +#if VTE_DEBUG #define _VTE_DEBUG_IF(flags) if (G_UNLIKELY (_vte_debug_on (flags))) #else #define _VTE_DEBUG_IF(flags) if (0) #endif -#ifdef VTE_DEBUG +#if VTE_DEBUG #if defined(__GNUC__) && G_HAVE_GNUC_VARARGS #define _vte_debug_print(flags, fmt, ...) \ G_STMT_START { _VTE_DEBUG_IF(flags) g_printerr(fmt, ##__VA_ARGS__); } G_STMT_END @@ -112,6 +112,26 @@ static void _vte_debug_print(guint flags, const char *fmt, ...) #define _vte_debug_print(args...) do { } while(0) #endif /* VTE_DEBUG */ +static inline char const* +_vte_debug_tf(bool v) noexcept +{ + return v ? "true" : "false"; +} + +#ifdef G_DISABLE_ASSERT +# define vte_assert_cmpint(a,op,b) G_STMT_START {} G_STMT_END +# define vte_assert_cmpuint(a,op,b) G_STMT_START {} G_STMT_END +# define vte_assert_cmphex(a,op,b) G_STMT_START {} G_STMT_END +# define vte_assert_true(v) G_STMT_START {} G_STMT_END +# define vte_assert_false(v) G_STMT_START {} G_STMT_END +#else +# define vte_assert_cmpint(a,op,b) g_assert_cmpint(a,op,b) +# define vte_assert_cmpuint(a,op,b) g_assert_cmpuint(a,op,b) +# define vte_assert_cmphex(a,op,b) g_assert_cmphex(a,op,b) +# define vte_assert_true(v) g_assert_true(v) +# define vte_assert_false(v) g_assert_false(v) +#endif + G_END_DECLS #endif diff --git a/src/decoder-cat.cc b/src/decoder-cat.cc index c3bd83c..5d6e943 100644 --- a/src/decoder-cat.cc +++ b/src/decoder-cat.cc @@ -1,15 +1,15 @@ /* * Copyright © 2017, 2018, 2019 Christian Persch * - * This programme is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * - * This programme is distributed in the hope that it will be useful, + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . @@ -33,9 +33,13 @@ #include "debug.h" #include "glib-glue.hh" +#include "libc-glue.hh" +#include "utf8.hh" + +#if WITH_ICU #include "icu-decoder.hh" #include "icu-glue.hh" -#include "utf8.hh" +#endif using namespace std::literals; @@ -47,98 +51,80 @@ private: bool m_quiet{false}; bool m_statistics{false}; bool m_utf8{false}; + int m_buffer_size{16384}; int m_repeat{1}; - char* m_charset{nullptr}; - char** m_filenames{nullptr}; - - template - class OptionArg { - private: - T1* m_return_ptr; - T2 m_value; - public: - OptionArg(T1* ptr, T2 v) : m_return_ptr{ptr}, m_value{v} { } - ~OptionArg() { *m_return_ptr = m_value; } - - inline constexpr T2* ptr() noexcept { return &m_value; } - }; - - using BoolArg = OptionArg; - using IntArg = OptionArg; - using StrArg = OptionArg; - using StrvArg = OptionArg; + vte::glib::StringPtr m_charset{}; + vte::glib::StrvPtr m_filenames{}; public: Options() noexcept = default; Options(Options const&) = delete; Options(Options&&) = delete; - - ~Options() { - if (m_filenames != nullptr) - g_strfreev(m_filenames); - } - Options& operator=(Options const&) = delete; Options& operator=(Options&&) = delete; + ~Options() = default; - inline constexpr bool benchmark() const noexcept { return m_benchmark; } - inline constexpr bool codepoints() const noexcept { return m_codepoints; } - inline constexpr bool list() const noexcept { return m_list; } - inline constexpr bool statistics() const noexcept { return m_statistics; } - inline constexpr int quiet() const noexcept { return m_quiet; } - inline constexpr bool utf8() const noexcept { return m_utf8; } - inline constexpr int repeat() const noexcept { return m_repeat; } - inline constexpr char const* charset() const noexcept { return m_charset; } - inline constexpr char const* const* filenames() const noexcept { return m_filenames; } + inline constexpr bool benchmark() const noexcept { return m_benchmark; } + inline constexpr size_t buffer_size() const noexcept { return std::max(m_buffer_size, 1); } + inline constexpr bool codepoints() const noexcept { return m_codepoints; } + inline constexpr bool list() const noexcept { return m_list; } + inline constexpr bool statistics() const noexcept { return m_statistics; } + inline constexpr int quiet() const noexcept { return m_quiet; } + inline constexpr bool utf8() const noexcept { return m_utf8; } + inline constexpr int repeat() const noexcept { return m_repeat; } + inline char const* charset() const noexcept { return m_charset.get(); } + inline char const* const* filenames() const noexcept { return m_filenames.get(); } bool parse(int argc, char* argv[], GError** error) noexcept { - { - auto benchmark = BoolArg{&m_benchmark, false}; - auto codepoints = BoolArg{&m_codepoints, false}; - auto list = BoolArg{&m_list, false}; - auto quiet = BoolArg{&m_quiet, false}; - auto statistics = BoolArg{&m_statistics, false}; - auto utf8 = BoolArg{&m_utf8, false}; - auto repeat = IntArg{&m_repeat, 1}; - auto charset = StrArg{&m_charset, nullptr}; - auto filenames = StrvArg{&m_filenames, nullptr}; - GOptionEntry const entries[] = { - { "benchmark", 'b', 0, G_OPTION_ARG_NONE, benchmark.ptr(), - "Measure time spent parsing each file", nullptr }, - { "codepoints", 'u', 0, G_OPTION_ARG_NONE, codepoints.ptr(), - "Output unicode code points by number", nullptr }, - { "charset", 'f', 0, G_OPTION_ARG_STRING, charset.ptr(), - "Input charset", "CHARSET" }, - { "list-charsets", 'l', 0, G_OPTION_ARG_NONE, list.ptr(), - "List available charsets", nullptr }, - { "quiet", 'q', 0, G_OPTION_ARG_NONE, quiet.ptr(), - "Suppress output except for statistics and benchmark", nullptr }, - { "repeat", 'r', 0, G_OPTION_ARG_INT, repeat.ptr(), - "Repeat each file COUNT times", "COUNT" }, - { "statistics", 's', 0, G_OPTION_ARG_NONE, statistics.ptr(), - "Output statistics", nullptr }, - { "utf-8", '8', 0, G_OPTION_ARG_NONE, utf8.ptr(), - "UTF-8 input (default)", nullptr }, - { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, filenames.ptr(), - nullptr, nullptr }, - { nullptr }, - }; + using BoolOption = vte::ValueGetter; + using IntOption = vte::ValueGetter; + using StringOption = vte::ValueGetter; + using StrvOption = vte::ValueGetter; - auto context = g_option_context_new("[FILE…] — decoder cat"); - g_option_context_set_help_enabled(context, true); - g_option_context_add_main_entries(context, entries, nullptr); + auto benchmark = BoolOption{m_benchmark, false}; + auto codepoints = BoolOption{m_codepoints, false}; + auto list = BoolOption{m_list, false}; + auto quiet = BoolOption{m_quiet, false}; + auto statistics = BoolOption{m_statistics, false}; + auto utf8 = BoolOption{m_utf8, false}; + auto buffer_size = IntOption{m_buffer_size, 16384}; + auto repeat = IntOption{m_repeat, 1}; + auto charset = StringOption{m_charset, nullptr}; + auto filenames = StrvOption{m_filenames, nullptr}; - auto rv = bool{g_option_context_parse(context, &argc, &argv, error) != false}; - g_option_context_free(context); - if (!rv) - return rv; - } + GOptionEntry const entries[] = { + { "benchmark", 'b', 0, G_OPTION_ARG_NONE, &benchmark, + "Measure time spent parsing each file", nullptr }, + { "buffer-size", 'B', 0, G_OPTION_ARG_INT, &buffer_size, + "Buffer size", "SIZE" }, + { "codepoints", 'u', 0, G_OPTION_ARG_NONE, &codepoints, + "Output unicode code points by number", nullptr }, + { "charset", 'f', 0, G_OPTION_ARG_STRING, &charset, + "Input charset", "CHARSET" }, + { "list-charsets", 'l', 0, G_OPTION_ARG_NONE, &list, + "List available charsets", nullptr }, + { "quiet", 'q', 0, G_OPTION_ARG_NONE, &quiet, + "Suppress output except for statistics and benchmark", nullptr }, + { "repeat", 'r', 0, G_OPTION_ARG_INT, &repeat, + "Repeat each file COUNT times", "COUNT" }, + { "statistics", 's', 0, G_OPTION_ARG_NONE, &statistics, + "Output statistics", nullptr }, + { "utf-8", '8', 0, G_OPTION_ARG_NONE, &utf8, + "UTF-8 input (default)", nullptr }, + { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &filenames, + nullptr, nullptr }, + { nullptr }, + }; - return true; + auto context = vte::take_freeable(g_option_context_new("[FILE…] — decoder cat")); + g_option_context_set_help_enabled(context.get(), true); + g_option_context_add_main_entries(context.get(), entries, nullptr); + + return g_option_context_parse(context.get(), &argc, &argv, error); } }; // class Options @@ -228,6 +214,8 @@ public: }; // class Sink +#if WITH_ICU + static std::unique_ptr make_decoder(Options const& options) { @@ -261,6 +249,8 @@ make_decoder(Options const& options) return std::make_unique(converter, u32_converter); } +#endif /* WITH_ICU */ + class Processor { private: gsize m_input_bytes{0}; @@ -271,18 +261,19 @@ private: template void process_file_utf8(int fd, + Options const& options, Functor& func) { auto decoder = vte::base::UTF8Decoder{}; - auto const buf_size = size_t{16384}; - auto buf = g_new0(uint8_t, buf_size); + auto const buffer_size = options.buffer_size(); + auto buf = g_new0(uint8_t, buffer_size); auto start_time = g_get_monotonic_time(); auto buf_start = size_t{0}; for (;;) { - auto len = read(fd, buf + buf_start, buf_size - buf_start); + auto len = read(fd, buf + buf_start, buffer_size - buf_start); if (!len) break; if (len == -1) { @@ -329,22 +320,24 @@ private: g_free(buf); } +#if WITH_ICU template void process_file_icu(int fd, + Options const& options, vte::base::ICUDecoder* decoder, Functor& func) { decoder->reset(); - auto const buf_size = size_t{16384}; - auto buf = g_new0(uint8_t, buf_size); + auto const buffer_size = options.buffer_size(); + auto buf = g_new0(uint8_t, buffer_size); auto start_time = g_get_monotonic_time(); auto buf_start = size_t{0}; while (true) { - auto len = read(fd, buf + buf_start, buf_size - buf_start); + auto len = read(fd, buf + buf_start, buffer_size - buf_start); if (!len) /* EOF */ break; if (len == -1) { @@ -381,7 +374,7 @@ private: } /* Flush remaining output */ - auto sptr = reinterpret_cast(buf + buf_size); + auto sptr = reinterpret_cast(buf + buffer_size); auto result = vte::base::ICUDecoder::Result{}; while ((result = decoder->decode(&sptr, true)) == vte::base::ICUDecoder::Result::eSomething) { func(decoder->codepoint()); @@ -393,6 +386,7 @@ private: g_free(buf); } +#endif /* WITH_ICU */ template bool @@ -400,6 +394,7 @@ private: Options const& options, Functor& func) { +#if WITH_ICU auto decoder = std::unique_ptr{}; if (options.charset()) { decoder = make_decoder(options); @@ -408,17 +403,22 @@ private: } assert(decoder != nullptr || options.charset() == nullptr); +#endif for (auto i = 0; i < options.repeat(); ++i) { if (i > 0 && lseek(fd, 0, SEEK_SET) != 0) { - g_printerr("Failed to seek: %m\n"); + auto errsv = vte::libc::ErrnoSaver{}; + g_printerr("Failed to seek: %s\n", g_strerror(errsv)); return false; } +#if WITH_ICU if (decoder) { - process_file_icu(fd, decoder.get(), func); - } else { - process_file_utf8(fd, func); + process_file_icu(fd, options, decoder.get(), func); + } else +#endif + { + process_file_utf8(fd, options, func); } } @@ -458,7 +458,9 @@ public: } else { fd = ::open(filename, O_RDONLY); if (fd == -1) { - g_printerr("Error opening file %s: %m\n", filename); + auto errsv = vte::libc::ErrnoSaver{}; + g_printerr("Error opening file %s: %s\n", + filename, g_strerror(errsv)); } } if (fd != -1) { @@ -526,12 +528,17 @@ main(int argc, } if (options.list()) { +#if WITH_ICU auto charsets = vte::base::get_icu_charsets(true); for (auto i = 0; charsets[i]; ++i) g_print("%s\n", charsets[i]); g_strfreev(charsets); return EXIT_SUCCESS; +#else + g_printerr("ICU support not available.\n"); + return EXIT_FAILURE; +#endif } auto rv = bool{}; diff --git a/src/drawing-cairo.cc b/src/drawing-cairo.cc new file mode 100644 index 0000000..c399867 --- /dev/null +++ b/src/drawing-cairo.cc @@ -0,0 +1,292 @@ +/* + * Copyright (C) 2003,2008 Red Hat, Inc. + * Copyright © 2019, 2020 Christian Persch + * Copyright © 2023 Christian Hergert + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include "config.h" + +#include "bidi.hh" +#include "debug.h" +#include "drawing-cairo.hh" +#include "fonts-pangocairo.hh" + +/* cairo_show_glyphs accepts runs up to 102 glyphs before it allocates a + * temporary array. + * + * Setting this to a large value can cause dramatic slow-downs for some + * xservers (notably fglrx), see bug #410534. + */ +#define MAX_RUN_LENGTH 100 + +namespace vte { +namespace view { + +void +DrawingCairo::set_cairo(cairo_t* cr) noexcept +{ + m_cr = cr; +} + +void +DrawingCairo::clip(Rectangle const* rect) const +{ + g_assert(m_cr); + g_assert(rect); + + cairo_save(m_cr); + rect->path(m_cr); + cairo_clip(m_cr); +} + +void +DrawingCairo::unclip() const +{ + g_assert(m_cr); + + cairo_restore(m_cr); +} + +void +DrawingCairo::translate(double x, double y) const +{ + cairo_save(m_cr); + cairo_translate(m_cr, x, y); +} + +void +DrawingCairo::untranslate() const +{ + cairo_restore(m_cr); +} + +void +DrawingCairo::clear(int x, + int y, + int width, + int height, + vte::color::rgb const* color, + double alpha) const +{ + g_assert(m_cr); + + cairo_rectangle(m_cr, x, y, width, height); + cairo_set_operator(m_cr, CAIRO_OPERATOR_SOURCE); + _vte_set_source_color_alpha(m_cr, color, alpha); + cairo_fill(m_cr); +} + +void +DrawingCairo::fill_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color) const +{ + g_assert(m_cr); + g_assert(color); + + _vte_debug_print(VTE_DEBUG_DRAW, + "draw_fill_rectangle (%d, %d, %d, %d, color=(%d,%d,%d))\n", + x,y,width,height, + color->red, color->green, color->blue); + + cairo_save(m_cr); + cairo_set_operator(m_cr, CAIRO_OPERATOR_OVER); + cairo_rectangle(m_cr, x, y, width, height); + _vte_set_source_color(m_cr, color); + cairo_fill(m_cr); + cairo_restore(m_cr); +} + +void +DrawingCairo::fill_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color, + double alpha) const +{ + g_assert(m_cr); + g_assert(color); + + _vte_debug_print(VTE_DEBUG_DRAW, + "draw_fill_rectangle (%d, %d, %d, %d, color=(%d,%d,%d,%.3f))\n", + x,y,width,height, + color->red, color->green, color->blue, alpha); + + cairo_save(m_cr); + cairo_set_operator(m_cr, CAIRO_OPERATOR_OVER); + cairo_rectangle(m_cr, x, y, width, height); + _vte_set_source_color_alpha(m_cr, color, alpha); + cairo_fill(m_cr); + cairo_restore(m_cr); +} + +void +DrawingCairo::draw_text_internal(TextRequest* requests, + gsize n_requests, + uint32_t attr, + vte::color::rgb const* color) +{ + gsize i; + cairo_scaled_font_t *last_scaled_font = nullptr; + int n_cr_glyphs = 0; + cairo_glyph_t cr_glyphs[MAX_RUN_LENGTH]; + auto font = m_fonts[attr_to_style(attr)]; + + g_return_if_fail (font != nullptr); + + if (n_requests == 0) + return; + + g_assert(m_cr); + + _vte_set_source_color(m_cr, color); + cairo_set_operator(m_cr, CAIRO_OPERATOR_OVER); + + for (i = 0; i < n_requests; i++) { + vteunistr c = requests[i].c; + + if (G_UNLIKELY (requests[i].mirror)) { + vte_bidi_get_mirror_char (c, requests[i].box_mirror, &c); + } + + if (m_minifont.unistr_is_local_graphic(c)) { + m_minifont.draw_graphic(*this, + c, + color, + requests[i].x, requests[i].y, + font->width(), requests[i].columns, font->height(), + scale_factor()); + continue; + } + + auto uinfo = font->get_unistr_info(c); + auto ufi = &uinfo->m_ufi; + int x, y, ye; + + get_char_edges(c, requests[i].columns, attr, x, ye /* unused */); + x += requests[i].x; + /* Bold/italic versions might have different ascents. In order to align their + * baselines, we offset by the normal font's ascent here. (Issue #137.) */ + y = requests[i].y + m_char_spacing.top + m_fonts[VTE_DRAW_NORMAL]->ascent(); + + switch (uinfo->coverage()) { + default: + case FontInfo::UnistrInfo::Coverage::UNKNOWN: + break; + case FontInfo::UnistrInfo::Coverage::USE_PANGO_LAYOUT_LINE: + cairo_move_to(m_cr, x, y); + pango_cairo_show_layout_line(m_cr, + ufi->using_pango_layout_line.line); + break; + case FontInfo::UnistrInfo::Coverage::USE_PANGO_GLYPH_STRING: + cairo_move_to(m_cr, x, y); + pango_cairo_show_glyph_string(m_cr, + ufi->using_pango_glyph_string.font, + ufi->using_pango_glyph_string.glyph_string); + break; + case FontInfo::UnistrInfo::Coverage::USE_CAIRO_GLYPH: + if (last_scaled_font != ufi->using_cairo_glyph.scaled_font || n_cr_glyphs == MAX_RUN_LENGTH) { + if (n_cr_glyphs) { + cairo_set_scaled_font(m_cr, last_scaled_font); + cairo_show_glyphs(m_cr, + cr_glyphs, + n_cr_glyphs); + n_cr_glyphs = 0; + } + last_scaled_font = ufi->using_cairo_glyph.scaled_font; + } + cr_glyphs[n_cr_glyphs].index = ufi->using_cairo_glyph.glyph_index; + cr_glyphs[n_cr_glyphs].x = x; + cr_glyphs[n_cr_glyphs].y = y; + n_cr_glyphs++; + break; + } + } + if (n_cr_glyphs) { + cairo_set_scaled_font(m_cr, last_scaled_font); + cairo_show_glyphs(m_cr, + cr_glyphs, + n_cr_glyphs); + n_cr_glyphs = 0; + } +} + +void +DrawingCairo::draw_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color) const +{ + g_assert(color); + g_assert(m_cr); + + _vte_debug_print (VTE_DEBUG_DRAW, + "draw_rectangle (%d, %d, %d, %d, color=(%d,%d,%d))\n", + x,y,width,height, + color->red, color->green, color->blue); + + cairo_save(m_cr); + cairo_set_operator(m_cr, CAIRO_OPERATOR_OVER); + cairo_rectangle(m_cr, x+VTE_LINE_WIDTH/2., y+VTE_LINE_WIDTH/2., width-VTE_LINE_WIDTH, height-VTE_LINE_WIDTH); + _vte_set_source_color(m_cr, color); + cairo_set_line_width(m_cr, VTE_LINE_WIDTH); + cairo_stroke (m_cr); + cairo_restore(m_cr); +} + +cairo_t* +DrawingCairo::begin_cairo(int x, + int y, + int width, + int height) const +{ + cairo_save(m_cr); + return m_cr; +} + +void +DrawingCairo::end_cairo(cairo_t *cr) const +{ + cairo_restore(cr); +} + +void +DrawingCairo::draw_surface_with_color_mask(cairo_surface_t *surface, + int x, + int y, + int width, + int height, + vte::color::rgb const* color) const +{ + auto cr = begin_cairo(x, y, width, height); + + _vte_set_source_color(m_cr, color); + + cairo_push_group(cr); + cairo_rectangle(cr, x, y, width, height); + cairo_fill(cr); + cairo_pop_group_to_source(cr); + cairo_mask_surface(cr, surface, x, y); + + end_cairo(cr); +} + +} // namespace view +} // namespace vte diff --git a/src/drawing-cairo.hh b/src/drawing-cairo.hh new file mode 100644 index 0000000..51f3467 --- /dev/null +++ b/src/drawing-cairo.hh @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2003 Red Hat, Inc. + * Copyright © 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include "drawing-context.hh" + +namespace vte { +namespace view { + +class DrawingCairo final : public DrawingContext { +public: + DrawingCairo() noexcept = default; + ~DrawingCairo() noexcept override = default; + + DrawingCairo(DrawingCairo const&) = delete; + DrawingCairo(DrawingCairo&&) = delete; + DrawingCairo& operator=(DrawingCairo const&) = delete; + DrawingCairo& operator=(DrawingCairo&&) = delete; + + cairo_t* begin_cairo(int x, + int y, + int width, + int height) const override; + void end_cairo(cairo_t *cr) const override; + + void clip(Rectangle const* rect) const override; + void unclip() const override; + + void translate(double x, + double y) const override; + void untranslate() const override; + + void clear(int x, + int y, + int width, + int height, + vte::color::rgb const* color, + double alpha) const override; + void fill_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color) const override; + void fill_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color, + double alpha) const override; + void draw_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color) const override; + + void set_cairo(cairo_t* cr) noexcept; + + void draw_surface_with_color_mask(cairo_surface_t *surface, + int x, + int y, + int width, + int height, + vte::color::rgb const* color) const override; + +protected: + void draw_text_internal(TextRequest* requests, + gsize n_requests, + uint32_t attr, + vte::color::rgb const* color) override; + +private: + cairo_t *m_cr{nullptr}; // unowned +}; + +} // namespace view +} // namespace vte diff --git a/src/drawing-context.cc b/src/drawing-context.cc new file mode 100644 index 0000000..3d29d3a --- /dev/null +++ b/src/drawing-context.cc @@ -0,0 +1,345 @@ +/* + * Copyright (C) 2003,2008 Red Hat, Inc. + * Copyright © 2019, 2020 Christian Persch + * Copyright © 2023 Christian Hergert + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include "config.h" + +#include + +#include "bidi.hh" +#include "debug.h" +#include "drawing-context.hh" +#include "fonts-pangocairo.hh" + +namespace vte { +namespace view { + +DrawingContext::~DrawingContext() +{ + clear_font_cache(); +} + +void +DrawingContext::clear_font_cache() +{ + // m_fonts = {}; + + for (auto style = int{0}; style < 4; ++style) { + if (m_fonts[style] != nullptr) + m_fonts[style]->unref(); + m_fonts[style] = nullptr; + } +} + +void +DrawingContext::set_text_font(GtkWidget* widget, + PangoFontDescription const* fontdesc, + cairo_font_options_t const* font_options, + double cell_width_scale, + double cell_height_scale) +{ + PangoFontDescription *bolddesc = nullptr; + PangoFontDescription *italicdesc = nullptr; + PangoFontDescription *bolditalicdesc = nullptr; + gint normal, bold, ratio; + + _vte_debug_print (VTE_DEBUG_DRAW, "draw_set_text_font\n"); + + clear_font_cache(); + + /* calculate bold font desc */ + bolddesc = pango_font_description_copy (fontdesc); + if (pango_font_description_get_set_fields(bolddesc) & PANGO_FONT_MASK_WEIGHT) { + auto const weight = pango_font_description_get_weight(bolddesc); + auto const bold_weight = std::min(1000, weight + VTE_FONT_WEIGHT_BOLDENING); + pango_font_description_set_weight(bolddesc, PangoWeight(bold_weight)); + } else { + pango_font_description_set_weight (bolddesc, PANGO_WEIGHT_BOLD); + } + + /* calculate italic font desc */ + italicdesc = pango_font_description_copy (fontdesc); + pango_font_description_set_style (italicdesc, PANGO_STYLE_ITALIC); + + /* calculate bold italic font desc */ + bolditalicdesc = pango_font_description_copy (bolddesc); + pango_font_description_set_style (bolditalicdesc, PANGO_STYLE_ITALIC); + + m_fonts[VTE_DRAW_NORMAL] = FontInfo::create_for_widget(widget, fontdesc, font_options); + m_fonts[VTE_DRAW_BOLD] = FontInfo::create_for_widget(widget, bolddesc, font_options); + m_fonts[VTE_DRAW_ITALIC] = FontInfo::create_for_widget(widget, italicdesc, font_options); + m_fonts[VTE_DRAW_ITALIC | VTE_DRAW_BOLD] = + FontInfo::create_for_widget(widget, bolditalicdesc, font_options); + pango_font_description_free (bolddesc); + pango_font_description_free (italicdesc); + pango_font_description_free (bolditalicdesc); + + /* Decide if we should keep this bold font face, per bug 54926: + * - reject bold font if it is not within 10% of normal font width + */ + normal = VTE_DRAW_NORMAL; + bold = normal | VTE_DRAW_BOLD; + ratio = m_fonts[bold]->width() * 100 / m_fonts[normal]->width(); + if (abs(ratio - 100) > 10) { + _vte_debug_print (VTE_DEBUG_DRAW, + "Rejecting bold font (%i%%).\n", ratio); + m_fonts[bold]->unref(); + m_fonts[bold] = m_fonts[normal]->ref(); + } + normal = VTE_DRAW_ITALIC; + bold = normal | VTE_DRAW_BOLD; + ratio = m_fonts[bold]->width() * 100 / m_fonts[normal]->width(); + if (abs(ratio - 100) > 10) { + _vte_debug_print (VTE_DEBUG_DRAW, + "Rejecting italic bold font (%i%%).\n", ratio); + m_fonts[bold]->unref(); + m_fonts[bold] = m_fonts[normal]->ref(); + } + + /* Apply letter spacing and line spacing. */ + m_cell_width = m_fonts[VTE_DRAW_NORMAL]->width() * cell_width_scale; + m_char_spacing.left = (m_cell_width - m_fonts[VTE_DRAW_NORMAL]->width()) / 2; + m_char_spacing.right = (m_cell_width - m_fonts[VTE_DRAW_NORMAL]->width() + 1) / 2; + m_cell_height = m_fonts[VTE_DRAW_NORMAL]->height() * cell_height_scale; + m_char_spacing.top = (m_cell_height - m_fonts[VTE_DRAW_NORMAL]->height() + 1) / 2; + m_char_spacing.bottom = (m_cell_height - m_fonts[VTE_DRAW_NORMAL]->height()) / 2; + + m_undercurl_surface.reset(); +} + +void +DrawingContext::get_text_metrics(int* cell_width, + int* cell_height, + int* char_ascent, + int* char_descent, + GtkBorder* char_spacing) +{ + g_return_if_fail (m_fonts[VTE_DRAW_NORMAL] != nullptr); + + if (cell_width) + *cell_width = m_cell_width; + if (cell_height) + *cell_height = m_cell_height; + if (char_ascent) + *char_ascent = m_fonts[VTE_DRAW_NORMAL]->ascent(); + if (char_descent) + *char_descent = m_fonts[VTE_DRAW_NORMAL]->height() - m_fonts[VTE_DRAW_NORMAL]->ascent(); + if (char_spacing) + *char_spacing = m_char_spacing; +} + +/* Stores the left and right edges of the given glyph, relative to the cell's left edge. */ +void +DrawingContext::get_char_edges(vteunistr c, + int columns, + uint32_t attr, + int& left, + int& right) +{ + if (G_UNLIKELY(m_minifont.unistr_is_local_graphic (c))) { + left = 0; + right = m_cell_width * columns; + return; + } + + int l, w, normal_width, fits_width; + + if (G_UNLIKELY (m_fonts[VTE_DRAW_NORMAL] == nullptr)) { + left = 0; + right = 0; + return; + } + + w = m_fonts[attr_to_style(attr)]->get_unistr_info(c)->width; + normal_width = m_fonts[VTE_DRAW_NORMAL]->width() * columns; + fits_width = m_cell_width * columns; + + if (G_LIKELY (w <= normal_width)) { + /* The regular case: The glyph is not wider than one (CJK: two) regular character(s). + * Align to the left, after applying half (CJK: one) letter spacing. */ + l = m_char_spacing.left + (columns == 2 ? m_char_spacing.right : 0); + } else if (G_UNLIKELY (w <= fits_width)) { + /* Slightly wider glyph, but still fits in the cell (spacing included). This case can + * only happen with nonzero letter spacing. Center the glyph in the cell(s). */ + l = (fits_width - w) / 2; + } else { + /* Even wider glyph: doesn't fit in the cell. Align at left and overflow on the right. */ + l = 0; + } + + left = l; + right = l + w; +} + +void +DrawingContext::draw_text(TextRequest* requests, + gsize n_requests, + uint32_t attr, + vte::color::rgb const* color) +{ + if (_vte_debug_on (VTE_DEBUG_DRAW)) { + GString *string = g_string_new (""); + gchar *str; + gsize n; + for (n = 0; n < n_requests; n++) { + g_string_append_unichar (string, requests[n].c); + } + str = g_string_free (string, FALSE); + g_printerr ("draw_text (\"%s\", len=%" G_GSIZE_FORMAT ", color=(%d,%d,%d), %s - %s)\n", + str, n_requests, color->red, color->green, color->blue, + (attr & VTE_ATTR_BOLD) ? "bold" : "normal", + (attr & VTE_ATTR_ITALIC) ? "italic" : "regular"); + g_free (str); + } + + draw_text_internal(requests, n_requests, attr, color); +} + +/* The following two functions are unused since commit 154abade902850afb44115cccf8fcac51fc082f0, + * but let's keep them for now since they may become used again. + */ +bool +DrawingContext::has_char(vteunistr c, + uint32_t attr) +{ + _vte_debug_print (VTE_DEBUG_DRAW, "draw_has_char ('0x%04X', %s - %s)\n", c, + (attr & VTE_ATTR_BOLD) ? "bold" : "normal", + (attr & VTE_ATTR_ITALIC) ? "italic" : "regular"); + + auto const style = attr_to_style(attr); + g_return_val_if_fail(m_fonts[style], false); + + auto uinfo = m_fonts[style]->get_unistr_info(c); + return !uinfo->has_unknown_chars; +} + +bool +DrawingContext::draw_char(TextRequest* request, + uint32_t attr, + vte::color::rgb const* color) +{ + _vte_debug_print (VTE_DEBUG_DRAW, + "draw_char ('%c', color=(%d,%d,%d), %s, %s)\n", + request->c, + color->red, color->green, color->blue, + (attr & VTE_ATTR_BOLD) ? "bold" : "normal", + (attr & VTE_ATTR_ITALIC) ? "italic" : "regular"); + + auto const have_char = has_char(request->c, attr); + if (have_char) + draw_text(request, 1, attr, color); + + return have_char; +} + +void +DrawingContext::draw_line(int x, + int y, + int xp, + int yp, + int line_width, + vte::color::rgb const *color) +{ + fill_rectangle(x, y, + MAX(line_width, xp - x + 1), MAX(line_width, yp - y + 1), + color); +} + +void +DrawingContext::draw_undercurl(int x, + double y, + double line_width, + int count, + int scale_factor, + vte::color::rgb const *color) +{ + /* The end of the curly line slightly overflows to the next cell, so the canvas + * caching the rendered look has to be wider not to chop this off. */ + gint x_padding = line_width + 1; /* ceil, kind of */ + + gint surface_top = y; /* floor */ + + gint undercurl_height = _vte_draw_get_undercurl_height(m_cell_width, line_width); + + /* Give extra space vertically to include the bounding box for antialiasing + * and the y_bottom+1 below. + */ + constexpr auto const extra_space = 1; + auto cr = begin_cairo(x, y - extra_space, count * m_cell_width, undercurl_height + 2 * extra_space + 1); + + cairo_save (cr); + + _vte_debug_print (VTE_DEBUG_DRAW, + "draw_undercurl (x=%d, y=%f, count=%d, color=(%d,%d,%d))\n", + x, y, count, + color->red, color->green, color->blue); + + if (m_undercurl_surface_scale != scale_factor) + m_undercurl_surface.reset(); + + if (G_UNLIKELY (!m_undercurl_surface)) { + /* Cache the undercurl's look. The design assumes that until the cached look is + * invalidated (the font is changed), this method is always called with the "y" + * parameter having the same fractional part, and the same "line_width" parameter. + * For caching, only the fractional part of "y" is used. + */ + double rad = _vte_draw_get_undercurl_rad(m_cell_width); + double y_bottom = y + undercurl_height; + double y_center = (y + y_bottom) / 2.; + gint surface_bottom = y_bottom + 1; /* ceil, kind of */ + + _vte_debug_print (VTE_DEBUG_DRAW, + "caching undercurl shape\n"); + + /* Add a line_width of margin horizontally on both sides, for nice antialias overflowing. + * Add pixel margin to top/bottom for curl antialiasing. + */ + m_undercurl_surface_scale = scale_factor; + m_undercurl_surface = vte::take_freeable + (cairo_surface_create_similar(cairo_get_target(cr), + CAIRO_CONTENT_ALPHA, + m_cell_width + 2 * x_padding, + surface_bottom - surface_top + 2)); + auto undercurl_cr = vte::take_freeable(cairo_create(m_undercurl_surface.get())); + cairo_translate(undercurl_cr.get(), 0, 1); + cairo_set_operator(undercurl_cr.get(), CAIRO_OPERATOR_OVER); + /* First quarter circle, similar to the left half of the tilde symbol. */ + cairo_arc(undercurl_cr.get(), x_padding + m_cell_width / 4., y_center - surface_top + m_cell_width / 4., rad, G_PI * 5 / 4, G_PI * 7 / 4); + /* Second quarter circle, similar to the right half of the tilde symbol. */ + cairo_arc_negative(undercurl_cr.get(), x_padding + m_cell_width * 3 / 4., y_center - surface_top - m_cell_width / 4., rad, G_PI * 3 / 4, G_PI / 4); + cairo_set_line_width (undercurl_cr.get(), line_width); + cairo_stroke(undercurl_cr.get()); + } + + /* Paint the cached look of the undercurl using the desired color. + * The cached look takes the fractional part of "y" into account, + * here we only offset by its integer part. */ + cairo_set_operator(cr, CAIRO_OPERATOR_OVER); + _vte_set_source_color(cr, color); + for (int i = 0; i < count; i++) { + cairo_mask_surface(cr, m_undercurl_surface.get(), x - x_padding + i * m_cell_width, surface_top); + } + + cairo_restore (cr); + + end_cairo(cr); +} + + +} // namespace view +} // namespace vte diff --git a/src/drawing-context.hh b/src/drawing-context.hh new file mode 100644 index 0000000..bd5e17e --- /dev/null +++ b/src/drawing-context.hh @@ -0,0 +1,354 @@ +/* + * Copyright (C) 2003 Red Hat, Inc. + * Copyright © 2020 Christian Persch + * Copyright © 2023 Christian Hergert + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include + +#include + +#include + +#include +#include + +#include "attr.hh" +#include "cairo-glue.hh" +#include "fwd.hh" +#include "minifont.hh" +#include "vtetypes.hh" +#include "vteunistr.h" + +#define VTE_DRAW_NORMAL 0 +#define VTE_DRAW_BOLD 1 +#define VTE_DRAW_ITALIC 2 +#define VTE_DRAW_BOLD_ITALIC 3 + +namespace vte { +namespace view { + +struct Rectangle { +private: +#if VTE_GTK == 3 + cairo_rectangle_int_t m_rect; +#elif VTE_GTK == 4 + graphene_rect_t m_rect; +#endif + +public: + constexpr Rectangle() : + Rectangle{0, 0, 0, 0} + { + } + + constexpr Rectangle(cairo_rectangle_int_t const *rect) { + Rectangle(rect->x, rect->y, rect->width, rect->height); + } + +#if VTE_GTK == 4 + constexpr Rectangle(graphene_rect_t const *rect) { + Rectangle(rect->origin.x, rect->origin.y, + rect->size.width, rect->size.height); + } +#endif + + constexpr Rectangle(float x, float y, float w, float h) { +#if VTE_GTK == 3 + m_rect.x = int(x); + m_rect.y = int(y); + m_rect.width = int(w); + m_rect.height = int(h); +#elif VTE_GTK == 4 + m_rect.origin.x = x; + m_rect.origin.y = y; + m_rect.size.width = w; + m_rect.size.height = h; +#endif + } + + constexpr Rectangle(int x, int y, int w, int h) { +#if VTE_GTK == 3 + m_rect.x = x; + m_rect.y = y; + m_rect.width = w; + m_rect.height = h; +#elif VTE_GTK == 4 + m_rect.origin.x = float(x); + m_rect.origin.y = float(y); + m_rect.size.width = float(w); + m_rect.size.height = float(h); +#endif + } + + inline constexpr void advance_y (int by) { +#if VTE_GTK == 3 + m_rect.y += by; +#elif VTE_GTK == 4 + m_rect.origin.y += by; +#endif + } + + inline constexpr void move_y (int y) { +#if VTE_GTK == 3 + m_rect.y = y; +#elif VTE_GTK == 4 + m_rect.origin.y = y; +#endif + } + + inline void path(cairo_t *cr) const { +#if VTE_GTK == 3 + cairo_rectangle(cr, m_rect.x, m_rect.y, m_rect.width, m_rect.height); +#elif VTE_GTK == 4 + cairo_rectangle(cr, m_rect.origin.x, m_rect.origin.y, + m_rect.size.width, m_rect.size.height); +#endif + } + +#if VTE_GTK == 3 + inline constexpr cairo_rectangle_int_t const* cairo() const { return &m_rect; } +#elif VTE_GTK == 4 + inline constexpr graphene_rect_t const* graphene() const { return &m_rect; } + inline constexpr cairo_rectangle_int_t cairo() const { + return cairo_rectangle_int_t{ + int(m_rect.origin.x), + int(m_rect.origin.y), + int(m_rect.size.width), + int(m_rect.size.height) + }; + } +#endif +}; + +class DrawingContext { +public: + + /* A request to draw a particular character spanning a given number of columns + at the given location. Unlike most APIs, (x,y) specifies the top-left + corner of the cell into which the character will be drawn instead of the + left end of the baseline. */ + struct TextRequest { + vteunistr c; + int16_t x, y, columns; + + /* Char has RTL resolved directionality, mirror if mirrorable. */ + uint8_t mirror : 1; + + /* Add box drawing chars to the set of mirrorable characters. */ + uint8_t box_mirror : 1; + }; + + DrawingContext() noexcept = default; + virtual ~DrawingContext(); + + DrawingContext(DrawingContext const&) = delete; + DrawingContext(DrawingContext&&) = delete; + DrawingContext& operator=(DrawingContext const&) = delete; + DrawingContext& operator=(DrawingContext&&) = delete; + + virtual cairo_t* begin_cairo(int x, + int y, + int width, + int height) const = 0; + virtual void end_cairo(cairo_t *cr) const = 0; + + virtual void clip(Rectangle const* rect) const = 0; + virtual void unclip() const = 0; + + // Clipping for widget border is kept separate from general + // clipping because GSK and Cairo need to do separate things. + virtual void clip_border(Rectangle const* rect) const { clip(rect); } + virtual void unclip_border() const { unclip(); } + + virtual void translate(double x, + double y) const = 0; + virtual void untranslate() const = 0; + + virtual void clear(int x, + int y, + int width, + int height, + vte::color::rgb const* color, + double alpha) const = 0; + virtual void fill_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color) const = 0; + virtual void fill_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color, + double alpha) const = 0; + virtual void draw_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color) const = 0; + + virtual void draw_surface_with_color_mask( +#if VTE_GTK == 3 + cairo_surface_t *surface, +#elif VTE_GTK == 4 + GdkTexture *texture, +#endif + int x, + int y, + int width, + int height, + vte::color::rgb const* color) const = 0; + + void draw_undercurl(int x, + double y, + double line_width, + int count, + int scale_factor, + vte::color::rgb const* color); + + void clear_font_cache(); + void set_text_font(GtkWidget* widget, + PangoFontDescription const* fontdesc, + cairo_font_options_t const* font_options, + double cell_width_scale, + double cell_height_scale); + void get_text_metrics(int* cell_width, + int* cell_height, + int* char_ascent, + int* char_descent, + GtkBorder* char_spacing); + void get_char_edges(vteunistr c, + int columns, + uint32_t attr, + int& left, + int& right); + void draw_text(TextRequest* requests, + gsize n_requests, + uint32_t attr, + vte::color::rgb const* color); + bool draw_char(TextRequest* request, + uint32_t attr, + vte::color::rgb const* color); + bool has_char(vteunistr c, + uint32_t attr); + void draw_line(int x, + int y, + int xp, + int yp, + int line_width, + vte::color::rgb const *color); + + auto cell_width() const noexcept { return m_cell_width; } + auto cell_height() const noexcept { return m_cell_height; } + + inline auto scale_factor() const noexcept { return m_scale_factor; } + inline void set_scale_factor(int scale_factor) { m_scale_factor = scale_factor; } + +protected: + virtual void draw_text_internal(TextRequest* requests, + gsize n_requests, + uint32_t attr, + vte::color::rgb const* color) = 0; + + // std::array, 4> m_fonts{}; + FontInfo* m_fonts[4]{nullptr, nullptr, nullptr, nullptr}; + int m_cell_width{1}; + int m_cell_height{1}; + int m_scale_factor{1}; + GtkBorder m_char_spacing{1, 1, 1, 1}; + + + Minifont m_minifont{}; + + /* Cache the undercurl's rendered look. */ + vte::Freeable m_undercurl_surface{}; + int m_undercurl_surface_scale{0}; +}; // class DrawingContext + +} // namespace view +} // namespace vte + +class _vte_draw_autoclip_t { +private: + vte::view::DrawingContext& m_draw; +public: + _vte_draw_autoclip_t(vte::view::DrawingContext& draw, + vte::view::Rectangle const* rect) + : m_draw{draw} + { + m_draw.clip(rect); + } + + ~_vte_draw_autoclip_t() + { + m_draw.unclip(); + } +}; + +static inline unsigned +attr_to_style(uint32_t attr) +{ + auto style = unsigned{0}; + if (attr & VTE_ATTR_BOLD) + style |= VTE_DRAW_BOLD; + if (attr & VTE_ATTR_ITALIC) + style |= VTE_DRAW_ITALIC; + return style; +} + +static inline constexpr double +_vte_draw_get_undercurl_rad(gint width) +{ + return width / 2. / G_SQRT2; +} + +static inline constexpr double +_vte_draw_get_undercurl_arc_height(gint width) +{ + return _vte_draw_get_undercurl_rad(width) * (1. - G_SQRT2 / 2.); +} + +static inline double +_vte_draw_get_undercurl_height(gint width, double line_width) +{ + return 2. * _vte_draw_get_undercurl_arc_height(width) + line_width; +} + +static inline void +_vte_set_source_color(cairo_t* cr, + vte::color::rgb const *color) +{ + cairo_set_source_rgba(cr, + color->red / 65535., + color->green / 65535., + color->blue / 65535., + 1.0); +} + +static inline void +_vte_set_source_color_alpha(cairo_t* cr, + vte::color::rgb const *color, + double alpha) +{ + cairo_set_source_rgba(cr, + color->red / 65535., + color->green / 65535., + color->blue / 65535., + alpha); +} diff --git a/src/drawing-gsk.cc b/src/drawing-gsk.cc new file mode 100644 index 0000000..48a98d5 --- /dev/null +++ b/src/drawing-gsk.cc @@ -0,0 +1,289 @@ +/* + * Copyright © 2023 Christian Hergert + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include "config.h" + +#include "bidi.hh" +#include "debug.h" +#include "drawing-gsk.hh" +#include "fonts-pangocairo.hh" +#include "graphene-glue.hh" + +static inline PangoGlyphInfo * +vte_glyphs_grow (VteGlyphs *glyphs, + guint count) +{ + g_assert (count > 0); + + guint len = vte_glyphs_get_size (glyphs); + vte_glyphs_set_size (glyphs, len + count); + return vte_glyphs_get (glyphs, len); +} + +namespace vte { +namespace view { + +DrawingGsk::DrawingGsk() noexcept +{ + vte_glyphs_init (&m_glyphs); +} + +DrawingGsk::~DrawingGsk() +{ + vte_glyphs_clear (&m_glyphs); +} + +void +DrawingGsk::set_snapshot(GtkSnapshot *snapshot) noexcept +{ + m_snapshot = snapshot; +} + +void +DrawingGsk::clear(int x, + int y, + int width, + int height, + vte::color::rgb const* color, + double alpha) const +{ + fill_rectangle(x, y, width, height, color, alpha); +} + +void +DrawingGsk::fill_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color) const +{ + g_assert(m_snapshot); + g_assert(color); + + _vte_debug_print(VTE_DEBUG_DRAW, + "draw_fill_rectangle (%d, %d, %d, %d, color=(%d,%d,%d))\n", + x,y,width,height, + color->red, color->green, color->blue); + + auto const rect = Rectangle{x, y, width, height}; + auto const rgba = color->rgba(1.0); + gtk_snapshot_append_color(m_snapshot, &rgba, rect.graphene()); +} + +void +DrawingGsk::fill_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color, + double alpha) const +{ + g_assert(m_snapshot); + g_assert(color); + + _vte_debug_print(VTE_DEBUG_DRAW, + "draw_fill_rectangle (%d, %d, %d, %d, color=(%d,%d,%d,%.3f))\n", + x,y,width,height, + color->red, color->green, color->blue, + alpha); + + auto const rect = Rectangle{x, y, width, height}; + auto const rgba = color->rgba(alpha); + gtk_snapshot_append_color(m_snapshot, &rgba, rect.graphene()); +} + +void +DrawingGsk::flush_glyph_string(PangoFont *font, + const GdkRGBA *color) +{ + PangoGlyphString glyph_string = { + .num_glyphs = int(vte_glyphs_get_size (&m_glyphs)), + .glyphs = vte_glyphs_get_data (&m_glyphs), + .log_clusters = nullptr + }; + + if (glyph_string.num_glyphs == 0) + return; + + /* Setup initial positioning for the text node */ + int x = glyph_string.glyphs[0].geometry.x_offset; + auto const offset = GRAPHENE_POINT_INIT (float(x/PANGO_SCALE), float(0)); + x += glyph_string.glyphs[0].geometry.width; + glyph_string.glyphs[0].geometry.x_offset = 0; + + /* Fix up our geometries relative to previous glyph so that we can + * avoid any sort of translation/container node for most of our + * strings. That should result in faster node diff'ing and building + * the vertices for the texture atlas. + */ + for (int i = 1; i < glyph_string.num_glyphs; i++) { + glyph_string.glyphs[i].geometry.x_offset -= x; + x += glyph_string.glyphs[i].geometry.width; + } + + /* Create text node with offset of first glyph */ + auto node = gsk_text_node_new (font, &glyph_string, color, &offset); + if (node != nullptr) { + gtk_snapshot_append_node (m_snapshot, node); + gsk_render_node_unref (node); + } + + vte_glyphs_set_size (&m_glyphs, 0); +} + + +void +DrawingGsk::draw_text_internal(TextRequest* requests, + gsize n_requests, + uint32_t attr, + vte::color::rgb const* color) +{ + auto font = m_fonts[attr_to_style(attr)]; + gsize i; + + g_assert(font); + g_assert(m_snapshot); + + if (n_requests == 0) + return; + + auto const rgba = color->rgba(1.0); + PangoFont *node_font = nullptr; + + vte_glyphs_set_size (&m_glyphs, 0); + + for (i = 0; i < n_requests; i++) { + vteunistr c = requests[i].c; + + if (G_UNLIKELY (requests[i].mirror)) { + vte_bidi_get_mirror_char (c, requests[i].box_mirror, &c); + } + + if (m_minifont.unistr_is_local_graphic(c)) { + m_minifont.draw_graphic(*this, + c, + color, + requests[i].x, requests[i].y, + font->width(), requests[i].columns, font->height(), + scale_factor()); + continue; + } + + auto uinfo = font->get_unistr_info(c); + auto ufi = &uinfo->m_ufi; + int x, y, ye; + + get_char_edges(c, requests[i].columns, attr, x, ye /* unused */); + x += requests[i].x; + /* Bold/italic versions might have different ascents. In order to align their + * baselines, we offset by the normal font's ascent here. (Bug 137.) */ + y = requests[i].y + m_char_spacing.top + m_fonts[VTE_DRAW_NORMAL]->ascent(); + + switch (uinfo->coverage()) { + default: + g_assert_not_reached (); + break; + case FontInfo::UnistrInfo::Coverage::UNKNOWN: + break; + case FontInfo::UnistrInfo::Coverage::USE_PANGO_GLYPH_STRING: + if (node_font != ufi->using_pango_glyph_string.font) { + flush_glyph_string (node_font, &rgba); + node_font = ufi->using_pango_glyph_string.font; + } + + if (node_font == nullptr) + break; + + auto const from_string = ufi->using_pango_glyph_string.glyph_string; + if (from_string->num_glyphs == 0) + break; + + auto to_glyphs = vte_glyphs_grow (&m_glyphs, from_string->num_glyphs); + for (int j = 0; j < from_string->num_glyphs; j++) { + to_glyphs[j] = from_string->glyphs[j]; + to_glyphs[j].geometry.x_offset += x * PANGO_SCALE; + to_glyphs[j].geometry.y_offset += y * PANGO_SCALE; + x += to_glyphs[j].geometry.width / PANGO_SCALE; + } + + break; + } + } + + flush_glyph_string (node_font, &rgba); +} + +void +DrawingGsk::draw_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color) const +{ + g_assert(color); + g_assert(m_snapshot); + + _vte_debug_print (VTE_DEBUG_DRAW, + "draw_rectangle (%d, %d, %d, %d, color=(%d,%d,%d))\n", + x,y,width,height, + color->red, color->green, color->blue); + + static const float border_width[4] = {VTE_LINE_WIDTH, VTE_LINE_WIDTH, VTE_LINE_WIDTH, VTE_LINE_WIDTH}; + auto const rounded = GSK_ROUNDED_RECT_INIT (float(x), float(y), float(width), float(height)); + GdkRGBA rgba[4]; + rgba[0] = rgba[1] = rgba[2] = rgba[3] = color->rgba(1.0); + gtk_snapshot_append_border(m_snapshot, &rounded, border_width, rgba); +} + +cairo_t* +DrawingGsk::begin_cairo(int x, + int y, + int width, + int height) const +{ + g_assert(m_snapshot); + + auto const bounds = GRAPHENE_RECT_INIT(float(x), float(y), float(width), float(height)); + return gtk_snapshot_append_cairo(m_snapshot, &bounds); +} + +void +DrawingGsk::end_cairo(cairo_t *cr) const +{ + cairo_destroy(cr); +} + +void +DrawingGsk::draw_surface_with_color_mask(GdkTexture *texture, + int x, + int y, + int width, + int height, + vte::color::rgb const* color) const +{ + const auto bounds = vte::graphene::make_rect (x, y, width, height); + const auto rgba = color->rgba(); + + gtk_snapshot_push_mask(m_snapshot, GSK_MASK_MODE_ALPHA); + gtk_snapshot_append_texture(m_snapshot, texture, &bounds); + gtk_snapshot_pop(m_snapshot); + gtk_snapshot_append_color(m_snapshot, &rgba, &bounds); + gtk_snapshot_pop(m_snapshot); +} + +} // namespace view +} // namespace vte diff --git a/src/drawing-gsk.hh b/src/drawing-gsk.hh new file mode 100644 index 0000000..4e90cf7 --- /dev/null +++ b/src/drawing-gsk.hh @@ -0,0 +1,127 @@ +/* + * Copyright © 2023 Christian Hergert + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include + +#include "drawing-context.hh" + +#define GDK_ARRAY_NAME vte_glyphs +#define GDK_ARRAY_TYPE_NAME VteGlyphs +#define GDK_ARRAY_ELEMENT_TYPE PangoGlyphInfo +#define GDK_ARRAY_BY_VALUE 1 +#define GDK_ARRAY_PREALLOC 128 +#define GDK_ARRAY_NO_MEMSET +#include "gdkarrayimpl.c" + +namespace vte { +namespace view { + +class DrawingGsk final : public DrawingContext { +public: + DrawingGsk() noexcept; + ~DrawingGsk() override; + + DrawingGsk(DrawingGsk const&) = delete; + DrawingGsk(DrawingGsk&&) = delete; + DrawingGsk& operator=(DrawingGsk const&) = delete; + DrawingGsk& operator=(DrawingGsk&&) = delete; + + void set_snapshot(GtkSnapshot *snapshot) noexcept; + + cairo_t* begin_cairo(int x, + int y, + int width, + int height) const override; + void end_cairo(cairo_t *cr) const override; + + /* We don't perform any clipping because we render the entire + * scene graph and let Gsk perform the difference to determine + * the appropriate damage area. + */ + inline void clip(Rectangle const* rect) const override { } + inline void unclip() const override { } + + inline void clip_border(Rectangle const* rect) const override + { + gtk_snapshot_push_clip(m_snapshot, rect->graphene()); + } + inline void unclip_border() const override + { + gtk_snapshot_pop(m_snapshot); + } + + inline void translate(double x, + double y) const override + { + auto const point = GRAPHENE_POINT_INIT((float)x, (float)y); + gtk_snapshot_save(m_snapshot); + gtk_snapshot_translate(m_snapshot, &point); + } + inline void untranslate() const override + { + gtk_snapshot_restore(m_snapshot); + } + + void clear(int x, + int y, + int width, + int height, + vte::color::rgb const* color, + double alpha) const override; + void fill_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color) const override; + void fill_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color, + double alpha) const override; + void draw_rectangle(int x, + int y, + int width, + int height, + vte::color::rgb const* color) const override; + + void draw_surface_with_color_mask(GdkTexture *texture, + int x, + int y, + int width, + int height, + vte::color::rgb const* color) const override; + +protected: + void draw_text_internal(TextRequest* requests, + gsize n_requests, + uint32_t attr, + vte::color::rgb const* color) override; + +private: + GtkSnapshot *m_snapshot{nullptr}; // unowned + VteGlyphs m_glyphs; + + void flush_glyph_string(PangoFont* font, + const GdkRGBA* rgba); + +}; + +} // namespace view +} // namespace vte diff --git a/src/dumpkeys.c b/src/dumpkeys.c index f2e0c5f..53a2f58 100644 --- a/src/dumpkeys.c +++ b/src/dumpkeys.c @@ -1,31 +1,29 @@ /* * Copyright (C) 2002 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ -#include -#ifdef HAVE_SYS_TYPES_H +#include "config.h" + +#if __has_include() #include #endif -#ifdef HAVE_SYS_SELECT_H +#if __has_include() #include #endif -#ifdef HAVE_SYS_TERMIOS_H -#include -#endif +#include #include #include #include @@ -33,9 +31,6 @@ #include #include #include -#ifdef HAVE_TERMIOS_H -#include -#endif #include #include diff --git a/src/fonts-pangocairo.cc b/src/fonts-pangocairo.cc new file mode 100644 index 0000000..d973e66 --- /dev/null +++ b/src/fonts-pangocairo.cc @@ -0,0 +1,579 @@ +/* + * Copyright (C) 2003,2008 Red Hat, Inc. + * Copyright © 2019, 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include "config.h" + +#include "fonts-pangocairo.hh" + +#include "cairo-glue.hh" +#include "debug.h" +#include "vtedefines.hh" + +/* Have a space between letters to make sure ligatures aren't used when caching the glyphs: bug 793391. */ +#define VTE_DRAW_SINGLE_WIDE_CHARACTERS \ + " ! \" # $ % & ' ( ) * + , - . / " \ + "0 1 2 3 4 5 6 7 8 9 " \ + ": ; < = > ? @ " \ + "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z " \ + "[ \\ ] ^ _ ` " \ + "a b c d e f g h i j k l m n o p q r s t u v w x y z " \ + "{ | } ~ " \ + "" + +static inline bool +_vte_double_equal(double a, + double b) +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" + return a == b; +#pragma GCC diagnostic pop +} + +#define FONT_CACHE_TIMEOUT (30) /* seconds */ + +namespace vte { +namespace view { + +static GHashTable* s_font_info_for_context{nullptr}; + +FontInfo::UnistrInfo* +FontInfo::find_unistr_info(vteunistr c) +{ + if (G_LIKELY (c < G_N_ELEMENTS(m_ascii_unistr_info))) + return &m_ascii_unistr_info[c]; + + if (G_UNLIKELY (m_other_unistr_info == nullptr)) + m_other_unistr_info = g_hash_table_new_full(nullptr, nullptr, nullptr, (GDestroyNotify)unistr_info_destroy); + + auto uinfo = reinterpret_cast(g_hash_table_lookup(m_other_unistr_info, GINT_TO_POINTER(c))); + if (G_LIKELY (uinfo)) + return uinfo; + + uinfo = new UnistrInfo{}; + g_hash_table_insert(m_other_unistr_info, GINT_TO_POINTER (c), uinfo); + return uinfo; +} + +void +FontInfo::cache_ascii() +{ + PangoLayoutLine *line; + PangoGlyphItemIter iter; + PangoGlyphItem *glyph_item; + PangoGlyphString *glyph_string; + PangoFont *pango_font; + cairo_scaled_font_t *scaled_font; + const char *text; + gboolean more; + PangoLanguage *language; + gboolean latin_uses_default_language; + + /* We have m_layout holding most ASCII characters. We want to + * cache as much info as we can about the ASCII letters so we don't + * have to look them up again later */ + + /* Don't cache if unknown glyphs found in layout */ + if (pango_layout_get_unknown_glyphs_count(m_layout.get()) != 0) + return; + + language = pango_context_get_language(pango_layout_get_context(m_layout.get())); + if (language == nullptr) + language = pango_language_get_default (); + latin_uses_default_language = pango_language_includes_script (language, PANGO_SCRIPT_LATIN); + + text = pango_layout_get_text(m_layout.get()); + + line = pango_layout_get_line_readonly(m_layout.get(), 0); + + /* Don't cache if more than one font used for the line */ + if (G_UNLIKELY (!line || !line->runs || line->runs->next)) + return; + + glyph_item = (PangoGlyphItem *)line->runs->data; + glyph_string = glyph_item->glyphs; + pango_font = glyph_item->item->analysis.font; + if (!pango_font) + return; + scaled_font = pango_cairo_font_get_scaled_font ((PangoCairoFont *) pango_font); + if (!scaled_font) + return; + + for (more = pango_glyph_item_iter_init_start (&iter, glyph_item, text); + more; + more = pango_glyph_item_iter_next_cluster (&iter)) + { + PangoGlyphGeometry *geometry; + PangoGlyph glyph; + vteunistr c; + + /* Only cache simple clusters */ + if (iter.start_char +1 != iter.end_char || + iter.start_index+1 != iter.end_index || + iter.start_glyph+1 != iter.end_glyph) + continue; + + c = text[iter.start_index]; + glyph = glyph_string->glyphs[iter.start_glyph].glyph; + geometry = &glyph_string->glyphs[iter.start_glyph].geometry; + + /* If not using the default locale language, only cache non-common + * characters as common characters get their font from their neighbors + * and we don't want to force Latin on them. */ + if (!latin_uses_default_language && + g_unichar_get_script (c) <= G_UNICODE_SCRIPT_INHERITED) + continue; + + /* Only cache simple glyphs */ + if (!(glyph <= 0xFFFF) || (geometry->x_offset | geometry->y_offset) != 0) + continue; + + auto uinfo = find_unistr_info(c); + if (G_UNLIKELY (uinfo->coverage() != UnistrInfo::Coverage::UNKNOWN)) + continue; + + auto ufi = &uinfo->m_ufi; + + uinfo->width = PANGO_PIXELS_CEIL (geometry->width); + uinfo->has_unknown_chars = false; + +#if VTE_GTK == 3 + uinfo->set_coverage(UnistrInfo::Coverage::USE_CAIRO_GLYPH); + + ufi->using_cairo_glyph.scaled_font = cairo_scaled_font_reference (scaled_font); + ufi->using_cairo_glyph.glyph_index = glyph; +#elif VTE_GTK == 4 + uinfo->set_coverage(UnistrInfo::Coverage::USE_PANGO_GLYPH_STRING); + + ufi->using_pango_glyph_string.font = (PangoFont *)g_object_ref (pango_font); + ufi->using_pango_glyph_string.glyph_string = pango_glyph_string_new (); + pango_glyph_string_set_size (ufi->using_pango_glyph_string.glyph_string, 1); + ufi->using_pango_glyph_string.glyph_string->num_glyphs = 1; + ufi->using_pango_glyph_string.glyph_string->glyphs[0] = glyph_string->glyphs[iter.start_glyph]; + ufi->using_pango_glyph_string.glyph_string->log_clusters[0] = 0; +#endif + +#if VTE_DEBUG + m_coverage_count[0]++; + m_coverage_count[(unsigned)uinfo->coverage()]++; +#endif + } + +#if VTE_DEBUG + _vte_debug_print (VTE_DEBUG_PANGOCAIRO, + "vtepangocairo: %p cached %d ASCII letters\n", + (void*)this, m_coverage_count[0]); +#endif +} + +void +FontInfo::measure_font() +{ + PangoRectangle logical; + + /* Measure U+0021..U+007E individually instead of all together and then + * averaging. For monospace fonts, the results should be the same, but + * if the user (by design, or trough mis-configuration) uses a proportional + * font, the latter method will greatly underestimate the required width, + * leading to unreadable, overlapping characters. + * https://gitlab.gnome.org/GNOME/vte/issues/138 + */ + auto max_width = 1; + auto max_height = 1; + for (char c = 0x21; c < 0x7f; ++c) { + pango_layout_set_text(m_layout.get(), &c, 1); + pango_layout_get_extents(m_layout.get(), nullptr, &logical); + max_width = std::max(max_width, PANGO_PIXELS_CEIL(logical.width)); + max_height = std::max(max_height, PANGO_PIXELS_CEIL(logical.height)); + } + + /* Use the sample text to get the baseline */ + pango_layout_set_text(m_layout.get(), VTE_DRAW_SINGLE_WIDE_CHARACTERS, -1); + pango_layout_get_extents(m_layout.get(), nullptr, &logical); + /* We don't do CEIL for width since we are averaging; + * rounding is more accurate */ + m_ascent = PANGO_PIXELS_CEIL(pango_layout_get_baseline(m_layout.get())); + + m_height = max_height; + m_width = max_width; + + /* Now that we shaped the entire ASCII character string, cache glyph + * info for them */ + cache_ascii(); +} + +FontInfo::FontInfo(vte::glib::RefPtr context) +{ + _vte_debug_print (VTE_DEBUG_PANGOCAIRO, + "vtepangocairo: %p allocating FontInfo\n", + (void*)this); + + m_layout = vte::glib::take_ref(pango_layout_new(context.get())); + + auto tabs = pango_tab_array_new_with_positions(1, FALSE, PANGO_TAB_LEFT, 1); + pango_layout_set_tabs(m_layout.get(), tabs); + pango_tab_array_free(tabs); + + // FIXME!!! + m_string = g_string_sized_new(VTE_UTF8_BPC+1); + + measure_font(); + +#if PANGO_VERSION_CHECK(1, 44, 0) + /* Try using the font's metrics; see issue#163. */ + if (auto metrics = vte::take_freeable + (pango_context_get_metrics(context.get(), + nullptr /* use font from context */, + nullptr /* use language from context */))) { + /* Use provided metrics if possible */ + auto const ascent = PANGO_PIXELS_CEIL(pango_font_metrics_get_ascent(metrics.get())); + auto const height = PANGO_PIXELS_CEIL(pango_font_metrics_get_height(metrics.get())); +#if 0 + /* Note that we cannot use the font's width, since doing so + * regresses issue#138 (non-monospaced font). + * FIXME: Make sure the font is monospace before we get + * here, and then use the font's width too. + */ + auto const width = PANGO_PIXELS_CEIL(pango_font_metrics_get_approximate_char_width(metrics.get())); +#endif /* 0 */ + + /* Sometimes, the metrics return a lower height than the one we measured + * in measure_font(), causing cut-off at the bottom of the last line, see + * https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/340 . Therefore + * we only use the metrics when its height is at least that which we measured. + */ + if (ascent > 0 && height >= m_height) { + _vte_debug_print(VTE_DEBUG_PANGOCAIRO, "Using pango metrics\n"); + + m_ascent = ascent; + m_height = height; +#if 0 + m_width = width; +#endif + } else if (ascent >= 0 && height > 0) { + _vte_debug_print(VTE_DEBUG_PANGOCAIRO, "Disregarding pango metrics due to incorrect height (%d < %d)\n", + height, m_height); + } else { + _vte_debug_print(VTE_DEBUG_PANGOCAIRO, "Not using pango metrics due to not providing height or ascent\n"); + } + } +#endif /* pango >= 1.44 */ + + _vte_debug_print (VTE_DEBUG_PANGOCAIRO | VTE_DEBUG_MISC, + "vtepangocairo: %p font metrics = %dx%d (%d)\n", + (void*)this, m_width, m_height, m_ascent); + + g_hash_table_insert(s_font_info_for_context, + pango_layout_get_context(m_layout.get()), + this); + +} + +FontInfo::~FontInfo() +{ + g_hash_table_remove(s_font_info_for_context, + pango_layout_get_context(m_layout.get())); + +#if VTE_DEBUG + _vte_debug_print (VTE_DEBUG_PANGOCAIRO, + "vtepangocairo: %p freeing font_info. coverages %d = %d + %d + %d\n", + (void*)this, + m_coverage_count[0], + m_coverage_count[1], + m_coverage_count[2], + m_coverage_count[3]); +#endif + + g_string_free(m_string, true); + + if (m_other_unistr_info) { + g_hash_table_destroy(m_other_unistr_info); + } +} + +static GQuark +fontconfig_timestamp_quark (void) +{ + static GQuark quark; + + if (G_UNLIKELY (!quark)) + quark = g_quark_from_static_string ("vte-fontconfig-timestamp"); + + return quark; +} + +static void +vte_pango_context_set_fontconfig_timestamp (PangoContext *context, + guint fontconfig_timestamp) +{ + g_object_set_qdata ((GObject *) context, + fontconfig_timestamp_quark (), + GUINT_TO_POINTER (fontconfig_timestamp)); +} + +static guint +vte_pango_context_get_fontconfig_timestamp (PangoContext *context) +{ + return GPOINTER_TO_UINT (g_object_get_qdata ((GObject *) context, + fontconfig_timestamp_quark ())); +} + +static guint +context_hash (PangoContext *context) +{ + return pango_units_from_double (pango_cairo_context_get_resolution (context)) + ^ pango_font_description_hash (pango_context_get_font_description (context)) + ^ cairo_font_options_hash (pango_cairo_context_get_font_options (context)) + ^ GPOINTER_TO_UINT (pango_context_get_language (context)) + ^ vte_pango_context_get_fontconfig_timestamp (context); +} + +static gboolean +context_equal (PangoContext *a, + PangoContext *b) +{ + return _vte_double_equal(pango_cairo_context_get_resolution(a), pango_cairo_context_get_resolution (b)) + && pango_font_description_equal (pango_context_get_font_description (a), pango_context_get_font_description (b)) + && cairo_font_options_equal (pango_cairo_context_get_font_options (a), pango_cairo_context_get_font_options (b)) + && pango_context_get_language (a) == pango_context_get_language (b) + && vte_pango_context_get_fontconfig_timestamp (a) == vte_pango_context_get_fontconfig_timestamp (b); +} + +// FIXMEchpe return vte::base::RefPtr +FontInfo* +FontInfo::create_for_context(vte::glib::RefPtr context, + PangoFontDescription const* desc, + PangoLanguage* language, + cairo_font_options_t const* font_options, + guint fontconfig_timestamp) +{ + if (!PANGO_IS_CAIRO_FONT_MAP(pango_context_get_font_map(context.get()))) { + /* Ouch, Gtk+ switched over to some drawing system? + * Lets just create one from the default font map. + */ + context = vte::glib::take_ref(pango_font_map_create_context(pango_cairo_font_map_get_default())); + } + + vte_pango_context_set_fontconfig_timestamp(context.get(), fontconfig_timestamp); + + pango_context_set_base_dir(context.get(), PANGO_DIRECTION_LTR); + + if (desc) + pango_context_set_font_description(context.get(), desc); + + if (language != nullptr && + language != pango_context_get_language(context.get())) + pango_context_set_language(context.get(), language); + + { + // Make sure our contexts have a font_options set. We use + // this invariant in our context hash and equal functions. + auto builtin_font_options = vte::take_freeable(cairo_font_options_create()); + +#if VTE_GTK == 4 + // On gtk4, we need to ensure Pango and cairo are configured to quantize + // and hint font metrics. Terminal cells in vte have integer pixel sizes. + // If Pango is configured to do sub-pixel glyph advances, a small fractional + // part might get rounded up to a whole pixel; so the character spacing will + // appear too wide. Setting the cairo hint metrics option ensures that there + // are integer numbers of pixels both above and below the baseline. + // See issue#2573. + cairo_font_options_set_hint_metrics(builtin_font_options.get(), + CAIRO_HINT_METRICS_ON); +#endif /* VTE_GTK == 4 */ + + // Allow using the API to override the built-in hint metrics setting. + if (!font_options) + font_options = builtin_font_options.get(); + + if (auto const ctx_font_options = pango_cairo_context_get_font_options(context.get())) { + auto const merged_font_options = + vte::take_freeable(cairo_font_options_copy(ctx_font_options)); + cairo_font_options_merge(merged_font_options.get(), + font_options); + pango_cairo_context_set_font_options(context.get(), + merged_font_options.get()); + } else { + pango_cairo_context_set_font_options(context.get(), font_options); + } + +#if VTE_GTK == 4 + // If hinting font metrics, also make sure to round glyph positions + // to integers. See issue#2573. + if (auto const ctx_font_options = pango_cairo_context_get_font_options(context.get()); + ctx_font_options && + cairo_version() >= CAIRO_VERSION_ENCODE(1, 17, 4)) { + auto const hint_metrics = cairo_font_options_get_hint_metrics(ctx_font_options); + pango_context_set_round_glyph_positions(context.get(), + hint_metrics == CAIRO_HINT_METRICS_ON); + } else { + pango_context_set_round_glyph_positions(context.get(), false); + } +#endif /* VTE_GTK == 4 */ + } + + if (G_UNLIKELY(s_font_info_for_context == nullptr)) + s_font_info_for_context = g_hash_table_new((GHashFunc) context_hash, (GEqualFunc) context_equal); + + auto info = reinterpret_cast(g_hash_table_lookup(s_font_info_for_context, context.get())); + if (G_LIKELY(info)) { + _vte_debug_print (VTE_DEBUG_PANGOCAIRO, + "vtepangocairo: %p found FontInfo in cache\n", + info); + info = info->ref(); + } else { + info = new FontInfo{std::move(context)}; + } + + return info; +} + +#if VTE_GTK == 3 +FontInfo* +FontInfo::create_for_screen(GdkScreen* screen, + PangoFontDescription const* desc, + PangoLanguage* language, + cairo_font_options_t const* font_options) +{ + auto settings = gtk_settings_get_for_screen(screen); + auto fontconfig_timestamp = guint{}; + g_object_get (settings, "gtk-fontconfig-timestamp", &fontconfig_timestamp, nullptr); + return create_for_context(vte::glib::take_ref(gdk_pango_context_get_for_screen(screen)), + desc, language, font_options, fontconfig_timestamp); +} +#endif /* VTE_GTK */ + +FontInfo* +FontInfo::create_for_widget(GtkWidget* widget, + PangoFontDescription const* desc, + cairo_font_options_t const* font_options) +{ +#if VTE_GTK == 3 + auto screen = gtk_widget_get_screen(widget); + return create_for_screen(screen, desc, nullptr, font_options); +#elif VTE_GTK == 4 + auto display = gtk_widget_get_display(widget); + auto settings = gtk_settings_get_for_display(display); + auto fontconfig_timestamp = guint{}; + g_object_get (settings, "gtk-fontconfig-timestamp", &fontconfig_timestamp, nullptr); + return create_for_context(vte::glib::take_ref(gtk_widget_create_pango_context(widget)), + desc, nullptr, font_options, fontconfig_timestamp); + // FIXMEgtk4: this uses a per-widget context, while the gtk3 code uses a per-screen + // one. That means there may be a lot less sharing and a lot more FontInfo's around? +#endif +} + +FontInfo::UnistrInfo* +FontInfo::get_unistr_info(vteunistr c) +{ + PangoRectangle logical; + PangoLayoutLine *line; + + auto uinfo = find_unistr_info(c); + if (G_LIKELY (uinfo->coverage() != UnistrInfo::Coverage::UNKNOWN)) + return uinfo; + + auto ufi = &uinfo->m_ufi; + + g_string_truncate(m_string, 0); + _vte_unistr_append_to_string(c, m_string); + pango_layout_set_text(m_layout.get(), m_string->str, m_string->len); + pango_layout_get_extents(m_layout.get(), NULL, &logical); + + uinfo->width = PANGO_PIXELS_CEIL (logical.width); + + line = pango_layout_get_line_readonly(m_layout.get(), 0); + + uinfo->has_unknown_chars = pango_layout_get_unknown_glyphs_count(m_layout.get()) != 0; + +#if VTE_GTK == 3 + /* we use PangoLayoutRun rendering unless there is exactly one run in the line. */ + if (G_UNLIKELY (!line || !line->runs || line->runs->next)) + { + uinfo->set_coverage(UnistrInfo::Coverage::USE_PANGO_LAYOUT_LINE); + + // When using a cairo surface which uses show_text_glyphs, + // pango_cairo_show_layout_line() will use the text from + // @line->layout and it must be the text that was used when + // the PangoLayoutLine was created. Also, since @line was + // obtained from m_layout, when setting m_layout to a new + // text later this will change @line->layout to %NULL. + // To make this work, we instead adopt the @m_layout instance + // into @line->layout, and create a new @m_layout object. + + line->layout = m_layout.release(); // adopted + ufi->using_pango_layout_line.line = pango_layout_line_ref (line); + + auto const context = pango_layout_get_context(line->layout); + m_layout = vte::glib::take_ref(pango_layout_new(context)); + + } else { + PangoGlyphItem *glyph_item = (PangoGlyphItem *)line->runs->data; + PangoFont *pango_font = glyph_item->item->analysis.font; + PangoGlyphString *glyph_string = glyph_item->glyphs; + + /* we use fast cairo path if glyph string has only one real + * glyph and at origin */ + if (!uinfo->has_unknown_chars && + glyph_string->num_glyphs == 1 && glyph_string->glyphs[0].glyph <= 0xFFFF && + (glyph_string->glyphs[0].geometry.x_offset | + glyph_string->glyphs[0].geometry.y_offset) == 0) + { + cairo_scaled_font_t *scaled_font = pango_cairo_font_get_scaled_font ((PangoCairoFont *) pango_font); + + if (scaled_font) { + uinfo->set_coverage(UnistrInfo::Coverage::USE_CAIRO_GLYPH); + + ufi->using_cairo_glyph.scaled_font = cairo_scaled_font_reference (scaled_font); + ufi->using_cairo_glyph.glyph_index = glyph_string->glyphs[0].glyph; + } + } + + /* use pango fast path otherwise */ + if (G_UNLIKELY (uinfo->coverage() == UnistrInfo::Coverage::UNKNOWN)) { + uinfo->set_coverage(UnistrInfo::Coverage::USE_PANGO_GLYPH_STRING); + + ufi->using_pango_glyph_string.font = pango_font ? (PangoFont *)g_object_ref (pango_font) : NULL; + ufi->using_pango_glyph_string.glyph_string = pango_glyph_string_copy (glyph_string); + } + } +#elif VTE_GTK == 4 + if (line != nullptr && line->runs != nullptr) + { + PangoGlyphItem *glyph_item = (PangoGlyphItem *)line->runs->data; + PangoGlyphString *glyph_string = glyph_item->glyphs; + + uinfo->set_coverage(UnistrInfo::Coverage::USE_PANGO_GLYPH_STRING); + + ufi->using_pango_glyph_string.font = glyph_item->item->analysis.font; + ufi->using_pango_glyph_string.glyph_string = pango_glyph_string_copy (glyph_string); + } +#endif + + // Don't reset m_layout here; it'll get reset anyway when we next use it. + +#if VTE_DEBUG + m_coverage_count[0]++; + m_coverage_count[uinfo->m_coverage]++; +#endif + + return uinfo; +} + +} // namespace view +} // namespace vte diff --git a/src/fonts-pangocairo.hh b/src/fonts-pangocairo.hh new file mode 100644 index 0000000..a4fdbe1 --- /dev/null +++ b/src/fonts-pangocairo.hh @@ -0,0 +1,298 @@ +/* + * Copyright (C) 2003,2008 Red Hat, Inc. + * Copyright © 2019, 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include + +#include +#include +#include + +#include "cairo-glue.hh" +#include "pango-glue.hh" +#include "refptr.hh" +#include "vteunistr.h" + +/* Overview: + * + * + * This file implements vte rendering using pangocairo. Note that this does + * NOT implement any kind of complex text rendering. That's not currently a + * goal. + * + * The aim is to be super-fast and avoid unneeded work as much as possible. + * Here is an overview of how that is accomplished: + * + * - We attach a font_info to the draw. A font_info has all the information + * to quickly draw text. + * + * - A font_info keeps uses unistr_font_info structs that represent all + * information needed to quickly draw a single vteunistr. The font_info + * creates those unistr_font_info structs on demand and caches them + * indefinitely. It uses a direct array for the ASCII range and a hash + * table for the rest. + * + * + * Fast rendering of unistrs: + * + * A unistr_font_info (uinfo) calls Pango to set text for the unistr upon + * initialization and then caches information needed to draw the results + * later. It uses three different internal representations and respectively + * three drawing paths: + * + * - Coverage::USE_CAIRO_GLYPH: + * Keeping a single glyph index and a cairo scaled-font. This is the + * fastest way to draw text as it bypasses Pango completely and allows + * for stuffing multiple glyphs into a single cairo_show_glyphs() request + * (if scaled-fonts match). This method is used if the glyphs used for + * the vteunistr as determined by Pango consists of a single regular glyph + * positioned at 0,0 using a regular font. This method is used for more + * than 99% of the cases. Only exceptional cases fall through to the + * other two methods. + * + * - Coverage::USE_PANGO_GLYPH_STRING: + * Keeping a pango glyphstring and a pango font. This is slightly slower + * than the previous case as drawing each glyph goes through pango + * separately and causes a separate cairo_show_glyphs() call. This method + * is used when the previous method cannot be used but the glyphs for the + * character all use a single font. This is the method used for hexboxes + * and "empty" characters like U+200C ZERO WIDTH NON-JOINER for example. + * + * - Coverage::USE_PANGO_LAYOUT_LINE: + * Keeping a pango layout line. This method is used only in the very + * weird and exceptional case that a single vteunistr uses more than one + * font to be drawn. This happens for example if some diacretics is not + * available in the font chosen for the base character. + * + * + * Caching of font infos: + * + * To avoid recreating font info structs for the same font again and again we + * do the following: + * + * - Use a global cache to share font info structs across different widgets. + * We use pango language, cairo font options, resolution, and font description + * as the key for our hash table. + * + * - When a font info struct is no longer used by any widget, we delay + * destroying it for a while (FONT_CACHE_TIMEOUT seconds). This is + * supposed to serve two purposes: + * + * * Destroying a terminal widget and creating it again right after will + * reuse the font info struct from the previous widget. + * + * * Zooming in and out a terminal reuses the font info structs. + * + * + * Pre-caching ASCII letters: + * + * When initializing a font info struct we measure a string consisting of all + * ASCII letters and some other ASCII characters. Since we have a shaped pango + * layout at hand, we walk over it and cache unistr font info for the ASCII + * letters if we can do that easily using Coverage::USE_CAIRO_GLYPH. This + * means that we precache all ASCII letters without any extra pango shaping + * involved. + */ + +namespace vte { +namespace view { + +class DrawingContext; + +class FontInfo { + friend class DrawingContext; + + int const font_cache_timeout = 30; // seconds + +public: + FontInfo(vte::glib::RefPtr context); + ~FontInfo(); + + FontInfo* ref() + { + // refcount is 0 when unused but still in cache + assert(m_ref_count >= 0); + + ++m_ref_count; + + if (m_destroy_timeout != 0) { + g_source_remove (m_destroy_timeout); + m_destroy_timeout = 0; + } + + return this; + } + + void unref() + { + assert(m_ref_count > 0); + if (--m_ref_count > 0) + return; + + /* Delay destruction by a few seconds, in case we need it again */ + m_destroy_timeout = g_timeout_add_seconds(font_cache_timeout, + (GSourceFunc)destroy_delayed_cb, + this); + } + + struct UnistrInfo { + enum class Coverage : uint8_t { + /* in increasing order of speed */ + UNKNOWN = 0u, /* we don't know about the character yet */ +#if VTE_GTK == 3 + USE_PANGO_LAYOUT_LINE, /* use a PangoLayoutLine for the character */ + USE_PANGO_GLYPH_STRING, /* use a PangoGlyphString for the character */ + USE_CAIRO_GLYPH, /* use a cairo_glyph_t for the character */ +#elif VTE_GTK == 4 + USE_PANGO_GLYPH_STRING, +#endif + }; + + uint8_t m_coverage{uint8_t(Coverage::UNKNOWN)}; + uint8_t has_unknown_chars; + uint16_t width; + + inline constexpr Coverage coverage() const noexcept { return Coverage{m_coverage}; } + inline constexpr void set_coverage(Coverage coverage) { m_coverage = uint8_t(coverage); } + + // FIXME: use std::variant, ...> ? + union unistr_font_info { +#if VTE_GTK == 3 + /* Coverage::USE_PANGO_LAYOUT_LINE */ + struct { + PangoLayoutLine *line; + } using_pango_layout_line; + /* Coverage::USE_CAIRO_GLYPH */ + struct { + cairo_scaled_font_t *scaled_font; + unsigned int glyph_index; + } using_cairo_glyph; +#endif + /* Coverage::USE_PANGO_GLYPH_STRING */ + struct { + PangoFont *font; + PangoGlyphString *glyph_string; + } using_pango_glyph_string; + } m_ufi; + + UnistrInfo() noexcept = default; + + ~UnistrInfo() noexcept + { + switch (coverage()) { + default: + case Coverage::UNKNOWN: + break; +#if VTE_GTK == 3 + case Coverage::USE_PANGO_LAYOUT_LINE: + /* we hold a manual reference on layout */ + g_object_unref (m_ufi.using_pango_layout_line.line->layout); + m_ufi.using_pango_layout_line.line->layout = NULL; + pango_layout_line_unref (m_ufi.using_pango_layout_line.line); + m_ufi.using_pango_layout_line.line = NULL; + break; + case Coverage::USE_CAIRO_GLYPH: + cairo_scaled_font_destroy (m_ufi.using_cairo_glyph.scaled_font); + m_ufi.using_cairo_glyph.scaled_font = NULL; + break; +#endif + case Coverage::USE_PANGO_GLYPH_STRING: + if (m_ufi.using_pango_glyph_string.font) + g_object_unref (m_ufi.using_pango_glyph_string.font); + m_ufi.using_pango_glyph_string.font = NULL; + pango_glyph_string_free (m_ufi.using_pango_glyph_string.glyph_string); + m_ufi.using_pango_glyph_string.glyph_string = NULL; + break; + } + } + + }; // struct UnistrInfo + + UnistrInfo *get_unistr_info(vteunistr c); + inline constexpr int width() const { return m_width; } + inline constexpr int height() const { return m_height; } + inline constexpr int ascent() const { return m_ascent; } + +private: + + static void unistr_info_destroy(UnistrInfo* uinfo) + { + delete uinfo; + } + + static gboolean destroy_delayed_cb(void* that) + { + auto info = reinterpret_cast(that); + info->m_destroy_timeout = 0; + delete info; + return false; + } + + mutable int m_ref_count{1}; + + UnistrInfo* find_unistr_info(vteunistr c); + void cache_ascii(); + void measure_font(); + guint m_destroy_timeout{0}; /* only used when ref_count == 0 */ + + /* reusable layout set with font and everything set */ + vte::glib::RefPtr m_layout{}; + + /* cache of character info */ + // FIXME: use std::array + UnistrInfo m_ascii_unistr_info[128]; + // FIXME: use std::unordered_map + GHashTable* m_other_unistr_info{nullptr}; + + /* cell metrics as taken from the font, not yet scaled by cell_{width,height}_scale */ + int m_width{1}; + int m_height{1}; + int m_ascent{0}; + + /* reusable string for UTF-8 conversion */ + // FIXME: use std::string + GString* m_string{nullptr}; + +#if VTE_DEBUG + /* profiling info */ + int m_coverage_count[4]{0, 0, 0, 0}; +#endif + + static FontInfo* create_for_context(vte::glib::RefPtr context, + PangoFontDescription const* desc, + PangoLanguage* language, + cairo_font_options_t const* font_options, + guint fontconfig_timestamp); +#if VTE_GTK == 3 + static FontInfo *create_for_screen(GdkScreen* screen, + PangoFontDescription const* desc, + PangoLanguage* language, + cairo_font_options_t const* font_options); +#endif + +public: + + static FontInfo *create_for_widget(GtkWidget* widget, + PangoFontDescription const* desc, + cairo_font_options_t const* font_options); + +}; // class FontInfo + +} // namespace view +} // namespace vte diff --git a/src/fwd.hh b/src/fwd.hh index 11525a9..5879da4 100644 --- a/src/fwd.hh +++ b/src/fwd.hh @@ -1,18 +1,18 @@ /* * Copyright © 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -25,4 +25,23 @@ class Pty; } // namespace base +namespace platform { + +class Clipboard; +class EventBase; +class KeyEvent; +class MouseEvent; +class ScrollEvent; +class Widget; + +} // namespace platform + +namespace view { + +class FontInfo; +class DrawingContext; +struct Rectangle; + +} // namespace view + } // namespace vte diff --git a/src/gdkarrayimpl.c b/src/gdkarrayimpl.c new file mode 100644 index 0000000..058f8b1 --- /dev/null +++ b/src/gdkarrayimpl.c @@ -0,0 +1,322 @@ +/* + * Copyright © 2020 Benjamin Otte + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + * Authors: Benjamin Otte + */ + +#include + +G_BEGIN_DECLS + +#ifndef GDK_ARRAY_TYPE_NAME +#define GDK_ARRAY_TYPE_NAME GdkArray +#endif + +#ifndef GDK_ARRAY_NAME +#define GDK_ARRAY_NAME gdk_array +#endif + +#ifndef GDK_ARRAY_ELEMENT_TYPE +#define GDK_ARRAY_ELEMENT_TYPE gpointer +#endif + +#ifdef GDK_ARRAY_PREALLOC +#if GDK_ARRAY_PREALLOC == 0 +#undef GDK_ARRAY_PREALLOC +#endif +#endif + +#ifdef GDK_ARRAY_NULL_TERMINATED +#define GDK_ARRAY_REAL_SIZE(_size) ((_size) + 1) +#else +#define GDK_ARRAY_REAL_SIZE(_size) (_size) +#endif + +/* make this readable */ +#define _T_ GDK_ARRAY_ELEMENT_TYPE +#define GdkArray GDK_ARRAY_TYPE_NAME +#define gdk_array_paste_more(GDK_ARRAY_NAME, func_name) GDK_ARRAY_NAME ## _ ## func_name +#define gdk_array_paste(GDK_ARRAY_NAME, func_name) gdk_array_paste_more (GDK_ARRAY_NAME, func_name) +#define gdk_array(func_name) gdk_array_paste (GDK_ARRAY_NAME, func_name) + +typedef struct GdkArray GdkArray; + +struct GdkArray +{ + _T_ *start; + _T_ *end; + _T_ *end_allocation; +#ifdef GDK_ARRAY_PREALLOC + _T_ preallocated[GDK_ARRAY_REAL_SIZE(GDK_ARRAY_PREALLOC)]; +#endif +}; + +/* no G_GNUC_UNUSED here, if you don't use an array type, remove it. */ +static inline void +gdk_array(init) (GdkArray *self) +{ +#ifdef GDK_ARRAY_PREALLOC + self->start = self->preallocated; + self->end = self->start; + self->end_allocation = self->start + GDK_ARRAY_PREALLOC; +#ifdef GDK_ARRAY_NULL_TERMINATED + *self->start = *(_T_[1]) { 0 }; +#endif +#else + self->start = NULL; + self->end = NULL; + self->end_allocation = NULL; +#endif +} + +G_GNUC_UNUSED static inline gsize +gdk_array(get_capacity) (const GdkArray *self) +{ + return self->end_allocation - self->start; +} + +G_GNUC_UNUSED static inline gsize +gdk_array(get_size) (const GdkArray *self) +{ + return self->end - self->start; +} + +static inline void +gdk_array(free_elements) (_T_ *start, + _T_ *end) +{ +#ifdef GDK_ARRAY_FREE_FUNC + _T_ *e; + for (e = start; e < end; e++) +#ifdef GDK_ARRAY_BY_VALUE + GDK_ARRAY_FREE_FUNC (e); +#else + GDK_ARRAY_FREE_FUNC (*e); +#endif +#endif +} + +/* no G_GNUC_UNUSED here */ +static inline void +gdk_array(clear) (GdkArray *self) +{ + gdk_array(free_elements) (self->start, self->end); + +#ifdef GDK_ARRAY_PREALLOC + if (self->start != self->preallocated) +#endif + g_free (self->start); + gdk_array(init) (self); +} + +/* + * gdk_array_steal: + * @self: the array + * + * Steals all data in the array and clears the array. + * + * If you need to know the size of the data, you should query it + * beforehand. + * + * Returns: The array's data + **/ +G_GNUC_UNUSED static inline _T_ * +gdk_array(steal) (GdkArray *self) +{ + _T_ *result; + +#ifdef GDK_ARRAY_PREALLOC + if (self->start == self->preallocated) + { + gsize size = GDK_ARRAY_REAL_SIZE (gdk_array(get_size) (self)); + result = g_new (_T_, size); + memcpy (result, self->preallocated, sizeof (_T_) * size); + } + else +#endif + result = self->start; + + gdk_array(init) (self); + + return result; +} + +G_GNUC_UNUSED static inline _T_ * +gdk_array(get_data) (const GdkArray *self) +{ + return self->start; +} + +G_GNUC_UNUSED static inline _T_ * +gdk_array(index) (const GdkArray *self, + gsize pos) +{ + return self->start + pos; +} + +G_GNUC_UNUSED static inline gboolean +gdk_array(is_empty) (const GdkArray *self) +{ + return self->end == self->start; +} + +G_GNUC_UNUSED static inline void +gdk_array(reserve) (GdkArray *self, + gsize n) +{ + gsize new_size, size; + + if (n <= gdk_array(get_capacity) (self)) + return; + + size = gdk_array(get_size) (self); + new_size = 1 << g_bit_storage (MAX (GDK_ARRAY_REAL_SIZE (n), 16) - 1); + +#ifdef GDK_ARRAY_PREALLOC + if (self->start == self->preallocated) + { + self->start = g_new (_T_, new_size); + memcpy (self->start, self->preallocated, sizeof (_T_) * GDK_ARRAY_REAL_SIZE (size)); + } + else +#endif +#ifdef GDK_ARRAY_NULL_TERMINATED + if (self->start == NULL) + { + self->start = g_new (_T_, new_size); + *self->start = *(_T_[1]) { 0 }; + } + else +#endif + self->start = g_renew (_T_, self->start, new_size); + + self->end = self->start + size; + self->end_allocation = self->start + new_size; +#ifdef GDK_ARRAY_NULL_TERMINATED + self->end_allocation--; +#endif +} + +G_GNUC_UNUSED static inline void +gdk_array(splice) (GdkArray *self, + gsize pos, + gsize removed, + gboolean stolen, + _T_ *additions, + gsize added) +{ + gsize size; + gsize remaining; + + size = gdk_array(get_size) (self); + g_assert (pos + removed <= size); + remaining = size - pos - removed; + + if (!stolen) + gdk_array(free_elements) (gdk_array(index) (self, pos), + gdk_array(index) (self, pos + removed)); + + gdk_array(reserve) (self, size - removed + added); + + if (GDK_ARRAY_REAL_SIZE (remaining) && removed != added) + memmove (gdk_array(index) (self, pos + added), + gdk_array(index) (self, pos + removed), + GDK_ARRAY_REAL_SIZE (remaining) * sizeof (_T_)); + + if (added) + { + if (additions) + memcpy (gdk_array(index) (self, pos), + additions, + added * sizeof (_T_)); +#ifndef GDK_ARRAY_NO_MEMSET + else + memset (gdk_array(index) (self, pos), 0, added * sizeof (_T_)); +#endif + } + + + /* might overflow, but does the right thing */ + self->end += added - removed; +} + +G_GNUC_UNUSED static void +gdk_array(set_size) (GdkArray *self, + gsize new_size) +{ + gsize old_size = gdk_array(get_size) (self); + if (new_size > old_size) + gdk_array(splice) (self, old_size, 0, FALSE, NULL, new_size - old_size); + else + gdk_array(splice) (self, new_size, old_size - new_size, FALSE, NULL, 0); +} + +G_GNUC_UNUSED static void +gdk_array(append) (GdkArray *self, +#ifdef GDK_ARRAY_BY_VALUE + _T_ *value) +#else + _T_ value) +#endif +{ + gdk_array(splice) (self, + gdk_array(get_size) (self), + 0, + FALSE, +#ifdef GDK_ARRAY_BY_VALUE + value, +#else + &value, +#endif + 1); +} + +#ifdef GDK_ARRAY_BY_VALUE +G_GNUC_UNUSED static _T_ * +gdk_array(get) (const GdkArray *self, + gsize pos) +{ + return gdk_array(index) (self, pos); +} +#else +G_GNUC_UNUSED static _T_ +gdk_array(get) (const GdkArray *self, + gsize pos) + { + return *gdk_array(index) (self, pos); + } +#endif + +#ifndef GDK_ARRAY_NO_UNDEF + +#undef _T_ +#undef GdkArray +#undef gdk_array_paste_more +#undef gdk_array_paste +#undef gdk_array +#undef GDK_ARRAY_REAL_SIZE + +#undef GDK_ARRAY_BY_VALUE +#undef GDK_ARRAY_ELEMENT_TYPE +#undef GDK_ARRAY_FREE_FUNC +#undef GDK_ARRAY_NAME +#undef GDK_ARRAY_NULL_TERMINATED +#undef GDK_ARRAY_PREALLOC +#undef GDK_ARRAY_TYPE_NAME +#undef GDK_ARRAY_NO_MEMSET +#endif + +G_END_DECLS diff --git a/src/glib-glue.cc b/src/glib-glue.cc new file mode 100644 index 0000000..190c879 --- /dev/null +++ b/src/glib-glue.cc @@ -0,0 +1,182 @@ +/* + * Copyright © 2020, 2021 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include "config.h" + +#include "glib-glue.hh" + +#include +#include +#include +#include + +#include "debug.h" + +#define VTE_EXCEPTION_ERROR g_quark_from_static_string("std::exception") + +typedef enum { + VTE_EXCEPTION_GENERIC, +} VteException; + +namespace vte { + +using namespace std::literals; + +static void +exception_append_to_string(std::exception const& e, + std::string& what, + int level = 0) +{ + if (level > 0) + what += ": "sv; + what += e.what(); + + try { + std::rethrow_if_nested(e); + } catch (std::bad_alloc const& en) { + g_error("Allocation failure: %s\n", what.c_str()); + } catch (std::exception const& en) { + exception_append_to_string(en, what, level + 1); + } catch (...) { + what += ": Unknown nested exception"sv; + } +} + +#if VTE_DEBUG + +void log_exception(char const* func, + char const* filename, + int const line) noexcept +try +{ + auto what = std::string{}; + + try { + throw; // rethrow current exception + } catch (std::bad_alloc const& e) { + g_error("Allocation failure: %s\n", e.what()); + } catch (std::exception const& e) { + exception_append_to_string(e, what); + } catch (...) { + what = "Unknown exception"sv; + } + + _vte_debug_print(VTE_DEBUG_EXCEPTIONS, + "Caught exception in %s [%s:%d]: %s\n", + func, filename, line, what.c_str()); +} +catch (...) +{ + _vte_debug_print(VTE_DEBUG_EXCEPTIONS, + "Caught exception while logging an exception in %s [%s:%d]\n", + func, filename, line); +} + +#else + +static void +log_exception(std::exception const& e) +{ + try { + std::rethrow_if_nested(e); + } catch (std::bad_alloc const& en) { + g_error("Allocation failure: %s\n", e.what()); + } catch (std::exception const& en) { + log_exception(en); + } catch (...) { + } +} + +void +log_exception() noexcept +try +{ + try { + throw; // rethrow current exception + } catch (std::bad_alloc const& e) { + g_error("Allocation failure: %s\n", e.what()); + } catch (std::exception const& e) { + log_exception(e); + } catch (...) { + } +} +catch (...) +{ +} + +#endif /* VTE_DEBUG */ + +namespace glib { + +bool set_error_from_exception(GError** error +#if VTE_DEBUG + , char const* func + , char const* filename + , int const line +#endif + ) noexcept +try +{ + auto what = std::string{}; + + try { + throw; // rethrow current exception + } catch (std::bad_alloc const& e) { + g_error("Allocation failure: %s\n", e.what()); + } catch (std::exception const& e) { + exception_append_to_string(e, what); + } catch (...) { + what = "Unknown exception"sv; + } + +#if VTE_DEBUG + auto msg = vte::glib::take_string(g_strdup_printf("Caught exception in %s [%s:%d]: %s", + func, filename, line, + what.c_str())); +#else + auto msg = vte::glib::take_string(g_strdup_printf("Caught exception: %s", + what.c_str())); +#endif + auto msg_str = vte::glib::take_string(g_utf8_make_valid(msg.get(), -1)); + g_set_error_literal(error, + VTE_EXCEPTION_ERROR, + VTE_EXCEPTION_GENERIC, + msg_str.get()); + _vte_debug_print(VTE_DEBUG_EXCEPTIONS, "%s", msg_str.get()); + + return false; +} +catch (...) +{ + vte::log_exception(); +#if VTE_DEBUG + g_set_error(error, + VTE_EXCEPTION_ERROR, + VTE_EXCEPTION_GENERIC, + "Caught exception while logging an exception in %s [%s:%d]\n", + func, filename, line); +#else + g_set_error_literal(error, + VTE_EXCEPTION_ERROR, + VTE_EXCEPTION_GENERIC, + "Caught exception while logging an exception"); +#endif + return false; +} + +} // namespace glib +} // namespace vte diff --git a/src/glib-glue.hh b/src/glib-glue.hh index 5a1d7b3..a0dcd0c 100644 --- a/src/glib-glue.hh +++ b/src/glib-glue.hh @@ -1,18 +1,18 @@ /* * Copyright © 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -24,30 +24,55 @@ #include +#include "cxx-utils.hh" +#include "std-glue.hh" + namespace vte::glib { template -using free_ptr = std::unique_ptr; +using FreePtr = vte::FreeablePtr; template -free_ptr +FreePtr take_free_ptr(T* ptr) { - return {ptr, &g_free}; + return FreePtr{ptr}; } -using string_ptr = free_ptr; +using StringPtr = FreePtr; +using StringGetter = vte::ValueGetter; -inline string_ptr +inline StringPtr take_string(char* str) { return take_free_ptr(str); } +inline StringPtr +dup_string(char const* str) +{ + return take_string(g_strdup(str)); +} + +using StrvPtr = vte::FreeablePtr; +using StrvGetter = vte::ValueGetter; + +inline StrvPtr +take_strv(char** strv) +{ + return StrvPtr{strv}; +} + +inline StrvPtr +dup_strv(char const* const* strv) +{ + return take_strv(g_strdupv(const_cast(strv))); +} + class Error { public: - Error() = default; - ~Error() { reset(); } + Error() noexcept = default; + ~Error() noexcept { reset(); } Error(Error const&) = delete; Error(Error&&) = delete; @@ -64,6 +89,25 @@ public: void assert_no_error() const noexcept { g_assert_no_error(m_error); } + G_GNUC_PRINTF(4, 5) + void set(GQuark domain, + int code, + char const* format, + ...) + { + va_list args; + va_start(args, format); + g_propagate_error(&m_error, g_error_new_valist(domain, code, format, args)); + va_end(args); + } + + void set_literal(GQuark domain, + int code, + char const* msg) + { + g_propagate_error(&m_error, g_error_new_literal(domain, code, msg)); + } + bool matches(GQuark domain, int code) const noexcept { return error() && g_error_matches(m_error, domain, code); @@ -71,7 +115,9 @@ public: void reset() noexcept { g_clear_error(&m_error); } - bool propagate(GError** error) noexcept { g_propagate_error(error, m_error); m_error = nullptr; return false; } + GError* release() noexcept { auto err = m_error; m_error = nullptr; return err; } + + bool propagate(GError** error) noexcept { g_propagate_error(error, release()); return false; } private: GError* m_error{nullptr}; @@ -86,8 +132,10 @@ public: Timer(callback_type callback, char const* name) - : m_callback(callback), - m_name(name) + : m_callback(callback) +#if VTE_DEBUG + , m_name(name) +#endif { } @@ -123,6 +171,7 @@ public: s_dispatch_timer_cb, this, s_destroy_timer_cb); + set_source_name(); } void schedule_seconds(unsigned int timeout, @@ -134,6 +183,7 @@ public: s_dispatch_timer_cb, this, s_destroy_timer_cb); + set_source_name(); } void schedule_idle(int priority = Priority::eDEFAULT) noexcept @@ -143,6 +193,7 @@ public: s_dispatch_timer_cb, this, s_destroy_timer_cb); + set_source_name(); } void abort() noexcept @@ -157,13 +208,22 @@ public: private: callback_type m_callback{}; +#if VTE_DEBUG char const* m_name{nullptr}; +#endif guint m_source_id{0}; bool m_rescheduled{false}; - bool dispatch() noexcept { + bool dispatch() noexcept + { auto const id = m_source_id; - auto const rv = m_callback(); + + auto rv = false; + try { + rv = m_callback(); + } catch (...) { + vte::log_exception(); + } /* The Timer may have been re-scheduled or removed from within * the callback. In this case, the callback must return false! @@ -179,6 +239,13 @@ private: return rv; } + inline void set_source_name() const noexcept + { + #if VTE_DEBUG + g_source_set_name_by_id(m_source_id, m_name); + #endif + } + static gboolean s_dispatch_timer_cb(void* data) noexcept { auto timer = reinterpret_cast(data); @@ -199,4 +266,37 @@ private: } }; +bool set_error_from_exception(GError** error +#if VTE_DEBUG + , char const* func = __builtin_FUNCTION() + , char const* filename = __builtin_FILE() + , int const line = __builtin_LINE() +#endif + ) noexcept; + +} // namespace vte::glib + +namespace vte { + +VTE_DECLARE_FREEABLE(GArray, g_array_unref); +VTE_DECLARE_FREEABLE(GBytes, g_bytes_unref); +VTE_DECLARE_FREEABLE(GKeyFile, g_key_file_unref); +VTE_DECLARE_FREEABLE(GOptionContext, g_option_context_free); +VTE_DECLARE_FREEABLE(GString, g_autoptr_cleanup_gstring_free); +VTE_DECLARE_FREEABLE(GVariant, g_variant_unref); + +} // namespace vte + +namespace vte::glib { + +inline char* +release_to_string(vte::Freeable str, + gsize* length = nullptr) noexcept +{ + if (length) + *length = str.get()->len; + + return g_string_free(str.release(), false); +} + } // namespace vte::glib diff --git a/src/gobject-glue.hh b/src/gobject-glue.hh new file mode 100644 index 0000000..76e2ceb --- /dev/null +++ b/src/gobject-glue.hh @@ -0,0 +1,49 @@ +/* + * Copyright © 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include + +namespace vte::glib { + +class FreezeObjectNotify { +public: + explicit FreezeObjectNotify(void* object) noexcept + : m_object{G_OBJECT(object)} + { + g_object_freeze_notify(m_object); + } + + ~FreezeObjectNotify() noexcept + { + g_object_thaw_notify(m_object); + } + + FreezeObjectNotify() = delete; + FreezeObjectNotify(FreezeObjectNotify const&) = delete; + FreezeObjectNotify(FreezeObjectNotify&&) = delete; + FreezeObjectNotify& operator=(FreezeObjectNotify const&) = delete; + FreezeObjectNotify& operator=(FreezeObjectNotify&&) = delete; + + auto get() const noexcept { return m_object; } + +private: + GObject* m_object; +}; // class FreezeObjectNotify + +} // namespace vte::glib diff --git a/src/graphene-glue.hh b/src/graphene-glue.hh new file mode 100644 index 0000000..1645611 --- /dev/null +++ b/src/graphene-glue.hh @@ -0,0 +1,48 @@ +/* + * Copyright © 2020 Christian Persch + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include + +#include "std-glue.hh" + +namespace vte::graphene { + +inline constexpr auto +make_rect(int x, + int y, + int width, + int height) +{ + return GRAPHENE_RECT_INIT(float(x), float(y), float(width), float(height)); +} + +inline constexpr auto +make_rect(cairo_rectangle_int_t const* rect) +{ + return make_rect(rect->x, rect->y, rect->width, rect->height); +} + +} // namespace vte::graphene + +namespace vte { + +// VTE_DECLARE_FREEABLE(graphene_rect_t, graphene_rect_free); + +} // namespace vte::cairo diff --git a/src/gtk-glue.hh b/src/gtk-glue.hh new file mode 100644 index 0000000..443e41a --- /dev/null +++ b/src/gtk-glue.hh @@ -0,0 +1,37 @@ +/* + * Copyright © 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include "std-glue.hh" + +namespace vte::gtk { + +} // namespace vte::gtk + +namespace vte { + +#if VTE_GTK == 3 +VTE_DECLARE_FREEABLE(GtkTargetList, gtk_target_list_unref); +#endif /* VTE_GTK == 3 */ + +#if VTE_GTK == 4 +VTE_DECLARE_FREEABLE(GdkContentFormats, gdk_content_formats_unref); +VTE_DECLARE_FREEABLE(GdkContentFormatsBuilder, gdk_content_formats_builder_unref); +#endif /* VTE_GTK == 4 */ + +} // namespace vte diff --git a/src/icu-converter.cc b/src/icu-converter.cc index 5185e4d..9e6c7a4 100644 --- a/src/icu-converter.cc +++ b/src/icu-converter.cc @@ -1,18 +1,18 @@ /* * Copyright © 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" diff --git a/src/icu-converter.hh b/src/icu-converter.hh index 5a99cb3..7eb43db 100644 --- a/src/icu-converter.hh +++ b/src/icu-converter.hh @@ -1,18 +1,18 @@ /* * Copyright © 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once diff --git a/src/icu-decoder.cc b/src/icu-decoder.cc index 5589da4..596c531 100644 --- a/src/icu-decoder.cc +++ b/src/icu-decoder.cc @@ -1,18 +1,18 @@ /* * Copyright © 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" diff --git a/src/icu-decoder.hh b/src/icu-decoder.hh index 8c4eada..7801435 100644 --- a/src/icu-decoder.hh +++ b/src/icu-decoder.hh @@ -1,18 +1,18 @@ /* * Copyright © 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -68,6 +68,21 @@ public: void reset() noexcept; + /* + * pending(): + * + * Returns whether the converter has output pending (i.e. will produce more + * output without consuming more input. + */ + constexpr auto pending() const noexcept + { + /* Due to the way we drive the ICU converter and the way ICU converters work + * by first writing out any internally buffered output before consuming more + * input, this should be a safe guess about whether there is pending output. + */ + return m_index + 1 < m_available; + } + private: enum class State { eInput = 0, diff --git a/src/icu-glue.cc b/src/icu-glue.cc index d86f23c..8045321 100644 --- a/src/icu-glue.cc +++ b/src/icu-glue.cc @@ -1,18 +1,18 @@ /* * Copyright © 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -111,10 +111,35 @@ make_icu_converter(char const* charset, { auto err = icu::ErrorCode{}; auto converter = std::shared_ptr{ucnv_open(charset, err), &ucnv_close}; - if (err.isFailure()) + if (err.isFailure()) { g_set_error(error, G_CONVERT_ERROR, G_CONVERT_ERROR_NO_CONVERSION, "Failed to open converter for charset \"%s\": %s", charset, err.errorName()); + return {}; + } + + /* The unicode->target conversion is only used when converting + * user input (keyboard, clipboard) to be sent to the PTY, and + * we don't want the ucnv_fromUChars to substitute the SUB character + * for illegal input, since SUB is U+001A which is Ctrl-Z, which + * the default UCNV_FROM_U_CALLBACK_SUBSTITUTE callback does. + * Use UCNV_FROM_U_CALLBACK_STOP to stop conversion when encountering + * illegal input. + */ + err.reset(); + ucnv_setFromUCallBack(converter.get(), + UCNV_FROM_U_CALLBACK_STOP, + nullptr, + nullptr, + nullptr, + err); + if (err.isFailure()) { + g_set_error(error, G_CONVERT_ERROR, G_CONVERT_ERROR_NO_CONVERSION, + "Failed ucnv_setFromUCallBack for charset \"%s\": %s", + charset, err.errorName()); + return {}; + } + return converter; } diff --git a/src/icu-glue.hh b/src/icu-glue.hh index 3c61ae9..dcb2ccc 100644 --- a/src/icu-glue.hh +++ b/src/icu-glue.hh @@ -1,18 +1,18 @@ /* * Copyright © 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once diff --git a/src/keymap.cc b/src/keymap.cc index 601707f..00fad07 100644 --- a/src/keymap.cc +++ b/src/keymap.cc @@ -2,23 +2,24 @@ /* * Copyright (C) 2002,2003 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" +#include + #include #include #include @@ -28,7 +29,7 @@ #include "debug.h" #include "keymap.h" -#ifdef VTE_DEBUG +#if VTE_DEBUG static void _vte_keysym_print(guint keyval, guint modifiers) @@ -37,8 +38,8 @@ _vte_keysym_print(guint keyval, if (modifiers & GDK_CONTROL_MASK) { g_printerr("Control+"); } - if (modifiers & VTE_META_MASK) { - g_printerr("Meta+"); + if (modifiers & VTE_ALT_MASK) { + g_printerr("Alt+"); } if (modifiers & VTE_NUMLOCK_MASK) { g_printerr("NumLock+"); @@ -74,7 +75,7 @@ struct _vte_keymap_entry { guint keypad_mode; guint mod_mask; const char normal[8]; - gssize normal_length; + int8_t normal_length; }; #define X_NULL "" @@ -86,10 +87,10 @@ enum _vte_modifier_encoding_method { }; static const struct _vte_keymap_entry _vte_keymap_GDK_space[] = { - /* Control+Meta+space = ESC+NUL */ - {cursor_all, keypad_all, GDK_CONTROL_MASK | VTE_META_MASK, _VTE_CAP_ESC "\0", 2}, - /* Meta+space = ESC+" " */ - {cursor_all, keypad_all, VTE_META_MASK, _VTE_CAP_ESC " ", 2}, + /* Control+Alt+space = ESC+NUL */ + {cursor_all, keypad_all, GDK_CONTROL_MASK | VTE_ALT_MASK, _VTE_CAP_ESC "\0", 2}, + /* Alt+space = ESC+" " */ + {cursor_all, keypad_all, VTE_ALT_MASK, _VTE_CAP_ESC " ", 2}, /* Control+space = NUL */ {cursor_all, keypad_all, GDK_CONTROL_MASK, "\0", 1}, /* Regular space. */ @@ -101,20 +102,20 @@ static const struct _vte_keymap_entry _vte_keymap_GDK_Tab[] = { /* Shift+Tab = Back-Tab */ {cursor_all, keypad_all, GDK_SHIFT_MASK, _VTE_CAP_CSI "Z", -1}, /* Alt+Tab = Esc+Tab */ - {cursor_all, keypad_all, VTE_META_MASK, _VTE_CAP_ESC "\t", -1}, + {cursor_all, keypad_all, VTE_ALT_MASK, _VTE_CAP_ESC "\t", -1}, /* Regular tab. */ {cursor_all, keypad_all, 0, "\t", 1}, {cursor_all, keypad_all, 0, X_NULL, 0}, }; static const struct _vte_keymap_entry _vte_keymap_GDK_Return[] = { - {cursor_all, keypad_all, VTE_META_MASK, _VTE_CAP_ESC "\r", 2}, + {cursor_all, keypad_all, VTE_ALT_MASK, _VTE_CAP_ESC "\r", 2}, {cursor_all, keypad_all, 0, "\r", 1}, {cursor_all, keypad_all, 0, X_NULL, 0}, }; static const struct _vte_keymap_entry _vte_keymap_GDK_Escape[] = { - {cursor_all, keypad_all, VTE_META_MASK, _VTE_CAP_ESC _VTE_CAP_ESC, 2}, + {cursor_all, keypad_all, VTE_ALT_MASK, _VTE_CAP_ESC _VTE_CAP_ESC, 2}, {cursor_all, keypad_all, 0, _VTE_CAP_ESC, 1}, {cursor_all, keypad_all, 0, X_NULL, 0}, }; @@ -130,14 +131,14 @@ static const struct _vte_keymap_entry _vte_keymap_GDK_ISO_Left_Tab[] = { }; static const struct _vte_keymap_entry _vte_keymap_GDK_slash[] = { - {cursor_all, keypad_all, VTE_META_MASK, _VTE_CAP_ESC "/", 2}, + {cursor_all, keypad_all, VTE_ALT_MASK, _VTE_CAP_ESC "/", 2}, {cursor_all, keypad_all, GDK_CONTROL_MASK, "\037", 1}, {cursor_all, keypad_all, 0, "/", 1}, {cursor_all, keypad_all, 0, X_NULL, 0}, }; static const struct _vte_keymap_entry _vte_keymap_GDK_question[] = { - {cursor_all, keypad_all, VTE_META_MASK, _VTE_CAP_ESC "?", 2}, + {cursor_all, keypad_all, VTE_ALT_MASK, _VTE_CAP_ESC "?", 2}, {cursor_all, keypad_all, GDK_CONTROL_MASK, "\177", 1}, {cursor_all, keypad_all, 0, "?", 1}, {cursor_all, keypad_all, 0, X_NULL, 0}, @@ -417,7 +418,7 @@ static const struct _vte_keymap_entry _vte_keymap_GDK_KP_Page_Up[] = { static const struct _vte_keymap_entry _vte_keymap_GDK_F1[] = { {cursor_all, keypad_all, GDK_CONTROL_MASK, _VTE_CAP_CSI "P", -1}, {cursor_all, keypad_all, GDK_SHIFT_MASK, _VTE_CAP_CSI "P", -1}, - {cursor_all, keypad_all, VTE_META_MASK, _VTE_CAP_CSI "P", -1}, + {cursor_all, keypad_all, VTE_ALT_MASK, _VTE_CAP_CSI "P", -1}, {cursor_all, keypad_all, 0, _VTE_CAP_SS3 "P", -1}, {cursor_all, keypad_all, 0, X_NULL, 0}, }; @@ -425,7 +426,7 @@ static const struct _vte_keymap_entry _vte_keymap_GDK_F1[] = { static const struct _vte_keymap_entry _vte_keymap_GDK_F2[] = { {cursor_all, keypad_all, GDK_CONTROL_MASK, _VTE_CAP_CSI "Q", -1}, {cursor_all, keypad_all, GDK_SHIFT_MASK, _VTE_CAP_CSI "Q", -1}, - {cursor_all, keypad_all, VTE_META_MASK, _VTE_CAP_CSI "Q", -1}, + {cursor_all, keypad_all, VTE_ALT_MASK, _VTE_CAP_CSI "Q", -1}, {cursor_all, keypad_all, 0, _VTE_CAP_SS3 "Q", -1}, {cursor_all, keypad_all, 0, X_NULL, 0}, }; @@ -433,7 +434,7 @@ static const struct _vte_keymap_entry _vte_keymap_GDK_F2[] = { static const struct _vte_keymap_entry _vte_keymap_GDK_F3[] = { {cursor_all, keypad_all, GDK_CONTROL_MASK, _VTE_CAP_CSI "R", -1}, {cursor_all, keypad_all, GDK_SHIFT_MASK, _VTE_CAP_CSI "R", -1}, - {cursor_all, keypad_all, VTE_META_MASK, _VTE_CAP_CSI "R", -1}, + {cursor_all, keypad_all, VTE_ALT_MASK, _VTE_CAP_CSI "R", -1}, {cursor_all, keypad_all, 0, _VTE_CAP_SS3 "R", -1}, {cursor_all, keypad_all, 0, X_NULL, 0}, }; @@ -441,7 +442,7 @@ static const struct _vte_keymap_entry _vte_keymap_GDK_F3[] = { static const struct _vte_keymap_entry _vte_keymap_GDK_F4[] = { {cursor_all, keypad_all, GDK_CONTROL_MASK, _VTE_CAP_CSI "S", -1}, {cursor_all, keypad_all, GDK_SHIFT_MASK, _VTE_CAP_CSI "S", -1}, - {cursor_all, keypad_all, VTE_META_MASK, _VTE_CAP_CSI "S", -1}, + {cursor_all, keypad_all, VTE_ALT_MASK, _VTE_CAP_CSI "S", -1}, {cursor_all, keypad_all, 0, _VTE_CAP_SS3 "S", -1}, {cursor_all, keypad_all, 0, X_NULL, 0}, }; @@ -748,7 +749,7 @@ _vte_keymap_map(guint keyval, /* Build mode masks. */ cursor_mode = app_cursor_keys ? cursor_app : cursor_default; keypad_mode = app_keypad_keys ? keypad_app : keypad_default; - modifiers &= GDK_SHIFT_MASK | GDK_CONTROL_MASK | VTE_META_MASK | VTE_NUMLOCK_MASK; + modifiers &= GDK_SHIFT_MASK | GDK_CONTROL_MASK | VTE_ALT_MASK | VTE_NUMLOCK_MASK; /* Search for the conditions. */ for (i = 0; entries[i].normal_length; i++) @@ -951,7 +952,7 @@ _vte_keymap_key_add_key_modifiers(guint keyval, significant_modifiers = GDK_SHIFT_MASK | GDK_CONTROL_MASK | - VTE_META_MASK; + VTE_ALT_MASK; modifier_encoding_method = _vte_keymap_key_get_modifier_encoding_method(keyval); if (modifier_encoding_method == MODIFIER_ENCODING_NONE) { @@ -965,10 +966,10 @@ _vte_keymap_key_add_key_modifiers(guint keyval, case GDK_SHIFT_MASK: modifier = 2; break; - case VTE_META_MASK: + case VTE_ALT_MASK: modifier = 3; break; - case GDK_SHIFT_MASK | VTE_META_MASK: + case GDK_SHIFT_MASK | VTE_ALT_MASK: modifier = 4; break; case GDK_CONTROL_MASK: @@ -977,10 +978,10 @@ _vte_keymap_key_add_key_modifiers(guint keyval, case GDK_SHIFT_MASK | GDK_CONTROL_MASK: modifier = 6; break; - case VTE_META_MASK | GDK_CONTROL_MASK: + case VTE_ALT_MASK | GDK_CONTROL_MASK: modifier = 7; break; - case GDK_SHIFT_MASK | VTE_META_MASK | GDK_CONTROL_MASK: + case GDK_SHIFT_MASK | VTE_ALT_MASK | GDK_CONTROL_MASK: modifier = 8; break; default: diff --git a/src/keymap.h b/src/keymap.h index c1c800e..4eface4 100644 --- a/src/keymap.h +++ b/src/keymap.h @@ -1,19 +1,18 @@ /* * Copyright (C) 2002 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ /* The interfaces in this file are subject to change at any time. */ @@ -26,8 +25,13 @@ G_BEGIN_DECLS -#define VTE_META_MASK GDK_META_MASK +#if VTE_GTK == 3 +#define VTE_ALT_MASK GDK_MOD1_MASK #define VTE_NUMLOCK_MASK GDK_MOD2_MASK +#elif VTE_GTK == 4 +#define VTE_ALT_MASK GDK_ALT_MASK +#define VTE_NUMLOCK_MASK 0 /* FIXME */ +#endif /* Map the specified keyval/modifier setup, dependent on the mode, to either * a literal string or a capability name. */ diff --git a/src/libc-glue.hh b/src/libc-glue.hh new file mode 100644 index 0000000..6230a5d --- /dev/null +++ b/src/libc-glue.hh @@ -0,0 +1,239 @@ +/* + * Copyright © 2015, 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include +#include +#include + +#include +#include + +namespace vte::libc { + +class ErrnoSaver { +public: + ErrnoSaver() noexcept : m_errsv{errno} { } + ~ErrnoSaver() noexcept { errno = m_errsv; } + + ErrnoSaver(ErrnoSaver const&) = delete; + ErrnoSaver(ErrnoSaver&&) = delete; + ErrnoSaver& operator=(ErrnoSaver const&) = delete; + ErrnoSaver& operator=(ErrnoSaver&&) = delete; + + inline constexpr operator int () const noexcept { return m_errsv; } + + inline void reset() noexcept { m_errsv = 0; } + +private: + int m_errsv; +}; // class ErrnoSaver + +class FD { +public: + constexpr FD() noexcept = default; + explicit constexpr FD(int fd) noexcept : m_fd{fd} { } // adopts the FD + constexpr FD(FD const&) = delete; + constexpr FD(FD&& rhs) noexcept : m_fd{rhs.release()} { } + + ~FD() noexcept { reset(); } + + // adopt the file descriptor + FD& operator=(int rhs) noexcept + { + reset(); + m_fd = rhs; + return *this; + } + + FD& operator=(FD& rhs) = delete; + + FD& operator=(FD&& rhs) noexcept + { + if (this != std::addressof(rhs)) { + reset(); + m_fd = rhs.release(); + } + return *this; + } + + explicit constexpr operator bool() const noexcept { return m_fd != -1; } + + constexpr int get() const noexcept { return m_fd; } + + constexpr int release() noexcept + { + auto fd = m_fd; + m_fd = -1; + return fd; + } + + void reset() + { + if (m_fd != -1) { + auto errsv = ErrnoSaver{}; + close(m_fd); + m_fd = -1; + } + } + + /* C++20 constexpr */ void swap(FD& other) + { + using std::swap; + swap(m_fd, other.m_fd); + } + +private: + int m_fd{-1}; + +}; // class FD + +constexpr bool operator==(FD const& lhs, FD const& rhs) noexcept { return lhs.get() == rhs.get(); } +constexpr bool operator==(FD const& lhs, int rhs) noexcept { return lhs.get() == rhs; } +constexpr bool operator!=(FD const& lhs, FD const& rhs) noexcept { return !(lhs == rhs); } +constexpr bool operator!=(FD const& lhs, int rhs) noexcept { return !(lhs == rhs); } +/* C++20 constexpr */ inline void swap(FD& lhs, FD& rhs) noexcept { lhs.swap(rhs); } + +/* FD convenience functions */ + +static inline int +fd_get_descriptor_flags(int fd) +{ + auto flags = int{}; + do { + flags = fcntl(fd, F_GETFD); + } while (flags == -1 && errno == EINTR); + + return flags; +} + +static inline int +fd_set_descriptor_flags(int fd, + int flags) +{ + auto r = int{}; + do { + r = fcntl(fd, F_SETFD, flags); + } while (r == -1 && errno == EINTR); + + return r; +} + +static inline int +fd_change_descriptor_flags(int fd, + int set_flags, + int unset_flags) +{ + auto const flags = fd_get_descriptor_flags(fd); + if (flags == -1) + return -1; + + auto const new_flags = (flags | set_flags) & ~unset_flags; + if (new_flags == flags) + return 0; + + return fd_set_descriptor_flags(fd, new_flags); +} + +static inline int +fd_get_status_flags(int fd) +{ + auto flags = int{}; + do { + flags = fcntl(fd, F_GETFL, 0); + } while (flags == -1 && errno == EINTR); + + return flags; +} + +static inline int +fd_set_status_flags(int fd, + int flags) +{ + auto r = int{}; + do { + r = fcntl(fd, F_SETFL, flags); + } while (r == -1 && errno == EINTR); + + return r; +} + +static inline int +fd_change_status_flags(int fd, + int set_flags, + int unset_flags) +{ + auto const flags = fd_get_status_flags(fd); + if (flags == -1) + return -1; + + auto const new_flags = (flags | set_flags) & ~unset_flags; + if (new_flags == flags) + return 0; + + return fd_set_status_flags(fd, new_flags); +} + +static inline bool +fd_get_cloexec(int fd) +{ + auto const r = fd_get_descriptor_flags(fd); + return r != -1 && (r & FD_CLOEXEC) != 0; +} + +static inline int +fd_set_cloexec(int fd) +{ + return fd_change_descriptor_flags(fd, FD_CLOEXEC, 0); +} + +static inline int +fd_unset_cloexec(int fd) +{ + return fd_change_descriptor_flags(fd, 0, FD_CLOEXEC); +} + +static inline int +fd_set_nonblock(int fd) +{ + return fd_change_status_flags(fd, O_NONBLOCK, 0); +} + +static inline int +fd_dup_cloexec(int oldfd, + int newfd) +{ + auto r = int{}; + do { + r = fcntl(oldfd, F_DUPFD_CLOEXEC, newfd); + } while (r == -1 && errno == EINTR); + return r; +} + +static inline int +fd_dup2(int oldfd, + int newfd) +{ + auto r = int{}; + do { + r = dup2(oldfd, newfd); + } while (r == -1 && errno == EINTR); + return r; +} + +} // namespace vte::libc diff --git a/src/meson.build b/src/meson.build index 78c5178..3f89f49 100644 --- a/src/meson.build +++ b/src/meson.build @@ -1,15 +1,15 @@ # Copyright © 2018, 2019 Iñigo Martínez # Copyright © 2019 Christian Persch # -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. # -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser -# General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this library. If not, see . @@ -29,9 +29,18 @@ debug_sources = files( ) glib_glue_sources = files( + 'glib-glue.cc', 'glib-glue.hh', ) +graphene_glue_sources = files( + 'graphene-glue.hh', +) + +gtk_glue_sources = files( + 'gtk-glue.hh', +) + icu_sources = files( 'icu-converter.cc', 'icu-converter.hh', @@ -41,32 +50,75 @@ icu_sources = files( 'icu-glue.hh', ) +libc_glue_sources = files( + 'libc-glue.hh', +) + modes_sources = files( - 'modes-ecma.hh', - 'modes-private.hh', 'modes.hh', ) +modes_sources += custom_target( + 'modes', + command: [ + python, + files('modes.py'), + '--destdir', '@OUTDIR@', + ], + input: [], + install: false, + output: [ + 'modes-dec.hh', + 'modes-ecma.hh', + ], +) + +pango_glue_sources = files( + 'pango-glue.hh', +) + parser_sources = files( 'parser-arg.hh', - 'parser-c01.hh', 'parser-charset-tables.hh', 'parser-charset.hh', - 'parser-cmd.hh', - 'parser-csi.hh', - 'parser-dcs.hh', 'parser-decsgr.hh', - 'parser-esc.hh', 'parser-glue.hh', 'parser-osc.hh', 'parser-reply.hh', - 'parser-sci.hh', 'parser-sgr.hh', 'parser-string.hh', 'parser.cc', 'parser.hh', ) +parser_sources += custom_target( + 'parser-seq', + command: [ + python, + files('parser-seq.py'), + '--destdir', '@OUTDIR@', + ], + input: [], + install: false, + output: [ + 'parser-c01.hh', + 'parser-cmd.hh', + 'parser-csi.hh', + 'parser-dcs.hh', + 'parser-esc.hh', + 'parser-sci.hh', + ], +) + +pastify_sources = files( + 'pastify.cc', + 'pastify.hh', +) + +pcre2_glue_sources = files( + 'pcre2-glue.hh', +) + pty_sources = files( 'pty.cc', 'pty.hh', @@ -74,50 +126,81 @@ pty_sources = files( 'vteptyinternal.hh', ) +refptr_sources = files( + 'refptr.hh', +) + regex_sources = files( 'regex.cc', 'regex.hh' ) +std_glue_sources = files( + 'std-glue.hh', +) + systemd_sources = files( 'systemd.cc', 'systemd.hh', ) +unicode_width_sources = files( + 'unicode-width.hh', +) + utf8_sources = files( 'utf8.cc', 'utf8.hh', ) -libvte_common_sources = debug_sources + glib_glue_sources + modes_sources + parser_sources + pty_sources + regex_sources + utf8_sources + files( +vte_glue_sources = files( + 'vte-glue.hh', +) + +libvte_common_sources = config_sources + debug_sources + glib_glue_sources + gtk_glue_sources + libc_glue_sources + modes_sources + pango_glue_sources + parser_sources + pastify_sources + pcre2_glue_sources + pty_sources + refptr_sources + regex_sources + std_glue_sources + utf8_sources + vte_glue_sources + files( 'attr.hh', 'bidi.cc', 'bidi.hh', + 'box-drawing.hh', 'buffer.h', + 'cairo-glue.hh', 'caps.hh', 'cell.hh', 'chunk.cc', 'chunk.hh', + 'clipboard-gtk.cc', + 'clipboard-gtk.hh', 'color-triple.hh', + 'cxx-utils.hh', + 'drawing-context.cc', + 'drawing-context.hh', + 'fonts-pangocairo.cc', + 'fonts-pangocairo.hh', + 'gobject-glue.hh', 'keymap.cc', 'keymap.h', + 'minifont.cc', + 'minifont.hh', + 'missing.cc', + 'missing.hh', 'reaper.cc', 'reaper.hh', - 'refptr.hh', 'ring.cc', 'ring.hh', 'ringview.cc', 'ringview.hh', + 'scheduler.cc', + 'scheduler.h', + 'spawn.cc', + 'spawn.hh', + 'unicode-width.hh', 'utf8.cc', 'utf8.hh', 'vte.cc', 'vtedefines.hh', - 'vtedraw.cc', - 'vtedraw.hh', 'vtegtk.cc', 'vtegtk.hh', 'vteinternal.hh', - 'vtepcre2.h', 'vteregex.cc', 'vteregexinternal.hh', 'vterowdata.cc', @@ -139,9 +222,15 @@ libvte_common_sources = debug_sources + glib_glue_sources + modes_sources + pars 'widget.hh', ) -if get_option('a11y') - libvte_common_sources += a11y_sources -endif +libvte_gtk3_drawing_sources = files( + 'drawing-cairo.cc', + 'drawing-cairo.hh', +) + +libvte_gtk4_drawing_sources = files( + 'drawing-gsk.cc', + 'drawing-gsk.hh', +) if get_option('icu') libvte_common_sources += icu_sources @@ -153,20 +242,9 @@ endif libvte_common_doc_sources = files( # These file contain gtk-doc comments to be extracted for docs and gir - 'vtepty.cc', 'vtegtk.cc', -) - -# FIXMEchpe this should use files('...') (allowed as per docs, afaict), but that crashes meson -generate_box_drawing = find_program('box_drawing_generate.sh') - -libvte_common_sources += custom_target( - 'box-drawing', - input: 'box_drawing.txt', - output: 'box_drawing.h', - capture: true, - command: [generate_box_drawing, '@INPUT@'], - install: false, + 'vtepty.cc', + 'vteregex.cc', ) libvte_common_sources += gnome.compile_resources( @@ -184,6 +262,7 @@ libvte_common_sources += gnome.genmarshal( ) libvte_common_public_deps = [ + cairo_dep, gio_dep, glib_dep, gobject_dep, @@ -191,14 +270,15 @@ libvte_common_public_deps = [ ] libvte_common_deps = libvte_common_public_deps + [ + cairo_gobject_dep, fribidi_dep, gnutls_dep, icu_dep, pcre2_dep, libm_dep, + liblz4_dep, pthreads_dep, systemd_dep, - zlib_dep, ] incs = [ @@ -209,16 +289,19 @@ incs = [ libvte_common_cppflags = [ '-DG_LOG_DOMAIN="VTE"', '-DLOCALEDIR="@0@"'.format(vte_prefix / vte_localedir), - '-DVTE_DISABLE_DEPRECATION_WARNINGS', '-DVTE_COMPILATION', '-UPARSER_INCLUDE_NOP', ] if get_option('gtk3') - libvte_gtk3_sources = libvte_common_sources + libvte_gtk3_public_headers + libvte_gtk3_enum_sources - libvte_gtk3_cppflags = libvte_common_cppflags + gtk3_version_cppflags - libvte_gtk3_deps = libvte_common_deps + [gtk3_dep] - libvte_gtk3_public_deps = libvte_common_public_deps + [gtk3_dep] + libvte_gtk3_sources = libvte_common_sources + libvte_gtk3_public_headers + libvte_gtk3_enum_sources + libvte_gtk3_drawing_sources + libvte_gtk3_cppflags = libvte_common_cppflags + gtk3_version_cppflags + ['-DVTE_GTK=3',] + release_args + libvte_gtk3_deps = libvte_common_deps + [gtk3_dep,] + libvte_gtk3_public_deps = libvte_common_public_deps + [gtk3_dep,] + + if get_option('a11y') + libvte_gtk3_sources += a11y_sources + endif libvte_gtk3 = shared_library( vte_gtk3_api_name, @@ -232,7 +315,7 @@ if get_option('gtk3') libvte_gtk3_dep = declare_dependency( sources: libvte_gtk3_public_headers, - include_directories: [src_inc, vte_inc], + include_directories: [src_inc, vte_inc,], dependencies: libvte_gtk3_deps, link_with: libvte_gtk3 ) @@ -249,14 +332,64 @@ if get_option('gtk3') ) endif +if get_option('gtk4') + + libvte_gtk4_resources_data = files( + ) + + libvte_gtk4_resources_sources = gnome.compile_resources( + 'vteresources-gtk4.cc', + 'vte-gtk4.gresource.xml', + c_name: 'vte', + dependencies: libvte_gtk4_resources_data, + ) + + libvte_gtk4_sources = libvte_common_sources + libvte_gtk4_public_headers + libvte_gtk4_enum_sources + libvte_gtk4_resources_sources + graphene_glue_sources + libvte_gtk4_drawing_sources + libvte_gtk4_cppflags = libvte_common_cppflags + gtk4_version_cppflags + ['-DVTE_GTK=4',] + release_args + libvte_gtk4_deps = libvte_common_deps + [gtk4_dep,] + libvte_gtk4_public_deps = libvte_common_public_deps + [gtk4_dep,] + + libvte_gtk4 = shared_library( + vte_gtk4_api_name, + sources: libvte_gtk4_sources, + version: libvte_gtk4_soversion, + include_directories: incs, + dependencies: libvte_gtk4_deps, + cpp_args: libvte_gtk4_cppflags, + install: true, + ) + + libvte_gtk4_dep = declare_dependency( + sources: libvte_gtk4_public_headers, + include_directories: [src_inc, vte_inc,], + dependencies: libvte_gtk4_deps, + link_with: libvte_gtk4 + ) + + pkg.generate( + libvte_gtk4, + version: vte_version, + name: 'vte', + description: 'VTE widget for GTK+ 4.0', + filebase: vte_gtk4_api_name, + subdirs: vte_gtk4_api_name, + requires: libvte_gtk4_public_deps, + variables: 'exec_prefix=${prefix}', + ) +endif + ## Tests # decoder cat -decoder_cat_sources = glib_glue_sources + icu_sources + utf8_sources + debug_sources + files( +decoder_cat_sources = config_sources + glib_glue_sources + libc_glue_sources + utf8_sources + debug_sources + files( 'decoder-cat.cc', ) +if get_option('icu') + decoder_cat_sources += icu_sources +endif + decoder_cat = executable( 'decoder-cat', decoder_cat_sources, @@ -268,8 +401,9 @@ decoder_cat = executable( # parser cat -parser_cat_sources = glib_glue_sources + parser_sources + utf8_sources + debug_sources + files( +parser_cat_sources = config_sources + glib_glue_sources + libc_glue_sources + parser_sources + std_glue_sources + utf8_sources + debug_sources + files( 'parser-cat.cc', + 'vtedefines.hh', ) parser_cat = executable( @@ -283,7 +417,7 @@ parser_cat = executable( # dumpkeys -dumpkeys_sources = files( +dumpkeys_sources = config_sources + files( 'dumpkeys.c' ) @@ -297,7 +431,7 @@ dumpkeys = executable( # mev -mev_sources = files( +mev_sources = config_sources + files( 'mev.c' ) @@ -311,7 +445,7 @@ mev = executable( # slowcat -slowcat_sources = files( +slowcat_sources = config_sources + files( 'slowcat.c' ) @@ -325,34 +459,38 @@ slowcat = executable( # reflect -reflect_sources = files( - 'reflect.c' -) +if get_option('gtk3') -reflect_textview = executable( - 'reflect-textview', - sources: reflect_sources, - dependencies: [gtk3_dep], - c_args: ['-DUSE_TEXT_VIEW'], - include_directories: top_inc, - install: false, -) + reflect_sources = config_sources + files( + 'reflect.c' + ) -reflect_vte = executable( - 'reflect-vte', - sources: reflect_sources, - dependencies: [gtk3_dep, libvte_gtk3_dep], - c_args: [ - '-DUSE_VTE', - '-DVTE_DISABLE_DEPRECATION_WARNINGS', - ], - include_directories: top_inc, - install: false, -) + reflect_textview = executable( + 'reflect-textview', + sources: reflect_sources, + dependencies: [gtk3_dep], + c_args: ['-DUSE_TEXT_VIEW'], + include_directories: top_inc, + install: false, + ) + + reflect_vte = executable( + 'reflect-vte', + sources: reflect_sources, + dependencies: [gtk3_dep, libvte_gtk3_dep,], + c_args: [ + '-DUSE_VTE', + '-DVTE_DISABLE_DEPRECATION_WARNINGS', + ], + include_directories: [top_inc,], + install: false, + ) + +endif # vte-urlencode-cwd -vte_urlencode_cwd_sources = files( +vte_urlencode_cwd_sources = config_sources + files( 'urlencode.cc', ) @@ -369,7 +507,7 @@ vte_urlencode_cwd = executable( # xticker -xticker_sources = files( +xticker_sources = config_sources + files( 'xticker.c' ) @@ -384,7 +522,7 @@ xticker = executable( # Unit tests -test_modes_sources = modes_sources + files( +test_modes_sources = config_sources + modes_sources + files( 'modes-test.cc', ) @@ -396,7 +534,7 @@ test_modes = executable( install: false, ) -test_parser_sources = parser_sources + files( +test_parser_sources = config_sources + parser_sources + files( 'parser-test.cc', ) @@ -409,7 +547,19 @@ test_parser = executable( install: false, ) -test_reaper_sources = debug_sources + files( +test_pastify_sources = config_sources + pastify_sources + files( + 'pastify-test.cc', +) + +test_pastify = executable( + 'test-pastify', + sources: test_pastify_sources, + dependencies: [glib_dep], + include_directories: top_inc, + install: false, +) + +test_reaper_sources = config_sources + debug_sources + files( 'reaper.cc', 'reaper.hh' ) @@ -423,7 +573,7 @@ test_reaper = executable( install: false, ) -test_refptr_sources = files( +test_refptr_sources = config_sources + files( 'refptr-test.cc', 'refptr.hh' ) @@ -436,12 +586,7 @@ test_refptr = executable( install: false, ) -test_tabstops_sources = files( - 'tabstops-test.cc', - 'tabstops.hh' -) - -test_stream_sources = files( +test_stream_sources = config_sources + files( 'vtestream-base.h', 'vtestream-file.h', 'vtestream.cc', @@ -453,12 +598,17 @@ test_stream_sources = files( test_stream = executable( 'test-stream', sources: test_stream_sources, - dependencies: [gio_dep, gnutls_dep, zlib_dep], + dependencies: [gio_dep, gnutls_dep, liblz4_dep], cpp_args: ['-DVTESTREAM_MAIN'], include_directories: top_inc, install: false, ) +test_tabstops_sources = config_sources + files( + 'tabstops-test.cc', + 'tabstops.hh' +) + test_tabstops = executable( 'test-tabstops', sources: test_tabstops_sources, @@ -467,7 +617,19 @@ test_tabstops = executable( install: false, ) -test_utf8_sources = utf8_sources + files( +test_unicode_width_sources = config_sources + unicode_width_sources + files( + 'unicode-width-test.cc', +) + +test_unicode_width = executable( + 'test-unicode-width', + sources: test_unicode_width_sources, + dependencies: [glib_dep], + include_directories: top_inc, + install: false, +) + +test_utf8_sources = config_sources + utf8_sources + files( 'utf8-test.cc', ) @@ -479,19 +641,21 @@ test_utf8 = executable( install: false, ) -test_vtetypes_sources = files( +test_vtetypes_sources = config_sources + libc_glue_sources + files( 'vtetypes.cc', 'vtetypes.hh', ) -test_vtetypes = executable( - 'test-vtetypes', - sources: test_vtetypes_sources, - dependencies: [glib_dep, pango_dep, gtk3_dep], - cpp_args: ['-DMAIN'], - include_directories: top_inc, - install: false, -) +if get_option('gtk3') + test_vtetypes = executable( + 'test-vtetypes', + sources: test_vtetypes_sources, + dependencies: [glib_dep, pango_dep, gtk3_dep,], + cpp_args: ['-DMAIN'], + include_directories: top_inc, + install: false, + ) +endif test_env = [ 'VTE_DEBUG=0' @@ -501,14 +665,21 @@ test_env = [ test_units = [ ['modes', test_modes], ['parser', test_parser], + ['pastify', test_pastify], ['reaper', test_reaper], ['refptr', test_refptr], ['stream', test_stream], ['tabstops', test_tabstops], + ['unicode-width', test_unicode_width], ['utf8', test_utf8], - ['vtetypes', test_vtetypes], ] +if get_option('gtk3') + test_units += [ + ['vtetypes', test_vtetypes], + ] +endif + foreach test: test_units test( test[0], diff --git a/src/mev.c b/src/mev.c index 2d8b7de..74c4aca 100644 --- a/src/mev.c +++ b/src/mev.c @@ -1,39 +1,33 @@ /* * Copyright (C) 2003 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include #include -#ifdef HAVE_SYS_TERMIOS_H -#include -#endif #include #include #include #include #include -#ifdef HAVE_TERMIOS_H #include -#endif #include #include #include "caps.hh" -#ifdef HAVE_SYS_SELECT_H +#if __has_include() #include #endif @@ -133,7 +127,7 @@ parse_legacy_mouse_mode(guint8 *data, gsize len) { int button = 0; - const char *shift = "", *control = "", *meta = ""; + const char *shift = "", *control = "", *alt = ""; gboolean motion = FALSE; int x, y; guint8 b; @@ -168,8 +162,8 @@ parse_legacy_mouse_mode(guint8 *data, shift = b & 4 ? "[shift]" : ""; - meta = b & 8 ? - "[meta]" : + alt = b & 8 ? + "[alt]" : ""; control = b & 16 ? "[control]" : @@ -182,7 +176,7 @@ parse_legacy_mouse_mode(guint8 *data, motion ? "motion " : "", (!motion && button) ? "press" : "", (!motion && !button) ? "release" : "", - meta, control, shift, + alt, control, shift, x, y); return 6; diff --git a/src/minifont.cc b/src/minifont.cc new file mode 100644 index 0000000..073ab59 --- /dev/null +++ b/src/minifont.cc @@ -0,0 +1,1379 @@ +/* + * Copyright (C) 2003,2008 Red Hat, Inc. + * Copyright © 2019, 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include "config.h" + +#include + +#include + +#if VTE_GTK == 4 +# include +#endif + +#include "drawing-context.hh" +#include "minifont.hh" + +#if VTE_GTK == 4 +#define MINIFONT_CACHE_MAX_SIZE 128 + +typedef struct _CachedMinifont +{ + gunichar c; // the actual unichar to draw + unsigned width : 12; // the width of the cell + unsigned height : 13; // the height of the cell + unsigned scale_factor : 3; // the scale factor (1..7) + unsigned x_off : 2; // x_offset for patterns (0..3) + unsigned y_off : 2; // y_offset for patterns (0..3) + // 8-byte boundary for cached_minifont_equal() + unsigned : 0; + unsigned xpad : 12; + unsigned ypad : 13; + + GList link; + + /* An 8-bit alpha only surface */ +#if VTE_GTK == 3 + cairo_surface_t *surface; +#elif VTE_GTK == 4 + GdkTexture *texture; +#endif +} CachedMinifont; + +static GHashTable *minifont_cache; +static GQueue minifonts; +static guint minifont_gc_source; + +static inline guint +cached_minifont_hash(gconstpointer data) +{ + const CachedMinifont *mf = (const CachedMinifont *)data; + + return (mf->c & 0xFFFF) ^ + (((mf->scale_factor-1) & 0x3) << 30) ^ + ((mf->width & 0x1F) << 25) ^ + ((mf->height & 0x1F) << 20) ^ + (mf->x_off << 18) ^ + (mf->y_off << 16); +} + +static inline gboolean +cached_minifont_equal(gconstpointer data1, + gconstpointer data2) +{ + return memcmp (data1, data2, 8) == 0; +} + +static void +cached_minifont_free (gpointer data) +{ + CachedMinifont *mf = (CachedMinifont *)data; + + g_queue_unlink (&minifonts, &mf->link); +#if VTE_GTK == 3 + cairo_surface_destroy (mf->surface); +#elif VTE_GTK == 4 + g_object_unref (mf->texture); +#endif + g_free (mf); +} + +static const CachedMinifont * +cached_minifont_lookup(vteunistr c, + int width, + int height, + int scale_factor, + int x_off, + int y_off) +{ + CachedMinifont key; + + if G_UNLIKELY (minifont_cache == nullptr) + return nullptr; + + key.c = c; + key.width = width; + key.height = height; + key.scale_factor = scale_factor; + key.x_off = x_off; + key.y_off = y_off; + + // We could use an MRU here to track the minifont surface/textures + // but they are fast enough to create on demand if we even reach our + // threshold that it's cheaper than MRU tracking on lookups. + + return (const CachedMinifont *)g_hash_table_lookup (minifont_cache, (gpointer)&key); +} + +static gboolean +cached_minifont_gc_worker(gpointer data) +{ + minifont_gc_source = 0; + + while (minifonts.length > MINIFONT_CACHE_MAX_SIZE) { + CachedMinifont *mf = (CachedMinifont *)g_queue_peek_tail (&minifonts); + g_hash_table_remove (minifont_cache, (gpointer)mf); + } + + return G_SOURCE_REMOVE; +} + +static inline void +cached_minifont_add(CachedMinifont *mf) +{ + if G_UNLIKELY (minifont_cache == NULL) + minifont_cache = g_hash_table_new_full (cached_minifont_hash, + cached_minifont_equal, + cached_minifont_free, + nullptr); + + g_queue_push_head_link (&minifonts, &mf->link); + g_hash_table_add (minifont_cache, mf); + + if G_UNLIKELY (minifont_gc_source == 0 && minifonts.length > MINIFONT_CACHE_MAX_SIZE) + minifont_gc_source = g_idle_add (cached_minifont_gc_worker, nullptr); +} + +static inline void +cached_minifont_draw(const CachedMinifont *mf, + vte::view::DrawingContext const& context, + int x, + int y, + int width, + int height, + vte::color::rgb const* fg) +{ + x -= mf->xpad; + y -= mf->ypad; + width += 2 * mf->xpad; + height += 2 * mf->ypad; + + // Our surface includes padding on all sides to help with situations + // where glyphs should appear to overlap adjacent cells. +#if VTE_GTK == 3 + context.draw_surface_with_color_mask(mf->surface, x, y, width, height, fg); +#elif VTE_GTK == 4 + context.draw_surface_with_color_mask(mf->texture, x, y, width, height, fg); +#endif +} +#endif + +static cairo_surface_t * +create_surface(int width, + int height, + int xpad, + int ypad, + int scale_factor) +{ + width += xpad * 2; + width *= scale_factor; + + height += ypad * 2; + height *= scale_factor; + + auto surface = cairo_image_surface_create(CAIRO_FORMAT_A8, width, height); + cairo_surface_set_device_scale(surface, scale_factor, scale_factor); + return surface; +} + +/* pixman data must have stride 0 mod 4 */ + +// Note that the LR and RL patterns are not mirrors of each other, +// but instead the RL pattern is the mirrored pattern that then is +// additionally shifted 1 row upwards. This makes the pattern tile +// seamlessly when they are used to fill a rectangle of any given +// (fixed) width and height that are then put next to each other +// horizontally or vertically. +// See issue#2672. +static unsigned char const hatching_pattern_lr_data[16] = { + 0xff, 0x00, 0x00, 0x00, + 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0xff, +}; +static unsigned char const hatching_pattern_rl_data[16] = { + 0x00, 0x00, 0xff, 0x00, + 0x00, 0xff, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, +}; + +static unsigned char const checkerboard_pattern_data[16] = { + 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, +}; +static unsigned char const checkerboard_reverse_pattern_data[16] = { + 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, +}; + +#define DEFINE_STATIC_PATTERN_FUNC(name,data,width,height,stride) \ +static cairo_pattern_t* \ +name(void) \ +{ \ + static cairo_pattern_t* pattern = nullptr; \ +\ + if (pattern == nullptr) { \ + auto surface = cairo_image_surface_create_for_data(const_cast(data), \ + CAIRO_FORMAT_A8, \ + width, \ + height, \ + stride); \ + pattern = cairo_pattern_create_for_surface(surface); \ + cairo_surface_destroy(surface); \ +\ + cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT); \ + cairo_pattern_set_filter (pattern, CAIRO_FILTER_NEAREST); \ + } \ +\ + return pattern; \ +} + +DEFINE_STATIC_PATTERN_FUNC(create_hatching_pattern_lr, hatching_pattern_lr_data, 4, 4, 4) +DEFINE_STATIC_PATTERN_FUNC(create_hatching_pattern_rl, hatching_pattern_rl_data, 4, 4, 4) +DEFINE_STATIC_PATTERN_FUNC(create_checkerboard_pattern, checkerboard_pattern_data, 4, 4, 4) +DEFINE_STATIC_PATTERN_FUNC(create_checkerboard_reverse_pattern, checkerboard_reverse_pattern_data, 4, 4, 4) + +#undef DEFINE_STATIC_PATTERN_FUNC + +static void +polygon(cairo_t* cr, + double x, + double y, + double w, + double h, + int xdenom, + int ydenom, + int8_t const* cc) +{ + int x1 = (w) * (cc[0]) / (xdenom); + int y1 = (h) * (cc[1]) / (ydenom); + cairo_move_to ((cr), (x) + x1, (y) + y1); + int i = 2; + while (cc[i] != -1) { + x1 = (w) * (cc[i]) / (xdenom); + y1 = (h) * (cc[i + 1]) / (ydenom); + cairo_line_to ((cr), (x) + x1, (y) + y1); + i += 2; + } + cairo_fill (cr); +} + +static void +pattern(cairo_t* cr, + cairo_pattern_t* pattern, + double x, + double y, + double width, + double height) +{ + cairo_push_group(cr); + cairo_rectangle(cr, x, y, width, height); + cairo_fill(cr); + cairo_pop_group_to_source(cr); + cairo_mask(cr, pattern); +} + +#include "box-drawing.hh" + +namespace vte::view { + +void +Minifont::rectangle(cairo_t* cr, + double x, + double y, + double w, + double h, + int xdenom, + int ydenom, + int xb1, + int yb1, + int xb2, + int yb2) const +{ + int const x1 = (w) * (xb1) / (xdenom); + int const y1 = (h) * (yb1) / (ydenom); + int const x2 = (w) * (xb2) / (xdenom); + int const y2 = (h) * (yb2) / (ydenom); + cairo_rectangle ((cr), (x) + x1, (y) + y1, MAX(x2 - x1, 1), MAX(y2 - y1, 1)); + cairo_fill (cr); +} + +void +Minifont::rectangle(DrawingContext const& context, + vte::color::rgb const* fg, + double alpha, + double x, + double y, + double w, + double h, + int xdenom, + int ydenom, + int xb1, + int yb1, + int xb2, + int yb2) const +{ + int const x1 = (w) * (xb1) / (xdenom); + int const y1 = (h) * (yb1) / (ydenom); + int const x2 = (w) * (xb2) / (xdenom); + int const y2 = (h) * (yb2) / (ydenom); + + context.fill_rectangle((x) + x1, (y) + y1, MAX(x2 - x1, 1), MAX(y2 - y1, 1), fg, alpha); +} + +cairo_t* +Minifont::begin_cairo(int x, + int y, + int width, + int height, + int xpad, + int ypad, + int scale_factor) +{ + auto surface = vte::take_freeable(create_surface(width, height, xpad, ypad, scale_factor)); + auto cr = cairo_create(surface.get()); + cairo_set_source_rgba(cr, 1, 1, 1, 1); + // We keep an extra pixel of padding to help to ensure that + // lines which should seem contiguous across rows are. + cairo_translate(cr, -x + xpad, -y + ypad); + return cr; +} + +#if VTE_GTK == 4 +GdkTexture * +Minifont::surface_to_texture(cairo_surface_t *surface) const +{ + cairo_surface_flush(surface); + + const guchar *data = cairo_image_surface_get_data(surface); + int width = cairo_image_surface_get_width(surface); + int height = cairo_image_surface_get_height(surface); + int stride = cairo_image_surface_get_stride(surface); + GBytes *bytes = g_bytes_new(data, height * stride); + + auto texture = gdk_memory_texture_new(width, height, GDK_MEMORY_A8, bytes, stride); + + g_bytes_unref(bytes); + + return texture; + +} +#endif + +/* Draw the graphic representation of a line-drawing or special graphics + * character. */ +void +Minifont::draw_graphic(DrawingContext const& context, + vteunistr c, + vte::color::rgb const* fg, + int x, + int y, + int font_width, + int columns, + int font_height, + int scale_factor) +{ + int width = context.cell_width() * columns; + int height = context.cell_height(); +#if VTE_GTK == 4 + int x_off = 0, y_off = 0; +#endif + + // The glyphs we can draw can be separated into two classes. + // + // The first class (our fast path), are a simple rectangle + // or small series of rectangles which can be drawn using + // GskColorNode on GTK 4. + // + // The second class are more complex in that they require + // drawing arcs or some form of bit pattern that would not + // be suited well to a GskColorNode per glyph. + // + // To avoid overhead for the fast path, we check for those + // up front before every trying to lookup a CachedMinifont. + // While GHashTable is fast, it's much slower than doing the + // least amount of work up-front for the fast path. + + switch (c) { + + /* Block Elements */ + case 0x2580: /* upper half block */ + rectangle(context, fg, 1, x, y, width, height, 1, 2, 0, 0, 1, 1); + return; + + case 0x2581: /* lower one eighth block */ + case 0x2582: /* lower one quarter block */ + case 0x2583: /* lower three eighths block */ + case 0x2584: /* lower half block */ + case 0x2585: /* lower five eighths block */ + case 0x2586: /* lower three quarters block */ + case 0x2587: /* lower seven eighths block */ + { + const guint v = 0x2588 - c; + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, v, 1, 8); + return; + } + + case 0x2588: /* full block */ + case 0x2589: /* left seven eighths block */ + case 0x258a: /* left three quarters block */ + case 0x258b: /* left five eighths block */ + case 0x258c: /* left half block */ + case 0x258d: /* left three eighths block */ + case 0x258e: /* left one quarter block */ + case 0x258f: /* left one eighth block */ + { + const guint v = 0x2590 - c; + rectangle(context, fg, 1, x, y, width, height, 8, 1, 0, 0, v, 1); + return; + } + + case 0x2590: /* right half block */ + rectangle(context, fg, 1, x, y, width, height, 2, 1, 1, 0, 2, 1); + return; + + case 0x2591: /* light shade */ + case 0x2592: /* medium shade */ + case 0x2593: /* dark shade */ + context.fill_rectangle(x, y, width, height, fg, (c - 0x2590) / 4.); + return; + + case 0x2594: /* upper one eighth block */ + { + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, 0, 1, 1); + return; + } + + case 0x2595: /* right one eighth block */ + { + rectangle(context, fg, 1, x, y, width, height, 8, 1, 7, 0, 8, 1); + return; + } + + case 0x2596: /* quadrant lower left */ + rectangle(context, fg, 1, x, y, width, height, 2, 2, 0, 1, 1, 2); + return; + + case 0x2597: /* quadrant lower right */ + rectangle(context, fg, 1, x, y, width, height, 2, 2, 1, 1, 2, 2); + return; + + case 0x2598: /* quadrant upper left */ + rectangle(context, fg, 1, x, y, width, height, 2, 2, 0, 0, 1, 1); + return; + + case 0x2599: /* quadrant upper left and lower left and lower right */ + rectangle(context, fg, 1, x, y, width, height, 2, 2, 0, 0, 1, 1); + rectangle(context, fg, 1, x, y, width, height, 2, 2, 0, 1, 2, 2); + return; + + case 0x259a: /* quadrant upper left and lower right */ + rectangle(context, fg, 1, x, y, width, height, 2, 2, 0, 0, 1, 1); + rectangle(context, fg, 1, x, y, width, height, 2, 2, 1, 1, 2, 2); + return; + + case 0x259b: /* quadrant upper left and upper right and lower left */ + rectangle(context, fg, 1, x, y, width, height, 2, 2, 0, 0, 2, 1); + rectangle(context, fg, 1, x, y, width, height, 2, 2, 0, 1, 1, 2); + return; + + case 0x259c: /* quadrant upper left and upper right and lower right */ + rectangle(context, fg, 1, x, y, width, height, 2, 2, 0, 0, 2, 1); + rectangle(context, fg, 1, x, y, width, height, 2, 2, 1, 1, 2, 2); + return; + + case 0x259d: /* quadrant upper right */ + rectangle(context, fg, 1, x, y, width, height, 2, 2, 1, 0, 2, 1); + return; + + case 0x259e: /* quadrant upper right and lower left */ + rectangle(context, fg, 1, x, y, width, height, 2, 2, 1, 0, 2, 1); + rectangle(context, fg, 1, x, y, width, height, 2, 2, 0, 1, 1, 2); + return; + + case 0x259f: /* quadrant upper right and lower left and lower right */ + rectangle(context, fg, 1, x, y, width, height, 2, 2, 1, 0, 2, 1); + rectangle(context, fg, 1, x, y, width, height, 2, 2, 0, 1, 2, 2); + return; + + case 0x1fb70: + case 0x1fb71: + case 0x1fb72: + case 0x1fb73: + case 0x1fb74: + case 0x1fb75: + { + auto const v = c - 0x1fb70 + 1; + rectangle(context, fg, 1, x, y, width, height, 8, 1, v, 0, v + 1, 1); + return; + } + + case 0x1fb76: + case 0x1fb77: + case 0x1fb78: + case 0x1fb79: + case 0x1fb7a: + case 0x1fb7b: + { + auto const v = c - 0x1fb76 + 1; + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, v, 1, v + 1); + return; + } + + case 0x1fb7c: + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, 7, 1, 8); + rectangle(context, fg, 1, x, y, width, height, 8, 1, 0, 0, 1, 1); + return; + + case 0x1fb7d: + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, 0, 1, 1); + rectangle(context, fg, 1, x, y, width, height, 8, 1, 0, 0, 1, 1); + return; + + case 0x1fb7e: + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, 0, 1, 1); + rectangle(context, fg, 1, x, y, width, height, 8, 1, 7, 0, 8, 1); + return; + + case 0x1fb7f: + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, 7, 1, 8); + rectangle(context, fg, 1, x, y, width, height, 8, 1, 7, 0, 8, 1); + return; + + case 0x1fb80: + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, 0, 1, 1); + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, 7, 1, 8); + return; + + case 0x1fb81: + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, 0, 1, 1); + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, 2, 1, 3); + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, 4, 1, 5); + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, 7, 1, 8); + return; + + case 0x1fb82: + case 0x1fb83: + case 0x1fb84: + case 0x1fb85: + case 0x1fb86: + { + auto v = c - 0x1fb82 + 2; + if (v >= 4) v++; + rectangle(context, fg, 1, x, y, width, height, 1, 8, 0, 0, 1, v); + return; + } + + case 0x1fb87: + case 0x1fb88: + case 0x1fb89: + case 0x1fb8a: + case 0x1fb8b: + { + auto v = c - 0x1fb87 + 2; + if (v >= 4) v++; + rectangle(context, fg, 1, x, y, width, height, 8, 1, 8 - v, 0, 8, 1); + return; + } + + case 0x1fb8c: + rectangle(context, fg, .5, x, y, width, height, 2, 1, 0, 0, 1, 1); + return; + + case 0x1fb8d: + rectangle(context, fg, .5, x, y, width, height, 2, 1, 1, 0, 2, 1); + return; + + case 0x1fb8e: + rectangle(context, fg, .5, x, y, width, height, 1, 2, 0, 0, 1, 1); + return; + + case 0x1fb8f: + rectangle(context, fg, .5, x, y, width, height, 1, 2, 0, 1, 1, 2); + return; + + case 0x1fb90: + rectangle(context, fg, .5, x, y, width, height, 1, 1, 0, 0, 1, 1); + return; + + case 0x1fb91: + rectangle(context, fg, 1., x, y, width, height, 1, 2, 0, 0, 1, 1); + rectangle(context, fg, .5, x, y, width, height, 1, 2, 0, 1, 1, 2); + return; + + case 0x1fb92: + rectangle(context, fg, 1., x, y, width, height, 1, 2, 0, 1, 1, 2); + rectangle(context, fg, .5, x, y, width, height, 1, 2, 0, 0, 1, 1); + return; + + case 0x1fb93: +#if 0 + /* codepoint not assigned */ + rectangle(context, fg, 1., x, y, width, height, 2, 1, 0, 0, 1, 1); + rectangle(context, fg, .5, x, y, width, height, 2, 1, 1, 0, 2, 1); +#endif + return; + + case 0x1fb94: + rectangle(context, fg, 1., x, y, width, height, 2, 1, 1, 0, 2, 1); + rectangle(context, fg, .5, x, y, width, height, 2, 1, 0, 0, 1, 1); + return; + + case 0x1fb97: + rectangle(context, fg, 1, x, y, width, height, 1, 4, 0, 1, 1, 2); + rectangle(context, fg, 1, x, y, width, height, 1, 4, 0, 3, 1, 4); + return; + + case 0x1fb95: + case 0x1fb96: + case 0x1fb98: + case 0x1fb99: +#if VTE_GTK == 4 + x_off = x & 0x3; + y_off = y & 0x3; +#endif + [[fallthrough]]; + default: + { +#if VTE_GTK == 4 + const CachedMinifont *cached = cached_minifont_lookup(c, width, height, scale_factor, x_off, y_off); + + if G_LIKELY (cached != nullptr) { + cached_minifont_draw(cached, context, x, y, width, height, fg); + return; + } +#endif + } + } + + int xcenter, xright, ycenter, ybottom; + int upper_half, left_half; + int light_line_width, heavy_line_width; +#if VTE_GTK == 4 + const vteunistr real_c = c; +#endif + double adjust; + + upper_half = height / 2; + left_half = width / 2; + + /* Exclude the spacing for line width computation. */ + light_line_width = font_width / 5; + light_line_width = MAX (light_line_width, 1); + + if (c >= 0x2550 && c <= 0x256c) { + heavy_line_width = 3 * light_line_width; + } else { + heavy_line_width = light_line_width + 2; + } + + xcenter = x + left_half; + ycenter = y + upper_half; + xright = x + width; + ybottom = y + height; + +#if VTE_GTK == 3 + auto cr = context.begin_cairo(x, y, width, height); +#elif VTE_GTK == 4 + auto xpad = 0, ypad = 0; + auto cr = begin_cairo(x, y, width, height, xpad, ypad, scale_factor); +#endif + + switch (c) { + + /* Box Drawing */ + case 0x1fbaf: /* box drawings light horizontal with vertical stroke */ + rectangle(cr, x + left_half - light_line_width / 2, y, + light_line_width, height, 1, 3, 0, 1, 1, 2); + c = 0x2500; + [[fallthrough]]; + case 0x2500: /* box drawings light horizontal */ + case 0x2501: /* box drawings heavy horizontal */ + case 0x2502: /* box drawings light vertical */ + case 0x2503: /* box drawings heavy vertical */ + case 0x250c: /* box drawings light down and right */ + case 0x250d: /* box drawings down light and right heavy */ + case 0x250e: /* box drawings down heavy and right light */ + case 0x250f: /* box drawings heavy down and right */ + case 0x2510: /* box drawings light down and left */ + case 0x2511: /* box drawings down light and left heavy */ + case 0x2512: /* box drawings down heavy and left light */ + case 0x2513: /* box drawings heavy down and left */ + case 0x2514: /* box drawings light up and right */ + case 0x2515: /* box drawings up light and right heavy */ + case 0x2516: /* box drawings up heavy and right light */ + case 0x2517: /* box drawings heavy up and right */ + case 0x2518: /* box drawings light up and left */ + case 0x2519: /* box drawings up light and left heavy */ + case 0x251a: /* box drawings up heavy and left light */ + case 0x251b: /* box drawings heavy up and left */ + case 0x251c: /* box drawings light vertical and right */ + case 0x251d: /* box drawings vertical light and right heavy */ + case 0x251e: /* box drawings up heavy and right down light */ + case 0x251f: /* box drawings down heavy and right up light */ + case 0x2520: /* box drawings vertical heavy and right light */ + case 0x2521: /* box drawings down light and right up heavy */ + case 0x2522: /* box drawings up light and right down heavy */ + case 0x2523: /* box drawings heavy vertical and right */ + case 0x2524: /* box drawings light vertical and left */ + case 0x2525: /* box drawings vertical light and left heavy */ + case 0x2526: /* box drawings up heavy and left down light */ + case 0x2527: /* box drawings down heavy and left up light */ + case 0x2528: /* box drawings vertical heavy and left light */ + case 0x2529: /* box drawings down light and left up heavy */ + case 0x252a: /* box drawings up light and left down heavy */ + case 0x252b: /* box drawings heavy vertical and left */ + case 0x252c: /* box drawings light down and horizontal */ + case 0x252d: /* box drawings left heavy and right down light */ + case 0x252e: /* box drawings right heavy and left down light */ + case 0x252f: /* box drawings down light and horizontal heavy */ + case 0x2530: /* box drawings down heavy and horizontal light */ + case 0x2531: /* box drawings right light and left down heavy */ + case 0x2532: /* box drawings left light and right down heavy */ + case 0x2533: /* box drawings heavy down and horizontal */ + case 0x2534: /* box drawings light up and horizontal */ + case 0x2535: /* box drawings left heavy and right up light */ + case 0x2536: /* box drawings right heavy and left up light */ + case 0x2537: /* box drawings up light and horizontal heavy */ + case 0x2538: /* box drawings up heavy and horizontal light */ + case 0x2539: /* box drawings right light and left up heavy */ + case 0x253a: /* box drawings left light and right up heavy */ + case 0x253b: /* box drawings heavy up and horizontal */ + case 0x253c: /* box drawings light vertical and horizontal */ + case 0x253d: /* box drawings left heavy and right vertical light */ + case 0x253e: /* box drawings right heavy and left vertical light */ + case 0x253f: /* box drawings vertical light and horizontal heavy */ + case 0x2540: /* box drawings up heavy and down horizontal light */ + case 0x2541: /* box drawings down heavy and up horizontal light */ + case 0x2542: /* box drawings vertical heavy and horizontal light */ + case 0x2543: /* box drawings left up heavy and right down light */ + case 0x2544: /* box drawings right up heavy and left down light */ + case 0x2545: /* box drawings left down heavy and right up light */ + case 0x2546: /* box drawings right down heavy and left up light */ + case 0x2547: /* box drawings down light and up horizontal heavy */ + case 0x2548: /* box drawings up light and down horizontal heavy */ + case 0x2549: /* box drawings right light and left vertical heavy */ + case 0x254a: /* box drawings left light and right vertical heavy */ + case 0x254b: /* box drawings heavy vertical and horizontal */ + case 0x2550: /* box drawings double horizontal */ + case 0x2551: /* box drawings double vertical */ + case 0x2552: /* box drawings down single and right double */ + case 0x2553: /* box drawings down double and right single */ + case 0x2554: /* box drawings double down and right */ + case 0x2555: /* box drawings down single and left double */ + case 0x2556: /* box drawings down double and left single */ + case 0x2557: /* box drawings double down and left */ + case 0x2558: /* box drawings up single and right double */ + case 0x2559: /* box drawings up double and right single */ + case 0x255a: /* box drawings double up and right */ + case 0x255b: /* box drawings up single and left double */ + case 0x255c: /* box drawings up double and left single */ + case 0x255d: /* box drawings double up and left */ + case 0x255e: /* box drawings vertical single and right double */ + case 0x255f: /* box drawings vertical double and right single */ + case 0x2560: /* box drawings double vertical and right */ + case 0x2561: /* box drawings vertical single and left double */ + case 0x2562: /* box drawings vertical double and left single */ + case 0x2563: /* box drawings double vertical and left */ + case 0x2564: /* box drawings down single and horizontal double */ + case 0x2565: /* box drawings down double and horizontal single */ + case 0x2566: /* box drawings double down and horizontal */ + case 0x2567: /* box drawings up single and horizontal double */ + case 0x2568: /* box drawings up double and horizontal single */ + case 0x2569: /* box drawings double up and horizontal */ + case 0x256a: /* box drawings vertical single and horizontal double */ + case 0x256b: /* box drawings vertical double and horizontal single */ + case 0x256c: /* box drawings double vertical and horizontal */ + case 0x2574: /* box drawings light left */ + case 0x2575: /* box drawings light up */ + case 0x2576: /* box drawings light right */ + case 0x2577: /* box drawings light down */ + case 0x2578: /* box drawings heavy left */ + case 0x2579: /* box drawings heavy up */ + case 0x257a: /* box drawings heavy right */ + case 0x257b: /* box drawings heavy down */ + case 0x257c: /* box drawings light left and heavy right */ + case 0x257d: /* box drawings light up and heavy down */ + case 0x257e: /* box drawings heavy left and light right */ + case 0x257f: /* box drawings heavy up and light down */ + { + guint32 bitmap = _vte_draw_box_drawing_bitmaps[c - 0x2500]; + int xboundaries[6] = { 0, + left_half - heavy_line_width / 2, + left_half - light_line_width / 2, + left_half - light_line_width / 2 + light_line_width, + left_half - heavy_line_width / 2 + heavy_line_width, + width}; + int yboundaries[6] = { 0, + upper_half - heavy_line_width / 2, + upper_half - light_line_width / 2, + upper_half - light_line_width / 2 + light_line_width, + upper_half - heavy_line_width / 2 + heavy_line_width, + height}; + int xi, yi; + for (yi = 4; yi >= 0; yi--) { + for (xi = 4; xi >= 0; xi--) { + if (bitmap & 1) { + cairo_rectangle(cr, + x + xboundaries[xi], + y + yboundaries[yi], + xboundaries[xi + 1] - xboundaries[xi], + yboundaries[yi + 1] - yboundaries[yi]); + cairo_fill(cr); + } + bitmap >>= 1; + } + } + break; + } + + case 0x2504: /* box drawings light triple dash horizontal */ + case 0x2505: /* box drawings heavy triple dash horizontal */ + case 0x2506: /* box drawings light triple dash vertical */ + case 0x2507: /* box drawings heavy triple dash vertical */ + case 0x2508: /* box drawings light quadruple dash horizontal */ + case 0x2509: /* box drawings heavy quadruple dash horizontal */ + case 0x250a: /* box drawings light quadruple dash vertical */ + case 0x250b: /* box drawings heavy quadruple dash vertical */ + case 0x254c: /* box drawings light double dash horizontal */ + case 0x254d: /* box drawings heavy double dash horizontal */ + case 0x254e: /* box drawings light double dash vertical */ + case 0x254f: /* box drawings heavy double dash vertical */ + { + const guint v = c - 0x2500; + int size, line_width; + + size = (v & 2) ? height : width; + + switch (v >> 2) { + case 1: /* triple dash */ + { + double segment = size / 8.; + double dashes[2] = { segment * 2., segment }; + cairo_set_dash(cr, dashes, G_N_ELEMENTS(dashes), 0.); + break; + } + case 2: /* quadruple dash */ + { + double segment = size / 11.; + double dashes[2] = { segment * 2., segment }; + cairo_set_dash(cr, dashes, G_N_ELEMENTS(dashes), 0.); + break; + } + case 19: /* double dash */ + { + double segment = size / 5.; + double dashes[2] = { segment * 2., segment }; + cairo_set_dash(cr, dashes, G_N_ELEMENTS(dashes), 0.); + break; + } + } + + line_width = (v & 1) ? heavy_line_width : light_line_width; + adjust = (line_width & 1) ? .5 : 0.; + + cairo_set_line_width(cr, line_width); + cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); + if (v & 2) { + cairo_move_to(cr, xcenter + adjust, y); + cairo_line_to(cr, xcenter + adjust, y + height); + } else { + cairo_move_to(cr, x, ycenter + adjust); + cairo_line_to(cr, x + width, ycenter + adjust); + } + cairo_stroke(cr); + break; + } + + case 0x256d: /* box drawings light arc down and right */ + case 0x256e: /* box drawings light arc down and left */ + case 0x256f: /* box drawings light arc up and left */ + case 0x2570: /* box drawings light arc up and right */ + { + const guint v = c - 0x256d; + int line_width; + int radius; + + cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); + + line_width = light_line_width; + adjust = (line_width & 1) ? .5 : 0.; + cairo_set_line_width(cr, line_width); + + radius = (font_width + 2) / 3; + radius = MAX(radius, heavy_line_width); + + if (v & 2) { + cairo_move_to(cr, xcenter + adjust, y); + cairo_line_to(cr, xcenter + adjust, ycenter - radius + 2 * adjust); + } else { + cairo_move_to(cr, xcenter + adjust, ybottom); + cairo_line_to(cr, xcenter + adjust, ycenter + radius); + } + cairo_stroke(cr); + + cairo_arc(cr, + (v == 1 || v == 2) ? xcenter - radius + 2 * adjust + : xcenter + radius, + (v & 2) ? ycenter - radius + 2 * adjust + : ycenter + radius, + radius - adjust, + (v + 2) * M_PI / 2.0, (v + 3) * M_PI / 2.0); + cairo_stroke(cr); + + if (v == 1 || v == 2) { + cairo_move_to(cr, xcenter - radius + 2 * adjust, ycenter + adjust); + cairo_line_to(cr, x, ycenter + adjust); + } else { + cairo_move_to(cr, xcenter + radius, ycenter + adjust); + cairo_line_to(cr, xright, ycenter + adjust); + } + + cairo_stroke(cr); + break; + } + + case 0x2571: /* box drawings light diagonal upper right to lower left */ + case 0x2572: /* box drawings light diagonal upper left to lower right */ + case 0x2573: /* box drawings light diagonal cross */ + { + // These characters draw outside their cell, so we need to + // enlarge the drawing surface. + auto const dx = (light_line_width + 1) / 2; +#if VTE_GTK == 4 + xpad = dx; + ypad = 0; + cairo_destroy(cr); + cr = begin_cairo(x, y, width, height, xpad, ypad, scale_factor); +#endif + cairo_rectangle(cr, x - dx, y, width + 2 * dx, height); + cairo_clip(cr); + cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE); + cairo_set_line_width(cr, light_line_width); + if (c != 0x2571) { + cairo_move_to(cr, x, y); + cairo_line_to(cr, xright, ybottom); + cairo_stroke(cr); + } + if (c != 0x2572) { + cairo_move_to(cr, xright, y); + cairo_line_to(cr, x, ybottom); + cairo_stroke(cr); + } + break; + } + + case 0x25e2: /* black lower right triangle */ + { + static int8_t const coords[] = { 0, 1, 1, 0, 1, 1, -1 }; + polygon(cr, x, y, width, height, 1, 1, coords); + break; + } + + case 0x25e3: /* black lower left triangle */ + { + static int8_t const coords[] = { 0, 0, 1, 1, 0, 1, -1 }; + polygon(cr, x, y, width, height, 1, 1, coords); + break; + } + + case 0x25e4: /* black upper left triangle */ + { + static int8_t const coords[] = { 0, 0, 1, 0, 0, 1, -1 }; + polygon(cr, x, y, width, height, 1, 1, coords); + break; + } + + case 0x25e5: /* black upper right triangle */ + { + static int8_t const coords[] = { 0, 0, 1, 0, 1, 1, -1 }; + polygon(cr, x, y, width, height, 1, 1, coords); + break; + } + + case 0x1fb00: + case 0x1fb01: + case 0x1fb02: + case 0x1fb03: + case 0x1fb04: + case 0x1fb05: + case 0x1fb06: + case 0x1fb07: + case 0x1fb08: + case 0x1fb09: + case 0x1fb0a: + case 0x1fb0b: + case 0x1fb0c: + case 0x1fb0d: + case 0x1fb0e: + case 0x1fb0f: + case 0x1fb10: + case 0x1fb11: + case 0x1fb12: + case 0x1fb13: + case 0x1fb14: + case 0x1fb15: + case 0x1fb16: + case 0x1fb17: + case 0x1fb18: + case 0x1fb19: + case 0x1fb1a: + case 0x1fb1b: + case 0x1fb1c: + case 0x1fb1d: + case 0x1fb1e: + case 0x1fb1f: + case 0x1fb20: + case 0x1fb21: + case 0x1fb22: + case 0x1fb23: + case 0x1fb24: + case 0x1fb25: + case 0x1fb26: + case 0x1fb27: + case 0x1fb28: + case 0x1fb29: + case 0x1fb2a: + case 0x1fb2b: + case 0x1fb2c: + case 0x1fb2d: + case 0x1fb2e: + case 0x1fb2f: + case 0x1fb30: + case 0x1fb31: + case 0x1fb32: + case 0x1fb33: + case 0x1fb34: + case 0x1fb35: + case 0x1fb36: + case 0x1fb37: + case 0x1fb38: + case 0x1fb39: + case 0x1fb3a: + case 0x1fb3b: + { + guint32 bitmap = c - 0x1fb00 + 1; + if (bitmap >= 0x15) bitmap++; + if (bitmap >= 0x2a) bitmap++; + int xi, yi; + for (yi = 0; yi <= 2; yi++) { + for (xi = 0; xi <= 1; xi++) { + if (bitmap & 1) { + rectangle(cr, x, y, width, height, 2, 3, xi, yi, xi + 1, yi + 1); + } + bitmap >>= 1; + } + } + break; + } + + case 0x1fb3c: + case 0x1fb3d: + case 0x1fb3e: + case 0x1fb3f: + case 0x1fb40: + case 0x1fb41: + case 0x1fb42: + case 0x1fb43: + case 0x1fb44: + case 0x1fb45: + case 0x1fb46: + case 0x1fb47: + case 0x1fb48: + case 0x1fb49: + case 0x1fb4a: + case 0x1fb4b: + case 0x1fb4c: + case 0x1fb4d: + case 0x1fb4e: + case 0x1fb4f: + case 0x1fb50: + case 0x1fb51: + case 0x1fb52: + case 0x1fb53: + case 0x1fb54: + case 0x1fb55: + case 0x1fb56: + case 0x1fb57: + case 0x1fb58: + case 0x1fb59: + case 0x1fb5a: + case 0x1fb5b: + case 0x1fb5c: + case 0x1fb5d: + case 0x1fb5e: + case 0x1fb5f: + case 0x1fb60: + case 0x1fb61: + case 0x1fb62: + case 0x1fb63: + case 0x1fb64: + case 0x1fb65: + case 0x1fb66: + case 0x1fb67: + { + auto const v = c - 0x1fb3c; + static int8_t const coords[46][11] = { + { 0, 2, 1, 3, 0, 3, -1 }, /* 3c */ + { 0, 2, 2, 3, 0, 3, -1 }, /* 3d */ + { 0, 1, 1, 3, 0, 3, -1 }, /* 3e */ + { 0, 1, 2, 3, 0, 3, -1 }, /* 3f */ + { 0, 0, 1, 3, 0, 3, -1 }, /* 40 */ + { 0, 1, 1, 0, 2, 0, 2, 3, 0, 3, -1 }, /* 41 */ + { 0, 1, 2, 0, 2, 3, 0, 3, -1 }, /* 42 */ + { 0, 2, 1, 0, 2, 0, 2, 3, 0, 3, -1 }, /* 43 */ + { 0, 2, 2, 0, 2, 3, 0, 3, -1 }, /* 44 */ + { 0, 3, 1, 0, 2, 0, 2, 3, -1 }, /* 45 */ + { 0, 2, 2, 1, 2, 3, 0, 3, -1 }, /* 46 */ + { 1, 3, 2, 2, 2, 3, -1 }, /* 47 */ + { 0, 3, 2, 2, 2, 3, -1 }, /* 48 */ + { 1, 3, 2, 1, 2, 3, -1 }, /* 49 */ + { 0, 3, 2, 1, 2, 3, -1 }, /* 4a */ + { 1, 3, 2, 0, 2, 3, -1 }, /* 4b */ + { 0, 0, 1, 0, 2, 1, 2, 3, 0, 3, -1 }, /* 4c */ + { 0, 0, 2, 1, 2, 3, 0, 3, -1 }, /* 4d */ + { 0, 0, 1, 0, 2, 2, 2, 3, 0, 3, -1 }, /* 4e */ + { 0, 0, 2, 2, 2, 3, 0, 3, -1 }, /* 4f */ + { 0, 0, 1, 0, 2, 3, 0, 3, -1 }, /* 50 */ + { 0, 1, 2, 2, 2, 3, 0, 3, -1 }, /* 51 */ + { 0, 0, 2, 0, 2, 3, 1, 3, 0, 2, -1 }, /* 52 */ + { 0, 0, 2, 0, 2, 3, 0, 2, -1 }, /* 53 */ + { 0, 0, 2, 0, 2, 3, 1, 3, 0, 1, -1 }, /* 54 */ + { 0, 0, 2, 0, 2, 3, 0, 1, -1 }, /* 55 */ + { 0, 0, 2, 0, 2, 3, 1, 3, -1 }, /* 56 */ + { 0, 0, 1, 0, 0, 1, -1 }, /* 57 */ + { 0, 0, 2, 0, 0, 1, -1 }, /* 58 */ + { 0, 0, 1, 0, 0, 2, -1 }, /* 59 */ + { 0, 0, 2, 0, 0, 2, -1 }, /* 5a */ + { 0, 0, 1, 0, 0, 3, -1 }, /* 5b */ + { 0, 0, 2, 0, 2, 1, 0, 2, -1 }, /* 5c */ + { 0, 0, 2, 0, 2, 2, 1, 3, 0, 3, -1 }, /* 5d */ + { 0, 0, 2, 0, 2, 2, 0, 3, -1 }, /* 5e */ + { 0, 0, 2, 0, 2, 1, 1, 3, 0, 3, -1 }, /* 5f */ + { 0, 0, 2, 0, 2, 1, 0, 3, -1 }, /* 60 */ + { 0, 0, 2, 0, 1, 3, 0, 3, -1 }, /* 61 */ + { 1, 0, 2, 0, 2, 1, -1 }, /* 62 */ + { 0, 0, 2, 0, 2, 1, -1 }, /* 63 */ + { 1, 0, 2, 0, 2, 2, -1 }, /* 64 */ + { 0, 0, 2, 0, 2, 2, -1 }, /* 65 */ + { 1, 0, 2, 0, 2, 3, -1 }, /* 66 */ + { 0, 0, 2, 0, 2, 2, 0, 1, -1 }, /* 67 */ + }; + polygon(cr, x, y, width, height, 2, 3, coords[v]); + break; + } + + case 0x1fb68: + case 0x1fb69: + case 0x1fb6a: + case 0x1fb6b: + case 0x1fb6c: + case 0x1fb6d: + case 0x1fb6e: + case 0x1fb6f: + { + auto const v = c - 0x1fb68; + static int8_t const coords[8][11] = { + { 0, 0, 2, 0, 2, 2, 0, 2, 1, 1, -1 }, /* 68 */ + { 0, 0, 1, 1, 2, 0, 2, 2, 0, 2, -1 }, /* 69 */ + { 0, 0, 2, 0, 1, 1, 2, 2, 0, 2, -1 }, /* 6a */ + { 0, 0, 2, 0, 2, 2, 1, 1, 0, 2, -1 }, /* 6b */ + { 0, 0, 1, 1, 0, 2, -1 }, /* 6c */ + { 0, 0, 2, 0, 1, 1, -1 }, /* 6d */ + { 1, 1, 2, 0, 2, 2, -1 }, /* 6e */ + { 1, 1, 2, 2, 0, 2, -1 }, /* 6f */ + }; + polygon(cr, x, y, width, height, 2, 2, coords[v]); + break; + } + + case 0x1fb95: + pattern(cr, create_checkerboard_pattern(), x, y, width, height); + break; + + case 0x1fb96: + pattern(cr, create_checkerboard_reverse_pattern(), x, y, width, height); + break; + + + case 0x1fb98: + pattern(cr, create_hatching_pattern_lr(), x, y, width, height); + break; + + case 0x1fb99: + pattern(cr, create_hatching_pattern_rl(), x, y, width, height); + break; + + case 0x1fb9a: + { + static int8_t const coords[] = { 0, 0, 1, 0, 0, 1, 1, 1, -1 }; + polygon(cr, x, y, width, height, 1, 1, coords); + break; + } + + case 0x1fb9b: + { + static int8_t coords[] = { 0, 0, 1, 1, 1, 0, 0, 1, -1 }; + polygon(cr, x, y, width, height, 1, 1, coords); + break; + } + + case 0x1fb9c: + { + static int8_t const coords[] = { 0, 0, 1, 0, 0, 1, -1 }; + cairo_set_source_rgba (cr, + fg->red / 65535., + fg->green / 65535., + fg->blue / 65535., + 0.5); + polygon(cr, x, y, width, height, 1, 1, coords); + break; + } + + case 0x1fb9d: + { + static int8_t const coords[] = { 0, 0, 1, 0, 1, 1, -1 }; + cairo_set_source_rgba (cr, + fg->red / 65535., + fg->green / 65535., + fg->blue / 65535., + 0.5); + polygon(cr, x, y, width, height, 1, 1, coords); + break; + } + + case 0x1fb9e: + { + static int8_t const coords[] = { 0, 1, 1, 0, 1, 1, -1 }; + cairo_set_source_rgba (cr, + fg->red / 65535., + fg->green / 65535., + fg->blue / 65535., + 0.5); + polygon(cr, x, y, width, height, 1, 1, coords); + break; + } + + case 0x1fb9f: + { + static int8_t const coords[] = { 0, 0, 1, 1, 0, 1, -1 }; + cairo_set_source_rgba (cr, + fg->red / 65535., + fg->green / 65535., + fg->blue / 65535., + 0.5); + polygon(cr, x, y, width, height, 1, 1, coords); + break; + } + + case 0x1fba0: + case 0x1fba1: + case 0x1fba2: + case 0x1fba3: + case 0x1fba4: + case 0x1fba5: + case 0x1fba6: + case 0x1fba7: + case 0x1fba8: + case 0x1fba9: + case 0x1fbaa: + case 0x1fbab: + case 0x1fbac: + case 0x1fbad: + case 0x1fbae: + { + auto const v = c - 0x1fba0; + static uint8_t const map[15] = { 0b0001, 0b0010, 0b0100, 0b1000, 0b0101, 0b1010, 0b1100, 0b0011, + 0b1001, 0b0110, 0b1110, 0b1101, 0b1011, 0b0111, 0b1111 }; + cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); + cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); + cairo_set_line_width(cr, light_line_width); + adjust = (light_line_width & 1) ? .5 : 0.; + double const dx = light_line_width / 2.; + double const dy = light_line_width / 2.; + if (map[v] & 1) { + /* upper left */ + cairo_move_to(cr, x, ycenter + adjust); + cairo_line_to(cr, x + dx, ycenter + adjust); + cairo_line_to(cr, xcenter + adjust, y + dy); + cairo_line_to(cr, xcenter + adjust, y); + cairo_stroke(cr); + } + if (map[v] & 2) { + /* upper right */ + cairo_move_to(cr, xright, ycenter + adjust); + cairo_line_to(cr, xright - dx, ycenter + adjust); + cairo_line_to(cr, xcenter + adjust, y + dy); + cairo_line_to(cr, xcenter + adjust, y); + cairo_stroke(cr); + } + if (map[v] & 4) { + /* lower left */ + cairo_move_to(cr, x, ycenter + adjust); + cairo_line_to(cr, x + dx, ycenter + adjust); + cairo_line_to(cr, xcenter + adjust, ybottom - dy); + cairo_line_to(cr, xcenter + adjust, ybottom); + cairo_stroke(cr); + } + if (map[v] & 8) { + /* lower right */ + cairo_move_to(cr, xright, ycenter + adjust); + cairo_line_to(cr, xright - dx, ycenter + adjust); + cairo_line_to(cr, xcenter + adjust, ybottom - dy); + cairo_line_to(cr, xcenter + adjust, ybottom); + cairo_stroke(cr); + } + break; + } + + default: + g_assert_not_reached(); + } + +#if VTE_GTK == 3 + context.end_cairo(cr); +#elif VTE_GTK == 4 + auto mf = g_new0 (CachedMinifont, 1); + mf->link.data = mf; + mf->c = real_c; + mf->width = width; + mf->height = height; + mf->scale_factor = scale_factor; + mf->x_off = x_off; + mf->y_off = y_off; + mf->xpad = xpad; + mf->ypad = ypad; +#if VTE_GTK == 3 + mf->surface = cairo_surface_reference(cairo_get_target(cr)); +#elif VTE_GTK == 4 + mf->texture = surface_to_texture(cairo_get_target(cr)); +#endif + cached_minifont_add(mf); + + cairo_destroy(cr); + + cached_minifont_draw(mf, context, x, y, width, height, fg); +#endif +} + +} // namespace vte::view diff --git a/src/minifont.hh b/src/minifont.hh new file mode 100644 index 0000000..b2aff53 --- /dev/null +++ b/src/minifont.hh @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2003,2008 Red Hat, Inc. + * Copyright © 2019, 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include + +#include "fwd.hh" +#include "vtetypes.hh" +#include "vteunistr.h" + +#include "cairo-glue.hh" + +namespace vte { +namespace view { + +class Minifont { +public: + + /* Check if a unicode character is actually a graphic character we draw + * ourselves to handle cases where fonts don't have glyphs for them. + */ + static inline constexpr bool + unistr_is_local_graphic(vteunistr const c) noexcept + { + /* Box Drawing & Block Elements */ + return ((c >= 0x2500 && c <= 0x259f) || + (c >= 0x25e2 && c <= 0x25e5) || + (c >= 0x1fb00 && c <= 0x1fbaf)); + } + + /* Draw the graphic representation of a line-drawing or special graphics + * character. + */ + void draw_graphic(DrawingContext const& context, + vteunistr c, + vte::color::rgb const* fg, + int x, + int y, + int font_width, + int columns, + int font_height, + int scale_factor); + +private: + cairo_t* begin_cairo(int x, + int y, + int width, + int height, + int xpad, + int ypad, + int scale_factor); + void rectangle(cairo_t *cr, + double x, + double y, + double w, + double h, + int xdenom, + int ydenom, + int xb1, + int yb1, + int xb2, + int yb2) const; + void rectangle(DrawingContext const& context, + vte::color::rgb const* fg, + double alpha, + double x, + double y, + double w, + double h, + int xdenom, + int ydenom, + int xb1, + int yb1, + int xb2, + int yb2) const; +#if VTE_GTK == 4 + GdkTexture *surface_to_texture(cairo_surface_t *surface) const; +#endif +}; // class Minifont + +} // namespace view +} // namespace vte diff --git a/src/missing.cc b/src/missing.cc new file mode 100644 index 0000000..c769fb4 --- /dev/null +++ b/src/missing.cc @@ -0,0 +1,274 @@ +/* + * Copyright © 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include "config.h" + +#if __has_include() +#include +#define HAVE_SYS_RESOURCE_H +#endif + +#include +#include + +#ifdef __linux__ +#include /* for syscall and SYS_getdents64 */ +#endif + +#ifdef __APPLE__ +#include +#include +#endif + +#include "missing.hh" + +/* BEGIN copied from glib + * + * Code for fdwalk copied from glib/glib/gspawn.c, there under LGPL2.1+, + * and used here under LGPL3+. + * + * Copyright 2000 Red Hat, Inc. + */ + +#if !HAVE_FDWALK + +#ifdef __linux__ + +struct linux_dirent64 +{ + guint64 d_ino; /* 64-bit inode number */ + guint64 d_off; /* 64-bit offset to next structure */ + unsigned short d_reclen; /* Size of this dirent */ + unsigned char d_type; /* File type */ + char d_name[]; /* Filename (null-terminated) */ +}; + +/* This function is called between fork and execve/_exit and so must be + * async-signal-safe; see man:signal-safety(7). + */ +static int +filename_to_fd (const char *p) +{ + char c; + int fd = 0; + const int cutoff = G_MAXINT / 10; + const int cutlim = G_MAXINT % 10; + + if (*p == '\0') + return -1; + + while ((c = *p++) != '\0') + { + if (c < '0' || c > '9') + return -1; + c -= '0'; + + /* Check for overflow. */ + if (fd > cutoff || (fd == cutoff && c > cutlim)) + return -1; + + fd = fd * 10 + c; + } + + return fd; +} + +#endif /* __linux__ */ + +/* This function is called between fork and execve/_exit and so must be + * async-signal-safe; see man:signal-safety(7). + */ +static rlim_t +getrlimit_NOFILE_max(void) +{ +#ifdef HAVE_SYS_RESOURCE_H +#ifdef __linux__ +{ + struct rlimit rlim; + + if (prlimit(0 /* this PID */, RLIMIT_NOFILE, nullptr, &rlim) == 0) + return rlim.rlim_max; + + return RLIM_INFINITY; +} +#endif /* __linux__ */ + +#ifdef __GLIBC__ +{ + struct rlimit rlim; + + /* Use getrlimit() function provided by the system if it is known to be + * async-signal safe. + * + * According to the glibc manual, getrlimit is AS-safe. + */ + if (getrlimit(RLIMIT_NOFILE, &rlim) == 0) + return rlim.rlim_max; +} + + /* fallback */ +#endif /* __GLIBC__ */ + +#endif /* HAVE_SYS_RESOURCE_H */ + +#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) + /* Use sysconf() function provided by the system if it is known to be + * async-signal safe. + */ + auto const r = sysconf(_SC_OPEN_MAX); + if (r != -1) + return r; + + /* fallback */ +#endif + + /* couldn't determine, so potentially infinite */ + return RLIM_INFINITY; +} + +#if !HAVE_CLOSE_RANGE + +int +close_range(unsigned int first_fd, + unsigned int last_fd, + unsigned int flags) +{ +#if defined(__linux__) && defined(SYS_close_range) + return syscall(SYS_close_range, + first_fd, + last_fd == unsigned(-1) ? ~0u : last_fd, + flags); +#else + errno = ENOSYS; + return -1; +#endif +} + +#endif /* !HAVE_CLOSE_RANGE */ + +/* This function is called between fork and execve/_exit and so must be + * async-signal-safe; see man:signal-safety(7). + */ +int +fdwalk(int (*cb)(void *data, int fd), + void *data) +{ + /* Fallback implementation of fdwalk. It should be async-signal safe, but it + * may be slow on non-Linux operating systems, especially on systems allowing + * very high number of open file descriptors. + */ + int fd; + int res = 0; + +#ifdef __linux__ + + /* Fall back to iterating over /proc/self/fd. + * Avoid use of opendir/closedir since these are not async-signal-safe. + */ + int dir_fd = open ("/proc/self/fd", O_RDONLY | O_DIRECTORY | O_CLOEXEC); + if (dir_fd >= 0) + { + char buf[4096]; + int pos, nread; + struct linux_dirent64 *de; + + while ((nread = syscall (SYS_getdents64, dir_fd, buf, sizeof(buf))) > 0) + { + for (pos = 0; pos < nread; pos += de->d_reclen) + { + de = reinterpret_cast(buf + pos); + + fd = filename_to_fd (de->d_name); + if (fd < 0 || fd == dir_fd) + continue; + + if ((res = cb (data, fd)) != 0) + break; + } + } + + close (dir_fd); + return res; + } + + /* If /proc is not mounted or not accessible we fall back to the old + * rlimit trick */ + +#endif + + auto const open_max = getrlimit_NOFILE_max(); + if (open_max == RLIM_INFINITY || open_max > G_MAXINT) { + /* We cannot close infinitely many FDs, but we also must not + * leak any FDs. Return an error. + */ + errno = ENFILE; + return -1; + } + +#if defined(__APPLE__) + /* proc_pidinfo isn't documented as async-signal-safe but looking at the implementation + * in the darwin tree here: + * + * https://opensource.apple.com/source/Libc/Libc-498/darwin/libproc.c.auto.html + * + * It's just a thin wrapper around a syscall, so it's probably okay. + */ + { + char buffer[open_max * PROC_PIDLISTFD_SIZE]; + ssize_t buffer_size; + + buffer_size = proc_pidinfo(getpid(), PROC_PIDLISTFDS, 0, buffer, sizeof(buffer)); + + if (buffer_size > 0 && + sizeof(buffer) >= (size_t)buffer_size && + (buffer_size % PROC_PIDLISTFD_SIZE) == 0) + { + const struct proc_fdinfo *fd_info = (const struct proc_fdinfo *)buffer; + size_t number_of_fds = (size_t)buffer_size / PROC_PIDLISTFD_SIZE; + + for (size_t i = 0; i < number_of_fds; i++) + if ((res = cb(data, fd_info[i].proc_fd)) != 0) + break; + + return res; + } + } +#endif + + for (fd = 0; fd < int(open_max); fd++) + if ((res = cb (data, fd)) != 0) + break; + + return res; +} +#endif /* !HAVE_FDWALK */ + +#if !HAVE_STRCHRNUL +/* Copied from glib */ +char* +strchrnul(char const* s, + int c) +{ + char *p = (char *) s; + while (*p && (*p != c)) + ++p; + + return p; +} +#endif /* !HAVE_STRCHRNUL */ + +/* END copied from glib */ diff --git a/src/missing.hh b/src/missing.hh new file mode 100644 index 0000000..9dd4c4b --- /dev/null +++ b/src/missing.hh @@ -0,0 +1,154 @@ +/* + * Copyright © 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +/* NOTE: This file must be included *after all other includes*. */ + +#include +#include +#include + +#ifdef __linux__ + +#include +#include + +#if __has_include() +#include +#endif + +#if defined(__mips__) || defined(__mips64__) +#include +#endif + +#endif + +/* NSIG isn't in POSIX, so if it doesn't exist use this here. See bug #759196 */ +#ifndef NSIG +#define NSIG (8 * sizeof(sigset_t)) +#endif + +#if !HAVE_FDWALK +int fdwalk(int (*cb)(void* data, int fd), + void* data); +#endif + +#if !HAVE_STRCHRNUL +char* strchrnul(char const* s, + int c); +#endif + +#if !HAVE_CLOSE_RANGE +int close_range(unsigned int first, + unsigned int last, + unsigned int flags); +#endif + +#ifdef __linux__ + +/* BEGIN + * The following is copied from systemd/src/basic/missing_syscall_def.h (LGPL2.1+) + */ +#ifndef __NR_close_range +# if defined(__aarch64__) +# define __NR_close_range 436 +# elif defined(__alpha__) +# define __NR_close_range 546 +# elif defined(__arc__) || defined(__tilegx__) +# define __NR_close_range 436 +# elif defined(__arm__) +# define __NR_close_range 436 +# elif defined(__i386__) +# define __NR_close_range 436 +# elif defined(__ia64__) +# define __NR_close_range 1460 +# elif defined(__m68k__) +# define __NR_close_range 436 +# elif defined(_MIPS_SIM) +# if _MIPS_SIM == _MIPS_SIM_ABI32 +# define __NR_close_range 4436 +# elif _MIPS_SIM == _MIPS_SIM_NABI32 +# define __NR_close_range 6436 +# elif _MIPS_SIM == _MIPS_SIM_ABI64 +# define __NR_close_range 5436 +# else +# error "Unknown MIPS ABI" +# endif +# elif defined(__powerpc__) +# define __NR_close_range 436 +# elif defined(__s390__) +# define __NR_close_range 436 +# elif defined(__sparc__) +# define __NR_close_range 436 +# elif defined(__x86_64__) +# if defined(__ILP32__) +# define __NR_close_range (436 | /* __X32_SYSCALL_BIT */ 0x40000000) +# else +# define __NR_close_range 436 +# endif +# else +# warning "close_range() syscall number is unknown for your architecture" +# endif +#endif /* !__NR_close_range */ + +/* The following is copied from systemd/src/basic/missing_fcntl.h (LGPL2.1+) */ + +/* The precise definition of __O_TMPFILE is arch specific; use the + * values defined by the kernel (note: some are hexa, some are octal, + * duplicated as-is from the kernel definitions): + * - alpha, parisc, sparc: each has a specific value; + * - others: they use the "generic" value. + */ + +#ifndef __O_TMPFILE +#if defined(__alpha__) +#define __O_TMPFILE 0100000000 +#elif defined(__parisc__) || defined(__hppa__) +#define __O_TMPFILE 0400000000 +#elif defined(__sparc__) || defined(__sparc64__) +#define __O_TMPFILE 0x2000000 +#else +#define __O_TMPFILE 020000000 +#endif +#endif + +/* a horrid kludge trying to make sure that this will fail on old kernels */ +#ifndef O_TMPFILE +#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY) +#endif + +/* END copied from systemd */ + +#if !defined(SYS_close_range) && defined(__NR_close_range) +#define SYS_close_range __NR_close_range +#endif + +#ifndef CLOSE_RANGE_CLOEXEC +#define CLOSE_RANGE_CLOEXEC (1u << 2) +#endif + +#if !defined(TIOCGPTPEER) +/* See linux commit 54ebbfb1603415d9953c150535850d30609ef077 */ +#if defined(__sparc__) +#define TIOCGPTPEER _IOR('t', 137, int) +#else +#define TIOCGPTPEER _IOR('T', 0x41, int) +#endif +#endif /* !TIOCGPTPEER */ + +#endif /* __linux__ */ diff --git a/src/modes-ecma.hh b/src/modes-ecma.hh deleted file mode 100644 index f0d318f..0000000 --- a/src/modes-ecma.hh +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright © 2018 Christian Persch - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#if !defined(MODE) || !defined(MODE_FIXED) -#error "Must define MODE and MODE_FIXED before including this file" -#endif - -/* - * Modes for SM_ECMA/RM_ECMA. - * - * Most of these are not implemented in VTE. - * - * References: ECMA-48 § 7 - * WY370 - */ - -/* - * IRM - insertion replacement mode - * - * Default: reset - * - * References: ECMA-48 § 7.2.10 - * VT525 - */ -MODE(IRM, 4) - -/* - * BDSM - Bi-Directional Support Mode - * - * Reset state is explicit mode, set state is implicit mode - * - * References: ECMA-48 - * ECMA TR/53 - * Terminal-wg/bidi - * - * Default in ECMA: reset - * Default in Terminal-wg/bidi and VTE: set - */ -MODE(BDSM, 8) - -/* Unsupported */ - -MODE_FIXED(GATM, 1, ALWAYS_RESET) -MODE_FIXED(KAM, 2, ALWAYS_RESET) -MODE_FIXED(CRM, 3, ALWAYS_RESET) -MODE_FIXED(SRTM, 5, ALWAYS_RESET) -MODE_FIXED(ERM, 6, ALWAYS_RESET) -MODE_FIXED(VEM, 7, ALWAYS_RESET) -/* DCSM defaults to RESET in ECMA, forced to SET in Terminal-wg/bidi */ -MODE_FIXED(DCSM, 9, ALWAYS_SET) -MODE_FIXED(HEM, 10, ALWAYS_RESET) -MODE_FIXED(PUM, 11, ALWAYS_RESET) /* ECMA-48 § F.4.1 Deprecated */ - -/* - * SRM - local echo send/receive mode - * If reset, characters entered by the keyboard are shown on the - * screen as well as being sent to the host; if set, the - * keyboard input is only sent to the host. - * - * Default: set - * - * References: ECMA-48 § 7.2.15 - * VT525 - * - * Removed in VTE 0.60: issue #69 - */ -MODE_FIXED(SRM, 12, ALWAYS_SET) - -MODE_FIXED(FEAM, 13, ALWAYS_RESET) -MODE_FIXED(FETM, 14, ALWAYS_RESET) -MODE_FIXED(MATM, 15, ALWAYS_RESET) -MODE_FIXED(TTM, 16, ALWAYS_RESET) -MODE_FIXED(SATM, 17, ALWAYS_RESET) -MODE_FIXED(TSM, 18, ALWAYS_RESET) -MODE_FIXED(EBM, 19, ALWAYS_RESET) /* ECMA-48 § F.5.1 Removed */ - -/* - * LNM - line feed/newline mode - * If set, the cursor moves to the first column on LF, FF, VT, - * and a Return key press sends CRLF. - * If reset, the cursor column is unchanged by LF, FF, VT, - * and a Return key press sends CR only. - * - * Default: reset - * - * References: ECMA-48 § F.5.2 Removed! - * VT525 - */ -MODE_FIXED(LNM, 20, ALWAYS_RESET) - -MODE_FIXED(GRCM, 21, ALWAYS_SET) -MODE_FIXED(ZDM, 22, ALWAYS_RESET) /* ECMA-48 § F.4.2 Deprecated */ - -/* - * WYDSCM - display disable mode - * If set, blanks the screen; if reset, shows the data. - * - * Default: reset - * - * References: WY370 - */ -MODE_FIXED(WYDSCM, 30, ALWAYS_RESET) - -/* - * WHYSTLINM - status line display mode - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYSTLINM, 31, ALWAYS_RESET) - -/* - * WYCRTSAVM - screen saver mode - * Like DECCRTSM. - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYCRTSAVM, 32, ALWAYS_RESET) - -/* - * WYSTCURM - steady cursor mode - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYSTCURM, 33, ALWAYS_RESET) - -/* - * WYULCURM - underline cursor mode - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYULCURM, 34, ALWAYS_RESET) - -/* - * WYCLRM - width change clear disable mode - * If set, the screen is not cleared when the column mode changes - * by DECCOLM or WY161. - * Note that this does not affect DECSCPP. - * This is the same as DECNCSM mode. - * - * Default: set (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYCLRM, 35, ALWAYS_SET) - -/* - * WYDELKM - delete key definition - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYDELKM, 36, ALWAYS_RESET) /* Same as DECBKM */ - -/* - * WYGATM - send characters mode - * If set, sends all characters; if reset, only erasable characters. - * Like GATM above. - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYGATM, 37, ALWAYS_RESET) - -/* - * WYTEXM - send full screen/scrolling region to printer - * Like DECPEX mode. - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYTEXM, 38, ALWAYS_RESET) - -/* - * WYEXTDM - extra data line - * If set, the last line of the screen is used as data line and not - * a status line; if reset, the last line of the screen is used - * as a status line. - * - * Default: reset - * - * References: WY370 - */ -MODE_FIXED(WYEXTDM, 40, ALWAYS_SET) - -/* - * WYASCII - WY350 personality mode - * If set, switches to WY350 personality. - * - * Default: reset (set-up) - * - * References: WY370 - */ -MODE_FIXED(WYASCII, 42, ALWAYS_SET) diff --git a/src/modes-private.hh b/src/modes-private.hh deleted file mode 100644 index 2dab1f8..0000000 --- a/src/modes-private.hh +++ /dev/null @@ -1,868 +0,0 @@ -/* - * Copyright © 2018 Christian Persch - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#if !defined(MODE) || !defined(MODE_FIXED) -#error "Must define MODE and MODE_FIXED before including this file" -#endif - -/* - * Modes for SM_DEC/RM_DEC. - * - * Most of these are not implemented in VTE. - * - * References: VT525 - * XTERM - * KITTY - * MINTTY - * MLTERM - * RLogin - * URXVT - * WY370 - */ - -/* Supported modes: */ - -/* DEC */ - -/* - * DECCKM - cursor keys mode - * - * Controls whether the cursor keys send cursor sequences, or application - * sequences. - * - * Default: reset - * - * References: VT525 - */ -MODE(DEC_APPLICATION_CURSOR_KEYS, 1) - -/* - * DECCOLM: 132 column mode - * - * Sets page width to 132 (set) or 80 (reset) columns. - * - * Changing this mode resets the top, bottom, left, right margins; - * clears the screen (unless DECNCSM is set); resets DECLRMM; and clears - * the status line if host-writable. - * - * Default: reset - * - * References: VT525 - */ -MODE(DEC_132_COLUMN, 3) - -/* - * DECSCNM - screen mode - * If set, displays reverse; if reset, normal. - * - * Default: reset - * - * References: VT525 - */ -MODE(DEC_REVERSE_IMAGE, 5) - -/* - * DECOM - origin mode - * If set, the cursor is restricted to within the page margins. - * - * On terminal reset, DECOM is reset. - * - * Default: reset - * - * References: VT525 - */ -MODE(DEC_ORIGIN, 6) - -/* - * DECAWM - auto wrap mode - * - * Controls whether text wraps to the next line when the - * cursor reaches the right margin. - * - * Default: reset - * - * References: VT525 - */ -MODE(DEC_AUTOWRAP, 7) - -/* - * DECTCEM - text cursor enable - * If set, the text cursor is visible; if reset, invisible. - * - * Default: set - * - * References: VT525 - */ -MODE(DEC_TEXT_CURSOR, 25) - -/* - * DECNKM - numeric/application keypad mode - * Controls whether the numeric keypad sends application (set) - * or keypad (reset) sequences. - * - * Default: reset - * - * References: VT525 - */ -MODE(DEC_APPLICATION_KEYPAD, 66) - -/* Terminal-wg */ - -/* - * Whether to swap the Left and Right arrow keys if the cursor - * stands over an RTL paragraph. - * - * Reference: Terminal-wg/bidi - */ -MODE(VTE_BIDI_SWAP_ARROW_KEYS, 1243) - -/* - * Whether box drawing characters in the U+2500..U+257F range - * are to be mirrored in RTL context. - * - * Reference: Terminal-wg/bidi - */ -MODE(VTE_BIDI_BOX_MIRROR, 2500) - -/* - * Whether BiDi paragraph direction is autodetected. - * - * Reference: Terminal-wg/bidi - */ -MODE(VTE_BIDI_AUTO, 2501) - -/* XTERM */ - -MODE(XTERM_MOUSE_X10, 9) -MODE(XTERM_DECCOLM, 40) -MODE(XTERM_ALTBUF, 47) -MODE(XTERM_MOUSE_VT220, 1000) -MODE(XTERM_MOUSE_VT220_HIGHLIGHT, 1001) -MODE(XTERM_MOUSE_BUTTON_EVENT, 1002) -MODE(XTERM_MOUSE_ANY_EVENT, 1003) -MODE(XTERM_FOCUS, 1004) -MODE(XTERM_MOUSE_EXT_SGR, 1006) -MODE(XTERM_ALTBUF_SCROLL, 1007) -MODE(XTERM_META_SENDS_ESCAPE, 1036) -MODE(XTERM_OPT_ALTBUF, 1047) -MODE(XTERM_SAVE_CURSOR, 1048) -MODE(XTERM_OPT_ALTBUF_SAVE_CURSOR, 1049) -MODE(XTERM_READLINE_BRACKETED_PASTE, 2004) - -/* Not supported modes: */ - -/* DEC */ - -/* - * DECANM - ansi-mode - * Resetting this puts the terminal into VT52 compatibility mode. - * Control sequences overlap with regular sequences so we have to - * detect them early before dispatching them. - * To return to ECMA-48 mode, use ESC < [1/11 3/12]. - * - * Default: set - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECANM, 2, ALWAYS_SET) - -/* - * DECSCLM - scrolling mode - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECSCLM, 4, ALWAYS_RESET) - -/* - * DECARM - autorepeat mode - * Controls whether keys auytomatically repeat while held pressed - * for more than 0.5s. - * Note that /some/ keys do not repeat regardless of this setting. - * - * Default: set - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECARM, 8, ALWAYS_SET) - -MODE_FIXED(DECLTM, 11, ALWAYS_RESET) -MODE_FIXED(DECEKEM, 16, ALWAYS_RESET) - -/* - * DECPFF - print FF mode - * Controls whether the terminal terminates a print command by - * sending a FF to the printer. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECCPFF, 18, ALWAYS_RESET) - -/* - * DECPEX - print extent mode - * If set, print page prints only the scrolling region; - * if reset, the complete page. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECPEX, 19, ALWAYS_RESET) - -/* - * DECLRM - RTL mode - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECRLM, 34, ALWAYS_RESET) - -/* - * DECHEBM - hebrew/north-american keyboard mapping mode - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECHEBM, 35, ALWAYS_RESET) - -/* - * DECHEM - hebrew encoding mode - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECHEM, 36, ALWAYS_RESET) - -/* - * DECNRCM - NRCS mode - * Operates in 7-bit (set) or 8-bit (reset) mode. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECNRCM, 42, ALWAYS_RESET) - -MODE_FIXED(DECGEPM, 43, ALWAYS_RESET) /* from VT330 */ -/* MODE_FIXED(DECGPCM, 44, ALWAYS_RESET) * from VT330, conflicts with XTERM_MARGIN_BELL */ -/* MODE_FIXED(DECGPCS, 45, ALWAYS_RESET) * from VT330, conflicts with XTERM_REVERSE_WRAP */ -/* MODE_FIXED(DECGPBM, 46, ALWAYS_RESET) * from VT330, conflicts with XTERM_LOGGING */ -/* MODE_FIXED(DECGRPM, 47, ALWAYS_RESET) * from VT330, conflicts with XTERM_ALTBUF */ -MODE_FIXED(DEC131TM, 53, ALWAYS_RESET) - -/* - * DECNAKB - greek/north-american keyboard mapping mode - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECNAKB, 57, ALWAYS_RESET) - -/* - * DECIPEM - enter/return to/from pro-printer emulation mode - * Switches the terminal to (set)/from (reset) the ibm pro - * printer protocol. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECIPEM, 58, ALWAYS_RESET) - -/* MODE_FIXED(DECKKDM, 59, ALWAYS_SET) * Kanji/Katakana Display Mode, from VT382-Kanji */ - -/* - * DECHCCM - horizontal cursor coupling mode - * Controls what happens when the cursor moves out of the left or - * right margins of the window. - * If set, the window pans to keep the cursor in view; if reset, - * the cursor disappears. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECHCCM, 60, ALWAYS_RESET) - -/* - * DECVCCM - vertical cursor coupling mode - * Controls what happens when the cursor moves out of the top or - * bottom of the window, When the height of the window is smaller - * than the page. - * If set, the window pans to keep the cursor in view; if reset, - * the cursor disappears. - * - * Default: set - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECVCCM, 61, ALWAYS_SET) - -/* - * DECPCCM - page cursor coupling mode - * - * Default: set - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECPCCM, 64, ALWAYS_SET) - -/* - * DECBKM - backarrow key mode - * WYDELKM - * - * If set, the Backspace key works as a backspace key - * sending the BS control; if reset, it works as a Delete - * key sending the DEL control. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECBKM, 67, ALWAYS_RESET) - -/* - * DECKBUM - typewriter/data rpocessing keys mode - * - * If set, the keyboard keys act as data processing keys; - * if reset, as typewriter keys. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECKBUM, 68, ALWAYS_RESET) - -/* - * DECLRMM - vertical split-screen mode - * Controls whether a DECSLRM is executed. - * On set, resets line attributes to single width and single height, - * and while set, the terminal ignores any changes to line attributes. - * - * Default: reset - * - * References: VT525 - * - * Needs to be implemented if DECSLRM is implemented, to resolve a - * conflict between DECSLRM and SCOSC. - */ -MODE_FIXED(DECLRMM, 69, ALWAYS_RESET) /* aka DECVSSM */ - -/* - * DECXRLM - transmit rate limit - * If set, limits the transmit rate; if reset, the rate is - * unlimited. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECXRLM, 73, ALWAYS_RESET) - -/* - * DECSDM - sixel display mode - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -/* MODE_FIXED(DECSDM, 80, ALWAYS_RESET) ! Conflicts with WY161 */ - -/* - * DECKPM - key position mode - * If set, the keyboard sends extended reports (DECEKBD) that include - * the key position and modifier state; if reset, it sends character codes. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECKPM, 81, ALWAYS_RESET) - -MODE_FIXED(DECTHAISCM, 90, ALWAYS_RESET) /* Thai Space Compensating Mode, from VT382-Thai */ - -/* - * DECNCSM - no clear screen on DECOLM - * If set, the screen is not cleared when the column mode changes - * by DECCOLM. - * Note that this does not affect DECSCPP. - * - * Default: set - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECNCSM, 95, ALWAYS_RESET) - -/* - * DECRLCM - RTL copy mode - * If set, copy/paste from RTL; if reset, from LTR. - * Only enabled when the keyboard language is set to hebrew. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECRLCM, 96, ALWAYS_RESET) - -/* - * DECCRTSM - CRT save mode - * When set, blanks the terminal after the inactivity timeout - * (set with DECCRTST). - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECRCRTSM, 97, ALWAYS_RESET) - -/* - * DECARSM - auto resize mode - * Sets whether changing page arrangements automatically - * changes the lines per screen. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECARSM, 98, ALWAYS_RESET) - -/* - * DECMCM - modem control mode - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECMCM, 99, ALWAYS_RESET) - -/* - * DECAAM - auto answerback mode - * - * Default: reset - * - * References: VT525 - */ -MODE_FIXED(DECAAM, 100, ALWAYS_RESET) - -/* - * DECCANSM - conceal answerback message mode - * - * Default: reset - * - * References: VT525 - * - * Unimplemented, since we don't support answerback at all. - */ -MODE_FIXED(DECANSM, 101, ALWAYS_RESET) - -/* - * DECNULM - null mode - * If set, pass NUL to the printer; if reset, discard NUL. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECNULM, 102, ALWAYS_RESET) - -/* - * DECHDPXM - half-duplex mode - * Whether to use half-duplex (set) or full-duplex (reset) mode. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECHDPXM, 103, ALWAYS_RESET) - -/* - * DECESKM - enable secondary keyboard language mode - * If set, use the secondary keyboard mapping (group 2); if reset, - * use the primary (group 1). - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECESKM, 104, ALWAYS_RESET) - -/* - * DECOSCNM - overscan mode - * (monochrome terminal only) - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECOSCNM, 106, ALWAYS_RESET) - -/* - * DECNUMLK - num lock mode - * - * Set the num lock state as if by acting the NumLock key. - * Set means NumLock on; reset means off. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECNUMLK, 108, ALWAYS_RESET) - -/* - * DECCAPSLK - caps lock mode - * - * Set the caps lock state as if by acting the CapsLock key. - * Set means CapsLock on; reset means off. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECCAPSLK, 109, ALWAYS_RESET) - -/* - * DECKLHIM - keyboard LED host indicator mode - * If set, the keyboard LEDs show the state from the host - * (see DECLL); if reset, the local state. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECKLHIM, 110, ALWAYS_RESET) - -/* - * DECFWM - framed window mode - * If set, session window frames are drawn with frame border and icon. - * - * Default: reset - * - * References: VT525 - * - * VTE does not support sessions. - */ -MODE_FIXED(DECFWM, 111, ALWAYS_RESET) - -/* - * DECRPL - review previous lines mode - * If set, allows to view the scrollback. - * - * Default: set (VTE) - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECRPL, 112, ALWAYS_SET) - -/* - * DECHWUM - host wake-up mode - * If set, the terminal exits CRT save and energy save mode - * when a character is received from the host. - * - * Default: ? - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECHWUM, 113, ALWAYS_RESET) - -/* - * DECTCUM - alternate text color underline mode - * - * If set, text with the undeerline attribute is underlined as - * well as being displayed in the alternate coolor (if - * specified); if reset, it is only displayed in the - * alternate color. - * - * Default: ? - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECATCUM, 114, ALWAYS_RESET) - -/* - * DECTCBM - alternate text color blink mode - * - * If set, text with the blink attribute blinks as well - * as being displayed in the alternate color (if - * specified); if reset, it is only displayed in the - * alternate color. - * - * Default: ? - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECATCBM, 115, ALWAYS_RESET) - -/* - * DECBBSM - bold and blink style mode - * - * If set, the bold or blink attributes affect both foreground - * and background color; if reset, those affect only the foreground - * color. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECBBSM, 116, ALWAYS_RESET) - -/* - * DECECM - erase color mode - * - * If set, erased text or new cells appearing on the screen by scrolling - * are assigned the screen background color; if reset, they are assigned - * the text background color. - * - * Default: reset - * - * References: VT525 - * - * Probably not worth implementing. - */ -MODE_FIXED(DECECM, 117, ALWAYS_RESET) - -/* DRCSTerm */ -/* Modes 8800…8804 */ - -/* KITTY */ - -MODE_FIXED(KITTY_STYLED_UNDERLINES, 2016, ALWAYS_SET) -MODE_FIXED(KITTY_EXTENDED_KEYBOARD, 2017, ALWAYS_RESET) - -/* MinTTY */ - -MODE_FIXED(MINTTY_REPORT_CJK_AMBIGUOUS_WIDTH, 7700, ALWAYS_RESET) -MODE_FIXED(MINTTY_REPORT_SCROLL_MARKER_IN_CURRENT_LINE, 7711, ALWAYS_RESET) -MODE_FIXED(MINTTY_APPLICATION_ESCAPE, 7727, ALWAYS_RESET) -MODE_FIXED(MINTTY_ESCAPE_SENDS_FS, 7728, ALWAYS_RESET) -MODE_FIXED(MINTTY_SIXEL_SCROLLING_END_POSITION, 7730, ALWAYS_RESET) -MODE_FIXED(MINTTY_SCROLLBAR, 7766, ALWAYS_RESET) -MODE_FIXED(MINTTY_REPORT_FONT_CHANGES, 7767, ALWAYS_RESET) -MODE_FIXED(MINTTY_SHORTCUT_OVERRIDE, 7783, ALWAYS_RESET) -MODE_FIXED(MINTTY_ALBUF_MOUSEWHEEL_TO_CURSORKEYS, 7786, ALWAYS_RESET) -MODE_FIXED(MINTTY_MOUSEWHEEL_APPLICATION_KEYS, 7787, ALWAYS_RESET) -MODE_FIXED(MINTTY_BIDI_DISABLE_IN_CURRENT_LINE, 7796, ALWAYS_RESET) -MODE_FIXED(MINTTY_SIXEL_SCROLL_CURSOR_RIGHT, 8452, ALWAYS_RESET) -/* MinTTY also knows mode 77096 'BIDI disable", and 77000..77031 - * "Application control key" which are outside of the supported range - * for CSI parameters. - */ - -/* RLogin */ - -/* RLogin appears to use many modes - * [https://github.com/kmiya-culti/RLogin/blob/master/RLogin/TextRam.h#L131]: - * 1406..1415, 1420..1425, 1430..1434, 1436, 1452..1481, - * 8400..8406, 8416..8417, 8428..8429, 8435, 8437..8443, - * 8446..8458, - * and modes 7727, 7786, 8200 (home cursor on [ED 2]), - * 8800 (some weird Unicode plane 17 mapping?), 8840 (same as 8428). - * - * We're not going to implement them, but avoid these ranges - * when assigning new mode numbers. - * - * The following are the ones from RLogin that MLTerm knows about: - */ - -/* MODE_FIXED(RLOGIN_APPLICATION_ESCAPE, 7727, ALWAYS_RESET) */ -/* MODE_FIXED(RLOGIN_MOUSEWHEEL_TO_CURSORKEYS, 7786, ALWAYS_RESET) */ - -/* Ambiguous-width characters are wide (reset) or narrow (set) */ -MODE_FIXED(RLOGIN_AMBIGUOUS_WIDTH_CHARACTERS_NARROW, 8428, ALWAYS_RESET) - -/* MODE_FIXED(RLOGIN_CURSOR_TO_RIGHT_OF_SIXEL, 8452, ALWAYS_RESET) */ - -/* XTERM also knows this one */ -/* MODE_FIXED(RLOGIN_SIXEL_SCROLL_CURSOR_RIGHT, 8452, ALWAYS_RESET) */ - -/* RXVT */ - -MODE_FIXED(RXVT_TOOLBAR, 10, ALWAYS_RESET) -MODE_FIXED(RXVT_SCROLLBAR, 30, ALWAYS_RESET) -/* MODE_FIXED(RXVT_SHIFT_KEYS, 35, ALWAYS_RESET) ! Conflicts with DECHEBM */ -MODE_FIXED(RXVT_SCROLL_OUTPUT, 1010, ALWAYS_RESET) -MODE_FIXED(RXVT_SCROLL_KEYPRESS, 1011, ALWAYS_RESET) -MODE_FIXED(RXVT_MOUSE_EXT, 1015, ALWAYS_RESET) -/* Bold/blink uses normal (reset) or high intensity (set) colour */ -MODE_FIXED(RXVT_INTENSITY_STYLES, 1021, ALWAYS_SET) - -/* Wyse */ - -/* - * WYTEK - TEK 4010/4014 personality - * If set, switches to TEK 4010/4014 personality. - * - * Default: reset - * - * References: WY370 - */ -MODE_FIXED(WYTEK, 38, ALWAYS_RESET) - -/* - * WY161 - 161 column mode - * If set, switches the terminal to 161 columns; if reset, - * to 80 columns. - * - * Default: reset - * - * References: WY370 - */ -MODE_FIXED(WY161, 80, ALWAYS_RESET) - -/* - * WY52 - 52 lines mode - * If set, switches the terminal to 52 lines; if reset, - * to 24 lines. - * - * Default: reset - * - * References: WY370 - */ -MODE_FIXED(WY52, 83, ALWAYS_RESET) - -/* - * WYENAT - enable separate attributes - * If set, SGR attributes may be set separately for eraseable - * and noneraseable characters. If reset, the same SGR attributes - * apply to both eraseable and noneraseable characters. - * - * - * Default: reset - * - * References: WY370 - */ -MODE_FIXED(WYENAT, 84, ALWAYS_RESET) - -/* - * WYREPL - replacement character color - * - * Default: reset - * - * References: WY370 - */ -MODE_FIXED(WYREPL, 85, ALWAYS_RESET) - -/* XTERM */ - -MODE_FIXED(XTERM_ATT610_BLINK, 12, ALWAYS_RESET) -MODE_FIXED(XTERM_CURSOR_BLINK, 13, ALWAYS_RESET) -MODE_FIXED(XTERM_CURSOR_BLINK_XOR, 14, ALWAYS_RESET) -MODE_FIXED(XTERM_CURSES_HACK, 41, ALWAYS_RESET) -MODE_FIXED(XTERM_MARGIN_BELL, 44, ALWAYS_RESET) -MODE_FIXED(XTERM_REVERSE_WRAP, 45, ALWAYS_RESET) -MODE_FIXED(XTERM_LOGGING, 46, ALWAYS_RESET) -MODE_FIXED(XTERM_MOUSE_EXT, 1005, ALWAYS_RESET) -MODE_FIXED(XTERM_8BIT_META, 1034, ALWAYS_RESET) -MODE_FIXED(XTERM_NUMLOCK, 1035, ALWAYS_RESET) -MODE_FIXED(XTERM_DELETE_IS_DEL, 1037, ALWAYS_RESET) -MODE_FIXED(XTERM_ALT_SENDS_ESCAPE, 1039, ALWAYS_RESET) -MODE_FIXED(XTERM_KEEP_SELECTION, 1040, ALWAYS_RESET) -MODE_FIXED(XTERM_KEEP_CLIPBOARD, 1044, ALWAYS_RESET) -MODE_FIXED(XTERM_SELECT_TO_CLIPBOARD, 1041, ALWAYS_RESET) -MODE_FIXED(XTERM_BELL_URGENT, 1042, ALWAYS_RESET) -MODE_FIXED(XTERM_PRESENT_ON_BELL, 1043, ALWAYS_RESET) -MODE_FIXED(XTERM_ALLOW_ALTBUF, 1046, ALWAYS_SET) -MODE_FIXED(XTERM_FKEYS_TERMCAP, 1050, ALWAYS_RESET) -MODE_FIXED(XTERM_FKEYS_SUN, 1051, ALWAYS_RESET) -MODE_FIXED(XTERM_FKEYS_HP, 1052, ALWAYS_RESET) -MODE_FIXED(XTERM_FKEYS_SCO, 1053, ALWAYS_RESET) -MODE_FIXED(XTERM_FKEYS_LEGACY, 1060, ALWAYS_RESET) -MODE_FIXED(XTERM_FKEYS_VT220, 1061, ALWAYS_RESET) -MODE_FIXED(XTERM_SIXEL_PRIVATE_COLOR_REGISTERS, 1070, ALWAYS_SET) -MODE_FIXED(XTERM_READLINE_BUTTON1_MOVE_POINT, 2001, ALWAYS_RESET) -MODE_FIXED(XTERM_READLINE_BUTTON2_MOVE_POINT, 2002, ALWAYS_RESET) -MODE_FIXED(XTERM_READLINE_DBLBUTTON3_DELETE, 2003, ALWAYS_RESET) -MODE_FIXED(XTERM_READLINE_PASTE_QUOTE, 2005, ALWAYS_RESET) -MODE_FIXED(XTERM_READLINE_PASTE_LITERAL_NL, 2006, ALWAYS_RESET) diff --git a/src/modes-test.cc b/src/modes-test.cc index 5841485..bf53304 100644 --- a/src/modes-test.cc +++ b/src/modes-test.cc @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" diff --git a/src/modes.hh b/src/modes.hh index 48b1b2c..dfafcc8 100644 --- a/src/modes.hh +++ b/src/modes.hh @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -129,6 +129,11 @@ public: eALWAYS_RESET = -1, #define MODE(name,param) e##name, +#define MODE_FIXED(name,param,value) +#include "modes-ecma.hh" +#undef MODE +#undef MODE_FIXED +#define MODE(name,param) #define MODE_FIXED(name,param,value) e##name, #include "modes-ecma.hh" #undef MODE @@ -183,8 +188,13 @@ public: eALWAYS_RESET = -1, #define MODE(name,param) e##name, +#define MODE_FIXED(name,param,value) +#include "modes-dec.hh" +#undef MODE +#undef MODE_FIXED +#define MODE(name,param) #define MODE_FIXED(name,param,value) e##name, -#include "modes-private.hh" +#include "modes-dec.hh" #undef MODE #undef MODE_FIXED }; @@ -194,7 +204,7 @@ public: switch (param) { #define MODE(name,param) case param: return e##name; #define MODE_FIXED(name,param,value) case param: return e##value; -#include "modes-private.hh" +#include "modes-dec.hh" #undef MODE #undef MODE_FIXED default: @@ -210,7 +220,7 @@ public: case eALWAYS_RESET: return "ALWAYS_RESET"; #define MODE(name,param) case e##name: return #name; #define MODE_FIXED(name,param,value) -#include "modes-private.hh" +#include "modes-dec.hh" #undef MODE #undef MODE_FIXED default: @@ -220,7 +230,7 @@ public: #define MODE(name,param) MODE_ACCESSOR(name) #define MODE_FIXED(name,param,value) MODE_FIXED_ACCESSOR(name, e##value == eALWAYS_SET) -#include "modes-private.hh" +#include "modes-dec.hh" #undef MODE #undef MODE_FIXED @@ -228,7 +238,10 @@ public: eDEC_TEXT_CURSOR, eVTE_BIDI_SWAP_ARROW_KEYS, eXTERM_ALTBUF_SCROLL, - eXTERM_META_SENDS_ESCAPE} { } + eXTERM_META_SENDS_ESCAPE, + eXTERM_SIXEL_PRIVATE_COLOR_REGISTERS} + { + } inline void push_saved(int mode) { diff --git a/src/modes.py b/src/modes.py new file mode 100755 index 0000000..68d263a --- /dev/null +++ b/src/modes.py @@ -0,0 +1,1342 @@ +#!/usr/bin/env python3 +# +# Copyright © 2018, 2020 Christian Persch +# +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library. If not, see . + + +import argparse +import enum +import inspect +import pathlib +import sys +import typing + +from dataclasses import dataclass, field + +# Types + +class Type(enum.IntEnum): + ECMA = enum.auto() # CSI n [h|l] + WHAT = enum.auto() # CSI ? n [h|l] + GT = enum.auto() # CSI > n [h|l] + +class Flags(enum.Flag): + NONE = 0 + WRITABLE = enum.auto() + +class Source(enum.Enum): + CONTOUR = enum.auto() + DEC = enum.auto(), + DRCSTERM = enum.auto(), + ECMA48 = enum.auto() # eq ISO 6429 + HP = enum.auto() + KITTY = enum.auto() + ITERM2 = enum.auto() + RLOGIN = enum.auto() + SCO = enum.auto() + VTE = enum.auto() + WYSE = enum.auto() + XDG = enum.auto() + XTERM = enum.auto() + + @classmethod + def from_name(cls, name): + if name.startswith('CONTOUR'): + return cls.CONTOUR + elif name.startswith('DEC') or name.endswith('_DEC'): + return cls.DEC + elif name.startswith('DRCS'): + return cls.DRCSTERM + elif name.endswith('_ECMA'): + return cls.ECMA35 + elif name.startswith('HP') or name.endswith('_HP'): + return cls.HP + elif name.startswith('KITTY'): + return cls.KITTY + elif name.startswith('ITERM'): + return cls.ITERM2 + elif name.startswith('RLOGIN'): + return cls.RLOGIN + elif name.startswith('SCO'): + return cls.SCO + elif name.startswith('VTE'): + return cls.VTE + elif name.startswith('WY'): + return cls.WYSE + elif name.startswith('XDG'): + return cls.XDG + elif name.startswith('XTERM'): + return cls.XTERM + else: + return cls.ECMA48 + #raise ValueError(f'Could not determine source for mode {name}') + +# Control Sequence + +@dataclass(eq=True, order=True) +class NamedMode: + ''' A named mode ''' + mtype: Type + number: int + name: str + default: bool + preserve_decstr: bool=False + flags: Flags=Flags.NONE + source: typing.Optional[Source]=None + alias: typing.Optional[typing.List[str]]=None + comment: str=None + sloc_file: str=None + sloc_line: int=-1 + + def __post_init__(self): + + if self.source is None: + self.source = Source.from_name(self.name) + + if self.sloc_file is None or self.sloc_line == -1: + fname = f'mode_{self.mtype.name}' + stack = inspect.stack() + depth = -1 + for _frame in stack: + depth += 1 + if _frame.function == fname: + depth += 1 + break + + if depth == -1 or depth >= len(stack): + raise ValueError('{self.name} source location not found') + else: + frame = stack[depth] + self.sloc_file = frame.filename + self.sloc_line = frame.lineno + + del stack + + +def mode_ECMA(name, number, **kwargs): + return NamedMode(mtype=Type.ECMA, + name=name, + number=number, + **kwargs) + +def mode_WHAT(name, number, **kwargs): + return NamedMode(mtype=Type.WHAT, + name=name, + number=number, + **kwargs) + +def mode_GT(name, number, **kwargs): + return NamedMode(mtype=Type.GT, + name=name, + number=number, + **kwargs) + +# All known modes, ordered by type, source, and number + +modes = [ + + # Modes for SM_ECMA/RM_ECMA (CSI n [h|l]) + # + # Most of these are not implemented in VTE. + # + # References: ECMA-48 § 7 + # WY370 + + mode_ECMA('GATM', 1, default=False), + mode_ECMA('KAM', 2, default=False), + mode_ECMA('CRM', 3, default=False), + + # IRM - insertion replacement mode + # + # Default: reset + # + # References: ECMA-48 § 7.2.10 + # VT525 + # + mode_ECMA('IRM', 4, default=False, flags=Flags.WRITABLE), + + mode_ECMA('SRTM', 5, default=False), + mode_ECMA('ERM', 6, default=False), + mode_ECMA('VEM', 7, default=False), + + # BDSM - Bi-Directional Support Mode + # + # Reset state is explicit mode, set state is implicit mode + # + # References: ECMA-48 + # ECMA TR/53 + # Terminal-wg/bidi + # + # Default in ECMA: reset + # Default in Terminal-wg/bidi and VTE: set + # + mode_ECMA('BDSM', 8, default=True, flags=Flags.WRITABLE), + + # DCSM defaults to RESET in ECMA, forced to SET in Terminal-wg/bidi# + mode_ECMA('DCSM', 9, default=True), + + mode_ECMA('HEM', 10, default=False), + + # ECMA-48 § F.4.1 Deprecated + mode_ECMA('PUM', 11, default=False), + + # SRM - local echo send/receive mode + # If reset, characters entered by the keyboard are shown on the + # screen as well as being sent to the host; if set, the + # keyboard input is only sent to the host. + # + # Default: set + # + # References: ECMA-48 § 7.2.15 + # VT525 + # + # Removed in VTE 0.60: issue #69 + # + mode_ECMA('SRM', 12, default=True), + + mode_ECMA('FEAM', 13, default=False), + mode_ECMA('FETM', 14, default=False), + mode_ECMA('MATM', 15, default=False), + mode_ECMA('TTM', 16, default=False), + mode_ECMA('SATM', 17, default=False), + mode_ECMA('TSM', 18, default=False), + + # ECMA-48 § F.5.1 Removed + mode_ECMA('EBM', 19, default=False), + + # LNM - line feed/newline mode + # If set, the cursor moves to the first column on LF, FF, VT, + # and a Return key press sends CRLF. + # If reset, the cursor column is unchanged by LF, FF, VT, + # and a Return key press sends CR only. + # + # Default: reset + # + # References: ECMA-48 § F.5.2 Removed! + # VT525 + # + mode_ECMA('LNM', 20, default=False, preserve_decstr=True), + + mode_ECMA('GRCM', 21, default=True), + + # ECMA-48 § F.4.2 Deprecated + mode_ECMA('ZDM', 22, default=False), + + # WYDSCM - display disable mode + # If set, blanks the screen; if reset, shows the data. + # + # Default: reset + # + # References: WY370 + # + mode_ECMA('WYDSCM', 30, default=False), + + # WHYSTLINM - status line display mode + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYSTLINM', 31, default=False), + + # WYCRTSAVM - screen saver mode + # Like DECCRTSM. + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYCRTSAVM', 32, default=False), + + # WYSTCURM - steady cursor mode + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYSTCURM', 33, default=False), + + # WYULCURM - underline cursor mode + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYULCURM', 34, default=False), + + # WYCLRM - width change clear disable mode + # If set, the screen is not cleared when the column mode changes + # by DECCOLM or WY161. + # Note that this does not affect DECSCPP. + # This is the same as DECNCSM mode. + # + # Default: set (set-up) + # + # References: WY370 + # + mode_ECMA('WYCLRM', 35, default=True), + + # WYDELKM - delete key definition + # + # Default: reset (set-up) + # + # References: WY370 + # + # Note: Same as DECBKM + mode_ECMA('WYDELKM', 36, default=False), + + # WYGATM - send characters mode + # If set, sends all characters; if reset, only erasable characters. + # Like GATM above. + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYGATM', 37, default=False), + + # WYTEXM - send full screen/scrolling region to printer + # Like DECPEX mode. + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYTEXM', 38, default=False), + + # WYEXTDM - extra data line + # If set, the last line of the screen is used as data line and not + # a status line; if reset, the last line of the screen is used + # as a status line. + # + # Default: reset + # + # References: WY370 + # + mode_ECMA('WYEXTDM', 40, default=True), + + # WYASCII - WY350 personality mode + # If set, switches to WY350 personality. + # + # Default: reset (set-up) + # + # References: WY370 + # + mode_ECMA('WYASCII', 42, default=True), + + # ************************************************************************ + + # Modes for SM_DEC/RM_DEC (CSI ? n [h|l]) + # + # Most of these are not implemented in VTE. + # + # References: VT525 + # XTERM + # KITTY + # MINTTY + # MLTERM + # RLogin + # URXVT + # WY370 + # + + # DEC: + + # DECCKM - cursor keys mode + # + # Controls whether the cursor keys send cursor sequences, or application + # sequences. + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DEC_APPLICATION_CURSOR_KEYS', 1, default=False, flags=Flags.WRITABLE), + + # DECCOLM: 132 column mode + # + # Sets page width to 132 (set) or 80 (reset) columns. + # + # Changing this mode resets the top, bottom, left, right margins; + # clears the screen (unless DECNCSM is set); resets DECLRMM; and clearsb + # the status line if host-writable. + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DEC_132_COLUMN', 3, default=False, preserve_decstr=True, flags=Flags.WRITABLE), + + # DECANM - ansi-mode + # Resetting this puts the terminal into VT52 compatibility mode. + # To return to ECMA-48 mode, use ESC < (1/11 3/12). + # + # Default: set + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECANM', 2, default=True), + + # DECSCLM - scrolling mode + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECSCLM', 4, default=False), + + # DECSCNM - screen mode + # If set, displays reverse; if reset, normal. + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DEC_REVERSE_IMAGE', 5, default=False, preserve_decstr=True, flags=Flags.WRITABLE), + + # DECOM - origin mode + # If set, the cursor is restricted to within the page margins. + # + # On terminal reset, DECOM is reset. + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DEC_ORIGIN', 6, default=False, flags=Flags.WRITABLE), + + # DECAWM - auto wrap mode + # + # Controls whether text wraps to the next line when the + # cursor reaches the right margin. + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DEC_AUTOWRAP', 7, default=False, flags=Flags.WRITABLE), + + # DECARM - autorepeat mode + # Controls whether keys auytomatically repeat while held pressed + # for more than 0.5s. + # Note that /some/ keys do not repeat regardless of this setting. + # + # Default: set + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECARM', 8, default=True, preserve_decstr=True), + + mode_WHAT('XTERM_MOUSE_X10', 9, default=False, flags=Flags.WRITABLE), + mode_WHAT('DECLTM', 11, default=False), + mode_WHAT('DECEKEM', 16, default=False), + + # DECPFF - print FF mode + # Controls whether the terminal terminates a print command by + # sending a FF to the printer. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECCPFF', 18, default=False), + + # DECPEX - print extent mode + # If set, print page prints only the scrolling region; + # if reset, the complete page. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECPEX', 19, default=False), + + # DECTCEM - text cursor enable + # If set, the text cursor is visible; if reset, invisible. + # + # Default: set + # + # References: VT525 + # + mode_WHAT('DEC_TEXT_CURSOR', 25, default=True, flags=Flags.WRITABLE), + + # DECLRM - RTL mode + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECRLM', 34, default=False), + + # DECHEBM - hebrew/north-american keyboard mapping mode + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECHEBM', 35, default=False), + + # DECHEM - hebrew encoding mode + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECHEM', 36, default=False), + + mode_WHAT('XTERM_DECCOLM', 40, default=False, flags=Flags.WRITABLE), + + # DECNRCM - NRCS mode + # Operates in 7-bit (set) or 8-bit (reset) mode. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECNRCM', 42, default=False), + + # DECGEPM - Graphics Expanded Print Mode + # + # Default: reset + # + # References: VT330 + # + mode_WHAT('DECGEPM', 43, default=False), + + # DECGPCM - Graphics Print Colour Mode + # + # Default: reset + # + # References: VT330 + # + # Note: Conflicts with XTERM_MARGIN_BELL + # + #mode_WHAT('DECGPCM', 44, default=False), + + # DECGCPS - Graphics Print Colour Syntax + # If set, uses RGB colour format; if reset, uses HLS colour format. + # + # Default: reset + # + # References: VT330 + # + # Note: conflicts with XTERM_REVERSE_WRAP + # + #mode_WHAT('DECGPCS', 45, default=False), + + # DECGPBM - Graphics Print Background Mode + # + # Default: reset + # + # References: VT330 + # + # Note: conflicts with XTERM_LOGGING (which VTE does not implement) + # + #mode_WHAT('DECGPBM', 46, default=False), + + # DECGRPM - Graphics Rotated Print Mode + # + # Default: reset + # + # References: VT330 + # + # Note: conflicts with XTERM_ALTBUF + # + #mode_WHAT('DECGRPM', 47, default=False), + + mode_WHAT('XTERM_ALTBUF', 47, default=False, flags=Flags.WRITABLE), + + mode_WHAT('DEC131TM', 53, default=False), + + # DECNAKB - greek/north-american keyboard mapping mode + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECNAKB', 57, default=False), + + # DECIPEM - enter/return to/from pro-printer emulation mode + # Switches the terminal to (set)/from (reset) the ibm pro + # printer protocol. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECIPEM', 58, default=False), + + # Kanji/Katakana Display Mode, from VT382-Kanji + mode_WHAT('DECKKDM', 59, default=True), + + # DECHCCM - horizontal cursor coupling mode + # Controls what happens when the cursor moves out of the left or + # right margins of the window. + # If set, the window pans to keep the cursor in view; if reset, + # the cursor disappears. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECHCCM', 60, default=False), + + # DECVCCM - vertical cursor coupling mode + # Controls what happens when the cursor moves out of the top or + # bottom of the window, When the height of the window is smaller + # than the page. + # If set, the window pans to keep the cursor in view; if reset, + # the cursor disappears. + # + # Default: set + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECVCCM', 61, default=True), + + # DECPCCM - page cursor coupling mode + # + # Default: set + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECPCCM', 64, default=True), + + # DECNKM - numeric/application keypad mode + # Controls whether the numeric keypad sends application (set) + # or keypad (reset) sequences. + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DEC_APPLICATION_KEYPAD', 66, default=False, flags=Flags.WRITABLE), + + # DECBKM - backarrow key mode + # WYDELKM + # + # If set, the Backspace key works as a backspace key + # sending the BS control; if reset, it works as a Delete + # key sending the DEL control. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECBKM', 67, default=False, alias=['WYDELKM']), + + # DECKBUM - typewriter/data rpocessing keys mode + # + # If set, the keyboard keys act as data processing keys; + # if reset, as typewriter keys. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECKBUM', 68, default=False), + + # DECLRMM - vertical split-screen mode + # Controls whether a DECSLRM is executed. + # On set, resets line attributes to single width and single height, + # and while set, the terminal ignores any changes to line attributes. + # + # Default: reset + # + # References: VT525 + # + # Needs to be implemented if DECSLRM is implemented, to resolve a + # conflict between DECSLRM and SCOSC. + # + # aka DECVSSM + # + mode_WHAT('DECLRMM', 69, default=False, flags=Flags.WRITABLE), + + # DECXRLM - transmit rate limit + # If set, limits the transmit rate; if reset, the rate is + # unlimited. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECXRLM', 73, default=False), + + # DECSDM - sixel display mode (scrolling) + # If set, SIXEL scrolling is disabled; when reset, SIXEL scrolling + # is enabled. + # + # Default: reset + # + # References: ? + # + # Note: Conflicts with WY161 + # + mode_WHAT('DECSDM', 80, default=False, flags=Flags.WRITABLE), + + # DECKPM - key position mode + # If set, the keyboard sends extended reports (DECEKBD) that include + # the key position and modifier state; if reset, it sends character codes. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECKPM', 81, default=False), + + # Thai Space Compensating Mode, from VT382-Thai + mode_WHAT('DECTHAISCM', 90, default=False), + + # DECNCSM - no clear screen on DECOLM + # If set, the screen is not cleared when the column mode changes + # by DECCOLM. + # Note that this does not affect DECSCPP. + # + # Default: set + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECNCSM', 95, default=False), + + # DECRLCM - RTL copy mode + # If set, copy/paste from RTL; if reset, from LTR. + # Only enabled when the keyboard language is set to hebrew. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECRLCM', 96, default=False), + + # DECCRTSM - CRT save mode + # When set, blanks the terminal after the inactivity timeout + # (set with DECCRTST). + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECRCRTSM', 97, default=False), + + # DECARSM - auto resize mode + # Sets whether changing page arrangements automatically + # changes the lines per screen. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECARSM', 98, default=False), + + # DECMCM - modem control mode + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECMCM', 99, default=False), + + # DECAAM - auto answerback mode + # + # Default: reset + # + # References: VT525 + # + mode_WHAT('DECAAM', 100, default=False), + + # DECCANSM - conceal answerback message mode + # + # Default: reset + # + # References: VT525 + # + # Unimplemented, since we don't support answerback at all. + # + mode_WHAT('DECANSM', 101, default=False), + + # DECNULM - null mode + # If set, pass NUL to the printer; if reset, discard NUL. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECNULM', 102, default=False), + + # DECHDPXM - half-duplex mode + # Whether to use half-duplex (set) or full-duplex (reset) mode. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECHDPXM', 103, default=False), + + # DECESKM - enable secondary keyboard language mode + # If set, use the secondary keyboard mapping (group 2); if reset, + # use the primary (group 1). + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECESKM', 104, default=False), + + # DECOSCNM - overscan mode + # (monochrome terminal only) + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECOSCNM', 106, default=False), + + # DECNUMLK - num lock mode + # + # Set the num lock state as if by acting the NumLock key. + # Set means NumLock on; reset means off. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECNUMLK', 108, default=False), + + # DECCAPSLK - caps lock mode + # + # Set the caps lock state as if by acting the CapsLock key. + # Set means CapsLock on; reset means off. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECCAPSLK', 109, default=False), + + # DECKLHIM - keyboard LED host indicator mode + # If set, the keyboard LEDs show the state from the host + # (see DECLL); if reset, the local state. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECKLHIM', 110, default=False), + + # DECFWM - framed window mode + # If set, session window frames are drawn with frame border and icon. + # + # Default: reset + # + # References: VT525 + # + # VTE does not support sessions. + # + mode_WHAT('DECFWM', 111, default=False), + + # DECRPL - review previous lines mode + # If set, allows to view the scrollback. + # + # Default: set (VTE) + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECRPL', 112, default=True), + + # DECHWUM - host wake-up mode + # If set, the terminal exits CRT save and energy save mode + # when a character is received from the host. + # + # Default: ? + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECHWUM', 113, default=False), + + # DECTCUM - alternate text color underline mode + # + # If set, text with the undeerline attribute is underlined as + # well as being displayed in the alternate coolor (if + # specified); if reset, it is only displayed in the + # alternate color. + # + # Default: ? + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECATCUM', 114, default=False), + + # DECTCBM - alternate text color blink mode + # + # If set, text with the blink attribute blinks as well + # as being displayed in the alternate color (if + # specified); if reset, it is only displayed in the + # alternate color. + # + # Default: ? + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECATCBM', 115, default=False), + + # DECBBSM - bold and blink style mode + # + # If set, the bold or blink attributes affect both foreground + # and background color; if reset, those affect only the foreground + # color. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECBBSM', 116, default=False), + + # DECECM - erase color mode + # + # If set, erased text or new cells appearing on the screen by scrolling + # are assigned the screen background color; if reset, they are assigned + # the text background color. + # + # Default: reset + # + # References: VT525 + # + # Probably not worth implementing. + # + mode_WHAT('DECECM', 117, default=False), + + # Contour: + + mode_WHAT('CONTOUR_BATCHED_RENDERING', 2026, default=False), + + # DRCSTerm: + + # DRCSMM_V1 + # Whether to enable DRCSMMv1 unicode mapping + # + # Default: reset + # + # References: DRCSTerm + # + mode_WHAT('DRCSMM_V1', 8800, default=False), + + # KiTTY: + + mode_WHAT('KITTY_STYLED_UNDERLINES', 2016, default=True), + mode_WHAT('KITTY_EXTENDED_KEYBOARD', 2017, default=False), + + # MinTTY: + + mode_WHAT('MINTTY_REPORT_CJK_AMBIGUOUS_WIDTH', 7700, default=False), + mode_WHAT('MINTTY_REPORT_SCROLL_MARKER_IN_CURRENT_LINE', 7711, default=False), + mode_WHAT('MINTTY_APPLICATION_ESCAPE', 7727, default=False), + mode_WHAT('MINTTY_ESCAPE_SENDS_FS',7728, default=False), + + # MINTTY_SIXEL_SCROLL_END_POSITION: + # If set, sixel scrolling moves the cursor to the left margin on the + # next line; if reset, moves the cursor to the right of the inserted + # graphic. + # + # Default: reset + # + # References: MinTTY + mode_WHAT('MINTTY_SIXEL_SCROLL_END_POSITION',7730, default=False), + + mode_WHAT('MINTTY_SCROLLBAR', 7766, default=False), + mode_WHAT('MINTTY_REPORT_FONT_CHANGES', 7767, default=False), + mode_WHAT('MINTTY_SHORTCUT_OVERRIDE', 7783, default=False), + mode_WHAT('MINTTY_ALTBUF_MOUSEWHEEL_TO_CURSORKEYS', 7786, default=False), + mode_WHAT('MINTTY_MOUSEWHEEL_APPLICATION_KEYS', 7787, default=False), + mode_WHAT('MINTTY_BIDI_DISABLE_IN_CURRENT_LINE', 7796, default=False), + + # MINTTY_SIXEL_SCROLL_CURSOR_RIGHT: + # If set, sixel scrolling moves the cursor to the right of the + # inserted graphic; if reset, MINTTY_SIXEL_SCROLL_END_POSITION + # takes effect. + # + # Default: reset + # + # References: MinTTY + mode_WHAT('MINTTY_SIXEL_SCROLL_CURSOR_RIGHT', 8452, default=False, + alias=['RLOGIN_SIXEL_SCROLL_CURSOR_RIGHT']), + + # MinTTY also knows mode 77096 "BIDI disable", and 77000..77031 + # "Application control key", all of which are outside of the supported + # range CSI parameters in VTE, so we don't list them here and VTE will + # never support them. + + # RLogin: + + # RLogin has many private modes + # [https://github.com/kmiya-culti/RLogin/blob/master/RLogin/TextRam.h#L131]: + # 1406..1415, 1420..1425, 1430..1434, 1436, 1452..1481, + # 8400..8406, 8416..8417, 8428..8429, 8435, 8437..8443, + # 8446..8458, + # and modes 7727, 7786, 8200 (home cursor on [ED 2]), + # 8800 (DRCSMM_V1), 8840 (same as 8428). + # + # We're not going to implement them, but avoid these ranges + # when assigning new mode numbers. + # + # The following are the ones from RLogin that MLTerm knows about: + + #mode_WHAT('RLOGIN_APPLICATION_ESCAPE', 7727, default=False) + #mode_WHAT('RLOGIN_MOUSEWHEEL_TO_CURSORKEYS', 7786, default=False) + + # Ambiguous-width characters are wide (reset) or narrow (set) + mode_WHAT('RLOGIN_AMBIGUOUS_WIDTH_CHARACTERS_NARROW', 8428, default=False), + + # XTERM also knows this one + #mode_WHAT('RLOGIN_SIXEL_SCROLL_CURSOR_RIGHT', 8452, default=False), + + # [u]RXVT: + + mode_WHAT('RXVT_TOOLBAR', 10, default=False), + mode_WHAT('RXVT_SCROLLBAR', 30, default=False), + + # Conflicts with DECHEBM + #mode_WHAT('RXVT_SHIFT_KEYS', 35, default=False), + + mode_WHAT('RXVT_SCROLL_OUTPUT', 1010, default=False), + mode_WHAT('RXVT_SCROLL_KEYPRESS', 1011, default=False), + mode_WHAT('RXVT_MOUSE_EXT', 1015, default=False), + + # Bold/blink uses normal (reset) or high intensity (set) colour + mode_WHAT('RXVT_INTENSITY_STYLES', 1021, default=True), + + # WYSE: + + # WYTEK - TEK 4010/4014 personality + # If set, switches to TEK 4010/4014 personality. + # + # Default: reset + # + # References: WY370 + # + mode_WHAT('WYTEK', 38, default=False, alias=['DECTEK']), + + # WY161 - 161 column mode + # If set, switches the terminal to 161 columns; if reset, + # to 80 columns. + # + # Default: reset + # + # References: WY370 + # + # Note: Conflicts with DECSDM + #mode_WHAT('WY161', 80, default=False), + + # WY52 - 52 lines mode + # If set, switches the terminal to 52 lines; if reset, + # to 24 lines. + # + # Default: reset + # + # References: WY370 + # + mode_WHAT('WY52', 83, default=False), + + # WYENAT - enable separate attributes + # If set, SGR attributes may be set separately for eraseable + # and noneraseable characters. If reset, the same SGR attributes + # apply to both eraseable and noneraseable characters. + # + # + # Default: reset + # + # References: WY370 + # + mode_WHAT('WYENAT', 84, default=False), + + # WYREPL - replacement character color + # + # Default: reset + # + # References: WY370 + # + mode_WHAT('WYREPL', 85, default=False), + + # VTE: + + # Whether to swap the Left and Right arrow keys if the cursor + # stands over an RTL paragraph. + # + # Default: set + # + # Reference: Terminal-wg/bidi + # + mode_WHAT('VTE_BIDI_SWAP_ARROW_KEYS', 1243, default=True, flags=Flags.WRITABLE), + + # Whether box drawing characters in the U+2500..U+257F range + # are to be mirrored in RTL context. + # + # Default: reset + # + # Reference: Terminal-wg/bidi + # + mode_WHAT('VTE_BIDI_BOX_MIRROR', 2500, default=False, flags=Flags.WRITABLE), + + # Whether BiDi paragraph direction is autodetected. + # + # Default: reset + # + # Reference: Terminal-wg/bidi + # + mode_WHAT('VTE_BIDI_AUTO', 2501, default=False, flags=Flags.WRITABLE), + + # XTERM: + + mode_WHAT('XTERM_ATT610_BLINK', 12, default=False), + mode_WHAT('XTERM_CURSOR_BLINK', 13, default=False), + mode_WHAT('XTERM_CURSOR_BLINK_XOR', 14, default=False), + mode_WHAT('XTERM_CURSES_HACK', 41, default=False), + mode_WHAT('XTERM_MARGIN_BELL', 44, default=False), + mode_WHAT('XTERM_REVERSE_WRAP', 45, default=False), + mode_WHAT('XTERM_LOGGING', 46, default=False), + + mode_WHAT('XTERM_MOUSE_VT220', 1000, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_MOUSE_VT220_HIGHLIGHT', 1001, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_MOUSE_BUTTON_EVENT', 1002, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_MOUSE_ANY_EVENT', 1003, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_FOCUS', 1004, default=False, flags=Flags.WRITABLE), + + mode_WHAT('XTERM_MOUSE_EXT', 1005, default=False), + + mode_WHAT('XTERM_MOUSE_EXT_SGR', 1006, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_ALTBUF_SCROLL', 1007, default=True, flags=Flags.WRITABLE), + + mode_WHAT('XTERM_FAST_SCROLL', 1014, default=False), + mode_WHAT('XTERM_MOUSE_EXT_SGR_PIXEL', 1016, default=False), + + mode_WHAT('XTERM_8BIT_META', 1034, default=False), + mode_WHAT('XTERM_NUMLOCK', 1035, default=False), + + mode_WHAT('XTERM_META_SENDS_ESCAPE', 1036, default=True, flags=Flags.WRITABLE), + + mode_WHAT('XTERM_DELETE_IS_DEL', 1037, default=False), + mode_WHAT('XTERM_ALT_SENDS_ESCAPE', 1039, default=False), + mode_WHAT('XTERM_KEEP_SELECTION', 1040, default=False), + mode_WHAT('XTERM_SELECT_TO_CLIPBOARD', 1041, default=False), + mode_WHAT('XTERM_BELL_URGENT', 1042, default=False), + mode_WHAT('XTERM_PRESENT_ON_BELL', 1043, default=False), + mode_WHAT('XTERM_KEEP_CLIPBOARD', 1044, default=False), + mode_WHAT('XTERM_ALLOW_ALTBUF', 1046, default=True), + + mode_WHAT('XTERM_OPT_ALTBUF', 1047, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_SAVE_CURSOR', 1048, default=False, flags=Flags.WRITABLE), + mode_WHAT('XTERM_OPT_ALTBUF_SAVE_CURSOR', 1049, default=False, flags=Flags.WRITABLE), + + mode_WHAT('XTERM_FKEYS_TERMCAP', 1050, default=False), + mode_WHAT('XTERM_FKEYS_SUN', 1051, default=False), + mode_WHAT('XTERM_FKEYS_HP', 1052, default=False), + mode_WHAT('XTERM_FKEYS_SCO', 1053, default=False), + mode_WHAT('XTERM_FKEYS_LEGACY', 1060, default=False), + mode_WHAT('XTERM_FKEYS_VT220', 1061, default=False), + + # XTERM_SIXEL_PRIVATE_COLOR_REGISTERS: + # When set, each SIXEL graphic uses newly initialised colour registers. + # When reset, changes to colour registers from one SIXEL image are + # saved and used for the next SIXEL graphic. + # + # Default: set + # + # References: XTERM + # + mode_WHAT('XTERM_SIXEL_PRIVATE_COLOR_REGISTERS', 1070, default=True, flags=Flags.WRITABLE), + + mode_WHAT('XTERM_READLINE_BUTTON1_MOVE_POINT', 2001, default=False), + mode_WHAT('XTERM_READLINE_BUTTON2_MOVE_POINT', 2002, default=False), + mode_WHAT('XTERM_READLINE_DBLBUTTON3_DELETE', 2003, default=False), + + # Whether to surround pasted text with CSI ~ sequences + # + # Default: reset + # + # References: XTERM + # + mode_WHAT('XTERM_READLINE_BRACKETED_PASTE', 2004, default=False, flags=Flags.WRITABLE), + + mode_WHAT('XTERM_READLINE_PASTE_QUOTE', 2005, default=False), + mode_WHAT('XTERM_READLINE_PASTE_LITERAL_NL', 2006, default=False), + + # ************************************************************************ + + # Modes for SM_HP/RM_HP (CSI > n [h|l]) + # + # None of these are not implemented in VTE. + # + # References: HP 2397A + + # HP: + + # HP_MULTIPAGE: + # If set, the terminal has multiple pages of 24 lines of display memory. + # If reset, the terminal only has one page of 24 lines of display memory + # + # Default: reset + # + # References: HP 2397A + mode_GT('HP_MULTIPAGE', 1, default=False), + + # HP_MEMLOCK: + # + # Default: reset + # + # References: HP 2397A + mode_GT('HP_MEMLOCK', 2, default=False), + +] + +# Output generator + +''' Write copyright header ''' +def write_header(outfile): + outfile.write(''' +/* Generated by modes.py; do not edit! */ + +/* + * Copyright © 2018, 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ +''') + + +''' Write sequences ''' +def write_modes(output, mtype): + outfile = open(output.as_posix(), 'w') + write_header(outfile) + outfile.write(''' +#if !defined(MODE) || !defined(MODE_FIXED) +#error "Must define MODE and MODE_FIXED before including this file" +#endif + +''') + + for m in sorted([m for m in modes if m.mtype == mtype], key=lambda m: m.number): + + if m.flags & Flags.WRITABLE: + outfile.write(f'MODE(' + f'{m.name}, ' + f'{m.number})\n') + else: + value = 'ALWAYS_SET' if m.default else 'ALWAYS_RESET' + outfile.write(f'MODE_FIXED(' + f'{m.name}, ' + f'{m.number}, ' + f'{value})\n') + + +# main + +''' main ''' +if __name__ == '__main__': + + parser = argparse.ArgumentParser(description='modes include file generator') + parser.add_argument('--destdir', + type=pathlib.Path, + default=pathlib.PosixPath('.'), + help='Output directory') + + try: + args = parser.parse_args() + except Exception as e: + print(f'Failed to parse arguments: {e}') + sys.exit(1) + + write_modes(args.destdir / "modes-ecma.hh", Type.ECMA) + write_modes(args.destdir / "modes-dec.hh", Type.WHAT) + # write_modes(args.destdir / "modes-hp.hh", Type.GT) diff --git a/src/pango-glue.hh b/src/pango-glue.hh new file mode 100644 index 0000000..f793c1e --- /dev/null +++ b/src/pango-glue.hh @@ -0,0 +1,33 @@ +/* + * Copyright © 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include + +#include "std-glue.hh" + +namespace vte { + +VTE_DECLARE_FREEABLE(PangoAttrList, pango_attr_list_unref); +VTE_DECLARE_FREEABLE(PangoFontDescription, pango_font_description_free); + +#if PANGO_VERSION_CHECK(1, 44, 0) +VTE_DECLARE_FREEABLE(PangoFontMetrics, pango_font_metrics_unref); +#endif + +} // namespace vte diff --git a/src/parser-arg.hh b/src/parser-arg.hh index a61d323..e4d6d3d 100644 --- a/src/parser-arg.hh +++ b/src/parser-arg.hh @@ -2,18 +2,18 @@ * Copyright © 2015 David Herrmann * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once diff --git a/src/parser-c01.hh b/src/parser-c01.hh deleted file mode 100644 index 04dd279..0000000 --- a/src/parser-c01.hh +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright © 2015 David Herrmann - * Copyright © 2018 Christian Persch - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#if !defined(_VTE_SEQ) || !defined(_VTE_NOQ) -#error "Must define _VTE_SEQ and _VTE_NOQ before including this file" -#endif - -_VTE_NOQ(NUL, CONTROL, 0x00, NONE, 0, NONE) -_VTE_NOQ(SOH, CONTROL, 0x01, NONE, 0, NONE) -_VTE_NOQ(STX, CONTROL, 0x02, NONE, 0, NONE) -_VTE_NOQ(ETX, CONTROL, 0x03, NONE, 0, NONE) -_VTE_NOQ(EOT, CONTROL, 0x04, NONE, 0, NONE) -_VTE_NOQ(ENQ, CONTROL, 0x05, NONE, 0, NONE) -_VTE_NOQ(ACK, CONTROL, 0x06, NONE, 0, NONE) -_VTE_SEQ(BEL, CONTROL, 0x07, NONE, 0, NONE) -_VTE_SEQ(BS, CONTROL, 0x08, NONE, 0, NONE) -_VTE_SEQ(HT, CONTROL, 0x09, NONE, 0, NONE) -_VTE_SEQ(LF, CONTROL, 0x0a, NONE, 0, NONE) -_VTE_SEQ(VT, CONTROL, 0x0b, NONE, 0, NONE) -_VTE_SEQ(FF, CONTROL, 0x0c, NONE, 0, NONE) -_VTE_SEQ(CR, CONTROL, 0x0d, NONE, 0, NONE) -_VTE_SEQ(LS1, CONTROL, 0x0e, NONE, 0, NONE) -_VTE_SEQ(LS0, CONTROL, 0x0f, NONE, 0, NONE) -_VTE_NOQ(DLE, CONTROL, 0x10, NONE, 0, NONE) -_VTE_NOQ(DC1, CONTROL, 0x11, NONE, 0, NONE) -_VTE_NOQ(DC2, CONTROL, 0x12, NONE, 0, NONE) -_VTE_NOQ(DC3, CONTROL, 0x13, NONE, 0, NONE) -_VTE_NOQ(DC4, CONTROL, 0x14, NONE, 0, NONE) -_VTE_NOQ(SYN, CONTROL, 0x16, NONE, 0, NONE) -_VTE_NOQ(ETB, CONTROL, 0x17, NONE, 0, NONE) -_VTE_NOQ(EM, CONTROL, 0x19, NONE, 0, NONE) -_VTE_SEQ(SUB, CONTROL, 0x1a, NONE, 0, NONE) -_VTE_NOQ(IS4, CONTROL, 0x1c, NONE, 0, NONE) -_VTE_NOQ(IS3, CONTROL, 0x1d, NONE, 0, NONE) -_VTE_NOQ(IS2, CONTROL, 0x1e, NONE, 0, NONE) -_VTE_NOQ(IS1, CONTROL, 0x1f, NONE, 0, NONE) -_VTE_NOQ(BPH, CONTROL, 0x82, NONE, 0, NONE) -_VTE_NOQ(NBH, CONTROL, 0x83, NONE, 0, NONE) -_VTE_SEQ(IND, CONTROL, 0x84, NONE, 0, NONE) -_VTE_SEQ(NEL, CONTROL, 0x85, NONE, 0, NONE) -_VTE_NOQ(SSA, CONTROL, 0x86, NONE, 0, NONE) -_VTE_NOQ(ESA, CONTROL, 0x87, NONE, 0, NONE) -_VTE_SEQ(HTS, CONTROL, 0x88, NONE, 0, NONE) -_VTE_SEQ(HTJ, CONTROL, 0x89, NONE, 0, NONE) -_VTE_NOQ(VTS, CONTROL, 0x8a, NONE, 0, NONE) -_VTE_NOQ(PLD, CONTROL, 0x8b, NONE, 0, NONE) -_VTE_NOQ(PLU, CONTROL, 0x8c, NONE, 0, NONE) -_VTE_SEQ(RI, CONTROL, 0x8d, NONE, 0, NONE) -_VTE_SEQ(SS2, CONTROL, 0x8e, NONE, 0, NONE) -_VTE_SEQ(SS3, CONTROL, 0x8f, NONE, 0, NONE) -_VTE_NOQ(PU1, CONTROL, 0x91, NONE, 0, NONE) -_VTE_NOQ(PU2, CONTROL, 0x92, NONE, 0, NONE) -_VTE_NOQ(STS, CONTROL, 0x93, NONE, 0, NONE) -_VTE_NOQ(CCH, CONTROL, 0x94, NONE, 0, NONE) -_VTE_NOQ(NAK, CONTROL, 0x95, NONE, 0, NONE) -_VTE_NOQ(SPA, CONTROL, 0x96, NONE, 0, NONE) -_VTE_NOQ(EPA, CONTROL, 0x97, NONE, 0, NONE) -_VTE_NOQ(ST, CONTROL, 0x9c, NONE, 0, NONE) diff --git a/src/parser-cat.cc b/src/parser-cat.cc index 083bc58..afb6fb1 100644 --- a/src/parser-cat.cc +++ b/src/parser-cat.cc @@ -1,15 +1,15 @@ /* * Copyright © 2017, 2018 Christian Persch * - * This programme is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * - * This programme is distributed in the hope that it will be useful, + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -32,9 +33,12 @@ #include "debug.h" #include "glib-glue.hh" +#include "libc-glue.hh" #include "parser.hh" #include "parser-glue.hh" +#include "std-glue.hh" #include "utf8.hh" +#include "vtedefines.hh" enum { #define _VTE_SGR(...) @@ -46,6 +50,12 @@ enum { using namespace std::literals; +enum class DataSyntax { + ECMA48_UTF8, + /* ECMA48_PCTERM, */ + /* ECMA48_ECMA35, */ +}; + char* vte::parser::Sequence::ucs4_to_utf8(gunichar const* str, ssize_t len) const noexcept @@ -176,6 +186,13 @@ private: { } }; + class GreenAttr : private Attribute { + public: + GreenAttr(PrettyPrinter* printer) + : Attribute(printer, "\e[7;32m"s, "\e[27;39m"s) + { } + }; + void print_params(vte::parser::Sequence const& seq) noexcept { @@ -238,6 +255,12 @@ private: m_str.append(buf, len); } + void + print_literal(char const* str) noexcept + { + m_str.append(str); + } + G_GNUC_PRINTF(2, 3) void print_format(char const* format, @@ -381,13 +404,34 @@ public: printout(); } - void operator()(vte::parser::Sequence const& seq) noexcept + void VT(vte::parser::Sequence const& seq) noexcept { print_seq(seq); if (seq.command() == VTE_CMD_LF) printout(); } + void enter_data_syntax(DataSyntax syntax) noexcept + { + switch (syntax) { + default: + break; + } + } + + void leave_data_syntax(DataSyntax syntax, + bool success) noexcept + { + switch (syntax) { + default: + break; + } + } + + void reset() noexcept + { + } + }; // class PrettyPrinter class Linter { @@ -401,7 +445,7 @@ private: va_start(args, format); char* str = g_strdup_vprintf(format, args); va_end(args); - g_printerr("WARNING: %s\n", str); + g_print("WARNING: %s\n", str); g_free(str); } @@ -576,15 +620,15 @@ private: } public: - constexpr Linter() noexcept = default; + Linter() noexcept = default; ~Linter() noexcept = default; - void operator()(vte::parser::Sequence const& seq) noexcept + void VT(vte::parser::Sequence const& seq) noexcept { auto cmd = seq.command(); switch (cmd) { case VTE_CMD_OSC: - if (seq.terminator() == 7 /* BEL */) + if (seq.st() == 7 /* BEL */) warn("OSC terminated by BEL may be ignored; use ST (ESC \\) instead."); break; @@ -610,82 +654,184 @@ public: } } + void enter_data_syntax(DataSyntax syntax) noexcept + { + } + + void leave_data_syntax(DataSyntax syntax, + bool success) noexcept + { + } + + void reset() noexcept + { + } + }; // class Linter class Sink { public: - void operator()(vte::parser::Sequence const& seq) noexcept { } + void VT(vte::parser::Sequence const& seq) noexcept { } + + void enter_data_syntax(DataSyntax syntax) noexcept { } + void leave_data_syntax(DataSyntax syntax, + bool success) noexcept { } + + void reset() noexcept { } }; // class Sink +template class Processor { private: + using Delegate = D; + + D& m_delegate; + size_t m_buffer_size{0}; + bool m_statistics{false}; + bool m_benchmark{false}; + gsize m_seq_stats[VTE_SEQ_N]; gsize m_cmd_stats[VTE_CMD_N]; GArray* m_bench_times; - template - void - process_file_utf8(int fd, - Functor& func) - { - vte::parser::Parser parser{}; - vte::parser::Sequence seq{parser}; + static constexpr const size_t k_buf_overlap = 1u; - gsize const buf_size = 16384; - guchar* buf = g_new0(guchar, buf_size); + vte::base::UTF8Decoder m_utf8_decoder{}; + vte::parser::Parser m_parser{}; + + DataSyntax m_primary_data_syntax{DataSyntax::ECMA48_UTF8}; + DataSyntax m_current_data_syntax{DataSyntax::ECMA48_UTF8}; + + void reset() noexcept + { + switch (m_current_data_syntax) { + case DataSyntax::ECMA48_UTF8: + m_parser.reset(); + m_utf8_decoder.reset(); + break; + + default: + break; + } + + if (m_current_data_syntax != m_primary_data_syntax) { + m_current_data_syntax = m_primary_data_syntax; + reset(); + } + + m_delegate.reset(); + } + + [[gnu::always_inline]] + bool + process_seq(vte::parser::Sequence const& seq) noexcept + { + m_delegate.VT(seq); + return true; + } + + uint8_t const* + process_data_utf8(uint8_t const* const bufstart, + uint8_t const* const bufend, + bool eos) noexcept + { + auto seq = vte::parser::Sequence{m_parser}; + + for (auto sptr = bufstart; sptr < bufend; ) { + switch (m_utf8_decoder.decode(*(sptr++))) { + case vte::base::UTF8Decoder::REJECT_REWIND: + /* Rewind the stream. + * Note that this will never lead to a loop, since in the + * next round this byte *will* be consumed. + */ + --sptr; + [[fallthrough]]; + case vte::base::UTF8Decoder::REJECT: + m_utf8_decoder.reset(); + /* Fall through to insert the U+FFFD replacement character. */ + [[fallthrough]]; + case vte::base::UTF8Decoder::ACCEPT: { + auto ret = m_parser.feed(m_utf8_decoder.codepoint()); + if (G_UNLIKELY(ret < 0)) { + g_printerr("Parser error!\n"); + return bufend; + } + + m_seq_stats[ret]++; + if (ret != VTE_SEQ_NONE) { + m_cmd_stats[seq.command()]++; + if (!process_seq(seq)) + return sptr; + } + break; + } + default: + break; + } + } + + if (eos && + m_utf8_decoder.flush()) { + auto ret = m_parser.feed(m_utf8_decoder.codepoint()); + if (G_UNLIKELY(ret < 0)) { + g_printerr("Parser error!\n"); + return bufend; + } + + m_seq_stats[ret]++; + if (ret != VTE_SEQ_NONE) { + m_cmd_stats[seq.command()]++; + if (!process_seq(seq)) + return bufend; + } + } + + return bufend; + } + + void + process_fd(int fd) + { + auto buf = g_new0(uint8_t, m_buffer_size); auto start_time = g_get_monotonic_time(); - vte::base::UTF8Decoder decoder; - - gsize buf_start = 0; + std::memset(buf, 0, k_buf_overlap); + auto buf_start = k_buf_overlap; for (;;) { - auto len = read(fd, buf + buf_start, buf_size - buf_start); - if (!len) - break; + auto len = read(fd, buf + buf_start, m_buffer_size - buf_start); if (len == -1) { if (errno == EAGAIN) continue; break; } - auto const bufend = buf + len; - for (auto sptr = buf; sptr < bufend; ++sptr) { - switch (decoder.decode(*sptr)) { - case vte::base::UTF8Decoder::REJECT_REWIND: - /* Rewind the stream. - * Note that this will never lead to a loop, since in the - * next round this byte *will* be consumed. - */ - --sptr; - [[fallthrough]]; - case vte::base::UTF8Decoder::REJECT: - decoder.reset(); - /* Fall through to insert the U+FFFD replacement character. */ - [[fallthrough]]; - case vte::base::UTF8Decoder::ACCEPT: { - auto ret = parser.feed(decoder.codepoint()); - if (G_UNLIKELY(ret < 0)) { - g_printerr("Parser error!\n"); - goto out; - } + auto const eos = (len == 0); + uint8_t const* bufstart = buf + buf_start; + auto const bufend = bufstart + len; - m_seq_stats[ret]++; - if (ret != VTE_SEQ_NONE) { - m_cmd_stats[seq.command()]++; - func(seq); - } + for (auto sptr = bufstart; ; ) { + switch (m_current_data_syntax) { + case DataSyntax::ECMA48_UTF8: + sptr = process_data_utf8(sptr, bufend, eos); break; - } default: + g_assert_not_reached(); break; } - } - } - out: + if (sptr == bufend) + break; + } + + if (eos) + break; + + /* Chain buffers by copying data from end of buf to the start */ + std::memmove(buf, buf + buf_start + len - k_buf_overlap, k_buf_overlap); + } int64_t time_spent = g_get_monotonic_time() - start_time; g_array_append_val(m_bench_times, time_spent); @@ -693,11 +839,9 @@ private: g_free(buf); } - template bool process_file(int fd, - int repeat, - Functor& func) + int repeat) { if (fd == STDIN_FILENO && repeat != 1) { g_printerr("Cannot consume STDIN more than once\n"); @@ -706,11 +850,13 @@ private: for (auto i = 0; i < repeat; ++i) { if (i > 0 && lseek(fd, 0, SEEK_SET) != 0) { - g_printerr("Failed to seek: %m\n"); + auto errsv = vte::libc::ErrnoSaver{}; + g_printerr("Failed to seek: %s\n", g_strerror(errsv)); return false; } - process_file_utf8(fd, func); + reset(); + process_fd(fd); } return true; @@ -718,7 +864,14 @@ private: public: - Processor() noexcept + Processor(Delegate& delegate, + size_t buffer_size, + bool statistics, + bool benchmark) noexcept + : m_delegate{delegate}, + m_buffer_size{std::max(buffer_size, k_buf_overlap + 1)}, + m_statistics{statistics}, + m_benchmark{benchmark} { memset(&m_seq_stats, 0, sizeof(m_seq_stats)); memset(&m_cmd_stats, 0, sizeof(m_cmd_stats)); @@ -727,14 +880,17 @@ public: ~Processor() noexcept { + if (m_statistics) + print_statistics(); + if (m_benchmark) + print_benchmark(); + g_array_free(m_bench_times, true); } - template bool process_files(char const* const* filenames, - int repeat, - Functor& func) + int repeat) { bool r = true; if (filenames != nullptr) { @@ -747,11 +903,13 @@ public: } else { fd = open(filename, O_RDONLY); if (fd == -1) { - g_printerr("Error opening file %s: %m\n", filename); + auto errsv = vte::libc::ErrnoSaver{}; + g_printerr("Error opening file %s: %s\n", + filename, g_strerror(errsv)); } } if (fd != -1) { - r = process_file(fd, repeat, func); + r = process_file(fd, repeat); if (fd != STDIN_FILENO) close(fd); if (!r) @@ -759,7 +917,7 @@ public: } } } else { - r = process_file(STDIN_FILENO, repeat, func); + r = process_file(STDIN_FILENO, repeat); } return r; @@ -816,24 +974,9 @@ private: bool m_plain{false}; bool m_quiet{false}; bool m_statistics{false}; + int m_buffer_size{16384}; int m_repeat{1}; - char** m_filenames{nullptr}; - - template - class OptionArg { - private: - T1* m_return_ptr; - T2 m_value; - public: - OptionArg(T1* ptr, T2 v) : m_return_ptr{ptr}, m_value{v} { } - ~OptionArg() { *m_return_ptr = m_value; } - - inline constexpr T2* ptr() noexcept { return &m_value; } - }; - - using BoolArg = OptionArg; - using IntArg = OptionArg; - using StrvArg = OptionArg; + vte::glib::StrvPtr m_filenames{}; public: @@ -841,62 +984,79 @@ public: Options(Options const&) = delete; Options(Options&&) = delete; - ~Options() { - if (m_filenames != nullptr) - g_strfreev(m_filenames); - } + ~Options() = default; - inline constexpr bool benchmark() const noexcept { return m_benchmark; } - inline constexpr bool codepoints() const noexcept { return m_codepoints; } - inline constexpr bool lint() const noexcept { return m_lint; } - inline constexpr bool plain() const noexcept { return m_plain; } - inline constexpr bool quiet() const noexcept { return m_quiet; } - inline constexpr bool statistics() const noexcept { return m_statistics; } - inline constexpr int repeat() const noexcept { return m_repeat; } - inline constexpr char const* const* filenames() const noexcept { return m_filenames; } + inline constexpr bool benchmark() const noexcept { return m_benchmark; } + inline constexpr size_t buffer_size() const noexcept { return m_buffer_size; } + inline constexpr bool codepoints() const noexcept { return m_codepoints; } + inline constexpr bool lint() const noexcept { return m_lint; } + inline constexpr bool plain() const noexcept { return m_plain; } + inline constexpr bool quiet() const noexcept { return m_quiet; } + inline constexpr bool statistics() const noexcept { return m_statistics; } + inline constexpr int repeat() const noexcept { return m_repeat; } + inline char const* const* filenames() const noexcept { return m_filenames.get(); } bool parse(int argc, char* argv[], GError** error) noexcept { - BoolArg benchmark{&m_benchmark, false}; - BoolArg codepoints{&m_codepoints, false}; - BoolArg lint{&m_lint, false}; - BoolArg plain{&m_plain, false}; - BoolArg quiet{&m_quiet, false}; - BoolArg statistics{&m_statistics, false}; - IntArg repeat{&m_repeat, 1}; - StrvArg filenames{&m_filenames, nullptr}; + using BoolOption = vte::ValueGetter; + using IntOption = vte::ValueGetter; + using StrvOption = vte::ValueGetter; + + auto benchmark = BoolOption{m_benchmark, false}; + auto codepoints = BoolOption{m_codepoints, false}; + auto lint = BoolOption{m_lint, false}; + auto plain = BoolOption{m_plain, false}; + auto quiet = BoolOption{m_quiet, false}; + auto statistics = BoolOption{m_statistics, false}; + auto buffer_size = IntOption{m_buffer_size, 16384}; + auto repeat = IntOption{m_repeat, 1}; + auto filenames = StrvOption{m_filenames, nullptr}; + GOptionEntry const entries[] = { - { "benchmark", 'b', 0, G_OPTION_ARG_NONE, benchmark.ptr(), + { "benchmark", 'b', 0, G_OPTION_ARG_NONE, &benchmark, "Measure time spent parsing each file", nullptr }, - { "codepoints", 'u', 0, G_OPTION_ARG_NONE, codepoints.ptr(), + { "buffer-size", 'B', 0, G_OPTION_ARG_INT, &buffer_size, + "Buffer size", "SIZE" }, + { "codepoints", 'u', 0, G_OPTION_ARG_NONE, &codepoints, "Output unicode code points by number", nullptr }, - { "lint", 'l', 0, G_OPTION_ARG_NONE, lint.ptr(), + { "lint", 'l', 0, G_OPTION_ARG_NONE, &lint, "Check input", nullptr }, - { "plain", 'p', 0, G_OPTION_ARG_NONE, plain.ptr(), + { "plain", 'p', 0, G_OPTION_ARG_NONE, &plain, "Output plain text without attributes", nullptr }, - { "quiet", 'q', 0, G_OPTION_ARG_NONE, quiet.ptr(), + { "quiet", 'q', 0, G_OPTION_ARG_NONE, &quiet, "Suppress output except for statistics and benchmark", nullptr }, - { "repeat", 'r', 0, G_OPTION_ARG_INT, repeat.ptr(), + { "repeat", 'r', 0, G_OPTION_ARG_INT, &repeat, "Repeat each file COUNT times", "COUNT" }, - { "statistics", 's', 0, G_OPTION_ARG_NONE, statistics.ptr(), + { "statistics", 's', 0, G_OPTION_ARG_NONE, &statistics, "Output statistics", nullptr }, - { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, filenames.ptr(), + { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &filenames, nullptr, nullptr }, { nullptr }, }; - auto context = g_option_context_new("[FILE…] — parser cat"); - g_option_context_set_help_enabled(context, true); - g_option_context_add_main_entries(context, entries, nullptr); + auto context = vte::take_freeable(g_option_context_new("[FILE…] — parser cat")); + g_option_context_set_help_enabled(context.get(), true); + g_option_context_add_main_entries(context.get(), entries, nullptr); - bool rv = g_option_context_parse(context, &argc, &argv, error); - g_option_context_free(context); - return rv; + return g_option_context_parse(context.get(), &argc, &argv, error); } }; // class Options +template +static bool +process(Options const& options, + D delegate) +{ + auto proc = Processor{delegate, + options.buffer_size(), + options.statistics(), + options.benchmark()}; + + return proc.process_files(options.filenames(), options.repeat()); +} + int main(int argc, char *argv[]) @@ -911,23 +1071,18 @@ main(int argc, return EXIT_FAILURE; } - bool rv; - Processor proc{}; + auto rv = false; if (options.lint()) { - Linter linter{}; - rv = proc.process_files(options.filenames(), 1, linter); + if (options.repeat() != 1) { + g_printerr("Cannot use repeat option for linter\n"); + } else { + rv = process(options, Linter{}); + } } else if (options.quiet()) { - Sink sink{}; - rv = proc.process_files(options.filenames(), options.repeat(), sink); + rv = process(options, Sink{}); } else { - PrettyPrinter pp{options.plain(), options.codepoints()}; - rv = proc.process_files(options.filenames(), options.repeat(), pp); + rv = process(options, PrettyPrinter{options.plain(), options.codepoints()}); } - if (options.statistics()) - proc.print_statistics(); - if (options.benchmark()) - proc.print_benchmark(); - return rv ? EXIT_SUCCESS : EXIT_FAILURE; } diff --git a/src/parser-charset-tables.hh b/src/parser-charset-tables.hh index 1d079f7..f567602 100644 --- a/src/parser-charset-tables.hh +++ b/src/parser-charset-tables.hh @@ -1,24 +1,23 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #define IR(num) VTE_CHARSET_ISO_2375_IR_##num #define DEC(name) VTE_CHARSET_DEC_##name #define NRCS(name) VTE_CHARSET_##name##_NRCS -#define EMPTY VTE_CHARSET_EMPTY #define NA VTE_CHARSET_NONE #define RET VTE_CHARSET_RETURN @@ -52,7 +51,7 @@ static uint8_t const charset_graphic_94[] = { IR(85), IR(86), IR(88), IR(89), IR(90), IR(91), IR(92), IR(93), /* 7/0..7/13 */ IR(94), IR(95), IR(96), IR(98), IR(99), IR(102), IR(103), IR(121), - IR(122), IR(137), IR(141), IR(146), IR(128), IR(147), EMPTY + IR(122), IR(137), IR(141), IR(146), IR(128), IR(147), }; /* 94-character graphic character sets, with second intermediate byte 2/1: @@ -69,10 +68,10 @@ static uint8_t const charset_graphic_94_with_2_1[] = { }; /* 94-character graphic character sets, with second intermediate byte 2/2: - * G0: ESC 2/8 2/1 F - * G1: ESC 2/9 2/1 F - * G2: ESC 2/10 2/1 F - * G3: ESC 2/11 2/1 F + * G0: ESC 2/8 2/2 F + * G1: ESC 2/9 2/2 F + * G2: ESC 2/10 2/2 F + * G3: ESC 2/11 2/2 F * C0: - * C1: - */ @@ -83,10 +82,10 @@ static uint8_t const charset_graphic_94_with_2_2[] = { }; /* 94-character graphic character sets, with second intermediate byte 2/5: - * G0: ESC 2/8 2/1 F - * G1: ESC 2/9 2/1 F - * G2: ESC 2/10 2/1 F - * G3: ESC 2/11 2/1 F + * G0: ESC 2/8 2/5 F + * G1: ESC 2/9 2/5 F + * G2: ESC 2/10 2/5 F + * G3: ESC 2/11 2/5 F * C0: - * C1: - */ @@ -97,10 +96,10 @@ static uint8_t const charset_graphic_94_with_2_5[] = { }; /* 94-character graphic character sets, with second intermediate byte 2/6: - * G0: ESC 2/8 2/1 F - * G1: ESC 2/9 2/1 F - * G2: ESC 2/10 2/1 F - * G3: ESC 2/11 2/1 F + * G0: ESC 2/8 2/6 F + * G1: ESC 2/9 2/6 F + * G2: ESC 2/10 2/6 F + * G3: ESC 2/11 2/6 F * C0: - * C1: - */ @@ -131,9 +130,9 @@ static uint8_t const charset_graphic_96[] = { /* 6/0..6/15 */ IR(200), IR(201), IR(203), IR(204), IR(205), IR(206), IR(226), IR(208), IR(209), IR(227), IR(234), NA, NA, NA, NA, NA, - /* 7/0..7/14 */ + /* 7/0..7/13 */ NA, NA, NA, NA, NA, NA, NA, NA, - NA, NA, NA, NA, NA, IR(129), EMPTY + NA, NA, NA, NA, NA, IR(129), }; /* Multibyte graphic character sets: @@ -156,15 +155,25 @@ static uint8_t const charset_graphic_94_n[] = { /* 4/0..4/15 */ IR(42), IR(58), IR(87_OR_168), IR(149), IR(159), IR(165), IR(169), IR(171), IR(172), IR(183), IR(184), IR(185), IR(186), IR(187), IR(202), IR(228), - /* 5/0..5/15 */ - IR(229), IR(233), NA, NA, NA, NA, NA, NA, - NA, NA, NA, NA, NA, NA, NA, NA, - /* 6/0..6/15 */ - NA, NA, NA, NA, NA, NA, NA, NA, - NA, NA, NA, NA, NA, NA, NA, NA, - /* 7/0..7/14 */ - NA, NA, NA, NA, NA, NA, NA, NA, - NA, NA, NA, NA, NA, NA, EMPTY, + /* 5/0..5/1 */ + IR(229), IR(233), +}; + +/* Multibyte graphic character sets, with third intermediate byte 2/1: + * G0: ESC 2/4 2/8 2/1 F + * G1: ESC 2/4 2/9 2/1 F + * G2: ESC 2/4 2/10 2/1 F + * G3: ESC 2/4 2/11 2/1 F + * C0: - + * C1: - + * + * Note that these are not registed in ISO-IR. + * + * [Source: ecma35lib/ecma35/data/graphdata.py] + */ +static uint8_t const charset_graphic_94_n_with_2_1[] = { + /* 3/0..3/15 */ + NA, VTE_CHARSET_EUCTW_G2, VTE_CHARSET_HKCS_EXT, VTE_CHARSET_MS_950_UTC_EXT }; /* C0 control character sets: @@ -178,7 +187,7 @@ static uint8_t const charset_graphic_94_n[] = { static uint8_t const charset_control_c0[] = { /* 4/0..4/12 */ IR(1), IR(7), IR(48), IR(26), IR(36), IR(106), IR(74), IR(104), - IR(130), IR(132), IR(134), IR(135), IR(140) + IR(130), IR(132), IR(134), IR(135), IR(140), }; /* C1 control character sets: @@ -241,6 +250,5 @@ static uint8_t const charset_ocs_with_2_15[] = { #undef IR #undef DEC #undef NRCS -#undef EMPTY #undef NA #undef RET diff --git a/src/parser-charset.hh b/src/parser-charset.hh index 740beee..b9a989c 100644 --- a/src/parser-charset.hh +++ b/src/parser-charset.hh @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #define IR_NAME(num) ISO_2375_IR_##num @@ -30,6 +30,7 @@ _VTE_CHARSET(NONE) /* See ECMA-35 § 14.4 for the meaning of this */ _VTE_CHARSET(DRCS) +/* See ECMA-35 § 14.1 (and ECMA-6 § 9.2) for the meaning of this */ _VTE_CHARSET(EMPTY) /* Return to ISO-2022 */ @@ -295,6 +296,12 @@ ALIAS(SUPPLEMENTAL_NAME(LATIN_2), IR_NAME(101)) ALIAS(SUPPLEMENTAL_NAME(LATIN_5), IR_NAME(148)) ALIAS(SUPPLEMENTAL_NAME(LATIN_CYRILLIC), IR_NAME(144)) +/* Multi-byte charsets not registered in ISO IR */ + +_VTE_CHARSET(EUCTW_G2) /* 4-byte */ +_VTE_CHARSET(HKCS_EXT) +_VTE_CHARSET(MS_950_UTC_EXT) + /* Other coding systems */ DEC(HPPCL) /* DEC HPPCL emulation mode on DEC LJ250; ESC 2/5 3/8 */ diff --git a/src/parser-cmd.hh b/src/parser-cmd.hh deleted file mode 100644 index c562d7c..0000000 --- a/src/parser-cmd.hh +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Copyright © 2015 David Herrmann - * Copyright © 2018 Christian Persch - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#if !defined(_VTE_CMD) || !defined(_VTE_NOP) -#error "Must define _VTE_CMD and _VTE_NOP before including this file" -#endif - -/* Implemented in VTE: */ - -_VTE_CMD(NONE) /* placeholder */ -_VTE_CMD(GRAPHIC) /* graphics character */ -_VTE_CMD(ACS) /* announce code structure */ -_VTE_CMD(BEL) /* bell */ -_VTE_CMD(BS) /* backspace */ -_VTE_CMD(CBT) /* cursor backward tabulation */ -_VTE_CMD(CHA) /* cursor horizontal absolute */ -_VTE_CMD(CHT) /* cursor horizontal forward tabulation */ -_VTE_CMD(CNL) /* cursor next line */ -_VTE_CMD(CPL) /* cursor previous line */ -_VTE_CMD(CR) /* carriage return */ -_VTE_CMD(CTC) /* cursor tabulation control */ -_VTE_CMD(CUB) /* cursor backward */ -_VTE_CMD(CUD) /* cursor down */ -_VTE_CMD(CUF) /* cursor forward */ -_VTE_CMD(CUP) /* cursor position */ -_VTE_CMD(CUU) /* cursor up */ -_VTE_CMD(CnD) /* Cn-designate */ -_VTE_CMD(DA1) /* primary device attributes */ -_VTE_CMD(DA2) /* secondary device attributes */ -_VTE_CMD(DA3) /* tertiary device attributes */ -_VTE_CMD(DCH) /* delete character */ -_VTE_CMD(DECALN) /* screen alignment pattern */ -_VTE_CMD(DECBI) /* back index */ -_VTE_CMD(DECKPAM) /* keypad application mode */ -_VTE_CMD(DECKPNM) /* keypad numeric mode */ -_VTE_CMD(DECPCTERM_OR_XTERM_RPM) /* pcterm or xterm restore DEC private mode */ -_VTE_CMD(DECRC) /* restore cursor */ -_VTE_CMD(DECREQTPARM) /* request terminal parameters */ -_VTE_CMD(DECRQCRA) /* request checksum of rectangular area */ -_VTE_CMD(DECRQM_DEC) /* request mode dec */ -_VTE_CMD(DECRQM_ECMA) /* request mode ecma */ -_VTE_CMD(DECRQSS) /* request selection or setting */ -_VTE_CMD(DECRQTSR) /* request terminal state report */ -_VTE_CMD(DECSCL) /* select conformance level */ -_VTE_CMD(DECSC) /* save cursor */ -_VTE_CMD(DECSCUSR) /* set cursor style */ -_VTE_CMD(DECSED) /* selective erase in display */ -_VTE_CMD(DECSEL) /* selective erase in line */ -_VTE_CMD(DECSGR) /* DEC select graphics rendition */ -_VTE_CMD(DECSLPP) /* set lines per page */ -_VTE_CMD(DECSLRM_OR_SCOSC) /* set left and right margins or SCO save cursor */ -_VTE_CMD(DECSR) /* secure reset */ -_VTE_CMD(DECST8C) /* set tab at every 8 columns */ -_VTE_CMD(DECSTBM) /* set top and bottom margins */ -_VTE_CMD(DECSTR) /* soft terminal reset */ -_VTE_CMD(DL) /* delete line */ -_VTE_CMD(DOCS) /* designate-other-coding-system */ -_VTE_CMD(DSR_DEC) /* device status report dec */ -_VTE_CMD(DSR_ECMA) /* device status report ecma */ -_VTE_CMD(ECH) /* erase character */ -_VTE_CMD(ED) /* erase in display */ -_VTE_CMD(EL) /* erase in line */ -_VTE_CMD(FF) /* form feed */ -_VTE_CMD(GnDm) /* Gn-designate-9m-charset */ -_VTE_CMD(GnDMm) /* Gn-designate-multibyte-9m-charset */ -_VTE_CMD(HPA) /* horizontal position absolute */ -_VTE_CMD(HPR) /* horizontal position relative */ -_VTE_CMD(HT) /* horizontal tab */ -_VTE_CMD(HTJ) /* character tabulation with justification */ -_VTE_CMD(HTS) /* horizontal tab set */ -_VTE_CMD(HVP) /* horizontal and vertical position */ -_VTE_CMD(ICH) /* insert character */ -_VTE_CMD(IL) /* insert line */ -_VTE_CMD(IND) /* index */ -_VTE_CMD(LF) /* line feed */ -_VTE_CMD(LS0) /* locking shift 0 */ -_VTE_CMD(LS1) /* locking shift 1 */ -_VTE_CMD(LS1R) /* locking shift 1 right */ -_VTE_CMD(LS2) /* locking shift 2 */ -_VTE_CMD(LS2R) /* locking shift 2 right */ -_VTE_CMD(LS3) /* locking shift 3 */ -_VTE_CMD(LS3R) /* locking shift 3 right */ -_VTE_CMD(NEL) /* next line */ -_VTE_CMD(OSC) /* operating-system-command */ -_VTE_CMD(REP) /* repeat */ -_VTE_CMD(RI) /* reverse index */ -_VTE_CMD(RIS) /* reset to initial state */ -_VTE_CMD(RM_DEC) /* reset mode dec */ -_VTE_CMD(RM_ECMA) /* reset mode ecma */ -_VTE_CMD(SCORC) /* SCO restore cursor */ -_VTE_CMD(SCOSC) /* SCO save cursor */ -_VTE_CMD(SCP) /* select character path */ -_VTE_CMD(SD) /* scroll down */ -_VTE_CMD(SD_OR_XTERM_IHMT) /* scroll down or xterm initiate highlight mouse tracking */ -_VTE_CMD(SGR) /* select graphics rendition */ -_VTE_CMD(SM_DEC) /* set mode dec */ -_VTE_CMD(SM_ECMA) /* set mode ecma */ -_VTE_CMD(SPD) /* select presentation directions */ -_VTE_CMD(SS2) /* single shift 2 */ -_VTE_CMD(SS3) /* single shift 3 */ -_VTE_CMD(SUB) /* substitute */ -_VTE_CMD(SU) /* scroll up */ -_VTE_CMD(TBC) /* tab clear */ -_VTE_CMD(TCC) /* tabulation centred on character */ -_VTE_CMD(TSR) /* tabulation stop remove */ -_VTE_CMD(VPA) /* vertical line position absolute */ -_VTE_CMD(VPR) /* vertical line position relative */ -_VTE_CMD(VT) /* vertical tab */ -_VTE_CMD(XTERM_RPM) /* xterm restore DEC private mode */ -_VTE_CMD(XTERM_SPM) /* xterm save DEC private mode */ -_VTE_CMD(XTERM_WM) /* xterm window management */ - -/* Unimplemented in VTE: */ - -_VTE_NOP(ACK) /* acknowledge */ -_VTE_NOP(BPH) /* break permitted here */ -_VTE_NOP(CCH) /* cancel character */ -_VTE_NOP(CMD) /* coding method delimiter */ -_VTE_NOP(CVT) /* cursor line tabulation */ -_VTE_NOP(DAQ) /* define area qualification */ -_VTE_NOP(DC1) /* device control 1 / XON */ -_VTE_NOP(DC2) /* devince control 2 */ -_VTE_NOP(DC3) /* device control 3 / XOFF */ -_VTE_NOP(DC4) /* device control 4 */ -_VTE_NOP(DECAC) /* assign color */ -_VTE_NOP(DECANM) /* ansi mode */ -_VTE_NOP(DECARR) /* auto repeat rate */ -_VTE_NOP(DECATC) /* alternate text color */ -_VTE_NOP(DECAUPSS) /* assign user preferred supplemental sets */ -_VTE_NOP(DECCARA) /* change attributes in rectangular area */ -_VTE_NOP(DECCKD) /* copy key default */ -_VTE_NOP(DECCRA) /* copy rectangular area */ -_VTE_NOP(DECCRTST) /* CRT saver time */ -_VTE_NOP(DECDC) /* delete column */ -_VTE_NOP(DECDHL_BH) /* double width double height line: bottom half */ -_VTE_NOP(DECDHL_TH) /* double width double height line: top half */ -_VTE_NOP(DECDLDA) /* down line load allocation */ -_VTE_NOP(DECDLD) /* dynamically redefinable character sets extension */ -_VTE_NOP(DECDMAC) /* define macro */ -_VTE_NOP(DECDWL) /* double width single height line */ -_VTE_NOP(DECEFR) /* enable filter rectangle */ -_VTE_NOP(DECELF) /* enable local functions */ -_VTE_NOP(DECELR) /* enable locator reporting */ -_VTE_NOP(DECERA) /* erase rectangular area */ -_VTE_NOP(DECES) /* enable session */ -_VTE_NOP(DECFI) /* forward index */ -_VTE_NOP(DECFRA) /* fill rectangular area */ -_VTE_NOP(DECIC) /* insert column */ -_VTE_NOP(DECINVM) /* invoke macro */ -_VTE_NOP(DECKBD) /* keyboard language selection */ -_VTE_NOP(DECLANS) /* load answerback message */ -_VTE_NOP(DECLBAN) /* load banner message */ -_VTE_NOP(DECLBD) /* locator button define */ -_VTE_NOP(DECLFKC) /* local function key control */ -_VTE_NOP(DECLL) /* load leds */ -_VTE_NOP(DECLTOD) /* load time of day */ -_VTE_NOP(DECPAK) /* program alphanumeric key */ -_VTE_NOP(DECPCTERM) /* pcterm */ -_VTE_NOP(DECPFK) /* program function key */ -_VTE_NOP(DECPKA) /* program key action */ -_VTE_NOP(DECPKFMR) /* program key free memory report */ -_VTE_NOP(DECPS) /* play sound */ -_VTE_NOP(DECRARA) /* reverse attributes in rectangular area */ -_VTE_NOP(DECREGIS) /* ReGIS graphics */ -_VTE_NOP(DECRPAK) /* report all modifier/alphanumeric key state */ -_VTE_NOP(DECRPDE) /* report displayed extent */ -_VTE_NOP(DECRPFK) /* report function key definition */ -_VTE_NOP(DECRPKT) /* report key type */ -_VTE_NOP(DECRQDE) /* request display extent */ -_VTE_NOP(DECRQKT) /* request key type */ -_VTE_NOP(DECRQLP) /* request locator position */ -_VTE_NOP(DECRQPKFM) /* request program key free memory */ -_VTE_NOP(DECRQPSR) /* request presentation state report */ -_VTE_NOP(DECRQUPSS) /* request user preferred supplemental set */ -_VTE_NOP(DECRSPS) /* restore presentation state */ -_VTE_NOP(DECRSTS) /* restore terminal state */ -_VTE_NOP(DECSACE) /* select attribute change extent */ -_VTE_NOP(DECSASD) /* select active status display */ -_VTE_NOP(DECSCA) /* select character protection attribute */ -_VTE_NOP(DECSCPP) /* select columns per page */ -_VTE_NOP(DECSCP) /* select communication port */ -_VTE_NOP(DECSCS) /* select communication speed */ -_VTE_NOP(DECSDDT) /* select disconnect delay time */ -_VTE_NOP(DECSDPT) /* select digital printed data type */ -_VTE_NOP(DECSERA) /* selective erase rectangular area */ -_VTE_NOP(DECSEST) /* energy saver time */ -_VTE_NOP(DECSFC) /* select flow control */ -_VTE_NOP(DECSIXEL) /* SIXEL graphics */ -_VTE_NOP(DECSKCV) /* set key click volume */ -_VTE_NOP(DECSLCK) /* set lock key style */ -_VTE_NOP(DECSLE) /* select locator events */ -_VTE_NOP(DECSLRM) /* set left and right margins */ -_VTE_NOP(DECSMBV) /* set margin bell volume */ -_VTE_NOP(DECSMKR) /* select modifier key reporting */ -_VTE_NOP(DECSNLS) /* set lines per screen */ -_VTE_NOP(DECSPMA) /* session page memory allocation */ -_VTE_NOP(DECSPPCS) /* select pro printer character set */ -_VTE_NOP(DECSPP) /* set port parameter */ -_VTE_NOP(DECSPRTT) /* select printer type */ -_VTE_NOP(DECSRFR) /* select refresh rate */ -_VTE_NOP(DECSSCLS) /* set scroll speed */ -_VTE_NOP(DECSSDT) /* select status display line type */ -_VTE_NOP(DECSSL) /* select setup language */ -_VTE_NOP(DECSTGLT) /* select color lookup table */ -_VTE_NOP(DECSTRL) /* set transmit rate limit */ -_VTE_NOP(DECSTUI) /* set terminal unit id */ -_VTE_NOP(DECSWBV) /* set warning bell volume */ -_VTE_NOP(DECSWL) /* single width single height line */ -_VTE_NOP(DECSZS) /* select zero symbol */ -_VTE_NOP(DECTID) /* select terminal id */ -_VTE_NOP(DECTME) /* terminal mode emulation */ -_VTE_NOP(DECTST) /* invoke confidence test */ -_VTE_NOP(DECUDK) /* user defined keys */ -_VTE_NOP(DECUS) /* update session */ -_VTE_NOP(DLE) /* data link escape */ -_VTE_NOP(DMI) /* disable manual input */ -_VTE_NOP(DTA) /* dimension text area */ -_VTE_NOP(EA) /* erase in area */ -_VTE_NOP(EF) /* erase in field */ -_VTE_NOP(EM) /* end of medium */ -_VTE_NOP(EMI) /* enable manual input */ -_VTE_NOP(ENQ) /* enquire */ -_VTE_NOP(EOT) /* end of transmission */ -_VTE_NOP(EPA) /* end of guarded area */ -_VTE_NOP(ESA) /* end of selected area */ -_VTE_NOP(ETB) /* end of transmission block */ -_VTE_NOP(ETX) /* end of text */ -_VTE_NOP(FNK) /* function key */ -_VTE_NOP(FNT) /* font selection */ -_VTE_NOP(GCC) /* graphic character combination */ -_VTE_NOP(GSM) /* graphic size modification */ -_VTE_NOP(GSS) /* graphic size selection */ -_VTE_NOP(HPB) /* horizontal position backward */ -_VTE_NOP(IDCS) /* identify DCS */ -_VTE_NOP(IGS) /* identify graphic subrepertoire */ -_VTE_NOP(INT) /* interrupt */ -_VTE_NOP(IRR) /* identify-revised-registration */ -_VTE_NOP(IS1) /* information separator 1 / unit separator (US) */ -_VTE_NOP(IS2) /* information separator 2 / record separator (RS) */ -_VTE_NOP(IS3) /* information separator 3 / group separator (GS)*/ -_VTE_NOP(IS4) /* information separator 4 / file separator (FS) */ -_VTE_NOP(JFY) /* justify */ -_VTE_NOP(MC_DEC) /* media copy dec */ -_VTE_NOP(MC_ECMA) /* media copy ecma */ -_VTE_NOP(MW) /* message waiting */ -_VTE_NOP(NAK) /* negative acknowledge */ -_VTE_NOP(NBH) /* no break permitted here */ -_VTE_NOP(NP) /* next page */ -_VTE_NOP(NUL) /* nul */ -_VTE_NOP(PEC) /* presentation expand or contract */ -_VTE_NOP(PFS) /* page format selection */ -_VTE_NOP(PLD) /* partial line forward */ -_VTE_NOP(PLU) /* partial line backward */ -_VTE_NOP(PPA) /* page position absolute */ -_VTE_NOP(PPB) /* page position backward */ -_VTE_NOP(PP) /* preceding page */ -_VTE_NOP(PPR) /* page position relative */ -_VTE_NOP(PTX) /* parallel texts */ -_VTE_NOP(PU1) /* private use 1 */ -_VTE_NOP(PU2) /* private use 2 */ -_VTE_NOP(QUAD) /* quad */ -_VTE_NOP(RLOGIN_MML) /* RLogin music macro language */ -_VTE_NOP(SACS) /* set additional character separation */ -_VTE_NOP(SAPV) /* select alternative presentation variants */ -_VTE_NOP(SCO) /* select character orientation */ -_VTE_NOP(SCS) /* set character spacing */ -_VTE_NOP(SDS) /* start directed string */ -_VTE_NOP(SEE) /* select editing extent */ -_VTE_NOP(SEF) /* sheet eject and feed */ -_VTE_NOP(SHS) /* select character spacing */ -_VTE_NOP(SIMD) /* select implicit movement direction */ -_VTE_NOP(SLH) /* set line home */ -_VTE_NOP(SLL) /* set line limit */ -_VTE_NOP(SL) /* scroll left */ -_VTE_NOP(SLS) /* set line spacing */ -_VTE_NOP(SOH) /* start of heading */ -_VTE_NOP(SPA) /* start of protected area */ -_VTE_NOP(SPH) /* set page home */ -_VTE_NOP(SPI) /* spacing increment */ -_VTE_NOP(SPL) /* set page limit */ -_VTE_NOP(SPQR) /* select print quality and rapidity */ -_VTE_NOP(SRCS) /* set reduced character separation */ -_VTE_NOP(SR) /* scroll right */ -_VTE_NOP(SRS) /* start reversed string */ -_VTE_NOP(SSA) /* start of selected area */ -_VTE_NOP(SSU) /* set size unit */ -_VTE_NOP(SSW) /* set space width */ -_VTE_NOP(ST) /* string terminator */ -_VTE_NOP(STAB) /* selective tabulation */ -_VTE_NOP(STS) /* set transmit state */ -_VTE_NOP(STX) /* start of text */ -_VTE_NOP(SVS) /* select line spacing */ -_VTE_NOP(SYN) /* synchronize */ -_VTE_NOP(TAC) /* tabulation aligned centre */ -_VTE_NOP(TALE) /* tabulation aligned leading edge */ -_VTE_NOP(TATE) /* tabulation aligned trailing edge */ -_VTE_NOP(TSS) /* thine space specification */ -_VTE_NOP(VTS) /* line tabulation set */ -_VTE_NOP(VPB) /* line position backward */ -_VTE_NOP(WYCAA) /* redefine character display attribute association */ -_VTE_NOP(WYDHL_BH) /* single width double height line: bottom half */ -_VTE_NOP(WYDHL_TH) /* single width double height line: top half */ -_VTE_NOP(WYLSFNT) /* load soft font */ -_VTE_NOP(WYSCRATE) /* set smooth scroll rate */ -_VTE_NOP(XDGSYNC) /* synchronous update */ -_VTE_NOP(XTERM_CHECKSUM_MODE) /* xterm DECRQCRA checksum mode */ -_VTE_NOP(XTERM_IHMT) /* xterm initiate highlight mouse tracking */ -_VTE_NOP(XTERM_MLHP) /* xterm memory lock hp bugfix */ -_VTE_NOP(XTERM_MUHP) /* xterm memory unlock hp bugfix */ -_VTE_NOP(XTERM_PTRMODE) /* xterm set pointer mode */ -_VTE_NOP(XTERM_RQTCAP) /* xterm request termcap/terminfo */ -_VTE_NOP(XTERM_RRV) /* xterm reset resource value */ -_VTE_NOP(XTERM_RTM) /* xterm reset title mode */ -_VTE_NOP(XTERM_SGFX) /* xterm sixel graphics */ -_VTE_NOP(XTERM_SGR_STACK_POP) /* xterm pop SGR stack */ -_VTE_NOP(XTERM_SGR_STACK_PUSH) /* xterm push SGR stack */ -_VTE_NOP(XTERM_SGR_REPORT) /* xterm SGR report */ -_VTE_NOP(XTERM_SRV) /* xterm set resource value */ -_VTE_NOP(XTERM_STCAP) /* xterm set termcap/terminfo */ -_VTE_NOP(XTERM_STM) /* xterm set title mode */ diff --git a/src/parser-csi.hh b/src/parser-csi.hh deleted file mode 100644 index cb4bda1..0000000 --- a/src/parser-csi.hh +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright © 2015 David Herrmann - * Copyright © 2018 Christian Persch - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#if !defined(_VTE_SEQ) || !defined(_VTE_NOQ) -#error "Must define _VTE_SEQ and _VTE_NOQ before including this file" -#endif - -_VTE_SEQ(ICH, CSI, '@', NONE, 0, NONE ) /* insert-character */ -_VTE_NOQ(SL, CSI, '@', NONE, 1, SPACE ) /* scroll left */ -_VTE_SEQ(CUU, CSI, 'A', NONE, 0, NONE ) /* cursor-up */ -_VTE_NOQ(SR, CSI, 'A', NONE, 1, SPACE ) /* scroll right */ -_VTE_SEQ(CUD, CSI, 'B', NONE, 0, NONE ) /* cursor-down */ -_VTE_NOQ(GSM, CSI, 'B', NONE, 1, SPACE ) /* graphic size modification */ -_VTE_SEQ(CUF, CSI, 'C', NONE, 0, NONE ) /* cursor-forward */ -_VTE_NOQ(GSS, CSI, 'C', NONE, 1, SPACE ) /* graphic size selection */ -_VTE_SEQ(CUB, CSI, 'D', NONE, 0, NONE ) /* cursor-backward */ -_VTE_NOQ(FNT, CSI, 'D', NONE, 1, SPACE ) /* font selection */ -_VTE_SEQ(CNL, CSI, 'E', NONE, 0, NONE ) /* cursor-next-line */ -_VTE_SEQ(CPL, CSI, 'F', NONE, 0, NONE ) /* cursor-previous-line */ -_VTE_NOQ(JFY, CSI, 'F', NONE, 1, SPACE ) /* justify */ -_VTE_NOQ(TSS, CSI, 'E', NONE, 1, SPACE ) /* thine space specification */ -_VTE_SEQ(CHA, CSI, 'G', NONE, 0, NONE ) /* cursor-horizontal-absolute */ -_VTE_NOQ(SPI, CSI, 'G', NONE, 1, SPACE ) /* spacing increment */ -_VTE_SEQ(CUP, CSI, 'H', NONE, 0, NONE ) /* cursor-position */ -_VTE_NOQ(QUAD, CSI, 'H', NONE, 1, SPACE ) /* quad */ -_VTE_SEQ(CHT, CSI, 'I', NONE, 0, NONE ) /* cursor-horizontal-forward-tabulation */ -_VTE_NOQ(SSU, CSI, 'I', NONE, 1, SPACE ) /* set size unit */ -_VTE_SEQ(ED, CSI, 'J', NONE, 0, NONE ) /* erase-in-display */ -_VTE_NOQ(PFS, CSI, 'J', NONE, 1, SPACE ) /* page format selection */ -_VTE_SEQ(DECSED, CSI, 'J', WHAT, 0, NONE ) /* selective-erase-in-display */ -_VTE_SEQ(EL, CSI, 'K', NONE, 0, NONE ) /* erase-in-line */ -_VTE_NOQ(SHS, CSI, 'K', NONE, 1, SPACE ) /* select character spacing */ -_VTE_SEQ(DECSEL, CSI, 'K', WHAT, 0, NONE ) /* selective-erase-in-line */ -_VTE_SEQ(IL, CSI, 'L', NONE, 0, NONE ) /* insert-line */ -_VTE_NOQ(SVS, CSI, 'L', NONE, 1, SPACE ) /* select line spacing */ -_VTE_SEQ(DL, CSI, 'M', NONE, 0, NONE ) /* delete-line */ -_VTE_NOQ(IGS, CSI, 'M', NONE, 1, SPACE ) /* identify graphic subrepertoire */ -_VTE_NOQ(EF, CSI, 'N', NONE, 0, NONE ) /* erase in field */ -_VTE_NOQ(EA, CSI, 'O', NONE, 0, NONE ) /* erase in area */ -_VTE_NOQ(IDCS, CSI, 'O', NONE, 1, SPACE ) /* identify DCS */ -_VTE_SEQ(DCH, CSI, 'P', NONE, 0, NONE ) /* delete-character */ -_VTE_NOQ(PPA, CSI, 'P', NONE, 1, SPACE ) /* page-position-absolute */ -_VTE_NOQ(SEE, CSI, 'Q', NONE, 0, NONE ) /* select editing extent */ -_VTE_NOQ(PPR, CSI, 'Q', NONE, 1, SPACE ) /* page-position-relative */ -_VTE_NOQ(PPB, CSI, 'R', NONE, 1, SPACE ) /* page-position-backward */ -_VTE_SEQ(SU, CSI, 'S', NONE, 0, NONE ) /* scroll-up */ -_VTE_SEQ(SPD, CSI, 'S', NONE, 1, SPACE ) /* select presentation directions */ -_VTE_NOQ(XTERM_SGFX, CSI, 'S', WHAT, 0, NONE ) /* xterm-sixel-graphics */ -_VTE_SEQ(SD_OR_XTERM_IHMT, CSI, 'T', NONE, 0, NONE ) /* scroll-down or xterm-initiate-highlight-mouse-tracking */ -_VTE_NOQ(DTA, CSI, 'T', NONE, 1, SPACE ) /* dimension text area */ -_VTE_NOQ(XTERM_RTM, CSI, 'T', GT, 0, NONE ) /* xterm-reset-title-mode */ -_VTE_NOQ(NP, CSI, 'U', NONE, 0, NONE ) /* next-page */ -_VTE_NOQ(SLH, CSI, 'U', NONE, 1, SPACE ) /* set line home */ -_VTE_NOQ(PP, CSI, 'V', NONE, 0, NONE ) /* preceding-page */ -_VTE_NOQ(SLL, CSI, 'V', NONE, 1, SPACE ) /* set line limit */ -_VTE_SEQ(CTC, CSI, 'W', NONE, 0, NONE ) /* cursor tabulation control */ -_VTE_NOQ(FNK, CSI, 'W', NONE, 1, SPACE ) /* function key */ -_VTE_SEQ(DECST8C, CSI, 'W', WHAT, 0, NONE ) /* set-tab-at-every-8-columns */ -_VTE_SEQ(ECH, CSI, 'X', NONE, 0, NONE ) /* erase-character */ -_VTE_NOQ(SPQR, CSI, 'X', NONE, 1, SPACE ) /* select print quality and rapidity */ -_VTE_NOQ(CVT, CSI, 'Y', NONE, 0, NONE ) /* cursor line tabulation */ -_VTE_NOQ(SEF, CSI, 'Y', NONE, 1, SPACE ) /* sheet eject and feed */ -_VTE_SEQ(CBT, CSI, 'Z', NONE, 0, NONE ) /* cursor-backward-tabulation */ -_VTE_NOQ(PEC, CSI, 'Z', NONE, 1, SPACE ) /* presentation expand or contract */ -_VTE_NOQ(SRS, CSI, '[', NONE, 0, NONE ) /* start reversed string */ -_VTE_NOQ(SSW, CSI, '[', NONE, 1, SPACE ) /* set space width */ -_VTE_NOQ(PTX, CSI, '\\', NONE, 0, NONE ) /* parallel texts */ -_VTE_NOQ(SACS, CSI, '\\', NONE, 1, SPACE ) /* set additional character separation */ -_VTE_NOQ(SDS, CSI, ']', NONE, 0, NONE ) /* start directed string */ -_VTE_NOQ(SAPV, CSI, ']', NONE, 1, SPACE ) /* select alternative presentation variants */ -_VTE_NOQ(SIMD, CSI, '^', NONE, 0, NONE ) /* select implicit movement direction */ -_VTE_NOQ(STAB, CSI, '^', NONE, 1, SPACE ) /* selective tabulation */ -_VTE_NOQ(GCC, CSI, '_', NONE, 1, SPACE ) /* graphic character combination */ -_VTE_SEQ(HPA, CSI, '`', NONE, 0, NONE ) /* horizontal-position-absolute */ -_VTE_NOQ(TATE, CSI, '`', NONE, 1, SPACE ) /* tabulation-aligned-trailing-edge */ -_VTE_SEQ(HPR, CSI, 'a', NONE, 0, NONE ) /* horizontal-position-relative */ -_VTE_NOQ(TALE, CSI, 'a', NONE, 1, SPACE ) /* tabulation-aligned-leading-edge */ -_VTE_SEQ(REP, CSI, 'b', NONE, 0, NONE ) /* repeat */ -_VTE_NOQ(TAC, CSI, 'b', NONE, 1, SPACE ) /* tabulation-aligned-centre */ -_VTE_SEQ(DA1, CSI, 'c', NONE, 0, NONE ) /* primary-device-attributes */ -_VTE_SEQ(TCC, CSI, 'c', NONE, 1, SPACE ) /* tabulation-centred-on-character */ -_VTE_SEQ(DA3, CSI, 'c', EQUAL, 0, NONE ) /* tertiary-device-attributes */ -_VTE_SEQ(DA2, CSI, 'c', GT, 0, NONE ) /* secondary-device-attributes */ -_VTE_SEQ(VPA, CSI, 'd', NONE, 0, NONE ) /* vertical-line-position-absolute */ -_VTE_SEQ(TSR, CSI, 'd', NONE, 1, SPACE ) /* tabulation-stop-remove */ -_VTE_SEQ(VPR, CSI, 'e', NONE, 0, NONE ) /* vertical-line-position-relative */ -_VTE_NOQ(SCO, CSI, 'e', NONE, 1, SPACE ) /* select character orientation */ -_VTE_SEQ(HVP, CSI, 'f', NONE, 0, NONE ) /* horizontal-and-vertical-position */ -_VTE_NOQ(SRCS, CSI, 'f', NONE, 1, SPACE ) /* set reduced character separation */ -_VTE_SEQ(TBC, CSI, 'g', NONE, 0, NONE ) /* tab-clear */ -_VTE_NOQ(SCS, CSI, 'g', NONE, 1, SPACE ) /* set character spacing */ -_VTE_NOQ(DECLFKC, CSI, 'g', NONE, 1, MULT ) /* local-function-key-control */ -_VTE_SEQ(SM_ECMA, CSI, 'h', NONE, 0, NONE ) /* set-mode-ecma */ -_VTE_NOQ(SLS, CSI, 'h' , NONE, 1, SPACE ) /* set line spacing */ -_VTE_SEQ(SM_DEC, CSI, 'h', WHAT, 0, NONE ) /* set-mode-dec */ -_VTE_NOQ(MC_ECMA, CSI, 'i', NONE, 0, NONE ) /* media-copy-ecma */ -_VTE_NOQ(SPH, CSI, 'i', NONE, 1, SPACE ) /* set page home */ -_VTE_NOQ(MC_DEC, CSI, 'i', WHAT, 0, NONE ) /* media-copy-dec */ -_VTE_NOQ(HPB, CSI, 'j', NONE, 0, NONE ) /* horizontal position backward */ -_VTE_NOQ(SPL, CSI, 'j', NONE, 1, SPACE ) /* set page limit */ -_VTE_NOQ(VPB, CSI, 'k', NONE, 0, NONE ) /* line position backward */ -_VTE_SEQ(SCP, CSI, 'k', NONE, 1, SPACE ) /* select character path */ -_VTE_SEQ(RM_ECMA, CSI, 'l', NONE, 0, NONE ) /* reset-mode-ecma */ -_VTE_SEQ(RM_DEC, CSI, 'l', WHAT, 0, NONE ) /* reset-mode-dec */ -_VTE_SEQ(SGR, CSI, 'm', NONE, 0, NONE ) /* select-graphics-rendition */ -_VTE_NOQ(DECSGR, CSI, 'm', WHAT, 0, NONE ) /* DEC select graphics rendition */ -_VTE_NOQ(XTERM_SRV, CSI, 'm', GT, 0, NONE ) /* xterm-set-resource-value */ -_VTE_SEQ(DSR_ECMA, CSI, 'n', NONE, 0, NONE ) /* device-status-report-ecma */ -_VTE_NOQ(XTERM_RRV, CSI, 'n', GT, 0, NONE ) /* xterm-reset-resource-value */ -_VTE_SEQ(DSR_DEC, CSI, 'n', WHAT, 0, NONE ) /* device-status-report-dec */ -_VTE_NOQ(DAQ, CSI, 'o', NONE, 0, NONE ) /* define area qualification */ -_VTE_NOQ(DECSSL, CSI, 'p', NONE, 0, NONE ) /* select-setup-language */ -_VTE_NOQ(DECSSCLS, CSI, 'p', NONE, 1, SPACE ) /* set-scroll-speed */ -_VTE_SEQ(DECSTR, CSI, 'p', NONE, 1, BANG ) /* soft-terminal-reset */ -_VTE_SEQ(DECSCL, CSI, 'p', NONE, 1, DQUOTE ) /* select-conformance-level */ -_VTE_SEQ(DECRQM_ECMA, CSI, 'p', NONE, 1, CASH ) /* request-mode-ecma */ -_VTE_NOQ(DECSDPT, CSI, 'p', NONE, 1, PCLOSE ) /* select-digital-printed-data-type */ -_VTE_NOQ(DECSPPCS, CSI, 'p', NONE, 1, MULT ) /* select-pro-printer-character-set */ -_VTE_SEQ(DECSR, CSI, 'p', NONE, 1, PLUS ) /* secure-reset */ -_VTE_NOQ(DECLTOD, CSI, 'p', NONE, 1, COMMA ) /* load-time-of-day */ -_VTE_NOQ(DECARR, CSI, 'p', NONE, 1, MINUS ) /* auto repeat rate */ -_VTE_NOQ(XTERM_PTRMODE, CSI, 'p', GT, 0, NONE ) /* xterm set pointer mode */ -_VTE_SEQ(DECRQM_DEC, CSI, 'p', WHAT, 1, CASH ) /* request-mode-dec */ -_VTE_NOQ(DECLL, CSI, 'q', NONE, 0, NONE ) /* load-leds */ -_VTE_SEQ(DECSCUSR, CSI, 'q', NONE, 1, SPACE ) /* set-cursor-style */ -_VTE_NOQ(DECSCA, CSI, 'q', NONE, 1, DQUOTE ) /* select-character-protection-attribute */ -_VTE_NOQ(DECSDDT, CSI, 'q', NONE, 1, CASH ) /* select-disconnect-delay-time */ -_VTE_SEQ(DECSR, CSI, 'q', NONE, 1, MULT ) /* secure-reset */ -_VTE_NOQ(DECELF, CSI, 'q', NONE, 1, PLUS ) /* enable-local-functions */ -_VTE_NOQ(DECTID, CSI, 'q', NONE, 1, COMMA ) /* select-terminal-id */ -_VTE_NOQ(DECCRTST, CSI, 'q', NONE, 1, MINUS ) /* CRT saver time */ -_VTE_SEQ(DECSTBM, CSI, 'r', NONE, 0, NONE ) /* set-top-and-bottom-margins */ -_VTE_NOQ(DECSKCV, CSI, 'r', NONE, 1, SPACE ) /* set-key-click-volume */ -_VTE_NOQ(DECCARA, CSI, 'r', NONE, 1, CASH ) /* change-attributes-in-rectangular-area */ -_VTE_NOQ(DECSCS, CSI, 'r', NONE, 1, MULT ) /* select-communication-speed */ -_VTE_NOQ(DECSMKR, CSI, 'r', NONE, 1, PLUS ) /* select-modifier-key-reporting */ -_VTE_NOQ(DECSEST, CSI, 'r', NONE, 1, MINUS ) /* energy saver time */ -_VTE_SEQ(DECPCTERM_OR_XTERM_RPM, CSI, 'r', WHAT, 0, NONE ) /* pcterm or xterm restore DEC private mode */ -_VTE_SEQ(DECSLRM_OR_SCOSC, CSI, 's', NONE, 0, NONE ) /* set left and right margins or SCO save cursor */ -_VTE_NOQ(DECSPRTT, CSI, 's', NONE, 1, CASH ) /* select-printer-type */ -_VTE_NOQ(DECSFC, CSI, 's', NONE, 1, MULT ) /* select-flow-control */ -_VTE_SEQ(XTERM_SPM, CSI, 's', WHAT, 0, NONE ) /* xterm save private mode */ -_VTE_SEQ(XTERM_WM, CSI, 't', NONE, 0, NONE ) /* xterm-window-management */ -_VTE_NOQ(DECSWBV, CSI, 't', NONE, 1, SPACE ) /* set-warning-bell-volume */ -_VTE_NOQ(DECSRFR, CSI, 't', NONE, 1, DQUOTE ) /* select-refresh-rate */ -_VTE_NOQ(DECRARA, CSI, 't', NONE, 1, CASH ) /* reverse-attributes-in-rectangular-area */ -_VTE_NOQ(XTERM_STM, CSI, 't', GT, 0, NONE ) /* xterm-set-title-mode */ -_VTE_SEQ(SCORC, CSI, 'u', NONE, 0, NONE ) /* SCO restore cursor */ -_VTE_NOQ(DECSMBV, CSI, 'u', NONE, 1, SPACE ) /* set-margin-bell-volume */ -_VTE_NOQ(DECSTRL, CSI, 'u', NONE, 1, DQUOTE ) /* set-transmit-rate-limit */ -_VTE_SEQ(DECRQTSR, CSI, 'u', NONE, 1, CASH ) /* request-terminal-state-report */ -_VTE_NOQ(DECSCP, CSI, 'u', NONE, 1, MULT ) /* select-communication-port */ -_VTE_NOQ(DECRQKT, CSI, 'u', NONE, 1, COMMA ) /* request-key-type */ -_VTE_NOQ(DECRQUPSS, CSI, 'u', WHAT, 0, NONE ) /* request-user-preferred-supplemental-set */ -_VTE_NOQ(DECSLCK, CSI, 'v', NONE, 1, SPACE ) /* set-lock-key-style */ -_VTE_NOQ(DECRQDE, CSI, 'v', NONE, 1, DQUOTE ) /* request-display-extent */ -_VTE_NOQ(DECCRA, CSI, 'v', NONE, 1, CASH ) /* copy-rectangular-area */ -_VTE_NOQ(DECRPKT, CSI, 'v', NONE, 1, COMMA ) /* report-key-type */ -_VTE_NOQ(WYCAA, CSI, 'w', NONE, 0, NONE ) /* redefine character display attribute association */ -_VTE_NOQ(DECRPDE, CSI, 'w', NONE, 1, DQUOTE ) /* report displayed extent */ -_VTE_NOQ(DECRQPSR, CSI, 'w', NONE, 1, CASH ) /* request-presentation-state-report */ -_VTE_NOQ(DECEFR, CSI, 'w', NONE, 1, SQUOTE ) /* enable-filter-rectangle */ -_VTE_NOQ(DECSPP, CSI, 'w', NONE, 1, PLUS ) /* set-port-parameter */ -_VTE_SEQ(DECREQTPARM, CSI, 'x', NONE, 0, NONE ) /* request-terminal-parameters */ -_VTE_NOQ(DECFRA, CSI, 'x', NONE, 1, CASH ) /* fill-rectangular-area */ -_VTE_NOQ(DECES, CSI, 'x', NONE, 1, AND ) /* enable session */ -_VTE_NOQ(DECSACE, CSI, 'x', NONE, 1, MULT ) /* select-attribute-change-extent */ -_VTE_NOQ(DECRQPKFM, CSI, 'x', NONE, 1, PLUS ) /* request-program-key-free-memory */ -_VTE_NOQ(DECSPMA, CSI, 'x', NONE, 1, COMMA ) /* session page memory allocation */ -_VTE_NOQ(DECTST, CSI, 'y', NONE, 0, NONE ) /* invoke-confidence-test */ -_VTE_NOQ(XTERM_CHECKSUM_MODE, CSI, 'y', NONE, 1, HASH ) /* xterm DECRQCRA checksum mode */ -_VTE_SEQ(DECRQCRA, CSI, 'y', NONE, 1, MULT ) /* request-checksum-of-rectangular-area */ -_VTE_NOQ(DECPKFMR, CSI, 'y', NONE, 1, PLUS ) /* program-key-free-memory-report */ -_VTE_NOQ(DECUS, CSI, 'y', NONE, 1, COMMA ) /* update session */ -_VTE_NOQ(WYSCRATE, CSI, 'z', NONE, 0, NONE ) /* set smooth scroll rate */ -_VTE_NOQ(DECERA, CSI, 'z', NONE, 1, CASH ) /* erase-rectangular-area */ -_VTE_NOQ(DECELR, CSI, 'z', NONE, 1, SQUOTE ) /* enable-locator-reporting */ -_VTE_NOQ(DECINVM, CSI, 'z', NONE, 1, MULT ) /* invoke-macro */ -_VTE_NOQ(DECPKA, CSI, 'z', NONE, 1, PLUS ) /* program-key-action */ -_VTE_NOQ(DECDLDA, CSI, 'z', NONE, 1, COMMA ) /* down line load allocation */ -_VTE_NOQ(XTERM_SGR_STACK_PUSH, CSI, '{', NONE, 1, HASH ) /* push SGR stack */ -_VTE_NOQ(DECSERA, CSI, '{', NONE, 1, CASH ) /* selective-erase-rectangular-area */ -_VTE_NOQ(DECSLE, CSI, '{', NONE, 1, SQUOTE ) /* select-locator-events */ -_VTE_NOQ(DECSTGLT, CSI, '{', NONE, 1, PCLOSE ) /* select color lookup table */ -_VTE_NOQ(DECSZS, CSI, '{', NONE, 1, COMMA ) /* select zero symbol */ -_VTE_NOQ(XTERM_SGR_REPORT, CSI, '|', NONE, 1, HASH ) /* SGR report */ -_VTE_NOQ(DECSCPP, CSI, '|', NONE, 1, CASH ) /* select-columns-per-page */ -_VTE_NOQ(DECRQLP, CSI, '|', NONE, 1, SQUOTE ) /* request-locator-position */ -_VTE_NOQ(DECSNLS, CSI, '|', NONE, 1, MULT ) /* set-lines-per-screen */ -_VTE_NOQ(DECAC, CSI, '|', NONE, 1, COMMA ) /* assign color */ -_VTE_NOQ(DECKBD, CSI, '}', NONE, 1, SPACE ) /* keyboard-language-selection */ -_VTE_NOQ(XTERM_SGR_STACK_POP, CSI, '}', NONE, 1, HASH ) /* pop SGR stack */ -_VTE_NOQ(DECSASD, CSI, '}', NONE, 1, CASH ) /* select-active-status-display */ -_VTE_NOQ(DECIC, CSI, '}', NONE, 1, SQUOTE ) /* insert-column */ -_VTE_NOQ(DECATC, CSI, '}', NONE, 1, COMMA ) /* alternate text color */ -_VTE_NOQ(DECTME, CSI, '~', NONE, 1, SPACE ) /* terminal-mode-emulation */ -_VTE_NOQ(DECSSDT, CSI, '~', NONE, 1, CASH ) /* select-status-display-line-type */ -_VTE_NOQ(DECDC, CSI, '~', NONE, 1, SQUOTE ) /* delete-column */ -_VTE_NOQ(DECPS, CSI, '~', NONE, 1, COMMA ) /* play sound */ diff --git a/src/parser-dcs.hh b/src/parser-dcs.hh deleted file mode 100644 index 6ce2e74..0000000 --- a/src/parser-dcs.hh +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright © 2015 David Herrmann - * Copyright © 2018 Christian Persch - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#if !defined(_VTE_SEQ) || !defined(_VTE_NOQ) -#error "Must define _VTE_SEQ and _VTE_NOQ before including this file" -#endif - -_VTE_NOQ(RLOGIN_MML, DCS, 'm', NONE, 1, HASH ) /* RLogin music macro language */ -_VTE_NOQ(DECREGIS, DCS, 'p', NONE, 0, NONE ) /* ReGIS-graphics */ -_VTE_NOQ(DECRSTS, DCS, 'p', NONE, 1, CASH ) /* restore-terminal-state */ -_VTE_NOQ(XTERM_STCAP, DCS, 'p', NONE, 1, PLUS ) /* xterm set termcap/terminfo */ -_VTE_NOQ(DECSIXEL, DCS, 'q', NONE, 0, NONE ) /* SIXEL-graphics */ -_VTE_SEQ(DECRQSS, DCS, 'q', NONE, 1, CASH ) /* request-selection-or-setting */ -_VTE_NOQ(XTERM_RQTCAP, DCS, 'q', NONE, 1, PLUS ) /* xterm request termcap/terminfo */ -_VTE_NOQ(DECLBAN, DCS, 'r', NONE, 0, NONE ) /* load-banner-message */ -_VTE_SEQ(DECRQTSR, DCS, 's', NONE, 1, CASH ) /* request-terminal-state-report */ -_VTE_SEQ(XDGSYNC, DCS, 's', EQUAL, 0, NONE ) /* synchronous update */ -_VTE_NOQ(DECRSPS, DCS, 't', NONE, 1, CASH ) /* restore-presentation-state */ -_VTE_NOQ(DECAUPSS, DCS, 'u', NONE, 1, BANG ) /* assign-user-preferred-supplemental-sets */ -_VTE_NOQ(DECLANS, DCS, 'v', NONE, 0, NONE ) /* load-answerback-message */ -_VTE_NOQ(DECLBD, DCS, 'w', NONE, 0, NONE ) /* locator-button-define */ -_VTE_NOQ(DECPFK, DCS, 'x', NONE, 1, DQUOTE ) /* program-function-key */ -_VTE_NOQ(DECPAK, DCS, 'y', NONE, 1, DQUOTE ) /* program-alphanumeric-key */ -_VTE_NOQ(DECDMAC, DCS, 'z', NONE, 1, BANG ) /* define-macro */ -_VTE_NOQ(DECCKD, DCS, 'z', NONE, 1, DQUOTE ) /* copy-key-default */ -_VTE_NOQ(DECDLD, DCS, '{', NONE, 0, NONE ) /* dynamically-redefinable-character-sets-extension */ -_VTE_NOQ(DECSTUI, DCS, '{', NONE, 1, BANG ) /* set-terminal-unit-id */ -_VTE_NOQ(DECUDK, DCS, '|', NONE, 0, NONE ) /* user-defined-keys */ -_VTE_NOQ(WYLSFNT, DCS, '}', NONE, 0, NONE ) /* load soft font */ -_VTE_NOQ(DECRPFK, DCS, '}', NONE, 1, DQUOTE ) /* report function key definition */ -_VTE_NOQ(DECRPAK, DCS, '~', NONE, 1, DQUOTE ) /* report all modifier/alphanumeric key state */ diff --git a/src/parser-decsgr.hh b/src/parser-decsgr.hh index e6f8f9e..fbf152a 100644 --- a/src/parser-decsgr.hh +++ b/src/parser-decsgr.hh @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License) or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * - * This library is distributed in the hope that it will be useful) + * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not) see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #if !defined(_VTE_SGR) || !defined(_VTE_NGR) diff --git a/src/parser-esc.hh b/src/parser-esc.hh deleted file mode 100644 index 7eefe8e..0000000 --- a/src/parser-esc.hh +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright © 2015 David Herrmann - * Copyright © 2018 Christian Persch - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#if !defined(_VTE_SEQ) || !defined(_VTE_NOQ) -#error "Must define _VTE_SEQ and _VTE_NOQ before including this file" -#endif - -_VTE_NOQ(DECDHL_TH, ESCAPE, '3', NONE, 1, HASH ) /* double-width-double-height-line: top half */ -_VTE_NOQ(DECDHL_BH, ESCAPE, '4', NONE, 1, HASH ) /* double-width-double-height-line: bottom half */ -_VTE_NOQ(DECSWL, ESCAPE, '5', NONE, 1, HASH ) /* single-width-single-height-line */ -_VTE_SEQ(DECBI, ESCAPE, '6', NONE, 0, NONE ) /* back-index */ -_VTE_NOQ(DECDWL, ESCAPE, '6', NONE, 1, HASH ) /* double-width-single-height-line */ -_VTE_SEQ(DECSC, ESCAPE, '7', NONE, 0, NONE ) /* save-cursor */ -_VTE_SEQ(DECRC, ESCAPE, '8', NONE, 0, NONE ) /* restore-cursor */ -_VTE_SEQ(DECALN, ESCAPE, '8', NONE, 1, HASH ) /* screen-alignment-pattern */ -_VTE_NOQ(DECFI, ESCAPE, '9', NONE, 0, NONE ) /* forward-index */ -_VTE_NOQ(WYDHL_TH, ESCAPE, ':', NONE, 0, HASH ) /* single width double height line: top half */ -_VTE_NOQ(WYDHL_BH, ESCAPE, ';', NONE, 0, HASH ) /* single width double height line: bottom half */ -_VTE_NOQ(DECANM, ESCAPE, '<', NONE, 0, NONE ) /* ansi-mode */ -_VTE_SEQ(DECKPAM, ESCAPE, '=', NONE, 0, NONE ) /* keypad-application-mode */ -_VTE_SEQ(DECKPNM, ESCAPE, '>', NONE, 0, NONE ) /* keypad-numeric-mode */ -_VTE_NOQ(BPH, ESCAPE, 'B', NONE, 0, NONE ) /* break permitted here */ -_VTE_NOQ(NBH, ESCAPE, 'C', NONE, 0, NONE ) /* no break permitted here */ -_VTE_SEQ(IND, ESCAPE, 'D', NONE, 0, NONE ) /* index */ -_VTE_SEQ(NEL, ESCAPE, 'E', NONE, 0, NONE ) /* next-line */ -_VTE_NOQ(SSA, ESCAPE, 'F', NONE, 0, NONE ) /* start of selected area */ -_VTE_NOQ(ESA, ESCAPE, 'G', NONE, 0, NONE ) /* end of selected area */ -_VTE_SEQ(HTS, ESCAPE, 'H', NONE, 0, NONE ) /* horizontal-tab-set */ -_VTE_NOQ(HTJ, ESCAPE, 'I', NONE, 0, NONE ) /* character tabulation with justification */ -_VTE_NOQ(VTS, ESCAPE, 'J', NONE, 0, NONE ) /* line tabulation set */ -_VTE_NOQ(PLD, ESCAPE, 'K', NONE, 0, NONE ) /* partial line forward */ -_VTE_NOQ(PLU, ESCAPE, 'L', NONE, 0, NONE ) /* partial line backward */ -_VTE_SEQ(RI, ESCAPE, 'M', NONE, 0, NONE ) /* reverse-index */ -_VTE_SEQ(SS2, ESCAPE, 'N', NONE, 0, NONE ) /* single-shift-2 */ -_VTE_SEQ(SS3, ESCAPE, 'O', NONE, 0, NONE ) /* single-shift-3 */ -_VTE_NOQ(PU1, ESCAPE, 'Q', NONE, 0, NONE ) /* private use 1 */ -_VTE_NOQ(PU2, ESCAPE, 'R', NONE, 0, NONE ) /* private use 2 */ -_VTE_NOQ(STS, ESCAPE, 'S', NONE, 0, NONE ) /* set transmit state */ -_VTE_NOQ(CCH, ESCAPE, 'T', NONE, 0, NONE ) /* cancel character */ -_VTE_NOQ(MW, ESCAPE, 'U', NONE, 0, NONE ) /* message waiting */ -_VTE_NOQ(SPA, ESCAPE, 'V', NONE, 0, NONE ) /* start-of-protected-area */ -_VTE_NOQ(EPA, ESCAPE, 'W', NONE, 0, NONE ) /* end-of-guarded-area */ -_VTE_NOQ(ST, ESCAPE, '\\', NONE, 0, NONE ) /* string-terminator */ -_VTE_NOQ(DMI, ESCAPE, '`', NONE, 0, NONE ) /* disable manual input */ -_VTE_NOQ(INT, ESCAPE, 'a', NONE, 0, NONE ) /* interrupt */ -_VTE_NOQ(EMI, ESCAPE, 'b', NONE, 0, NONE ) /* enable manual input */ -_VTE_SEQ(RIS, ESCAPE, 'c', NONE, 0, NONE ) /* reset-to-initial-state */ -_VTE_NOQ(CMD, ESCAPE, 'd', NONE, 0, NONE ) /* coding-method-delimiter */ -_VTE_NOQ(XTERM_MLHP, ESCAPE, 'l', NONE, 0, NONE ) /* xterm-memory-lock-hp-bugfix */ -_VTE_NOQ(XTERM_MUHP, ESCAPE, 'm', NONE, 0, NONE ) /* xterm-memory-unlock-hp-bugfix */ -_VTE_SEQ(LS2, ESCAPE, 'n', NONE, 0, NONE ) /* locking-shift-2 */ -_VTE_SEQ(LS3, ESCAPE, 'o', NONE, 0, NONE ) /* locking-shift-3 */ -_VTE_SEQ(LS3R, ESCAPE, '|', NONE, 0, NONE ) /* locking-shift-3-right */ -_VTE_SEQ(LS2R, ESCAPE, '}', NONE, 0, NONE ) /* locking-shift-2-right */ -_VTE_SEQ(LS1R, ESCAPE, '~', NONE, 0, NONE ) /* locking-shift-1-right */ diff --git a/src/parser-glue.hh b/src/parser-glue.hh index 90c4137..b31755e 100644 --- a/src/parser-glue.hh +++ b/src/parser-glue.hh @@ -1,18 +1,18 @@ /* * Copyright © 2017, 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -27,397 +27,6 @@ namespace vte { namespace parser { -class Sequence; - -class Parser { -public: - friend class Sequence; - - Parser() noexcept - { - vte_parser_init(&m_parser); - } - Parser(Parser const&) = delete; - Parser(Parser&&) = delete; - - ~Parser() noexcept - { - vte_parser_deinit(&m_parser); - } - - Parser& operator=(Parser const&) = delete; - Parser& operator=(Parser&&) = delete; - - inline int feed(uint32_t raw) noexcept - { - return vte_parser_feed(&m_parser, raw); - } - - inline void reset() noexcept - { - vte_parser_reset(&m_parser); - } - -protected: - vte_parser_t m_parser; -}; // class Parser - -class Sequence { -public: - - Sequence() = default; - Sequence(Sequence const&) = delete; - Sequence(Sequence&&) = delete; - ~Sequence() = default; - - Sequence(Parser& parser) - { - m_seq = &parser.m_parser.seq; - } - - typedef int number; - - char* ucs4_to_utf8(gunichar const* str, - ssize_t len = -1) const noexcept; - - void print() const noexcept; - - /* type: - * - * - * Returns: the type of the sequence, a value from the VTE_SEQ_* enum - */ - inline constexpr unsigned int type() const noexcept - { - return m_seq->type; - } - - /* command: - * - * Returns: the command the sequence codes for, a value - * from the VTE_CMD_* enum, or %VTE_CMD_NONE if the command is - * unknown - */ - inline constexpr unsigned int command() const noexcept - { - return m_seq->command; - } - - /* charset: - * - * This is the charset to use in a %VTE_CMD_GnDm, %VTE_CMD_GnDMm, - * %VTE_CMD_CnD or %VTE_CMD_DOCS command. - * - * Returns: the charset, a value from the VTE_CHARSET_* enum. - */ - inline constexpr unsigned int charset() const noexcept - { - return VTE_CHARSET_GET_CHARSET(m_seq->charset); - } - - /* slot: - * - * This is the slot in a %VTE_CMD_GnDm, %VTE_CMD_GnDMm, - * or %VTE_CMD_CnD command. - * - * Returns: the slot, a value from the 0..3 for Gn*, or 0..1 for CnD - */ - inline constexpr unsigned int slot() const noexcept - { - return VTE_CHARSET_GET_SLOT(m_seq->charset); - } - - /* introducer: - * - * This is the character introducing the sequence, if any. - * - * Returns: the introducing character - */ - inline constexpr uint32_t introducer() const noexcept - { - return m_seq->introducer; - } - - /* terminator: - * - * This is the character terminating the sequence, or, for a - * %VTE_SEQ_GRAPHIC sequence, the graphic character. - * - * Returns: the terminating character - */ - inline constexpr uint32_t terminator() const noexcept - { - return m_seq->terminator; - } - - - /* is_c1: - * - * Whether the sequence was introduced with a C0 or C1 control. - * - * Returns: the introducing character - */ - inline constexpr bool is_c1() const noexcept - { - return (introducer() & 0x80) != 0; - } - - /* intermediates: - * - * This is the pintro and intermediate characters in the sequence, if any. - * - * Returns: the intermediates - */ - inline constexpr unsigned int intermediates() const noexcept - { - return m_seq->intermediates; - } - - // FIXMEchpe: upgrade to C++17 and use the u32string_view version below, instead - /* - * string: - * - * This is the string argument of a DCS or OSC sequence. - * - * Returns: the string argument - */ - inline std::u32string string() const noexcept - { - size_t len; - auto buf = vte_seq_string_get(&m_seq->arg_str, &len); - return std::u32string(reinterpret_cast(buf), len); - } - - #if 0 - /* - * string: - * - * This is the string argument of a DCS or OSC sequence. - * - * Returns: the string argument - */ - inline constexpr std::u32string_view string() const noexcept - { - size_t len = 0; - auto buf = vte_seq_string_get(&m_seq->arg_str, &len); - return std::u32string_view(buf, len); - } - #endif - - /* - * string: - * - * This is the string argument of a DCS or OSC sequence. - * - * Returns: the string argument - */ - std::string string_utf8() const noexcept; - - inline char* string_param() const noexcept - { - size_t len = 0; - auto buf = vte_seq_string_get(&m_seq->arg_str, &len); - return ucs4_to_utf8(buf, len); - } - - /* size: - * - * Returns: the number of parameters - */ - inline constexpr unsigned int size() const noexcept - { - return m_seq->n_args; - } - - - /* size: - * - * Returns: the number of parameter blocks, counting runs of subparameters - * as only one parameter - */ - inline constexpr unsigned int size_final() const noexcept - { - return m_seq->n_final_args; - } - - /* capacity: - * - * Returns: the number of parameter blocks, counting runs of subparameters - * as only one parameter - */ - inline constexpr unsigned int capacity() const noexcept - { - return G_N_ELEMENTS(m_seq->args); - } - - /* param: - * @idx: - * @default_v: the value to use for default parameters - * - * Returns: the value of the parameter at index @idx, or @default_v if - * the parameter at this index has default value, or the index - * is out of bounds - */ - inline constexpr int param(unsigned int idx, - int default_v = -1) const noexcept - { - return __builtin_expect(idx < size(), 1) ? vte_seq_arg_value(m_seq->args[idx], default_v) : default_v; - } - - /* param: - * @idx: - * @default_v: the value to use for default parameters - * @min_v: the minimum value - * @max_v: the maximum value - * - * Returns: the value of the parameter at index @idx, or @default_v if - * the parameter at this index has default value, or the index - * is out of bounds. The returned value is clamped to the - * range @min_v..@max_v (or returns min_v, if min_v > max_v). - */ - inline constexpr int param(unsigned int idx, - int default_v, - int min_v, - int max_v) const noexcept - { - auto v = param(idx, default_v); - // not using std::clamp() since it's not guaranteed that min_v <= max_v - return std::max(std::min(v, max_v), min_v); - } - - /* param_nonfinal: - * @idx: - * - * Returns: whether the parameter at @idx is nonfinal, i.e. - * there are more subparameters after it. - */ - inline constexpr bool param_nonfinal(unsigned int idx) const noexcept - { - return __builtin_expect(idx < size(), 1) ? vte_seq_arg_nonfinal(m_seq->args[idx]) : false; - } - - /* param_default: - * @idx: - * - * Returns: whether the parameter at @idx has default value - */ - inline constexpr bool param_default(unsigned int idx) const noexcept - { - return __builtin_expect(idx < size(), 1) ? vte_seq_arg_default(m_seq->args[idx]) : true; - } - - /* next: - * @idx: - * - * Returns: the index of the next parameter block - */ - inline constexpr unsigned int next(unsigned int idx) const noexcept - { - /* Find the final parameter */ - while (param_nonfinal(idx)) - ++idx; - /* And return the index after that one */ - return ++idx; - } - - inline constexpr unsigned int cbegin() const noexcept - { - return 0; - } - - inline constexpr unsigned int cend() const noexcept - { - return size(); - } - - /* collect: - * - * Collects some final parameters. - * - * Returns: %true if the sequence parameter list begins with - * a run of final parameters that were collected. - */ - inline constexpr bool collect(unsigned int start_idx, - std::initializer_list params, - int default_v = -1) const noexcept - { - unsigned int idx = start_idx; - for (auto i : params) { - *i = param(idx, default_v); - idx = next(idx); - } - - return (idx - start_idx) == params.size(); - } - - /* collect1: - * @idx: - * @default_v: - * - * Collects one final parameter. - * - * Returns: the parameter value, or @default_v if the parameter has - * default value or is not a final parameter - */ - inline constexpr int collect1(unsigned int idx, - int default_v = -1) const noexcept - { - return __builtin_expect(idx < size(), 1) ? vte_seq_arg_value_final(m_seq->args[idx], default_v) : default_v; - } - - /* collect1: - * @idx: - * @default_v: - * @min_v: - * @max_v - * - * Collects one final parameter. - * - * Returns: the parameter value clamped to the @min_v .. @max_v range (or @min_v, - * if min_v > max_v), - * or @default_v if the parameter has default value or is not a final parameter - */ - inline constexpr int collect1(unsigned int idx, - int default_v, - int min_v, - int max_v) const noexcept - { - int v = __builtin_expect(idx < size(), 1) ? vte_seq_arg_value_final(m_seq->args[idx], default_v) : default_v; - // not using std::clamp() since it's not guaranteed that min_v <= max_v - return std::max(std::min(v, max_v), min_v); - } - - /* collect_subparams: - * - * Collects some subparameters. - * - * Returns: %true if the sequence parameter list contains enough - * subparams at @start_idx - */ - inline constexpr bool collect_subparams(unsigned int start_idx, - std::initializer_list params, - int default_v = -1) const noexcept - { - unsigned int idx = start_idx; - for (auto i : params) { - *i = param(idx++, default_v); - } - - return idx <= next(start_idx); - } - - inline explicit operator bool() const { return m_seq != nullptr; } - - /* This is only used in the test suite */ - vte_seq_t** seq_ptr() { return &m_seq; } - -private: - vte_seq_t* m_seq{nullptr}; - - char const* type_string() const; - char const* command_string() const; -}; // class Sequence - /* Helper classes to unify UTF-32 and UTF-8 versions of SequenceBuilder. * ::put will only be called with C1 controls, so it's ok to simplify * the UTF-8 version to simply prepend 0xc2. @@ -530,17 +139,40 @@ public: m_seq.args[m_seq.n_args++] = vte_seq_arg_init(std::min(p, 0xffff)); } + /* + * append_parms: + * @params: + * + * Appends the parameters from @params to @this. Parameter values must be + * in the range -1..MAXUSHORT; use -2 to skip a parameter + * + */ inline void append_params(std::initializer_list params) noexcept { assert(m_seq.n_args + params.size() <= (sizeof(m_seq.args) / sizeof(m_seq.args[0]))); - for (int p : params) + for (auto p : params) { + if (p == -2) + continue; + m_seq.args[m_seq.n_args++] = vte_seq_arg_init(std::min(p, 0xffff)); + } } + /* + * append_subparms: + * @subparams: + * + * Appends the subparameters from @params to @this. Subparameter values must be + * in the range -1..MAXUSHORT; use -2 to skip a subparameter + * + */ inline void append_subparams(std::initializer_list subparams) noexcept { assert(m_seq.n_args + subparams.size() <= (sizeof(m_seq.args) / sizeof(m_seq.args[0]))); - for (int p : subparams) { + for (auto p : subparams) { + if (p == -2) + continue; + int* arg = &m_seq.args[m_seq.n_args++]; *arg = vte_seq_arg_init(std::min(p, 0xffff)); vte_seq_arg_finish(arg, false); @@ -737,8 +369,8 @@ public: void assert_equal(Sequence const& seq) const noexcept { - g_assert_cmpuint(seq.type(), ==, m_seq.type); - g_assert_cmphex(seq.terminator(), ==, m_seq.terminator); + vte_assert_cmpuint(seq.type(), ==, m_seq.type); + vte_assert_cmphex(seq.terminator(), ==, m_seq.terminator); } void assert_equal_full(Sequence const& seq) const noexcept @@ -750,11 +382,11 @@ public: type == VTE_SEQ_DCS) { /* We may get one arg less back, if it's at default */ if (m_seq.n_args != seq.size()) { - g_assert_cmpuint(m_seq.n_args, ==, seq.size() + 1); - g_assert_true(vte_seq_arg_default(m_seq.args[m_seq.n_args - 1])); + vte_assert_cmpuint(m_seq.n_args, ==, seq.size() + 1); + vte_assert_true(vte_seq_arg_default(m_seq.args[m_seq.n_args - 1])); } for (unsigned int n = 0; n < seq.size(); n++) - g_assert_cmpint(vte_seq_arg_value(m_seq.args[n]), ==, seq.param(n)); + vte_assert_cmpint(vte_seq_arg_value(m_seq.args[n]), ==, seq.param(n)); } } }; // class SequenceBuilder diff --git a/src/parser-osc.hh b/src/parser-osc.hh index 7c659d5..08b86cb 100644 --- a/src/parser-osc.hh +++ b/src/parser-osc.hh @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #if !defined(_VTE_OSC) @@ -23,8 +23,10 @@ _VTE_OSC(EMACS_51, 51) +_VTE_OSC(FOOT_FLASH, 555) + _VTE_OSC(ITERM2_GROWL, 9) -_VTE_OSC(ITERM2_133, 133) +_VTE_OSC(ITERM2_SHELL_INTEGRATION, 133) _VTE_OSC(ITERM2_1337, 1337) _VTE_OSC(KONSOLE_30, 30) @@ -80,9 +82,13 @@ _VTE_OSC(XTERM_SET_COLOR_TEK_BG, 16) _VTE_OSC(XTERM_SET_COLOR_HIGHLIGHT_BG, 17) _VTE_OSC(XTERM_SET_COLOR_TEK_CURSOR, 18) _VTE_OSC(XTERM_SET_COLOR_HIGHLIGHT_FG, 19) +_VTE_OSC(XTERM_SET_CURSOR_NAME, 22) _VTE_OSC(XTERM_LOGFILE, 46) _VTE_OSC(XTERM_SET_FONT, 50) _VTE_OSC(XTERM_SET_XSELECTION, 52) +_VTE_OSC(XTERM_QUERY_ALLOWED_OPS, 60) +_VTE_OSC(XTERM_QUERY_DISALLOWED_OPS, 61) +_VTE_OSC(XTERM_QUERY_REPORT_OPS, 62) _VTE_OSC(XTERM_RESET_COLOR, 104) _VTE_OSC(XTERM_RESET_COLOR_SPECIAL, 105) _VTE_OSC(XTERM_SET_COLOR_MODE, 106) diff --git a/src/parser-reply.hh b/src/parser-reply.hh index 259145d..ef6dafc 100644 --- a/src/parser-reply.hh +++ b/src/parser-reply.hh @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #if !defined(_VTE_REPLY) @@ -30,6 +30,7 @@ _VTE_REPLY(XTERM_MOUSE_EXT_SGR_REPORT_BUTTON_PRESS, CSI, 'M', LT, NONE, ) / _VTE_REPLY(XTERM_FOCUS_OUT, CSI, 'O', NONE, NONE, ) /* XTERM focus out report */ _VTE_REPLY(DECXCPR, CSI, 'R', WHAT, NONE, ) /* extended cursor position report */ _VTE_REPLY(CPR, CSI, 'R', NONE, NONE, ) /* cursor position report */ +_VTE_REPLY(XTERM_SMGRAPHICS_REPORT, CSI, 'S', WHAT, NONE, ) /* xterm graphics attribute report */ _VTE_REPLY(DECDA1R, CSI, 'c', WHAT, NONE, ) /* DA1 report */ _VTE_REPLY(DECDA2R, CSI, 'c', GT, NONE, ) /* DA2 report */ _VTE_REPLY(SGR, CSI, 'm', NONE, NONE, ) /* SGR */ @@ -38,7 +39,8 @@ _VTE_REPLY(DSR, CSI, 'n', NONE, NONE, ) / _VTE_REPLY(DECDSR, CSI, 'n', WHAT, NONE, ) /* device status report */ _VTE_REPLY(DECSCUSR, CSI, 'q', NONE, SPACE, ) /* set-cursor-style */ _VTE_REPLY(DECSRC, CSI, 'q', NONE, MULT, ) /* secure reset confirmation */ -_VTE_REPLY(DECSTBM, CSI, 'r', NONE, NONE, ) /* set-top-and-bottom-margins */ +_VTE_REPLY(DECSTBM, CSI, 'r', NONE, NONE, ) /* set top and bottom margins */ +_VTE_REPLY(DECSLRM, CSI, 's', NONE, NONE, ) /* set left and right margins */ _VTE_REPLY(XTERM_WM, CSI, 't', NONE, NONE, ) /* XTERM WM report */ _VTE_REPLY(DECRPDE, CSI, 'w', NONE, DQUOTE,) /* report displayed extent */ _VTE_REPLY(DECRPKT, CSI, 'v', NONE, COMMA, ) /* report key type */ @@ -47,15 +49,16 @@ _VTE_REPLY(DECPKMFR, CSI, 'y', NONE, PLUS, ) / _VTE_REPLY(DECRPM_ECMA, CSI, 'y', NONE, CASH, ) /* report ECMA mode */ _VTE_REPLY(DECRPM_DEC, CSI, 'y', WHAT, CASH, ) /* report private mode */ _VTE_REPLY(DECMSR, CSI, '{', NONE, MULT, ) /* macro space report */ -_VTE_REPLY(XTERM_BRACKET, CSI, '~', NONE, NONE, ) /* XTERM bracketed paste */ +_VTE_REPLY(DECFNK, CSI, '~', NONE, NONE, ) /* dec function key / XTERM bracketed paste */ _VTE_REPLY(DECTABSR, DCS, '@', NONE, CASH, ) /* tabulation stop report */ _VTE_REPLY(DECRPSS, DCS, 'r', NONE, CASH, ) /* report state or setting */ _VTE_REPLY(DECTSR, DCS, 's', NONE, CASH, ) /* terminal state report */ _VTE_REPLY(DECCTR, DCS, 's', NONE, CASH, _VTE_REPLY_PARAMS({2})) /* color table report */ _VTE_REPLY(DECAUPSS, DCS, 'u', NONE, BANG, ) /* assign user preferred supplemental set */ -_VTE_REPLY(DECCIR, DCS, 'u', NONE, CASH, _VTE_REPLY_PARAMS({1})) /* cursor information report */ +_VTE_REPLY(DECPSR, DCS, 'u', NONE, CASH, ) /* presentation state report */ _VTE_REPLY(DECRPTUI, DCS, '|', NONE, BANG, _VTE_REPLY_STRING("7E565445") /* "~VTE" */) /* report terminal unit ID */ +_VTE_REPLY(XTERM_DSR, DCS, '|', GT, NONE, ) /* xterm terminal version report */ _VTE_REPLY(DECRPFK, DCS, '}', NONE, DQUOTE,) /* report function key */ _VTE_REPLY(DECCKSR, DCS, '~', NONE, BANG, ) /* memory checksum report */ _VTE_REPLY(DECRPAK, DCS, '~', NONE, DQUOTE,) /* report all modifiers/alphanumeric key */ diff --git a/src/parser-sci.hh b/src/parser-sci.hh deleted file mode 100644 index 9f12b92..0000000 --- a/src/parser-sci.hh +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright © 2018 Christian Persch - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#if !defined(_VTE_SEQ) || !defined(_VTE_NOQ) -#error "Must define _VTE_SEQ and _VTE_NOQ before including this file" -#endif diff --git a/src/parser-seq.py b/src/parser-seq.py new file mode 100755 index 0000000..d91d046 --- /dev/null +++ b/src/parser-seq.py @@ -0,0 +1,1246 @@ +#!/usr/bin/env python3 +# +# Copyright © 2015 David Herrmann +# Copyright © 2018, 2019, 2020 Christian Persch +# +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library. If not, see . + +import argparse +import enum +import inspect +import pathlib +import sys +import typing + +from dataclasses import dataclass, field + +# Types + +class Type(enum.IntEnum): + COMMAND = enum.auto() # placeholder / special handling + GRAPHIC = enum.auto() + CONTROL = enum.auto() + ESCAPE = enum.auto() + CSI = enum.auto() + DCS = enum.auto() + OSC = enum.auto() + SCI = enum.auto() + APC = enum.auto() + PM = enum.auto() + SOS = enum.auto() + +class Intermediate(enum.IntEnum): + SPACE = enum.auto() # SP 02/00 + BANG = enum.auto() # ! 02/01 + DQUOTE = enum.auto() # " 02/02 + HASH = enum.auto() # # 02/03 + CASH = enum.auto() # $ 02/04 + PERCENT = enum.auto() # % 02/05 + AND = enum.auto() # & 02/06 + SQUOTE = enum.auto() # \' 02/07 + POPEN = enum.auto() # ( 02/08 + PCLOSE = enum.auto() # ) 02/09 + MULT = enum.auto() # * 02/10 + PLUS = enum.auto() # + 02/11 + COMMA = enum.auto() # , 02/12 + MINUS = enum.auto() # - 02/13 + DOT = enum.auto() # . 02/14 + SLASH = enum.auto() # / 02/15 + +class ParameterIntro(enum.IntEnum): + # Numbers; not used * 03/00..03/09 + # COLON is reserved = ':' * 03/10 + # SEMICOLON is reserved = ';' * 03/11 + LT = enum.auto() # '<' 03/12 + EQUAL = enum.auto() # '=' 03/13 + GT = enum.auto() # '>' 03/14 + WHAT = enum.auto() # '?' 03/15 + +class Direction(enum.Flag): + HTT = enum.auto() # Host to Terminal + TTH = enum.auto() # Terminal to Host + BIDI = HTT | TTH + +class Flags(enum.Flag): + NOP_TTH = enum.auto() # NOP terminal to host + NOP_HTT = enum.auto() # NOP host to terminal + NOP = NOP_TTH | NOP_HTT # NOP both directions + UNRIPE = enum.auto() # dispatch when unripe + HANDLER_RV = enum.auto() # handler has return value + +class Source(enum.Enum): + DEC = enum.auto(), + ECMA16 = enum.auto() # eq ISO 1745 + ECMA35 = enum.auto() # eq ISO 2022 + ECMA48 = enum.auto() # eq ISO 6429 + HP = enum.auto() + ITERM2 = enum.auto() + MINTTY = enum.auto() + RLOGIN = enum.auto() + SCO = enum.auto() + VTE = enum.auto() + WYSE = enum.auto() + XDG = enum.auto() + XTERM = enum.auto() + + @classmethod + def from_name(cls, name): + if name.startswith('DEC') or name.endswith('_DEC'): + return cls.DEC + elif name.endswith('_ECMA'): + return cls.ECMA48 + elif name.startswith('HP') or name.endswith('_HP'): + return cls.HP + elif name.startswith('ITERM'): + return cls.ITERM2 + elif name.startswith('MINTTY'): + return cls.MINTTY + elif name.startswith('RLOGIN'): + return cls.RLOGIN + elif name.startswith('SCO'): + return cls.SCO + elif name.startswith('VTE'): + return cls.VTE + elif name.startswith('WY'): + return cls.WYSE + elif name.startswith('XDG'): + return cls.XDG + elif name.startswith('XTERM'): + return cls.XTERM + else: + return cls.ECMA48 + +# Control Sequence + +@dataclass(eq=True, order=True, frozen=True) +class Sequence: + ''' A control sequence ''' + stype: Type + final: int=0 + pintro: typing.Tuple[ParameterIntro, ...]=() + intermediates: typing.Tuple[Intermediate, ...]=() + + def __post_init__(self): + if len(self.pintro) > 1: + raise ValueError('Can only have none or one ParameterIntro') + if len(self.intermediates) > 4: + raise ValueError('Too many intermediates') + + +@dataclass(order=True) +class NamedSequence: + ''' A named control sequence ''' + seq: Sequence + name: str + direction: Direction=Direction.HTT + flags: typing.Optional[Flags]=None + source: typing.Optional[Source]=None + comment: str=None + sloc_file: str=None + sloc_line: int=-1 + + def __post_init__(self): + + if self.source is None: + self.source = Source.from_name(self.name) + + if self.sloc_file is None or self.sloc_line == -1: + fname = f'seq_{self.seq.stype.name}' + stack = inspect.stack() + depth = -1 + for _frame in stack: + depth += 1 + if _frame.function == fname: + depth += 1 + break + + if depth == -1 or depth >= len(stack): + raise ValueError('{self.name} source location not found') + else: + frame = stack[depth] + self.sloc_file = frame.filename + self.sloc_line = frame.lineno + + del stack + + +def named_sequence(**kwargs): + sargs={key: value for key, value in kwargs.items() if key in ['stype', 'final', 'pintro', 'intermediates']} + nargs={key: value for key, value in kwargs.items() if key not in ['stype', 'final', 'pintro', 'intermediates']} + + return NamedSequence(seq=Sequence(**sargs), **nargs) + +command_final=0x100 +def seq_COMMAND(name, **kwargs): + # fake final character to disambiguate commands + global command_final + command_final += 1 + return named_sequence(name=name, + stype=Type.COMMAND, + final=command_final, + **kwargs) + +def seq_CONTROL(name, final, **kwargs): + return named_sequence(name=name, + stype=Type.CONTROL, + final=final, + **kwargs) + +def seq_ESCAPE(name, final, **kwargs): + return named_sequence(name=name, + stype=Type.ESCAPE, + final=ord(final[0]), + **kwargs) + +def seq_CSI(name, final, **kwargs): + return named_sequence(name=name, + stype=Type.CSI, + final=ord(final[0]), + **kwargs) + +def seq_DCS(name, final, **kwargs): + return named_sequence(name=name, + stype=Type.DCS, + final=ord(final[0]), + **kwargs) + +def seq_OSC(name, final, **kwargs): + return named_sequence(name=name, + stype=Type.OSC, + final=ord(final[0]), + **kwargs) + +def seq_SCI(name, final, **kwargs): + return named_sequence(name=name, + stype=Type.SCI, + final=ord(final[0]), + **kwargs) + +def seq_APC(name, final, **kwargs): + return named_sequence(name=name, + stype=Type.APC, + final=ord(final[0]), + **kwargs) + +def seq_PM(name, final, **kwargs): + return named_sequence(name=name, + stype=Type.PM, + final=ord(final[0]), + **kwargs) + +def seq_SOS(name, final, **kwargs): + return named_sequence(name=name, + stype=Type.SOS, + final=ord(final[0]), + **kwargs) + +# All known sequences, ordered by type, final character, pintro, intermediates + +sequences = [ + # Commands that are handled specially by the parser than the other sequences + seq_COMMAND('ACS', source=Source.ECMA35, + comment='announce code structure'), + seq_COMMAND('CnD', flags=Flags.NOP, source=Source.ECMA35, + comment='Cn designate'), + seq_COMMAND('DOCS', flags=Flags.NOP, source=Source.ECMA35, + comment='designate other coding system'), + seq_COMMAND('GnDm', source=Source.ECMA35, + comment='Gn designate 9m charset'), + seq_COMMAND('GnDMm', flags=Flags.NOP, source=Source.ECMA35, + comment='Gn designate multibyte 9m charset'), + seq_COMMAND('IRR', flags=Flags.NOP, source=Source.ECMA35, + comment='identify revised registration'), + seq_COMMAND('OSC', + comment='operating system command'), + + # Control characters + seq_CONTROL('NUL', 0x00, flags=Flags.NOP, source=Source.ECMA16, + comment='nul'), + seq_CONTROL('SOH', 0x01, flags=Flags.NOP, source=Source.ECMA16, + comment='start of heading'), + seq_CONTROL('STX', 0x02, flags=Flags.NOP, source=Source.ECMA16, + comment='start of text'), + seq_CONTROL('ETX', 0x03, flags=Flags.NOP, source=Source.ECMA16, + comment='end of text'), + seq_CONTROL('EOT', 0x04, flags=Flags.NOP, source=Source.ECMA16, + comment='end of transmission'), + seq_CONTROL('ENQ', 0x05, flags=Flags.NOP, source=Source.ECMA16, + comment='enquire'), + seq_CONTROL('ACK', 0x06, flags=Flags.NOP, source=Source.ECMA16, + comment='acknowledge'), + seq_CONTROL('BEL', 0x07, source=Source.ECMA16, + comment='bell'), + seq_CONTROL('BS', 0x08, source=Source.ECMA16, + comment='backspace'), + seq_CONTROL('HT', 0x09, source=Source.ECMA16, + comment='horizontal tab'), + seq_CONTROL('LF', 0x0a, source=Source.ECMA16, + comment='line feed'), + seq_CONTROL('VT', 0x0b, source=Source.ECMA16, + comment='vertical tag'), + seq_CONTROL('FF', 0x0c, source=Source.ECMA16, + comment='form feed'), + seq_CONTROL('CR', 0x0d, source=Source.ECMA16, + comment='carriage return'), + seq_CONTROL('LS1', 0x0e, source=Source.ECMA16, + comment='locking shift 1'), + seq_CONTROL('LS0', 0x0f, source=Source.ECMA16, + comment='locking shift 0'), + seq_CONTROL('DLE', 0x10, flags=Flags.NOP, source=Source.ECMA16, + comment='data link escape'), + seq_CONTROL('DC1', 0x11, flags=Flags.NOP, source=Source.ECMA16, + comment='device control 1 / XON'), + seq_CONTROL('DC2', 0x12, flags=Flags.NOP, source=Source.ECMA16, + comment='device control 2'), + seq_CONTROL('DC3', 0x13, flags=Flags.NOP, source=Source.ECMA16, + comment='device control 3 / XOFF'), + seq_CONTROL('DC4', 0x14, flags=Flags.NOP, source=Source.ECMA16, + comment='device control 4'), + seq_CONTROL('NAK', 0x15, flags=Flags.NOP, source=Source.ECMA16, + comment='negative acknowledge'), + seq_CONTROL('SYN', 0x16, flags=Flags.NOP, source=Source.ECMA16, + comment='synchronise'), + seq_CONTROL('ETB', 0x17, flags=Flags.NOP, source=Source.ECMA16, + comment='end of transmissionblock'), + # seq_CONTROL('CAN', 0x18, flags=Flags.NOP, source=Source.ECMA16, + # comment='cancel'), + seq_CONTROL('EM', 0x19, flags=Flags.NOP, source=Source.ECMA16, + comment='end of medium'), + seq_CONTROL('SUB', 0x1a, source=Source.ECMA16, + comment='substitute'), + # seq_CONTROL('ESC', 0x1b, source=Source.ECMA16, + # comment='escape'), + seq_CONTROL('IS4', 0x1c, flags=Flags.NOP, source=Source.ECMA16, + comment='information separator 4 / file separator (FS)'), + seq_CONTROL('IS3', 0x1d, flags=Flags.NOP, source=Source.ECMA16, + comment='information separator 3 / group separator (GS)'), + seq_CONTROL('IS2', 0x1e, flags=Flags.NOP, source=Source.ECMA16, + comment='information separator 2 / record separator (RS)'), + seq_CONTROL('IS1', 0x1f, flags=Flags.NOP, source=Source.ECMA16, + comment='information separator 1 / unit separator (US)'), + seq_CONTROL('BPH', 0x82, flags=Flags.NOP, + comment='break permitted here'), + seq_CONTROL('NBH', 0x83, flags=Flags.NOP, + comment='no break permitted here'), + seq_CONTROL('IND', 0x84, + comment='index'), + seq_CONTROL('NEL', 0x85, + comment='next line'), + seq_CONTROL('SSA', 0x86, flags=Flags.NOP, + comment='start of selected area'), + seq_CONTROL('ESA', 0x87, flags=Flags.NOP, + comment='end of selected area'), + seq_CONTROL('HTS', 0x88, + comment='horizontal tab set'), + seq_CONTROL('HTJ', 0x89, + comment='character tabulation with justification'), + seq_CONTROL('VTS', 0x8a, flags=Flags.NOP, + comment='line tabulation set'), + seq_CONTROL('PLD', 0x8b, flags=Flags.NOP, + comment='partial line forward'), + seq_CONTROL('PLU', 0x8c, flags=Flags.NOP, + comment='partial line backward'), + seq_CONTROL('RI', 0x8d, + comment='reverse index'), + seq_CONTROL('SS2', 0x8e, source=Source.ECMA35, + comment='single shift 2'), + seq_CONTROL('SS3', 0x8f, source=Source.ECMA35, + comment='single shift 3'), + # seq_CONTROL('DCS', 0x90, flags=Flags.NOP, source=Sources.ECMA35, + # comment='device control string'), + seq_CONTROL('PU1', 0x91, flags=Flags.NOP, + comment='private use 1'), + seq_CONTROL('PU2', 0x92, flags=Flags.NOP, + comment='private use 2'), + seq_CONTROL('STS', 0x93, flags=Flags.NOP, + comment='set transmit state'), + seq_CONTROL('CCH', 0x94, flags=Flags.NOP, + comment='cancel character'), + seq_CONTROL('MW', 0x95, flags=Flags.NOP, + comment='message waiting'), + seq_CONTROL('SPA', 0x96, flags=Flags.NOP, + comment='start of protected area'), + seq_CONTROL('EPA', 0x97, flags=Flags.NOP, + comment='end of protected area'), + # seq_CONTROL('SOS', 0x98, flags=Flags.NOP, source=Source.ECMA35, + # comment='start of string'), + # seq_CONTROL('SOS', 0x9a, flags=Flags.NOP, source=Source.ECMA35, + # comment='single character introducer'), + # seq_CONTROL('CSI', 0x9b, flags=Flags.NOP, source=Source.ECMA35, + # comment='control sequence introducer'), + seq_CONTROL('ST', 0x9c, flags=Flags.NOP, + comment='string terminator'), + # seq_CONTROL('OSC', 0x9d, flags=Flags.NOP, source=Source.ECMA35, + # comment='operating system command'), + # seq_CONTROL('PM', 0x9e, flags=Flags.NOP, source=Source.ECMA35, + # comment='privay message'), + # seq_CONTROL('APC', 0x9f, flags=Flags.NOP, source=Source.ECMA35, + # comment='application program command'), + + # Escape sequences + seq_ESCAPE('DECDHL_TH', '3', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='double width double height line: top half'), + seq_ESCAPE('DECDHL_BH', '4', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='double width double height line: bottom half'), + seq_ESCAPE('DECSWL', '5', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='single width single height line'), + seq_ESCAPE('DECBI', '6', + comment='back index'), + seq_ESCAPE('DECDWL', '6', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='double width single height line'), + seq_ESCAPE('DECSC', '7', + comment='save cursor'), + seq_ESCAPE('DECRC', '8', + comment='restore cursor'), + seq_ESCAPE('DECALN', '8', intermediates=(Intermediate.HASH,), + comment='screen alignment pattern'), + seq_ESCAPE('DECFI', '9', + comment='forward index'), + seq_ESCAPE('WYDHL_TH', ':', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='single width double height line: top half'), + seq_ESCAPE('WYDHL_BH', ';', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='single width double height line: bottom half'), + seq_ESCAPE('DECANM', '<', flags=Flags.NOP, + comment='ansi mode'), + seq_ESCAPE('DECKPAM', '=', + comment='keypad application mode'), + seq_ESCAPE('DECKPNM', '>', + comment='keypad numeric mode'), + seq_ESCAPE('BPH', 'B', flags=Flags.NOP, + comment='break permitted here'), + seq_ESCAPE('NBH', 'C', flags=Flags.NOP, + comment='no break permitted here'), + seq_ESCAPE('IND', 'D', + comment='index'), + seq_ESCAPE('NEL', 'E', + comment='next line'), + seq_ESCAPE('SSA', 'F', flags=Flags.NOP, + comment='start of selected area'), + seq_ESCAPE('ESA', 'G', flags=Flags.NOP, + comment='end of selected area'), + seq_ESCAPE('HTS', 'H', + comment='horizontal tab set'), + seq_ESCAPE('HTJ', 'I', + comment='character tabulation with justification'), + seq_ESCAPE('VTS', 'J', flags=Flags.NOP, + comment='line tabulation set'), + seq_ESCAPE('PLD', 'K', flags=Flags.NOP, + comment='partial line forward'), + seq_ESCAPE('PLU', 'L', flags=Flags.NOP, + comment='partial line backward'), + seq_ESCAPE('RI', 'M', + comment='reverse index'), + seq_ESCAPE('SS2', 'N', + comment='single shift 2'), + seq_ESCAPE('SS3', 'O', + comment='single shift 3'), + seq_ESCAPE('PU1', 'Q', flags=Flags.NOP, + comment='private use 1'), + seq_ESCAPE('PU2', 'R', flags=Flags.NOP, + comment='private use 2'), + seq_ESCAPE('STS', 'S', flags=Flags.NOP, + comment='set transmit state'), + seq_ESCAPE('CCH', 'T', flags=Flags.NOP, + comment='cancel character'), + seq_ESCAPE('MW', 'U', flags=Flags.NOP, + comment='message waiting'), + seq_ESCAPE('SPA', 'V', flags=Flags.NOP, + comment='start of protected area'), + seq_ESCAPE('EPA', 'W', flags=Flags.NOP, + comment='end of protected area'), + seq_ESCAPE('ST', '\\', flags=Flags.NOP, + comment='string terminator'), + seq_ESCAPE('DMI', '`', flags=Flags.NOP, + comment='disable manual input'), + seq_ESCAPE('INT', 'a', flags=Flags.NOP, + comment='interrupt'), + seq_ESCAPE('EMI', 'b', flags=Flags.NOP, + comment='enable manual input'), + seq_ESCAPE('RIS', 'c', + comment='reset to initial state'), + seq_ESCAPE('CMD', 'd', flags=Flags.NOP, + comment='coding method delimiter'), + seq_ESCAPE('XTERM_MLHP', 'l', flags=Flags.NOP, + comment='xterm memory lock hp bugfix'), + seq_ESCAPE('XTERM_MUHP', 'm', flags=Flags.NOP, + comment='xterm memory unlock hp bugfix'), + seq_ESCAPE('LS2', 'n', + comment='locking shift 2'), + seq_ESCAPE('LS3', 'o', + comment='locking shift 3'), + seq_ESCAPE('LS3R', '|', + comment='locking shift 3 right'), + seq_ESCAPE('LS2R', '}', + comment='locking shift 2 right'), + seq_ESCAPE('LS1R', '~', + comment='locking shift 1 right'), + + # CSI sequences + seq_CSI('ICH', '@', + comment='insert character'), + seq_CSI('SL', '@', intermediates=(Intermediate.SPACE,), + comment='scroll left'), + seq_CSI('CUU', 'A', + comment='cursor up'), + seq_CSI('SR', 'A', intermediates=(Intermediate.SPACE,), + comment='scroll right'), + seq_CSI('CUD', 'B', + comment='cursor down'), + seq_CSI('GSM', 'B', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='graphic size modification'), + seq_CSI('CUF', 'C', + comment='cursor forward'), + seq_CSI('GSS', 'C', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='graphic size selection'), + seq_CSI('CUB', 'D', + comment='cursor backward'), + seq_CSI('FNT', 'D', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='font selection'), + seq_CSI('CNL', 'E', + comment='cursor next line'), + seq_CSI('CPL', 'F', + comment='cursor previous line'), + seq_CSI('JFY', 'F', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='justify'), + seq_CSI('TSS', 'E', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='thine space specification'), + seq_CSI('CHA', 'G', + comment='cursor horizontal absolute'), + seq_CSI('SPI', 'G', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='spacing increment'), + seq_CSI('CUP', 'H', + comment='cursor position'), + seq_CSI('QUAD', 'H', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='quad'), + seq_CSI('CHT', 'I', + comment='cursor horizontal forward tabulation'), + seq_CSI('SSU', 'I', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set size unit'), + seq_CSI('ED', 'J', + comment='erase in display'), + seq_CSI('PFS', 'J', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='page format selection'), + seq_CSI('DECSED', 'J', pintro=(ParameterIntro.WHAT,), + comment='selective erase in display'), + seq_CSI('EL', 'K', + comment='erase in line'), + seq_CSI('SHS', 'K', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='select character spacing'), + seq_CSI('DECSEL', 'K', pintro=(ParameterIntro.WHAT,), + comment='selective erase in line'), + seq_CSI('IL', 'L', + comment='insert line'), + seq_CSI('SVS', 'L', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='select line spacing'), + seq_CSI('DL', 'M', + comment='delete line'), + seq_CSI('IGS', 'M', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='identify graphic subrepertoire'), + seq_CSI('EF', 'N', flags=Flags.NOP, + comment='erase in field'), + seq_CSI('EA', 'O', flags=Flags.NOP, + comment='erase in area'), + seq_CSI('IDCS', 'O', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='identify DCS'), + seq_CSI('DCH', 'P', + comment='delete character'), + seq_CSI('PPA', 'P', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='page position absolute'), + seq_CSI('XTERM_PUSHCOLORS', 'P', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='xterm push color palette stack'), + seq_CSI('SEE', 'Q', flags=Flags.NOP, + comment='select editing extent'), + seq_CSI('PPR', 'Q', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='page position relative'), + seq_CSI('XTERM_POPCOLORS', 'Q', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='xterm pop color palette stack'), + seq_CSI('PPB', 'R', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='page position backward'), + seq_CSI('XTERM_REPORTCOLORS', 'R', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='xterm Report color palette stack'), + seq_CSI('SU', 'S', + comment='scroll up'), + seq_CSI('SPD', 'S', intermediates=(Intermediate.SPACE,), + comment='select presentation directions'), + seq_CSI('XTERM_SMGRAPHICS', 'S', pintro=(ParameterIntro.WHAT,), + comment='xterm graphics attributes'), + seq_CSI('SD', 'T', + comment='scroll down'), + seq_CSI('XTERM_IHMT', 'T', flags=Flags.NOP, + comment='xterm initiate highlight mouse tracking'), + seq_CSI('DTA', 'T', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='dimension text area'), + seq_CSI('XTERM_RTM', 'T', pintro=(ParameterIntro.GT,), flags=Flags.NOP, + comment='xterm reset title mode'), + seq_CSI('NP', 'U', flags=Flags.NOP, + comment='next page'), + seq_CSI('SLH', 'U', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set line home'), + seq_CSI('PP', 'V', flags=Flags.NOP, + comment='preceding page'), + seq_CSI('SLL', 'V', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set line limit'), + seq_CSI('CTC', 'W', + comment='cursor tabulation control'), + seq_CSI('FNK', 'W', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='function key'), + seq_CSI('DECST8C', 'W', pintro=(ParameterIntro.WHAT,), + comment='set tab at every 8 columns'), + seq_CSI('ECH', 'X', + comment='erase character'), + seq_CSI('SPQR', 'X', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='select print quality and rapidity'), + seq_CSI('CVT', 'Y', flags=Flags.NOP, + comment='cursor line tabulation'), + seq_CSI('SEF', 'Y', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='sheet eject and feed'), + seq_CSI('CBT', 'Z', + comment='cursor backward tabulation'), + seq_CSI('PEC', 'Z', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='presentation expand or contract'), + seq_CSI('SRS', '[', flags=Flags.NOP, + comment='start reversed string'), + seq_CSI('SSW', '[', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set space width'), + seq_CSI('PTX', '\\', flags=Flags.NOP, + comment='parallel texts'), + seq_CSI('SACS', '\\', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set additional character separation'), + seq_CSI('SDS', ']', flags=Flags.NOP, + comment='start directed string'), + seq_CSI('SAPV', ']', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='select alternative presentation variants'), + seq_CSI('SIMD', '^', flags=Flags.NOP, + comment='select implicit movement direction'), + seq_CSI('STAB', '^', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='selective tabulation'), + seq_CSI('GCC', '_', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='graphic character combination'), + seq_CSI('HPA', '`', + comment='horizontal position absolute'), + seq_CSI('TATE', '`', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='tabulation aligned trailing edge'), + seq_CSI('HPR', 'a', + comment='horizontal position relative'), + seq_CSI('TALE', 'a', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='tabulation aligned leading edge'), + seq_CSI('REP', 'b', + comment='repeat'), + seq_CSI('TAC', 'b', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='tabulation aligned centre'), + seq_CSI('DA1', 'c', + comment='primary device attributes'), + seq_CSI('TCC', 'c', intermediates=(Intermediate.SPACE,), + comment='tabulation centred on character'), + seq_CSI('DA3', 'c', pintro=(ParameterIntro.EQUAL,), + comment='tertiary device attributes'), + seq_CSI('DA2', 'c', pintro=(ParameterIntro.GT,), + comment='secondary device attributes'), + seq_CSI('VPA', 'd', + comment='vertical line position absolute'), + seq_CSI('TSR', 'd', intermediates=(Intermediate.SPACE,), + comment='tabulation stop remove'), + seq_CSI('VPR', 'e', + comment='vertical line position relative'), + seq_CSI('SCO', 'e', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='select character orientation'), + seq_CSI('HVP', 'f', + comment='horizontal and vertical position'), + seq_CSI('SRCS', 'f', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set reduced character separation'), + seq_CSI('TBC', 'g', + comment='tab clear'), + seq_CSI('SCS', 'g', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set character spacing'), + seq_CSI('DECLFKC', 'g', intermediates=(Intermediate.MULT,), flags=Flags.NOP, + comment='local function key control'), + seq_CSI('SM_ECMA', 'h', + comment='set mode ecma'), + seq_CSI('SLS', 'h', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set line spacing'), + seq_CSI('SM_HP', 'h', pintro=(ParameterIntro.GT,), flags=Flags.NOP, + comment='set mode hp'), + seq_CSI('SM_DEC', 'h', pintro=(ParameterIntro.WHAT,), + comment='set mode dec'), + seq_CSI('MC_ECMA', 'i', flags=Flags.NOP, + comment='media copy ecma'), + seq_CSI('SPH', 'i', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set page home'), + seq_CSI('MC_DEC', 'i', pintro=(ParameterIntro.WHAT,), flags=Flags.NOP, + comment='media copy dec'), + seq_CSI('HPB', 'j', flags=Flags.NOP, + comment='horizontal position backward'), + seq_CSI('SPL', 'j', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set page limit'), + seq_CSI('VPB', 'k', flags=Flags.NOP, + comment='line position backward'), + seq_CSI('SCP', 'k', intermediates=(Intermediate.SPACE,), + comment='select character path'), + seq_CSI('RM_ECMA', 'l', + comment='reset mode ecma'), + seq_CSI('RM_HP', 'l', pintro=(ParameterIntro.GT,), flags=Flags.NOP, + comment='reset mode hp'), + seq_CSI('RM_DEC', 'l', pintro=(ParameterIntro.WHAT,), + comment='reset mode dec'), + seq_CSI('SGR', 'm', + comment='select graphics rendition'), + seq_CSI('DECSGR', 'm', pintro=(ParameterIntro.WHAT,), flags=Flags.NOP, + comment='DEC select graphics rendition'), + seq_CSI('XTERM_MODKEYS', 'm', pintro=(ParameterIntro.GT,), flags=Flags.NOP, + comment='xterm set key modifier options'), + seq_CSI('DSR_ECMA', 'n', + comment='device status report ecma'), + seq_CSI('XTERM_RRV', 'n', pintro=(ParameterIntro.GT,), flags=Flags.NOP, + comment='xterm reset resource value'), + seq_CSI('DSR_DEC', 'n', pintro=(ParameterIntro.WHAT,), + comment='device status report dec'), + seq_CSI('DAQ', 'o', flags=Flags.NOP, + comment='define area qualification'), + seq_CSI('DECSSL', 'p', flags=Flags.NOP, + comment='select setup language'), + seq_CSI('DECSSCLS', 'p', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set scroll speed'), + seq_CSI('DECSTR', 'p', intermediates=(Intermediate.BANG,), + comment='soft terminal reset'), + seq_CSI('DECSCL', 'p', intermediates=(Intermediate.DQUOTE,), + comment='select conformance level'), + # This will remain a NOP even if VTE ever implements XTERM_PUSHSGR, see + # https://gitlab.gnome.org/GNOME/vte/-/issues/23#note_513969 + seq_CSI('XTERM_PUSHSGR', 'p', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='xterm push SGR stack'), + seq_CSI('DECRQM_ECMA', 'p', intermediates=(Intermediate.CASH,), + comment='request mode ecma'), + seq_CSI('DECSDPT', 'p', intermediates=(Intermediate.PCLOSE,), flags=Flags.NOP, + comment='select digital printed data type'), + seq_CSI('DECSPPCS', 'p', intermediates=(Intermediate.MULT,), flags=Flags.NOP, + comment='select pro printer character set'), + seq_CSI('DECSR', 'p', intermediates=(Intermediate.PLUS,), + comment='secure reset'), + seq_CSI('DECLTOD', 'p', intermediates=(Intermediate.COMMA,), flags=Flags.NOP, + comment='load time of day'), + seq_CSI('DECARR', 'p', intermediates=(Intermediate.MINUS,), flags=Flags.NOP, + comment='auto repeat rate'), + seq_CSI('XTERM_PTRMODE', 'p', pintro=(ParameterIntro.GT,), flags=Flags.NOP, + comment='xterm set pointer mode'), + seq_CSI('DECRQM_DEC', 'p', pintro=(ParameterIntro.WHAT,), intermediates=(Intermediate.CASH,), + comment='request mode dec'), + seq_CSI('DECLL', 'q', flags=Flags.NOP, + comment='load leds'), + seq_CSI('DECSCUSR', 'q', intermediates=(Intermediate.SPACE,), + comment='set cursor style'), + seq_CSI('DECSCA', 'q', intermediates=(Intermediate.DQUOTE,), flags=Flags.NOP, + comment='select character protection attribute'), + # See comment above for XTERM_PUSHSGR + seq_CSI('XTERM_POPSGR', 'q', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='xterm pop SGR stack'), + seq_CSI('DECSDDT', 'q', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + comment='select disconnect delay time'), + seq_CSI('MINTTY_PROGRESS', 'q', intermediates=(Intermediate.PERCENT,), flags=Flags.NOP, + comment='set progress report'), + seq_CSI('DECSR', 'q', intermediates=(Intermediate.MULT,), + comment='secure reset'), + seq_CSI('DECELF', 'q', intermediates=(Intermediate.PLUS,), flags=Flags.NOP, + comment='enable local functions'), + seq_CSI('DECTID', 'q', intermediates=(Intermediate.COMMA,), flags=Flags.NOP, + comment='select terminal id'), + seq_CSI('DECCRTST', 'q', intermediates=(Intermediate.MINUS,), flags=Flags.NOP, + comment='CRT saver time'), + seq_CSI('XTERM_VERSION', 'q', pintro=(ParameterIntro.GT,), + comment='request xterm version report'), + seq_CSI('DECSTBM', 'r', + comment='set top and bottom margins'), + seq_CSI('DECSKCV', 'r', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set key click volume'), + seq_CSI('DECCARA', 'r', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + comment='change attributes in rectangular area'), + seq_CSI('DECSCS', 'r', intermediates=(Intermediate.MULT,), flags=Flags.NOP, + comment='select communication speed'), + seq_CSI('DECSMKR', 'r', intermediates=(Intermediate.PLUS,), flags=Flags.NOP, + comment='select modifier key reporting'), + seq_CSI('DECSEST', 'r', intermediates=(Intermediate.MINUS,), flags=Flags.NOP, + comment='energy saver time'), + seq_CSI('DECPCTERM', 'r', pintro=(ParameterIntro.WHAT,), flags=Flags.NOP, + comment='pcterm'), + seq_CSI('XTERM_RPM', 'r', pintro=(ParameterIntro.WHAT,), + comment='xterm restore DEC private mode'), + seq_CSI('DECSLRM', 's', flags=Flags.NOP, + comment='set left and right margins'), + seq_CSI('SCOSC', 's', + comment='SCO save cursor'), + seq_CSI('DECSPRTT', 's', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + comment='select printer type'), + seq_CSI('DECSFC', 's', intermediates=(Intermediate.MULT,), flags=Flags.NOP, + comment='select flow control'), + seq_CSI('XTERM_SHIFTESCAPE', 's', pintro=(ParameterIntro.GT,), + comment='xterm set shift-escape'), + seq_CSI('XTERM_SPM', 's', pintro=(ParameterIntro.WHAT,), + comment='xterm save private mode'), + seq_CSI('DECSLPP', 't', + comment='set lines per page'), + seq_CSI('XTERM_WM', 't', + comment='xterm window management'), + seq_CSI('DECSWBV', 't', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set warning bell volume'), + seq_CSI('DECSRFR', 't', intermediates=(Intermediate.DQUOTE,), flags=Flags.NOP, + comment='select refresh rate'), + seq_CSI('DECRARA', 't', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + comment='reverse attributes in rectangular area'), + seq_CSI('XTERM_STM', 't', pintro=(ParameterIntro.GT,), flags=Flags.NOP, + comment='xterm set title mode'), + seq_CSI('SCORC', 'u', + comment='SCO restore cursor'), + seq_CSI('DECSMBV', 'u', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set margin bell volume'), + seq_CSI('DECSTRL', 'u', intermediates=(Intermediate.DQUOTE,), flags=Flags.NOP, + comment='set transmit rate limit'), + seq_CSI('DECRQTSR', 'u', intermediates=(Intermediate.CASH,), + comment='request terminal state report'), + seq_CSI('DECSCP', 'u', intermediates=(Intermediate.MULT,), flags=Flags.NOP, + comment='select communication port'), + seq_CSI('DECRQKT', 'u', intermediates=(Intermediate.COMMA,), flags=Flags.NOP, + comment='request key type'), + seq_CSI('DECRQUPSS', 'u', pintro=(ParameterIntro.WHAT,), flags=Flags.NOP, + comment='request user preferred supplemental set'), + seq_CSI('DECSLCK', 'v', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='set lock key style'), + seq_CSI('DECRQDE', 'v', intermediates=(Intermediate.DQUOTE,), flags=Flags.NOP, + comment='request display extent'), + seq_CSI('DECCRA', 'v', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + comment='copy rectangular area'), + seq_CSI('DECRPKT', 'v', intermediates=(Intermediate.COMMA,), flags=Flags.NOP, + comment='report key type'), + seq_CSI('WYCAA', 'w', flags=Flags.NOP, + comment='redefine character display attribute association'), + seq_CSI('DECRPDE', 'w', intermediates=(Intermediate.DQUOTE,), flags=Flags.NOP, + comment='report displayed extent'), + seq_CSI('DECRQPSR', 'w', intermediates=(Intermediate.CASH,), + comment='request presentation state report'), + seq_CSI('DECEFR', 'w', intermediates=(Intermediate.SQUOTE,), flags=Flags.NOP, + comment='enable filter rectangle'), + seq_CSI('DECSPP', 'w', intermediates=(Intermediate.PLUS,), flags=Flags.NOP, + comment='set port parameter'), + seq_CSI('DECREQTPARM', 'x', + comment='request terminal parameters'), + seq_CSI('WYCDIR', 'x', flags=Flags.NOP, + comment='set current character attributes'), + seq_CSI('DECFRA', 'x', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + comment='fill rectangular area'), + seq_CSI('DECES', 'x', intermediates=(Intermediate.AND,), flags=Flags.NOP, + comment='enable session'), + seq_CSI('DECSACE', 'x', intermediates=(Intermediate.MULT,), flags=Flags.NOP, + comment='select attribute change extent'), + seq_CSI('DECRQPKFM', 'x', intermediates=(Intermediate.PLUS,), flags=Flags.NOP, + comment='request program key free memory'), + seq_CSI('DECSPMA', 'x', intermediates=(Intermediate.COMMA,), flags=Flags.NOP, + comment='session page memory allocation'), + seq_CSI('DECTST', 'y', flags=Flags.NOP, + comment='invoke confidence test'), + seq_CSI('XTERM_CHECKSUM_MODE', 'y', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='xterm DECRQCRA checksum mode'), + seq_CSI('DECRQCRA', 'y', intermediates=(Intermediate.MULT,), + comment='request checksum of rectangular area'), + seq_CSI('DECPKFMR', 'y', intermediates=(Intermediate.PLUS,), flags=Flags.NOP, + comment='program key free memory report'), + seq_CSI('DECUS', 'y', intermediates=(Intermediate.COMMA,), flags=Flags.NOP, + comment='update session'), + seq_CSI('WYSCRATE', 'z', flags=Flags.NOP, + comment='set smooth scroll rate'), + seq_CSI('DECERA', 'z', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + comment='erase rectangular area'), + seq_CSI('DECELR', 'z', intermediates=(Intermediate.SQUOTE,), flags=Flags.NOP, + comment='enable locator reporting'), + seq_CSI('DECINVM', 'z', intermediates=(Intermediate.MULT,), flags=Flags.NOP, + comment='invoke macro'), + seq_CSI('DECPKA', 'z', intermediates=(Intermediate.PLUS,), flags=Flags.NOP, + comment='program key action'), + seq_CSI('DECDLDA', 'z', intermediates=(Intermediate.COMMA,), flags=Flags.NOP, + comment='down line load allocation'), + seq_CSI('XTERM_PUSHSGR', '{', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='xterm push SGR stack'), + seq_CSI('DECSERA', '{', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + comment='selective erase rectangular area'), + seq_CSI('DECSLE', '{', intermediates=(Intermediate.SQUOTE,), flags=Flags.NOP, + comment='select locator events'), + seq_CSI('DECSTGLT', '{', intermediates=(Intermediate.PCLOSE,), flags=Flags.NOP, + comment='select color lookup table'), + seq_CSI('DECSZS', '{', intermediates=(Intermediate.COMMA,), flags=Flags.NOP, + comment='select zero symbol'), + seq_CSI('XTERM_REPORTSGR', '|', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='xterm SGR report'), + seq_CSI('DECSCPP', '|', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + comment='select columns per page'), + seq_CSI('DECRQLP', '|', intermediates=(Intermediate.SQUOTE,), flags=Flags.NOP, + comment='request locator position'), + seq_CSI('DECSNLS', '|', intermediates=(Intermediate.MULT,), flags=Flags.NOP, + comment='set lines per screen'), + seq_CSI('DECAC', '|', intermediates=(Intermediate.COMMA,), flags=Flags.NOP, + comment='assign color'), + seq_CSI('DECKBD', '}', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='keyboard language selection'), + seq_CSI('XTERM_POPSGR', '}', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='xterm pop SGR stack'), + seq_CSI('DECSASD', '}', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + comment='select active status display'), + seq_CSI('DECIC', '}', intermediates=(Intermediate.SQUOTE,), + comment='insert column'), + seq_CSI('DECATC', '}', intermediates=(Intermediate.COMMA,), flags=Flags.NOP, + comment='alternate text color'), + seq_CSI('DECFNK', '~', direction=Direction.TTH, flags=Flags.NOP, + comment='dec function key / XTERM bracketed paste'), + seq_CSI('DECTME', '~', intermediates=(Intermediate.SPACE,), flags=Flags.NOP, + comment='terminal mode emulation'), + seq_CSI('DECSSDT', '~', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + comment='select status display line type'), + seq_CSI('DECDC', '~', intermediates=(Intermediate.SQUOTE,), + comment='delete column'), + seq_CSI('DECPS', '~', intermediates=(Intermediate.COMMA,), flags=Flags.NOP, + comment='play sound'), + + # DCS sequences + seq_DCS('XTERM_GETXRES', 'Q', intermediates=(Intermediate.PLUS,), flags=Flags.NOP, + comment='xterm get X resource'), + seq_DCS('RLOGIN_MML', 'm', intermediates=(Intermediate.HASH,), flags=Flags.NOP, + comment='RLogin music macro language'), + seq_DCS('DECREGIS', 'p', flags=Flags.NOP, + comment='ReGIS graphics'), + seq_DCS('DECRSTS', 'p', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + comment='restore terminal state'), + seq_DCS('XTERM_STCAP', 'p', intermediates=(Intermediate.PLUS,), flags=Flags.NOP, + comment='xterm set termcap/terminfo'), + seq_DCS('DECSIXEL', 'q', flags=Flags.NOP, + comment='SIXEL graphics'), + seq_DCS('DECRQSS', 'q', intermediates=(Intermediate.CASH,), + comment='request selection or setting'), + seq_DCS('XTERM_RQTCAP', 'q', intermediates=(Intermediate.PLUS,), flags=Flags.NOP, + comment='xterm request termcap/terminfo'), + seq_DCS('DECLBAN', 'r', flags=Flags.NOP, + comment='load banner message'), + seq_DCS('DECTSR', 's', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + direction = Direction.TTH, + comment='terminal state report'), + seq_DCS('XDGSYNC', 's', pintro=(ParameterIntro.EQUAL,), flags=Flags.NOP, + comment='synchronous update'), + seq_DCS('DECRSPS', 't', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + comment='restore presentation state'), + seq_DCS('DECAUPSS', 'u', intermediates=(Intermediate.BANG,), flags=Flags.NOP, + comment='assign user preferred supplemental sets'), + seq_DCS('DECPSR', 'u', intermediates=(Intermediate.CASH,), flags=Flags.NOP, + direction = Direction.TTH, + comment='presentation state report'), + seq_DCS('DECLANS', 'v', flags=Flags.NOP, + comment='load answerback message'), + seq_DCS('DECLBD', 'w', flags=Flags.NOP, + comment='locator button define'), + seq_DCS('DECPFK', 'x', intermediates=(Intermediate.DQUOTE,), flags=Flags.NOP, + comment='program function key'), + seq_DCS('DECPAK', 'y', intermediates=(Intermediate.DQUOTE,), flags=Flags.NOP, + comment='program alphanumeric key'), + seq_DCS('DECDMAC', 'z', intermediates=(Intermediate.BANG,), flags=Flags.NOP, + comment='define macro'), + seq_DCS('DECCKD', 'z', intermediates=(Intermediate.DQUOTE,), flags=Flags.NOP, + comment='copy key default'), + seq_DCS('DECDLD', '{', flags=Flags.NOP, + comment='dynamically redefinable character sets extension'), + seq_DCS('DECSTUI', '{', intermediates=(Intermediate.BANG,), flags=Flags.NOP, + comment='set terminal unit id'), + seq_DCS('DECUDK', '|', flags=Flags.NOP, + comment='user defined keys'), + seq_DCS('WYLSFNT', '}', flags=Flags.NOP, + comment='load soft font'), + seq_DCS('DECRPFK', '}', intermediates=(Intermediate.DQUOTE,), flags=Flags.NOP, + comment='report function key definition'), + seq_DCS('DECRPAK', '~', intermediates=(Intermediate.DQUOTE,), flags=Flags.NOP, + comment='report all modifier/alphanumeric key state'), + + # SCI sequences + + # APC sequences + + # PM sequences + + # SOS sequences + ] + + +# Output generator + +''' +Returns: Dict[Sequence, List[NamedSequence]] +''' +def get_sequences(predicate): + result={} + for nseq in sequences: + if predicate(nseq.seq): + if nseq.seq in result: + result[nseq.seq]+=[nseq] + else: + result[nseq.seq]=[nseq] + + return result + +''' +Returns: Dict[str, Tuple[str, str]] mapping command name to (comment, flags) +''' +def get_commands(predicate): + cmds={} + + all_seqs = get_sequences(predicate) + for _seq in all_seqs: + seq_list = all_seqs[_seq] + for seq in seq_list: + if seq.name in cmds: + flags, comment = cmds[seq.name] + + if flags != seq.flags: + raise ValueError(f'{seq.name} flags inconsistent: {seq.flags} vs {flags}') + if comment != seq.comment: + raise ValueError(f'{seq.name} comment inconsistent: {seq.comment} vs {comment}') + + cmds[seq.name]=(seq.flags, seq.comment) + + # Add an extra entry for the disambiguation command + if len(seq_list) > 1: + sorted_seqs = sorted(seq_list, key=lambda seq: seq.name) + + or_name='_OR_'.join(tuple([seq.name for seq in sorted_seqs])) + or_comment=' or '.join(tuple([seq.comment for seq in sorted_seqs])) + + or_flags=None + for seq in sorted_seqs: + flags=seq.flags + if flags is None or or_flags is None: + or_flags = None + else: + or_flags &= flags + + cmds[or_name] = (or_flags, or_comment) + + return cmds + +''' +Returns: Dict[Sequence, Tuple[Type, str, int, Tuple[ParameterIntro], Tuple[Intermediate], Flags, str) +''' +def get_seqs(predicate): + seqs={} + + all_seqs = get_sequences(predicate) + for seq in all_seqs: + seq_list = all_seqs[seq] + + if len(seq_list) > 1: + sorted_seqs = sorted(seq_list, key=lambda nseq: nseq.name) + + name='_OR_'.join(tuple([nseq.name for nseq in sorted_seqs])) + comment=' or '.join(tuple([nseq.comment for nseq in sorted_seqs])) + + flags=None + for nseq in sorted_seqs: + _flags = nseq.flags + if _flags is None or flags is None: + flags = None + else: + flags &= _flags + + else: + name=seq_list[0].name + comment=seq_list[0].comment + flags=seq_list[0].flags + + seqs[seq] = (seq.stype, name, seq.final, seq.pintro, seq.intermediates, flags, comment) + + return seqs + +''' Write copyright header ''' +def write_header(outfile): + outfile.write(''' +/* Generated by parser-seq.py; do not edit! */ + +/* + * Copyright © 2015 David Herrmann + * Copyright © 2018, 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ +''') + + +''' Write sequences ''' +def write_seqs(output, stype): + outfile = open(output.as_posix(), 'w') + write_header(outfile) + outfile.write(''' +#if !defined(_VTE_SEQ) || !defined(_VTE_NOQ) +#error "Must define _VTE_SEQ and _VTE_NOQ before including this file" +#endif + +''') + + def name_or_none(e): + if e is None: + return 'NONE' + else: + return e.name + + def final_char(c): + if c == 0x5c: + return "'\\\\'" + elif c >= 0x20 and c <= 0x7f: + return f"'{c:c}'" + else: + return f'0x{c:02x}' + + def flags_to_dispatch_flags(flags): + if flags is not None and flags & Flags.UNRIPE: + return "VTE_DISPATCH_UNRIPE" + return "0" + + seqs = get_seqs(lambda seq: seq.stype == stype) + for seq in seqs: + stype, name, final, pintro, intermediates, flags, comment = seqs[seq] + + if len(intermediates) > 2: + raise ValueError('{name} has too many intermediates') + elif len(intermediates) == 1: + intermediate0 = intermediates[0] + else: + intermediate0 = None + + if len(pintro) == 0: + pintro0 = None + else: + pintro0 = pintro[0] + + if flags is not None and flags & Flags.NOP: + macro = '_VTE_NOQ' + else: + macro = '_VTE_SEQ' + + outfile.write(f'{macro}(' + f'{name}, ' + f'{stype.name}, ' + f'{final_char(final)}, ' + f'{name_or_none(pintro0)}, ' + f'{len(intermediates)}, ' + f'{name_or_none(intermediate0)}, ' + f'{flags_to_dispatch_flags(flags)} ' + f') ' + f'/* {comment} */\n') + + +''' Write commands ''' +def write_cmds(output): + outfile = open(output.as_posix(), 'w') + write_header(outfile) + outfile.write(''' +#if !defined(_VTE_CMD) || !defined(_VTE_NOP) +#error "Must define _VTE_CMD and _VTE_NOP before including this file" +#endif +''') + + outfile.write('/* Implemented in VTE: */\n') + outfile.write(''' +_VTE_CMD(NONE) /* placeholder */ +_VTE_CMD(GRAPHIC) /* graphics character */ +''') + + cmds = get_commands(lambda seq: True) + for name in sorted(cmds): + flags, comment = cmds[name] + if flags is None or not (flags & Flags.NOP): + if comment is not None: + outfile.write(f'_VTE_CMD({name}) /* {comment} */\n') + else: + outfile.write(f'_VTE_CMD({name})\n') + + outfile.write('/* Unimplemented in VTE: */\n') + for name in sorted(cmds): + flags, comment = cmds[name] + if flags is not None and flags & Flags.NOP: + if comment is not None: + outfile.write(f'_VTE_NOP({name}) /* {comment} */\n') + else: + outfile.write(f'_VTE_NOP({name})\n') + + +''' Write command handlers ''' +def write_hdlr(output): + + def cmd_handler_macro(flags): + if flags is None: + return '_VTE_CMD_HANDLER' + elif flags & Flags.NOP: + return '_VTE_CMD_HANDLER_NOP' + elif flags & Flags.HANDLER_RV: + return '_VTE_CMD_HANDLER_R' + else: + return '_VTE_CMD_HANDLER' + + outfile = open(output.as_posix(), 'w') + write_header(outfile) + outfile.write(''' +#if !defined(_VTE_CMD_HANDLER) || !defined(_VTE_CMD_HANDLER_R) || !defined(_VTE_CMD_HANDLER_NOP) +#error "Must define _VTE_CMD_HANDLER, _VTE_CMD_HANDLER_R and _VTE_CMD_HANDLER_NOP before including this file" +#endif +''') + + outfile.write(''' +_VTE_CMD_HANDLER_NOP(NONE) /* placeholder */ +_VTE_CMD_HANDLER(GRAPHIC) /* graphics character */ +''') + + cmds = get_commands(lambda seq: True) + for name in sorted(cmds): + flags, comment = cmds[name] + if comment is not None: + outfile.write(f'{cmd_handler_macro(flags)}({name}) /* {comment} */\n') + else: + outfile.write(f'{cmd_handler_macro(flags)}({name})\n') + + +# main + +''' main ''' +if __name__ == '__main__': + + parser = argparse.ArgumentParser(description='parser sequences list generator') + parser.add_argument('--destdir', + type=pathlib.Path, + default=pathlib.PosixPath('.'), + help='Output directory') + + try: + args = parser.parse_args() + except Exception as e: + print(f'Failed to parse arguments: {e}') + sys.exit(1) + + write_seqs(args.destdir / "parser-c01.hh", Type.CONTROL) + write_seqs(args.destdir / "parser-esc.hh", Type.ESCAPE) + write_seqs(args.destdir / "parser-csi.hh", Type.CSI) + write_seqs(args.destdir / "parser-dcs.hh", Type.DCS) + write_seqs(args.destdir / "parser-sci.hh", Type.SCI) + + write_cmds(args.destdir / "parser-cmd.hh") + write_hdlr(args.destdir / "parser-cmd-handlers.hh") diff --git a/src/parser-sgr.hh b/src/parser-sgr.hh index c12e5ad..b314cd3 100644 --- a/src/parser-sgr.hh +++ b/src/parser-sgr.hh @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License) or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * - * This library is distributed in the hope that it will be useful) + * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not) see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #if !defined(_VTE_SGR) || !defined(_VTE_NGR) diff --git a/src/parser-string.hh b/src/parser-string.hh index 7de37e4..e84a5ef 100644 --- a/src/parser-string.hh +++ b/src/parser-string.hh @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -34,6 +34,7 @@ typedef struct vte_seq_string_t { } vte_seq_string_t; #define VTE_SEQ_STRING_DEFAULT_CAPACITY (1 << 7) /* must be power of two */ + #define VTE_SEQ_STRING_MAX_CAPACITY (1 << 12) /* diff --git a/src/parser-test.cc b/src/parser-test.cc index b0a70bb..1a87e7e 100644 --- a/src/parser-test.cc +++ b/src/parser-test.cc @@ -1,18 +1,18 @@ /* * Copyright © 2017, 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -31,6 +31,7 @@ using namespace std::literals; #include "parser.hh" #include "parser-glue.hh" + #include "parser-charset-tables.hh" #ifdef PARSER_INCLUDE_NOP @@ -291,7 +292,7 @@ test_seq_control(void) uint32_t c; unsigned int cmd; } const controls [] = { -#define _VTE_SEQ(cmd,type,f,pi,ni,i0) { f, VTE_CMD_##cmd }, +#define _VTE_SEQ(cmd,type,f,pi,ni,i0,flags) { f, VTE_CMD_##cmd }, #include "parser-c01.hh" #undef _VTE_SEQ }; @@ -396,6 +397,10 @@ test_seq_esc_charset(uint32_t i[], /* intermediates */ if (f >= ts && f < (ts + ntable)) cs = table[f - ts]; + else if (f == 0x7e && + cmd != VTE_CMD_DOCS && + defaultcs != VTE_CHARSET_DRCS) + cs = VTE_CHARSET_EMPTY; else cs = defaultcs; @@ -507,8 +512,14 @@ test_seq_esc_charset_94_n(void) test_seq_esc_charset(i, 3, nullptr, 0, 0, VTE_CMD_GnDMm, VTE_CHARSET_DRCS, slot); + i[2] = 0x21; + test_seq_esc_charset(i, 3, + charset_graphic_94_n_with_2_1, + G_N_ELEMENTS(charset_graphic_94_n_with_2_1), + 0x30, VTE_CMD_GnDMm, VTE_CHARSET_NONE, slot); + /* There could be one more intermediate byte. */ - for (i[2] = 0x21; i[2] < 0x28; i[2]++) { + for (i[2] = 0x22; i[2] < 0x28; i[2]++) { if (i[2] == 0x24) /* TODO */ continue; @@ -644,7 +655,7 @@ test_seq_esc_known(void) { parser.reset(); -#define _VTE_SEQ(cmd,type,f,p,ni,i) \ +#define _VTE_SEQ(cmd,type,f,p,ni,i,flags) \ test_seq_esc_known(f, VTE_SEQ_INTERMEDIATE_CHAR_##i, VTE_CMD_##cmd); #include "parser-esc.hh" #undef _VTE_SEQ @@ -782,7 +793,7 @@ test_seq_sci_known(void) { parser.reset(); -#define _VTE_SEQ(cmd,type,f,p,ni,i) \ +#define _VTE_SEQ(cmd,type,f,p,ni,i,flags) \ test_seq_sci_known(f, VTE_CMD_##cmd); #include "parser-sci.hh" #undef _VTE_SEQ @@ -810,7 +821,7 @@ test_seq_csi_known(void) { parser.reset(); -#define _VTE_SEQ(cmd,type,f,p,ni,i) \ +#define _VTE_SEQ(cmd,type,f,p,ni,i,flags) \ test_seq_csi_known(f, VTE_SEQ_PARAMETER_CHAR_##p, VTE_SEQ_INTERMEDIATE_CHAR_##i, VTE_CMD_##cmd); #include "parser-csi.hh" #undef _VTE_SEQ @@ -951,7 +962,7 @@ test_seq_dcs_known(void) { parser.reset(); -#define _VTE_SEQ(cmd,type,f,p,ni,i) \ +#define _VTE_SEQ(cmd,type,f,p,ni,i,flags) \ test_seq_dcs_known(f, VTE_SEQ_PARAMETER_CHAR_##p, VTE_SEQ_INTERMEDIATE_CHAR_##i, VTE_CMD_##cmd); #include "parser-dcs.hh" #undef _VTE_SEQ @@ -1248,19 +1259,19 @@ feed_parser_st(vte_seq_builder& b, switch (st) { case u32SequenceBuilder::ST::NONE: - g_assert_cmpuint(seq.terminator(), ==, 0); + g_assert_cmpuint(seq.st(), ==, 0); break; case u32SequenceBuilder::ST::DEFAULT: - g_assert_cmpuint(seq.terminator(), ==, c1 ? 0x9c /* ST */ : 0x5c /* BACKSLASH */); + g_assert_cmpuint(seq.st(), ==, c1 ? 0x9c /* ST */ : 0x5c /* BACKSLASH */); break; case u32SequenceBuilder::ST::C0: - g_assert_cmpuint(seq.terminator(), ==, 0x5c /* BACKSLASH */); + g_assert_cmpuint(seq.st(), ==, 0x5c /* BACKSLASH */); break; case u32SequenceBuilder::ST::C1: - g_assert_cmpuint(seq.terminator(), ==, 0x9c /* ST */); + g_assert_cmpuint(seq.st(), ==, 0x9c /* ST */); break; case u32SequenceBuilder::ST::BEL: - g_assert_cmpuint(seq.terminator(), ==, 0x7 /* BEL */); + g_assert_cmpuint(seq.st(), ==, 0x7 /* BEL */); break; } diff --git a/src/parser.cc b/src/parser.cc index ca2eb56..800bdf2 100644 --- a/src/parser.cc +++ b/src/parser.cc @@ -2,177 +2,40 @@ * Copyright © 2015 David Herrmann * Copyright © 2017, 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" -#include "parser.hh" - -#include -#include -#include +#include #include +#include +#include +#include +#include +#include -#include +#include "parser.hh" #include "parser-charset-tables.hh" -#ifdef PARSER_INCLUDE_NOP -#define _VTE_NOQ(...) _VTE_SEQ(__VA_ARGS__) -#else -#define _VTE_NOQ(...) -#endif +namespace vte { +namespace parser { -/* - * Terminal Parser - * This file contains a bunch of UTF-8 helpers and the main ctlseq-parser. The - * parser is a simple state-machine that correctly parses all CSI, DCS, OSC, ST - * control sequences and generic escape sequences. - * The parser itself does not perform any actions but lets the caller react to - * detected sequences. - * - * This parser is mostly DEC VT100+ compatible; known differences are: - * - * * DEC only recognises up to 16 parameters; vte up to 32 (and that can be easily - * extended) - * - * * DEC's parameter values range is 0..16384; vte supports 0..65535 (16-bit range). - * - * * When the number of parameter exceeds that number, DEC executes the function - * with these parameters, ignoring the excessive parameters; vte ignores the - * whole function instead. - * - * * DEC ignores CSI sequences with colon-separated parameters; vte implements colon- - * separated parameters as subparameters (this is an extension taken from ITU-T T.416). - * - * * DEC executes format effector controls in CSI, OSC, DCS sequences as if the - * control was received before the control sequence; vte only does this for CSI - * sequences and ignores all controls except ESC and BEL in OSC control strings, - * and passes all controls except ESC through to the control string in DCS sequences. - * - * * DEC only allows ST (either C0 or C1) to terminate OSC strings; vte allows - * OSC to be terminated by BEL (this is a deprecated xterm extension). - * - * * DEC parses ESC Z as DECID, a deprecated function equivalent to DA1; vte - * implements ECMA-48's SCI (single character introducer) instead. - */ - -/* - * Command Parser - * The ctl-seq parser "vte_parser" only detects whole sequences, it does not - * detect the specific command. Once a sequence is parsed, the command-parsers - * are used to figure out their meaning. - */ - -/* - * Intermediates (and, for CSI/DCS, the optional parameter character) are - * stored efficiently in an unsigned int. Intermediates can be 2/00..2/15, - * plus one value for 'no intermediate'; together that fits into 5 bits. - * Parameter character can be 'no parameter character', or one from - * 3/12..3/15; that fits into 3 bits. - * - * In @seq.intermediates, the nth intermediates is stored with shift n * 5, - * plus (for CSI/DCS) an additional shift of 3 for the parameter character - * which is stored at bits 0..2. - * - * VTE_SEQ_PARAMETER(u) extracts the parameter character - * of a CSI or DCS sequence - * VTE_SEQ_REMOVE_PARAMETER(u) extracts the intermediates - * of a CSI or DCS sequence - * VTE_SEQ_INTERMEDIATE(u) extracts the first intermediate from an - * intermediates value (for CSI/DCS, that must be without parameter - * character, see VTE_SEQ_REMOVE_PARAMETER) - * VTE_SEQ_REMOVE_INTERMEDIATE(u) extracts the remaining intermediates - * after the first one; use VTE_SEQ_INTERMEDIATE on its return value - * to extract the 2nd intermediate, and so on - */ - -#define VTE_SEQ_PARAMETER_BITS (3) -#define VTE_SEQ_INTERMEDIATE_BITS (5) -#define VTE_SEQ_INTERMEDIATE_MASK ((1U << VTE_SEQ_INTERMEDIATE_BITS) - 1U) -#define VTE_SEQ_PARAMETER_MASK ((1U << VTE_SEQ_PARAMETER_BITS) - 1U) -#define VTE_SEQ_PARAMETER(u) ((u) & VTE_SEQ_PARAMETER_MASK) -#define VTE_SEQ_REMOVE_PARAMETER(u) ((u) >> VTE_SEQ_PARAMETER_BITS) -#define VTE_SEQ_INTERMEDIATE(u) ((u) & VTE_SEQ_INTERMEDIATE_MASK) -#define VTE_SEQ_REMOVE_INTERMEDIATE(u) ((u) >> VTE_SEQ_INTERMEDIATE_BITS) -#define VTE_MAKE_CHARSET(c,s) ((c) | ((s) << VTE_CHARSET_SLOT_OFFSET)) - -/* - * _VTE_SEQ_CODE_ESC(final, intermediates): - * - * Make a value combining the final character and the intermediates, - * to be used to match a sequence against known sequences. - * - * Since this is only used with NONE or HASH as first intermediate, - * we can reduce the size of the lookup table by slashing the least - * significant bit off. - * - * Final characters is 3/0..7/14, needing 7 bits. - */ -#define _VTE_SEQ_CODE_ESC(f,i) (((f) - 0x30) | ((i) >> 1) << 7) - -/* - * _VTE_SEQ_CODE_COMBINE(parameter, intermediates) - * - * Combines intermediates and the parameter character into one - * value to be used when matching a sequence against known sequences. - */ -#define _VTE_SEQ_CODE_COMBINE(p,i) ((p) | ((i) << VTE_SEQ_PARAMETER_BITS)) - -/* - * _VTE_SEQ_CODE(final, intermediates): - * - * Make a value combining the final character and the intermediates, - * to be used to match a sequence against known sequences. Used for - * CSI and DCS sequences; use _VTE_SEQ_CODE_COMBINE to combine - * parameter and intermediates into one to pass as 2nd argument here. - * - * Final character is 4/0..7/14, needing 6 bits. - */ -#define _VTE_SEQ_CODE(f,i) (((f) - 0x40) | ((i) << 6)) - -/* - * @introducer: either a C1 control, or the final in the equivalent ESC F sequence - * @terminator: either a C1 control, or the final in the equivalent ESC F sequence - * - * Checks whether the OSC/DCS @introducer and the ST @terminator - * are from the same control set, i.e. both C0 or both C1. - * - * For OSC, this check allows C0 OSC with BEL-as-ST to pass, too. - */ -static inline bool -parser_check_matching_controls(uint32_t introducer, - uint32_t terminator) -{ - return ((introducer ^ terminator) & 0x80) == 0; -} - -static unsigned int -vte_parse_host_control(vte_seq_t const* seq) -{ - switch (seq->terminator) { -#define _VTE_SEQ(cmd,type,f,pi,ni,i0) case f: return VTE_CMD_##cmd; -#include "parser-c01.hh" -#undef _VTE_SEQ - default: return VTE_CMD_NONE; - } -} - -static unsigned int -vte_parse_charset_94(uint32_t raw, - unsigned int intermediates) +uint32_t +Parser::parse_charset_94(uint32_t raw, + unsigned int intermediates) noexcept { assert (raw >= 0x30 && raw < 0x7f); @@ -217,12 +80,12 @@ vte_parse_charset_94(uint32_t raw, break; } - return VTE_CHARSET_NONE; + return charset_empty_or_none(raw); } -static unsigned int -vte_parse_charset_94_n(uint32_t raw, - unsigned int intermediates) +uint32_t +Parser::parse_charset_94_n(uint32_t raw, + unsigned int intermediates) noexcept { assert (raw >= 0x30 && raw < 0x7f); @@ -237,14 +100,20 @@ vte_parse_charset_94_n(uint32_t raw, case VTE_SEQ_INTERMEDIATE_SPACE: return VTE_CHARSET_DRCS; + + case VTE_SEQ_INTERMEDIATE_BANG: + if (remaining_intermediates == 0 && + raw < (0x30 + G_N_ELEMENTS(charset_graphic_94_n_with_2_1))) + return charset_graphic_94_n_with_2_1[raw - 0x30]; + break; } - return VTE_CHARSET_NONE; + return charset_empty_or_none(raw); } -static unsigned int -vte_parse_charset_96(uint32_t raw, - unsigned int intermediates) +uint32_t +Parser::parse_charset_96(uint32_t raw, + unsigned int intermediates) noexcept { assert (raw >= 0x30 && raw < 0x7f); @@ -261,22 +130,22 @@ vte_parse_charset_96(uint32_t raw, return VTE_CHARSET_DRCS; } - return VTE_CHARSET_NONE; + return charset_empty_or_none(raw); } -static unsigned int -vte_parse_charset_96_n(uint32_t raw, - unsigned int intermediates) +uint32_t +Parser::parse_charset_96_n(uint32_t raw, + unsigned int intermediates) noexcept { if (VTE_SEQ_INTERMEDIATE(intermediates) == VTE_SEQ_INTERMEDIATE_SPACE) return VTE_CHARSET_DRCS; - return VTE_CHARSET_NONE; + return charset_empty_or_none(raw); } -static unsigned int -vte_parse_charset_ocs(uint32_t raw, - unsigned int intermediates) +uint32_t +Parser::parse_charset_ocs(uint32_t raw, + unsigned int intermediates) noexcept { assert (raw >= 0x30 && raw < 0x7f); @@ -293,7 +162,6 @@ vte_parse_charset_ocs(uint32_t raw, if (remaining_intermediates == 0 && raw >= 0x30 && raw < (0x30 + G_N_ELEMENTS(charset_ocs_with_2_0))) return charset_ocs_with_2_0[raw - 0x30]; - /* Or should this return VTE_CHARSET_DRCS; ? */ break; case VTE_SEQ_INTERMEDIATE_BANG ... VTE_SEQ_INTERMEDIATE_DOT: /* OCS with standard return */ @@ -309,9 +177,9 @@ vte_parse_charset_ocs(uint32_t raw, return VTE_CHARSET_NONE; } -static unsigned int -vte_parse_charset_control(uint32_t raw, - unsigned int intermediates) +uint32_t +Parser::parse_charset_control(uint32_t raw, + unsigned int intermediates) noexcept { assert (raw >= 0x30 && raw < 0x7f); @@ -331,12 +199,12 @@ vte_parse_charset_control(uint32_t raw, break; } - return VTE_CHARSET_NONE; + return charset_empty_or_none(raw); } -static unsigned int -vte_parse_host_escape(vte_seq_t const* seq, - unsigned int *cs_out) +uint32_t +Parser::parse_host_escape(vte_seq_t const* seq, + unsigned int *cs_out) noexcept { unsigned int intermediates = seq->intermediates; unsigned int intermediate0 = VTE_SEQ_INTERMEDIATE(intermediates); @@ -346,7 +214,7 @@ vte_parse_host_escape(vte_seq_t const* seq, case VTE_SEQ_INTERMEDIATE_NONE: case VTE_SEQ_INTERMEDIATE_HASH: { /* Single control functions */ switch (_VTE_SEQ_CODE_ESC(seq->terminator, intermediates)) { -#define _VTE_SEQ(cmd,type,f,p,ni,i) \ +#define _VTE_SEQ(cmd,type,f,p,ni,i,flags) \ case _VTE_SEQ_CODE_ESC(f, VTE_SEQ_INTERMEDIATE_##i): return VTE_CMD_##cmd; #include "parser-esc.hh" #undef _VTE_SEQ @@ -362,7 +230,7 @@ vte_parse_host_escape(vte_seq_t const* seq, case VTE_SEQ_INTERMEDIATE_BANG: /* C0-designate */ case VTE_SEQ_INTERMEDIATE_DQUOTE: /* C1-designate */ - *cs_out = VTE_MAKE_CHARSET(vte_parse_charset_control(seq->terminator, intermediates), + *cs_out = VTE_MAKE_CHARSET(parse_charset_control(seq->terminator, intermediates), intermediate0 - VTE_SEQ_INTERMEDIATE_BANG); return VTE_CMD_CnD; @@ -382,8 +250,7 @@ vte_parse_host_escape(vte_seq_t const* seq, case '@': case 'A': case 'B': /* G0-designate multibyte charset */ - *cs_out = VTE_MAKE_CHARSET(vte_parse_charset_94_n(seq->terminator, - remaining_intermediates), + *cs_out = VTE_MAKE_CHARSET(parse_charset_94_n(seq->terminator, remaining_intermediates), 0); return VTE_CMD_GnDMm; } @@ -393,8 +260,7 @@ vte_parse_host_escape(vte_seq_t const* seq, case VTE_SEQ_INTERMEDIATE_PCLOSE: /* G1-designate 94^n-set */ case VTE_SEQ_INTERMEDIATE_MULT: /* G2-designate 94^n-set */ case VTE_SEQ_INTERMEDIATE_PLUS: /* G3-designate 94^n-set */ - *cs_out = VTE_MAKE_CHARSET(vte_parse_charset_94_n(seq->terminator, - remaining_intermediates), + *cs_out = VTE_MAKE_CHARSET(parse_charset_94_n(seq->terminator, remaining_intermediates), intermediate1 - VTE_SEQ_INTERMEDIATE_POPEN); return VTE_CMD_GnDMm; @@ -404,8 +270,7 @@ vte_parse_host_escape(vte_seq_t const* seq, case VTE_SEQ_INTERMEDIATE_MINUS: /* G1-designate 96^n-set */ case VTE_SEQ_INTERMEDIATE_DOT: /* G2-designate 96^n-set */ case VTE_SEQ_INTERMEDIATE_SLASH: /* G3-designate 96^n-set */ - *cs_out = VTE_MAKE_CHARSET(vte_parse_charset_96_n(seq->terminator, - remaining_intermediates), + *cs_out = VTE_MAKE_CHARSET(parse_charset_96_n(seq->terminator, remaining_intermediates), intermediate1 - VTE_SEQ_INTERMEDIATE_COMMA); return VTE_CMD_GnDMm; } @@ -413,8 +278,7 @@ vte_parse_host_escape(vte_seq_t const* seq, } case VTE_SEQ_INTERMEDIATE_PERCENT: /* Designate other coding system */ - *cs_out = vte_parse_charset_ocs(seq->terminator, - VTE_SEQ_REMOVE_INTERMEDIATE(intermediates)); + *cs_out = parse_charset_ocs(seq->terminator, VTE_SEQ_REMOVE_INTERMEDIATE(intermediates)); return VTE_CMD_DOCS; case VTE_SEQ_INTERMEDIATE_AND: /* Identify revised registration */ @@ -429,8 +293,8 @@ vte_parse_host_escape(vte_seq_t const* seq, case VTE_SEQ_INTERMEDIATE_PCLOSE: /* G1-designate 94-set */ case VTE_SEQ_INTERMEDIATE_MULT: /* G2-designate 94-set */ case VTE_SEQ_INTERMEDIATE_PLUS: /* G3-designate 94-set */ - *cs_out = VTE_MAKE_CHARSET(vte_parse_charset_94(seq->terminator, - VTE_SEQ_REMOVE_INTERMEDIATE(intermediates)), + *cs_out = VTE_MAKE_CHARSET(parse_charset_94(seq->terminator, + VTE_SEQ_REMOVE_INTERMEDIATE(intermediates)), intermediate0 - VTE_SEQ_INTERMEDIATE_POPEN); return VTE_CMD_GnDm; @@ -440,8 +304,8 @@ vte_parse_host_escape(vte_seq_t const* seq, case VTE_SEQ_INTERMEDIATE_MINUS: /* G1-designate 96-set */ case VTE_SEQ_INTERMEDIATE_DOT: /* G2-designate 96-set */ case VTE_SEQ_INTERMEDIATE_SLASH: /* G3-designate 96-set */ - *cs_out = VTE_MAKE_CHARSET(vte_parse_charset_96(seq->terminator, - VTE_SEQ_REMOVE_INTERMEDIATE(intermediates)), + *cs_out = VTE_MAKE_CHARSET(parse_charset_96(seq->terminator, + VTE_SEQ_REMOVE_INTERMEDIATE(intermediates)), intermediate0 - VTE_SEQ_INTERMEDIATE_COMMA); return VTE_CMD_GnDm; } @@ -449,998 +313,52 @@ vte_parse_host_escape(vte_seq_t const* seq, return VTE_CMD_NONE; } -static unsigned int -vte_parse_host_csi(vte_seq_t const* seq) +uint32_t +Parser::parse_host_csi(vte_seq_t const* seq) noexcept { switch (_VTE_SEQ_CODE(seq->terminator, seq->intermediates)) { -#define _VTE_SEQ(cmd,type,f,p,ni,i) \ +#define _VTE_SEQ(cmd,type,f,p,ni,i,flags) \ case _VTE_SEQ_CODE(f, _VTE_SEQ_CODE_COMBINE(VTE_SEQ_PARAMETER_##p, VTE_SEQ_INTERMEDIATE_##i)): return VTE_CMD_##cmd; #include "parser-csi.hh" #undef _VTE_SEQ - default: return VTE_CMD_NONE; + default: return VTE_CMD_NONE; } } -static unsigned int -vte_parse_host_dcs(vte_seq_t const* seq) +uint32_t +Parser::parse_host_control(vte_seq_t const* seq) noexcept +{ + switch (seq->terminator) { +#define _VTE_SEQ(cmd,type,f,pi,ni,i0,flags) case f: return VTE_CMD_##cmd; +#include "parser-c01.hh" +#undef _VTE_SEQ + default: return VTE_CMD_NONE; + } +} + +uint32_t +Parser::parse_host_dcs(vte_seq_t const* seq, unsigned int* flagsptr) noexcept { switch (_VTE_SEQ_CODE(seq->terminator, seq->intermediates)) { -#define _VTE_SEQ(cmd,type,f,p,ni,i) \ - case _VTE_SEQ_CODE(f, _VTE_SEQ_CODE_COMBINE(VTE_SEQ_PARAMETER_##p, VTE_SEQ_INTERMEDIATE_##i)): return VTE_CMD_##cmd; +#define _VTE_SEQ(cmd,type,f,p,ni,i,flags) \ + case _VTE_SEQ_CODE(f, _VTE_SEQ_CODE_COMBINE(VTE_SEQ_PARAMETER_##p, VTE_SEQ_INTERMEDIATE_##i)): *flagsptr = flags; return VTE_CMD_##cmd; #include "parser-dcs.hh" #undef _VTE_SEQ - default: return VTE_CMD_NONE; + default: return VTE_CMD_NONE; } } -static unsigned int -vte_parse_host_sci(vte_seq_t const* seq) +uint32_t +Parser::parse_host_sci(vte_seq_t const* seq) noexcept { switch (_VTE_SEQ_CODE(seq->terminator, 0)) { -#define _VTE_SEQ(cmd,type,f,p,ni,i) \ - case _VTE_SEQ_CODE(f, 0): return VTE_CMD_##cmd; +#define _VTE_SEQ(cmd,type,f,p,ni,i,flags) \ + case _VTE_SEQ_CODE(f, 0): return VTE_CMD_##cmd; #include "parser-sci.hh" #undef _VTE_SEQ default: return VTE_CMD_NONE; } } -/* - * State Machine - * This parser controls the parser-state and returns any detected sequence to - * the caller. The parser is based on this state-diagram from Paul Williams: - * https://vt100.net/emu/ - * It was written from scratch and extended where needed. - * This parser is fully compatible up to the vt500 series. We expect UCS-4 as - * input. It's the callers responsibility to do any UTF-8 parsing. - */ - -enum parser_state_t { - STATE_GROUND, /* initial state and ground */ - STATE_DCS_PASS_ESC, /* ESC after DCS which may be ESC \ aka C0 ST */ - STATE_OSC_STRING_ESC, /* ESC after OSC which may be ESC \ aka C0 ST */ - STATE_ESC, /* ESC sequence was started */ - STATE_ESC_INT, /* intermediate escape characters */ - STATE_CSI_ENTRY, /* starting CSI sequence */ - STATE_CSI_PARAM, /* CSI parameters */ - STATE_CSI_INT, /* intermediate CSI characters */ - STATE_CSI_IGNORE, /* CSI error; ignore this CSI sequence */ - STATE_DCS_ENTRY, /* starting DCS sequence */ - STATE_DCS_PARAM, /* DCS parameters */ - STATE_DCS_INT, /* intermediate DCS characters */ - STATE_DCS_PASS, /* DCS data passthrough */ - STATE_DCS_IGNORE, /* DCS error; ignore this DCS sequence */ - STATE_OSC_STRING, /* parsing OSC sequence */ - STATE_ST_IGNORE, /* unimplemented seq; ignore until ST */ - STATE_SCI, /* single character introducer sequence was started */ - - STATE_N, -}; - -/* Parser state transitioning */ - -typedef int (* parser_action_func)(vte_parser_t* parser, uint32_t raw); - -// FIXMEchpe: I get weird performance results here from -// either not inlining, inlining these function or the -// macros below. Sometimes (after a recompile) one is -// (as much as 50%!) slower, sometimes the other one etc. ‽ - -#if 1 // (inline) functions - -// #define PTINLINE inline -#define PTINLINE - -/* nop */ -static PTINLINE int -parser_nop(vte_parser_t* parser, - uint32_t raw) -{ - return VTE_SEQ_NONE; -} -/* dispatch related actions */ -static PTINLINE int -parser_action(vte_parser_t* parser, - uint32_t raw, - parser_action_func action) -{ - return action(parser, raw); -} - -/* perform state transition */ -static PTINLINE int -parser_transition_no_action(vte_parser_t* parser, - uint32_t raw, - unsigned int state) -{ - parser->state = state; - return VTE_SEQ_NONE; -} - -/* perform state transition and dispatch related actions */ -static PTINLINE int -parser_transition(vte_parser_t* parser, - uint32_t raw, - unsigned int state, - parser_action_func action) -{ - parser->state = state; - - return action(parser, raw); -} - -#undef PTINLINE - -#else // macros - -/* nop */ -#define parser_nop(parser,raw) \ - ({ VTE_SEQ_NONE; }) - -/* dispatch related actions */ -#define parser_action(p,r,a) \ - ({ \ - a((p), (r)); \ - }) - -/* perform state transition */ -#define parser_transition_no_action(p,r,s) \ - ({ \ - parser->state = s; \ - VTE_SEQ_NONE; \ - }) - -/* perform state transition and dispatch related actions */ -#define parser_transition(p,r,s,a) \ - ({ \ - (p)->state = s; \ - a((p), (r)); \ - }) - -#endif // (inline) functions or macros - -/** - * vte_parser_init() - Initialise parser object - * @parser: the struct vte_parser - */ -void -vte_parser_init(vte_parser_t* parser) -{ - memset(parser, 0, sizeof(*parser)); - vte_seq_string_init(&parser->seq.arg_str); -} - -/** - * vte_parser_deinit() - Deinitialises parser object - * @parser: parser object to deinitialise - */ -void -vte_parser_deinit(vte_parser_t* parser) -{ - vte_seq_string_free(&parser->seq.arg_str); -} - -static inline int -parser_clear(vte_parser_t* parser, - uint32_t raw) -{ - /* seq.command is set when the sequence is executed, - * seq.terminator is set when the final character is received, - * and seq.introducer is set when the introducer is received, - * and all this happens before the sequence is dispatched. - * Therefore these fiedls need not be cleared in any case. - */ - return VTE_SEQ_NONE; -} - -static inline int -parser_clear_int(vte_parser_t* parser, - uint32_t raw) -{ - parser->seq.intermediates = 0; - parser->seq.n_intermediates = 0; - - return parser_clear(parser, raw); -} - -static inline int -parser_clear_params(vte_parser_t* parser, - uint32_t raw) -{ - /* The (n_args+1)th parameter may have been started but not - * finialised, so it needs cleaning too. All further params - * have not been touched, so need not be cleaned. - */ - unsigned int n_args = G_UNLIKELY(parser->seq.n_args >= VTE_PARSER_ARG_MAX) - ? VTE_PARSER_ARG_MAX - : parser->seq.n_args + 1; - memset(parser->seq.args, 0, n_args * sizeof(parser->seq.args[0])); -#ifdef PARSER_EXTRA_CLEAN - /* Assert that the assumed-clean params are actually clean. */ - for (unsigned int n = n_args; n < VTE_PARSER_ARG_MAX; ++n) - g_assert_cmpuint(parser->seq.args[n], ==, VTE_SEQ_ARG_INIT_DEFAULT); -#endif - - parser->seq.n_args = 0; - parser->seq.n_final_args = 0; - - return VTE_SEQ_NONE; -} - -static inline int -parser_clear_int_and_params(vte_parser_t* parser, - uint32_t raw) -{ - parser_clear_int(parser, raw); - return parser_clear_params(parser, raw); -} - -static int -parser_ignore(vte_parser_t* parser, - uint32_t raw) -{ - parser->seq.type = VTE_SEQ_IGNORE; - parser->seq.command = VTE_CMD_NONE; - parser->seq.terminator = raw; - - return parser->seq.type; -} - -static int -parser_print(vte_parser_t* parser, - uint32_t raw) -{ - parser->seq.type = VTE_SEQ_GRAPHIC; - parser->seq.command = VTE_CMD_GRAPHIC; - parser->seq.terminator = raw; - - return parser->seq.type; -} - -static int -parser_execute(vte_parser_t* parser, - uint32_t raw) -{ - parser->seq.type = VTE_SEQ_CONTROL; - parser->seq.terminator = raw; - parser->seq.command = vte_parse_host_control(&parser->seq); - - return parser->seq.type; -} - -static int -parser_collect_esc(vte_parser_t* parser, - uint32_t raw) -{ - assert(raw >= 0x20 && raw <= 0x2f); - - /* ESCAPE sequences only have intermediates or 2/0..2/15, so there's no - * need for the extra shift as below for CSI/DCS sequences - */ - parser->seq.intermediates |= (VTE_SEQ_MAKE_INTERMEDIATE(raw) << (VTE_SEQ_INTERMEDIATE_BITS * parser->seq.n_intermediates++)); - - return VTE_SEQ_NONE; -} - -static int -parser_collect_csi(vte_parser_t* parser, - uint32_t raw) -{ - assert(raw >= 0x20 && raw <= 0x2f); - - /* In addition to 2/0..2/15 intermediates, CSI/DCS sequence - * can also have one parameter byte 3/12..3/15 at the - * start of the parameters (see parser_collect_parameter below); - * that's what the extra shift is for. - */ - parser->seq.intermediates |= (VTE_SEQ_MAKE_INTERMEDIATE(raw) << (VTE_SEQ_PARAMETER_BITS + - VTE_SEQ_INTERMEDIATE_BITS * parser->seq.n_intermediates++)); - - return VTE_SEQ_NONE; -} - -static int -parser_collect_parameter(vte_parser_t* parser, - uint32_t raw) -{ - assert(raw >= 0x3c && raw <= 0x3f); - - /* CSI/DCS may optionally have one parameter byte from 3/12..3/15 - * at the start of the parameters; we put that into the lowest - * part of @seq.intermediates. - * Note that there can only be *one* such byte; the state machine - * already enforces that, so we do not need any additional checks - * here. - */ - parser->seq.intermediates |= VTE_SEQ_MAKE_PARAMETER(raw); - - return VTE_SEQ_NONE; -} - -static void -parser_params_overflow(vte_parser_t* parser, - uint32_t raw) -{ - /* An overflow of the parameter number can only happen in - * STATE_{CSI,DCS}_PARAM, and it occurs when - * seq.n_arg == VTE_PARSER_ARG_MAX, and either an 0…9 - * is encountered, starting the next param, or an - * explicit ':' or ';' terminating a (defaulted) (sub)param, - * or when the intermediates/final character(s) occur - * after a defaulted (sub)param. - * - * Transition to STATE_{CSI,DCS}_IGNORE to ignore the - * whole sequence. - */ - parser_transition_no_action(parser, - raw, - parser->state == STATE_CSI_PARAM ? - STATE_CSI_IGNORE : STATE_DCS_IGNORE); -} - -/* The next two functions are only called when encountering a ';' or ':', - * so if there's already MAX-1 parameters, the ';' or ':' would finish - * the MAXth parameter and there would be a default or non-default - * MAX+1th parameter following it. - */ -static int -parser_finish_param(vte_parser_t* parser, - uint32_t raw) -{ - if (G_LIKELY(parser->seq.n_args < VTE_PARSER_ARG_MAX - 1)) { - vte_seq_arg_finish(&parser->seq.args[parser->seq.n_args], false); - ++parser->seq.n_args; - ++parser->seq.n_final_args; - } else - parser_params_overflow(parser, raw); - - return VTE_SEQ_NONE; -} - -static int -parser_finish_subparam(vte_parser_t* parser, - uint32_t raw) -{ - if (G_LIKELY(parser->seq.n_args < VTE_PARSER_ARG_MAX - 1)) { - vte_seq_arg_finish(&parser->seq.args[parser->seq.n_args], true); - ++parser->seq.n_args; - } else - parser_params_overflow(parser, raw); - - return VTE_SEQ_NONE; -} - -static int -parser_param(vte_parser_t* parser, - uint32_t raw) -{ - /* assert(raw >= '0' && raw <= '9'); */ - - if (G_LIKELY(parser->seq.n_args < VTE_PARSER_ARG_MAX)) - vte_seq_arg_push(&parser->seq.args[parser->seq.n_args], raw); - else - parser_params_overflow(parser, raw); - - return VTE_SEQ_NONE; -} - -static inline int -parser_osc_start(vte_parser_t* parser, - uint32_t raw) -{ - parser_clear(parser, raw); - - vte_seq_string_reset(&parser->seq.arg_str); - - parser->seq.introducer = raw; - return VTE_SEQ_NONE; -} - -static int -parser_osc_collect(vte_parser_t* parser, - uint32_t raw) -{ - /* - * Only characters from 0x20..0x7e and >= 0xa0 are allowed here. - * Our state-machine already verifies those restrictions. - */ - - if (G_UNLIKELY(!vte_seq_string_push(&parser->seq.arg_str, raw))) - parser->state = STATE_ST_IGNORE; - - return VTE_SEQ_NONE; -} - -static int -parser_dcs_start(vte_parser_t* parser, - uint32_t raw) -{ - parser_clear_int_and_params(parser, raw); - - vte_seq_string_reset(&parser->seq.arg_str); - - parser->seq.introducer = raw; - return VTE_SEQ_NONE; -} - -static int -parser_dcs_consume(vte_parser_t* parser, - uint32_t raw) -{ - /* parser->seq is cleared during DCS-START state, thus there's no need - * to clear invalid fields here. */ - - if (G_LIKELY(parser->seq.n_args < VTE_PARSER_ARG_MAX)) { - if (parser->seq.n_args > 0 || - vte_seq_arg_started(parser->seq.args[parser->seq.n_args])) { - vte_seq_arg_finish(&parser->seq.args[parser->seq.n_args], false); - ++parser->seq.n_args; - ++parser->seq.n_final_args; - } - } - - parser->seq.type = VTE_SEQ_DCS; - parser->seq.terminator = raw; - parser->seq.command = vte_parse_host_dcs(&parser->seq); - - return VTE_SEQ_NONE; -} - -static int -parser_dcs_collect(vte_parser_t* parser, - uint32_t raw) -{ - if (G_UNLIKELY(!vte_seq_string_push(&parser->seq.arg_str, raw))) - parser->state = STATE_DCS_IGNORE; - - return VTE_SEQ_NONE; -} - -static int -parser_esc(vte_parser_t* parser, - uint32_t raw) -{ - parser->seq.type = VTE_SEQ_ESCAPE; - parser->seq.terminator = raw; - parser->seq.charset = VTE_CHARSET_NONE; - parser->seq.command = vte_parse_host_escape(&parser->seq, - &parser->seq.charset); - - return parser->seq.type; -} - -static int -parser_csi(vte_parser_t* parser, - uint32_t raw) -{ - /* parser->seq is cleared during CSI-ENTER state, thus there's no need - * to clear invalid fields here. */ - - if (G_LIKELY(parser->seq.n_args < VTE_PARSER_ARG_MAX)) { - if (parser->seq.n_args > 0 || - vte_seq_arg_started(parser->seq.args[parser->seq.n_args])) { - vte_seq_arg_finish(&parser->seq.args[parser->seq.n_args], false); - ++parser->seq.n_args; - ++parser->seq.n_final_args; - } - } - - parser->seq.type = VTE_SEQ_CSI; - parser->seq.terminator = raw; - parser->seq.command = vte_parse_host_csi(&parser->seq); - - return parser->seq.type; -} - -static int -parser_osc(vte_parser_t* parser, - uint32_t raw) -{ - /* parser->seq is cleared during OSC_START state, thus there's no need - * to clear invalid fields here. */ - - vte_seq_string_finish(&parser->seq.arg_str); - - /* We only dispatch a DCS if the introducer and string - * terminator are from the same control set, i.e. both - * C0 or both C1; we discard sequences with mixed controls. - */ - if (!parser_check_matching_controls(parser->seq.introducer, raw)) - return VTE_SEQ_IGNORE; - - parser->seq.type = VTE_SEQ_OSC; - parser->seq.command = VTE_CMD_OSC; - parser->seq.terminator = raw; - - return parser->seq.type; -} - -static int -parser_dcs(vte_parser_t* parser, - uint32_t raw) -{ - /* parser->seq was already filled in parser_dcs_consume() */ - - vte_seq_string_finish(&parser->seq.arg_str); - - /* We only dispatch a DCS if the introducer and string - * terminator are from the same control set, i.e. both - * C0 or both C1; we discard sequences with mixed controls. - */ - if (!parser_check_matching_controls(parser->seq.introducer, raw)) - return VTE_SEQ_IGNORE; - - return parser->seq.type; -} - -static int -parser_sci(vte_parser_t* parser, - uint32_t raw) -{ - parser->seq.type = VTE_SEQ_SCI; - parser->seq.terminator = raw; - parser->seq.command = vte_parse_host_sci(&parser->seq); - - return parser->seq.type; -} - -#define ACTION_CLEAR parser_clear -#define ACTION_CLEAR_INT parser_clear_int -#define ACTION_CLEAR_INT_AND_PARAMS parser_clear_int_and_params -#define ACTION_CLEAR_PARAMS_ONLY parser_clear_params -#define ACTION_IGNORE parser_ignore -#define ACTION_PRINT parser_print -#define ACTION_EXECUTE parser_execute -#define ACTION_COLLECT_ESC parser_collect_esc -#define ACTION_COLLECT_CSI parser_collect_csi -#define ACTION_COLLECT_DCS ACTION_COLLECT_CSI -#define ACTION_COLLECT_PARAMETER parser_collect_parameter -#define ACTION_PARAM parser_param -#define ACTION_FINISH_PARAM parser_finish_param -#define ACTION_FINISH_SUBPARAM parser_finish_subparam -#define ACTION_ESC_DISPATCH parser_esc -#define ACTION_CSI_DISPATCH parser_csi -#define ACTION_DCS_START parser_dcs_start -#define ACTION_DCS_CONSUME parser_dcs_consume -#define ACTION_DCS_COLLECT parser_dcs_collect -#define ACTION_DCS_DISPATCH parser_dcs -#define ACTION_OSC_START parser_osc_start -#define ACTION_OSC_COLLECT parser_osc_collect -#define ACTION_OSC_DISPATCH parser_osc -#define ACTION_SCI_DISPATCH parser_sci - -static int -parser_feed_to_state(vte_parser_t* parser, - uint32_t raw) -{ - switch (parser->state) { - case STATE_GROUND: - switch (raw) { - case 0x00 ... 0x1a: /* C0 \ { ESC } */ - case 0x1c ... 0x1f: - case 0x80 ... 0x9f: /* C1 */ - return parser_action(parser, raw, - ACTION_EXECUTE); - case 0x1b: /* ESC */ - return parser_transition(parser, raw, STATE_ESC, - ACTION_CLEAR_INT); - } - - return parser_action(parser, raw, - ACTION_PRINT); - - case STATE_DCS_PASS_ESC: - case STATE_OSC_STRING_ESC: - if (raw == 0x5c /* '\' */) { - switch (parser->state) { - case STATE_DCS_PASS_ESC: - return parser_transition(parser, raw, STATE_GROUND, - ACTION_DCS_DISPATCH); - case STATE_OSC_STRING_ESC: - return parser_transition(parser, raw, STATE_GROUND, - ACTION_OSC_DISPATCH); - } - } - - /* Do the deferred clear and fallthrough to STATE_ESC */ - parser_transition(parser, 0x1b /* ESC */, STATE_ESC, - ACTION_CLEAR_INT); - - [[fallthrough]]; - case STATE_ESC: - switch (raw) { - case 0x00 ... 0x1a: /* C0 \ { ESC } */ - case 0x1c ... 0x1f: - return parser_action(parser, raw, - ACTION_EXECUTE); - case 0x1b: /* ESC */ - return parser_transition(parser, raw, STATE_ESC, - ACTION_CLEAR_INT); - case 0x20 ... 0x2f: /* [' ' - '\'] */ - return parser_transition(parser, raw, STATE_ESC_INT, - ACTION_COLLECT_ESC); - case 0x30 ... 0x4f: /* ['0' - '~'] \ */ - case 0x51 ... 0x57: /* { 'P', 'X', 'Z' '[', ']', '^', '_' } */ - case 0x59: - case 0x5c: - case 0x60 ... 0x7e: - return parser_transition(parser, raw, STATE_GROUND, - ACTION_ESC_DISPATCH); - case 0x50: /* 'P' */ - return parser_transition(parser, raw, STATE_DCS_ENTRY, - ACTION_DCS_START); - case 0x5a: /* 'Z' */ - return parser_transition(parser, raw, STATE_SCI, - ACTION_CLEAR); - case 0x5b: /* '[' */ - return parser_transition(parser, raw, STATE_CSI_ENTRY, - ACTION_CLEAR_PARAMS_ONLY - /* rest already cleaned on ESC state entry */); - case 0x5d: /* ']' */ - return parser_transition(parser, raw, STATE_OSC_STRING, - ACTION_OSC_START); - case 0x58: /* 'X' */ - case 0x5e: /* '^' */ - case 0x5f: /* '_' */ - return parser_transition_no_action(parser, raw, STATE_ST_IGNORE); - case 0x9c: /* ST */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_IGNORE); - } - - return parser_transition(parser, raw, STATE_GROUND, - ACTION_IGNORE); - case STATE_ESC_INT: - switch (raw) { - case 0x00 ... 0x1a: /* C0 \ { ESC } */ - case 0x1c ... 0x1f: - return parser_action(parser, raw, - ACTION_EXECUTE); - case 0x1b: /* ESC */ - return parser_transition(parser, raw, STATE_ESC, - ACTION_CLEAR_INT); - case 0x20 ... 0x2f: /* [' ' - '\'] */ - return parser_action(parser, raw, - ACTION_COLLECT_ESC); - case 0x30 ... 0x7e: /* ['0' - '~'] */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_ESC_DISPATCH); - case 0x9c: /* ST */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_IGNORE); - } - - return parser_transition(parser, raw, STATE_GROUND, - ACTION_IGNORE); - case STATE_CSI_ENTRY: - switch (raw) { - case 0x00 ... 0x1a: /* C0 \ { ESC } */ - case 0x1c ... 0x1f: - return parser_action(parser, raw, - ACTION_EXECUTE); - case 0x1b: /* ESC */ - return parser_transition(parser, raw, STATE_ESC, - ACTION_CLEAR_INT); - case 0x20 ... 0x2f: /* [' ' - '\'] */ - return parser_transition(parser, raw, STATE_CSI_INT, - ACTION_COLLECT_CSI); - case 0x30 ... 0x39: /* ['0' - '9'] */ - return parser_transition(parser, raw, STATE_CSI_PARAM, - ACTION_PARAM); - case 0x3a: /* ':' */ - return parser_transition(parser, raw, STATE_CSI_PARAM, - ACTION_FINISH_SUBPARAM); - case 0x3b: /* ';' */ - return parser_transition(parser, raw, STATE_CSI_PARAM, - ACTION_FINISH_PARAM); - case 0x3c ... 0x3f: /* ['<' - '?'] */ - return parser_transition(parser, raw, STATE_CSI_PARAM, - ACTION_COLLECT_PARAMETER); - case 0x40 ... 0x7e: /* ['@' - '~'] */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_CSI_DISPATCH); - case 0x9c: /* ST */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_IGNORE); - } - - return parser_transition_no_action(parser, raw, STATE_CSI_IGNORE); - case STATE_CSI_PARAM: - switch (raw) { - case 0x00 ... 0x1a: /* C0 \ { ESC } */ - case 0x1c ... 0x1f: - return parser_action(parser, raw, - ACTION_EXECUTE); - case 0x1b: /* ESC */ - return parser_transition(parser, raw, STATE_ESC, - ACTION_CLEAR_INT); - case 0x20 ... 0x2f: /* [' ' - '\'] */ - return parser_transition(parser, raw, STATE_CSI_INT, - ACTION_COLLECT_CSI); - case 0x30 ... 0x39: /* ['0' - '9'] */ - return parser_action(parser, raw, - ACTION_PARAM); - case 0x3a: /* ':' */ - return parser_action(parser, raw, - ACTION_FINISH_SUBPARAM); - case 0x3b: /* ';' */ - return parser_action(parser, raw, - ACTION_FINISH_PARAM); - case 0x3c ... 0x3f: /* ['<' - '?'] */ - return parser_transition_no_action(parser, raw, STATE_CSI_IGNORE); - case 0x40 ... 0x7e: /* ['@' - '~'] */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_CSI_DISPATCH); - case 0x9c: /* ST */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_IGNORE); - } - - return parser_transition_no_action(parser, raw, STATE_CSI_IGNORE); - case STATE_CSI_INT: - switch (raw) { - case 0x00 ... 0x1a: /* C0 \ { ESC } */ - case 0x1c ... 0x1f: - return parser_action(parser, raw, - ACTION_EXECUTE); - case 0x1b: /* ESC */ - return parser_transition(parser, raw, STATE_ESC, - ACTION_CLEAR_INT); - case 0x20 ... 0x2f: /* [' ' - '\'] */ - return parser_action(parser, raw, - ACTION_COLLECT_CSI); - case 0x30 ... 0x3f: /* ['0' - '?'] */ - return parser_transition_no_action(parser, raw, STATE_CSI_IGNORE); - case 0x40 ... 0x7e: /* ['@' - '~'] */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_CSI_DISPATCH); - case 0x9c: /* ST */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_IGNORE); - } - - return parser_transition_no_action(parser, raw, STATE_CSI_IGNORE); - case STATE_CSI_IGNORE: - switch (raw) { - case 0x00 ... 0x1a: /* C0 \ { ESC } */ - case 0x1c ... 0x1f: - return parser_action(parser, raw, - ACTION_EXECUTE); - case 0x1b: /* ESC */ - return parser_transition(parser, raw, STATE_ESC, - ACTION_CLEAR_INT); - case 0x20 ... 0x3f: /* [' ' - '?'] */ - return parser_nop(parser, raw); - case 0x40 ... 0x7e: /* ['@' - '~'] */ - return parser_transition_no_action(parser, raw, STATE_GROUND); - case 0x9c: /* ST */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_IGNORE); - } - - return parser_nop(parser, raw); - case STATE_DCS_ENTRY: - switch (raw) { - case 0x00 ... 0x1a: /* C0 \ ESC */ - case 0x1c ... 0x1f: - return parser_action(parser, raw, - ACTION_IGNORE); - case 0x1b: /* ESC */ - return parser_transition(parser, raw, STATE_ESC, - ACTION_CLEAR_INT); - case 0x20 ... 0x2f: /* [' ' - '\'] */ - return parser_transition(parser, raw, STATE_DCS_INT, - ACTION_COLLECT_DCS); - case 0x30 ... 0x39: /* ['0' - '9'] */ - return parser_transition(parser, raw, STATE_DCS_PARAM, - ACTION_PARAM); - case 0x3a: /* ':' */ - return parser_transition(parser, raw, STATE_DCS_PARAM, - ACTION_FINISH_SUBPARAM); - case 0x3b: /* ';' */ - return parser_transition(parser, raw, STATE_DCS_PARAM, - ACTION_FINISH_PARAM); - case 0x3c ... 0x3f: /* ['<' - '?'] */ - return parser_transition(parser, raw, STATE_DCS_PARAM, - ACTION_COLLECT_PARAMETER); - case 0x40 ... 0x7e: /* ['@' - '~'] */ - return parser_transition(parser, raw, STATE_DCS_PASS, - ACTION_DCS_CONSUME); - case 0x9c: /* ST */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_IGNORE); - } - - return parser_transition(parser, raw, - STATE_DCS_PASS, ACTION_DCS_CONSUME); - case STATE_DCS_PARAM: - switch (raw) { - case 0x00 ... 0x1a: /* C0 \ { ESC } */ - case 0x1c ... 0x1f: - return parser_action(parser, raw, - ACTION_IGNORE); - case 0x1b: /* ESC */ - return parser_transition(parser, raw, STATE_ESC, - ACTION_CLEAR_INT); - case 0x20 ... 0x2f: /* [' ' - '\'] */ - return parser_transition(parser, raw, STATE_DCS_INT, - ACTION_COLLECT_DCS); - case 0x30 ... 0x39: /* ['0' - '9'] */ - return parser_action(parser, raw, - ACTION_PARAM); - case 0x3a: /* ':' */ - return parser_action(parser, raw, - ACTION_FINISH_SUBPARAM); - case 0x3b: /* ';' */ - return parser_action(parser, raw, - ACTION_FINISH_PARAM); - case 0x3c ... 0x3f: /* ['<' - '?'] */ - return parser_transition_no_action(parser, raw, STATE_DCS_IGNORE); - case 0x40 ... 0x7e: /* ['@' - '~'] */ - return parser_transition(parser, raw, STATE_DCS_PASS, - ACTION_DCS_CONSUME); - case 0x9c: /* ST */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_IGNORE); - } - - return parser_transition(parser, raw, - STATE_DCS_PASS, ACTION_DCS_CONSUME); - case STATE_DCS_INT: - switch (raw) { - case 0x00 ... 0x1a: /* C0 \ { ESC } */ - case 0x1c ... 0x1f: - return parser_action(parser, raw, - ACTION_IGNORE); - case 0x1b: /* ESC */ - return parser_transition(parser, raw, STATE_ESC, - ACTION_CLEAR_INT); - case 0x20 ... 0x2f: /* [' ' - '\'] */ - return parser_action(parser, raw, - ACTION_COLLECT_DCS); - case 0x30 ... 0x3f: /* ['0' - '?'] */ - return parser_transition_no_action(parser, raw, STATE_DCS_IGNORE); - case 0x40 ... 0x7e: /* ['@' - '~'] */ - return parser_transition(parser, raw, STATE_DCS_PASS, - ACTION_DCS_CONSUME); - case 0x9c: /* ST */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_IGNORE); - } - - return parser_transition(parser, raw, - STATE_DCS_PASS, ACTION_DCS_CONSUME); - case STATE_DCS_PASS: - switch (raw) { - case 0x00 ... 0x1a: /* ASCII \ { ESC } */ - case 0x1c ... 0x7f: - return parser_action(parser, raw, - ACTION_DCS_COLLECT); - case 0x1b: /* ESC */ - return parser_transition_no_action(parser, raw, STATE_DCS_PASS_ESC); - case 0x9c: /* ST */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_DCS_DISPATCH); - } - - return parser_action(parser, raw, - ACTION_DCS_COLLECT); - case STATE_DCS_IGNORE: - switch (raw) { - case 0x00 ... 0x1a: /* ASCII \ { ESC } */ - case 0x1c ... 0x7f: - return parser_nop(parser, raw); - case 0x1b: /* ESC */ - return parser_transition(parser, raw, STATE_ESC, - ACTION_CLEAR_INT); - case 0x9c: /* ST */ - return parser_transition_no_action(parser, raw, STATE_GROUND); - } - - return parser_nop(parser, raw); - case STATE_OSC_STRING: - switch (raw) { - case 0x00 ... 0x06: /* C0 \ { BEL, ESC } */ - case 0x08 ... 0x1a: - case 0x1c ... 0x1f: - return parser_nop(parser, raw); - case 0x1b: /* ESC */ - return parser_transition_no_action(parser, raw, STATE_OSC_STRING_ESC); - case 0x20 ... 0x7f: /* [' ' - DEL] */ - return parser_action(parser, raw, - ACTION_OSC_COLLECT); - case 0x07: /* BEL */ - case 0x9c: /* ST */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_OSC_DISPATCH); - } - - return parser_action(parser, raw, - ACTION_OSC_COLLECT); - case STATE_ST_IGNORE: - switch (raw) { - case 0x00 ... 0x1a: /* ASCII \ { ESC } */ - case 0x1c ... 0x7f: - return parser_nop(parser, raw); - case 0x1b: /* ESC */ - return parser_transition(parser, raw, STATE_ESC, - ACTION_CLEAR_INT); - case 0x9c: /* ST */ - return parser_transition(parser, raw, - STATE_GROUND, ACTION_IGNORE); - } - - return parser_nop(parser, raw); - case STATE_SCI: - switch (raw) { - case 0x1b: /* ESC */ - return parser_transition(parser, raw, - STATE_ESC, ACTION_CLEAR_INT); - case 0x08 ... 0x0d: /* BS, HT, LF, VT, FF, CR */ - case 0x20 ... 0x7e: /* [' ' - '~'] */ - return parser_transition(parser, raw, STATE_GROUND, - ACTION_SCI_DISPATCH); - } - - return parser_transition(parser, raw, STATE_GROUND, - ACTION_IGNORE); - } - - g_assert_not_reached(); - return VTE_SEQ_NONE; -} - -int -vte_parser_feed(vte_parser_t* parser, - uint32_t raw) -{ - /* - * Notes: - * * DEC treats GR codes as GL. We don't do that as we require UTF-8 - * as charset and, thus, it doesn't make sense to treat GR special. - * * During control sequences, unexpected C1 codes cancel the sequence - * and immediately start a new one. C0 codes, however, may or may not - * be ignored/executed depending on the sequence. - */ - - switch (raw) { - case 0x18: /* CAN */ - return parser_transition(parser, raw, - STATE_GROUND, ACTION_IGNORE); - case 0x1a: /* SUB */ - return parser_transition(parser, raw, - STATE_GROUND, ACTION_EXECUTE); - case 0x7f: /* DEL */ - return parser_nop(parser, raw); - case 0x80 ... 0x8f: /* C1 \ {DCS, SOS, SCI, CSI, ST, OSC, PM, APC} */ - case 0x91 ... 0x97: - case 0x99: - return parser_transition(parser, raw, - STATE_GROUND, ACTION_EXECUTE); - case 0x98: /* SOS */ - case 0x9e: /* PM */ - case 0x9f: /* APC */ - return parser_transition_no_action(parser, raw, STATE_ST_IGNORE); - // FIXMEchpe shouldn't this use ACTION_CLEAR? - case 0x90: /* DCS */ - return parser_transition(parser, raw, - STATE_DCS_ENTRY, ACTION_DCS_START); - case 0x9a: /* SCI */ - return parser_transition(parser, raw, - STATE_SCI, ACTION_CLEAR); - case 0x9d: /* OSC */ - return parser_transition(parser, raw, - STATE_OSC_STRING, ACTION_OSC_START); - case 0x9b: /* CSI */ - return parser_transition(parser, raw, - STATE_CSI_ENTRY, ACTION_CLEAR_INT_AND_PARAMS); - default: - return parser_feed_to_state(parser, raw); - } -} - -void -vte_parser_reset(vte_parser_t* parser) -{ - parser_transition(parser, 0, STATE_GROUND, ACTION_IGNORE); -} +} // namespace parser +} // namespace vte diff --git a/src/parser.hh b/src/parser.hh index 2d9f1f0..2c8ddd6 100644 --- a/src/parser.hh +++ b/src/parser.hh @@ -2,18 +2,18 @@ * Copyright © 2015 David Herrmann * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -21,10 +21,11 @@ #include #include +#include "debug.h" + #include "parser-arg.hh" #include "parser-string.hh" -struct vte_parser_t; struct vte_seq_t; /* @@ -170,6 +171,8 @@ enum { #undef _VTE_NGR }; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmissing-declarations" enum { #define _VTE_SGR(name, value) VTE_DECSGR_##name = value, #define _VTE_NGR(...) @@ -177,12 +180,17 @@ enum { #undef _VTE_SGR #undef _VTE_NGR }; +#pragma GCC diagnostic pop #define VTE_CHARSET_CHARSET_MASK ((1U << 16) - 1U) #define VTE_CHARSET_SLOT_OFFSET (16) #define VTE_CHARSET_GET_CHARSET(c) ((c) & VTE_CHARSET_CHARSET_MASK) #define VTE_CHARSET_GET_SLOT(c) ((c) >> VTE_CHARSET_SLOT_OFFSET) +enum { + VTE_DISPATCH_UNRIPE = 1u << 0, +}; + struct vte_seq_t { unsigned int type; unsigned int command; @@ -195,15 +203,1375 @@ struct vte_seq_t { vte_seq_arg_t args[VTE_PARSER_ARG_MAX]; vte_seq_string_t arg_str; uint32_t introducer; + uint32_t st; }; -struct vte_parser_t { - vte_seq_t seq; - unsigned int state; +#ifdef PARSER_INCLUDE_NOP +# define _VTE_NOQ(...) _VTE_SEQ(__VA_ARGS__) +#else +# define _VTE_NOQ(...) +#endif + +/* + * Terminal Parser + * This file contains a bunch of UTF-8 helpers and the main ctlseq-parser. The + * parser is a simple state-machine that correctly parses all CSI, DCS, OSC, ST + * control sequences and generic escape sequences. + * The parser itself does not perform any actions but lets the caller react to + * detected sequences. + * + * This parser is mostly DEC VT100+ compatible; known differences are: + * + * * DEC only recognises up to 16 parameters; vte up to 32 (and that can be easily + * extended) + * + * * DEC's parameter values range is 0..16384; vte supports 0..65535 (16-bit range). + * + * * When the number of parameter exceeds that number, DEC executes the function + * with these parameters, ignoring the excessive parameters; vte ignores the + * whole function instead. + * + * * DEC ignores CSI sequences with colon-separated parameters; vte implements colon- + * separated parameters as subparameters (this is an extension taken from ITU-T T.416). + * + * * DEC executes format effector controls in CSI, OSC, DCS sequences as if the + * control was received before the control sequence; vte only does this for CSI + * sequences and ignores all controls except ESC and BEL in OSC control strings, + * and passes all controls except ESC through to the control string in DCS sequences. + * + * * DEC only allows ST (either C0 or C1) to terminate OSC strings; vte allows + * OSC to be terminated by BEL (this is a deprecated xterm extension). + * + * * DEC parses ESC Z as DECID, a deprecated function equivalent to DA1; vte + * implements ECMA-48's SCI (single character introducer) instead. + */ + +/* + * Command Parser + * The ctl-seq parser "vte::parser::Parser" only detects whole sequences, it does + * not detect the specific command. Once a sequence is parsed, the command-parsers + * are used to figure out their meaning. + */ + +/* + * Intermediates (and, for CSI/DCS, the optional parameter character) are + * stored efficiently in an unsigned int. Intermediates can be 2/00..2/15, + * plus one value for 'no intermediate'; together that fits into 5 bits. + * Parameter character can be 'no parameter character', or one from + * 3/12..3/15; that fits into 3 bits. + * + * In @seq.intermediates, the nth intermediates is stored with shift n * 5, + * plus (for CSI/DCS) an additional shift of 3 for the parameter character + * which is stored at bits 0..2. + * + * VTE_SEQ_PARAMETER(u) extracts the parameter character + * of a CSI or DCS sequence + * VTE_SEQ_REMOVE_PARAMETER(u) extracts the intermediates + * of a CSI or DCS sequence + * VTE_SEQ_INTERMEDIATE(u) extracts the first intermediate from an + * intermediates value (for CSI/DCS, that must be without parameter + * character, see VTE_SEQ_REMOVE_PARAMETER) + * VTE_SEQ_REMOVE_INTERMEDIATE(u) extracts the remaining intermediates + * after the first one; use VTE_SEQ_INTERMEDIATE on its return value + * to extract the 2nd intermediate, and so on + */ + +#define VTE_SEQ_PARAMETER_BITS (3) +#define VTE_SEQ_INTERMEDIATE_BITS (5) +#define VTE_SEQ_INTERMEDIATE_MASK ((1U << VTE_SEQ_INTERMEDIATE_BITS) - 1U) +#define VTE_SEQ_PARAMETER_MASK ((1U << VTE_SEQ_PARAMETER_BITS) - 1U) +#define VTE_SEQ_PARAMETER(u) ((u) & VTE_SEQ_PARAMETER_MASK) +#define VTE_SEQ_REMOVE_PARAMETER(u) ((u) >> VTE_SEQ_PARAMETER_BITS) +#define VTE_SEQ_INTERMEDIATE(u) ((u) & VTE_SEQ_INTERMEDIATE_MASK) +#define VTE_SEQ_REMOVE_INTERMEDIATE(u) ((u) >> VTE_SEQ_INTERMEDIATE_BITS) +#define VTE_MAKE_CHARSET(c,s) ((c) | ((s) << VTE_CHARSET_SLOT_OFFSET)) + +/* + * _VTE_SEQ_CODE_ESC(final, intermediates): + * + * Make a value combining the final character and the intermediates, + * to be used to match a sequence against known sequences. + * + * Since this is only used with NONE or HASH as first intermediate, + * we can reduce the size of the lookup table by slashing the least + * significant bit off. + * + * Final characters is 3/0..7/14, needing 7 bits. + */ +#define _VTE_SEQ_CODE_ESC(f,i) (((f) - 0x30) | ((i) >> 1) << 7) + +/* + * _VTE_SEQ_CODE_COMBINE(parameter, intermediates) + * + * Combines intermediates and the parameter character into one + * value to be used when matching a sequence against known sequences. + */ +#define _VTE_SEQ_CODE_COMBINE(p,i) ((p) | ((i) << VTE_SEQ_PARAMETER_BITS)) + +/* + * _VTE_SEQ_CODE(final, intermediates): + * + * Make a value combining the final character and the intermediates, + * to be used to match a sequence against known sequences. Used for + * CSI and DCS sequences; use _VTE_SEQ_CODE_COMBINE to combine + * parameter and intermediates into one to pass as 2nd argument here. + * + * Final character is 4/0..7/14, needing 6 bits. + */ +#define _VTE_SEQ_CODE(f,i) (((f) - 0x40) | ((i) << 6)) + +/* + * VTE_TRANSITION: + * @raw: the raw value + * @state: the new state + * @_action: function to call to handle action + * + * Set the state and call appropriate action, ensuring that we are + * inlined without having to go through a function typedef. + */ +#define VTE_TRANSITION(raw, state, _action) ({ m_state = state; _action(raw); }) +#define VTE_TRANSITION_NO_ACTION(raw, state) ({ m_state = state; VTE_SEQ_NONE; }) + + +namespace vte { +namespace parser { + +/* + * State Machine + * This parser controls the parser-state and returns any detected sequence to + * the caller. The parser is based on this state-diagram from Paul Williams: + * https://vt100.net/emu/ + * It was written from scratch and extended where needed. + * This parser is fully compatible up to the vt500 series. We expect UCS-4 as + * input. It's the callers responsibility to do any UTF-8 parsing. + */ +enum State { + GROUND, /* initial state and ground */ + DCS_PASS_ESC, /* ESC after DCS which may be ESC \ aka C0 ST */ + OSC_STRING_ESC, /* ESC after OSC which may be ESC \ aka C0 ST */ + ESC, /* ESC sequence was started */ + ESC_INT, /* intermediate escape characters */ + CSI_ENTRY, /* starting CSI sequence */ + CSI_PARAM, /* CSI parameters */ + CSI_INT, /* intermediate CSI characters */ + CSI_IGNORE, /* CSI error; ignore this CSI sequence */ + DCS_ENTRY, /* starting DCS sequence */ + DCS_PARAM, /* DCS parameters */ + DCS_INT, /* intermediate DCS characters */ + DCS_PASS, /* DCS data passthrough */ + DCS_IGNORE, /* DCS error; ignore this DCS sequence */ + OSC_STRING, /* parsing OSC sequence */ + ST_IGNORE, /* unimplemented seq; ignore until ST */ + SCI, /* single character introducer sequence was started */ }; -void vte_parser_init(vte_parser_t* parser); -void vte_parser_deinit(vte_parser_t* parser); -int vte_parser_feed(vte_parser_t* parser, - uint32_t raw); -void vte_parser_reset(vte_parser_t* parser); +class Sequence; + +class Parser { +public: + friend class Sequence; + + Parser() noexcept + { + memset(&m_seq, 0, sizeof m_seq); + vte_seq_string_init(&m_seq.arg_str); + } + + Parser(Parser const&) = delete; + Parser(Parser&&) = delete; + + ~Parser() noexcept + { + vte_seq_string_free(&m_seq.arg_str); + } + + Parser& operator=(Parser const&) = delete; + Parser& operator=(Parser&&) = delete; + + inline int feed(uint32_t raw) noexcept + { + /* + * Notes: + * * DEC treats GR codes as GL. We don't do that as we require UTF-8 + * as charset and, thus, it doesn't make sense to treat GR special. + * * During control sequences, unexpected C1 codes cancel the sequence + * and immediately start a new one. C0 codes, however, may or may not + * be ignored/executed depending on the sequence. + */ + switch (raw) { + case 0x18: /* CAN */ + return VTE_TRANSITION(raw, GROUND, action_ignore); + case 0x1a: /* SUB */ + return VTE_TRANSITION(raw, GROUND, action_execute); + case 0x7f: /* DEL */ + return action_nop(raw); + case 0x80 ... 0x8f: /* C1 \ {DCS, SOS, SCI, CSI, ST, OSC, PM, APC} */ + case 0x91 ... 0x97: + case 0x99: + return VTE_TRANSITION(raw, GROUND, action_execute); + case 0x98: /* SOS */ + case 0x9e: /* PM */ + case 0x9f: /* APC */ + return VTE_TRANSITION_NO_ACTION(raw, ST_IGNORE); + // FIXMEchpe shouldn't this use action_clear? + case 0x90: /* DCS */ + return VTE_TRANSITION(raw, DCS_ENTRY, action_dcs_start); + case 0x9a: /* SCI */ + return VTE_TRANSITION(raw, SCI, action_clear); + case 0x9d: /* OSC */ + return VTE_TRANSITION(raw, OSC_STRING, action_osc_start); + case 0x9b: /* CSI */ + return VTE_TRANSITION(raw, CSI_ENTRY, action_clear_int_and_params); + default: [[likely]] + return feed_to_state(raw); + } + } + + inline void reset() noexcept + { + VTE_TRANSITION(0, GROUND, action_ignore); + } + + /* + * set_dispatch_unripe: + * + * Enables or disables dispatch of unripe DCS sequences. + * If enabled, known DCS sequences with the %VTE_DISPATCH_UNRIPE + * flag will be dispatched when the Final character is received, + * instead of when the control string terminator (ST) is received. + * The application handling the unripe DCS sequence may then + * either + * + * - do nothing; in this case the DCS sequence will be dispatched + * again when the control string was fully received. Ripe and + * unripe sequences can be distinguished by the value of + * parser.seq.st which will be 0 for an unripe sequence and + * either 0x5c (C0 ST) or 0x9c (C1 ST) for a ripe sequence. Or + * - call vte_parser_ignore_until_st(); in this case the DCS + * sequence will be ignored until after the ST (or an other + * character that aborts the control string) has been + * received; or + * - switch to a different parser (e.g. DECSIXEL) to parse the + * control string directly on-the-fly. Note that in this case, + * the subparser should take care to handle C0 and C1 controls + * the same way as this parser would. + */ + inline void set_dispatch_unripe(bool enable) noexcept + { + m_dispatch_unripe = enable; + } + + /* + * ignore_until_st: + * + * When used on an unrip %VTE_SEQ_DCS sequence, makes the + * parser ignore everything until the ST is received (or + * the DCS is aborted by the usual other means). + * + * Note that there is some inconsistencies here: + * + * * SUB aborts the DCS in our parser, but e.g. a DECSIXEL + * parser will handle it as if 3/15 was received. + * + * * the ST terminating the DCS will be dispatched as an ST + * sequence, instead of producing an IGNORE sequence + * (this is easily fixable but would slightly complicate + * the parser for no actual gain). + */ + inline void ignore_until_st() noexcept + { + switch (m_state) { + case DCS_PASS: + VTE_TRANSITION_NO_ACTION(0, DCS_IGNORE); + break; + default: + g_assert_not_reached(); + break; + } + } + +protected: + vte_seq_t m_seq; + guint m_state{0}; + bool m_dispatch_unripe{false}; + + inline int feed_to_state(uint32_t raw) noexcept + { + switch (m_state) { + case GROUND: [[likely]] + switch (raw) { + case 0x00 ... 0x1a: /* C0 \ { ESC } */ + case 0x1c ... 0x1f: + case 0x80 ... 0x9f: /* C1 */ + return action_execute(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION(raw, ESC, action_clear_int); + default: [[likely]] + return action_print(raw); + } + + case DCS_PASS_ESC: + case OSC_STRING_ESC: + if (raw == 0x5c /* '\' */) { + switch (m_state) { + case DCS_PASS_ESC: + return VTE_TRANSITION(raw, GROUND, action_dcs_dispatch); + case OSC_STRING_ESC: + return VTE_TRANSITION(raw, GROUND, action_osc_dispatch); + } + } + + /* Do the deferred clear and fallthrough to ESC */ + VTE_TRANSITION(0x1b /* ESC */, ESC, action_clear_int); + + [[fallthrough]]; + case ESC: + switch (raw) { + case 0x00 ... 0x1a: /* C0 \ { ESC } */ + case 0x1c ... 0x1f: + return action_execute(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION(raw, ESC, action_clear_int); + case 0x20 ... 0x2f: /* [' ' - '\'] */ + return VTE_TRANSITION(raw, ESC_INT, action_collect_esc); + case 0x30 ... 0x4f: /* ['0' - '~'] \ */ + case 0x51 ... 0x57: /* { 'P', 'X', 'Z' '[', ']', '^', '_' } */ + case 0x59: + case 0x5c: + case 0x60 ... 0x7e: + return VTE_TRANSITION(raw, GROUND, action_esc_dispatch); + case 0x50: /* 'P' */ + return VTE_TRANSITION(raw, DCS_ENTRY, action_dcs_start); + case 0x5a: /* 'Z' */ + return VTE_TRANSITION(raw, SCI, action_clear); + case 0x5b: /* '[' */ + return VTE_TRANSITION(raw, CSI_ENTRY, action_clear_params + /* rest already cleaned on ESC state entry */); + case 0x5d: /* ']' */ + return VTE_TRANSITION(raw, OSC_STRING, action_osc_start); + case 0x58: /* 'X' */ + case 0x5e: /* '^' */ + case 0x5f: /* '_' */ + return VTE_TRANSITION_NO_ACTION(raw, ST_IGNORE); + case 0x9c: /* ST */ + return VTE_TRANSITION(raw, GROUND, action_ignore); + } + + return VTE_TRANSITION(raw, GROUND, action_ignore); + case ESC_INT: + switch (raw) { + case 0x00 ... 0x1a: /* C0 \ { ESC } */ + case 0x1c ... 0x1f: + return action_execute(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION(raw, ESC, action_clear_int); + case 0x20 ... 0x2f: /* [' ' - '\'] */ + return action_collect_esc(raw); + case 0x30 ... 0x7e: /* ['0' - '~'] */ + return VTE_TRANSITION(raw, GROUND, action_esc_dispatch); + case 0x9c: /* ST */ + return VTE_TRANSITION(raw, GROUND, action_ignore); + } + + return VTE_TRANSITION(raw, GROUND, action_ignore); + case CSI_ENTRY: + switch (raw) { + case 0x00 ... 0x1a: /* C0 \ { ESC } */ + case 0x1c ... 0x1f: + return action_execute(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION(raw, ESC, action_clear_int); + case 0x20 ... 0x2f: /* [' ' - '\'] */ + return VTE_TRANSITION(raw, CSI_INT, action_collect_csi); + case 0x30 ... 0x39: /* ['0' - '9'] */ + return VTE_TRANSITION(raw, CSI_PARAM, action_param); + case 0x3a: /* ':' */ + return VTE_TRANSITION(raw, CSI_PARAM, action_finish_subparam); + case 0x3b: /* ';' */ + return VTE_TRANSITION(raw, CSI_PARAM, action_finish_param); + case 0x3c ... 0x3f: /* ['<' - '?'] */ + return VTE_TRANSITION(raw, CSI_PARAM, action_collect_parameter); + case 0x40 ... 0x7e: /* ['@' - '~'] */ + return VTE_TRANSITION(raw, GROUND, action_csi_dispatch); + case 0x9c: /* ST */ + return VTE_TRANSITION(raw, GROUND, action_ignore); + } + + return VTE_TRANSITION_NO_ACTION(raw, CSI_IGNORE); + case CSI_PARAM: + switch (raw) { + case 0x00 ... 0x1a: /* C0 \ { ESC } */ + case 0x1c ... 0x1f: + return action_execute(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION(raw, ESC, action_clear_int); + case 0x20 ... 0x2f: /* [' ' - '\'] */ + return VTE_TRANSITION(raw, CSI_INT, action_collect_csi); + case 0x30 ... 0x39: /* ['0' - '9'] */ + return action_param(raw); + case 0x3a: /* ':' */ + return action_finish_subparam(raw); + case 0x3b: /* ';' */ + return action_finish_param(raw); + case 0x3c ... 0x3f: /* ['<' - '?'] */ + return VTE_TRANSITION_NO_ACTION(raw, CSI_IGNORE); + case 0x40 ... 0x7e: /* ['@' - '~'] */ + return VTE_TRANSITION(raw, GROUND, action_csi_dispatch); + case 0x9c: /* ST */ + return VTE_TRANSITION(raw, GROUND, action_ignore); + } + + return VTE_TRANSITION_NO_ACTION(raw, CSI_IGNORE); + case CSI_INT: + switch (raw) { + case 0x00 ... 0x1a: /* C0 \ { ESC } */ + case 0x1c ... 0x1f: + return action_execute(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION(raw, ESC, action_clear_int); + case 0x20 ... 0x2f: /* [' ' - '\'] */ + return action_collect_csi(raw); + case 0x30 ... 0x3f: /* ['0' - '?'] */ + return VTE_TRANSITION_NO_ACTION(raw, CSI_IGNORE); + case 0x40 ... 0x7e: /* ['@' - '~'] */ + return VTE_TRANSITION(raw, GROUND, action_csi_dispatch); + case 0x9c: /* ST */ + return VTE_TRANSITION(raw, GROUND, action_ignore); + } + + return VTE_TRANSITION_NO_ACTION(raw, CSI_IGNORE); + case CSI_IGNORE: + switch (raw) { + case 0x00 ... 0x1a: /* C0 \ { ESC } */ + case 0x1c ... 0x1f: + return action_execute(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION(raw, ESC, action_clear_int); + case 0x20 ... 0x3f: /* [' ' - '?'] */ + return action_nop(raw); + case 0x40 ... 0x7e: /* ['@' - '~'] */ + return VTE_TRANSITION_NO_ACTION(raw, GROUND); + case 0x9c: /* ST */ + return VTE_TRANSITION(raw, GROUND, action_ignore); + } + + return action_nop(raw); + case DCS_ENTRY: + switch (raw) { + case 0x00 ... 0x1a: /* C0 \ ESC */ + case 0x1c ... 0x1f: + return action_ignore(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION(raw, ESC, action_clear_int); + case 0x20 ... 0x2f: /* [' ' - '\'] */ + return VTE_TRANSITION(raw, DCS_INT, action_collect_csi); + case 0x30 ... 0x39: /* ['0' - '9'] */ + return VTE_TRANSITION(raw, DCS_PARAM, action_param); + case 0x3a: /* ':' */ + return VTE_TRANSITION(raw, DCS_PARAM, action_finish_subparam); + case 0x3b: /* ';' */ + return VTE_TRANSITION(raw, DCS_PARAM, action_finish_param); + case 0x3c ... 0x3f: /* ['<' - '?'] */ + return VTE_TRANSITION(raw, DCS_PARAM, action_collect_parameter); + case 0x40 ... 0x7e: /* ['@' - '~'] */ + return VTE_TRANSITION(raw, DCS_PASS, action_dcs_consume); + case 0x9c: /* ST */ + return VTE_TRANSITION(raw, GROUND, action_ignore); + } + + return VTE_TRANSITION(raw, DCS_PASS, action_dcs_consume); + case DCS_PARAM: + switch (raw) { + case 0x00 ... 0x1a: /* C0 \ { ESC } */ + case 0x1c ... 0x1f: + return action_ignore(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION(raw, ESC, action_clear_int); + case 0x20 ... 0x2f: /* [' ' - '\'] */ + return VTE_TRANSITION(raw, DCS_INT, action_collect_csi); + case 0x30 ... 0x39: /* ['0' - '9'] */ + return action_param(raw); + case 0x3a: /* ':' */ + return action_finish_subparam(raw); + case 0x3b: /* ';' */ + return action_finish_param(raw); + case 0x3c ... 0x3f: /* ['<' - '?'] */ + return VTE_TRANSITION_NO_ACTION(raw, DCS_IGNORE); + case 0x40 ... 0x7e: /* ['@' - '~'] */ + return VTE_TRANSITION(raw, DCS_PASS, action_dcs_consume); + case 0x9c: /* ST */ + return VTE_TRANSITION(raw, GROUND, action_ignore); + } + + return VTE_TRANSITION(raw, DCS_PASS, action_dcs_consume); + case DCS_INT: + switch (raw) { + case 0x00 ... 0x1a: /* C0 \ { ESC } */ + case 0x1c ... 0x1f: + return action_ignore(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION(raw, ESC, action_clear_int); + case 0x20 ... 0x2f: /* [' ' - '\'] */ + return action_collect_csi(raw); + case 0x30 ... 0x3f: /* ['0' - '?'] */ + return VTE_TRANSITION_NO_ACTION(raw, DCS_IGNORE); + case 0x40 ... 0x7e: /* ['@' - '~'] */ + return VTE_TRANSITION(raw, DCS_PASS, action_dcs_consume); + case 0x9c: /* ST */ + return VTE_TRANSITION(raw, GROUND, action_ignore); + } + + return VTE_TRANSITION(raw, DCS_PASS, action_dcs_consume); + case DCS_PASS: + switch (raw) { + case 0x00 ... 0x1a: /* ASCII \ { ESC } */ + case 0x1c ... 0x7f: + return action_dcs_collect(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION_NO_ACTION(raw, DCS_PASS_ESC); + case 0x9c: /* ST */ + return VTE_TRANSITION(raw, GROUND, action_dcs_dispatch); + } + + return action_dcs_collect(raw); + case DCS_IGNORE: + switch (raw) { + case 0x00 ... 0x1a: /* ASCII \ { ESC } */ + case 0x1c ... 0x7f: + return action_nop(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION(raw, ESC, action_clear_int); + case 0x9c: /* ST */ + return VTE_TRANSITION_NO_ACTION(raw, GROUND); + } + + return action_nop(raw); + case OSC_STRING: + switch (raw) { + case 0x00 ... 0x06: /* C0 \ { BEL, ESC } */ + case 0x08 ... 0x1a: + case 0x1c ... 0x1f: + return action_nop(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION_NO_ACTION(raw, OSC_STRING_ESC); + case 0x20 ... 0x7f: /* [' ' - DEL] */ + return action_osc_collect(raw); + case 0x07: /* BEL */ + case 0x9c: /* ST */ + return VTE_TRANSITION(raw, GROUND, action_osc_dispatch); + } + + return action_osc_collect(raw); + case ST_IGNORE: + switch (raw) { + case 0x00 ... 0x1a: /* ASCII \ { ESC } */ + case 0x1c ... 0x7f: + return action_nop(raw); + case 0x1b: /* ESC */ + return VTE_TRANSITION(raw, ESC, action_clear_int); + case 0x9c: /* ST */ + return VTE_TRANSITION(raw, GROUND, action_ignore); + } + + return action_nop(raw); + case SCI: + switch (raw) { + case 0x1b: /* ESC */ + return VTE_TRANSITION(raw, ESC, action_clear_int); + case 0x08 ... 0x0d: /* BS, HT, LF, VT, FF, CR */ + case 0x20 ... 0x7e: /* [' ' - '~'] */ + return VTE_TRANSITION(raw, GROUND, action_sci_dispatch); + } + + return VTE_TRANSITION(raw, GROUND, action_ignore); + } + + g_assert_not_reached(); + return VTE_SEQ_NONE; + } + + /* + * @introducer: either a C1 control, or the final in the equivalent ESC F sequence + * @terminator: either a C1 control, or the final in the equivalent ESC F sequence + * + * Checks whether the OSC/DCS @introducer and the ST @terminator + * are from the same control set, i.e. both C0 or both C1. + * + * For OSC, this check allows C0 OSC with BEL-as-ST to pass, too. + */ + inline bool check_matching_controls(uint32_t introducer, uint32_t terminator) + { + return ((introducer ^ terminator) & 0x80) == 0; + } + + /* ECMA-35 § 14.1 specifies that the final character 7/14 always identifies + * an empty set. Note that that this does not apply for DRCS sets (§ 14.4), + * since § 13.3.3 says that all the Ft (4/0..7/14) bytes are private-use. + */ + inline constexpr uint32_t charset_empty_or_none(uint32_t raw) noexcept + { + return raw == 0x7e ? VTE_CHARSET_EMPTY : VTE_CHARSET_NONE; + } + + inline void params_overflow(uint32_t raw) noexcept + { + /* An overflow of the parameter number can only happen in + * {CSI,DCS}_PARAM, and it occurs when + * seq.n_arg == VTE_PARSER_ARG_MAX, and either an 0…9 + * is encountered, starting the next param, or an + * explicit ':' or ';' terminating a (defaulted) (sub)param, + * or when the intermediates/final character(s) occur + * after a defaulted (sub)param. + * + * Transition to {CSI,DCS}_IGNORE to ignore the + * whole sequence. + */ + VTE_TRANSITION_NO_ACTION(raw, m_state == CSI_PARAM ? CSI_IGNORE : DCS_IGNORE); + } + + uint32_t parse_host_sci(vte_seq_t const* seq) noexcept; + uint32_t parse_host_dcs(vte_seq_t const* seq, unsigned int* flagsptr) noexcept; + uint32_t parse_host_control(vte_seq_t const* seq) noexcept; + uint32_t parse_host_csi(vte_seq_t const* seq) noexcept; + uint32_t parse_host_escape(vte_seq_t const* seq, unsigned int *cs_out) noexcept; + uint32_t parse_charset_control(uint32_t raw, unsigned int intermediates) noexcept; + uint32_t parse_charset_ocs(uint32_t raw, unsigned int intermediates) noexcept; + uint32_t parse_charset_96_n(uint32_t raw, unsigned int intermediates) noexcept; + uint32_t parse_charset_96(uint32_t raw, unsigned int intermediates) noexcept; + uint32_t parse_charset_94_n(uint32_t raw, unsigned int intermediates) noexcept; + uint32_t parse_charset_94(uint32_t raw, unsigned int intermediates) noexcept; + + inline int action_clear(uint32_t raw) noexcept + { + /* seq.command is set when the sequence is executed, + * seq.terminator is set when the final character is received, + * and seq.introducer is set when the introducer is received, + * and all this happens before the sequence is dispatched. + * Therefore these fiedls need not be cleared in any case. + */ + return VTE_SEQ_NONE; + } + + inline int action_clear_int(uint32_t raw) noexcept + { + m_seq.intermediates = 0; + m_seq.n_intermediates = 0; + + return action_clear(raw); + } + + inline int action_clear_params(uint32_t raw) noexcept + { + /* The (n_args+1)th parameter may have been started but not + * finialised, so it needs cleaning too. All further params + * have not been touched, so need not be cleaned. + */ + unsigned int n_args = G_UNLIKELY (m_seq.n_args >= VTE_PARSER_ARG_MAX) + ? VTE_PARSER_ARG_MAX + : m_seq.n_args + 1; + memset(m_seq.args, 0, n_args * sizeof(m_seq.args[0])); +#ifdef PARSER_EXTRA_CLEAN + /* Assert that the assumed-clean params are actually clean. */ + for (unsigned int n = n_args; n < VTE_PARSER_ARG_MAX; ++n) + vte_assert_cmpuint(m_seq.args[n], ==, VTE_SEQ_ARG_INIT_DEFAULT); +#endif + + m_seq.n_args = 0; + m_seq.n_final_args = 0; + + return VTE_SEQ_NONE; + } + + inline int action_clear_int_and_params(uint32_t raw) noexcept + { + action_clear_int(raw); + return action_clear_params(raw); + } + + + inline int action_collect_csi(uint32_t raw) noexcept + { + g_assert(raw >= 0x20 && raw <= 0x2f); + + /* In addition to 2/0..2/15 intermediates, CSI/DCS sequence + * can also have one parameter byte 3/12..3/15 at the + * start of the parameters (see parser_collect_parameter below); + * that's what the extra shift is for. + */ + m_seq.intermediates |= (VTE_SEQ_MAKE_INTERMEDIATE(raw) << (VTE_SEQ_PARAMETER_BITS + + VTE_SEQ_INTERMEDIATE_BITS * m_seq.n_intermediates++)); + + return VTE_SEQ_NONE; + } + + inline int action_collect_esc(uint32_t raw) noexcept + { + g_assert(raw >= 0x20 && raw <= 0x2f); + + /* ESCAPE sequences only have intermediates or 2/0..2/15, so there's no + * need for the extra shift as below for CSI/DCS sequences + */ + m_seq.intermediates |= (VTE_SEQ_MAKE_INTERMEDIATE(raw) << (VTE_SEQ_INTERMEDIATE_BITS * m_seq.n_intermediates++)); + + return VTE_SEQ_NONE; + } + + inline int action_collect_parameter(uint32_t raw) noexcept + { + g_assert(raw >= 0x3c && raw <= 0x3f); + + /* CSI/DCS may optionally have one parameter byte from 3/12..3/15 + * at the start of the parameters; we put that into the lowest + * part of @seq.intermediates. + * Note that there can only be *one* such byte; the state machine + * already enforces that, so we do not need any additional checks + * here. + */ + m_seq.intermediates |= VTE_SEQ_MAKE_PARAMETER(raw); + + return VTE_SEQ_NONE; + } + + inline int action_csi_dispatch(uint32_t raw) noexcept + { + /* m_seq is cleared during CSI-ENTER state, thus there's no need + * to clear invalid fields here. */ + + if (G_LIKELY(m_seq.n_args < VTE_PARSER_ARG_MAX)) { + if (m_seq.n_args > 0 || + vte_seq_arg_started(m_seq.args[m_seq.n_args])) { + vte_seq_arg_finish(&m_seq.args[m_seq.n_args], false); + ++m_seq.n_args; + ++m_seq.n_final_args; + } + } + + m_seq.type = VTE_SEQ_CSI; + m_seq.terminator = raw; + m_seq.command = parse_host_csi(&m_seq); + + return VTE_SEQ_CSI; + } + + inline int action_dcs_dispatch(uint32_t raw) noexcept + { + /* Most of m_seq was already filled in action_dcs_consume() */ + m_seq.st = raw; + + vte_seq_string_finish(&m_seq.arg_str); + + /* We only dispatch a DCS if the introducer and string + * terminator are from the same control set, i.e. both + * C0 or both C1; we discard sequences with mixed controls. + */ + if (!check_matching_controls(m_seq.introducer, raw)) + return VTE_SEQ_IGNORE; + + return m_seq.type; + } + + inline int action_dcs_collect(uint32_t raw) noexcept + { + if G_UNLIKELY (!vte_seq_string_push(&m_seq.arg_str, raw)) + m_state = DCS_IGNORE; + + return VTE_SEQ_NONE; + } + + inline int action_esc_dispatch(uint32_t raw) noexcept + { + m_seq.type = VTE_SEQ_ESCAPE; + m_seq.terminator = raw; + m_seq.charset = VTE_CHARSET_NONE; + m_seq.command = parse_host_escape(&m_seq, &m_seq.charset); + + return VTE_SEQ_ESCAPE; + } + + inline int action_execute(uint32_t raw) noexcept + { + m_seq.type = VTE_SEQ_CONTROL; + m_seq.terminator = raw; + m_seq.command = parse_host_control(&m_seq); + + return VTE_SEQ_CONTROL; + } + + inline int action_dcs_consume(uint32_t raw) noexcept + { + /* m_seq is cleared during DCS-START state, thus there's no need + * to clear invalid fields here. */ + + if G_LIKELY (m_seq.n_args < VTE_PARSER_ARG_MAX) { + if (m_seq.n_args > 0 || + vte_seq_arg_started(m_seq.args[m_seq.n_args])) { + vte_seq_arg_finish(&m_seq.args[m_seq.n_args], false); + ++m_seq.n_args; + ++m_seq.n_final_args; + } + } + + m_seq.type = VTE_SEQ_DCS; + m_seq.terminator = raw; + m_seq.st = 0; + + auto flags = unsigned{}; + m_seq.command = parse_host_dcs(&m_seq, &flags); + + return (flags & VTE_DISPATCH_UNRIPE) && m_dispatch_unripe ? VTE_SEQ_DCS : VTE_SEQ_NONE; + } + + inline int action_dcs_start(uint32_t raw) noexcept + { + action_clear_int_and_params(raw); + + vte_seq_string_reset(&m_seq.arg_str); + + m_seq.introducer = raw; + + return VTE_SEQ_NONE; + } + + /* The next two functions are only called when encountering a ';' or ':', + * so if there's already MAX-1 parameters, the ';' or ':' would finish + * the MAXth parameter and there would be a default or non-default + * MAX+1th parameter following it. + */ + inline int action_finish_param(uint32_t raw) + { + if G_LIKELY (m_seq.n_args < VTE_PARSER_ARG_MAX - 1) { + vte_seq_arg_finish(&m_seq.args[m_seq.n_args], false); + ++m_seq.n_args; + ++m_seq.n_final_args; + } else { + params_overflow(raw); + } + + return VTE_SEQ_NONE; + } + + inline int action_finish_subparam(uint32_t raw) noexcept + { + if G_LIKELY (m_seq.n_args < VTE_PARSER_ARG_MAX - 1) { + vte_seq_arg_finish(&m_seq.args[m_seq.n_args], true); + ++m_seq.n_args; + } else { + params_overflow(raw); + } + + return VTE_SEQ_NONE; + } + + inline int action_ignore(uint32_t raw) noexcept + { + m_seq.type = VTE_SEQ_IGNORE; + m_seq.command = VTE_CMD_NONE; + m_seq.terminator = raw; + + return VTE_SEQ_IGNORE; + } + + inline int action_nop(uint32_t raw) noexcept + { + return VTE_SEQ_NONE; + } + + + inline int action_osc_collect(uint32_t raw) noexcept + { + /* + * Only characters from 0x20..0x7e and >= 0xa0 are allowed here. + * Our state-machine already verifies those restrictions. + */ + if G_UNLIKELY (!vte_seq_string_push(&m_seq.arg_str, raw)) + m_state = ST_IGNORE; + + return VTE_SEQ_NONE; + } + + inline int action_osc_dispatch(uint32_t raw) noexcept + { + /* m_seq is cleared during OSC_START state, thus there's no need + * to clear invalid fields here. */ + + vte_seq_string_finish(&m_seq.arg_str); + + /* We only dispatch a DCS if the introducer and string + * terminator are from the same control set, i.e. both + * C0 or both C1; we discard sequences with mixed controls. + */ + if (!check_matching_controls(m_seq.introducer, raw)) + return VTE_SEQ_IGNORE; + + m_seq.type = VTE_SEQ_OSC; + m_seq.command = VTE_CMD_OSC; + m_seq.st = raw; + + return VTE_SEQ_OSC; + } + + inline int action_osc_start(uint32_t raw) noexcept + { + action_clear(raw); + + vte_seq_string_reset(&m_seq.arg_str); + + m_seq.introducer = raw; + + return VTE_SEQ_NONE; + } + + inline int action_param(uint32_t raw) noexcept + { + /* g_assert(raw >= '0' && raw <= '9'); */ + + if G_LIKELY (m_seq.n_args < VTE_PARSER_ARG_MAX) + vte_seq_arg_push(&m_seq.args[m_seq.n_args], raw); + else + params_overflow(raw); + + return VTE_SEQ_NONE; + } + + inline int action_print(uint32_t raw) noexcept + { + m_seq.type = VTE_SEQ_GRAPHIC; + m_seq.command = VTE_CMD_GRAPHIC; + m_seq.terminator = raw; + + return VTE_SEQ_GRAPHIC; + } + + inline int action_sci_dispatch(uint32_t raw) noexcept + { + m_seq.type = VTE_SEQ_SCI; + m_seq.terminator = raw; + m_seq.command = parse_host_sci(&m_seq); + + return VTE_SEQ_SCI; + } + +}; // class Parser + +class Sequence { +public: + + Sequence() = default; + Sequence(Sequence const&) = delete; + Sequence(Sequence&&) = delete; + ~Sequence() = default; + + Sequence(Parser& parser) + { + m_seq = &parser.m_seq; + } + + typedef int number; + + char* ucs4_to_utf8(gunichar const* str, + ssize_t len = -1) const noexcept; + + void print() const noexcept; + + /* type: + * + * + * Returns: the type of the sequence, a value from the VTE_SEQ_* enum + */ + inline constexpr unsigned int type() const noexcept + { + return m_seq->type; + } + + /* command: + * + * Returns: the command the sequence codes for, a value + * from the VTE_CMD_* enum, or %VTE_CMD_NONE if the command is + * unknown + */ + inline constexpr unsigned int command() const noexcept + { + return m_seq->command; + } + + /* charset: + * + * This is the charset to use in a %VTE_CMD_GnDm, %VTE_CMD_GnDMm, + * %VTE_CMD_CnD or %VTE_CMD_DOCS command. + * + * Returns: the charset, a value from the VTE_CHARSET_* enum. + */ + inline constexpr unsigned int charset() const noexcept + { + return VTE_CHARSET_GET_CHARSET(m_seq->charset); + } + + /* slot: + * + * This is the slot in a %VTE_CMD_GnDm, %VTE_CMD_GnDMm, + * or %VTE_CMD_CnD command. + * + * Returns: the slot, a value from the 0..3 for Gn*, or 0..1 for CnD + */ + inline constexpr unsigned int slot() const noexcept + { + return VTE_CHARSET_GET_SLOT(m_seq->charset); + } + + /* introducer: + * + * This is the character introducing the sequence, if any. + * + * Returns: the introducing character + */ + inline constexpr uint32_t introducer() const noexcept + { + return m_seq->introducer; + } + + /* terminator: + * + * This is the character terminating the sequence, or, for a + * %VTE_SEQ_GRAPHIC sequence, the graphic character. + * + * Returns: the terminating character + */ + inline constexpr uint32_t terminator() const noexcept + { + return m_seq->terminator; + } + + /* st: + * + * This is the string terminator ending a OSC, DCS, APC, PM, or SOS sequence + * + * Returns: the string terminator character + */ + inline constexpr uint32_t st() const noexcept + { + return m_seq->st; + } + + /* is_c1: + * + * Whether the sequence was introduced with a C0 or C1 control. + * + * Returns: true iff the introducer was a C1 control + */ + inline constexpr bool is_c1() const noexcept + { + return (introducer() & 0x80) != 0; + } + + /* is_st_c1: + * + * Whether the control string was terminated with a C0 or C1 control. + * + * Returns: true iff the terminator was the C1 ST + */ + inline constexpr bool is_st_c1() const noexcept + { + return (st() & 0x80) != 0; + } + + /* is_ripe: + * + * Whether the control string is complete. + * This returns true when the final character has been received, + * and false when the string terminator has been received. + * This is only meaningful for DCS sequences, which are dispatched + * twice. + * + * Returns: true iff the DCS sequence is complete + */ + inline constexpr bool is_ripe() const noexcept + { + return st() != 0; + } + + inline constexpr bool is_unripe() const noexcept + { + return !is_ripe(); + } + + /* intermediates: + * + * This is the pintro and intermediate characters in the sequence, if any. + * + * Returns: the intermediates + */ + inline constexpr unsigned int intermediates() const noexcept + { + return m_seq->intermediates; + } + + // FIXMEchpe: upgrade to C++17 and use the u32string_view version below, instead + /* + * string: + * + * This is the string argument of a DCS or OSC sequence. + * + * Returns: the string argument + */ + inline std::u32string string() const noexcept + { + size_t len; + auto buf = vte_seq_string_get(&m_seq->arg_str, &len); + return std::u32string(reinterpret_cast(buf), len); + } + + #if 0 + /* + * string: + * + * This is the string argument of a DCS or OSC sequence. + * + * Returns: the string argument + */ + inline constexpr std::u32string_view string() const noexcept + { + size_t len = 0; + auto buf = vte_seq_string_get(&m_seq->arg_str, &len); + return std::u32string_view(buf, len); + } + #endif + + /* + * string: + * + * This is the string argument of a DCS or OSC sequence. + * + * Returns: the string argument + */ + std::string string_utf8() const noexcept; + + inline char* string_param() const noexcept + { + size_t len = 0; + auto buf = vte_seq_string_get(&m_seq->arg_str, &len); + return ucs4_to_utf8(buf, len); + } + + /* size: + * + * Returns: the number of parameters + */ + inline constexpr unsigned int size() const noexcept + { + return m_seq->n_args; + } + + + /* size: + * + * Returns: the number of parameter blocks, counting runs of subparameters + * as only one parameter + */ + inline constexpr unsigned int size_final() const noexcept + { + return m_seq->n_final_args; + } + + /* capacity: + * + * Returns: the number of parameter blocks, counting runs of subparameters + * as only one parameter + */ + inline constexpr unsigned int capacity() const noexcept + { + return G_N_ELEMENTS(m_seq->args); + } + + /* param: + * @idx: + * @default_v: the value to use for default parameters + * + * Returns: the value of the parameter at index @idx, or @default_v if + * the parameter at this index has default value, or the index + * is out of bounds + */ + inline constexpr int param(unsigned int idx, + int default_v = -1) const noexcept + { + return __builtin_expect(idx < size(), 1) ? vte_seq_arg_value(m_seq->args[idx], default_v) : default_v; + } + + /* param: + * @idx: + * @default_v: the value to use for default parameters + * @min_v: the minimum value + * @max_v: the maximum value + * + * Returns: the value of the parameter at index @idx, or @default_v if + * the parameter at this index has default value, or the index + * is out of bounds. The returned value is clamped to the + * range @min_v..@max_v (or returns min_v, if min_v > max_v). + */ + inline constexpr int param(unsigned int idx, + int default_v, + int min_v, + int max_v) const noexcept + { + auto v = param(idx, default_v); + // not using std::clamp() since it's not guaranteed that min_v <= max_v + return std::max(std::min(v, max_v), min_v); + } + + /* param_range: + * @idx: + * @default_v: the value to use for default parameters + * @min_v: the minimum value + * @max_v: the maximum value + * @oor_v: the value to return for out-of-range values + * + * Returns: the value of the parameter at index @idx, or @default_v if + * the parameter at this index has default value, or the index + * is out of bounds. If the value is outside the range @min_v..@max_v, + * returns @oor_v. + */ + inline constexpr int param_range(unsigned int idx, + int default_v, + int min_v, + int max_v, + int oor_v) const noexcept + { + auto v = param(idx, default_v); + return (v >= min_v && v <= max_v) ? v : oor_v; + } + + /* param_nonfinal: + * @idx: + * + * Returns: whether the parameter at @idx is nonfinal, i.e. + * there are more subparameters after it. + */ + inline constexpr bool param_nonfinal(unsigned int idx) const noexcept + { + return __builtin_expect(idx < size(), 1) ? vte_seq_arg_nonfinal(m_seq->args[idx]) : false; + } + + /* param_default: + * @idx: + * + * Returns: whether the parameter at @idx has default value + */ + inline constexpr bool param_default(unsigned int idx) const noexcept + { + return __builtin_expect(idx < size(), 1) ? vte_seq_arg_default(m_seq->args[idx]) : true; + } + + /* next: + * @idx: + * + * Returns: the index of the next parameter block + */ + inline constexpr unsigned int next(unsigned int idx) const noexcept + { + /* Find the final parameter */ + while (param_nonfinal(idx)) + ++idx; + /* And return the index after that one */ + return ++idx; + } + + inline constexpr unsigned int cbegin() const noexcept + { + return 0; + } + + inline constexpr unsigned int cend() const noexcept + { + return size(); + } + + /* collect: + * + * Collects some final parameters. + * + * Returns: %true if the sequence parameter list begins with + * a run of final parameters that were collected. + */ + inline constexpr bool collect(unsigned int start_idx, + std::initializer_list params, + int default_v = -1) const noexcept + { + unsigned int idx = start_idx; + for (auto i : params) { + *i = param(idx, default_v); + idx = next(idx); + } + + return (idx - start_idx) == params.size(); + } + + /* collect1: + * @idx: + * @default_v: + * + * Collects one final parameter. + * + * Returns: the parameter value, or @default_v if the parameter has + * default value or is not a final parameter + */ + inline constexpr int collect1(unsigned int idx, + int default_v = -1) const noexcept + { + return __builtin_expect(idx < size(), 1) ? vte_seq_arg_value_final(m_seq->args[idx], default_v) : default_v; + } + + /* collect1: + * @idx: + * @default_v: + * @min_v: + * @max_v + * + * Collects one final parameter. + * + * Returns: the parameter value clamped to the @min_v .. @max_v range (or @min_v, + * if min_v > max_v), + * or @default_v if the parameter has default value or is not a final parameter + */ + inline constexpr int collect1(unsigned int idx, + int default_v, + int min_v, + int max_v) const noexcept + { + int v = __builtin_expect(idx < size(), 1) ? vte_seq_arg_value_final(m_seq->args[idx], default_v) : default_v; + // not using std::clamp() since it's not guaranteed that min_v <= max_v + return std::max(std::min(v, max_v), min_v); + } + + /* collect_subparams: + * + * Collects some subparameters. + * + * Returns: %true if the sequence parameter list contains enough + * subparams at @start_idx + */ + inline constexpr bool collect_subparams(unsigned int start_idx, + std::initializer_list params, + int default_v = -1) const noexcept + { + unsigned int idx = start_idx; + for (auto i : params) { + *i = param(idx++, default_v); + } + + return idx <= next(start_idx); + } + + inline explicit operator bool() const { return m_seq != nullptr; } + + /* This is only used in the test suite */ + vte_seq_t** seq_ptr() { return &m_seq; } + +private: + vte_seq_t* m_seq{nullptr}; + + char const* type_string() const; + char const* command_string() const; +}; // class Sequence + + +} // namespace parser +} // namespace vte diff --git a/src/pastify-test.cc b/src/pastify-test.cc new file mode 100644 index 0000000..6b2fbc2 --- /dev/null +++ b/src/pastify-test.cc @@ -0,0 +1,208 @@ +/* + * Copyright © 2021 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include + +#include + +#include "pastify.hh" + +using namespace std::literals; + +static bool +assert_streq(std::string_view const& str1, + std::string_view const& str2) +{ + auto s1 = std::string{str1}; + auto s2 = std::string{str2}; + + g_assert_cmpstr(s1.c_str(), ==, s2.c_str()); + return true; +} + +static void +test_pastify(std::string_view const& str, + std::string_view const& expected, + bool insert_brackets = false, + bool c1 = false) +{ + auto rv = vte::terminal::pastify_string(str, insert_brackets, c1); + assert_streq(rv, expected); + + /* Check idempotence */ + if (!insert_brackets) { + auto rv2 = vte::terminal::pastify_string(rv, false, false); + assert_streq(rv, rv2); + } +} + +static void +test_pastify_brackets_c0(void) +{ + test_pastify("0"sv, "\e[200~0\e[201~"sv, true, false); +} + +static void +test_pastify_brackets_c1(void) +{ + test_pastify("0"sv, "\xc2\x9b" "200~0\xc2\x9b" "201~"sv, true, true); +} + +static void +test_pastify_control(std::string const& ctrl, + std::string const& pict) +{ + test_pastify(ctrl, pict); + test_pastify(ctrl + ctrl, pict + pict); + test_pastify("abc"s + ctrl, "abc"s + pict); + test_pastify("abc"s + ctrl + ctrl, "abc"s + pict + pict); + test_pastify(ctrl + "abc"s, pict + "abc"s); + test_pastify(ctrl + ctrl + "abc"s, pict + pict + "abc"s); + test_pastify("abc"s + ctrl + "abc"s, "abc"s + pict + "abc"s); + test_pastify("abc"s + ctrl + ctrl + "abc"s, "abc"s + pict + pict + "abc"s); +} + +static void +test_pastify_control_c0(void const* ptr) +{ + auto const c = *reinterpret_cast(ptr); + auto ctrl = ""s; + ctrl.push_back(c); + + auto pict = std::string{}; + vte::terminal::append_control_picture(pict, c); + + test_pastify_control(ctrl, pict); +} + +static void +test_pastify_control_c1(void const* ptr) +{ + auto const c = *reinterpret_cast(ptr); + + auto ctrl = ""s; + ctrl.push_back(0xc2); + ctrl.push_back(c); + + auto pict = std::string{}; + vte::terminal::append_control_picture(pict, c); + + test_pastify_control(ctrl, pict); +} + +struct TestString { +public: + char const* m_str; + char const* m_expected; + int m_line; + + TestString() = default; + consteval TestString(char const* str, + char const* expected, + int line = __builtin_LINE()) noexcept : + m_str(str), + m_expected(expected), + m_line(line) + { + } +}; + +consteval auto +identity_test(char const *str, + int line = __builtin_LINE()) noexcept +{ + return TestString(str, str, line); +} + +static void +test_pastify_string(void const* ptr) +{ + auto str = reinterpret_cast(ptr); + test_pastify(str->m_str, str->m_expected); +} + +static constinit TestString const test_strings[] = { + /* Controls */ + identity_test("\x09"), /* HT passes through */ + identity_test("\x0d"), /* CR passes through */ + + /* Non-C1 but starting with a 0xC2 byte */ + identity_test("abc\xc2\xa0xyz"), + + /* CR/LF conversion */ + TestString("\x0a", "\x0d"), + TestString("\x0a\x0d", "\x0d\x0d"), + TestString("\x0d\x0a", "\x0d"), + TestString("\x0d\x0a\x0d", "\x0d\x0d"), + TestString("\x0d\x0a\x0d\x0a", "\x0d\x0d"), +}; + +int +main(int argc, + char* argv[]) +{ + g_test_init(&argc, &argv, nullptr); + + g_test_add_func("/vte/pastify/brackets/c0", test_pastify_brackets_c0); + g_test_add_func("/vte/pastify/brackets/c1", test_pastify_brackets_c1); + + /* C0 controls */ + for (auto c = 0; c < 0x20; ++c) { + /* NUL, HT, CR, LF */ + if (c == 0 || c == 0x09 || c == 0x0a || c == 0x0d) + continue; + + char path[64]; + g_snprintf(path, sizeof(path), "/vte/pastify/controls/c0/%02x", c); + + auto ptr = g_new(unsigned char, 1); + *ptr = c; + + g_test_add_data_func_full(path, ptr, test_pastify_control_c0, g_free); + } + + /* DEL too */ + { + auto const path = "/vte/pastify/controls/c0/7f"; + auto ptr = g_new(unsigned char, 1); + *ptr = 0x7f; + + g_test_add_data_func_full(path, ptr, test_pastify_control_c0, g_free); + } + + /* C1 controls */ + for (auto c = 0x80; c < 0xa0; ++c) { + char path[64]; + g_snprintf(path, sizeof(path), "/vte/pastify/controls/c1/%02x", c); + + auto ptr = g_new(unsigned char, 1); + *ptr = c; + + g_test_add_data_func_full(path, ptr, test_pastify_control_c1, g_free); + } + + /* Extra test strings */ + for (auto i = 0u; i < G_N_ELEMENTS (test_strings); ++i) { + auto const* str = &test_strings[i]; + + char path[64]; + g_snprintf(path, sizeof(path), "/vte/pastify/string/%d", str->m_line); + g_test_add_data_func(path, str, test_pastify_string); + } + + return g_test_run(); +} diff --git a/src/pastify.cc b/src/pastify.cc new file mode 100644 index 0000000..070ddb6 --- /dev/null +++ b/src/pastify.cc @@ -0,0 +1,199 @@ +/* + * Copyright © 2015, 2019, Egmont Koblinger + * Copyright © 2015, 2018, 2019, 2020, 2021 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include + +#include "pastify.hh" + +namespace vte::terminal { + +using namespace std::literals; + +/* + * pastify_string: + * @str: + * @insert_brackets: + * @c1: + * + * Converts @str into a form safe for pasting to the child. Elide + * C0 controls except NUL, HT, CR, LF, and C1 controls. + * We also convert newlines to carriage returns, which more software + * is able to cope with (cough, pico, cough). + * + * Also insert bracketed paste controls around the string if + * @insert_brackets is true, using C1 CSI if @c1 is true or C0 controls + * otherwise. + */ +std::string +pastify_string(std::string_view str, + bool insert_brackets, + bool c1) +{ + auto rv = std::string{}; + rv.reserve(str.size() + 1 + (insert_brackets ? 12 : 0)); + + if (insert_brackets) { + if (c1) + rv.append("\xc2\x9b" "200~"); + else + rv.append("\e[200~"); + } + + /* C0 \ { NUL, HT, CR, LF } + { DEL } + { C1 control start byte } */ + auto const controls = "\x01\x02\x03\x04\x05\x06\x07\x08\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x7f\xc2"sv; + + auto next_char = [&str](size_t pos) constexpr noexcept -> unsigned char + { + return pos + 1 < str.size() ? str[pos + 1] : 0; + }; + + while (str.size() != 0) { + auto run = str.find_first_of(controls, 0); + + rv.append(str, 0, run); + if (run == str.npos) + break; + + switch (char8_t(str[run])) { + case 0x01 ... 0x09: + case 0x0b ... 0x0c: + case 0x0e ... 0x1f: + case 0x7f: + append_control_picture(rv, str[run]); + ++run; + break; + + case 0x0a: // LF + // We only get here for a lone LF; replace it with a CR too. + rv.push_back(0x0d); + ++run; + break; + + case 0x0d: // CR + // Keep a CR, but replace a CRLF with just a CR + rv.push_back(0x0d); + if (next_char(run) == 0x0a) + ++run; // skip + + ++run; + break; + + case 0xc2: { // First byte of a 2-byte UTF-8 sequence + auto const c = next_char(run); + if (c >= 0x80 && c <= 0x9f) { + append_control_picture(rv, c); + + // Skip both bytes of a C1 control + run += 2; + } else { + // Not a C1 control, keep this byte and continue + rv.push_back(0xc2); + ++run; + } + break; + } + + default: // Can't happen + ++run; + break; + } + + /* run is <= str.size() */ + str = str.substr(run); + } + + if (insert_brackets) { + if (c1) + rv.append("\xc2\x9b" "201~"); + else + rv.append("\e[201~"); + } + + return rv; +} + +/* + * append_control_picture: + * @str: + * @c: + * + * Appends the control picture for @ctrl (or if @ctrl has no control + * picture in unicode, appends U+FFFD). + */ +void +append_control_picture(std::string& str, + char32_t ctrl) +{ + switch (ctrl) { + case 0x00 ... 0x1f: /* C0 */ + // U+2400 SYMBOL FOR NULL + // U+2401 SYMBOL FOR START OF HEADING + // U+2402 SYMBOL FOR START OF TEXT + // U+2403 SYMBOL FOR END OF TEXT + // U+2404 SYMBOL FOR END OF TRANSMISSION + // U+2405 SYMBOL FOR ENQUIRY + // U+2406 SYMBOL FOR ACKNOWLEDGE + // U+2407 SYMBOL FOR BELL + // U+2408 SYMBOL FOR BACKSPACE + // U+2409 SYMBOL FOR HORIZONTAL TABULATION + // U+240A SYMBOL FOR LINE FEED + // U+240B SYMBOL FOR VERTICAL TABULATION + // U+240C SYMBOL FOR FORM FEED + // U+240D SYMBOL FOR CARRIAGE RETURN + // U+240E SYMBOL FOR SHIFT OUT + // U+240F SYMBOL FOR SHIFT IN + // U+2410 SYMBOL FOR DATA LINK ESCAPE + // U+2411 SYMBOL FOR DEVICE CONTROL ONE + // U+2412 SYMBOL FOR DEVICE CONTROL TWO + // U+2413 SYMBOL FOR DEVICE CONTROL THREE + // U+2414 SYMBOL FOR DEVICE CONTROL FOUR + // U+2415 SYMBOL FOR NEGATIVE ACKNOWLEDGE + // U+2416 SYMBOL FOR SYNCHRONOUS IDLE + // U+2417 SYMBOL FOR END OF TRANSMISSION BLOCK + // U+2418 SYMBOL FOR CANCEL + // U+2419 SYMBOL FOR END OF MEDIUM + // U+241A SYMBOL FOR SUBSTITUTE + // U+241B SYMBOL FOR ESCAPE + // U+241C SYMBOL FOR FILE SEPARATOR + // U+241D SYMBOL FOR GROUP SEPARATOR + // U+241E SYMBOL FOR RECORD SEPARATOR + // U+241F SYMBOL FOR UNIT SEPARATOR + str.push_back('\xe2'); + str.push_back('\x90'); + str.push_back(ctrl + 0x80); + break; + + case 0x7f: /* DEL */ + str.append("\xe2\x90\xa1"); // U+2421 SYMBOL FOR DELETE + break; + + case 0x80 ... 0x9f: /* C1 */ + // Unfortunately, over 20 years after being first proposed, unicode + // **still** does not have control pictures for the C1 controls. + // + // Use U+FFFD instead. + str.append("\xef\xbf\xbd"); + break; + + default: + // This function may only be called for controls + __builtin_unreachable(); + } +} + +} // namespace vte::terminal diff --git a/src/pastify.hh b/src/pastify.hh new file mode 100644 index 0000000..807205c --- /dev/null +++ b/src/pastify.hh @@ -0,0 +1,33 @@ +/* + * Copyright © 2015, 2019, Egmont Koblinger + * Copyright © 2015, 2018, 2019, 2020, 2021 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include +#include + +namespace vte::terminal { + +std::string pastify_string(std::string_view str, + bool insert_brackets, + bool c1 = false); + +void append_control_picture(std::string& str, + char32_t ctrl); + +} // namespace vte::terminal diff --git a/src/pcre2-glue.hh b/src/pcre2-glue.hh new file mode 100644 index 0000000..e48d387 --- /dev/null +++ b/src/pcre2-glue.hh @@ -0,0 +1,39 @@ +/* + * Copyright © 2015 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#define PCRE2_CODE_UNIT_WIDTH 0 +#include +#include + +/* Assert compatibility of PCRE2 and GLib types */ +static_assert(sizeof(PCRE2_UCHAR8) == sizeof (uint8_t), "PCRE2_UCHAR2 has wrong size"); +static_assert(sizeof(PCRE2_SIZE) == sizeof (size_t), "PCRE2_SIZE has wrong size"); +static_assert(PCRE2_UNSET == (size_t)-1, "PCRE2_UNSET has wrong value"); +static_assert(PCRE2_ZERO_TERMINATED == (size_t)-1, "PCRE2_ZERO_TERMINATED has wrong value"); + +#include "std-glue.hh" + +namespace vte { + +VTE_DECLARE_FREEABLE(pcre2_code_8, pcre2_code_free_8); +VTE_DECLARE_FREEABLE(pcre2_compile_context_8, pcre2_compile_context_free_8); +VTE_DECLARE_FREEABLE(pcre2_match_context_8, pcre2_match_context_free_8); +VTE_DECLARE_FREEABLE(pcre2_match_data_8, pcre2_match_data_free_8); + +} // namespace vte diff --git a/src/pty.cc b/src/pty.cc index 822edc0..067dba3 100644 --- a/src/pty.cc +++ b/src/pty.cc @@ -2,19 +2,18 @@ * Copyright (C) 2001,2002 Red Hat, Inc. * Copyright © 2009, 2010, 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ /** @@ -26,26 +25,23 @@ * pseudo-terminals and to resize pseudo-terminals. */ -#include +#include "config.h" #include "pty.hh" +#include "libc-glue.hh" + #include #include "vteptyinternal.hh" -#include "vtetypes.hh" -#include "vtespawn.hh" #include #include #include #include -#ifdef HAVE_SYS_TERMIOS_H -#include -#endif #include #include #include -#ifdef HAVE_SYS_SYSLIMITS_H +#if __has_include() #include #endif #include @@ -53,18 +49,21 @@ #include #include #include -#ifdef HAVE_TERMIOS_H #include -#endif #include -#ifdef HAVE_UTIL_H +#if __has_include() #include #endif -#ifdef HAVE_PTY_H +#if __has_include() #include #endif -#if defined(__sun) && defined(HAVE_STROPTS_H) +#if defined(__sun) && __has_include() #include +#define HAVE_STROPTS_H +#endif +#ifdef __NetBSD__ +#include +#include #endif #include #include @@ -74,18 +73,9 @@ #include "glib-glue.hh" -#ifdef WITH_SYSTEMD -#include "systemd.hh" -#endif +#include "vtedefines.hh" -/* NSIG isn't in POSIX, so if it doesn't exist use this here. See bug #759196 */ -#ifndef NSIG -#define NSIG (8 * sizeof(sigset_t)) -#endif - -#define VTE_VERSION_NUMERIC ((VTE_MAJOR_VERSION) * 10000 + (VTE_MINOR_VERSION) * 100 + (VTE_MICRO_VERSION)) - -#define VTE_TERMINFO_NAME "xterm-256color" +#include "missing.hh" namespace vte::base { @@ -103,6 +93,91 @@ Pty::unref() noexcept delete this; } +int +Pty::get_peer(bool cloexec) const noexcept +{ + if (!m_pty_fd) + return -1; + + /* FIXME? else if (m_flags & VTE_PTY_NO_CTTTY) + * No session and no controlling TTY wanted, do we need to lose our controlling TTY, + * perhaps by open("/dev/tty") + ioctl(TIOCNOTTY) ? + */ + + /* Now open the PTY peer. Note that this also makes the PTY our controlling TTY. */ + auto const fd_flags = int{O_RDWR | + ((m_flags & VTE_PTY_NO_CTTY) ? O_NOCTTY : 0) | + (cloexec ? O_CLOEXEC : 0)}; + + auto peer_fd = vte::libc::FD{}; + +#ifdef __linux__ + peer_fd = ioctl(m_pty_fd.get(), TIOCGPTPEER, fd_flags); + /* Note: According to the kernel's own tests (tools/testing/selftests/filesystems/devpts_pts.c), + * the error returned when the running kernel does not support this ioctl should be EINVAL. + * However it appears that the actual error returned is ENOTTY. So we check for both of them. + * See issue#182. + */ + if (!peer_fd && + errno != EINVAL && + errno != ENOTTY) { + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s\n", + "ioctl(TIOCGPTPEER)", g_strerror(errsv)); + return -1; + } + + /* Fall back to ptsname + open */ +#endif + + if (!peer_fd) { + auto const name = ptsname(m_pty_fd.get()); + if (name == nullptr) { + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s\n", + "ptsname", g_strerror(errsv)); + return -1; + } + + _vte_debug_print (VTE_DEBUG_PTY, + "Setting up child pty: master FD = %d name = %s\n", + m_pty_fd.get(), name); + + peer_fd = ::open(name, fd_flags); + if (!peer_fd) { + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print (VTE_DEBUG_PTY, "Failed to open PTY: %s\n", + g_strerror(errsv)); + return -1; + } + } + + assert(bool(peer_fd)); + +#if defined(__sun) && defined(HAVE_STROPTS_H) + /* See https://illumos.org/man/7i/streamio */ + if (isastream (peer_fd.get()) == 1) { + /* https://illumos.org/man/7m/ptem */ + if ((ioctl(peer_fd.get(), I_FIND, "ptem") == 0) && + (ioctl(peer_fd.get(), I_PUSH, "ptem") == -1)) { + return -1; + } + /* https://illumos.org/man/7m/ldterm */ + if ((ioctl(peer_fd.get(), I_FIND, "ldterm") == 0) && + (ioctl(peer_fd.get(), I_PUSH, "ldterm") == -1)) { + return -1; + } + /* https://illumos.org/man/7m/ttcompat */ + if ((ioctl(peer_fd.get(), I_FIND, "ttcompat") == 0) && + (ioctl(peer_fd.get(), I_PUSH, "ttcompat") == -1)) { + return -1; + } + } +#endif + + return peer_fd.release(); +} + void Pty::child_setup() const noexcept { @@ -110,12 +185,15 @@ Pty::child_setup() const noexcept sigset_t set; sigemptyset(&set); if (pthread_sigmask(SIG_SETMASK, &set, nullptr) == -1) { - _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %m\n", "pthread_sigmask"); + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s\n", + "pthread_sigmask", g_strerror(errsv)); _exit(127); } /* Reset the handlers for all signals to their defaults. The parent - * (or one of the libraries it links to) may have changed one to be ignored. */ + * (or one of the libraries it links to) may have changed one to be ignored. + */ for (int n = 1; n < NSIG; n++) { if (n == SIGSTOP || n == SIGKILL) continue; @@ -123,76 +201,22 @@ Pty::child_setup() const noexcept signal(n, SIG_DFL); } - auto masterfd = fd(); - if (masterfd == -1) - _exit(127); - - if (grantpt(masterfd) != 0) { - _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %m\n", "grantpt"); - _exit(127); - } - - if (unlockpt(masterfd) != 0) { - _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %m\n", "unlockpt"); - _exit(127); - } - if (!(m_flags & VTE_PTY_NO_SESSION)) { /* This starts a new session; we become its process-group leader, * and lose our controlling TTY. */ _vte_debug_print (VTE_DEBUG_PTY, "Starting new session\n"); if (setsid() == -1) { - _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %m\n", "setsid"); - _exit(127); - } - } - /* FIXME? else if (m_flags & VTE_PTY_NO_CTTTY) - * No session and no controlling TTY wanted, do we need to lose our controlling TTY, - * perhaps by open("/dev/tty") + ioctl(TIOCNOTTY) ? - */ - - /* Now open the PTY peer. Note that this also makes the PTY our controlling TTY. */ - /* Note: *not* O_CLOEXEC! */ - auto const fd_flags = int{O_RDWR | ((m_flags & VTE_PTY_NO_CTTY) ? O_NOCTTY : 0)}; - auto fd = int{-1}; - -#ifdef __linux__ - fd = ioctl(masterfd, TIOCGPTPEER, fd_flags); - /* Note: According to the kernel's own tests (tools/testing/selftests/filesystems/devpts_pts.c), - * the error returned when the running kernel does not support this ioctl should be EINVAL. - * However it appears that the actual error returned is ENOTTY. So we check for both of them. - * See issue#182. - */ - if (fd == -1 && - errno != EINVAL && - errno != ENOTTY) { - _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %m\n", "ioctl(TIOCGPTPEER)"); - _exit(127); - } - - /* Fall back to ptsname + open */ -#endif - - if (fd == -1) { - auto const name = ptsname(masterfd); - if (name == nullptr) { - _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %m\n", "ptsname"); - _exit(127); - } - - _vte_debug_print (VTE_DEBUG_PTY, - "Setting up child pty: master FD = %d name = %s\n", - masterfd, name); - - fd = ::open(name, fd_flags); - if (fd == -1) { - _vte_debug_print (VTE_DEBUG_PTY, "Failed to open PTY: %m\n"); + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s\n", + "setsid", g_strerror(errsv)); _exit(127); } } - assert(fd != -1); + auto peer_fd = get_peer(); + if (peer_fd == -1) + _exit(127); #ifdef TIOCSCTTY /* On linux, opening the PTY peer above already made it our controlling TTY (since @@ -200,359 +224,48 @@ Pty::child_setup() const noexcept * on *BSD, that doesn't happen, so we need this explicit ioctl here. */ if (!(m_flags & VTE_PTY_NO_CTTY)) { - if (ioctl(fd, TIOCSCTTY, fd) != 0) { - _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %m\n", "ioctl(TIOCSCTTY)"); + if (ioctl(peer_fd, TIOCSCTTY, peer_fd) != 0) { + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s\n", + "ioctl(TIOCSCTTY)", g_strerror(errsv)); _exit(127); } } #endif -#if defined(__sun) && defined(HAVE_STROPTS_H) - if (isastream (fd) == 1) { - if ((ioctl(fd, I_FIND, "ptem") == 0) && - (ioctl(fd, I_PUSH, "ptem") == -1)) { - _exit (127); - } - if ((ioctl(fd, I_FIND, "ldterm") == 0) && - (ioctl(fd, I_PUSH, "ldterm") == -1)) { - _exit (127); - } - if ((ioctl(fd, I_FIND, "ttcompat") == 0) && - (ioctl(fd, I_PUSH, "ttcompat") == -1)) { - perror ("ioctl (fd, I_PUSH, \"ttcompat\")"); - _exit (127); - } - } -#endif - /* now setup child I/O through the tty */ - if (fd != STDIN_FILENO) { - if (dup2(fd, STDIN_FILENO) != STDIN_FILENO){ + if (peer_fd != STDIN_FILENO) { + if (dup2(peer_fd, STDIN_FILENO) != STDIN_FILENO){ _exit (127); } } - if (fd != STDOUT_FILENO) { - if (dup2(fd, STDOUT_FILENO) != STDOUT_FILENO){ + if (peer_fd != STDOUT_FILENO) { + if (dup2(peer_fd, STDOUT_FILENO) != STDOUT_FILENO){ _exit (127); } } - if (fd != STDERR_FILENO) { - if (dup2(fd, STDERR_FILENO) != STDERR_FILENO){ + if (peer_fd != STDERR_FILENO) { + if (dup2(peer_fd, STDERR_FILENO) != STDERR_FILENO){ _exit (127); } } - /* Close the original FD, unless it's one of the stdio descriptors */ - if (fd != STDIN_FILENO && - fd != STDOUT_FILENO && - fd != STDERR_FILENO) { - close(fd); - } - - if (keep_fd > 0) { - int i; - /* Close most descriptors. */ - for (i = 0; i < sysconf(_SC_OPEN_MAX); i++) { - if (i != keep_fd && - i != fd && - i != STDOUT_FILENO && - i != STDIN_FILENO && - i != STDERR_FILENO) { - close(i); - } - } - } - - - /* Now set the TERM environment variable */ - /* FIXME: Setting environment here seems to have no effect, the merged envp2 will override on exec. - * By the way, we'd need to set the one from there, if any. */ - g_setenv("TERM", VTE_TERMINFO_NAME, TRUE); - - char version[7]; - g_snprintf (version, sizeof (version), "%u", VTE_VERSION_NUMERIC); - g_setenv ("VTE_VERSION", version, TRUE); - - /* Finally call an extra child setup */ - if (m_extra_child_setup.func) { - m_extra_child_setup.func(m_extra_child_setup.data); - } -} - -/* TODO: clean up the spawning - * - replace current env rather than adding! - */ - -/* - * __vte_pty_merge_environ: - * @envp: environment vector - * @inherit: whether to use the parent environment - * - * Merges @envp to the parent environment, and returns a new environment vector. - * - * Returns: a newly allocated string array. Free using g_strfreev() - */ -static gchar ** -__vte_pty_merge_environ (char **envp, - const char *directory, - gboolean inherit) -{ - GHashTable *table; - GHashTableIter iter; - char *name, *value; - gchar **parent_environ; - GPtrArray *array; - gint i; - - table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); - - if (inherit) { - parent_environ = g_listenv (); - for (i = 0; parent_environ[i] != NULL; i++) { - g_hash_table_replace (table, - g_strdup (parent_environ[i]), - g_strdup (g_getenv (parent_environ[i]))); - } - g_strfreev (parent_environ); - } - - /* Make sure the one in envp overrides the default. */ - g_hash_table_replace (table, g_strdup ("TERM"), g_strdup (VTE_TERMINFO_NAME)); - - if (envp != NULL) { - for (i = 0; envp[i] != NULL; i++) { - name = g_strdup (envp[i]); - value = strchr (name, '='); - if (value) { - *value = '\0'; - value = g_strdup (value + 1); - } - g_hash_table_replace (table, name, value); - } - } - - g_hash_table_replace (table, g_strdup ("VTE_VERSION"), g_strdup_printf ("%u", VTE_VERSION_NUMERIC)); - - /* Always set this ourself, not allowing replacing from envp */ - g_hash_table_replace(table, g_strdup("COLORTERM"), g_strdup("truecolor")); - - /* We need to put the working directory also in PWD, so that - * e.g. bash starts in the right directory if @directory is a symlink. - * See bug #502146 and #758452. + /* If the peer FD has not been consumed above as one of the stdio descriptors, + * need to close it now so that it doesn't leak to the child. */ - if (directory) - g_hash_table_replace(table, g_strdup("PWD"), g_strdup(directory)); - - array = g_ptr_array_sized_new (g_hash_table_size (table) + 1); - g_hash_table_iter_init(&iter, table); - while (g_hash_table_iter_next(&iter, (void**) &name, (void**) &value)) { - g_ptr_array_add (array, g_strconcat (name, "=", value, nullptr)); - } - g_assert(g_hash_table_size(table) == array->len); - g_hash_table_destroy (table); - g_ptr_array_add (array, NULL); - - return (gchar **) g_ptr_array_free (array, FALSE); -} - -static void -pty_child_setup_cb(void* data) -{ - auto pty = reinterpret_cast(data); - pty->child_setup(); -} - -static int -_vte_pty_keep_fd(char **env_add) -{ - int i; - const gchar *needle = "VTE_PTY_KEEP_FD="; - - if (env_add == NULL) - return -1; - - for (i = 0; env_add[i] != NULL; i++) { - gchar *s = strstr(env_add[i], needle); - if (s != NULL) - return atoi(&s[strlen(needle)]); - } - - return -1; -} - -/* - * Pty::spawn: - * @directory: the name of a directory the command should start in, or %nullptr - * to use the cwd - * @argv: child's argument vector - * @envv: a list of environment variables to be added to the environment before - * starting the process, or %nullptr - * @spawn_flags: flags from #GSpawnFlags - * @child_setup: function to run in the child just before exec() - * @child_setup_data: user data for @child_setup - * @child_pid: a location to store the child PID, or %nullptr - * @timeout: a timeout value in ms, or %nullptr - * @cancellable: a #GCancellable, or %nullptr - * @error: return location for a #GError, or %nullptr - * - * Uses g_spawn_async() to spawn the command in @argv. The child's environment will - * be the parent environment with the variables in @envv set afterwards. - * - * Enforces the vte_terminal_watch_child() requirements by adding - * %G_SPAWN_DO_NOT_REAP_CHILD to @spawn_flags. - * - * Note that the %G_SPAWN_LEAVE_DESCRIPTORS_OPEN flag is not supported; - * it will be cleared! - * - * If spawning the command in @working_directory fails because the child - * is unable to chdir() to it, falls back trying to spawn the command - * in the parent's working directory. - * - * Returns: %TRUE on success, or %FALSE on failure with @error filled in - */ -bool -Pty::spawn(char const* directory, - char** argv, - char** envv, - GSpawnFlags spawn_flags_, - GSpawnChildSetupFunc child_setup_func, - gpointer child_setup_data, - GPid* child_pid /* out */, - int timeout, - GCancellable* cancellable, - GError** error) noexcept -{ - guint spawn_flags = (guint) spawn_flags_; - bool ret{true}; - bool inherit_envv; - char** envp2; - int i; - GPollFD pollfd; - -#ifndef WITH_SYSTEMD - if (spawn_flags & VTE_SPAWN_REQUIRE_SYSTEMD_SCOPE) { - g_set_error(error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, - "systemd not available"); - return false; - } -#endif - - if (cancellable && !g_cancellable_make_pollfd(cancellable, &pollfd)) { - vte::util::restore_errno errsv; - g_set_error(error, - G_IO_ERROR, - g_io_error_from_errno(errsv), - "Failed to make cancellable pollfd: %s", - g_strerror(errsv)); - return false; - } - - spawn_flags |= G_SPAWN_DO_NOT_REAP_CHILD; - - /* We do NOT support this flag. If you want to have some FD open in the child - * process, simply use a child setup function that unsets the CLOEXEC flag - * on that FD. - */ - spawn_flags &= ~G_SPAWN_LEAVE_DESCRIPTORS_OPEN; - - inherit_envv = (spawn_flags & VTE_SPAWN_NO_PARENT_ENVV) == 0; - spawn_flags &= ~VTE_SPAWN_NO_PARENT_ENVV; - - /* add the given environment to the childs */ - envp2 = __vte_pty_merge_environ (envv, directory, inherit_envv); - - keep_fd = _vte_pty_keep_fd(envp2); - if (keep_fd > 0) - spawn_flags |= G_SPAWN_LEAVE_DESCRIPTORS_OPEN; - - _VTE_DEBUG_IF (VTE_DEBUG_MISC) { - g_printerr ("Spawning command:\n"); - for (i = 0; argv[i] != NULL; i++) { - g_printerr (" argv[%d] = %s\n", i, argv[i]); - } - for (i = 0; envp2[i] != NULL; i++) { - g_printerr (" env[%d] = %s\n", i, envp2[i]); - } - g_printerr (" directory: %s\n", - directory ? directory : "(none)"); - } - - m_extra_child_setup.func = child_setup_func; - m_extra_child_setup.data = child_setup_data; - - auto pid = pid_t{-1}; - auto err = vte::glib::Error{}; - ret = vte_spawn_async_with_pipes_cancellable(directory, - argv, envp2, - (GSpawnFlags)spawn_flags, - (GSpawnChildSetupFunc)pty_child_setup_cb, - this, - &pid, - nullptr, nullptr, nullptr, - timeout, - cancellable ? &pollfd : nullptr, - err); - if (!ret && - directory != nullptr && - err.matches(G_SPAWN_ERROR, G_SPAWN_ERROR_CHDIR)) { - /* try spawning in our working directory */ - err.reset(); - ret = vte_spawn_async_with_pipes_cancellable(nullptr, - argv, envp2, - (GSpawnFlags)spawn_flags, - (GSpawnChildSetupFunc)pty_child_setup_cb, - this, - &pid, - nullptr, nullptr, nullptr, - timeout, - cancellable ? &pollfd : nullptr, - err); - } - - g_strfreev (envp2); - - m_extra_child_setup.func = nullptr; - m_extra_child_setup.data = nullptr; - - if (cancellable) - g_cancellable_release_fd(cancellable); - -#ifdef WITH_SYSTEMD - if (ret && - !(spawn_flags & VTE_SPAWN_NO_SYSTEMD_SCOPE) && - !vte::systemd::create_scope_for_pid_sync(pid, - timeout, // FIXME: recalc timeout - cancellable, - err)) { - if (spawn_flags & VTE_SPAWN_REQUIRE_SYSTEMD_SCOPE) { - auto pgrp = getpgid(pid); - if (pgrp != -1) { - kill(-pgrp, SIGHUP); - } - - kill(pid, SIGHUP); - - ret = false; - } else { - _vte_debug_print(VTE_DEBUG_PTY, - "Failed to create systemd scope: %s", - err.message()); - err.reset(); - } - } -#endif // WITH_SYSTEMD - - if (!ret) - return err.propagate(error); - - *child_pid = pid; - return true; + if (peer_fd != STDIN_FILENO && + peer_fd != STDOUT_FILENO && + peer_fd != STDERR_FILENO) { + close(peer_fd); + } } /* * Pty::set_size: * @rows: the desired number of rows * @columns: the desired number of columns + * @cell_height_px: the height of a cell in px, or 0 for undetermined + * @cell_width_px: the width of a cell in px, or 0 for undetermined * * Attempts to resize the pseudo terminal's window size. If successful, the * OS kernel will send #SIGWINCH to the child process group. @@ -561,7 +274,9 @@ Pty::spawn(char const* directory, */ bool Pty::set_size(int rows, - int columns) const noexcept + int columns, + int cell_height_px, + int cell_width_px) const noexcept { auto master = fd(); @@ -575,9 +290,10 @@ Pty::set_size(int rows, auto ret = ioctl(master, TIOCSWINSZ, &size); if (ret != 0) { - vte::util::restore_errno errsv; + auto errsv = vte::libc::ErrnoSaver{}; _vte_debug_print(VTE_DEBUG_PTY, - "Failed to set size on %d: %m\n", master); + "Failed to set size on %d: %s\n", + master, g_strerror(errsv)); } return ret == 0; @@ -616,64 +332,69 @@ Pty::get_size(int* rows, return true; } - vte::util::restore_errno errsv; + auto errsv = vte::libc::ErrnoSaver{}; _vte_debug_print(VTE_DEBUG_PTY, - "Failed to read size from fd %d: %m\n", master); + "Failed to read size from fd %d: %s\n", + master, g_strerror(errsv)); return false; } static int -fd_set_cloexec(int fd) -{ - int flags = fcntl(fd, F_GETFD, 0); - if (flags < 0) - return flags; - - return fcntl(fd, F_SETFD, flags | FD_CLOEXEC); -} - -static int -fd_set_nonblocking(int fd) -{ - int flags = fcntl(fd, F_GETFL, 0); - if (flags < 0) - return -1; - if ((flags & O_NONBLOCK) != 0) - return 0; - return fcntl(fd, F_SETFL, flags | O_NONBLOCK); -} - -static int -fd_set_cpkt(int fd) +fd_set_cpkt(vte::libc::FD& fd) { + auto ret = 0; +#if defined(TIOCPKT) /* tty_ioctl(4) -> every read() gives an extra byte at the beginning * notifying us of stop/start (^S/^Q) events. */ int one = 1; - return ioctl(fd, TIOCPKT, &one); + ret = ioctl(fd.get(), TIOCPKT, &one); +#elif defined(__sun) && defined(HAVE_STROPTS_H) + if (isastream(fd.get()) == 1 && + ioctl(fd.get(), I_FIND, "pckt") == 0) + ret = ioctl(fd.get(), I_PUSH, "pckt"); +#endif + return ret; } static int -fd_setup(int fd) +fd_setup(vte::libc::FD& fd) { - if (fd_set_cloexec(fd) < 0) { - vte::util::restore_errno errsv; - _vte_debug_print(VTE_DEBUG_PTY, - "%s failed: %s", "Setting CLOEXEC flag", g_strerror(errsv)); + if (grantpt(fd.get()) != 0) { + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s\n", + "grantpt", g_strerror(errsv)); return -1; } - if (fd_set_nonblocking(fd) < 0) { - vte::util::restore_errno errsv; + if (unlockpt(fd.get()) != 0) { + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s\n", + "unlockpt", g_strerror(errsv)); + return -1; + } + + if (vte::libc::fd_set_cloexec(fd.get()) < 0) { + auto errsv = vte::libc::ErrnoSaver{}; _vte_debug_print(VTE_DEBUG_PTY, - "%s failed: %s", "Setting O_NONBLOCK flag", g_strerror(errsv)); + "%s failed: %s", + "Setting CLOEXEC flag", g_strerror(errsv)); + return -1; + } + + if (vte::libc::fd_set_nonblock(fd.get()) < 0) { + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, + "%s failed: %s", + "Setting O_NONBLOCK flag", g_strerror(errsv)); return -1; } if (fd_set_cpkt(fd) < 0) { - vte::util::restore_errno errsv; + auto errsv = vte::libc::ErrnoSaver{}; _vte_debug_print(VTE_DEBUG_PTY, - "%s failed: %s", "ioctl(TIOCPKT)", g_strerror(errsv)); + "%s failed: %s", + "Setting packet mode", g_strerror(errsv)); return -1; } @@ -689,75 +410,114 @@ fd_setup(int fd) * * Returns: the new PTY's master FD, or -1 */ -static int +static vte::libc::FD _vte_pty_open_posix(void) { /* Attempt to open the master. */ - vte::util::smart_fd fd; - fd = posix_openpt(O_RDWR | O_NOCTTY | O_NONBLOCK | O_CLOEXEC); + auto fd = vte::libc::FD{posix_openpt(O_RDWR | O_NOCTTY | O_NONBLOCK | O_CLOEXEC)}; #ifndef __linux__ /* Other kernels may not support CLOEXEC or NONBLOCK above, so try to fall back */ bool need_cloexec = false, need_nonblocking = false; - if (fd == -1 && errno == EINVAL) { + +#ifdef __NetBSD__ + // NetBSD is a special case: prior to 9.99.101, posix_openpt() will not return + // EINVAL for unknown/unsupported flags but instead silently ignore these flags + // and just return a valid PTY but without the NONBLOCK | CLOEXEC flags set. + // So we need to manually apply these flags there. See issue #2575. + int mib[2], osrev; + size_t len; + + mib[0] = CTL_KERN; + mib[1] = KERN_OSREV; + len = sizeof(osrev); + sysctl(mib, 2, &osrev, &len, NULL, 0); + if (osrev < 999010100) { + need_cloexec = need_nonblocking = true; + _vte_debug_print(VTE_DEBUG_PTY, + "NetBSD < 9.99.101, forcing fallback " + "for NONBLOCK and CLOEXEC.\n"); + } +#else + + if (!fd && errno == EINVAL) { /* Try without NONBLOCK and apply the flag afterward */ need_nonblocking = true; fd = posix_openpt(O_RDWR | O_NOCTTY | O_CLOEXEC); - if (fd == -1 && errno == EINVAL) { + if (!fd && errno == EINVAL) { /* Try without CLOEXEC and apply the flag afterwards */ need_cloexec = true; fd = posix_openpt(O_RDWR | O_NOCTTY); } } +#endif /* __NetBSD__ */ #endif /* !linux */ - if (fd == -1) { - vte::util::restore_errno errsv; + if (!fd) { + auto errsv = vte::libc::ErrnoSaver{}; _vte_debug_print(VTE_DEBUG_PTY, - "%s failed: %s", "posix_openpt", g_strerror(errsv)); - return -1; + "%s failed: %s", + "posix_openpt", g_strerror(errsv)); + return {}; } #ifndef __linux__ - if (need_cloexec && fd_set_cloexec(fd) < 0) { - vte::util::restore_errno errsv; + if (need_cloexec && vte::libc::fd_set_cloexec(fd.get()) < 0) { + auto errsv = vte::libc::ErrnoSaver{}; _vte_debug_print(VTE_DEBUG_PTY, - "%s failed: %s", "Setting CLOEXEC flag", g_strerror(errsv)); - return -1; + "%s failed: %s", + "Setting CLOEXEC flag", g_strerror(errsv)); + return {}; } - if (need_nonblocking && fd_set_nonblocking(fd) < 0) { - vte::util::restore_errno errsv; + if (need_nonblocking && vte::libc::fd_set_nonblock(fd.get()) < 0) { + auto errsv = vte::libc::ErrnoSaver{}; _vte_debug_print(VTE_DEBUG_PTY, - "%s failed: %s", "Setting NONBLOCK flag", g_strerror(errsv)); - return -1; + "%s failed: %s", + "Setting NONBLOCK flag", g_strerror(errsv)); + return {}; } #endif /* !linux */ if (fd_set_cpkt(fd) < 0) { - vte::util::restore_errno errsv; + auto errsv = vte::libc::ErrnoSaver{}; _vte_debug_print(VTE_DEBUG_PTY, - "%s failed: %s", "ioctl(TIOCPKT)", g_strerror(errsv)); - return -1; + "%s failed: %s", + "Setting packet mode", g_strerror(errsv)); + return {}; } - _vte_debug_print(VTE_DEBUG_PTY, "Allocated pty on fd %d.\n", (int)fd); + if (grantpt(fd.get()) != 0) { + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s\n", + "grantpt", g_strerror(errsv)); + return {}; + } - return fd.steal(); + if (unlockpt(fd.get()) != 0) { + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s\n", + "unlockpt", g_strerror(errsv)); + return {}; + } + + _vte_debug_print(VTE_DEBUG_PTY, "Allocated pty on fd %d.\n", fd.get()); + + return fd; } -static int +static vte::libc::FD _vte_pty_open_foreign(int masterfd /* consumed */) { - vte::util::smart_fd fd(masterfd); - if (fd == -1) { + auto fd = vte::libc::FD{masterfd}; + if (!fd) { errno = EBADF; - return -1; + return {}; } if (fd_setup(fd) < 0) - return -1; + return {}; - return fd.steal(); + return fd; } /* @@ -776,8 +536,9 @@ Pty::set_utf8(bool utf8) const noexcept #ifdef IUTF8 struct termios tio; if (tcgetattr(fd(), &tio) == -1) { - vte::util::restore_errno errsv; - _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %m", "tcgetattr"); + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s", + "tcgetattr", g_strerror(errsv)); return false; } @@ -791,8 +552,9 @@ Pty::set_utf8(bool utf8) const noexcept /* Only set the flag if it changes */ if (saved_cflag != tio.c_iflag && tcsetattr(fd(), TCSANOW, &tio) == -1) { - vte::util::restore_errno errsv; - _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %m", "tcsetattr"); + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s", + "tcsetattr", g_strerror(errsv)); return false; } #endif @@ -804,21 +566,21 @@ Pty* Pty::create(VtePtyFlags flags) { auto fd = _vte_pty_open_posix(); - if (fd == -1) + if (!fd) return nullptr; - return new Pty{fd, flags}; + return new Pty{std::move(fd), flags}; } Pty* -Pty::create_foreign(int fd, +Pty::create_foreign(int foreign_fd, VtePtyFlags flags) { - fd = _vte_pty_open_foreign(fd); - if (fd == -1) + auto fd = _vte_pty_open_foreign(foreign_fd); + if (!fd) return nullptr; - return new Pty{fd, flags}; + return new Pty{std::move(fd), flags}; } } // namespace vte::base diff --git a/src/pty.hh b/src/pty.hh index fb42f33..2dc8ac9 100644 --- a/src/pty.hh +++ b/src/pty.hh @@ -1,48 +1,42 @@ /* * Copyright © 2018, 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once #include +#include + #include "vte/vteenums.h" -#include "vtetypes.hh" + +#include "libc-glue.hh" namespace vte::base { class Pty { private: mutable volatile int m_refcount{1}; - - mutable struct { - GSpawnChildSetupFunc func{nullptr}; - void* data{nullptr}; - } m_extra_child_setup; - - vte::util::smart_fd m_pty_fd{}; - + vte::libc::FD m_pty_fd{}; VtePtyFlags m_flags{VTE_PTY_DEFAULT}; - int keep_fd{0}; - public: - constexpr Pty(int fd = -1, + constexpr Pty(vte::libc::FD&& fd, VtePtyFlags flags = VTE_PTY_DEFAULT) noexcept - : m_pty_fd{fd}, + : m_pty_fd{std::move(fd)}, m_flags{flags} { } @@ -55,24 +49,17 @@ public: Pty* ref() noexcept; void unref() noexcept; - inline constexpr int fd() const noexcept { return m_pty_fd; } + inline constexpr int fd() const noexcept { return m_pty_fd.get(); } inline constexpr auto flags() const noexcept { return m_flags; } + int get_peer(bool cloexec = false) const noexcept; + void child_setup() const noexcept; - bool spawn(char const* directory, - char** argv, - char** envv, - GSpawnFlags spawn_flags_, - GSpawnChildSetupFunc child_setup, - void* child_setup_data, - GPid* child_pid /* out */, - int timeout, - GCancellable* cancellable, - GError** error) noexcept; - bool set_size(int rows, - int columns) const noexcept; + int columns, + int cell_height_px, + int cell_width_px) const noexcept; bool get_size(int* rows, int* columns) const noexcept; bool set_utf8(bool utf8) const noexcept; diff --git a/src/reaper.cc b/src/reaper.cc index 629c930..2b39f52 100644 --- a/src/reaper.cc +++ b/src/reaper.cc @@ -1,19 +1,18 @@ /* * Copyright (C) 2002 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" diff --git a/src/reaper.hh b/src/reaper.hh index 3426d7c..23faaec 100644 --- a/src/reaper.hh +++ b/src/reaper.hh @@ -1,19 +1,18 @@ /* * Copyright (C) 2002 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once diff --git a/src/reflect.c b/src/reflect.c index 63d47da..83e21ca 100644 --- a/src/reflect.c +++ b/src/reflect.c @@ -1,19 +1,18 @@ /* * Copyright (C) 2003 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include @@ -151,7 +150,7 @@ text_changed_insert(AtkObject *obj, gint offset, gint length, gpointer data) p = g_utf8_next_char(p); } -#ifdef VTE_DEBUG +#if VTE_DEBUG if ((getenv("REFLECT_VERBOSE") != NULL) && (atol(getenv("REFLECT_VERBOSE")) != 0)) { g_printerr("Inserted %d chars ('%.*s') at %d,", @@ -177,7 +176,7 @@ text_changed_delete(AtkObject *obj, gint offset, gint length, gpointer data) } g_array_remove_index(contents, i); } -#ifdef VTE_DEBUG +#if VTE_DEBUG if ((getenv("REFLECT_VERBOSE") != NULL) && (atol(getenv("REFLECT_VERBOSE")) != 0)) { g_printerr("Deleted %d chars at %d.\n", length, offset); diff --git a/src/refptr-test.cc b/src/refptr-test.cc index 41e4b6e..3b6e7b7 100644 --- a/src/refptr-test.cc +++ b/src/refptr-test.cc @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -74,7 +74,7 @@ test_glib_refptr(void) obj_t obj1; obj1.obj = test_object_new(); g_object_add_weak_pointer(G_OBJECT(obj1.obj), &obj1.ptr); - vte::glib::RefPtr ptr1 = obj1.obj; + auto ptr1 = vte::glib::RefPtr{obj1.obj}; g_assert_true(ptr1.get() == obj1.obj); auto ptr2 = std::move(ptr1); @@ -85,7 +85,7 @@ test_glib_refptr(void) obj2.obj = test_object_new(); g_object_add_weak_pointer(G_OBJECT(obj2.obj), &obj2.ptr); g_assert_nonnull(obj2.ptr); - ptr2 = obj2.obj; + ptr2.reset(obj2.obj); g_assert_null(obj1.ptr); g_assert_true(ptr2.get() == obj2.obj); g_assert_nonnull(obj2.ptr); @@ -97,7 +97,7 @@ test_glib_refptr(void) obj3.obj = test_object_new(); g_object_add_weak_pointer(G_OBJECT(obj3.obj), &obj3.ptr); g_assert_nonnull(obj3.ptr); - vte::glib::RefPtr ptr3 = obj3.obj; + auto ptr3 = vte::glib::RefPtr{obj3.obj}; TestObject* obj4 = ptr3.release(); g_assert_null(ptr3.get()); g_assert_nonnull(obj4); diff --git a/src/refptr.hh b/src/refptr.hh index 5d8e126..a46e642 100644 --- a/src/refptr.hh +++ b/src/refptr.hh @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -20,19 +20,14 @@ #include #include +#include "cxx-utils.hh" + namespace vte { namespace glib { -template -class RefPtr : public std::unique_ptr -{ -private: - using base_type = std::unique_ptr; - -public: - RefPtr(T* obj = nullptr) : base_type{obj, &g_object_unref} { } -}; +template +using RefPtr = vte::FreeablePtr; template RefPtr @@ -40,7 +35,7 @@ make_ref(T* obj) { if (obj) g_object_ref(obj); - return {obj}; + return RefPtr{obj}; } template @@ -49,14 +44,28 @@ make_ref_sink(T* obj) { if (obj) g_object_ref_sink(obj); - return {obj}; + return RefPtr{obj}; } template RefPtr take_ref(T* obj) { - return {obj}; + return RefPtr{obj}; +} + +template +RefPtr +acquire_ref(GWeakRef* wr) +{ + return take_ref(reinterpret_cast(g_weak_ref_get(wr))); +} + +template +RefPtr +ref(RefPtr const& obj) +{ + return make_ref(obj.get()); } } // namespace glib diff --git a/src/regex.cc b/src/regex.cc index 52e4e0b..c02ac12 100644 --- a/src/regex.cc +++ b/src/regex.cc @@ -1,18 +1,18 @@ /* * Copyright © 2015, 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -86,6 +86,8 @@ Regex* Regex::compile(Regex::Purpose purpose, std::string_view const& pattern, uint32_t flags, + uint32_t extra_flags, + size_t* error_offset, GError** error) { assert(error == nullptr || *error == nullptr); @@ -93,26 +95,35 @@ Regex::compile(Regex::Purpose purpose, if (!check_pcre_config_unicode(error)) return nullptr; + auto context = vte::Freeable{}; + if (extra_flags) { + context = vte::take_freeable(pcre2_compile_context_create_8(nullptr)); + pcre2_set_compile_extra_options_8(context.get(), extra_flags); + } + int errcode; PCRE2_SIZE erroffset; - auto code = pcre2_compile_8((PCRE2_SPTR8)pattern.data(), - pattern.size(), - (uint32_t)flags | - PCRE2_UTF | - (flags & PCRE2_UTF ? PCRE2_NO_UTF_CHECK : 0) | - PCRE2_NEVER_BACKSLASH_C | - PCRE2_USE_OFFSET_LIMIT, - &errcode, &erroffset, - nullptr); + auto code = vte::take_freeable(pcre2_compile_8((PCRE2_SPTR8)pattern.data(), + pattern.size(), + (uint32_t)flags | + PCRE2_UTF | + (flags & PCRE2_UTF ? PCRE2_NO_UTF_CHECK : 0) | + PCRE2_NEVER_BACKSLASH_C | + PCRE2_USE_OFFSET_LIMIT, + &errcode, &erroffset, + context.get())); - if (code == nullptr) { + if (!code) { set_gerror_from_pcre_error(errcode, error); + if (error_offset) + *error_offset = erroffset; + g_prefix_error(error, "Failed to compile pattern to regex at offset %" G_GSIZE_FORMAT ":", erroffset); return nullptr; } - return new Regex{code, purpose}; + return new Regex{std::move(code), purpose}; } /* diff --git a/src/regex.hh b/src/regex.hh index 8db3e15..eed8bd4 100644 --- a/src/regex.hh +++ b/src/regex.hh @@ -1,18 +1,18 @@ /* * Copyright © 2015, 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -23,7 +23,9 @@ #include -#include "vtepcre2.h" +#include "pcre2-glue.hh" + +#include "cxx-utils.hh" namespace vte { @@ -41,17 +43,21 @@ public: static Regex* compile(Purpose purpose, std::string_view const& pattern, uint32_t flags, + uint32_t extra_flags, + size_t* error_offset, GError** error); private: mutable volatile int m_refcount{1}; - std::unique_ptr m_code; + + vte::Freeable m_code{}; + Purpose m_purpose; public: - Regex(pcre2_code_8* code, + Regex(vte::Freeable code, Purpose purpose) noexcept : - m_code{code, &pcre2_code_free_8}, + m_code{std::move(code)}, m_purpose{purpose} { } diff --git a/src/ring.cc b/src/ring.cc index 2d76d13..c08a3a6 100644 --- a/src/ring.cc +++ b/src/ring.cc @@ -1,19 +1,18 @@ /* * Copyright (C) 2002,2009,2010 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . * * Red Hat Author(s): Nalin Dahyabhai, Behdad Esfahbod */ @@ -41,7 +40,7 @@ using namespace vte::base; * VteRing: A buffer ring */ -#ifdef VTE_DEBUG +#if VTE_DEBUG void Ring::validate() const { @@ -50,11 +49,11 @@ Ring::validate() const m_start, m_end - m_start, m_end, m_max, m_end - m_writable); - g_assert_cmpuint(m_start, <=, m_writable); - g_assert_cmpuint(m_writable, <=, m_end); + vte_assert_cmpuint(m_start, <=, m_writable); + vte_assert_cmpuint(m_writable, <=, m_end); - g_assert_cmpuint(m_end - m_start, <=, m_max); - g_assert_cmpuint(m_end - m_writable, <=, m_mask); + vte_assert_cmpuint(m_end - m_start, <=, m_max); + vte_assert_cmpuint(m_end - m_writable, <=, m_mask); } #else #define validate(...) do { } while(0) @@ -240,7 +239,7 @@ Ring::get_hyperlink_idx_no_update_current(char const* hyperlink) } /* All allocated slots are in use. Gotta allocate a new one */ - g_assert_cmpuint(m_hyperlink_highest_used_idx + 1, ==, m_hyperlinks->len); + vte_assert_cmpuint(m_hyperlink_highest_used_idx + 1, ==, m_hyperlinks->len); /* VTE_HYPERLINK_COUNT_MAX should be big enough for this not to happen under normal circumstances. Anyway, it's cheap to protect against extreme ones. */ @@ -258,7 +257,7 @@ Ring::get_hyperlink_idx_no_update_current(char const* hyperlink) str = g_string_new_len (hyperlink, len); g_ptr_array_add(m_hyperlinks, str); - g_assert_cmpuint(m_hyperlink_highest_used_idx + 1, ==, m_hyperlinks->len); + vte_assert_cmpuint(m_hyperlink_highest_used_idx + 1, ==, m_hyperlinks->len); return idx; } @@ -302,9 +301,10 @@ Ring::freeze_row(row_t position, memset(&record, 0, sizeof(record)); record.text_start_offset = _vte_stream_head(m_text_stream); record.attr_start_offset = _vte_stream_head(m_attr_stream); + record.width = row->len; record.is_ascii = 1; - g_string_set_size (buffer, 0); + g_string_truncate (buffer, 0); for (i = 0, cell = row->cells; i < row->len; i++, cell++) { VteCellAttr attr; int num_chars; @@ -449,7 +449,7 @@ Ring::thaw_row(row_t position, if (!_vte_stream_read (m_attr_stream, record.attr_start_offset, (char *) &attr_change, sizeof (attr_change))) return; record.attr_start_offset += sizeof (attr_change); - g_assert_cmpuint (attr_change.attr.hyperlink_length, <=, VTE_HYPERLINK_TOTAL_LENGTH_MAX); + vte_assert_cmpuint (attr_change.attr.hyperlink_length, <=, VTE_HYPERLINK_TOTAL_LENGTH_MAX); if (attr_change.attr.hyperlink_length && !_vte_stream_read (m_attr_stream, record.attr_start_offset, hyperlink_readbuf, attr_change.attr.hyperlink_length)) return; hyperlink_readbuf[attr_change.attr.hyperlink_length] = '\0'; @@ -529,7 +529,7 @@ Ring::thaw_row(row_t position, /* Check the previous attr record. If its text ends where truncating, this attr record also needs to be removed. */ guint16 hyperlink_length; if (_vte_stream_read (m_attr_stream, attr_stream_truncate_at - 2, (char *) &hyperlink_length, 2)) { - g_assert_cmpuint (hyperlink_length, <=, VTE_HYPERLINK_TOTAL_LENGTH_MAX); + vte_assert_cmpuint (hyperlink_length, <=, VTE_HYPERLINK_TOTAL_LENGTH_MAX); if (_vte_stream_read (m_attr_stream, attr_stream_truncate_at - 2 - hyperlink_length - sizeof (attr_change), (char *) &attr_change, sizeof (attr_change))) { if (records[0].text_start_offset == attr_change.text_end_offset) { _vte_debug_print (VTE_DEBUG_RING, "... at attribute change\n"); @@ -547,7 +547,7 @@ Ring::thaw_row(row_t position, m_last_attr.hyperlink_idx = get_hyperlink_idx(hyperlink_readbuf); } if (_vte_stream_read (m_attr_stream, attr_stream_truncate_at - 2, (char *) &hyperlink_length, 2)) { - g_assert_cmpuint (hyperlink_length, <=, VTE_HYPERLINK_TOTAL_LENGTH_MAX); + vte_assert_cmpuint (hyperlink_length, <=, VTE_HYPERLINK_TOTAL_LENGTH_MAX); if (_vte_stream_read (m_attr_stream, attr_stream_truncate_at - 2 - hyperlink_length - sizeof (attr_change), (char *) &attr_change, sizeof (attr_change))) { m_last_attr_text_start_offset = attr_change.text_end_offset; } else { @@ -630,6 +630,51 @@ Ring::is_soft_wrapped(row_t position) return record.soft_wrapped; } +/* Returns whether the given visual row contains the beginning of a prompt, i.e. + * contains a prompt character which is immediately preceded by either a hard newline + * or a non-prompt character (possibly at the end of previous, soft wrapped row). + * + * This way we catch soft wrapped multiline prompts at their first line only, + * and catch prompts that do not begin at the beginning of a row. + * + * FIXME extend support for deliberately multiline (hard wrapped) prompts: + * https://gitlab.gnome.org/GNOME/vte/-/issues/2681#note_1904004 + * + * FIXME this is very slow, it unnecessarily reads text_stream + * in which we're not interested at all. Implement a faster algorithm. */ +bool +Ring::contains_prompt_beginning(row_t position) +{ + const VteRowData *row = index(position); + if (row == NULL || row->len == 0) { + return false; + } + + /* First check the places where the previous character is also readily available. */ + int col = 0; + while (col < row->len && row->cells[col].attr.shellintegration() == ShellIntegrationMode::ePROMPT) { + col++; + } + while (col < row->len && row->cells[col].attr.shellintegration() != ShellIntegrationMode::ePROMPT) { + col++; + } + if (col < row->len) { + return true; + } + + /* Finally check the first character where we might need to look at the previous row. */ + if (row->cells[0].attr.shellintegration() == ShellIntegrationMode::ePROMPT) { + row = index(position - 1); + if (row == NULL || + !row->attr.soft_wrapped || + (row->len >= 1 /* this is guaranteed beucase soft_wrapped */ && + row->cells[row->len - 1].attr.shellintegration() != ShellIntegrationMode::ePROMPT)) { + return true; + } + } + return false; +} + /* * Returns the hyperlink idx at the given position. * @@ -689,13 +734,6 @@ Ring::get_hyperlink_at_position(row_t position, return idx; } -VteRowData* -Ring::index_writable(row_t position) -{ - ensure_writable(position); - return get_writable_index(position); -} - void Ring::freeze_one_row() { @@ -715,7 +753,7 @@ Ring::thaw_one_row() { VteRowData* row; - g_assert_cmpuint(m_start, <, m_writable); + vte_assert_cmpuint(m_start, <, m_writable); ensure_writable_room(); @@ -735,12 +773,15 @@ Ring::discard_one_row() if (G_UNLIKELY(m_start == m_writable)) { reset_streams(m_writable); } else if (m_start < m_writable) { - RowRecord record; - _vte_stream_advance_tail(m_row_stream, m_start * sizeof (record)); - if (G_LIKELY(read_row_record(&record, m_start))) { - _vte_stream_advance_tail(m_text_stream, record.text_start_offset); - _vte_stream_advance_tail(m_attr_stream, record.attr_start_offset); - } + /* Advance the tail sometimes. Not always, in order to slightly improve performance. */ + if (m_start % 256 == 0) { + RowRecord record; + _vte_stream_advance_tail(m_row_stream, m_start * sizeof (record)); + if (G_LIKELY(read_row_record(&record, m_start))) { + _vte_stream_advance_tail(m_text_stream, record.text_start_offset); + _vte_stream_advance_tail(m_attr_stream, record.attr_start_offset); + } + } } else { m_writable = m_start; } @@ -800,19 +841,6 @@ Ring::ensure_writable_room() g_free (old_array); } -void -Ring::ensure_writable(row_t position) -{ - if (G_LIKELY(position >= m_writable)) - return; - - _vte_debug_print(VTE_DEBUG_RING, "Ensure writable %lu.\n", position); - - //FIXMEchpe surely this can be optimised - while (position < m_writable) - thaw_one_row(); -} - /** * Ring::resize: * @max_rows: new maximum numbers of rows in the ring @@ -884,8 +912,8 @@ Ring::insert(row_t position, guint8 bidi_flags) ensure_writable(position); ensure_writable_room(); - g_assert_cmpuint (position, >=, m_writable); - g_assert_cmpuint (position, <=, m_end); + vte_assert_cmpuint (position, >=, m_writable); + vte_assert_cmpuint (position, <=, m_end); //FIXMEchpe WTF use better data structures! tmp = *get_writable_index(m_end); @@ -1012,7 +1040,7 @@ Ring::frozen_row_column_to_text_offset(row_t position, /* go on */ } - g_assert_cmpuint(position, <, m_writable); + vte_assert_cmpuint(position, <, m_writable); if (!read_row_record(&records[0], position)) return false; if ((position + 1) * sizeof (records[0]) < _vte_stream_head(m_row_stream)) { @@ -1087,7 +1115,7 @@ Ring::frozen_row_text_offset_to_column(row_t position, return true; } - g_assert_cmpuint(position, <, m_writable); + vte_assert_cmpuint(position, <, m_writable); if (!read_row_record(&records[0], position)) return false; if ((position + 1) * sizeof (records[0]) < _vte_stream_head(m_row_stream)) { @@ -1107,8 +1135,8 @@ Ring::frozen_row_text_offset_to_column(row_t position, * if the ring ends in a soft wrapped line; see bug 181), the position we're about to * locate can be anywhere in the string, including just after its last character, * but not beyond that. */ - g_assert_cmpuint(offset->text_offset, >=, records[0].text_start_offset); - g_assert_cmpuint(offset->text_offset, <=, records[0].text_start_offset + buffer->len); + vte_assert_cmpuint(offset->text_offset, >=, records[0].text_start_offset); + vte_assert_cmpuint(offset->text_offset, <=, records[0].text_start_offset + buffer->len); row = index(position); @@ -1213,6 +1241,7 @@ Ring::rewrap(column_t columns, old_row_index = m_start + 1; while (paragraph_start_text_offset < _vte_stream_head(m_text_stream)) { /* Find the boundaries of the next paragraph */ + gsize paragraph_width = 0; gboolean prev_record_was_soft_wrapped = FALSE; gboolean paragraph_is_ascii = TRUE; guint8 paragraph_bidi_flags = old_record.bidi_flags; @@ -1225,6 +1254,7 @@ Ring::rewrap(column_t columns, old_row_index - 1, paragraph_start_text_offset); while (old_row_index <= m_end) { + paragraph_width += old_record.width; prev_record_was_soft_wrapped = old_record.soft_wrapped; paragraph_is_ascii = paragraph_is_ascii && old_record.is_ascii; if (G_LIKELY (old_row_index < m_end)) { @@ -1248,7 +1278,6 @@ Ring::rewrap(column_t columns, paragraph_end_text_offset, prev_record_was_soft_wrapped ? " soft_wrapped" : "", paragraph_len, paragraph_is_ascii); - /* Wrap the paragraph */ if (attr_change.text_end_offset <= text_offset) { /* Attr change at paragraph boundary, advance to next attr. */ @@ -1279,7 +1308,22 @@ Ring::rewrap(column_t columns, } runlength = MIN(paragraph_len, attr_change.text_end_offset - text_offset); - if (G_UNLIKELY (attr_change.attr.columns() == 0)) { + if (paragraph_width <= (gsize) columns) { + /* Quick shortcut code path if the entire paragraph fits in one row. */ + text_offset += runlength; + paragraph_len -= runlength; + /* The setting of "col" here is hacky. This very code here is potentially executed + multiple times within a single paragraph, if it has attribute changes. The code above + that reads the next attribute record has to iterate through those changes. Yet, we + don't want to waste time tracking those attribute changes and finding their + corresponding text offsets, we don't even want to read the text, as we won't need + that. We rely on the fact that "paragraph_width" and "columns" are constants + thoughout the wrapping of a particular paragraph, hence if this branch is hit once + then it is hit every time; also "col" is unused then in this loop and only needs to + have the correct value after we leave the loop. So each time simply set "col" + straight away to its final value. */ + col = paragraph_width; + } else if (G_UNLIKELY (attr_change.attr.columns() == 0)) { /* Combining characters all fit in the current row */ text_offset += runlength; paragraph_len -= runlength; @@ -1287,6 +1331,7 @@ Ring::rewrap(column_t columns, while (runlength) { if (col >= columns - attr_change.attr.columns() + 1) { /* Wrap now, write the soft wrapped row's record */ + new_record.width = col; new_record.soft_wrapped = 1; _vte_stream_append(new_row_stream, (char const* ) &new_record, sizeof (new_record)); _vte_debug_print(VTE_DEBUG_RING, @@ -1301,6 +1346,7 @@ Ring::rewrap(column_t columns, " Marker #%d will be here in row %lu\n", i, new_row_index); } } + new_row_index++; new_record.text_start_offset = text_offset; new_record.attr_start_offset = attr_offset; @@ -1334,6 +1380,7 @@ Ring::rewrap(column_t columns, /* Write the record of the paragraph's last row. */ /* Hard wrapped, except maybe at the end of the very last paragraph */ + new_record.width = col; new_record.soft_wrapped = prev_record_was_soft_wrapped; _vte_stream_append(new_row_stream, (char const* ) &new_record, sizeof (new_record)); _vte_debug_print(VTE_DEBUG_RING, @@ -1348,6 +1395,7 @@ Ring::rewrap(column_t columns, " Marker #%d will be here in row %lu\n", i, new_row_index); } } + new_row_index++; paragraph_start_text_offset = paragraph_end_text_offset; } @@ -1368,8 +1416,11 @@ Ring::rewrap(column_t columns, if (new_markers[i].row == -1) new_markers[i].row = markers[i]->row - old_ring_end + m_end; /* Convert byte offset into visual column */ - if (!frozen_row_text_offset_to_column(new_markers[i].row, &marker_text_offsets[i], &new_markers[i].col)) - goto err; + if (!frozen_row_text_offset_to_column(new_markers[i].row, &marker_text_offsets[i], &new_markers[i].col)) { + /* This really shouldn't happen. It's too late to "goto err", the old stream is closed, the ring is updated. + * It would be a bit cumbersome to refactor the code to still revert here. Choose a simple solution. */ + new_markers[i].col = 0; + } _vte_debug_print(VTE_DEBUG_RING, "Marker #%d new coords: text_offset %" G_GSIZE_FORMAT " fragment_cells %d eol_cells %d -> row %ld col %ld\n", i, marker_text_offsets[i].text_offset, marker_text_offsets[i].fragment_cells, @@ -1385,7 +1436,7 @@ Ring::rewrap(column_t columns, return; err: -#ifdef VTE_DEBUG +#if VTE_DEBUG _vte_debug_print(VTE_DEBUG_RING, "Error while rewrapping\n"); g_assert_not_reached(); @@ -1410,7 +1461,7 @@ Ring::write_row(GOutputStream* stream, /* Simple version of the loop in freeze_row(). * TODO Should unify one day */ - g_string_set_size (buffer, 0); + g_string_truncate (buffer, 0); for (i = 0, cell = row->cells; i < row->len; i++, cell++) { if (G_LIKELY (!cell->attr.fragment())) _vte_unistr_append_to_string (cell->c, buffer); diff --git a/src/ring.hh b/src/ring.hh index 87b7364..450900c 100644 --- a/src/ring.hh +++ b/src/ring.hh @@ -1,19 +1,18 @@ /* * Copyright (C) 2002,2009,2010 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . * * Red Hat Author(s): Behdad Esfahbod */ @@ -38,8 +37,10 @@ namespace vte { namespace base { -/** - * ring: A scrollback buffer ring +/* + * Ring: + * + * A scrollback buffer ring. */ class Ring { public: @@ -73,8 +74,8 @@ public: //FIXMEchpe rename this to at() //FIXMEchpe use references not pointers VteRowData const* index(row_t position); /* const? */ - VteRowData* index_writable(row_t position); bool is_soft_wrapped(row_t position); + bool contains_prompt_beginning(row_t position); void hyperlink_maybe_gc(row_t increment); hyperlink_idx_t get_hyperlink_idx(char const* hyperlink); @@ -98,9 +99,14 @@ public: GCancellable* cancellable, GError** error); + inline VteRowData* index_writable(row_t position) { + ensure_writable(position); + return get_writable_index(position); + } + private: - #ifdef VTE_DEBUG + #if VTE_DEBUG void validate() const; #endif @@ -119,12 +125,13 @@ private: typedef struct _RowRecord { size_t text_start_offset; /* offset where text of this row begins */ size_t attr_start_offset; /* offset of the first character's attributes */ - int soft_wrapped: 1; /* end of line is not '\n' */ - int is_ascii: 1; /* for rewrapping speedup: guarantees that line contains 32..126 bytes only. Can be 0 even when ascii only. */ - guint8 bidi_flags: 4; + uint32_t width: 16; /* for rewrapping speedup: the number of character cells (columns) */ + uint32_t is_ascii: 1; /* for rewrapping speedup: guarantees that line contains 32..126 bytes only. Can be 0 even when ascii only. */ + uint32_t soft_wrapped: 1; /* end of line is not '\n' */ + uint32_t bidi_flags: 4; } RowRecord; - static_assert(std::is_pod::value, "Ring::RowRecord is not POD"); + static_assert(std::is_standard_layout_v && std::is_trivial_v, "Ring::RowRecord is not POD"); /* Represents a cell position, see ../doc/rewrap.txt */ typedef struct _CellTextOffset { @@ -133,7 +140,7 @@ private: int eol_cells; /* -1 if over a character, >=0 if at EOL or beyond */ } CellTextOffset; - static_assert(std::is_pod::value, "Ring::CellTextOffset is not POD"); + static_assert(std::is_standard_layout_v && std::is_trivial_v, "Ring::CellTextOffset is not POD"); inline bool read_row_record(RowRecord* record /* out */, row_t position) @@ -165,9 +172,16 @@ private: GCancellable* cancellable, GError** error); - void ensure_writable(row_t position); void ensure_writable_room(); + inline void ensure_writable(row_t position) { + if G_UNLIKELY (position < m_writable) { + //FIXMEchpe surely this can be optimised + while (position < m_writable) + thaw_one_row(); + } + } + void freeze_one_row(); void maybe_freeze_one_row(); void thaw_one_row(); @@ -231,35 +245,3 @@ private: }; /* namespace base */ }; /* namespace vte */ - -G_BEGIN_DECLS - -/* temp compat API */ - -typedef vte::base::Ring VteRing; - -static inline bool _vte_ring_contains(VteRing *ring, gulong position) { return ring->contains(position); } -static inline glong _vte_ring_delta(VteRing *ring) { return ring->delta(); } -static inline glong _vte_ring_length(VteRing *ring) { return ring->length(); } -static inline glong _vte_ring_next(VteRing *ring) { return ring->next(); } -static inline const VteRowData *_vte_ring_index (VteRing *ring, gulong position) { return ring->index(position); } -static inline VteRowData *_vte_ring_index_writable (VteRing *ring, gulong position) { return ring->index_writable(position); } -static inline void _vte_ring_hyperlink_maybe_gc (VteRing *ring, gulong increment) { ring->hyperlink_maybe_gc(increment); } -static inline auto _vte_ring_get_hyperlink_idx (VteRing *ring, const char *hyperlink) { return ring->get_hyperlink_idx(hyperlink); } -static inline auto _vte_ring_get_hyperlink_at_position (VteRing *ring, gulong position, int col, bool update_hover_idx, const char **hyperlink) { return ring->get_hyperlink_at_position(position, col, update_hover_idx, hyperlink); } -static inline long _vte_ring_reset (VteRing *ring) { return ring->reset(); } -static inline void _vte_ring_resize (VteRing *ring, gulong max_rows) { ring->resize(max_rows); } -static inline void _vte_ring_shrink (VteRing *ring, gulong max_len) { ring->shrink(max_len); } -static inline VteRowData *_vte_ring_insert (VteRing *ring, gulong position, guint8 bidi_flags) { return ring->insert(position, bidi_flags); } -static inline VteRowData *_vte_ring_append (VteRing *ring, guint8 bidi_flags) { return ring->append(bidi_flags); } -static inline void _vte_ring_remove (VteRing *ring, gulong position) { ring->remove(position); } -static inline void _vte_ring_drop_scrollback (VteRing *ring, gulong position) { ring->drop_scrollback(position); } -static inline void _vte_ring_set_visible_rows (VteRing *ring, gulong rows) { ring->set_visible_rows(rows); } -static inline void _vte_ring_rewrap (VteRing *ring, glong columns, VteVisualPosition **markers) { ring->rewrap(columns, markers); } -static inline gboolean _vte_ring_write_contents (VteRing *ring, - GOutputStream *stream, - VteWriteFlags flags, - GCancellable *cancellable, - GError **error) { return ring->write_contents(stream, flags, cancellable, error); } - -G_END_DECLS diff --git a/src/ringview.cc b/src/ringview.cc index 602268a..0bdd850 100644 --- a/src/ringview.cc +++ b/src/ringview.cc @@ -1,19 +1,18 @@ /* * Copyright © 2018–2019 Egmont Koblinger * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include @@ -75,7 +74,7 @@ RingView::pause() void RingView::resume() { - g_assert_cmpint (m_len, >=, 1); + vte_assert_cmpint (m_len, >=, 1); /* +16: A bit of arbitrary heuristics to likely prevent a quickly following * realloc for the required context lines. */ @@ -163,8 +162,8 @@ RingView::set_rows(vte::grid::row_t start, vte::grid::row_t len) VteRowData const* RingView::get_row(vte::grid::row_t row) const { - g_assert_cmpint(row, >=, m_top); - g_assert_cmpint(row, <, m_top + m_rows_len); + vte_assert_cmpint(row, >=, m_top); + vte_assert_cmpint(row, <, m_top + m_rows_len); return m_rows[row - m_top]; } @@ -240,7 +239,7 @@ RingView::update() } } - row_data = _vte_ring_contains(m_ring, row) ? m_ring->index(row) : nullptr; + row_data = m_ring->contains(row) ? m_ring->index(row) : nullptr; if (G_LIKELY (row_data != nullptr)) { _vte_row_data_copy (row_data, m_rows[m_rows_len]); /* Make sure that the extracted data is not wider than the screen, @@ -294,16 +293,6 @@ RingView::update() m_invalid = false; } -BidiRow const* RingView::get_bidirow(vte::grid::row_t row) const -{ - g_assert_cmpint (row, >=, m_start); - g_assert_cmpint (row, <, m_start + m_len); - g_assert_false (m_invalid); - g_assert_false (m_paused); - - return m_bidirows[row - m_start]; -} - /* For internal use by BidiRunner. Get where the BiDi mapping for the given row * needs to be stored, of nullptr if it's a context row. */ BidiRow* RingView::get_bidirow_writable(vte::grid::row_t row) const diff --git a/src/ringview.hh b/src/ringview.hh index 09ff049..6a2309a 100644 --- a/src/ringview.hh +++ b/src/ringview.hh @@ -1,19 +1,18 @@ /* * Copyright © 2018–2019 Egmont Koblinger * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -81,7 +80,14 @@ public: VteRowData const* get_row(vte::grid::row_t row) const; - BidiRow const* get_bidirow(vte::grid::row_t row) const; + inline BidiRow const* get_bidirow(vte::grid::row_t row) const { + vte_assert_cmpint (row, >=, m_start); + vte_assert_cmpint (row, <, m_start + m_len); + vte_assert_false (m_invalid); + vte_assert_false (m_paused); + + return m_bidirows[row - m_start]; + } private: Ring *m_ring{nullptr}; diff --git a/src/scheduler.cc b/src/scheduler.cc new file mode 100644 index 0000000..e013844 --- /dev/null +++ b/src/scheduler.cc @@ -0,0 +1,158 @@ +/* + * Copyright © 2024 Christian Hergert + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include "config.h" + +#include "scheduler.h" + +/* The scheduler API drives updates using GdkFrameClock when possible + * and runs at 10hz when not. + * + * The GdkFrameClock may not advance in certain situations and that is + * largely display/compositor specific. On some systems, when minimizing a + * window to a taskbar we may not get updates. Additionally, when moving a + * window to another workspace, some display systems may not advance the + * GdkFrameClock. + */ + +#define NEXT_UPDATE_USEC (G_USEC_PER_SEC/10) + +typedef struct _Scheduled +{ + GList link; + GtkWidget *widget; + VteSchedulerCallback callback; + gpointer user_data; + guint handler; + gint64 ready_time; +} Scheduled; + +static GQueue scheduled = G_QUEUE_INIT; +static GSource *scheduled_source; + +static void +unarm_fallback_scheduler (void) +{ + if (scheduled_source != nullptr) { + g_source_destroy (scheduled_source); + g_source_unref (scheduled_source); + scheduled_source = nullptr; + } +} + +static gboolean +fallback_scheduler_dispatch (GSource *gsource, + GSourceFunc callback, + gpointer user_data) +{ + const GList *iter = scheduled.head; + gint64 now = g_source_get_time (gsource); + gint64 next = now + NEXT_UPDATE_USEC; + + if (now < g_source_get_ready_time (gsource)) { + return G_SOURCE_CONTINUE; + } + + while (iter != nullptr) { + Scheduled *state = (Scheduled *)iter->data; + + iter = iter->next; + + if (state->ready_time <= now) { + state->ready_time = next; + state->callback (state->widget, state->user_data); + } else if (state->ready_time < next) { + next = state->ready_time; + } + } + + g_source_set_ready_time (gsource, next); + + if (scheduled.length == 0) { + unarm_fallback_scheduler (); + } + + return G_SOURCE_CONTINUE; +} + +static GSourceFuncs scheduled_source_funcs = { + .dispatch = fallback_scheduler_dispatch, +}; + +static void +arm_fallback_scheduler (void) +{ + GSource *gsource; + + gsource = g_source_new (&scheduled_source_funcs, sizeof (GSource)); + g_source_set_static_name (gsource, "[vte-scheduler]"); + g_source_set_ready_time (gsource, g_get_monotonic_time () + NEXT_UPDATE_USEC); + g_source_set_priority (gsource, G_PRIORITY_LOW); + g_source_attach (gsource, nullptr); + + scheduled_source = gsource; +} + +static gboolean +scheduler_tick_callback (GtkWidget *widget, + GdkFrameClock *frame_clock, + gpointer user_data) +{ + Scheduled *state = (Scheduled *)user_data; + + state->ready_time = g_get_monotonic_time () + NEXT_UPDATE_USEC; + state->callback (widget, state->user_data); + + return G_SOURCE_CONTINUE; +} + +gpointer +_vte_scheduler_add_callback (GtkWidget *widget, + VteSchedulerCallback callback, + gpointer user_data) +{ + Scheduled *state = g_new0 (Scheduled, 1); + + state->link.data = state; + state->ready_time = g_get_monotonic_time () + NEXT_UPDATE_USEC; + state->callback = callback; + state->user_data = user_data; + state->widget = widget; + state->handler = gtk_widget_add_tick_callback (widget, scheduler_tick_callback, state, nullptr); + + g_queue_push_tail_link (&scheduled, &state->link); + + if (scheduled_source == nullptr) + arm_fallback_scheduler (); + + return (gpointer)state; +} + +void +_vte_scheduler_remove_callback (GtkWidget *widget, + gpointer handler) +{ + Scheduled *state = (Scheduled *)handler; + + g_queue_unlink (&scheduled, &state->link); + gtk_widget_remove_tick_callback (widget, state->handler); + g_free (state); + + if (scheduled.length == 0) { + unarm_fallback_scheduler (); + } +} diff --git a/src/scheduler.h b/src/scheduler.h new file mode 100644 index 0000000..15fee63 --- /dev/null +++ b/src/scheduler.h @@ -0,0 +1,31 @@ +/* + * Copyright © 2024 Christian Hergert + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include + +G_BEGIN_DECLS + +typedef void (*VteSchedulerCallback) (GtkWidget *widget, + gpointer user_data); + +gpointer _vte_scheduler_add_callback (GtkWidget *widget, + VteSchedulerCallback callback, + gpointer user_data); +void _vte_scheduler_remove_callback (GtkWidget *widget, + gpointer handler); + +G_END_DECLS diff --git a/src/slowcat.c b/src/slowcat.c index 15983d2..8c96bad 100644 --- a/src/slowcat.c +++ b/src/slowcat.c @@ -1,19 +1,18 @@ /* * Copyright (C) 2002 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include diff --git a/src/spawn.cc b/src/spawn.cc new file mode 100644 index 0000000..e305244 --- /dev/null +++ b/src/spawn.cc @@ -0,0 +1,790 @@ +/* + * Copyright © 2001,2002 Red Hat, Inc. + * Copyright © 2009, 2010, 2019, 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include "config.h" + +#include "spawn.hh" + +#include "libc-glue.hh" + +#include +#include "vteptyinternal.hh" +#include "vtespawn.hh" +#include "debug.h" +#include "reaper.hh" + +#include +#include +#include +#include +#include + +#include +#include + +#include "glib-glue.hh" + +#if WITH_SYSTEMD +#include "systemd.hh" +#endif + +#include "vtedefines.hh" + +#include "missing.hh" + +namespace vte::base { + +static int +set_cloexec_cb(void* data, + int fd) +{ + if (fd >= *reinterpret_cast(data)) { + auto r = vte::libc::fd_set_cloexec(fd); + /* Ignore EBADF because the libc or fallback implementation + * of fdwalk may call this function on invalid file descriptors. + */ + if (r < 0 && errno == EBADF) + r = 0; + return r; + } + return 0; +} + +static int +cloexec_from(int fd) +{ +#ifdef CLOSE_RANGE_CLOEXEC + /* First, try close_range(CLOEXEC) which is faster than the methods + * below, and works even if /proc is not available. + */ + auto const res = close_range(fd, -1, CLOSE_RANGE_CLOEXEC); + if (res == 0) + return 0; + if (res == -1 && + errno != ENOSYS /* old kernel, or not supported on this platform */ && + errno != EINVAL /* flags not supported */) + return res; +#endif /* CLOSE_RANGE_CLOEXEC */ + + /* Fall back to fdwalk */ + return fdwalk(set_cloexec_cb, &fd); +} + +static bool +make_pipe(int flags, + vte::libc::FD& read_fd, + vte::libc::FD& write_fd, + vte::glib::Error& error) +{ + int fds[2] = { -1, -1 }; + if (!g_unix_open_pipe(fds, flags, error)) + return false; + + read_fd = fds[0]; + write_fd = fds[1]; + return true; +} + +/* Code for read_ints copied from glib/glib/gspawn.c, there under LGPL2.1+, + * and used here under LGPL3+. + * + * Copyright 2000 Red Hat, Inc. + */ +static bool +read_ints(int fd, + int* buf, + int n_ints_in_buf, + int *n_ints_read, + int timeout, + GPollFD *cancellable_pollfd, + vte::glib::Error& error) +{ + GPollFD pollfds[2]; + auto n_pollfds = unsigned{0}; + + if (timeout >= 0 || cancellable_pollfd != nullptr) { + if (vte::libc::fd_set_nonblock(fd) < 0) { + auto errsv = vte::libc::ErrnoSaver{}; + error.set(G_IO_ERROR, g_io_error_from_errno(errsv), + _("Failed to set pipe nonblocking: %s"), + g_strerror(errsv)); + return false; + } + + pollfds[0].fd = fd; + pollfds[0].events = G_IO_IN | G_IO_HUP | G_IO_ERR; + n_pollfds = 1; + + if (cancellable_pollfd != nullptr) { + pollfds[1] = *cancellable_pollfd; + n_pollfds = 2; + } + } else + n_pollfds = 0; + + auto start_time = int64_t{0}; + if (timeout >= 0) + start_time = g_get_monotonic_time(); + + auto bytes = size_t{0}; + while (true) { + if (bytes >= sizeof(int)*2) + break; /* give up, who knows what happened, should not be + * possible. + */ + + again: + if (n_pollfds != 0) { + pollfds[0].revents = pollfds[1].revents = 0; + + auto const r = g_poll(pollfds, n_pollfds, timeout); + + /* Update timeout */ + if (timeout >= 0) { + timeout -= (g_get_monotonic_time () - start_time) / 1000; + if (timeout < 0) + timeout = 0; + } + + if (r < 0 && errno == EINTR) + goto again; + if (r < 0) { + auto errsv = vte::libc::ErrnoSaver{}; + error.set(G_IO_ERROR, g_io_error_from_errno(errsv), + _("poll error: %s"), + g_strerror(errsv)); + return false; + } + if (r == 0) { + auto errsv = vte::libc::ErrnoSaver{}; + error.set_literal(G_IO_ERROR, G_IO_ERROR_TIMED_OUT, + _("Operation timed out")); + return false; + } + + /* If the passed-in poll FD becomes readable, that's the signal + * to cancel the operation. We do NOT actually read from its FD! + */ + if (n_pollfds == 2 && pollfds[1].revents) { + auto errsv = vte::libc::ErrnoSaver{}; + error.set_literal(G_IO_ERROR, G_IO_ERROR_CANCELLED, + _("Operation was cancelled")); + return false; + } + + /* Now we know we can try to read from the child */ + } + + auto const chunk = read(fd, + ((char*)buf) + bytes, + sizeof(int) * n_ints_in_buf - bytes); + if (chunk < 0 && errno == EINTR) + goto again; + + if (chunk < 0) { + auto errsv = vte::libc::ErrnoSaver{}; + + /* Some weird shit happened, bail out */ + error.set(G_IO_ERROR, g_io_error_from_errno(errsv), + _("Failed to read from child pipe (%s)"), + g_strerror(errsv)); + + return false; + } else if (chunk == 0) + break; /* EOF */ + else /* chunk > 0 */ + bytes += chunk; + } + + *n_ints_read = int(bytes / sizeof(int)); + + return true; +} + +static char** +merge_environ(char** envp /* consumed */, + char const* cwd, + bool inherit) +{ + auto table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); + + if (inherit) { + auto parent_environ = vte::glib::take_strv(g_get_environ()); + if (parent_environ) { + auto penvv = parent_environ.get(); + for (auto i = unsigned{0}; penvv[i] != NULL; ++i) { + auto name = g_strdup(penvv[i]); + auto value = strchr(name, '='); + if (value) { + *value = '\0'; + value = g_strdup(value + 1); + } + g_hash_table_replace(table, name, value); /* takes ownership of name and value */ + } + } + } + + /* Make sure the one in envp overrides the default. */ + g_hash_table_replace(table, g_strdup("TERM"), g_strdup(VTE_TERMINFO_NAME)); + + if (envp) { + for (auto i = unsigned{0}; envp[i] != nullptr; ++i) { + auto name = g_strdup(envp[i]); + auto value = strchr(name, '='); + if (value) { + *value = '\0'; + value = g_strdup(value + 1); + } + g_hash_table_replace(table, name, value); /* takes ownership of name and value */ + } + + g_strfreev(envp); + } + + /* Always set this ourself, not allowing replacing from envp */ + g_hash_table_replace(table, g_strdup("VTE_VERSION"), g_strdup_printf("%u", VTE_VERSION_NUMERIC)); + g_hash_table_replace(table, g_strdup("COLORTERM"), g_strdup("truecolor")); + + /* We need to put the working directory also in PWD, so that + * e.g. bash starts in the right directory if @directory is a symlink. + * See bug #502146 and #758452. + * + * If chdir to cwd fails, and we fall back to the fallback cwd, PWD will + * be set to a directory != the actual working directory, but that's not + * a problem since PWD is only used when it's equal to the actual working + * directory. + */ + if (cwd) + g_hash_table_replace(table, g_strdup("PWD"), g_strdup(cwd)); + + auto array = g_ptr_array_sized_new(g_hash_table_size(table) + 1); + + auto iter = GHashTableIter{}; + g_hash_table_iter_init(&iter, table); + char *name, *value; + while (g_hash_table_iter_next(&iter, (void**)&name, (void**)&value)) { + if (value) + g_ptr_array_add(array, g_strconcat(name, "=", value, nullptr)); + } + g_hash_table_destroy(table); + g_ptr_array_add(array, nullptr); + + return reinterpret_cast(g_ptr_array_free(array, false)); +} + +void +SpawnContext::prepare_environ() +{ + m_envv = vte::glib::take_strv(merge_environ(m_envv.release(), m_cwd.get(), inherit_environ())); +} + +char const* +SpawnContext::search_path() const noexcept +{ + auto const path = m_search_path ? g_environ_getenv(environ(), "PATH") : nullptr; + return path ? : "/bin:/usr/bin"; +} + +size_t +SpawnContext::workbuf_size() const noexcept +{ + auto const path = search_path(); + return std::max(path ? strlen(path) + strlen(arg0()) + 2 /* leading '/' plus NUL terminator */ : 0, + (g_strv_length(argv()) + 2) * sizeof(char*)); +} + +/* This function is called between fork and execve/_exit and so must be + * async-signal-safe; see man:signal-safety(7). + */ +SpawnContext::ExecError +SpawnContext::exec(vte::libc::FD& child_report_error_pipe_write, + void* workbuf, + size_t workbufsize) noexcept +{ + /* NOTE! This function must not rely on smart pointers to + * release their object, since the destructors are NOT run + * when the exec succeeds! + */ + + _VTE_DEBUG_IF(VTE_DEBUG_MISC) { + g_printerr ("Spawning command:\n"); + auto argv = m_argv.get(); + for (auto i = 0; argv[i] != NULL; i++) { + g_printerr(" argv[%d] = %s\n", i, argv[i]); + } + if (m_envv) { + auto envv = m_envv.get(); + for (auto i = 0; envv[i] != NULL; i++) { + g_printerr(" env[%d] = %s\n", i, envv[i]); + } + } + g_printerr(" directory: %s\n", + m_cwd ? m_cwd.get() : "(none)"); + } + + /* Unblock all signals */ + sigset_t set; + sigemptyset(&set); + if (pthread_sigmask(SIG_SETMASK, &set, nullptr) == -1) { + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s\n", + "pthread_sigmask", g_strerror(errsv)); + return ExecError::SIGMASK; + } + + /* Reset the handlers for all signals to their defaults. The parent + * (or one of the libraries it links to) may have changed one to be ignored. + * Esp. SIGPIPE since it ensures this process terminates when we write + * to child_err_report_pipe after the parent has exited. + */ + for (auto n = int{1}; n < NSIG; ++n) { + if (n == SIGSTOP || n == SIGKILL) + continue; + + signal(n, SIG_DFL); + } + + /* Close all file descriptors on exec. Note that this includes + * child_error_report_pipe_write, which keeps the parent from blocking + * forever on the other end of that pipe. + */ + if (cloexec_from(3) < 0) + return ExecError::FDWALK; + + /* Working directory */ + if (m_cwd && chdir(m_cwd.get()) < 0) { + /* If the fallback fails too, make sure to return the errno + * from the original cwd, not the fallback cwd. + */ + auto errsv = vte::libc::ErrnoSaver{}; + if (m_fallback_cwd && chdir(m_fallback_cwd.get()) < 0) + return ExecError::CHDIR; + + errsv.reset(); + } + + /* Session */ + if (!(pty()->flags() & VTE_PTY_NO_SESSION)) { + /* This starts a new session; we become its process-group leader, + * and lose our controlling TTY. + */ + _vte_debug_print(VTE_DEBUG_PTY, "Starting new session\n"); + if (setsid() == -1) { + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s\n", + "setsid", g_strerror(errsv)); + return ExecError::SETSID; + } + } + + auto peer_fd = pty()->get_peer(true /* cloexec */); + if (peer_fd == -1) + return ExecError::GETPTPEER; + +#ifdef TIOCSCTTY + /* On linux, opening the PTY peer above already made it our controlling TTY (since + * previously there was none, after the setsid() call). However, it appears that e.g. + * on *BSD, that doesn't happen, so we need this explicit ioctl here. + */ + if (!(pty()->flags() & VTE_PTY_NO_CTTY)) { + if (ioctl(peer_fd, TIOCSCTTY, peer_fd) != 0) { + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print(VTE_DEBUG_PTY, "%s failed: %s\n", + "ioctl(TIOCSCTTY)", g_strerror(errsv)); + return ExecError::SCTTY; + } + } +#endif + + /* Replace the placeholders with the FD assignment for the PTY */ + m_fd_map[0].first = peer_fd; + m_fd_map[1].first = peer_fd; + m_fd_map[2].first = peer_fd; + + /* Assign FDs */ + auto const n_fd_map = m_fd_map.size(); + for (auto i = size_t{0}; i < n_fd_map; ++i) { + auto const [source_fd, target_fd] = m_fd_map[i]; + + /* -1 means the source_fd is only in the map so that it can + * be checked for conflicts with other target FDs. It may be + * re-assigned while relocating other FDs. + */ + if (target_fd == -1) + continue; + + /* We want to move source_fd to target_fd */ + + if (target_fd != source_fd) { + + /* Need to check if target_fd is an FDs in the FD list. + * If so, need to re-assign the source FD(s) first. + */ + for (auto j = size_t{0}; j < n_fd_map; ++j) { + auto const [from_fd, to_fd] = m_fd_map[j]; + + if (from_fd != target_fd) + continue; + + /* Duplicate from_fd to any free FD number, which will + * be != from_fd/target_fd. + */ + auto new_from_fd = vte::libc::fd_dup_cloexec(from_fd, 3); + if (new_from_fd == -1) + return ExecError::DUP; + + for (auto k = j; k < n_fd_map; ++k) { + if (m_fd_map[k].first == from_fd) + m_fd_map[k].first = new_from_fd; + } + + /* Now that we have updated all references to the old + * source FD in the map, we can close the FD. (Not + * strictly necessary since it'll be dup2'd over + * anyway.) + */ + if (from_fd == child_report_error_pipe_write.get()) { + /* Need to report the new pipe write FD back to the caller. */ + child_report_error_pipe_write = new_from_fd; + } else { + (void)close(from_fd); + } + + /* We have replaced *all* instances of target_fd as a + * source with new_from_fd, so we don't need to continue + * with the loop. + */ + break; + } + + /* Now we know that target_fd can be safely overwritten. */ + if (vte::libc::fd_dup2(source_fd, target_fd) == -1) + return ExecError::DUP2; + } else { + /* Already assigned correctly, but need to remove FD_CLOEXEC */ + if (vte::libc::fd_unset_cloexec(target_fd) == -1) + return ExecError::UNSET_CLOEXEC; + + } + + /* Mark source in the map as done */ + m_fd_map[i].first = -1; + } + + /* Finally call an extra child setup */ + if (m_child_setup) + m_child_setup(m_child_setup_data.get()); + + /* exec */ + _vte_execute(arg0(), + argv(), + environ(), + search_path(), + workbuf, + workbufsize); + + /* If we get here, exec failed */ + return ExecError::EXEC; +} + +SpawnOperation::~SpawnOperation() +{ + if (m_cancellable && m_cancellable_pollfd.fd != -1) + g_cancellable_release_fd(m_cancellable.get()); + + if (m_pid != -1) { + /* Since we're not passing the PID back to the caller, + * we need to kill and reap it ourself. + */ + if (m_kill_pid) { + auto const pgrp = getpgid(m_pid); + /* Make sure not to kill ourself, if the child died before + * it could call setsid()! + */ + if (pgrp != -1 && pgrp != getpgid(getpid())) + kill(-pgrp, SIGHUP); + + kill(m_pid, SIGHUP); + } + + vte_reaper_add_child(m_pid); + } +} + +bool +SpawnOperation::prepare(vte::glib::Error& error) +{ +#if !WITH_SYSTEMD + if (context().require_systemd_scope()) { + error.set_literal(G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + "systemd not available"); + return false; + } +#endif + + if (m_cancellable && + !g_cancellable_make_pollfd(m_cancellable.get(), &m_cancellable_pollfd)) { + auto errsv = vte::libc::ErrnoSaver{}; + error.set(G_IO_ERROR, + g_io_error_from_errno(errsv), + "Failed to make cancellable pollfd: %s", + g_strerror(errsv)); + return false; + } + + auto child_report_error_pipe_read = vte::libc::FD{}; + auto child_report_error_pipe_write = vte::libc::FD{}; + if (!make_pipe(FD_CLOEXEC, + child_report_error_pipe_read, + child_report_error_pipe_write, + error)) + return false; + + /* allocate workbuf for SpawnContext::Exec() */ + auto const workbufsize = context().workbuf_size(); + auto workbuf = vte::glib::take_free_ptr(g_try_malloc(workbufsize)); + if (!workbuf) { + auto errsv = vte::libc::ErrnoSaver{}; + error.set(G_IO_ERROR, + g_io_error_from_errno(errsv), + "Failed to allocate workbuf: %s", + g_strerror(errsv)); + return false; + } + + /* Need to add the write end of the pipe to the FD map, so + * that the FD re-arranging code knows it needs to preserve + * the FD and not dup2 over it. + * Target -1 means that no actual re-assignment will take place. + */ + context().add_map_fd(child_report_error_pipe_write.get(), -1); + + auto const pid = fork(); + if (pid < 0) { + auto errsv = vte::libc::ErrnoSaver{}; + error.set(G_IO_ERROR, + g_io_error_from_errno(errsv), + "Failed to fork: %s", + g_strerror(errsv)); + return false; + } + + if (pid == 0) { + /* Child */ + + child_report_error_pipe_read.reset(); + + auto const err = context().exec(child_report_error_pipe_write, + workbuf.get(), workbufsize); + + /* Manually free the workbuf */ + g_free(workbuf.release()); + + /* If we get here, exec failed. Write the error to the pipe and exit. */ + _vte_write_err(child_report_error_pipe_write.get(), int(err)); + _exit(127); + return true; + } + + /* Parent */ + m_pid = pid; + m_child_report_error_pipe_read = std::move(child_report_error_pipe_read); + + return true; +} + +bool +SpawnOperation::run(vte::glib::Error& error) noexcept +{ + int buf[2] = {G_SPAWN_ERROR_FAILED, ENOSYS}; + auto n_read = int{0}; + + if (!read_ints(m_child_report_error_pipe_read.get(), + buf, 2, + &n_read, + m_timeout, + &m_cancellable_pollfd, + error)) + return false; + + if (n_read >= 2) { + /* Spawn failed. buf[0] contains an error from + * SpawnContext::ExecError, and buf[1] contains errno. + */ + + /* The process will have called _exit(127) already, no need to kill it */ + m_kill_pid = false; + + auto const err = buf[1]; + + switch (SpawnContext::ExecError(buf[0])) { + case SpawnContext::ExecError::CHDIR: { + auto cwd = vte::glib::take_string(context().cwd() ? g_utf8_make_valid(context().cwd(), -1) : nullptr); + error.set(G_IO_ERROR, g_io_error_from_errno(err), + _("Failed to change to directory “%s”: %s"), + cwd.get(), + g_strerror(err)); + break; + } + + case SpawnContext::ExecError::DUP: + error.set(G_IO_ERROR, g_io_error_from_errno(err), + "Failed to duplicate file descriptor: %s", + g_strerror(err)); + break; + + case SpawnContext::ExecError::DUP2: + error.set(G_IO_ERROR, g_io_error_from_errno(err), + "Failed to duplicate file descriptor (dup2): %s", + g_strerror(err)); + break; + + case SpawnContext::ExecError::EXEC: + error.set(G_IO_ERROR, g_io_error_from_errno(err), + "Failed to execve: %s", + g_strerror(err)); + break; + + case SpawnContext::ExecError::FDWALK: + error.set(G_IO_ERROR, g_io_error_from_errno(err), + "Failed to fdwalk: %s", + g_strerror(err)); + break; + + case SpawnContext::ExecError::GETPTPEER: + error.set(G_IO_ERROR, g_io_error_from_errno(err), + "Failed to open PTY peer: %s", + g_strerror(err)); + break; + + case SpawnContext::ExecError::SCTTY: + error.set(G_IO_ERROR, g_io_error_from_errno(err), + "Failed to set controlling TTY: %s", + g_strerror(err)); + break; + + case SpawnContext::ExecError::SETSID: + error.set(G_IO_ERROR, g_io_error_from_errno(err), + "Failed to start session: %s", + g_strerror(err)); + break; + + case SpawnContext::ExecError::SIGMASK: + error.set(G_IO_ERROR, g_io_error_from_errno(err), + "Failed to set signal mask: %s", + g_strerror(err)); + break; + + case SpawnContext::ExecError::UNSET_CLOEXEC: + error.set(G_IO_ERROR, g_io_error_from_errno(err), + "Failed to make file descriptor not cloexec: %s", + g_strerror(err)); + break; + + default: + error.set(G_IO_ERROR, g_io_error_from_errno(err), + "Unknown error: %s", + g_strerror(err)); + break; + } + + auto arg0 = vte::glib::take_string(g_utf8_make_valid(context().argv()[0], -1)); + g_prefix_error(error, + _("Failed to execute child process “%s”: "), + arg0.get()); + + return false; + } + + /* Spawn succeeded */ + +#if WITH_SYSTEMD + if (context().systemd_scope() && + !vte::systemd::create_scope_for_pid_sync(m_pid, + m_timeout, // FIXME: recalc timeout + m_cancellable.get(), + error)) { + if (context().require_systemd_scope()) + return false; + + _vte_debug_print(VTE_DEBUG_PTY, + "Failed to create systemd scope: %s", + error.message()); + error.reset(); + } +#endif // WITH_SYSTEMD + + return true; +} + +void +SpawnOperation::run_in_thread(GTask* task) noexcept +{ + auto error = vte::glib::Error{}; + if (run(error)) + g_task_return_int(task, ssize_t{release_pid()}); + else + g_task_return_error(task, error.release()); +} + +void +SpawnOperation::run_async(std::unique_ptr op, + void* source_tag, + GAsyncReadyCallback callback, + void* user_data) +{ + /* Spawning is split into the fork() phase, and waiting for the child to + * exec or report an error. This is done so that the fork is happening on + * the main thread; see issue vte#118. + */ + auto error = vte::glib::Error{}; + auto rv = op->prepare(error); + + /* Create a GTask to run the user-provided callback, and transfers + * ownership of @op to the task. + */ + auto task = vte::glib::take_ref(g_task_new(op->context().pty_wrapper(), + op->m_cancellable.get(), + callback, + user_data)); + g_task_set_source_tag(task.get(), source_tag); + g_task_set_task_data(task.get(), op.release(), delete_cb); + // g_task_set_name(task.get(), "vte-spawn-async"); + + if (!rv) + return g_task_return_error(task.get(), error.release()); + + /* Async read from the child */ + g_task_run_in_thread(task.get(), run_in_thread_cb); +} + +bool +SpawnOperation::run_sync(SpawnOperation& op, + GPid* pid, + vte::glib::Error& error) +{ + auto rv = op.prepare(error) && op.run(error); + if (rv) + *pid = op.release_pid(); + else + *pid = -1; + + return rv; +} + +} // namespace vte::base diff --git a/src/spawn.hh b/src/spawn.hh new file mode 100644 index 0000000..28dc462 --- /dev/null +++ b/src/spawn.hh @@ -0,0 +1,255 @@ +/* + * Copyright © 2018, 2019 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include +#include + +#include +#include + +#include "vtepty.h" +#include "vteptyinternal.hh" + +#include "glib-glue.hh" +#include "libc-glue.hh" +#include "refptr.hh" + +namespace vte::base { + +class SpawnContext { +public: + using child_setup_type = void(*)(void*); + +private: + + vte::glib::RefPtr m_pty{}; + + vte::glib::StringPtr m_cwd{}; + vte::glib::StringPtr m_fallback_cwd{}; + vte::glib::StringPtr m_arg0{}; + vte::glib::StrvPtr m_argv{}; + vte::glib::StrvPtr m_envv{}; + + std::vector m_fds{}; + + // these 3 are placeholder elements for the PTY peer fd being mapped to 0, 1, 2 later + // we preallocate this here so that the child setup function doesn't do any + // allocations + std::vector> m_fd_map{{-1, 0}, {-1, 1}, {-1, 2}}; + + child_setup_type m_child_setup{nullptr}; + std::unique_ptr m_child_setup_data{nullptr, nullptr}; + + bool m_inherit_environ{true}; + bool m_systemd_scope{true}; + bool m_require_systemd_scope{false}; + bool m_search_path{false}; + +public: + SpawnContext() = default; + ~SpawnContext() = default; + + SpawnContext(SpawnContext const&) = delete; + SpawnContext(SpawnContext&&) = default; + SpawnContext operator=(SpawnContext const&) = delete; + SpawnContext operator=(SpawnContext&&) = delete; + + void set_cwd(char const* cwd) + { + m_cwd = vte::glib::dup_string(cwd); + } + + void set_fallback_cwd(char const* cwd) + { + m_fallback_cwd = vte::glib::dup_string(cwd); + } + + void set_argv(char const* arg0, + char const* const* argv) + { + m_arg0 = vte::glib::dup_string(arg0); + m_argv = vte::glib::dup_strv(argv); + } + + void set_environ(char const* const* envv) + { + m_envv = vte::glib::dup_strv(envv); + } + + void setenv(char const* env, + char const* value, + bool overwrite = true) + { + m_envv = vte::glib::take_strv(g_environ_setenv(m_envv.release(), env, value, overwrite)); + } + + void unsetenv(char const* env) + { + m_envv = vte::glib::take_strv(g_environ_unsetenv(m_envv.release(), env)); + } + + void set_pty(vte::glib::RefPtr&& pty) + { + m_pty = std::move(pty); + } + + void set_child_setup(child_setup_type func, + void* data, + void(*destroy)(void*)) + { + m_child_setup = func; + if (destroy) + m_child_setup_data = {data, destroy}; + else + m_child_setup_data = {data, [](auto ptr){}}; + } + + void add_fds(int const* fds, + int n_fds) + { + m_fds.reserve(m_fds.size() + n_fds); + for (auto i = int{0}; i < n_fds; ++i) + m_fds.emplace_back(fds[i]); + } + + void add_map_fds(int const* fds, + int n_fds, + int const* map_fds, + int n_map_fds) + { + m_fd_map.reserve(m_fd_map.size() + n_fds); + for (auto i = int{0}; i < n_fds; ++i) + m_fd_map.emplace_back(fds[i], i < n_map_fds ? map_fds[i] : -1); + } + + void add_map_fd(int fd, + int map_to) + { + add_map_fds(&fd, 1, &map_to, 1); + } + + void set_no_inherit_environ() noexcept { m_inherit_environ = false; } + void set_no_systemd_scope() noexcept { m_systemd_scope = false; } + void set_require_systemd_scope() noexcept { m_require_systemd_scope = true; } + void set_search_path() noexcept { m_search_path = true; } + + auto arg0() const noexcept { return m_arg0.get(); } + auto argv() const noexcept { return m_argv.get(); } + auto cwd() const noexcept { return m_cwd.get(); } + auto fallback_cwd() const noexcept { return m_fallback_cwd.get(); } + auto environ() const noexcept { return m_envv.get(); } + + auto pty_wrapper() const noexcept { return m_pty.get(); } + auto pty() const noexcept { return _vte_pty_get_impl(pty_wrapper()); } + + constexpr auto inherit_environ() const noexcept { return m_inherit_environ; } + constexpr auto systemd_scope() const noexcept { return m_systemd_scope; } + constexpr auto require_systemd_scope() const noexcept { return m_require_systemd_scope; } + + char const* search_path() const noexcept; + size_t workbuf_size() const noexcept; + + void prepare_environ(); + + enum class ExecError { + CHDIR, + DUP, + DUP2, + EXEC, + FDWALK, + GETPTPEER, + SCTTY, + SETSID, + SIGMASK, + UNSET_CLOEXEC, + }; + + ExecError exec(vte::libc::FD& child_report_error_pipe_write, + void* workbuf, + size_t workbufsize) noexcept; + +}; // class SpawnContext + +class SpawnOperation { +private: + int const default_timeout = 30000; /* ms */ + + SpawnContext m_context{}; + int m_timeout{default_timeout}; + vte::glib::RefPtr m_cancellable{}; + + GPollFD m_cancellable_pollfd{-1, 0, 0}; + vte::libc::FD m_child_report_error_pipe_read{}; + pid_t m_pid{-1}; + bool m_kill_pid{true}; + + auto& context() noexcept { return m_context; } + + bool prepare(vte::glib::Error& error); + bool run(vte::glib::Error& error) noexcept; + + void run_in_thread(GTask* task) noexcept; + + auto release_pid() noexcept { auto pid = m_pid; m_pid = -1; return pid; } + + static void delete_cb(void* that) + { + /* Take ownership */ + auto op = std::unique_ptr + (reinterpret_cast(that)); + } + + static void run_in_thread_cb(GTask* task, + gpointer source_object, + gpointer that, + GCancellable* cancellable) + { + reinterpret_cast(that)->run_in_thread(task); + } + +public: + SpawnOperation(SpawnContext&& context, + int timeout, + GCancellable* cancellable) + : m_context{std::move(context)}, + m_timeout{timeout >= 0 ? timeout : default_timeout}, + m_cancellable{vte::glib::make_ref(cancellable)} + { + m_context.prepare_environ(); + } + + ~SpawnOperation(); + + SpawnOperation(SpawnOperation const&) = delete; + SpawnOperation(SpawnOperation&&) = delete; + SpawnOperation operator=(SpawnOperation const&) = delete; + SpawnOperation operator=(SpawnOperation&&) = delete; + + static void run_async(std::unique_ptr op, + void *source_tag, + GAsyncReadyCallback callback, + void* user_data); + + static bool run_sync(SpawnOperation& op, + GPid* pid, + vte::glib::Error& error); + +}; // class SpawnOperation + +} // namespace vte::base diff --git a/src/std-glue.hh b/src/std-glue.hh new file mode 100644 index 0000000..6c2d418 --- /dev/null +++ b/src/std-glue.hh @@ -0,0 +1,82 @@ +/* + * Copyright © 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include +#include + +namespace vte { + +template +class FreeableDeleter; + +template +using Freeable = std::unique_ptr>; + +template +inline auto take_freeable(T* t) { return Freeable{t}; } + +#define VTE_DECLARE_FREEABLE(T, func) \ +template<> \ +class FreeableDeleter { \ +public: inline void operator()(T* t) { func(t); } \ +} + +template +class ValueGetter { +public: + explicit ValueGetter(S& storage, + V default_vv = default_v) noexcept + : m_storage{storage}, + m_value{default_vv} + { + } + + ~ValueGetter() + { + if constexpr (std::is_nothrow_assignable_v) { + m_storage = m_value; + } else { + m_storage.reset(m_value); + } + } + + ValueGetter(ValueGetter const&) = delete; + ValueGetter(ValueGetter&&) = delete; + + ValueGetter& operator=(ValueGetter const&) = delete; + ValueGetter& operator=(ValueGetter&&) = delete; + + operator V*() noexcept { return &m_value; } + V* operator&() noexcept { return &m_value; } + +private: + S& m_storage; + V m_value; +}; + +template +auto get_value(S& s) { return vte::ValueGetter{s}; } + +template +using FreeableGetter = ValueGetter, T*, nullptr>; + +template +auto get_freeable(vte::Freeable& freeable) { return vte::FreeableGetter{freeable}; } + +} // namespace vte diff --git a/src/systemd.cc b/src/systemd.cc index 7610b49..06ac517 100644 --- a/src/systemd.cc +++ b/src/systemd.cc @@ -1,18 +1,18 @@ /* * Copyright © 2020 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -84,7 +84,7 @@ create_scope_for_pid_sync(pid_t pid, free(slice); } else { // Fallback - g_variant_builder_add(builder, "(sv)", "Slice", g_variant_new_string("apps-org.gnome.vte.slice")); + g_variant_builder_add(builder, "(sv)", "Slice", g_variant_new_string("app-org.gnome.vte.slice")); } g_variant_builder_close(builder); // a(sv) @@ -94,8 +94,8 @@ create_scope_for_pid_sync(pid_t pid, g_variant_builder_close(builder); // Create transient scope - auto reply = std::unique_ptr - {g_dbus_connection_call_sync(bus.get(), + auto reply = vte::take_freeable + (g_dbus_connection_call_sync(bus.get(), "org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", @@ -105,8 +105,7 @@ create_scope_for_pid_sync(pid_t pid, GDBusCallFlags{G_DBUS_CALL_FLAGS_NO_AUTO_START}, timeout, // in ms cancellable, - error), - &g_variant_unref}; + error)); return bool(reply); } diff --git a/src/systemd.hh b/src/systemd.hh index 0857fd0..5a232c9 100644 --- a/src/systemd.hh +++ b/src/systemd.hh @@ -1,18 +1,18 @@ /* * Copyright © 2020 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once diff --git a/src/tabstops-test.cc b/src/tabstops-test.cc index a574814..0454175 100644 --- a/src/tabstops-test.cc +++ b/src/tabstops-test.cc @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -26,6 +26,9 @@ using namespace vte::terminal; +using position_t = unsigned int; +static inline constexpr position_t const npos = -1; + static void tabstops_set(Tabstops& t, std::initializer_list l) @@ -87,20 +90,22 @@ assert_tabstops(Tabstops const& t, static void assert_tabstops_previous(Tabstops const& t, std::initializer_list> l, - int count = 1) + int count = 1, + position_t endpos = npos) { for (auto p : l) { - g_assert_cmpuint(t.get_previous(p.first, count), ==, p.second); + g_assert_cmpuint(t.get_previous(p.first, count, endpos), ==, p.second); } } static void assert_tabstops_next(Tabstops const& t, std::initializer_list> l, - int count = 1) + int count = 1, + position_t endpos = npos) { for (auto p : l) { - g_assert_cmpuint(t.get_next(p.first, count), ==, p.second); + g_assert_cmpuint(t.get_next(p.first, count, endpos), ==, p.second); } } @@ -177,7 +182,6 @@ test_tabstops_previous(void) Tabstops t{512, false}; tabstops_set(t, {0, 31, 32, 63, 64, 255, 256}); assert_tabstops_previous(t, {{511, 256}, {256, 255}, {255, 64}, {64, 63}, {63, 32}, {32, 31}, {31, 0}}); - assert_tabstops_previous(t, {{511, 255}, {257, 255}, {254, 63}, {64, 32}, {33, 31}, {32, 0}, {31, t.npos}, {0, t.npos}}, 2); t.clear(); @@ -185,6 +189,8 @@ test_tabstops_previous(void) assert_tabstops_previous(t, {{511, 256}, {256, 127}, {127, t.npos}}); assert_tabstops_previous(t, {{384, 256}, {192, 127}, {92, t.npos}}); + assert_tabstops_previous(t, {{384, 256}, {256, 192}, {192, 192}, {191, 192}}, 1, 192); + unsigned int const tab_width = 3; t.reset(tab_width); @@ -207,6 +213,8 @@ test_tabstops_next(void) assert_tabstops_next(t, {{0, 127}, {127, 256}, {256, t.npos}}); assert_tabstops_next(t, {{1, 127}, {192, 256}, {384, t.npos}}); + assert_tabstops_next(t, {{64, 127}, {127, 192}, {192, 192}, {193, 192}}, 1, 192); + unsigned int const tab_width = 3; t.reset(tab_width); diff --git a/src/tabstops.hh b/src/tabstops.hh index 7591318..3b3578d 100644 --- a/src/tabstops.hh +++ b/src/tabstops.hh @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -21,6 +21,8 @@ #include #include +#include "debug.h" + #include "vtedefines.hh" namespace vte { @@ -139,8 +141,8 @@ public: { /* We want an even number of blocks */ auto const new_capacity = ((size + 8 * sizeof(storage_t) - 1) / (8 * sizeof(storage_t)) + 1) & ~1; - g_assert_cmpuint(new_capacity % 2, ==, 0); - g_assert_cmpuint(new_capacity * 8 * sizeof(storage_t), >=, size); + vte_assert_cmpuint(new_capacity % 2, ==, 0); + vte_assert_cmpuint(new_capacity * 8 * sizeof(storage_t), >=, size); if (new_capacity > m_capacity) { auto const new_capacity_bytes = new_capacity * sizeof(storage_t); @@ -200,18 +202,18 @@ public: int count = 1, position_t endpos = npos) const noexcept { - while (count-- && position < m_size) + while (count-- && position < m_size && position < endpos) position = next_position(position); - return position < m_size ? position : endpos; + return position < endpos ? position : endpos; } inline position_t get_previous(position_t position, int count = 1, position_t endpos = npos) const noexcept { - while (count-- && position != npos) + while (count-- && position != npos && (endpos == npos || position > endpos)) position = previous_position(position); - return position != npos ? position : endpos; + return (position != npos && (endpos == npos || position > endpos)) ? position : endpos; } }; diff --git a/src/test-vte-urlencode-cwd.sh b/src/test-vte-urlencode-cwd.sh index 7329290..dabb3c9 100755 --- a/src/test-vte-urlencode-cwd.sh +++ b/src/test-vte-urlencode-cwd.sh @@ -2,9 +2,9 @@ # Copyright © 2013 Christian Persch # Copyright © 2019 Red Hat, Inc. # -# This program is free software; you can redistribute it and/or modify +# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, @@ -12,9 +12,8 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . # # Red Hat Author(s): Carlos Santos diff --git a/src/unicode-width-generate.py b/src/unicode-width-generate.py new file mode 100755 index 0000000..fda22cc --- /dev/null +++ b/src/unicode-width-generate.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python3 +# +# Copyright © 2023 Egmont Koblinger +# +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library. If not, see . + +import gi +from gi.repository import GLib + +def width(c): + if c >= 0xD800 and c <= 0xDFFF: + # chr() doesn't work on surrogates + return 1 + + if GLib.unichar_iszerowidth(chr(c)): + return 0 + if GLib.unichar_iswide(chr(c)): + return 2 + if GLib.unichar_iswide_cjk(chr(c)): + return 3 + return 1 + +# list of (width_or_jump, value) tuples +maj_table = [] +# list of ([list of maj values], [list of width values]) tuples +min_table = [] + +for maj in range(17 * 256): + all_same = True + ws = [] + for min in range(256): + c = 256 * maj + min + w = width(c) + ws.append(w) + if (w != ws[0]): + all_same = False + + if all_same: + # store the width straight away + maj_table.append((False, w)) + else: + # need to jump to a min_table + for i in range(len(min_table)): + if min_table[i][1] == ws: + # identical min_table already exists, reuse it + maj_table.append((True, i)) + min_table[i][0].append(maj) + break + else: + # add new min_table + maj_table.append((True, len(min_table))) + min_table.append(([maj], ws)) + +assert len(min_table) <= 252, "min_table too large to be addressed by one byte" + +glib_version = f'{GLib.MAJOR_VERSION}.{GLib.MINOR_VERSION}.{GLib.MICRO_VERSION}' +print(f'/* Generated by unicode-width-generate using GLib {glib_version}, do not edit! */') + +print(''' +#define MIN_TABLE(i) (i) +#define WIDTH(i) (252 + (i)) + +static uint8_t _vte_width_maj_table[] = { +''') + +for maj in range(17 * 256): + print(f' /* U+{256 * maj:04X} */ ', end='') + if maj_table[maj][0]: + print(f'MIN_TABLE({maj_table[maj][1]}),') + else: + print(f'WIDTH({maj_table[maj][1]}),') + +print(''' +}; + +#undef MIN_TABLE +#undef WIDTH + +#define WIDTHS(a, b, c, d) (((a) << 6) | ((b) << 4) | ((c) << 2) | (d)) + +static uint8_t _vte_width_min_table[][64] = { +''') + +for (i, (majs, ws)) in enumerate(min_table): + print(f' /* [{i}] */ ' + '{') + for (min, w) in enumerate(ws): + if min % 4 == 0: + chs = ', '.join(f'U+{256 * maj + min:04X}' for maj in majs) + print(f' /* {chs} */ WIDTHS( ', end='') + print(w, end='') + if min % 4 < 3: + print(', ', end='') + else: + print(' ),') + print(' },') + +print(''' +}; + +#undef WIDTHS + +/* Returns the width of the given printable Unicode character. + * For non-printable (control) characters the return value is undefined. */ +static int (_vte_unichar_width)(gunichar c, int utf8_ambiguous_width) +{ + vte_assert_cmpuint(c, <=, 0x10FFFFU); + + /* TODO bump to 0x0300 when ambiguous width support is removed */ + if (c < 0x0080) [[likely]] { + return 1; + } + uint8_t x = _vte_width_maj_table[c / 256]; + if (x >= 252) { + x -= 252; + } else { + x = (_vte_width_min_table[x][c % 256 / 4] >> (6 - (c % 4) * 2)) & 0x03; + } + if (x == 3) + x = utf8_ambiguous_width; + return x; +} +''') diff --git a/src/unicode-width-test.cc b/src/unicode-width-test.cc new file mode 100644 index 0000000..a98a05c --- /dev/null +++ b/src/unicode-width-test.cc @@ -0,0 +1,94 @@ +/* + * Copyright © 2023 Egmont Koblinger + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include "config.h" + +#include + +#include + +#include "debug.h" +#include "unicode-width.hh" + +static void +test_widths(void) +{ + gunichar c; + + // ASCII + for (c = 0x20; c < 0x7F; c++) { + g_assert_cmpint(_vte_unichar_width(c, 1), ==, 1); + g_assert_cmpint(_vte_unichar_width(c, 2), ==, 1); + } + + // Latin and more. Some are ambiguous width. + for (c = 0xA0; c < 0x0300; c++) { + g_assert_cmpint(_vte_unichar_width(c, 1), ==, 1); + } + g_assert_cmpint(_vte_unichar_width(0xA0, 2), ==, 1); + g_assert_cmpint(_vte_unichar_width(0xA1, 2), ==, 2); + g_assert_cmpint(_vte_unichar_width(0xA2, 2), ==, 1); + g_assert_cmpint(_vte_unichar_width(0xA3, 2), ==, 1); + g_assert_cmpint(_vte_unichar_width(0xA4, 2), ==, 2); + g_assert_cmpint(_vte_unichar_width(0xA5, 2), ==, 1); + g_assert_cmpint(_vte_unichar_width(0xA6, 2), ==, 1); + g_assert_cmpint(_vte_unichar_width(0xA7, 2), ==, 2); + + // Combining + for (c = 0x0300; c < 0x0370; c++) { + g_assert_cmpint(_vte_unichar_width(c, 1), ==, 0); + } + + // Cyrillic, some historic symbols are combining + g_assert_cmpint(_vte_unichar_width(0x0480, 1), ==, 1); + g_assert_cmpint(_vte_unichar_width(0x0481, 1), ==, 1); + g_assert_cmpint(_vte_unichar_width(0x0482, 1), ==, 1); + g_assert_cmpint(_vte_unichar_width(0x0483, 1), ==, 0); + g_assert_cmpint(_vte_unichar_width(0x0484, 1), ==, 0); + g_assert_cmpint(_vte_unichar_width(0x0485, 1), ==, 0); + g_assert_cmpint(_vte_unichar_width(0x0486, 1), ==, 0); + g_assert_cmpint(_vte_unichar_width(0x0487, 1), ==, 0); + g_assert_cmpint(_vte_unichar_width(0x0488, 1), ==, 0); + g_assert_cmpint(_vte_unichar_width(0x0489, 1), ==, 0); + g_assert_cmpint(_vte_unichar_width(0x048A, 1), ==, 1); + g_assert_cmpint(_vte_unichar_width(0x048B, 1), ==, 1); + + // Hangul + for (c = 0x1100; c < 0x115F; c++) { + g_assert_cmpint(_vte_unichar_width(c, 1), ==, 2); + } + + // Miscellaneous Technical, mixture of single and double + g_assert_cmpint(_vte_unichar_width(0x2318, 1), ==, 1); + g_assert_cmpint(_vte_unichar_width(0x2319, 1), ==, 1); + g_assert_cmpint(_vte_unichar_width(0x231A, 1), ==, 2); + g_assert_cmpint(_vte_unichar_width(0x231B, 1), ==, 2); + g_assert_cmpint(_vte_unichar_width(0x231C, 1), ==, 1); + g_assert_cmpint(_vte_unichar_width(0x231D, 1), ==, 1); + g_assert_cmpint(_vte_unichar_width(0x231E, 1), ==, 1); + g_assert_cmpint(_vte_unichar_width(0x231F, 1), ==, 1); +} + +int +main(int argc, char *argv[]) +{ + g_test_init(&argc, &argv, nullptr); + + g_test_add_func("/vte/unicode-width/widths", test_widths); + + return g_test_run(); +} diff --git a/src/unicode-width.hh b/src/unicode-width.hh new file mode 100644 index 0000000..484f063 --- /dev/null +++ b/src/unicode-width.hh @@ -0,0 +1,11589 @@ +/* Generated by unicode-width-generate using GLib 2.78.0, do not edit! */ + +#define MIN_TABLE(i) (i) +#define WIDTH(i) (252 + (i)) + +static uint8_t _vte_width_maj_table[] = { + + /* U+0000 */ MIN_TABLE(0), + /* U+0100 */ MIN_TABLE(1), + /* U+0200 */ MIN_TABLE(2), + /* U+0300 */ MIN_TABLE(3), + /* U+0400 */ MIN_TABLE(4), + /* U+0500 */ MIN_TABLE(5), + /* U+0600 */ MIN_TABLE(6), + /* U+0700 */ MIN_TABLE(7), + /* U+0800 */ MIN_TABLE(8), + /* U+0900 */ MIN_TABLE(9), + /* U+0A00 */ MIN_TABLE(10), + /* U+0B00 */ MIN_TABLE(11), + /* U+0C00 */ MIN_TABLE(12), + /* U+0D00 */ MIN_TABLE(13), + /* U+0E00 */ MIN_TABLE(14), + /* U+0F00 */ MIN_TABLE(15), + /* U+1000 */ MIN_TABLE(16), + /* U+1100 */ MIN_TABLE(17), + /* U+1200 */ WIDTH(1), + /* U+1300 */ MIN_TABLE(18), + /* U+1400 */ WIDTH(1), + /* U+1500 */ WIDTH(1), + /* U+1600 */ WIDTH(1), + /* U+1700 */ MIN_TABLE(19), + /* U+1800 */ MIN_TABLE(20), + /* U+1900 */ MIN_TABLE(21), + /* U+1A00 */ MIN_TABLE(22), + /* U+1B00 */ MIN_TABLE(23), + /* U+1C00 */ MIN_TABLE(24), + /* U+1D00 */ MIN_TABLE(25), + /* U+1E00 */ WIDTH(1), + /* U+1F00 */ WIDTH(1), + /* U+2000 */ MIN_TABLE(26), + /* U+2100 */ MIN_TABLE(27), + /* U+2200 */ MIN_TABLE(28), + /* U+2300 */ MIN_TABLE(29), + /* U+2400 */ MIN_TABLE(30), + /* U+2500 */ MIN_TABLE(31), + /* U+2600 */ MIN_TABLE(32), + /* U+2700 */ MIN_TABLE(33), + /* U+2800 */ WIDTH(1), + /* U+2900 */ WIDTH(1), + /* U+2A00 */ WIDTH(1), + /* U+2B00 */ MIN_TABLE(34), + /* U+2C00 */ MIN_TABLE(35), + /* U+2D00 */ MIN_TABLE(36), + /* U+2E00 */ MIN_TABLE(37), + /* U+2F00 */ MIN_TABLE(38), + /* U+3000 */ MIN_TABLE(39), + /* U+3100 */ MIN_TABLE(40), + /* U+3200 */ MIN_TABLE(41), + /* U+3300 */ WIDTH(2), + /* U+3400 */ WIDTH(2), + /* U+3500 */ WIDTH(2), + /* U+3600 */ WIDTH(2), + /* U+3700 */ WIDTH(2), + /* U+3800 */ WIDTH(2), + /* U+3900 */ WIDTH(2), + /* U+3A00 */ WIDTH(2), + /* U+3B00 */ WIDTH(2), + /* U+3C00 */ WIDTH(2), + /* U+3D00 */ WIDTH(2), + /* U+3E00 */ WIDTH(2), + /* U+3F00 */ WIDTH(2), + /* U+4000 */ WIDTH(2), + /* U+4100 */ WIDTH(2), + /* U+4200 */ WIDTH(2), + /* U+4300 */ WIDTH(2), + /* U+4400 */ WIDTH(2), + /* U+4500 */ WIDTH(2), + /* U+4600 */ WIDTH(2), + /* U+4700 */ WIDTH(2), + /* U+4800 */ WIDTH(2), + /* U+4900 */ WIDTH(2), + /* U+4A00 */ WIDTH(2), + /* U+4B00 */ WIDTH(2), + /* U+4C00 */ WIDTH(2), + /* U+4D00 */ MIN_TABLE(42), + /* U+4E00 */ WIDTH(2), + /* U+4F00 */ WIDTH(2), + /* U+5000 */ WIDTH(2), + /* U+5100 */ WIDTH(2), + /* U+5200 */ WIDTH(2), + /* U+5300 */ WIDTH(2), + /* U+5400 */ WIDTH(2), + /* U+5500 */ WIDTH(2), + /* U+5600 */ WIDTH(2), + /* U+5700 */ WIDTH(2), + /* U+5800 */ WIDTH(2), + /* U+5900 */ WIDTH(2), + /* U+5A00 */ WIDTH(2), + /* U+5B00 */ WIDTH(2), + /* U+5C00 */ WIDTH(2), + /* U+5D00 */ WIDTH(2), + /* U+5E00 */ WIDTH(2), + /* U+5F00 */ WIDTH(2), + /* U+6000 */ WIDTH(2), + /* U+6100 */ WIDTH(2), + /* U+6200 */ WIDTH(2), + /* U+6300 */ WIDTH(2), + /* U+6400 */ WIDTH(2), + /* U+6500 */ WIDTH(2), + /* U+6600 */ WIDTH(2), + /* U+6700 */ WIDTH(2), + /* U+6800 */ WIDTH(2), + /* U+6900 */ WIDTH(2), + /* U+6A00 */ WIDTH(2), + /* U+6B00 */ WIDTH(2), + /* U+6C00 */ WIDTH(2), + /* U+6D00 */ WIDTH(2), + /* U+6E00 */ WIDTH(2), + /* U+6F00 */ WIDTH(2), + /* U+7000 */ WIDTH(2), + /* U+7100 */ WIDTH(2), + /* U+7200 */ WIDTH(2), + /* U+7300 */ WIDTH(2), + /* U+7400 */ WIDTH(2), + /* U+7500 */ WIDTH(2), + /* U+7600 */ WIDTH(2), + /* U+7700 */ WIDTH(2), + /* U+7800 */ WIDTH(2), + /* U+7900 */ WIDTH(2), + /* U+7A00 */ WIDTH(2), + /* U+7B00 */ WIDTH(2), + /* U+7C00 */ WIDTH(2), + /* U+7D00 */ WIDTH(2), + /* U+7E00 */ WIDTH(2), + /* U+7F00 */ WIDTH(2), + /* U+8000 */ WIDTH(2), + /* U+8100 */ WIDTH(2), + /* U+8200 */ WIDTH(2), + /* U+8300 */ WIDTH(2), + /* U+8400 */ WIDTH(2), + /* U+8500 */ WIDTH(2), + /* U+8600 */ WIDTH(2), + /* U+8700 */ WIDTH(2), + /* U+8800 */ WIDTH(2), + /* U+8900 */ WIDTH(2), + /* U+8A00 */ WIDTH(2), + /* U+8B00 */ WIDTH(2), + /* U+8C00 */ WIDTH(2), + /* U+8D00 */ WIDTH(2), + /* U+8E00 */ WIDTH(2), + /* U+8F00 */ WIDTH(2), + /* U+9000 */ WIDTH(2), + /* U+9100 */ WIDTH(2), + /* U+9200 */ WIDTH(2), + /* U+9300 */ WIDTH(2), + /* U+9400 */ WIDTH(2), + /* U+9500 */ WIDTH(2), + /* U+9600 */ WIDTH(2), + /* U+9700 */ WIDTH(2), + /* U+9800 */ WIDTH(2), + /* U+9900 */ WIDTH(2), + /* U+9A00 */ WIDTH(2), + /* U+9B00 */ WIDTH(2), + /* U+9C00 */ WIDTH(2), + /* U+9D00 */ WIDTH(2), + /* U+9E00 */ WIDTH(2), + /* U+9F00 */ WIDTH(2), + /* U+A000 */ WIDTH(2), + /* U+A100 */ WIDTH(2), + /* U+A200 */ WIDTH(2), + /* U+A300 */ WIDTH(2), + /* U+A400 */ MIN_TABLE(43), + /* U+A500 */ WIDTH(1), + /* U+A600 */ MIN_TABLE(44), + /* U+A700 */ WIDTH(1), + /* U+A800 */ MIN_TABLE(45), + /* U+A900 */ MIN_TABLE(46), + /* U+AA00 */ MIN_TABLE(47), + /* U+AB00 */ MIN_TABLE(48), + /* U+AC00 */ WIDTH(2), + /* U+AD00 */ WIDTH(2), + /* U+AE00 */ WIDTH(2), + /* U+AF00 */ WIDTH(2), + /* U+B000 */ WIDTH(2), + /* U+B100 */ WIDTH(2), + /* U+B200 */ WIDTH(2), + /* U+B300 */ WIDTH(2), + /* U+B400 */ WIDTH(2), + /* U+B500 */ WIDTH(2), + /* U+B600 */ WIDTH(2), + /* U+B700 */ WIDTH(2), + /* U+B800 */ WIDTH(2), + /* U+B900 */ WIDTH(2), + /* U+BA00 */ WIDTH(2), + /* U+BB00 */ WIDTH(2), + /* U+BC00 */ WIDTH(2), + /* U+BD00 */ WIDTH(2), + /* U+BE00 */ WIDTH(2), + /* U+BF00 */ WIDTH(2), + /* U+C000 */ WIDTH(2), + /* U+C100 */ WIDTH(2), + /* U+C200 */ WIDTH(2), + /* U+C300 */ WIDTH(2), + /* U+C400 */ WIDTH(2), + /* U+C500 */ WIDTH(2), + /* U+C600 */ WIDTH(2), + /* U+C700 */ WIDTH(2), + /* U+C800 */ WIDTH(2), + /* U+C900 */ WIDTH(2), + /* U+CA00 */ WIDTH(2), + /* U+CB00 */ WIDTH(2), + /* U+CC00 */ WIDTH(2), + /* U+CD00 */ WIDTH(2), + /* U+CE00 */ WIDTH(2), + /* U+CF00 */ WIDTH(2), + /* U+D000 */ WIDTH(2), + /* U+D100 */ WIDTH(2), + /* U+D200 */ WIDTH(2), + /* U+D300 */ WIDTH(2), + /* U+D400 */ WIDTH(2), + /* U+D500 */ WIDTH(2), + /* U+D600 */ WIDTH(2), + /* U+D700 */ MIN_TABLE(49), + /* U+D800 */ WIDTH(1), + /* U+D900 */ WIDTH(1), + /* U+DA00 */ WIDTH(1), + /* U+DB00 */ WIDTH(1), + /* U+DC00 */ WIDTH(1), + /* U+DD00 */ WIDTH(1), + /* U+DE00 */ WIDTH(1), + /* U+DF00 */ WIDTH(1), + /* U+E000 */ WIDTH(3), + /* U+E100 */ WIDTH(3), + /* U+E200 */ WIDTH(3), + /* U+E300 */ WIDTH(3), + /* U+E400 */ WIDTH(3), + /* U+E500 */ WIDTH(3), + /* U+E600 */ WIDTH(3), + /* U+E700 */ WIDTH(3), + /* U+E800 */ WIDTH(3), + /* U+E900 */ WIDTH(3), + /* U+EA00 */ WIDTH(3), + /* U+EB00 */ WIDTH(3), + /* U+EC00 */ WIDTH(3), + /* U+ED00 */ WIDTH(3), + /* U+EE00 */ WIDTH(3), + /* U+EF00 */ WIDTH(3), + /* U+F000 */ WIDTH(3), + /* U+F100 */ WIDTH(3), + /* U+F200 */ WIDTH(3), + /* U+F300 */ WIDTH(3), + /* U+F400 */ WIDTH(3), + /* U+F500 */ WIDTH(3), + /* U+F600 */ WIDTH(3), + /* U+F700 */ WIDTH(3), + /* U+F800 */ WIDTH(3), + /* U+F900 */ WIDTH(2), + /* U+FA00 */ WIDTH(2), + /* U+FB00 */ MIN_TABLE(50), + /* U+FC00 */ WIDTH(1), + /* U+FD00 */ WIDTH(1), + /* U+FE00 */ MIN_TABLE(51), + /* U+FF00 */ MIN_TABLE(52), + /* U+10000 */ WIDTH(1), + /* U+10100 */ MIN_TABLE(53), + /* U+10200 */ MIN_TABLE(54), + /* U+10300 */ MIN_TABLE(55), + /* U+10400 */ WIDTH(1), + /* U+10500 */ WIDTH(1), + /* U+10600 */ WIDTH(1), + /* U+10700 */ WIDTH(1), + /* U+10800 */ WIDTH(1), + /* U+10900 */ WIDTH(1), + /* U+10A00 */ MIN_TABLE(56), + /* U+10B00 */ WIDTH(1), + /* U+10C00 */ WIDTH(1), + /* U+10D00 */ MIN_TABLE(57), + /* U+10E00 */ MIN_TABLE(58), + /* U+10F00 */ MIN_TABLE(59), + /* U+11000 */ MIN_TABLE(60), + /* U+11100 */ MIN_TABLE(61), + /* U+11200 */ MIN_TABLE(62), + /* U+11300 */ MIN_TABLE(63), + /* U+11400 */ MIN_TABLE(64), + /* U+11500 */ MIN_TABLE(65), + /* U+11600 */ MIN_TABLE(66), + /* U+11700 */ MIN_TABLE(67), + /* U+11800 */ MIN_TABLE(68), + /* U+11900 */ MIN_TABLE(69), + /* U+11A00 */ MIN_TABLE(70), + /* U+11B00 */ WIDTH(1), + /* U+11C00 */ MIN_TABLE(71), + /* U+11D00 */ MIN_TABLE(72), + /* U+11E00 */ MIN_TABLE(73), + /* U+11F00 */ MIN_TABLE(74), + /* U+12000 */ WIDTH(1), + /* U+12100 */ WIDTH(1), + /* U+12200 */ WIDTH(1), + /* U+12300 */ WIDTH(1), + /* U+12400 */ WIDTH(1), + /* U+12500 */ WIDTH(1), + /* U+12600 */ WIDTH(1), + /* U+12700 */ WIDTH(1), + /* U+12800 */ WIDTH(1), + /* U+12900 */ WIDTH(1), + /* U+12A00 */ WIDTH(1), + /* U+12B00 */ WIDTH(1), + /* U+12C00 */ WIDTH(1), + /* U+12D00 */ WIDTH(1), + /* U+12E00 */ WIDTH(1), + /* U+12F00 */ WIDTH(1), + /* U+13000 */ WIDTH(1), + /* U+13100 */ WIDTH(1), + /* U+13200 */ WIDTH(1), + /* U+13300 */ WIDTH(1), + /* U+13400 */ MIN_TABLE(75), + /* U+13500 */ WIDTH(1), + /* U+13600 */ WIDTH(1), + /* U+13700 */ WIDTH(1), + /* U+13800 */ WIDTH(1), + /* U+13900 */ WIDTH(1), + /* U+13A00 */ WIDTH(1), + /* U+13B00 */ WIDTH(1), + /* U+13C00 */ WIDTH(1), + /* U+13D00 */ WIDTH(1), + /* U+13E00 */ WIDTH(1), + /* U+13F00 */ WIDTH(1), + /* U+14000 */ WIDTH(1), + /* U+14100 */ WIDTH(1), + /* U+14200 */ WIDTH(1), + /* U+14300 */ WIDTH(1), + /* U+14400 */ WIDTH(1), + /* U+14500 */ WIDTH(1), + /* U+14600 */ WIDTH(1), + /* U+14700 */ WIDTH(1), + /* U+14800 */ WIDTH(1), + /* U+14900 */ WIDTH(1), + /* U+14A00 */ WIDTH(1), + /* U+14B00 */ WIDTH(1), + /* U+14C00 */ WIDTH(1), + /* U+14D00 */ WIDTH(1), + /* U+14E00 */ WIDTH(1), + /* U+14F00 */ WIDTH(1), + /* U+15000 */ WIDTH(1), + /* U+15100 */ WIDTH(1), + /* U+15200 */ WIDTH(1), + /* U+15300 */ WIDTH(1), + /* U+15400 */ WIDTH(1), + /* U+15500 */ WIDTH(1), + /* U+15600 */ WIDTH(1), + /* U+15700 */ WIDTH(1), + /* U+15800 */ WIDTH(1), + /* U+15900 */ WIDTH(1), + /* U+15A00 */ WIDTH(1), + /* U+15B00 */ WIDTH(1), + /* U+15C00 */ WIDTH(1), + /* U+15D00 */ WIDTH(1), + /* U+15E00 */ WIDTH(1), + /* U+15F00 */ WIDTH(1), + /* U+16000 */ WIDTH(1), + /* U+16100 */ WIDTH(1), + /* U+16200 */ WIDTH(1), + /* U+16300 */ WIDTH(1), + /* U+16400 */ WIDTH(1), + /* U+16500 */ WIDTH(1), + /* U+16600 */ WIDTH(1), + /* U+16700 */ WIDTH(1), + /* U+16800 */ WIDTH(1), + /* U+16900 */ WIDTH(1), + /* U+16A00 */ MIN_TABLE(76), + /* U+16B00 */ MIN_TABLE(77), + /* U+16C00 */ WIDTH(1), + /* U+16D00 */ WIDTH(1), + /* U+16E00 */ WIDTH(1), + /* U+16F00 */ MIN_TABLE(78), + /* U+17000 */ WIDTH(2), + /* U+17100 */ WIDTH(2), + /* U+17200 */ WIDTH(2), + /* U+17300 */ WIDTH(2), + /* U+17400 */ WIDTH(2), + /* U+17500 */ WIDTH(2), + /* U+17600 */ WIDTH(2), + /* U+17700 */ WIDTH(2), + /* U+17800 */ WIDTH(2), + /* U+17900 */ WIDTH(2), + /* U+17A00 */ WIDTH(2), + /* U+17B00 */ WIDTH(2), + /* U+17C00 */ WIDTH(2), + /* U+17D00 */ WIDTH(2), + /* U+17E00 */ WIDTH(2), + /* U+17F00 */ WIDTH(2), + /* U+18000 */ WIDTH(2), + /* U+18100 */ WIDTH(2), + /* U+18200 */ WIDTH(2), + /* U+18300 */ WIDTH(2), + /* U+18400 */ WIDTH(2), + /* U+18500 */ WIDTH(2), + /* U+18600 */ WIDTH(2), + /* U+18700 */ MIN_TABLE(79), + /* U+18800 */ WIDTH(2), + /* U+18900 */ WIDTH(2), + /* U+18A00 */ WIDTH(2), + /* U+18B00 */ WIDTH(2), + /* U+18C00 */ MIN_TABLE(80), + /* U+18D00 */ MIN_TABLE(81), + /* U+18E00 */ WIDTH(1), + /* U+18F00 */ WIDTH(1), + /* U+19000 */ WIDTH(1), + /* U+19100 */ WIDTH(1), + /* U+19200 */ WIDTH(1), + /* U+19300 */ WIDTH(1), + /* U+19400 */ WIDTH(1), + /* U+19500 */ WIDTH(1), + /* U+19600 */ WIDTH(1), + /* U+19700 */ WIDTH(1), + /* U+19800 */ WIDTH(1), + /* U+19900 */ WIDTH(1), + /* U+19A00 */ WIDTH(1), + /* U+19B00 */ WIDTH(1), + /* U+19C00 */ WIDTH(1), + /* U+19D00 */ WIDTH(1), + /* U+19E00 */ WIDTH(1), + /* U+19F00 */ WIDTH(1), + /* U+1A000 */ WIDTH(1), + /* U+1A100 */ WIDTH(1), + /* U+1A200 */ WIDTH(1), + /* U+1A300 */ WIDTH(1), + /* U+1A400 */ WIDTH(1), + /* U+1A500 */ WIDTH(1), + /* U+1A600 */ WIDTH(1), + /* U+1A700 */ WIDTH(1), + /* U+1A800 */ WIDTH(1), + /* U+1A900 */ WIDTH(1), + /* U+1AA00 */ WIDTH(1), + /* U+1AB00 */ WIDTH(1), + /* U+1AC00 */ WIDTH(1), + /* U+1AD00 */ WIDTH(1), + /* U+1AE00 */ WIDTH(1), + /* U+1AF00 */ MIN_TABLE(82), + /* U+1B000 */ WIDTH(2), + /* U+1B100 */ MIN_TABLE(83), + /* U+1B200 */ MIN_TABLE(84), + /* U+1B300 */ WIDTH(1), + /* U+1B400 */ WIDTH(1), + /* U+1B500 */ WIDTH(1), + /* U+1B600 */ WIDTH(1), + /* U+1B700 */ WIDTH(1), + /* U+1B800 */ WIDTH(1), + /* U+1B900 */ WIDTH(1), + /* U+1BA00 */ WIDTH(1), + /* U+1BB00 */ WIDTH(1), + /* U+1BC00 */ MIN_TABLE(85), + /* U+1BD00 */ WIDTH(1), + /* U+1BE00 */ WIDTH(1), + /* U+1BF00 */ WIDTH(1), + /* U+1C000 */ WIDTH(1), + /* U+1C100 */ WIDTH(1), + /* U+1C200 */ WIDTH(1), + /* U+1C300 */ WIDTH(1), + /* U+1C400 */ WIDTH(1), + /* U+1C500 */ WIDTH(1), + /* U+1C600 */ WIDTH(1), + /* U+1C700 */ WIDTH(1), + /* U+1C800 */ WIDTH(1), + /* U+1C900 */ WIDTH(1), + /* U+1CA00 */ WIDTH(1), + /* U+1CB00 */ WIDTH(1), + /* U+1CC00 */ WIDTH(1), + /* U+1CD00 */ WIDTH(1), + /* U+1CE00 */ WIDTH(1), + /* U+1CF00 */ MIN_TABLE(86), + /* U+1D000 */ WIDTH(1), + /* U+1D100 */ MIN_TABLE(87), + /* U+1D200 */ MIN_TABLE(88), + /* U+1D300 */ WIDTH(1), + /* U+1D400 */ WIDTH(1), + /* U+1D500 */ WIDTH(1), + /* U+1D600 */ WIDTH(1), + /* U+1D700 */ WIDTH(1), + /* U+1D800 */ WIDTH(1), + /* U+1D900 */ WIDTH(1), + /* U+1DA00 */ MIN_TABLE(89), + /* U+1DB00 */ WIDTH(1), + /* U+1DC00 */ WIDTH(1), + /* U+1DD00 */ WIDTH(1), + /* U+1DE00 */ WIDTH(1), + /* U+1DF00 */ WIDTH(1), + /* U+1E000 */ MIN_TABLE(90), + /* U+1E100 */ MIN_TABLE(77), + /* U+1E200 */ MIN_TABLE(91), + /* U+1E300 */ WIDTH(1), + /* U+1E400 */ MIN_TABLE(92), + /* U+1E500 */ WIDTH(1), + /* U+1E600 */ WIDTH(1), + /* U+1E700 */ WIDTH(1), + /* U+1E800 */ MIN_TABLE(93), + /* U+1E900 */ MIN_TABLE(94), + /* U+1EA00 */ WIDTH(1), + /* U+1EB00 */ WIDTH(1), + /* U+1EC00 */ WIDTH(1), + /* U+1ED00 */ WIDTH(1), + /* U+1EE00 */ WIDTH(1), + /* U+1EF00 */ WIDTH(1), + /* U+1F000 */ MIN_TABLE(95), + /* U+1F100 */ MIN_TABLE(96), + /* U+1F200 */ MIN_TABLE(97), + /* U+1F300 */ MIN_TABLE(98), + /* U+1F400 */ MIN_TABLE(99), + /* U+1F500 */ MIN_TABLE(100), + /* U+1F600 */ MIN_TABLE(101), + /* U+1F700 */ MIN_TABLE(102), + /* U+1F800 */ WIDTH(1), + /* U+1F900 */ MIN_TABLE(103), + /* U+1FA00 */ MIN_TABLE(104), + /* U+1FB00 */ WIDTH(1), + /* U+1FC00 */ WIDTH(1), + /* U+1FD00 */ WIDTH(1), + /* U+1FE00 */ WIDTH(1), + /* U+1FF00 */ WIDTH(1), + /* U+20000 */ WIDTH(2), + /* U+20100 */ WIDTH(2), + /* U+20200 */ WIDTH(2), + /* U+20300 */ WIDTH(2), + /* U+20400 */ WIDTH(2), + /* U+20500 */ WIDTH(2), + /* U+20600 */ WIDTH(2), + /* U+20700 */ WIDTH(2), + /* U+20800 */ WIDTH(2), + /* U+20900 */ WIDTH(2), + /* U+20A00 */ WIDTH(2), + /* U+20B00 */ WIDTH(2), + /* U+20C00 */ WIDTH(2), + /* U+20D00 */ WIDTH(2), + /* U+20E00 */ WIDTH(2), + /* U+20F00 */ WIDTH(2), + /* U+21000 */ WIDTH(2), + /* U+21100 */ WIDTH(2), + /* U+21200 */ WIDTH(2), + /* U+21300 */ WIDTH(2), + /* U+21400 */ WIDTH(2), + /* U+21500 */ WIDTH(2), + /* U+21600 */ WIDTH(2), + /* U+21700 */ WIDTH(2), + /* U+21800 */ WIDTH(2), + /* U+21900 */ WIDTH(2), + /* U+21A00 */ WIDTH(2), + /* U+21B00 */ WIDTH(2), + /* U+21C00 */ WIDTH(2), + /* U+21D00 */ WIDTH(2), + /* U+21E00 */ WIDTH(2), + /* U+21F00 */ WIDTH(2), + /* U+22000 */ WIDTH(2), + /* U+22100 */ WIDTH(2), + /* U+22200 */ WIDTH(2), + /* U+22300 */ WIDTH(2), + /* U+22400 */ WIDTH(2), + /* U+22500 */ WIDTH(2), + /* U+22600 */ WIDTH(2), + /* U+22700 */ WIDTH(2), + /* U+22800 */ WIDTH(2), + /* U+22900 */ WIDTH(2), + /* U+22A00 */ WIDTH(2), + /* U+22B00 */ WIDTH(2), + /* U+22C00 */ WIDTH(2), + /* U+22D00 */ WIDTH(2), + /* U+22E00 */ WIDTH(2), + /* U+22F00 */ WIDTH(2), + /* U+23000 */ WIDTH(2), + /* U+23100 */ WIDTH(2), + /* U+23200 */ WIDTH(2), + /* U+23300 */ WIDTH(2), + /* U+23400 */ WIDTH(2), + /* U+23500 */ WIDTH(2), + /* U+23600 */ WIDTH(2), + /* U+23700 */ WIDTH(2), + /* U+23800 */ WIDTH(2), + /* U+23900 */ WIDTH(2), + /* U+23A00 */ WIDTH(2), + /* U+23B00 */ WIDTH(2), + /* U+23C00 */ WIDTH(2), + /* U+23D00 */ WIDTH(2), + /* U+23E00 */ WIDTH(2), + /* U+23F00 */ WIDTH(2), + /* U+24000 */ WIDTH(2), + /* U+24100 */ WIDTH(2), + /* U+24200 */ WIDTH(2), + /* U+24300 */ WIDTH(2), + /* U+24400 */ WIDTH(2), + /* U+24500 */ WIDTH(2), + /* U+24600 */ WIDTH(2), + /* U+24700 */ WIDTH(2), + /* U+24800 */ WIDTH(2), + /* U+24900 */ WIDTH(2), + /* U+24A00 */ WIDTH(2), + /* U+24B00 */ WIDTH(2), + /* U+24C00 */ WIDTH(2), + /* U+24D00 */ WIDTH(2), + /* U+24E00 */ WIDTH(2), + /* U+24F00 */ WIDTH(2), + /* U+25000 */ WIDTH(2), + /* U+25100 */ WIDTH(2), + /* U+25200 */ WIDTH(2), + /* U+25300 */ WIDTH(2), + /* U+25400 */ WIDTH(2), + /* U+25500 */ WIDTH(2), + /* U+25600 */ WIDTH(2), + /* U+25700 */ WIDTH(2), + /* U+25800 */ WIDTH(2), + /* U+25900 */ WIDTH(2), + /* U+25A00 */ WIDTH(2), + /* U+25B00 */ WIDTH(2), + /* U+25C00 */ WIDTH(2), + /* U+25D00 */ WIDTH(2), + /* U+25E00 */ WIDTH(2), + /* U+25F00 */ WIDTH(2), + /* U+26000 */ WIDTH(2), + /* U+26100 */ WIDTH(2), + /* U+26200 */ WIDTH(2), + /* U+26300 */ WIDTH(2), + /* U+26400 */ WIDTH(2), + /* U+26500 */ WIDTH(2), + /* U+26600 */ WIDTH(2), + /* U+26700 */ WIDTH(2), + /* U+26800 */ WIDTH(2), + /* U+26900 */ WIDTH(2), + /* U+26A00 */ WIDTH(2), + /* U+26B00 */ WIDTH(2), + /* U+26C00 */ WIDTH(2), + /* U+26D00 */ WIDTH(2), + /* U+26E00 */ WIDTH(2), + /* U+26F00 */ WIDTH(2), + /* U+27000 */ WIDTH(2), + /* U+27100 */ WIDTH(2), + /* U+27200 */ WIDTH(2), + /* U+27300 */ WIDTH(2), + /* U+27400 */ WIDTH(2), + /* U+27500 */ WIDTH(2), + /* U+27600 */ WIDTH(2), + /* U+27700 */ WIDTH(2), + /* U+27800 */ WIDTH(2), + /* U+27900 */ WIDTH(2), + /* U+27A00 */ WIDTH(2), + /* U+27B00 */ WIDTH(2), + /* U+27C00 */ WIDTH(2), + /* U+27D00 */ WIDTH(2), + /* U+27E00 */ WIDTH(2), + /* U+27F00 */ WIDTH(2), + /* U+28000 */ WIDTH(2), + /* U+28100 */ WIDTH(2), + /* U+28200 */ WIDTH(2), + /* U+28300 */ WIDTH(2), + /* U+28400 */ WIDTH(2), + /* U+28500 */ WIDTH(2), + /* U+28600 */ WIDTH(2), + /* U+28700 */ WIDTH(2), + /* U+28800 */ WIDTH(2), + /* U+28900 */ WIDTH(2), + /* U+28A00 */ WIDTH(2), + /* U+28B00 */ WIDTH(2), + /* U+28C00 */ WIDTH(2), + /* U+28D00 */ WIDTH(2), + /* U+28E00 */ WIDTH(2), + /* U+28F00 */ WIDTH(2), + /* U+29000 */ WIDTH(2), + /* U+29100 */ WIDTH(2), + /* U+29200 */ WIDTH(2), + /* U+29300 */ WIDTH(2), + /* U+29400 */ WIDTH(2), + /* U+29500 */ WIDTH(2), + /* U+29600 */ WIDTH(2), + /* U+29700 */ WIDTH(2), + /* U+29800 */ WIDTH(2), + /* U+29900 */ WIDTH(2), + /* U+29A00 */ WIDTH(2), + /* U+29B00 */ WIDTH(2), + /* U+29C00 */ WIDTH(2), + /* U+29D00 */ WIDTH(2), + /* U+29E00 */ WIDTH(2), + /* U+29F00 */ WIDTH(2), + /* U+2A000 */ WIDTH(2), + /* U+2A100 */ WIDTH(2), + /* U+2A200 */ WIDTH(2), + /* U+2A300 */ WIDTH(2), + /* U+2A400 */ WIDTH(2), + /* U+2A500 */ WIDTH(2), + /* U+2A600 */ WIDTH(2), + /* U+2A700 */ WIDTH(2), + /* U+2A800 */ WIDTH(2), + /* U+2A900 */ WIDTH(2), + /* U+2AA00 */ WIDTH(2), + /* U+2AB00 */ WIDTH(2), + /* U+2AC00 */ WIDTH(2), + /* U+2AD00 */ WIDTH(2), + /* U+2AE00 */ WIDTH(2), + /* U+2AF00 */ WIDTH(2), + /* U+2B000 */ WIDTH(2), + /* U+2B100 */ WIDTH(2), + /* U+2B200 */ WIDTH(2), + /* U+2B300 */ WIDTH(2), + /* U+2B400 */ WIDTH(2), + /* U+2B500 */ WIDTH(2), + /* U+2B600 */ WIDTH(2), + /* U+2B700 */ WIDTH(2), + /* U+2B800 */ WIDTH(2), + /* U+2B900 */ WIDTH(2), + /* U+2BA00 */ WIDTH(2), + /* U+2BB00 */ WIDTH(2), + /* U+2BC00 */ WIDTH(2), + /* U+2BD00 */ WIDTH(2), + /* U+2BE00 */ WIDTH(2), + /* U+2BF00 */ WIDTH(2), + /* U+2C000 */ WIDTH(2), + /* U+2C100 */ WIDTH(2), + /* U+2C200 */ WIDTH(2), + /* U+2C300 */ WIDTH(2), + /* U+2C400 */ WIDTH(2), + /* U+2C500 */ WIDTH(2), + /* U+2C600 */ WIDTH(2), + /* U+2C700 */ WIDTH(2), + /* U+2C800 */ WIDTH(2), + /* U+2C900 */ WIDTH(2), + /* U+2CA00 */ WIDTH(2), + /* U+2CB00 */ WIDTH(2), + /* U+2CC00 */ WIDTH(2), + /* U+2CD00 */ WIDTH(2), + /* U+2CE00 */ WIDTH(2), + /* U+2CF00 */ WIDTH(2), + /* U+2D000 */ WIDTH(2), + /* U+2D100 */ WIDTH(2), + /* U+2D200 */ WIDTH(2), + /* U+2D300 */ WIDTH(2), + /* U+2D400 */ WIDTH(2), + /* U+2D500 */ WIDTH(2), + /* U+2D600 */ WIDTH(2), + /* U+2D700 */ WIDTH(2), + /* U+2D800 */ WIDTH(2), + /* U+2D900 */ WIDTH(2), + /* U+2DA00 */ WIDTH(2), + /* U+2DB00 */ WIDTH(2), + /* U+2DC00 */ WIDTH(2), + /* U+2DD00 */ WIDTH(2), + /* U+2DE00 */ WIDTH(2), + /* U+2DF00 */ WIDTH(2), + /* U+2E000 */ WIDTH(2), + /* U+2E100 */ WIDTH(2), + /* U+2E200 */ WIDTH(2), + /* U+2E300 */ WIDTH(2), + /* U+2E400 */ WIDTH(2), + /* U+2E500 */ WIDTH(2), + /* U+2E600 */ WIDTH(2), + /* U+2E700 */ WIDTH(2), + /* U+2E800 */ WIDTH(2), + /* U+2E900 */ WIDTH(2), + /* U+2EA00 */ WIDTH(2), + /* U+2EB00 */ WIDTH(2), + /* U+2EC00 */ WIDTH(2), + /* U+2ED00 */ WIDTH(2), + /* U+2EE00 */ WIDTH(2), + /* U+2EF00 */ WIDTH(2), + /* U+2F000 */ WIDTH(2), + /* U+2F100 */ WIDTH(2), + /* U+2F200 */ WIDTH(2), + /* U+2F300 */ WIDTH(2), + /* U+2F400 */ WIDTH(2), + /* U+2F500 */ WIDTH(2), + /* U+2F600 */ WIDTH(2), + /* U+2F700 */ WIDTH(2), + /* U+2F800 */ WIDTH(2), + /* U+2F900 */ WIDTH(2), + /* U+2FA00 */ WIDTH(2), + /* U+2FB00 */ WIDTH(2), + /* U+2FC00 */ WIDTH(2), + /* U+2FD00 */ WIDTH(2), + /* U+2FE00 */ WIDTH(2), + /* U+2FF00 */ MIN_TABLE(105), + /* U+30000 */ WIDTH(2), + /* U+30100 */ WIDTH(2), + /* U+30200 */ WIDTH(2), + /* U+30300 */ WIDTH(2), + /* U+30400 */ WIDTH(2), + /* U+30500 */ WIDTH(2), + /* U+30600 */ WIDTH(2), + /* U+30700 */ WIDTH(2), + /* U+30800 */ WIDTH(2), + /* U+30900 */ WIDTH(2), + /* U+30A00 */ WIDTH(2), + /* U+30B00 */ WIDTH(2), + /* U+30C00 */ WIDTH(2), + /* U+30D00 */ WIDTH(2), + /* U+30E00 */ WIDTH(2), + /* U+30F00 */ WIDTH(2), + /* U+31000 */ WIDTH(2), + /* U+31100 */ WIDTH(2), + /* U+31200 */ WIDTH(2), + /* U+31300 */ WIDTH(2), + /* U+31400 */ WIDTH(2), + /* U+31500 */ WIDTH(2), + /* U+31600 */ WIDTH(2), + /* U+31700 */ WIDTH(2), + /* U+31800 */ WIDTH(2), + /* U+31900 */ WIDTH(2), + /* U+31A00 */ WIDTH(2), + /* U+31B00 */ WIDTH(2), + /* U+31C00 */ WIDTH(2), + /* U+31D00 */ WIDTH(2), + /* U+31E00 */ WIDTH(2), + /* U+31F00 */ WIDTH(2), + /* U+32000 */ WIDTH(2), + /* U+32100 */ WIDTH(2), + /* U+32200 */ WIDTH(2), + /* U+32300 */ WIDTH(2), + /* U+32400 */ WIDTH(2), + /* U+32500 */ WIDTH(2), + /* U+32600 */ WIDTH(2), + /* U+32700 */ WIDTH(2), + /* U+32800 */ WIDTH(2), + /* U+32900 */ WIDTH(2), + /* U+32A00 */ WIDTH(2), + /* U+32B00 */ WIDTH(2), + /* U+32C00 */ WIDTH(2), + /* U+32D00 */ WIDTH(2), + /* U+32E00 */ WIDTH(2), + /* U+32F00 */ WIDTH(2), + /* U+33000 */ WIDTH(2), + /* U+33100 */ WIDTH(2), + /* U+33200 */ WIDTH(2), + /* U+33300 */ WIDTH(2), + /* U+33400 */ WIDTH(2), + /* U+33500 */ WIDTH(2), + /* U+33600 */ WIDTH(2), + /* U+33700 */ WIDTH(2), + /* U+33800 */ WIDTH(2), + /* U+33900 */ WIDTH(2), + /* U+33A00 */ WIDTH(2), + /* U+33B00 */ WIDTH(2), + /* U+33C00 */ WIDTH(2), + /* U+33D00 */ WIDTH(2), + /* U+33E00 */ WIDTH(2), + /* U+33F00 */ WIDTH(2), + /* U+34000 */ WIDTH(2), + /* U+34100 */ WIDTH(2), + /* U+34200 */ WIDTH(2), + /* U+34300 */ WIDTH(2), + /* U+34400 */ WIDTH(2), + /* U+34500 */ WIDTH(2), + /* U+34600 */ WIDTH(2), + /* U+34700 */ WIDTH(2), + /* U+34800 */ WIDTH(2), + /* U+34900 */ WIDTH(2), + /* U+34A00 */ WIDTH(2), + /* U+34B00 */ WIDTH(2), + /* U+34C00 */ WIDTH(2), + /* U+34D00 */ WIDTH(2), + /* U+34E00 */ WIDTH(2), + /* U+34F00 */ WIDTH(2), + /* U+35000 */ WIDTH(2), + /* U+35100 */ WIDTH(2), + /* U+35200 */ WIDTH(2), + /* U+35300 */ WIDTH(2), + /* U+35400 */ WIDTH(2), + /* U+35500 */ WIDTH(2), + /* U+35600 */ WIDTH(2), + /* U+35700 */ WIDTH(2), + /* U+35800 */ WIDTH(2), + /* U+35900 */ WIDTH(2), + /* U+35A00 */ WIDTH(2), + /* U+35B00 */ WIDTH(2), + /* U+35C00 */ WIDTH(2), + /* U+35D00 */ WIDTH(2), + /* U+35E00 */ WIDTH(2), + /* U+35F00 */ WIDTH(2), + /* U+36000 */ WIDTH(2), + /* U+36100 */ WIDTH(2), + /* U+36200 */ WIDTH(2), + /* U+36300 */ WIDTH(2), + /* U+36400 */ WIDTH(2), + /* U+36500 */ WIDTH(2), + /* U+36600 */ WIDTH(2), + /* U+36700 */ WIDTH(2), + /* U+36800 */ WIDTH(2), + /* U+36900 */ WIDTH(2), + /* U+36A00 */ WIDTH(2), + /* U+36B00 */ WIDTH(2), + /* U+36C00 */ WIDTH(2), + /* U+36D00 */ WIDTH(2), + /* U+36E00 */ WIDTH(2), + /* U+36F00 */ WIDTH(2), + /* U+37000 */ WIDTH(2), + /* U+37100 */ WIDTH(2), + /* U+37200 */ WIDTH(2), + /* U+37300 */ WIDTH(2), + /* U+37400 */ WIDTH(2), + /* U+37500 */ WIDTH(2), + /* U+37600 */ WIDTH(2), + /* U+37700 */ WIDTH(2), + /* U+37800 */ WIDTH(2), + /* U+37900 */ WIDTH(2), + /* U+37A00 */ WIDTH(2), + /* U+37B00 */ WIDTH(2), + /* U+37C00 */ WIDTH(2), + /* U+37D00 */ WIDTH(2), + /* U+37E00 */ WIDTH(2), + /* U+37F00 */ WIDTH(2), + /* U+38000 */ WIDTH(2), + /* U+38100 */ WIDTH(2), + /* U+38200 */ WIDTH(2), + /* U+38300 */ WIDTH(2), + /* U+38400 */ WIDTH(2), + /* U+38500 */ WIDTH(2), + /* U+38600 */ WIDTH(2), + /* U+38700 */ WIDTH(2), + /* U+38800 */ WIDTH(2), + /* U+38900 */ WIDTH(2), + /* U+38A00 */ WIDTH(2), + /* U+38B00 */ WIDTH(2), + /* U+38C00 */ WIDTH(2), + /* U+38D00 */ WIDTH(2), + /* U+38E00 */ WIDTH(2), + /* U+38F00 */ WIDTH(2), + /* U+39000 */ WIDTH(2), + /* U+39100 */ WIDTH(2), + /* U+39200 */ WIDTH(2), + /* U+39300 */ WIDTH(2), + /* U+39400 */ WIDTH(2), + /* U+39500 */ WIDTH(2), + /* U+39600 */ WIDTH(2), + /* U+39700 */ WIDTH(2), + /* U+39800 */ WIDTH(2), + /* U+39900 */ WIDTH(2), + /* U+39A00 */ WIDTH(2), + /* U+39B00 */ WIDTH(2), + /* U+39C00 */ WIDTH(2), + /* U+39D00 */ WIDTH(2), + /* U+39E00 */ WIDTH(2), + /* U+39F00 */ WIDTH(2), + /* U+3A000 */ WIDTH(2), + /* U+3A100 */ WIDTH(2), + /* U+3A200 */ WIDTH(2), + /* U+3A300 */ WIDTH(2), + /* U+3A400 */ WIDTH(2), + /* U+3A500 */ WIDTH(2), + /* U+3A600 */ WIDTH(2), + /* U+3A700 */ WIDTH(2), + /* U+3A800 */ WIDTH(2), + /* U+3A900 */ WIDTH(2), + /* U+3AA00 */ WIDTH(2), + /* U+3AB00 */ WIDTH(2), + /* U+3AC00 */ WIDTH(2), + /* U+3AD00 */ WIDTH(2), + /* U+3AE00 */ WIDTH(2), + /* U+3AF00 */ WIDTH(2), + /* U+3B000 */ WIDTH(2), + /* U+3B100 */ WIDTH(2), + /* U+3B200 */ WIDTH(2), + /* U+3B300 */ WIDTH(2), + /* U+3B400 */ WIDTH(2), + /* U+3B500 */ WIDTH(2), + /* U+3B600 */ WIDTH(2), + /* U+3B700 */ WIDTH(2), + /* U+3B800 */ WIDTH(2), + /* U+3B900 */ WIDTH(2), + /* U+3BA00 */ WIDTH(2), + /* U+3BB00 */ WIDTH(2), + /* U+3BC00 */ WIDTH(2), + /* U+3BD00 */ WIDTH(2), + /* U+3BE00 */ WIDTH(2), + /* U+3BF00 */ WIDTH(2), + /* U+3C000 */ WIDTH(2), + /* U+3C100 */ WIDTH(2), + /* U+3C200 */ WIDTH(2), + /* U+3C300 */ WIDTH(2), + /* U+3C400 */ WIDTH(2), + /* U+3C500 */ WIDTH(2), + /* U+3C600 */ WIDTH(2), + /* U+3C700 */ WIDTH(2), + /* U+3C800 */ WIDTH(2), + /* U+3C900 */ WIDTH(2), + /* U+3CA00 */ WIDTH(2), + /* U+3CB00 */ WIDTH(2), + /* U+3CC00 */ WIDTH(2), + /* U+3CD00 */ WIDTH(2), + /* U+3CE00 */ WIDTH(2), + /* U+3CF00 */ WIDTH(2), + /* U+3D000 */ WIDTH(2), + /* U+3D100 */ WIDTH(2), + /* U+3D200 */ WIDTH(2), + /* U+3D300 */ WIDTH(2), + /* U+3D400 */ WIDTH(2), + /* U+3D500 */ WIDTH(2), + /* U+3D600 */ WIDTH(2), + /* U+3D700 */ WIDTH(2), + /* U+3D800 */ WIDTH(2), + /* U+3D900 */ WIDTH(2), + /* U+3DA00 */ WIDTH(2), + /* U+3DB00 */ WIDTH(2), + /* U+3DC00 */ WIDTH(2), + /* U+3DD00 */ WIDTH(2), + /* U+3DE00 */ WIDTH(2), + /* U+3DF00 */ WIDTH(2), + /* U+3E000 */ WIDTH(2), + /* U+3E100 */ WIDTH(2), + /* U+3E200 */ WIDTH(2), + /* U+3E300 */ WIDTH(2), + /* U+3E400 */ WIDTH(2), + /* U+3E500 */ WIDTH(2), + /* U+3E600 */ WIDTH(2), + /* U+3E700 */ WIDTH(2), + /* U+3E800 */ WIDTH(2), + /* U+3E900 */ WIDTH(2), + /* U+3EA00 */ WIDTH(2), + /* U+3EB00 */ WIDTH(2), + /* U+3EC00 */ WIDTH(2), + /* U+3ED00 */ WIDTH(2), + /* U+3EE00 */ WIDTH(2), + /* U+3EF00 */ WIDTH(2), + /* U+3F000 */ WIDTH(2), + /* U+3F100 */ WIDTH(2), + /* U+3F200 */ WIDTH(2), + /* U+3F300 */ WIDTH(2), + /* U+3F400 */ WIDTH(2), + /* U+3F500 */ WIDTH(2), + /* U+3F600 */ WIDTH(2), + /* U+3F700 */ WIDTH(2), + /* U+3F800 */ WIDTH(2), + /* U+3F900 */ WIDTH(2), + /* U+3FA00 */ WIDTH(2), + /* U+3FB00 */ WIDTH(2), + /* U+3FC00 */ WIDTH(2), + /* U+3FD00 */ WIDTH(2), + /* U+3FE00 */ WIDTH(2), + /* U+3FF00 */ MIN_TABLE(105), + /* U+40000 */ WIDTH(1), + /* U+40100 */ WIDTH(1), + /* U+40200 */ WIDTH(1), + /* U+40300 */ WIDTH(1), + /* U+40400 */ WIDTH(1), + /* U+40500 */ WIDTH(1), + /* U+40600 */ WIDTH(1), + /* U+40700 */ WIDTH(1), + /* U+40800 */ WIDTH(1), + /* U+40900 */ WIDTH(1), + /* U+40A00 */ WIDTH(1), + /* U+40B00 */ WIDTH(1), + /* U+40C00 */ WIDTH(1), + /* U+40D00 */ WIDTH(1), + /* U+40E00 */ WIDTH(1), + /* U+40F00 */ WIDTH(1), + /* U+41000 */ WIDTH(1), + /* U+41100 */ WIDTH(1), + /* U+41200 */ WIDTH(1), + /* U+41300 */ WIDTH(1), + /* U+41400 */ WIDTH(1), + /* U+41500 */ WIDTH(1), + /* U+41600 */ WIDTH(1), + /* U+41700 */ WIDTH(1), + /* U+41800 */ WIDTH(1), + /* U+41900 */ WIDTH(1), + /* U+41A00 */ WIDTH(1), + /* U+41B00 */ WIDTH(1), + /* U+41C00 */ WIDTH(1), + /* U+41D00 */ WIDTH(1), + /* U+41E00 */ WIDTH(1), + /* U+41F00 */ WIDTH(1), + /* U+42000 */ WIDTH(1), + /* U+42100 */ WIDTH(1), + /* U+42200 */ WIDTH(1), + /* U+42300 */ WIDTH(1), + /* U+42400 */ WIDTH(1), + /* U+42500 */ WIDTH(1), + /* U+42600 */ WIDTH(1), + /* U+42700 */ WIDTH(1), + /* U+42800 */ WIDTH(1), + /* U+42900 */ WIDTH(1), + /* U+42A00 */ WIDTH(1), + /* U+42B00 */ WIDTH(1), + /* U+42C00 */ WIDTH(1), + /* U+42D00 */ WIDTH(1), + /* U+42E00 */ WIDTH(1), + /* U+42F00 */ WIDTH(1), + /* U+43000 */ WIDTH(1), + /* U+43100 */ WIDTH(1), + /* U+43200 */ WIDTH(1), + /* U+43300 */ WIDTH(1), + /* U+43400 */ WIDTH(1), + /* U+43500 */ WIDTH(1), + /* U+43600 */ WIDTH(1), + /* U+43700 */ WIDTH(1), + /* U+43800 */ WIDTH(1), + /* U+43900 */ WIDTH(1), + /* U+43A00 */ WIDTH(1), + /* U+43B00 */ WIDTH(1), + /* U+43C00 */ WIDTH(1), + /* U+43D00 */ WIDTH(1), + /* U+43E00 */ WIDTH(1), + /* U+43F00 */ WIDTH(1), + /* U+44000 */ WIDTH(1), + /* U+44100 */ WIDTH(1), + /* U+44200 */ WIDTH(1), + /* U+44300 */ WIDTH(1), + /* U+44400 */ WIDTH(1), + /* U+44500 */ WIDTH(1), + /* U+44600 */ WIDTH(1), + /* U+44700 */ WIDTH(1), + /* U+44800 */ WIDTH(1), + /* U+44900 */ WIDTH(1), + /* U+44A00 */ WIDTH(1), + /* U+44B00 */ WIDTH(1), + /* U+44C00 */ WIDTH(1), + /* U+44D00 */ WIDTH(1), + /* U+44E00 */ WIDTH(1), + /* U+44F00 */ WIDTH(1), + /* U+45000 */ WIDTH(1), + /* U+45100 */ WIDTH(1), + /* U+45200 */ WIDTH(1), + /* U+45300 */ WIDTH(1), + /* U+45400 */ WIDTH(1), + /* U+45500 */ WIDTH(1), + /* U+45600 */ WIDTH(1), + /* U+45700 */ WIDTH(1), + /* U+45800 */ WIDTH(1), + /* U+45900 */ WIDTH(1), + /* U+45A00 */ WIDTH(1), + /* U+45B00 */ WIDTH(1), + /* U+45C00 */ WIDTH(1), + /* U+45D00 */ WIDTH(1), + /* U+45E00 */ WIDTH(1), + /* U+45F00 */ WIDTH(1), + /* U+46000 */ WIDTH(1), + /* U+46100 */ WIDTH(1), + /* U+46200 */ WIDTH(1), + /* U+46300 */ WIDTH(1), + /* U+46400 */ WIDTH(1), + /* U+46500 */ WIDTH(1), + /* U+46600 */ WIDTH(1), + /* U+46700 */ WIDTH(1), + /* U+46800 */ WIDTH(1), + /* U+46900 */ WIDTH(1), + /* U+46A00 */ WIDTH(1), + /* U+46B00 */ WIDTH(1), + /* U+46C00 */ WIDTH(1), + /* U+46D00 */ WIDTH(1), + /* U+46E00 */ WIDTH(1), + /* U+46F00 */ WIDTH(1), + /* U+47000 */ WIDTH(1), + /* U+47100 */ WIDTH(1), + /* U+47200 */ WIDTH(1), + /* U+47300 */ WIDTH(1), + /* U+47400 */ WIDTH(1), + /* U+47500 */ WIDTH(1), + /* U+47600 */ WIDTH(1), + /* U+47700 */ WIDTH(1), + /* U+47800 */ WIDTH(1), + /* U+47900 */ WIDTH(1), + /* U+47A00 */ WIDTH(1), + /* U+47B00 */ WIDTH(1), + /* U+47C00 */ WIDTH(1), + /* U+47D00 */ WIDTH(1), + /* U+47E00 */ WIDTH(1), + /* U+47F00 */ WIDTH(1), + /* U+48000 */ WIDTH(1), + /* U+48100 */ WIDTH(1), + /* U+48200 */ WIDTH(1), + /* U+48300 */ WIDTH(1), + /* U+48400 */ WIDTH(1), + /* U+48500 */ WIDTH(1), + /* U+48600 */ WIDTH(1), + /* U+48700 */ WIDTH(1), + /* U+48800 */ WIDTH(1), + /* U+48900 */ WIDTH(1), + /* U+48A00 */ WIDTH(1), + /* U+48B00 */ WIDTH(1), + /* U+48C00 */ WIDTH(1), + /* U+48D00 */ WIDTH(1), + /* U+48E00 */ WIDTH(1), + /* U+48F00 */ WIDTH(1), + /* U+49000 */ WIDTH(1), + /* U+49100 */ WIDTH(1), + /* U+49200 */ WIDTH(1), + /* U+49300 */ WIDTH(1), + /* U+49400 */ WIDTH(1), + /* U+49500 */ WIDTH(1), + /* U+49600 */ WIDTH(1), + /* U+49700 */ WIDTH(1), + /* U+49800 */ WIDTH(1), + /* U+49900 */ WIDTH(1), + /* U+49A00 */ WIDTH(1), + /* U+49B00 */ WIDTH(1), + /* U+49C00 */ WIDTH(1), + /* U+49D00 */ WIDTH(1), + /* U+49E00 */ WIDTH(1), + /* U+49F00 */ WIDTH(1), + /* U+4A000 */ WIDTH(1), + /* U+4A100 */ WIDTH(1), + /* U+4A200 */ WIDTH(1), + /* U+4A300 */ WIDTH(1), + /* U+4A400 */ WIDTH(1), + /* U+4A500 */ WIDTH(1), + /* U+4A600 */ WIDTH(1), + /* U+4A700 */ WIDTH(1), + /* U+4A800 */ WIDTH(1), + /* U+4A900 */ WIDTH(1), + /* U+4AA00 */ WIDTH(1), + /* U+4AB00 */ WIDTH(1), + /* U+4AC00 */ WIDTH(1), + /* U+4AD00 */ WIDTH(1), + /* U+4AE00 */ WIDTH(1), + /* U+4AF00 */ WIDTH(1), + /* U+4B000 */ WIDTH(1), + /* U+4B100 */ WIDTH(1), + /* U+4B200 */ WIDTH(1), + /* U+4B300 */ WIDTH(1), + /* U+4B400 */ WIDTH(1), + /* U+4B500 */ WIDTH(1), + /* U+4B600 */ WIDTH(1), + /* U+4B700 */ WIDTH(1), + /* U+4B800 */ WIDTH(1), + /* U+4B900 */ WIDTH(1), + /* U+4BA00 */ WIDTH(1), + /* U+4BB00 */ WIDTH(1), + /* U+4BC00 */ WIDTH(1), + /* U+4BD00 */ WIDTH(1), + /* U+4BE00 */ WIDTH(1), + /* U+4BF00 */ WIDTH(1), + /* U+4C000 */ WIDTH(1), + /* U+4C100 */ WIDTH(1), + /* U+4C200 */ WIDTH(1), + /* U+4C300 */ WIDTH(1), + /* U+4C400 */ WIDTH(1), + /* U+4C500 */ WIDTH(1), + /* U+4C600 */ WIDTH(1), + /* U+4C700 */ WIDTH(1), + /* U+4C800 */ WIDTH(1), + /* U+4C900 */ WIDTH(1), + /* U+4CA00 */ WIDTH(1), + /* U+4CB00 */ WIDTH(1), + /* U+4CC00 */ WIDTH(1), + /* U+4CD00 */ WIDTH(1), + /* U+4CE00 */ WIDTH(1), + /* U+4CF00 */ WIDTH(1), + /* U+4D000 */ WIDTH(1), + /* U+4D100 */ WIDTH(1), + /* U+4D200 */ WIDTH(1), + /* U+4D300 */ WIDTH(1), + /* U+4D400 */ WIDTH(1), + /* U+4D500 */ WIDTH(1), + /* U+4D600 */ WIDTH(1), + /* U+4D700 */ WIDTH(1), + /* U+4D800 */ WIDTH(1), + /* U+4D900 */ WIDTH(1), + /* U+4DA00 */ WIDTH(1), + /* U+4DB00 */ WIDTH(1), + /* U+4DC00 */ WIDTH(1), + /* U+4DD00 */ WIDTH(1), + /* U+4DE00 */ WIDTH(1), + /* U+4DF00 */ WIDTH(1), + /* U+4E000 */ WIDTH(1), + /* U+4E100 */ WIDTH(1), + /* U+4E200 */ WIDTH(1), + /* U+4E300 */ WIDTH(1), + /* U+4E400 */ WIDTH(1), + /* U+4E500 */ WIDTH(1), + /* U+4E600 */ WIDTH(1), + /* U+4E700 */ WIDTH(1), + /* U+4E800 */ WIDTH(1), + /* U+4E900 */ WIDTH(1), + /* U+4EA00 */ WIDTH(1), + /* U+4EB00 */ WIDTH(1), + /* U+4EC00 */ WIDTH(1), + /* U+4ED00 */ WIDTH(1), + /* U+4EE00 */ WIDTH(1), + /* U+4EF00 */ WIDTH(1), + /* U+4F000 */ WIDTH(1), + /* U+4F100 */ WIDTH(1), + /* U+4F200 */ WIDTH(1), + /* U+4F300 */ WIDTH(1), + /* U+4F400 */ WIDTH(1), + /* U+4F500 */ WIDTH(1), + /* U+4F600 */ WIDTH(1), + /* U+4F700 */ WIDTH(1), + /* U+4F800 */ WIDTH(1), + /* U+4F900 */ WIDTH(1), + /* U+4FA00 */ WIDTH(1), + /* U+4FB00 */ WIDTH(1), + /* U+4FC00 */ WIDTH(1), + /* U+4FD00 */ WIDTH(1), + /* U+4FE00 */ WIDTH(1), + /* U+4FF00 */ WIDTH(1), + /* U+50000 */ WIDTH(1), + /* U+50100 */ WIDTH(1), + /* U+50200 */ WIDTH(1), + /* U+50300 */ WIDTH(1), + /* U+50400 */ WIDTH(1), + /* U+50500 */ WIDTH(1), + /* U+50600 */ WIDTH(1), + /* U+50700 */ WIDTH(1), + /* U+50800 */ WIDTH(1), + /* U+50900 */ WIDTH(1), + /* U+50A00 */ WIDTH(1), + /* U+50B00 */ WIDTH(1), + /* U+50C00 */ WIDTH(1), + /* U+50D00 */ WIDTH(1), + /* U+50E00 */ WIDTH(1), + /* U+50F00 */ WIDTH(1), + /* U+51000 */ WIDTH(1), + /* U+51100 */ WIDTH(1), + /* U+51200 */ WIDTH(1), + /* U+51300 */ WIDTH(1), + /* U+51400 */ WIDTH(1), + /* U+51500 */ WIDTH(1), + /* U+51600 */ WIDTH(1), + /* U+51700 */ WIDTH(1), + /* U+51800 */ WIDTH(1), + /* U+51900 */ WIDTH(1), + /* U+51A00 */ WIDTH(1), + /* U+51B00 */ WIDTH(1), + /* U+51C00 */ WIDTH(1), + /* U+51D00 */ WIDTH(1), + /* U+51E00 */ WIDTH(1), + /* U+51F00 */ WIDTH(1), + /* U+52000 */ WIDTH(1), + /* U+52100 */ WIDTH(1), + /* U+52200 */ WIDTH(1), + /* U+52300 */ WIDTH(1), + /* U+52400 */ WIDTH(1), + /* U+52500 */ WIDTH(1), + /* U+52600 */ WIDTH(1), + /* U+52700 */ WIDTH(1), + /* U+52800 */ WIDTH(1), + /* U+52900 */ WIDTH(1), + /* U+52A00 */ WIDTH(1), + /* U+52B00 */ WIDTH(1), + /* U+52C00 */ WIDTH(1), + /* U+52D00 */ WIDTH(1), + /* U+52E00 */ WIDTH(1), + /* U+52F00 */ WIDTH(1), + /* U+53000 */ WIDTH(1), + /* U+53100 */ WIDTH(1), + /* U+53200 */ WIDTH(1), + /* U+53300 */ WIDTH(1), + /* U+53400 */ WIDTH(1), + /* U+53500 */ WIDTH(1), + /* U+53600 */ WIDTH(1), + /* U+53700 */ WIDTH(1), + /* U+53800 */ WIDTH(1), + /* U+53900 */ WIDTH(1), + /* U+53A00 */ WIDTH(1), + /* U+53B00 */ WIDTH(1), + /* U+53C00 */ WIDTH(1), + /* U+53D00 */ WIDTH(1), + /* U+53E00 */ WIDTH(1), + /* U+53F00 */ WIDTH(1), + /* U+54000 */ WIDTH(1), + /* U+54100 */ WIDTH(1), + /* U+54200 */ WIDTH(1), + /* U+54300 */ WIDTH(1), + /* U+54400 */ WIDTH(1), + /* U+54500 */ WIDTH(1), + /* U+54600 */ WIDTH(1), + /* U+54700 */ WIDTH(1), + /* U+54800 */ WIDTH(1), + /* U+54900 */ WIDTH(1), + /* U+54A00 */ WIDTH(1), + /* U+54B00 */ WIDTH(1), + /* U+54C00 */ WIDTH(1), + /* U+54D00 */ WIDTH(1), + /* U+54E00 */ WIDTH(1), + /* U+54F00 */ WIDTH(1), + /* U+55000 */ WIDTH(1), + /* U+55100 */ WIDTH(1), + /* U+55200 */ WIDTH(1), + /* U+55300 */ WIDTH(1), + /* U+55400 */ WIDTH(1), + /* U+55500 */ WIDTH(1), + /* U+55600 */ WIDTH(1), + /* U+55700 */ WIDTH(1), + /* U+55800 */ WIDTH(1), + /* U+55900 */ WIDTH(1), + /* U+55A00 */ WIDTH(1), + /* U+55B00 */ WIDTH(1), + /* U+55C00 */ WIDTH(1), + /* U+55D00 */ WIDTH(1), + /* U+55E00 */ WIDTH(1), + /* U+55F00 */ WIDTH(1), + /* U+56000 */ WIDTH(1), + /* U+56100 */ WIDTH(1), + /* U+56200 */ WIDTH(1), + /* U+56300 */ WIDTH(1), + /* U+56400 */ WIDTH(1), + /* U+56500 */ WIDTH(1), + /* U+56600 */ WIDTH(1), + /* U+56700 */ WIDTH(1), + /* U+56800 */ WIDTH(1), + /* U+56900 */ WIDTH(1), + /* U+56A00 */ WIDTH(1), + /* U+56B00 */ WIDTH(1), + /* U+56C00 */ WIDTH(1), + /* U+56D00 */ WIDTH(1), + /* U+56E00 */ WIDTH(1), + /* U+56F00 */ WIDTH(1), + /* U+57000 */ WIDTH(1), + /* U+57100 */ WIDTH(1), + /* U+57200 */ WIDTH(1), + /* U+57300 */ WIDTH(1), + /* U+57400 */ WIDTH(1), + /* U+57500 */ WIDTH(1), + /* U+57600 */ WIDTH(1), + /* U+57700 */ WIDTH(1), + /* U+57800 */ WIDTH(1), + /* U+57900 */ WIDTH(1), + /* U+57A00 */ WIDTH(1), + /* U+57B00 */ WIDTH(1), + /* U+57C00 */ WIDTH(1), + /* U+57D00 */ WIDTH(1), + /* U+57E00 */ WIDTH(1), + /* U+57F00 */ WIDTH(1), + /* U+58000 */ WIDTH(1), + /* U+58100 */ WIDTH(1), + /* U+58200 */ WIDTH(1), + /* U+58300 */ WIDTH(1), + /* U+58400 */ WIDTH(1), + /* U+58500 */ WIDTH(1), + /* U+58600 */ WIDTH(1), + /* U+58700 */ WIDTH(1), + /* U+58800 */ WIDTH(1), + /* U+58900 */ WIDTH(1), + /* U+58A00 */ WIDTH(1), + /* U+58B00 */ WIDTH(1), + /* U+58C00 */ WIDTH(1), + /* U+58D00 */ WIDTH(1), + /* U+58E00 */ WIDTH(1), + /* U+58F00 */ WIDTH(1), + /* U+59000 */ WIDTH(1), + /* U+59100 */ WIDTH(1), + /* U+59200 */ WIDTH(1), + /* U+59300 */ WIDTH(1), + /* U+59400 */ WIDTH(1), + /* U+59500 */ WIDTH(1), + /* U+59600 */ WIDTH(1), + /* U+59700 */ WIDTH(1), + /* U+59800 */ WIDTH(1), + /* U+59900 */ WIDTH(1), + /* U+59A00 */ WIDTH(1), + /* U+59B00 */ WIDTH(1), + /* U+59C00 */ WIDTH(1), + /* U+59D00 */ WIDTH(1), + /* U+59E00 */ WIDTH(1), + /* U+59F00 */ WIDTH(1), + /* U+5A000 */ WIDTH(1), + /* U+5A100 */ WIDTH(1), + /* U+5A200 */ WIDTH(1), + /* U+5A300 */ WIDTH(1), + /* U+5A400 */ WIDTH(1), + /* U+5A500 */ WIDTH(1), + /* U+5A600 */ WIDTH(1), + /* U+5A700 */ WIDTH(1), + /* U+5A800 */ WIDTH(1), + /* U+5A900 */ WIDTH(1), + /* U+5AA00 */ WIDTH(1), + /* U+5AB00 */ WIDTH(1), + /* U+5AC00 */ WIDTH(1), + /* U+5AD00 */ WIDTH(1), + /* U+5AE00 */ WIDTH(1), + /* U+5AF00 */ WIDTH(1), + /* U+5B000 */ WIDTH(1), + /* U+5B100 */ WIDTH(1), + /* U+5B200 */ WIDTH(1), + /* U+5B300 */ WIDTH(1), + /* U+5B400 */ WIDTH(1), + /* U+5B500 */ WIDTH(1), + /* U+5B600 */ WIDTH(1), + /* U+5B700 */ WIDTH(1), + /* U+5B800 */ WIDTH(1), + /* U+5B900 */ WIDTH(1), + /* U+5BA00 */ WIDTH(1), + /* U+5BB00 */ WIDTH(1), + /* U+5BC00 */ WIDTH(1), + /* U+5BD00 */ WIDTH(1), + /* U+5BE00 */ WIDTH(1), + /* U+5BF00 */ WIDTH(1), + /* U+5C000 */ WIDTH(1), + /* U+5C100 */ WIDTH(1), + /* U+5C200 */ WIDTH(1), + /* U+5C300 */ WIDTH(1), + /* U+5C400 */ WIDTH(1), + /* U+5C500 */ WIDTH(1), + /* U+5C600 */ WIDTH(1), + /* U+5C700 */ WIDTH(1), + /* U+5C800 */ WIDTH(1), + /* U+5C900 */ WIDTH(1), + /* U+5CA00 */ WIDTH(1), + /* U+5CB00 */ WIDTH(1), + /* U+5CC00 */ WIDTH(1), + /* U+5CD00 */ WIDTH(1), + /* U+5CE00 */ WIDTH(1), + /* U+5CF00 */ WIDTH(1), + /* U+5D000 */ WIDTH(1), + /* U+5D100 */ WIDTH(1), + /* U+5D200 */ WIDTH(1), + /* U+5D300 */ WIDTH(1), + /* U+5D400 */ WIDTH(1), + /* U+5D500 */ WIDTH(1), + /* U+5D600 */ WIDTH(1), + /* U+5D700 */ WIDTH(1), + /* U+5D800 */ WIDTH(1), + /* U+5D900 */ WIDTH(1), + /* U+5DA00 */ WIDTH(1), + /* U+5DB00 */ WIDTH(1), + /* U+5DC00 */ WIDTH(1), + /* U+5DD00 */ WIDTH(1), + /* U+5DE00 */ WIDTH(1), + /* U+5DF00 */ WIDTH(1), + /* U+5E000 */ WIDTH(1), + /* U+5E100 */ WIDTH(1), + /* U+5E200 */ WIDTH(1), + /* U+5E300 */ WIDTH(1), + /* U+5E400 */ WIDTH(1), + /* U+5E500 */ WIDTH(1), + /* U+5E600 */ WIDTH(1), + /* U+5E700 */ WIDTH(1), + /* U+5E800 */ WIDTH(1), + /* U+5E900 */ WIDTH(1), + /* U+5EA00 */ WIDTH(1), + /* U+5EB00 */ WIDTH(1), + /* U+5EC00 */ WIDTH(1), + /* U+5ED00 */ WIDTH(1), + /* U+5EE00 */ WIDTH(1), + /* U+5EF00 */ WIDTH(1), + /* U+5F000 */ WIDTH(1), + /* U+5F100 */ WIDTH(1), + /* U+5F200 */ WIDTH(1), + /* U+5F300 */ WIDTH(1), + /* U+5F400 */ WIDTH(1), + /* U+5F500 */ WIDTH(1), + /* U+5F600 */ WIDTH(1), + /* U+5F700 */ WIDTH(1), + /* U+5F800 */ WIDTH(1), + /* U+5F900 */ WIDTH(1), + /* U+5FA00 */ WIDTH(1), + /* U+5FB00 */ WIDTH(1), + /* U+5FC00 */ WIDTH(1), + /* U+5FD00 */ WIDTH(1), + /* U+5FE00 */ WIDTH(1), + /* U+5FF00 */ WIDTH(1), + /* U+60000 */ WIDTH(1), + /* U+60100 */ WIDTH(1), + /* U+60200 */ WIDTH(1), + /* U+60300 */ WIDTH(1), + /* U+60400 */ WIDTH(1), + /* U+60500 */ WIDTH(1), + /* U+60600 */ WIDTH(1), + /* U+60700 */ WIDTH(1), + /* U+60800 */ WIDTH(1), + /* U+60900 */ WIDTH(1), + /* U+60A00 */ WIDTH(1), + /* U+60B00 */ WIDTH(1), + /* U+60C00 */ WIDTH(1), + /* U+60D00 */ WIDTH(1), + /* U+60E00 */ WIDTH(1), + /* U+60F00 */ WIDTH(1), + /* U+61000 */ WIDTH(1), + /* U+61100 */ WIDTH(1), + /* U+61200 */ WIDTH(1), + /* U+61300 */ WIDTH(1), + /* U+61400 */ WIDTH(1), + /* U+61500 */ WIDTH(1), + /* U+61600 */ WIDTH(1), + /* U+61700 */ WIDTH(1), + /* U+61800 */ WIDTH(1), + /* U+61900 */ WIDTH(1), + /* U+61A00 */ WIDTH(1), + /* U+61B00 */ WIDTH(1), + /* U+61C00 */ WIDTH(1), + /* U+61D00 */ WIDTH(1), + /* U+61E00 */ WIDTH(1), + /* U+61F00 */ WIDTH(1), + /* U+62000 */ WIDTH(1), + /* U+62100 */ WIDTH(1), + /* U+62200 */ WIDTH(1), + /* U+62300 */ WIDTH(1), + /* U+62400 */ WIDTH(1), + /* U+62500 */ WIDTH(1), + /* U+62600 */ WIDTH(1), + /* U+62700 */ WIDTH(1), + /* U+62800 */ WIDTH(1), + /* U+62900 */ WIDTH(1), + /* U+62A00 */ WIDTH(1), + /* U+62B00 */ WIDTH(1), + /* U+62C00 */ WIDTH(1), + /* U+62D00 */ WIDTH(1), + /* U+62E00 */ WIDTH(1), + /* U+62F00 */ WIDTH(1), + /* U+63000 */ WIDTH(1), + /* U+63100 */ WIDTH(1), + /* U+63200 */ WIDTH(1), + /* U+63300 */ WIDTH(1), + /* U+63400 */ WIDTH(1), + /* U+63500 */ WIDTH(1), + /* U+63600 */ WIDTH(1), + /* U+63700 */ WIDTH(1), + /* U+63800 */ WIDTH(1), + /* U+63900 */ WIDTH(1), + /* U+63A00 */ WIDTH(1), + /* U+63B00 */ WIDTH(1), + /* U+63C00 */ WIDTH(1), + /* U+63D00 */ WIDTH(1), + /* U+63E00 */ WIDTH(1), + /* U+63F00 */ WIDTH(1), + /* U+64000 */ WIDTH(1), + /* U+64100 */ WIDTH(1), + /* U+64200 */ WIDTH(1), + /* U+64300 */ WIDTH(1), + /* U+64400 */ WIDTH(1), + /* U+64500 */ WIDTH(1), + /* U+64600 */ WIDTH(1), + /* U+64700 */ WIDTH(1), + /* U+64800 */ WIDTH(1), + /* U+64900 */ WIDTH(1), + /* U+64A00 */ WIDTH(1), + /* U+64B00 */ WIDTH(1), + /* U+64C00 */ WIDTH(1), + /* U+64D00 */ WIDTH(1), + /* U+64E00 */ WIDTH(1), + /* U+64F00 */ WIDTH(1), + /* U+65000 */ WIDTH(1), + /* U+65100 */ WIDTH(1), + /* U+65200 */ WIDTH(1), + /* U+65300 */ WIDTH(1), + /* U+65400 */ WIDTH(1), + /* U+65500 */ WIDTH(1), + /* U+65600 */ WIDTH(1), + /* U+65700 */ WIDTH(1), + /* U+65800 */ WIDTH(1), + /* U+65900 */ WIDTH(1), + /* U+65A00 */ WIDTH(1), + /* U+65B00 */ WIDTH(1), + /* U+65C00 */ WIDTH(1), + /* U+65D00 */ WIDTH(1), + /* U+65E00 */ WIDTH(1), + /* U+65F00 */ WIDTH(1), + /* U+66000 */ WIDTH(1), + /* U+66100 */ WIDTH(1), + /* U+66200 */ WIDTH(1), + /* U+66300 */ WIDTH(1), + /* U+66400 */ WIDTH(1), + /* U+66500 */ WIDTH(1), + /* U+66600 */ WIDTH(1), + /* U+66700 */ WIDTH(1), + /* U+66800 */ WIDTH(1), + /* U+66900 */ WIDTH(1), + /* U+66A00 */ WIDTH(1), + /* U+66B00 */ WIDTH(1), + /* U+66C00 */ WIDTH(1), + /* U+66D00 */ WIDTH(1), + /* U+66E00 */ WIDTH(1), + /* U+66F00 */ WIDTH(1), + /* U+67000 */ WIDTH(1), + /* U+67100 */ WIDTH(1), + /* U+67200 */ WIDTH(1), + /* U+67300 */ WIDTH(1), + /* U+67400 */ WIDTH(1), + /* U+67500 */ WIDTH(1), + /* U+67600 */ WIDTH(1), + /* U+67700 */ WIDTH(1), + /* U+67800 */ WIDTH(1), + /* U+67900 */ WIDTH(1), + /* U+67A00 */ WIDTH(1), + /* U+67B00 */ WIDTH(1), + /* U+67C00 */ WIDTH(1), + /* U+67D00 */ WIDTH(1), + /* U+67E00 */ WIDTH(1), + /* U+67F00 */ WIDTH(1), + /* U+68000 */ WIDTH(1), + /* U+68100 */ WIDTH(1), + /* U+68200 */ WIDTH(1), + /* U+68300 */ WIDTH(1), + /* U+68400 */ WIDTH(1), + /* U+68500 */ WIDTH(1), + /* U+68600 */ WIDTH(1), + /* U+68700 */ WIDTH(1), + /* U+68800 */ WIDTH(1), + /* U+68900 */ WIDTH(1), + /* U+68A00 */ WIDTH(1), + /* U+68B00 */ WIDTH(1), + /* U+68C00 */ WIDTH(1), + /* U+68D00 */ WIDTH(1), + /* U+68E00 */ WIDTH(1), + /* U+68F00 */ WIDTH(1), + /* U+69000 */ WIDTH(1), + /* U+69100 */ WIDTH(1), + /* U+69200 */ WIDTH(1), + /* U+69300 */ WIDTH(1), + /* U+69400 */ WIDTH(1), + /* U+69500 */ WIDTH(1), + /* U+69600 */ WIDTH(1), + /* U+69700 */ WIDTH(1), + /* U+69800 */ WIDTH(1), + /* U+69900 */ WIDTH(1), + /* U+69A00 */ WIDTH(1), + /* U+69B00 */ WIDTH(1), + /* U+69C00 */ WIDTH(1), + /* U+69D00 */ WIDTH(1), + /* U+69E00 */ WIDTH(1), + /* U+69F00 */ WIDTH(1), + /* U+6A000 */ WIDTH(1), + /* U+6A100 */ WIDTH(1), + /* U+6A200 */ WIDTH(1), + /* U+6A300 */ WIDTH(1), + /* U+6A400 */ WIDTH(1), + /* U+6A500 */ WIDTH(1), + /* U+6A600 */ WIDTH(1), + /* U+6A700 */ WIDTH(1), + /* U+6A800 */ WIDTH(1), + /* U+6A900 */ WIDTH(1), + /* U+6AA00 */ WIDTH(1), + /* U+6AB00 */ WIDTH(1), + /* U+6AC00 */ WIDTH(1), + /* U+6AD00 */ WIDTH(1), + /* U+6AE00 */ WIDTH(1), + /* U+6AF00 */ WIDTH(1), + /* U+6B000 */ WIDTH(1), + /* U+6B100 */ WIDTH(1), + /* U+6B200 */ WIDTH(1), + /* U+6B300 */ WIDTH(1), + /* U+6B400 */ WIDTH(1), + /* U+6B500 */ WIDTH(1), + /* U+6B600 */ WIDTH(1), + /* U+6B700 */ WIDTH(1), + /* U+6B800 */ WIDTH(1), + /* U+6B900 */ WIDTH(1), + /* U+6BA00 */ WIDTH(1), + /* U+6BB00 */ WIDTH(1), + /* U+6BC00 */ WIDTH(1), + /* U+6BD00 */ WIDTH(1), + /* U+6BE00 */ WIDTH(1), + /* U+6BF00 */ WIDTH(1), + /* U+6C000 */ WIDTH(1), + /* U+6C100 */ WIDTH(1), + /* U+6C200 */ WIDTH(1), + /* U+6C300 */ WIDTH(1), + /* U+6C400 */ WIDTH(1), + /* U+6C500 */ WIDTH(1), + /* U+6C600 */ WIDTH(1), + /* U+6C700 */ WIDTH(1), + /* U+6C800 */ WIDTH(1), + /* U+6C900 */ WIDTH(1), + /* U+6CA00 */ WIDTH(1), + /* U+6CB00 */ WIDTH(1), + /* U+6CC00 */ WIDTH(1), + /* U+6CD00 */ WIDTH(1), + /* U+6CE00 */ WIDTH(1), + /* U+6CF00 */ WIDTH(1), + /* U+6D000 */ WIDTH(1), + /* U+6D100 */ WIDTH(1), + /* U+6D200 */ WIDTH(1), + /* U+6D300 */ WIDTH(1), + /* U+6D400 */ WIDTH(1), + /* U+6D500 */ WIDTH(1), + /* U+6D600 */ WIDTH(1), + /* U+6D700 */ WIDTH(1), + /* U+6D800 */ WIDTH(1), + /* U+6D900 */ WIDTH(1), + /* U+6DA00 */ WIDTH(1), + /* U+6DB00 */ WIDTH(1), + /* U+6DC00 */ WIDTH(1), + /* U+6DD00 */ WIDTH(1), + /* U+6DE00 */ WIDTH(1), + /* U+6DF00 */ WIDTH(1), + /* U+6E000 */ WIDTH(1), + /* U+6E100 */ WIDTH(1), + /* U+6E200 */ WIDTH(1), + /* U+6E300 */ WIDTH(1), + /* U+6E400 */ WIDTH(1), + /* U+6E500 */ WIDTH(1), + /* U+6E600 */ WIDTH(1), + /* U+6E700 */ WIDTH(1), + /* U+6E800 */ WIDTH(1), + /* U+6E900 */ WIDTH(1), + /* U+6EA00 */ WIDTH(1), + /* U+6EB00 */ WIDTH(1), + /* U+6EC00 */ WIDTH(1), + /* U+6ED00 */ WIDTH(1), + /* U+6EE00 */ WIDTH(1), + /* U+6EF00 */ WIDTH(1), + /* U+6F000 */ WIDTH(1), + /* U+6F100 */ WIDTH(1), + /* U+6F200 */ WIDTH(1), + /* U+6F300 */ WIDTH(1), + /* U+6F400 */ WIDTH(1), + /* U+6F500 */ WIDTH(1), + /* U+6F600 */ WIDTH(1), + /* U+6F700 */ WIDTH(1), + /* U+6F800 */ WIDTH(1), + /* U+6F900 */ WIDTH(1), + /* U+6FA00 */ WIDTH(1), + /* U+6FB00 */ WIDTH(1), + /* U+6FC00 */ WIDTH(1), + /* U+6FD00 */ WIDTH(1), + /* U+6FE00 */ WIDTH(1), + /* U+6FF00 */ WIDTH(1), + /* U+70000 */ WIDTH(1), + /* U+70100 */ WIDTH(1), + /* U+70200 */ WIDTH(1), + /* U+70300 */ WIDTH(1), + /* U+70400 */ WIDTH(1), + /* U+70500 */ WIDTH(1), + /* U+70600 */ WIDTH(1), + /* U+70700 */ WIDTH(1), + /* U+70800 */ WIDTH(1), + /* U+70900 */ WIDTH(1), + /* U+70A00 */ WIDTH(1), + /* U+70B00 */ WIDTH(1), + /* U+70C00 */ WIDTH(1), + /* U+70D00 */ WIDTH(1), + /* U+70E00 */ WIDTH(1), + /* U+70F00 */ WIDTH(1), + /* U+71000 */ WIDTH(1), + /* U+71100 */ WIDTH(1), + /* U+71200 */ WIDTH(1), + /* U+71300 */ WIDTH(1), + /* U+71400 */ WIDTH(1), + /* U+71500 */ WIDTH(1), + /* U+71600 */ WIDTH(1), + /* U+71700 */ WIDTH(1), + /* U+71800 */ WIDTH(1), + /* U+71900 */ WIDTH(1), + /* U+71A00 */ WIDTH(1), + /* U+71B00 */ WIDTH(1), + /* U+71C00 */ WIDTH(1), + /* U+71D00 */ WIDTH(1), + /* U+71E00 */ WIDTH(1), + /* U+71F00 */ WIDTH(1), + /* U+72000 */ WIDTH(1), + /* U+72100 */ WIDTH(1), + /* U+72200 */ WIDTH(1), + /* U+72300 */ WIDTH(1), + /* U+72400 */ WIDTH(1), + /* U+72500 */ WIDTH(1), + /* U+72600 */ WIDTH(1), + /* U+72700 */ WIDTH(1), + /* U+72800 */ WIDTH(1), + /* U+72900 */ WIDTH(1), + /* U+72A00 */ WIDTH(1), + /* U+72B00 */ WIDTH(1), + /* U+72C00 */ WIDTH(1), + /* U+72D00 */ WIDTH(1), + /* U+72E00 */ WIDTH(1), + /* U+72F00 */ WIDTH(1), + /* U+73000 */ WIDTH(1), + /* U+73100 */ WIDTH(1), + /* U+73200 */ WIDTH(1), + /* U+73300 */ WIDTH(1), + /* U+73400 */ WIDTH(1), + /* U+73500 */ WIDTH(1), + /* U+73600 */ WIDTH(1), + /* U+73700 */ WIDTH(1), + /* U+73800 */ WIDTH(1), + /* U+73900 */ WIDTH(1), + /* U+73A00 */ WIDTH(1), + /* U+73B00 */ WIDTH(1), + /* U+73C00 */ WIDTH(1), + /* U+73D00 */ WIDTH(1), + /* U+73E00 */ WIDTH(1), + /* U+73F00 */ WIDTH(1), + /* U+74000 */ WIDTH(1), + /* U+74100 */ WIDTH(1), + /* U+74200 */ WIDTH(1), + /* U+74300 */ WIDTH(1), + /* U+74400 */ WIDTH(1), + /* U+74500 */ WIDTH(1), + /* U+74600 */ WIDTH(1), + /* U+74700 */ WIDTH(1), + /* U+74800 */ WIDTH(1), + /* U+74900 */ WIDTH(1), + /* U+74A00 */ WIDTH(1), + /* U+74B00 */ WIDTH(1), + /* U+74C00 */ WIDTH(1), + /* U+74D00 */ WIDTH(1), + /* U+74E00 */ WIDTH(1), + /* U+74F00 */ WIDTH(1), + /* U+75000 */ WIDTH(1), + /* U+75100 */ WIDTH(1), + /* U+75200 */ WIDTH(1), + /* U+75300 */ WIDTH(1), + /* U+75400 */ WIDTH(1), + /* U+75500 */ WIDTH(1), + /* U+75600 */ WIDTH(1), + /* U+75700 */ WIDTH(1), + /* U+75800 */ WIDTH(1), + /* U+75900 */ WIDTH(1), + /* U+75A00 */ WIDTH(1), + /* U+75B00 */ WIDTH(1), + /* U+75C00 */ WIDTH(1), + /* U+75D00 */ WIDTH(1), + /* U+75E00 */ WIDTH(1), + /* U+75F00 */ WIDTH(1), + /* U+76000 */ WIDTH(1), + /* U+76100 */ WIDTH(1), + /* U+76200 */ WIDTH(1), + /* U+76300 */ WIDTH(1), + /* U+76400 */ WIDTH(1), + /* U+76500 */ WIDTH(1), + /* U+76600 */ WIDTH(1), + /* U+76700 */ WIDTH(1), + /* U+76800 */ WIDTH(1), + /* U+76900 */ WIDTH(1), + /* U+76A00 */ WIDTH(1), + /* U+76B00 */ WIDTH(1), + /* U+76C00 */ WIDTH(1), + /* U+76D00 */ WIDTH(1), + /* U+76E00 */ WIDTH(1), + /* U+76F00 */ WIDTH(1), + /* U+77000 */ WIDTH(1), + /* U+77100 */ WIDTH(1), + /* U+77200 */ WIDTH(1), + /* U+77300 */ WIDTH(1), + /* U+77400 */ WIDTH(1), + /* U+77500 */ WIDTH(1), + /* U+77600 */ WIDTH(1), + /* U+77700 */ WIDTH(1), + /* U+77800 */ WIDTH(1), + /* U+77900 */ WIDTH(1), + /* U+77A00 */ WIDTH(1), + /* U+77B00 */ WIDTH(1), + /* U+77C00 */ WIDTH(1), + /* U+77D00 */ WIDTH(1), + /* U+77E00 */ WIDTH(1), + /* U+77F00 */ WIDTH(1), + /* U+78000 */ WIDTH(1), + /* U+78100 */ WIDTH(1), + /* U+78200 */ WIDTH(1), + /* U+78300 */ WIDTH(1), + /* U+78400 */ WIDTH(1), + /* U+78500 */ WIDTH(1), + /* U+78600 */ WIDTH(1), + /* U+78700 */ WIDTH(1), + /* U+78800 */ WIDTH(1), + /* U+78900 */ WIDTH(1), + /* U+78A00 */ WIDTH(1), + /* U+78B00 */ WIDTH(1), + /* U+78C00 */ WIDTH(1), + /* U+78D00 */ WIDTH(1), + /* U+78E00 */ WIDTH(1), + /* U+78F00 */ WIDTH(1), + /* U+79000 */ WIDTH(1), + /* U+79100 */ WIDTH(1), + /* U+79200 */ WIDTH(1), + /* U+79300 */ WIDTH(1), + /* U+79400 */ WIDTH(1), + /* U+79500 */ WIDTH(1), + /* U+79600 */ WIDTH(1), + /* U+79700 */ WIDTH(1), + /* U+79800 */ WIDTH(1), + /* U+79900 */ WIDTH(1), + /* U+79A00 */ WIDTH(1), + /* U+79B00 */ WIDTH(1), + /* U+79C00 */ WIDTH(1), + /* U+79D00 */ WIDTH(1), + /* U+79E00 */ WIDTH(1), + /* U+79F00 */ WIDTH(1), + /* U+7A000 */ WIDTH(1), + /* U+7A100 */ WIDTH(1), + /* U+7A200 */ WIDTH(1), + /* U+7A300 */ WIDTH(1), + /* U+7A400 */ WIDTH(1), + /* U+7A500 */ WIDTH(1), + /* U+7A600 */ WIDTH(1), + /* U+7A700 */ WIDTH(1), + /* U+7A800 */ WIDTH(1), + /* U+7A900 */ WIDTH(1), + /* U+7AA00 */ WIDTH(1), + /* U+7AB00 */ WIDTH(1), + /* U+7AC00 */ WIDTH(1), + /* U+7AD00 */ WIDTH(1), + /* U+7AE00 */ WIDTH(1), + /* U+7AF00 */ WIDTH(1), + /* U+7B000 */ WIDTH(1), + /* U+7B100 */ WIDTH(1), + /* U+7B200 */ WIDTH(1), + /* U+7B300 */ WIDTH(1), + /* U+7B400 */ WIDTH(1), + /* U+7B500 */ WIDTH(1), + /* U+7B600 */ WIDTH(1), + /* U+7B700 */ WIDTH(1), + /* U+7B800 */ WIDTH(1), + /* U+7B900 */ WIDTH(1), + /* U+7BA00 */ WIDTH(1), + /* U+7BB00 */ WIDTH(1), + /* U+7BC00 */ WIDTH(1), + /* U+7BD00 */ WIDTH(1), + /* U+7BE00 */ WIDTH(1), + /* U+7BF00 */ WIDTH(1), + /* U+7C000 */ WIDTH(1), + /* U+7C100 */ WIDTH(1), + /* U+7C200 */ WIDTH(1), + /* U+7C300 */ WIDTH(1), + /* U+7C400 */ WIDTH(1), + /* U+7C500 */ WIDTH(1), + /* U+7C600 */ WIDTH(1), + /* U+7C700 */ WIDTH(1), + /* U+7C800 */ WIDTH(1), + /* U+7C900 */ WIDTH(1), + /* U+7CA00 */ WIDTH(1), + /* U+7CB00 */ WIDTH(1), + /* U+7CC00 */ WIDTH(1), + /* U+7CD00 */ WIDTH(1), + /* U+7CE00 */ WIDTH(1), + /* U+7CF00 */ WIDTH(1), + /* U+7D000 */ WIDTH(1), + /* U+7D100 */ WIDTH(1), + /* U+7D200 */ WIDTH(1), + /* U+7D300 */ WIDTH(1), + /* U+7D400 */ WIDTH(1), + /* U+7D500 */ WIDTH(1), + /* U+7D600 */ WIDTH(1), + /* U+7D700 */ WIDTH(1), + /* U+7D800 */ WIDTH(1), + /* U+7D900 */ WIDTH(1), + /* U+7DA00 */ WIDTH(1), + /* U+7DB00 */ WIDTH(1), + /* U+7DC00 */ WIDTH(1), + /* U+7DD00 */ WIDTH(1), + /* U+7DE00 */ WIDTH(1), + /* U+7DF00 */ WIDTH(1), + /* U+7E000 */ WIDTH(1), + /* U+7E100 */ WIDTH(1), + /* U+7E200 */ WIDTH(1), + /* U+7E300 */ WIDTH(1), + /* U+7E400 */ WIDTH(1), + /* U+7E500 */ WIDTH(1), + /* U+7E600 */ WIDTH(1), + /* U+7E700 */ WIDTH(1), + /* U+7E800 */ WIDTH(1), + /* U+7E900 */ WIDTH(1), + /* U+7EA00 */ WIDTH(1), + /* U+7EB00 */ WIDTH(1), + /* U+7EC00 */ WIDTH(1), + /* U+7ED00 */ WIDTH(1), + /* U+7EE00 */ WIDTH(1), + /* U+7EF00 */ WIDTH(1), + /* U+7F000 */ WIDTH(1), + /* U+7F100 */ WIDTH(1), + /* U+7F200 */ WIDTH(1), + /* U+7F300 */ WIDTH(1), + /* U+7F400 */ WIDTH(1), + /* U+7F500 */ WIDTH(1), + /* U+7F600 */ WIDTH(1), + /* U+7F700 */ WIDTH(1), + /* U+7F800 */ WIDTH(1), + /* U+7F900 */ WIDTH(1), + /* U+7FA00 */ WIDTH(1), + /* U+7FB00 */ WIDTH(1), + /* U+7FC00 */ WIDTH(1), + /* U+7FD00 */ WIDTH(1), + /* U+7FE00 */ WIDTH(1), + /* U+7FF00 */ WIDTH(1), + /* U+80000 */ WIDTH(1), + /* U+80100 */ WIDTH(1), + /* U+80200 */ WIDTH(1), + /* U+80300 */ WIDTH(1), + /* U+80400 */ WIDTH(1), + /* U+80500 */ WIDTH(1), + /* U+80600 */ WIDTH(1), + /* U+80700 */ WIDTH(1), + /* U+80800 */ WIDTH(1), + /* U+80900 */ WIDTH(1), + /* U+80A00 */ WIDTH(1), + /* U+80B00 */ WIDTH(1), + /* U+80C00 */ WIDTH(1), + /* U+80D00 */ WIDTH(1), + /* U+80E00 */ WIDTH(1), + /* U+80F00 */ WIDTH(1), + /* U+81000 */ WIDTH(1), + /* U+81100 */ WIDTH(1), + /* U+81200 */ WIDTH(1), + /* U+81300 */ WIDTH(1), + /* U+81400 */ WIDTH(1), + /* U+81500 */ WIDTH(1), + /* U+81600 */ WIDTH(1), + /* U+81700 */ WIDTH(1), + /* U+81800 */ WIDTH(1), + /* U+81900 */ WIDTH(1), + /* U+81A00 */ WIDTH(1), + /* U+81B00 */ WIDTH(1), + /* U+81C00 */ WIDTH(1), + /* U+81D00 */ WIDTH(1), + /* U+81E00 */ WIDTH(1), + /* U+81F00 */ WIDTH(1), + /* U+82000 */ WIDTH(1), + /* U+82100 */ WIDTH(1), + /* U+82200 */ WIDTH(1), + /* U+82300 */ WIDTH(1), + /* U+82400 */ WIDTH(1), + /* U+82500 */ WIDTH(1), + /* U+82600 */ WIDTH(1), + /* U+82700 */ WIDTH(1), + /* U+82800 */ WIDTH(1), + /* U+82900 */ WIDTH(1), + /* U+82A00 */ WIDTH(1), + /* U+82B00 */ WIDTH(1), + /* U+82C00 */ WIDTH(1), + /* U+82D00 */ WIDTH(1), + /* U+82E00 */ WIDTH(1), + /* U+82F00 */ WIDTH(1), + /* U+83000 */ WIDTH(1), + /* U+83100 */ WIDTH(1), + /* U+83200 */ WIDTH(1), + /* U+83300 */ WIDTH(1), + /* U+83400 */ WIDTH(1), + /* U+83500 */ WIDTH(1), + /* U+83600 */ WIDTH(1), + /* U+83700 */ WIDTH(1), + /* U+83800 */ WIDTH(1), + /* U+83900 */ WIDTH(1), + /* U+83A00 */ WIDTH(1), + /* U+83B00 */ WIDTH(1), + /* U+83C00 */ WIDTH(1), + /* U+83D00 */ WIDTH(1), + /* U+83E00 */ WIDTH(1), + /* U+83F00 */ WIDTH(1), + /* U+84000 */ WIDTH(1), + /* U+84100 */ WIDTH(1), + /* U+84200 */ WIDTH(1), + /* U+84300 */ WIDTH(1), + /* U+84400 */ WIDTH(1), + /* U+84500 */ WIDTH(1), + /* U+84600 */ WIDTH(1), + /* U+84700 */ WIDTH(1), + /* U+84800 */ WIDTH(1), + /* U+84900 */ WIDTH(1), + /* U+84A00 */ WIDTH(1), + /* U+84B00 */ WIDTH(1), + /* U+84C00 */ WIDTH(1), + /* U+84D00 */ WIDTH(1), + /* U+84E00 */ WIDTH(1), + /* U+84F00 */ WIDTH(1), + /* U+85000 */ WIDTH(1), + /* U+85100 */ WIDTH(1), + /* U+85200 */ WIDTH(1), + /* U+85300 */ WIDTH(1), + /* U+85400 */ WIDTH(1), + /* U+85500 */ WIDTH(1), + /* U+85600 */ WIDTH(1), + /* U+85700 */ WIDTH(1), + /* U+85800 */ WIDTH(1), + /* U+85900 */ WIDTH(1), + /* U+85A00 */ WIDTH(1), + /* U+85B00 */ WIDTH(1), + /* U+85C00 */ WIDTH(1), + /* U+85D00 */ WIDTH(1), + /* U+85E00 */ WIDTH(1), + /* U+85F00 */ WIDTH(1), + /* U+86000 */ WIDTH(1), + /* U+86100 */ WIDTH(1), + /* U+86200 */ WIDTH(1), + /* U+86300 */ WIDTH(1), + /* U+86400 */ WIDTH(1), + /* U+86500 */ WIDTH(1), + /* U+86600 */ WIDTH(1), + /* U+86700 */ WIDTH(1), + /* U+86800 */ WIDTH(1), + /* U+86900 */ WIDTH(1), + /* U+86A00 */ WIDTH(1), + /* U+86B00 */ WIDTH(1), + /* U+86C00 */ WIDTH(1), + /* U+86D00 */ WIDTH(1), + /* U+86E00 */ WIDTH(1), + /* U+86F00 */ WIDTH(1), + /* U+87000 */ WIDTH(1), + /* U+87100 */ WIDTH(1), + /* U+87200 */ WIDTH(1), + /* U+87300 */ WIDTH(1), + /* U+87400 */ WIDTH(1), + /* U+87500 */ WIDTH(1), + /* U+87600 */ WIDTH(1), + /* U+87700 */ WIDTH(1), + /* U+87800 */ WIDTH(1), + /* U+87900 */ WIDTH(1), + /* U+87A00 */ WIDTH(1), + /* U+87B00 */ WIDTH(1), + /* U+87C00 */ WIDTH(1), + /* U+87D00 */ WIDTH(1), + /* U+87E00 */ WIDTH(1), + /* U+87F00 */ WIDTH(1), + /* U+88000 */ WIDTH(1), + /* U+88100 */ WIDTH(1), + /* U+88200 */ WIDTH(1), + /* U+88300 */ WIDTH(1), + /* U+88400 */ WIDTH(1), + /* U+88500 */ WIDTH(1), + /* U+88600 */ WIDTH(1), + /* U+88700 */ WIDTH(1), + /* U+88800 */ WIDTH(1), + /* U+88900 */ WIDTH(1), + /* U+88A00 */ WIDTH(1), + /* U+88B00 */ WIDTH(1), + /* U+88C00 */ WIDTH(1), + /* U+88D00 */ WIDTH(1), + /* U+88E00 */ WIDTH(1), + /* U+88F00 */ WIDTH(1), + /* U+89000 */ WIDTH(1), + /* U+89100 */ WIDTH(1), + /* U+89200 */ WIDTH(1), + /* U+89300 */ WIDTH(1), + /* U+89400 */ WIDTH(1), + /* U+89500 */ WIDTH(1), + /* U+89600 */ WIDTH(1), + /* U+89700 */ WIDTH(1), + /* U+89800 */ WIDTH(1), + /* U+89900 */ WIDTH(1), + /* U+89A00 */ WIDTH(1), + /* U+89B00 */ WIDTH(1), + /* U+89C00 */ WIDTH(1), + /* U+89D00 */ WIDTH(1), + /* U+89E00 */ WIDTH(1), + /* U+89F00 */ WIDTH(1), + /* U+8A000 */ WIDTH(1), + /* U+8A100 */ WIDTH(1), + /* U+8A200 */ WIDTH(1), + /* U+8A300 */ WIDTH(1), + /* U+8A400 */ WIDTH(1), + /* U+8A500 */ WIDTH(1), + /* U+8A600 */ WIDTH(1), + /* U+8A700 */ WIDTH(1), + /* U+8A800 */ WIDTH(1), + /* U+8A900 */ WIDTH(1), + /* U+8AA00 */ WIDTH(1), + /* U+8AB00 */ WIDTH(1), + /* U+8AC00 */ WIDTH(1), + /* U+8AD00 */ WIDTH(1), + /* U+8AE00 */ WIDTH(1), + /* U+8AF00 */ WIDTH(1), + /* U+8B000 */ WIDTH(1), + /* U+8B100 */ WIDTH(1), + /* U+8B200 */ WIDTH(1), + /* U+8B300 */ WIDTH(1), + /* U+8B400 */ WIDTH(1), + /* U+8B500 */ WIDTH(1), + /* U+8B600 */ WIDTH(1), + /* U+8B700 */ WIDTH(1), + /* U+8B800 */ WIDTH(1), + /* U+8B900 */ WIDTH(1), + /* U+8BA00 */ WIDTH(1), + /* U+8BB00 */ WIDTH(1), + /* U+8BC00 */ WIDTH(1), + /* U+8BD00 */ WIDTH(1), + /* U+8BE00 */ WIDTH(1), + /* U+8BF00 */ WIDTH(1), + /* U+8C000 */ WIDTH(1), + /* U+8C100 */ WIDTH(1), + /* U+8C200 */ WIDTH(1), + /* U+8C300 */ WIDTH(1), + /* U+8C400 */ WIDTH(1), + /* U+8C500 */ WIDTH(1), + /* U+8C600 */ WIDTH(1), + /* U+8C700 */ WIDTH(1), + /* U+8C800 */ WIDTH(1), + /* U+8C900 */ WIDTH(1), + /* U+8CA00 */ WIDTH(1), + /* U+8CB00 */ WIDTH(1), + /* U+8CC00 */ WIDTH(1), + /* U+8CD00 */ WIDTH(1), + /* U+8CE00 */ WIDTH(1), + /* U+8CF00 */ WIDTH(1), + /* U+8D000 */ WIDTH(1), + /* U+8D100 */ WIDTH(1), + /* U+8D200 */ WIDTH(1), + /* U+8D300 */ WIDTH(1), + /* U+8D400 */ WIDTH(1), + /* U+8D500 */ WIDTH(1), + /* U+8D600 */ WIDTH(1), + /* U+8D700 */ WIDTH(1), + /* U+8D800 */ WIDTH(1), + /* U+8D900 */ WIDTH(1), + /* U+8DA00 */ WIDTH(1), + /* U+8DB00 */ WIDTH(1), + /* U+8DC00 */ WIDTH(1), + /* U+8DD00 */ WIDTH(1), + /* U+8DE00 */ WIDTH(1), + /* U+8DF00 */ WIDTH(1), + /* U+8E000 */ WIDTH(1), + /* U+8E100 */ WIDTH(1), + /* U+8E200 */ WIDTH(1), + /* U+8E300 */ WIDTH(1), + /* U+8E400 */ WIDTH(1), + /* U+8E500 */ WIDTH(1), + /* U+8E600 */ WIDTH(1), + /* U+8E700 */ WIDTH(1), + /* U+8E800 */ WIDTH(1), + /* U+8E900 */ WIDTH(1), + /* U+8EA00 */ WIDTH(1), + /* U+8EB00 */ WIDTH(1), + /* U+8EC00 */ WIDTH(1), + /* U+8ED00 */ WIDTH(1), + /* U+8EE00 */ WIDTH(1), + /* U+8EF00 */ WIDTH(1), + /* U+8F000 */ WIDTH(1), + /* U+8F100 */ WIDTH(1), + /* U+8F200 */ WIDTH(1), + /* U+8F300 */ WIDTH(1), + /* U+8F400 */ WIDTH(1), + /* U+8F500 */ WIDTH(1), + /* U+8F600 */ WIDTH(1), + /* U+8F700 */ WIDTH(1), + /* U+8F800 */ WIDTH(1), + /* U+8F900 */ WIDTH(1), + /* U+8FA00 */ WIDTH(1), + /* U+8FB00 */ WIDTH(1), + /* U+8FC00 */ WIDTH(1), + /* U+8FD00 */ WIDTH(1), + /* U+8FE00 */ WIDTH(1), + /* U+8FF00 */ WIDTH(1), + /* U+90000 */ WIDTH(1), + /* U+90100 */ WIDTH(1), + /* U+90200 */ WIDTH(1), + /* U+90300 */ WIDTH(1), + /* U+90400 */ WIDTH(1), + /* U+90500 */ WIDTH(1), + /* U+90600 */ WIDTH(1), + /* U+90700 */ WIDTH(1), + /* U+90800 */ WIDTH(1), + /* U+90900 */ WIDTH(1), + /* U+90A00 */ WIDTH(1), + /* U+90B00 */ WIDTH(1), + /* U+90C00 */ WIDTH(1), + /* U+90D00 */ WIDTH(1), + /* U+90E00 */ WIDTH(1), + /* U+90F00 */ WIDTH(1), + /* U+91000 */ WIDTH(1), + /* U+91100 */ WIDTH(1), + /* U+91200 */ WIDTH(1), + /* U+91300 */ WIDTH(1), + /* U+91400 */ WIDTH(1), + /* U+91500 */ WIDTH(1), + /* U+91600 */ WIDTH(1), + /* U+91700 */ WIDTH(1), + /* U+91800 */ WIDTH(1), + /* U+91900 */ WIDTH(1), + /* U+91A00 */ WIDTH(1), + /* U+91B00 */ WIDTH(1), + /* U+91C00 */ WIDTH(1), + /* U+91D00 */ WIDTH(1), + /* U+91E00 */ WIDTH(1), + /* U+91F00 */ WIDTH(1), + /* U+92000 */ WIDTH(1), + /* U+92100 */ WIDTH(1), + /* U+92200 */ WIDTH(1), + /* U+92300 */ WIDTH(1), + /* U+92400 */ WIDTH(1), + /* U+92500 */ WIDTH(1), + /* U+92600 */ WIDTH(1), + /* U+92700 */ WIDTH(1), + /* U+92800 */ WIDTH(1), + /* U+92900 */ WIDTH(1), + /* U+92A00 */ WIDTH(1), + /* U+92B00 */ WIDTH(1), + /* U+92C00 */ WIDTH(1), + /* U+92D00 */ WIDTH(1), + /* U+92E00 */ WIDTH(1), + /* U+92F00 */ WIDTH(1), + /* U+93000 */ WIDTH(1), + /* U+93100 */ WIDTH(1), + /* U+93200 */ WIDTH(1), + /* U+93300 */ WIDTH(1), + /* U+93400 */ WIDTH(1), + /* U+93500 */ WIDTH(1), + /* U+93600 */ WIDTH(1), + /* U+93700 */ WIDTH(1), + /* U+93800 */ WIDTH(1), + /* U+93900 */ WIDTH(1), + /* U+93A00 */ WIDTH(1), + /* U+93B00 */ WIDTH(1), + /* U+93C00 */ WIDTH(1), + /* U+93D00 */ WIDTH(1), + /* U+93E00 */ WIDTH(1), + /* U+93F00 */ WIDTH(1), + /* U+94000 */ WIDTH(1), + /* U+94100 */ WIDTH(1), + /* U+94200 */ WIDTH(1), + /* U+94300 */ WIDTH(1), + /* U+94400 */ WIDTH(1), + /* U+94500 */ WIDTH(1), + /* U+94600 */ WIDTH(1), + /* U+94700 */ WIDTH(1), + /* U+94800 */ WIDTH(1), + /* U+94900 */ WIDTH(1), + /* U+94A00 */ WIDTH(1), + /* U+94B00 */ WIDTH(1), + /* U+94C00 */ WIDTH(1), + /* U+94D00 */ WIDTH(1), + /* U+94E00 */ WIDTH(1), + /* U+94F00 */ WIDTH(1), + /* U+95000 */ WIDTH(1), + /* U+95100 */ WIDTH(1), + /* U+95200 */ WIDTH(1), + /* U+95300 */ WIDTH(1), + /* U+95400 */ WIDTH(1), + /* U+95500 */ WIDTH(1), + /* U+95600 */ WIDTH(1), + /* U+95700 */ WIDTH(1), + /* U+95800 */ WIDTH(1), + /* U+95900 */ WIDTH(1), + /* U+95A00 */ WIDTH(1), + /* U+95B00 */ WIDTH(1), + /* U+95C00 */ WIDTH(1), + /* U+95D00 */ WIDTH(1), + /* U+95E00 */ WIDTH(1), + /* U+95F00 */ WIDTH(1), + /* U+96000 */ WIDTH(1), + /* U+96100 */ WIDTH(1), + /* U+96200 */ WIDTH(1), + /* U+96300 */ WIDTH(1), + /* U+96400 */ WIDTH(1), + /* U+96500 */ WIDTH(1), + /* U+96600 */ WIDTH(1), + /* U+96700 */ WIDTH(1), + /* U+96800 */ WIDTH(1), + /* U+96900 */ WIDTH(1), + /* U+96A00 */ WIDTH(1), + /* U+96B00 */ WIDTH(1), + /* U+96C00 */ WIDTH(1), + /* U+96D00 */ WIDTH(1), + /* U+96E00 */ WIDTH(1), + /* U+96F00 */ WIDTH(1), + /* U+97000 */ WIDTH(1), + /* U+97100 */ WIDTH(1), + /* U+97200 */ WIDTH(1), + /* U+97300 */ WIDTH(1), + /* U+97400 */ WIDTH(1), + /* U+97500 */ WIDTH(1), + /* U+97600 */ WIDTH(1), + /* U+97700 */ WIDTH(1), + /* U+97800 */ WIDTH(1), + /* U+97900 */ WIDTH(1), + /* U+97A00 */ WIDTH(1), + /* U+97B00 */ WIDTH(1), + /* U+97C00 */ WIDTH(1), + /* U+97D00 */ WIDTH(1), + /* U+97E00 */ WIDTH(1), + /* U+97F00 */ WIDTH(1), + /* U+98000 */ WIDTH(1), + /* U+98100 */ WIDTH(1), + /* U+98200 */ WIDTH(1), + /* U+98300 */ WIDTH(1), + /* U+98400 */ WIDTH(1), + /* U+98500 */ WIDTH(1), + /* U+98600 */ WIDTH(1), + /* U+98700 */ WIDTH(1), + /* U+98800 */ WIDTH(1), + /* U+98900 */ WIDTH(1), + /* U+98A00 */ WIDTH(1), + /* U+98B00 */ WIDTH(1), + /* U+98C00 */ WIDTH(1), + /* U+98D00 */ WIDTH(1), + /* U+98E00 */ WIDTH(1), + /* U+98F00 */ WIDTH(1), + /* U+99000 */ WIDTH(1), + /* U+99100 */ WIDTH(1), + /* U+99200 */ WIDTH(1), + /* U+99300 */ WIDTH(1), + /* U+99400 */ WIDTH(1), + /* U+99500 */ WIDTH(1), + /* U+99600 */ WIDTH(1), + /* U+99700 */ WIDTH(1), + /* U+99800 */ WIDTH(1), + /* U+99900 */ WIDTH(1), + /* U+99A00 */ WIDTH(1), + /* U+99B00 */ WIDTH(1), + /* U+99C00 */ WIDTH(1), + /* U+99D00 */ WIDTH(1), + /* U+99E00 */ WIDTH(1), + /* U+99F00 */ WIDTH(1), + /* U+9A000 */ WIDTH(1), + /* U+9A100 */ WIDTH(1), + /* U+9A200 */ WIDTH(1), + /* U+9A300 */ WIDTH(1), + /* U+9A400 */ WIDTH(1), + /* U+9A500 */ WIDTH(1), + /* U+9A600 */ WIDTH(1), + /* U+9A700 */ WIDTH(1), + /* U+9A800 */ WIDTH(1), + /* U+9A900 */ WIDTH(1), + /* U+9AA00 */ WIDTH(1), + /* U+9AB00 */ WIDTH(1), + /* U+9AC00 */ WIDTH(1), + /* U+9AD00 */ WIDTH(1), + /* U+9AE00 */ WIDTH(1), + /* U+9AF00 */ WIDTH(1), + /* U+9B000 */ WIDTH(1), + /* U+9B100 */ WIDTH(1), + /* U+9B200 */ WIDTH(1), + /* U+9B300 */ WIDTH(1), + /* U+9B400 */ WIDTH(1), + /* U+9B500 */ WIDTH(1), + /* U+9B600 */ WIDTH(1), + /* U+9B700 */ WIDTH(1), + /* U+9B800 */ WIDTH(1), + /* U+9B900 */ WIDTH(1), + /* U+9BA00 */ WIDTH(1), + /* U+9BB00 */ WIDTH(1), + /* U+9BC00 */ WIDTH(1), + /* U+9BD00 */ WIDTH(1), + /* U+9BE00 */ WIDTH(1), + /* U+9BF00 */ WIDTH(1), + /* U+9C000 */ WIDTH(1), + /* U+9C100 */ WIDTH(1), + /* U+9C200 */ WIDTH(1), + /* U+9C300 */ WIDTH(1), + /* U+9C400 */ WIDTH(1), + /* U+9C500 */ WIDTH(1), + /* U+9C600 */ WIDTH(1), + /* U+9C700 */ WIDTH(1), + /* U+9C800 */ WIDTH(1), + /* U+9C900 */ WIDTH(1), + /* U+9CA00 */ WIDTH(1), + /* U+9CB00 */ WIDTH(1), + /* U+9CC00 */ WIDTH(1), + /* U+9CD00 */ WIDTH(1), + /* U+9CE00 */ WIDTH(1), + /* U+9CF00 */ WIDTH(1), + /* U+9D000 */ WIDTH(1), + /* U+9D100 */ WIDTH(1), + /* U+9D200 */ WIDTH(1), + /* U+9D300 */ WIDTH(1), + /* U+9D400 */ WIDTH(1), + /* U+9D500 */ WIDTH(1), + /* U+9D600 */ WIDTH(1), + /* U+9D700 */ WIDTH(1), + /* U+9D800 */ WIDTH(1), + /* U+9D900 */ WIDTH(1), + /* U+9DA00 */ WIDTH(1), + /* U+9DB00 */ WIDTH(1), + /* U+9DC00 */ WIDTH(1), + /* U+9DD00 */ WIDTH(1), + /* U+9DE00 */ WIDTH(1), + /* U+9DF00 */ WIDTH(1), + /* U+9E000 */ WIDTH(1), + /* U+9E100 */ WIDTH(1), + /* U+9E200 */ WIDTH(1), + /* U+9E300 */ WIDTH(1), + /* U+9E400 */ WIDTH(1), + /* U+9E500 */ WIDTH(1), + /* U+9E600 */ WIDTH(1), + /* U+9E700 */ WIDTH(1), + /* U+9E800 */ WIDTH(1), + /* U+9E900 */ WIDTH(1), + /* U+9EA00 */ WIDTH(1), + /* U+9EB00 */ WIDTH(1), + /* U+9EC00 */ WIDTH(1), + /* U+9ED00 */ WIDTH(1), + /* U+9EE00 */ WIDTH(1), + /* U+9EF00 */ WIDTH(1), + /* U+9F000 */ WIDTH(1), + /* U+9F100 */ WIDTH(1), + /* U+9F200 */ WIDTH(1), + /* U+9F300 */ WIDTH(1), + /* U+9F400 */ WIDTH(1), + /* U+9F500 */ WIDTH(1), + /* U+9F600 */ WIDTH(1), + /* U+9F700 */ WIDTH(1), + /* U+9F800 */ WIDTH(1), + /* U+9F900 */ WIDTH(1), + /* U+9FA00 */ WIDTH(1), + /* U+9FB00 */ WIDTH(1), + /* U+9FC00 */ WIDTH(1), + /* U+9FD00 */ WIDTH(1), + /* U+9FE00 */ WIDTH(1), + /* U+9FF00 */ WIDTH(1), + /* U+A0000 */ WIDTH(1), + /* U+A0100 */ WIDTH(1), + /* U+A0200 */ WIDTH(1), + /* U+A0300 */ WIDTH(1), + /* U+A0400 */ WIDTH(1), + /* U+A0500 */ WIDTH(1), + /* U+A0600 */ WIDTH(1), + /* U+A0700 */ WIDTH(1), + /* U+A0800 */ WIDTH(1), + /* U+A0900 */ WIDTH(1), + /* U+A0A00 */ WIDTH(1), + /* U+A0B00 */ WIDTH(1), + /* U+A0C00 */ WIDTH(1), + /* U+A0D00 */ WIDTH(1), + /* U+A0E00 */ WIDTH(1), + /* U+A0F00 */ WIDTH(1), + /* U+A1000 */ WIDTH(1), + /* U+A1100 */ WIDTH(1), + /* U+A1200 */ WIDTH(1), + /* U+A1300 */ WIDTH(1), + /* U+A1400 */ WIDTH(1), + /* U+A1500 */ WIDTH(1), + /* U+A1600 */ WIDTH(1), + /* U+A1700 */ WIDTH(1), + /* U+A1800 */ WIDTH(1), + /* U+A1900 */ WIDTH(1), + /* U+A1A00 */ WIDTH(1), + /* U+A1B00 */ WIDTH(1), + /* U+A1C00 */ WIDTH(1), + /* U+A1D00 */ WIDTH(1), + /* U+A1E00 */ WIDTH(1), + /* U+A1F00 */ WIDTH(1), + /* U+A2000 */ WIDTH(1), + /* U+A2100 */ WIDTH(1), + /* U+A2200 */ WIDTH(1), + /* U+A2300 */ WIDTH(1), + /* U+A2400 */ WIDTH(1), + /* U+A2500 */ WIDTH(1), + /* U+A2600 */ WIDTH(1), + /* U+A2700 */ WIDTH(1), + /* U+A2800 */ WIDTH(1), + /* U+A2900 */ WIDTH(1), + /* U+A2A00 */ WIDTH(1), + /* U+A2B00 */ WIDTH(1), + /* U+A2C00 */ WIDTH(1), + /* U+A2D00 */ WIDTH(1), + /* U+A2E00 */ WIDTH(1), + /* U+A2F00 */ WIDTH(1), + /* U+A3000 */ WIDTH(1), + /* U+A3100 */ WIDTH(1), + /* U+A3200 */ WIDTH(1), + /* U+A3300 */ WIDTH(1), + /* U+A3400 */ WIDTH(1), + /* U+A3500 */ WIDTH(1), + /* U+A3600 */ WIDTH(1), + /* U+A3700 */ WIDTH(1), + /* U+A3800 */ WIDTH(1), + /* U+A3900 */ WIDTH(1), + /* U+A3A00 */ WIDTH(1), + /* U+A3B00 */ WIDTH(1), + /* U+A3C00 */ WIDTH(1), + /* U+A3D00 */ WIDTH(1), + /* U+A3E00 */ WIDTH(1), + /* U+A3F00 */ WIDTH(1), + /* U+A4000 */ WIDTH(1), + /* U+A4100 */ WIDTH(1), + /* U+A4200 */ WIDTH(1), + /* U+A4300 */ WIDTH(1), + /* U+A4400 */ WIDTH(1), + /* U+A4500 */ WIDTH(1), + /* U+A4600 */ WIDTH(1), + /* U+A4700 */ WIDTH(1), + /* U+A4800 */ WIDTH(1), + /* U+A4900 */ WIDTH(1), + /* U+A4A00 */ WIDTH(1), + /* U+A4B00 */ WIDTH(1), + /* U+A4C00 */ WIDTH(1), + /* U+A4D00 */ WIDTH(1), + /* U+A4E00 */ WIDTH(1), + /* U+A4F00 */ WIDTH(1), + /* U+A5000 */ WIDTH(1), + /* U+A5100 */ WIDTH(1), + /* U+A5200 */ WIDTH(1), + /* U+A5300 */ WIDTH(1), + /* U+A5400 */ WIDTH(1), + /* U+A5500 */ WIDTH(1), + /* U+A5600 */ WIDTH(1), + /* U+A5700 */ WIDTH(1), + /* U+A5800 */ WIDTH(1), + /* U+A5900 */ WIDTH(1), + /* U+A5A00 */ WIDTH(1), + /* U+A5B00 */ WIDTH(1), + /* U+A5C00 */ WIDTH(1), + /* U+A5D00 */ WIDTH(1), + /* U+A5E00 */ WIDTH(1), + /* U+A5F00 */ WIDTH(1), + /* U+A6000 */ WIDTH(1), + /* U+A6100 */ WIDTH(1), + /* U+A6200 */ WIDTH(1), + /* U+A6300 */ WIDTH(1), + /* U+A6400 */ WIDTH(1), + /* U+A6500 */ WIDTH(1), + /* U+A6600 */ WIDTH(1), + /* U+A6700 */ WIDTH(1), + /* U+A6800 */ WIDTH(1), + /* U+A6900 */ WIDTH(1), + /* U+A6A00 */ WIDTH(1), + /* U+A6B00 */ WIDTH(1), + /* U+A6C00 */ WIDTH(1), + /* U+A6D00 */ WIDTH(1), + /* U+A6E00 */ WIDTH(1), + /* U+A6F00 */ WIDTH(1), + /* U+A7000 */ WIDTH(1), + /* U+A7100 */ WIDTH(1), + /* U+A7200 */ WIDTH(1), + /* U+A7300 */ WIDTH(1), + /* U+A7400 */ WIDTH(1), + /* U+A7500 */ WIDTH(1), + /* U+A7600 */ WIDTH(1), + /* U+A7700 */ WIDTH(1), + /* U+A7800 */ WIDTH(1), + /* U+A7900 */ WIDTH(1), + /* U+A7A00 */ WIDTH(1), + /* U+A7B00 */ WIDTH(1), + /* U+A7C00 */ WIDTH(1), + /* U+A7D00 */ WIDTH(1), + /* U+A7E00 */ WIDTH(1), + /* U+A7F00 */ WIDTH(1), + /* U+A8000 */ WIDTH(1), + /* U+A8100 */ WIDTH(1), + /* U+A8200 */ WIDTH(1), + /* U+A8300 */ WIDTH(1), + /* U+A8400 */ WIDTH(1), + /* U+A8500 */ WIDTH(1), + /* U+A8600 */ WIDTH(1), + /* U+A8700 */ WIDTH(1), + /* U+A8800 */ WIDTH(1), + /* U+A8900 */ WIDTH(1), + /* U+A8A00 */ WIDTH(1), + /* U+A8B00 */ WIDTH(1), + /* U+A8C00 */ WIDTH(1), + /* U+A8D00 */ WIDTH(1), + /* U+A8E00 */ WIDTH(1), + /* U+A8F00 */ WIDTH(1), + /* U+A9000 */ WIDTH(1), + /* U+A9100 */ WIDTH(1), + /* U+A9200 */ WIDTH(1), + /* U+A9300 */ WIDTH(1), + /* U+A9400 */ WIDTH(1), + /* U+A9500 */ WIDTH(1), + /* U+A9600 */ WIDTH(1), + /* U+A9700 */ WIDTH(1), + /* U+A9800 */ WIDTH(1), + /* U+A9900 */ WIDTH(1), + /* U+A9A00 */ WIDTH(1), + /* U+A9B00 */ WIDTH(1), + /* U+A9C00 */ WIDTH(1), + /* U+A9D00 */ WIDTH(1), + /* U+A9E00 */ WIDTH(1), + /* U+A9F00 */ WIDTH(1), + /* U+AA000 */ WIDTH(1), + /* U+AA100 */ WIDTH(1), + /* U+AA200 */ WIDTH(1), + /* U+AA300 */ WIDTH(1), + /* U+AA400 */ WIDTH(1), + /* U+AA500 */ WIDTH(1), + /* U+AA600 */ WIDTH(1), + /* U+AA700 */ WIDTH(1), + /* U+AA800 */ WIDTH(1), + /* U+AA900 */ WIDTH(1), + /* U+AAA00 */ WIDTH(1), + /* U+AAB00 */ WIDTH(1), + /* U+AAC00 */ WIDTH(1), + /* U+AAD00 */ WIDTH(1), + /* U+AAE00 */ WIDTH(1), + /* U+AAF00 */ WIDTH(1), + /* U+AB000 */ WIDTH(1), + /* U+AB100 */ WIDTH(1), + /* U+AB200 */ WIDTH(1), + /* U+AB300 */ WIDTH(1), + /* U+AB400 */ WIDTH(1), + /* U+AB500 */ WIDTH(1), + /* U+AB600 */ WIDTH(1), + /* U+AB700 */ WIDTH(1), + /* U+AB800 */ WIDTH(1), + /* U+AB900 */ WIDTH(1), + /* U+ABA00 */ WIDTH(1), + /* U+ABB00 */ WIDTH(1), + /* U+ABC00 */ WIDTH(1), + /* U+ABD00 */ WIDTH(1), + /* U+ABE00 */ WIDTH(1), + /* U+ABF00 */ WIDTH(1), + /* U+AC000 */ WIDTH(1), + /* U+AC100 */ WIDTH(1), + /* U+AC200 */ WIDTH(1), + /* U+AC300 */ WIDTH(1), + /* U+AC400 */ WIDTH(1), + /* U+AC500 */ WIDTH(1), + /* U+AC600 */ WIDTH(1), + /* U+AC700 */ WIDTH(1), + /* U+AC800 */ WIDTH(1), + /* U+AC900 */ WIDTH(1), + /* U+ACA00 */ WIDTH(1), + /* U+ACB00 */ WIDTH(1), + /* U+ACC00 */ WIDTH(1), + /* U+ACD00 */ WIDTH(1), + /* U+ACE00 */ WIDTH(1), + /* U+ACF00 */ WIDTH(1), + /* U+AD000 */ WIDTH(1), + /* U+AD100 */ WIDTH(1), + /* U+AD200 */ WIDTH(1), + /* U+AD300 */ WIDTH(1), + /* U+AD400 */ WIDTH(1), + /* U+AD500 */ WIDTH(1), + /* U+AD600 */ WIDTH(1), + /* U+AD700 */ WIDTH(1), + /* U+AD800 */ WIDTH(1), + /* U+AD900 */ WIDTH(1), + /* U+ADA00 */ WIDTH(1), + /* U+ADB00 */ WIDTH(1), + /* U+ADC00 */ WIDTH(1), + /* U+ADD00 */ WIDTH(1), + /* U+ADE00 */ WIDTH(1), + /* U+ADF00 */ WIDTH(1), + /* U+AE000 */ WIDTH(1), + /* U+AE100 */ WIDTH(1), + /* U+AE200 */ WIDTH(1), + /* U+AE300 */ WIDTH(1), + /* U+AE400 */ WIDTH(1), + /* U+AE500 */ WIDTH(1), + /* U+AE600 */ WIDTH(1), + /* U+AE700 */ WIDTH(1), + /* U+AE800 */ WIDTH(1), + /* U+AE900 */ WIDTH(1), + /* U+AEA00 */ WIDTH(1), + /* U+AEB00 */ WIDTH(1), + /* U+AEC00 */ WIDTH(1), + /* U+AED00 */ WIDTH(1), + /* U+AEE00 */ WIDTH(1), + /* U+AEF00 */ WIDTH(1), + /* U+AF000 */ WIDTH(1), + /* U+AF100 */ WIDTH(1), + /* U+AF200 */ WIDTH(1), + /* U+AF300 */ WIDTH(1), + /* U+AF400 */ WIDTH(1), + /* U+AF500 */ WIDTH(1), + /* U+AF600 */ WIDTH(1), + /* U+AF700 */ WIDTH(1), + /* U+AF800 */ WIDTH(1), + /* U+AF900 */ WIDTH(1), + /* U+AFA00 */ WIDTH(1), + /* U+AFB00 */ WIDTH(1), + /* U+AFC00 */ WIDTH(1), + /* U+AFD00 */ WIDTH(1), + /* U+AFE00 */ WIDTH(1), + /* U+AFF00 */ WIDTH(1), + /* U+B0000 */ WIDTH(1), + /* U+B0100 */ WIDTH(1), + /* U+B0200 */ WIDTH(1), + /* U+B0300 */ WIDTH(1), + /* U+B0400 */ WIDTH(1), + /* U+B0500 */ WIDTH(1), + /* U+B0600 */ WIDTH(1), + /* U+B0700 */ WIDTH(1), + /* U+B0800 */ WIDTH(1), + /* U+B0900 */ WIDTH(1), + /* U+B0A00 */ WIDTH(1), + /* U+B0B00 */ WIDTH(1), + /* U+B0C00 */ WIDTH(1), + /* U+B0D00 */ WIDTH(1), + /* U+B0E00 */ WIDTH(1), + /* U+B0F00 */ WIDTH(1), + /* U+B1000 */ WIDTH(1), + /* U+B1100 */ WIDTH(1), + /* U+B1200 */ WIDTH(1), + /* U+B1300 */ WIDTH(1), + /* U+B1400 */ WIDTH(1), + /* U+B1500 */ WIDTH(1), + /* U+B1600 */ WIDTH(1), + /* U+B1700 */ WIDTH(1), + /* U+B1800 */ WIDTH(1), + /* U+B1900 */ WIDTH(1), + /* U+B1A00 */ WIDTH(1), + /* U+B1B00 */ WIDTH(1), + /* U+B1C00 */ WIDTH(1), + /* U+B1D00 */ WIDTH(1), + /* U+B1E00 */ WIDTH(1), + /* U+B1F00 */ WIDTH(1), + /* U+B2000 */ WIDTH(1), + /* U+B2100 */ WIDTH(1), + /* U+B2200 */ WIDTH(1), + /* U+B2300 */ WIDTH(1), + /* U+B2400 */ WIDTH(1), + /* U+B2500 */ WIDTH(1), + /* U+B2600 */ WIDTH(1), + /* U+B2700 */ WIDTH(1), + /* U+B2800 */ WIDTH(1), + /* U+B2900 */ WIDTH(1), + /* U+B2A00 */ WIDTH(1), + /* U+B2B00 */ WIDTH(1), + /* U+B2C00 */ WIDTH(1), + /* U+B2D00 */ WIDTH(1), + /* U+B2E00 */ WIDTH(1), + /* U+B2F00 */ WIDTH(1), + /* U+B3000 */ WIDTH(1), + /* U+B3100 */ WIDTH(1), + /* U+B3200 */ WIDTH(1), + /* U+B3300 */ WIDTH(1), + /* U+B3400 */ WIDTH(1), + /* U+B3500 */ WIDTH(1), + /* U+B3600 */ WIDTH(1), + /* U+B3700 */ WIDTH(1), + /* U+B3800 */ WIDTH(1), + /* U+B3900 */ WIDTH(1), + /* U+B3A00 */ WIDTH(1), + /* U+B3B00 */ WIDTH(1), + /* U+B3C00 */ WIDTH(1), + /* U+B3D00 */ WIDTH(1), + /* U+B3E00 */ WIDTH(1), + /* U+B3F00 */ WIDTH(1), + /* U+B4000 */ WIDTH(1), + /* U+B4100 */ WIDTH(1), + /* U+B4200 */ WIDTH(1), + /* U+B4300 */ WIDTH(1), + /* U+B4400 */ WIDTH(1), + /* U+B4500 */ WIDTH(1), + /* U+B4600 */ WIDTH(1), + /* U+B4700 */ WIDTH(1), + /* U+B4800 */ WIDTH(1), + /* U+B4900 */ WIDTH(1), + /* U+B4A00 */ WIDTH(1), + /* U+B4B00 */ WIDTH(1), + /* U+B4C00 */ WIDTH(1), + /* U+B4D00 */ WIDTH(1), + /* U+B4E00 */ WIDTH(1), + /* U+B4F00 */ WIDTH(1), + /* U+B5000 */ WIDTH(1), + /* U+B5100 */ WIDTH(1), + /* U+B5200 */ WIDTH(1), + /* U+B5300 */ WIDTH(1), + /* U+B5400 */ WIDTH(1), + /* U+B5500 */ WIDTH(1), + /* U+B5600 */ WIDTH(1), + /* U+B5700 */ WIDTH(1), + /* U+B5800 */ WIDTH(1), + /* U+B5900 */ WIDTH(1), + /* U+B5A00 */ WIDTH(1), + /* U+B5B00 */ WIDTH(1), + /* U+B5C00 */ WIDTH(1), + /* U+B5D00 */ WIDTH(1), + /* U+B5E00 */ WIDTH(1), + /* U+B5F00 */ WIDTH(1), + /* U+B6000 */ WIDTH(1), + /* U+B6100 */ WIDTH(1), + /* U+B6200 */ WIDTH(1), + /* U+B6300 */ WIDTH(1), + /* U+B6400 */ WIDTH(1), + /* U+B6500 */ WIDTH(1), + /* U+B6600 */ WIDTH(1), + /* U+B6700 */ WIDTH(1), + /* U+B6800 */ WIDTH(1), + /* U+B6900 */ WIDTH(1), + /* U+B6A00 */ WIDTH(1), + /* U+B6B00 */ WIDTH(1), + /* U+B6C00 */ WIDTH(1), + /* U+B6D00 */ WIDTH(1), + /* U+B6E00 */ WIDTH(1), + /* U+B6F00 */ WIDTH(1), + /* U+B7000 */ WIDTH(1), + /* U+B7100 */ WIDTH(1), + /* U+B7200 */ WIDTH(1), + /* U+B7300 */ WIDTH(1), + /* U+B7400 */ WIDTH(1), + /* U+B7500 */ WIDTH(1), + /* U+B7600 */ WIDTH(1), + /* U+B7700 */ WIDTH(1), + /* U+B7800 */ WIDTH(1), + /* U+B7900 */ WIDTH(1), + /* U+B7A00 */ WIDTH(1), + /* U+B7B00 */ WIDTH(1), + /* U+B7C00 */ WIDTH(1), + /* U+B7D00 */ WIDTH(1), + /* U+B7E00 */ WIDTH(1), + /* U+B7F00 */ WIDTH(1), + /* U+B8000 */ WIDTH(1), + /* U+B8100 */ WIDTH(1), + /* U+B8200 */ WIDTH(1), + /* U+B8300 */ WIDTH(1), + /* U+B8400 */ WIDTH(1), + /* U+B8500 */ WIDTH(1), + /* U+B8600 */ WIDTH(1), + /* U+B8700 */ WIDTH(1), + /* U+B8800 */ WIDTH(1), + /* U+B8900 */ WIDTH(1), + /* U+B8A00 */ WIDTH(1), + /* U+B8B00 */ WIDTH(1), + /* U+B8C00 */ WIDTH(1), + /* U+B8D00 */ WIDTH(1), + /* U+B8E00 */ WIDTH(1), + /* U+B8F00 */ WIDTH(1), + /* U+B9000 */ WIDTH(1), + /* U+B9100 */ WIDTH(1), + /* U+B9200 */ WIDTH(1), + /* U+B9300 */ WIDTH(1), + /* U+B9400 */ WIDTH(1), + /* U+B9500 */ WIDTH(1), + /* U+B9600 */ WIDTH(1), + /* U+B9700 */ WIDTH(1), + /* U+B9800 */ WIDTH(1), + /* U+B9900 */ WIDTH(1), + /* U+B9A00 */ WIDTH(1), + /* U+B9B00 */ WIDTH(1), + /* U+B9C00 */ WIDTH(1), + /* U+B9D00 */ WIDTH(1), + /* U+B9E00 */ WIDTH(1), + /* U+B9F00 */ WIDTH(1), + /* U+BA000 */ WIDTH(1), + /* U+BA100 */ WIDTH(1), + /* U+BA200 */ WIDTH(1), + /* U+BA300 */ WIDTH(1), + /* U+BA400 */ WIDTH(1), + /* U+BA500 */ WIDTH(1), + /* U+BA600 */ WIDTH(1), + /* U+BA700 */ WIDTH(1), + /* U+BA800 */ WIDTH(1), + /* U+BA900 */ WIDTH(1), + /* U+BAA00 */ WIDTH(1), + /* U+BAB00 */ WIDTH(1), + /* U+BAC00 */ WIDTH(1), + /* U+BAD00 */ WIDTH(1), + /* U+BAE00 */ WIDTH(1), + /* U+BAF00 */ WIDTH(1), + /* U+BB000 */ WIDTH(1), + /* U+BB100 */ WIDTH(1), + /* U+BB200 */ WIDTH(1), + /* U+BB300 */ WIDTH(1), + /* U+BB400 */ WIDTH(1), + /* U+BB500 */ WIDTH(1), + /* U+BB600 */ WIDTH(1), + /* U+BB700 */ WIDTH(1), + /* U+BB800 */ WIDTH(1), + /* U+BB900 */ WIDTH(1), + /* U+BBA00 */ WIDTH(1), + /* U+BBB00 */ WIDTH(1), + /* U+BBC00 */ WIDTH(1), + /* U+BBD00 */ WIDTH(1), + /* U+BBE00 */ WIDTH(1), + /* U+BBF00 */ WIDTH(1), + /* U+BC000 */ WIDTH(1), + /* U+BC100 */ WIDTH(1), + /* U+BC200 */ WIDTH(1), + /* U+BC300 */ WIDTH(1), + /* U+BC400 */ WIDTH(1), + /* U+BC500 */ WIDTH(1), + /* U+BC600 */ WIDTH(1), + /* U+BC700 */ WIDTH(1), + /* U+BC800 */ WIDTH(1), + /* U+BC900 */ WIDTH(1), + /* U+BCA00 */ WIDTH(1), + /* U+BCB00 */ WIDTH(1), + /* U+BCC00 */ WIDTH(1), + /* U+BCD00 */ WIDTH(1), + /* U+BCE00 */ WIDTH(1), + /* U+BCF00 */ WIDTH(1), + /* U+BD000 */ WIDTH(1), + /* U+BD100 */ WIDTH(1), + /* U+BD200 */ WIDTH(1), + /* U+BD300 */ WIDTH(1), + /* U+BD400 */ WIDTH(1), + /* U+BD500 */ WIDTH(1), + /* U+BD600 */ WIDTH(1), + /* U+BD700 */ WIDTH(1), + /* U+BD800 */ WIDTH(1), + /* U+BD900 */ WIDTH(1), + /* U+BDA00 */ WIDTH(1), + /* U+BDB00 */ WIDTH(1), + /* U+BDC00 */ WIDTH(1), + /* U+BDD00 */ WIDTH(1), + /* U+BDE00 */ WIDTH(1), + /* U+BDF00 */ WIDTH(1), + /* U+BE000 */ WIDTH(1), + /* U+BE100 */ WIDTH(1), + /* U+BE200 */ WIDTH(1), + /* U+BE300 */ WIDTH(1), + /* U+BE400 */ WIDTH(1), + /* U+BE500 */ WIDTH(1), + /* U+BE600 */ WIDTH(1), + /* U+BE700 */ WIDTH(1), + /* U+BE800 */ WIDTH(1), + /* U+BE900 */ WIDTH(1), + /* U+BEA00 */ WIDTH(1), + /* U+BEB00 */ WIDTH(1), + /* U+BEC00 */ WIDTH(1), + /* U+BED00 */ WIDTH(1), + /* U+BEE00 */ WIDTH(1), + /* U+BEF00 */ WIDTH(1), + /* U+BF000 */ WIDTH(1), + /* U+BF100 */ WIDTH(1), + /* U+BF200 */ WIDTH(1), + /* U+BF300 */ WIDTH(1), + /* U+BF400 */ WIDTH(1), + /* U+BF500 */ WIDTH(1), + /* U+BF600 */ WIDTH(1), + /* U+BF700 */ WIDTH(1), + /* U+BF800 */ WIDTH(1), + /* U+BF900 */ WIDTH(1), + /* U+BFA00 */ WIDTH(1), + /* U+BFB00 */ WIDTH(1), + /* U+BFC00 */ WIDTH(1), + /* U+BFD00 */ WIDTH(1), + /* U+BFE00 */ WIDTH(1), + /* U+BFF00 */ WIDTH(1), + /* U+C0000 */ WIDTH(1), + /* U+C0100 */ WIDTH(1), + /* U+C0200 */ WIDTH(1), + /* U+C0300 */ WIDTH(1), + /* U+C0400 */ WIDTH(1), + /* U+C0500 */ WIDTH(1), + /* U+C0600 */ WIDTH(1), + /* U+C0700 */ WIDTH(1), + /* U+C0800 */ WIDTH(1), + /* U+C0900 */ WIDTH(1), + /* U+C0A00 */ WIDTH(1), + /* U+C0B00 */ WIDTH(1), + /* U+C0C00 */ WIDTH(1), + /* U+C0D00 */ WIDTH(1), + /* U+C0E00 */ WIDTH(1), + /* U+C0F00 */ WIDTH(1), + /* U+C1000 */ WIDTH(1), + /* U+C1100 */ WIDTH(1), + /* U+C1200 */ WIDTH(1), + /* U+C1300 */ WIDTH(1), + /* U+C1400 */ WIDTH(1), + /* U+C1500 */ WIDTH(1), + /* U+C1600 */ WIDTH(1), + /* U+C1700 */ WIDTH(1), + /* U+C1800 */ WIDTH(1), + /* U+C1900 */ WIDTH(1), + /* U+C1A00 */ WIDTH(1), + /* U+C1B00 */ WIDTH(1), + /* U+C1C00 */ WIDTH(1), + /* U+C1D00 */ WIDTH(1), + /* U+C1E00 */ WIDTH(1), + /* U+C1F00 */ WIDTH(1), + /* U+C2000 */ WIDTH(1), + /* U+C2100 */ WIDTH(1), + /* U+C2200 */ WIDTH(1), + /* U+C2300 */ WIDTH(1), + /* U+C2400 */ WIDTH(1), + /* U+C2500 */ WIDTH(1), + /* U+C2600 */ WIDTH(1), + /* U+C2700 */ WIDTH(1), + /* U+C2800 */ WIDTH(1), + /* U+C2900 */ WIDTH(1), + /* U+C2A00 */ WIDTH(1), + /* U+C2B00 */ WIDTH(1), + /* U+C2C00 */ WIDTH(1), + /* U+C2D00 */ WIDTH(1), + /* U+C2E00 */ WIDTH(1), + /* U+C2F00 */ WIDTH(1), + /* U+C3000 */ WIDTH(1), + /* U+C3100 */ WIDTH(1), + /* U+C3200 */ WIDTH(1), + /* U+C3300 */ WIDTH(1), + /* U+C3400 */ WIDTH(1), + /* U+C3500 */ WIDTH(1), + /* U+C3600 */ WIDTH(1), + /* U+C3700 */ WIDTH(1), + /* U+C3800 */ WIDTH(1), + /* U+C3900 */ WIDTH(1), + /* U+C3A00 */ WIDTH(1), + /* U+C3B00 */ WIDTH(1), + /* U+C3C00 */ WIDTH(1), + /* U+C3D00 */ WIDTH(1), + /* U+C3E00 */ WIDTH(1), + /* U+C3F00 */ WIDTH(1), + /* U+C4000 */ WIDTH(1), + /* U+C4100 */ WIDTH(1), + /* U+C4200 */ WIDTH(1), + /* U+C4300 */ WIDTH(1), + /* U+C4400 */ WIDTH(1), + /* U+C4500 */ WIDTH(1), + /* U+C4600 */ WIDTH(1), + /* U+C4700 */ WIDTH(1), + /* U+C4800 */ WIDTH(1), + /* U+C4900 */ WIDTH(1), + /* U+C4A00 */ WIDTH(1), + /* U+C4B00 */ WIDTH(1), + /* U+C4C00 */ WIDTH(1), + /* U+C4D00 */ WIDTH(1), + /* U+C4E00 */ WIDTH(1), + /* U+C4F00 */ WIDTH(1), + /* U+C5000 */ WIDTH(1), + /* U+C5100 */ WIDTH(1), + /* U+C5200 */ WIDTH(1), + /* U+C5300 */ WIDTH(1), + /* U+C5400 */ WIDTH(1), + /* U+C5500 */ WIDTH(1), + /* U+C5600 */ WIDTH(1), + /* U+C5700 */ WIDTH(1), + /* U+C5800 */ WIDTH(1), + /* U+C5900 */ WIDTH(1), + /* U+C5A00 */ WIDTH(1), + /* U+C5B00 */ WIDTH(1), + /* U+C5C00 */ WIDTH(1), + /* U+C5D00 */ WIDTH(1), + /* U+C5E00 */ WIDTH(1), + /* U+C5F00 */ WIDTH(1), + /* U+C6000 */ WIDTH(1), + /* U+C6100 */ WIDTH(1), + /* U+C6200 */ WIDTH(1), + /* U+C6300 */ WIDTH(1), + /* U+C6400 */ WIDTH(1), + /* U+C6500 */ WIDTH(1), + /* U+C6600 */ WIDTH(1), + /* U+C6700 */ WIDTH(1), + /* U+C6800 */ WIDTH(1), + /* U+C6900 */ WIDTH(1), + /* U+C6A00 */ WIDTH(1), + /* U+C6B00 */ WIDTH(1), + /* U+C6C00 */ WIDTH(1), + /* U+C6D00 */ WIDTH(1), + /* U+C6E00 */ WIDTH(1), + /* U+C6F00 */ WIDTH(1), + /* U+C7000 */ WIDTH(1), + /* U+C7100 */ WIDTH(1), + /* U+C7200 */ WIDTH(1), + /* U+C7300 */ WIDTH(1), + /* U+C7400 */ WIDTH(1), + /* U+C7500 */ WIDTH(1), + /* U+C7600 */ WIDTH(1), + /* U+C7700 */ WIDTH(1), + /* U+C7800 */ WIDTH(1), + /* U+C7900 */ WIDTH(1), + /* U+C7A00 */ WIDTH(1), + /* U+C7B00 */ WIDTH(1), + /* U+C7C00 */ WIDTH(1), + /* U+C7D00 */ WIDTH(1), + /* U+C7E00 */ WIDTH(1), + /* U+C7F00 */ WIDTH(1), + /* U+C8000 */ WIDTH(1), + /* U+C8100 */ WIDTH(1), + /* U+C8200 */ WIDTH(1), + /* U+C8300 */ WIDTH(1), + /* U+C8400 */ WIDTH(1), + /* U+C8500 */ WIDTH(1), + /* U+C8600 */ WIDTH(1), + /* U+C8700 */ WIDTH(1), + /* U+C8800 */ WIDTH(1), + /* U+C8900 */ WIDTH(1), + /* U+C8A00 */ WIDTH(1), + /* U+C8B00 */ WIDTH(1), + /* U+C8C00 */ WIDTH(1), + /* U+C8D00 */ WIDTH(1), + /* U+C8E00 */ WIDTH(1), + /* U+C8F00 */ WIDTH(1), + /* U+C9000 */ WIDTH(1), + /* U+C9100 */ WIDTH(1), + /* U+C9200 */ WIDTH(1), + /* U+C9300 */ WIDTH(1), + /* U+C9400 */ WIDTH(1), + /* U+C9500 */ WIDTH(1), + /* U+C9600 */ WIDTH(1), + /* U+C9700 */ WIDTH(1), + /* U+C9800 */ WIDTH(1), + /* U+C9900 */ WIDTH(1), + /* U+C9A00 */ WIDTH(1), + /* U+C9B00 */ WIDTH(1), + /* U+C9C00 */ WIDTH(1), + /* U+C9D00 */ WIDTH(1), + /* U+C9E00 */ WIDTH(1), + /* U+C9F00 */ WIDTH(1), + /* U+CA000 */ WIDTH(1), + /* U+CA100 */ WIDTH(1), + /* U+CA200 */ WIDTH(1), + /* U+CA300 */ WIDTH(1), + /* U+CA400 */ WIDTH(1), + /* U+CA500 */ WIDTH(1), + /* U+CA600 */ WIDTH(1), + /* U+CA700 */ WIDTH(1), + /* U+CA800 */ WIDTH(1), + /* U+CA900 */ WIDTH(1), + /* U+CAA00 */ WIDTH(1), + /* U+CAB00 */ WIDTH(1), + /* U+CAC00 */ WIDTH(1), + /* U+CAD00 */ WIDTH(1), + /* U+CAE00 */ WIDTH(1), + /* U+CAF00 */ WIDTH(1), + /* U+CB000 */ WIDTH(1), + /* U+CB100 */ WIDTH(1), + /* U+CB200 */ WIDTH(1), + /* U+CB300 */ WIDTH(1), + /* U+CB400 */ WIDTH(1), + /* U+CB500 */ WIDTH(1), + /* U+CB600 */ WIDTH(1), + /* U+CB700 */ WIDTH(1), + /* U+CB800 */ WIDTH(1), + /* U+CB900 */ WIDTH(1), + /* U+CBA00 */ WIDTH(1), + /* U+CBB00 */ WIDTH(1), + /* U+CBC00 */ WIDTH(1), + /* U+CBD00 */ WIDTH(1), + /* U+CBE00 */ WIDTH(1), + /* U+CBF00 */ WIDTH(1), + /* U+CC000 */ WIDTH(1), + /* U+CC100 */ WIDTH(1), + /* U+CC200 */ WIDTH(1), + /* U+CC300 */ WIDTH(1), + /* U+CC400 */ WIDTH(1), + /* U+CC500 */ WIDTH(1), + /* U+CC600 */ WIDTH(1), + /* U+CC700 */ WIDTH(1), + /* U+CC800 */ WIDTH(1), + /* U+CC900 */ WIDTH(1), + /* U+CCA00 */ WIDTH(1), + /* U+CCB00 */ WIDTH(1), + /* U+CCC00 */ WIDTH(1), + /* U+CCD00 */ WIDTH(1), + /* U+CCE00 */ WIDTH(1), + /* U+CCF00 */ WIDTH(1), + /* U+CD000 */ WIDTH(1), + /* U+CD100 */ WIDTH(1), + /* U+CD200 */ WIDTH(1), + /* U+CD300 */ WIDTH(1), + /* U+CD400 */ WIDTH(1), + /* U+CD500 */ WIDTH(1), + /* U+CD600 */ WIDTH(1), + /* U+CD700 */ WIDTH(1), + /* U+CD800 */ WIDTH(1), + /* U+CD900 */ WIDTH(1), + /* U+CDA00 */ WIDTH(1), + /* U+CDB00 */ WIDTH(1), + /* U+CDC00 */ WIDTH(1), + /* U+CDD00 */ WIDTH(1), + /* U+CDE00 */ WIDTH(1), + /* U+CDF00 */ WIDTH(1), + /* U+CE000 */ WIDTH(1), + /* U+CE100 */ WIDTH(1), + /* U+CE200 */ WIDTH(1), + /* U+CE300 */ WIDTH(1), + /* U+CE400 */ WIDTH(1), + /* U+CE500 */ WIDTH(1), + /* U+CE600 */ WIDTH(1), + /* U+CE700 */ WIDTH(1), + /* U+CE800 */ WIDTH(1), + /* U+CE900 */ WIDTH(1), + /* U+CEA00 */ WIDTH(1), + /* U+CEB00 */ WIDTH(1), + /* U+CEC00 */ WIDTH(1), + /* U+CED00 */ WIDTH(1), + /* U+CEE00 */ WIDTH(1), + /* U+CEF00 */ WIDTH(1), + /* U+CF000 */ WIDTH(1), + /* U+CF100 */ WIDTH(1), + /* U+CF200 */ WIDTH(1), + /* U+CF300 */ WIDTH(1), + /* U+CF400 */ WIDTH(1), + /* U+CF500 */ WIDTH(1), + /* U+CF600 */ WIDTH(1), + /* U+CF700 */ WIDTH(1), + /* U+CF800 */ WIDTH(1), + /* U+CF900 */ WIDTH(1), + /* U+CFA00 */ WIDTH(1), + /* U+CFB00 */ WIDTH(1), + /* U+CFC00 */ WIDTH(1), + /* U+CFD00 */ WIDTH(1), + /* U+CFE00 */ WIDTH(1), + /* U+CFF00 */ WIDTH(1), + /* U+D0000 */ WIDTH(1), + /* U+D0100 */ WIDTH(1), + /* U+D0200 */ WIDTH(1), + /* U+D0300 */ WIDTH(1), + /* U+D0400 */ WIDTH(1), + /* U+D0500 */ WIDTH(1), + /* U+D0600 */ WIDTH(1), + /* U+D0700 */ WIDTH(1), + /* U+D0800 */ WIDTH(1), + /* U+D0900 */ WIDTH(1), + /* U+D0A00 */ WIDTH(1), + /* U+D0B00 */ WIDTH(1), + /* U+D0C00 */ WIDTH(1), + /* U+D0D00 */ WIDTH(1), + /* U+D0E00 */ WIDTH(1), + /* U+D0F00 */ WIDTH(1), + /* U+D1000 */ WIDTH(1), + /* U+D1100 */ WIDTH(1), + /* U+D1200 */ WIDTH(1), + /* U+D1300 */ WIDTH(1), + /* U+D1400 */ WIDTH(1), + /* U+D1500 */ WIDTH(1), + /* U+D1600 */ WIDTH(1), + /* U+D1700 */ WIDTH(1), + /* U+D1800 */ WIDTH(1), + /* U+D1900 */ WIDTH(1), + /* U+D1A00 */ WIDTH(1), + /* U+D1B00 */ WIDTH(1), + /* U+D1C00 */ WIDTH(1), + /* U+D1D00 */ WIDTH(1), + /* U+D1E00 */ WIDTH(1), + /* U+D1F00 */ WIDTH(1), + /* U+D2000 */ WIDTH(1), + /* U+D2100 */ WIDTH(1), + /* U+D2200 */ WIDTH(1), + /* U+D2300 */ WIDTH(1), + /* U+D2400 */ WIDTH(1), + /* U+D2500 */ WIDTH(1), + /* U+D2600 */ WIDTH(1), + /* U+D2700 */ WIDTH(1), + /* U+D2800 */ WIDTH(1), + /* U+D2900 */ WIDTH(1), + /* U+D2A00 */ WIDTH(1), + /* U+D2B00 */ WIDTH(1), + /* U+D2C00 */ WIDTH(1), + /* U+D2D00 */ WIDTH(1), + /* U+D2E00 */ WIDTH(1), + /* U+D2F00 */ WIDTH(1), + /* U+D3000 */ WIDTH(1), + /* U+D3100 */ WIDTH(1), + /* U+D3200 */ WIDTH(1), + /* U+D3300 */ WIDTH(1), + /* U+D3400 */ WIDTH(1), + /* U+D3500 */ WIDTH(1), + /* U+D3600 */ WIDTH(1), + /* U+D3700 */ WIDTH(1), + /* U+D3800 */ WIDTH(1), + /* U+D3900 */ WIDTH(1), + /* U+D3A00 */ WIDTH(1), + /* U+D3B00 */ WIDTH(1), + /* U+D3C00 */ WIDTH(1), + /* U+D3D00 */ WIDTH(1), + /* U+D3E00 */ WIDTH(1), + /* U+D3F00 */ WIDTH(1), + /* U+D4000 */ WIDTH(1), + /* U+D4100 */ WIDTH(1), + /* U+D4200 */ WIDTH(1), + /* U+D4300 */ WIDTH(1), + /* U+D4400 */ WIDTH(1), + /* U+D4500 */ WIDTH(1), + /* U+D4600 */ WIDTH(1), + /* U+D4700 */ WIDTH(1), + /* U+D4800 */ WIDTH(1), + /* U+D4900 */ WIDTH(1), + /* U+D4A00 */ WIDTH(1), + /* U+D4B00 */ WIDTH(1), + /* U+D4C00 */ WIDTH(1), + /* U+D4D00 */ WIDTH(1), + /* U+D4E00 */ WIDTH(1), + /* U+D4F00 */ WIDTH(1), + /* U+D5000 */ WIDTH(1), + /* U+D5100 */ WIDTH(1), + /* U+D5200 */ WIDTH(1), + /* U+D5300 */ WIDTH(1), + /* U+D5400 */ WIDTH(1), + /* U+D5500 */ WIDTH(1), + /* U+D5600 */ WIDTH(1), + /* U+D5700 */ WIDTH(1), + /* U+D5800 */ WIDTH(1), + /* U+D5900 */ WIDTH(1), + /* U+D5A00 */ WIDTH(1), + /* U+D5B00 */ WIDTH(1), + /* U+D5C00 */ WIDTH(1), + /* U+D5D00 */ WIDTH(1), + /* U+D5E00 */ WIDTH(1), + /* U+D5F00 */ WIDTH(1), + /* U+D6000 */ WIDTH(1), + /* U+D6100 */ WIDTH(1), + /* U+D6200 */ WIDTH(1), + /* U+D6300 */ WIDTH(1), + /* U+D6400 */ WIDTH(1), + /* U+D6500 */ WIDTH(1), + /* U+D6600 */ WIDTH(1), + /* U+D6700 */ WIDTH(1), + /* U+D6800 */ WIDTH(1), + /* U+D6900 */ WIDTH(1), + /* U+D6A00 */ WIDTH(1), + /* U+D6B00 */ WIDTH(1), + /* U+D6C00 */ WIDTH(1), + /* U+D6D00 */ WIDTH(1), + /* U+D6E00 */ WIDTH(1), + /* U+D6F00 */ WIDTH(1), + /* U+D7000 */ WIDTH(1), + /* U+D7100 */ WIDTH(1), + /* U+D7200 */ WIDTH(1), + /* U+D7300 */ WIDTH(1), + /* U+D7400 */ WIDTH(1), + /* U+D7500 */ WIDTH(1), + /* U+D7600 */ WIDTH(1), + /* U+D7700 */ WIDTH(1), + /* U+D7800 */ WIDTH(1), + /* U+D7900 */ WIDTH(1), + /* U+D7A00 */ WIDTH(1), + /* U+D7B00 */ WIDTH(1), + /* U+D7C00 */ WIDTH(1), + /* U+D7D00 */ WIDTH(1), + /* U+D7E00 */ WIDTH(1), + /* U+D7F00 */ WIDTH(1), + /* U+D8000 */ WIDTH(1), + /* U+D8100 */ WIDTH(1), + /* U+D8200 */ WIDTH(1), + /* U+D8300 */ WIDTH(1), + /* U+D8400 */ WIDTH(1), + /* U+D8500 */ WIDTH(1), + /* U+D8600 */ WIDTH(1), + /* U+D8700 */ WIDTH(1), + /* U+D8800 */ WIDTH(1), + /* U+D8900 */ WIDTH(1), + /* U+D8A00 */ WIDTH(1), + /* U+D8B00 */ WIDTH(1), + /* U+D8C00 */ WIDTH(1), + /* U+D8D00 */ WIDTH(1), + /* U+D8E00 */ WIDTH(1), + /* U+D8F00 */ WIDTH(1), + /* U+D9000 */ WIDTH(1), + /* U+D9100 */ WIDTH(1), + /* U+D9200 */ WIDTH(1), + /* U+D9300 */ WIDTH(1), + /* U+D9400 */ WIDTH(1), + /* U+D9500 */ WIDTH(1), + /* U+D9600 */ WIDTH(1), + /* U+D9700 */ WIDTH(1), + /* U+D9800 */ WIDTH(1), + /* U+D9900 */ WIDTH(1), + /* U+D9A00 */ WIDTH(1), + /* U+D9B00 */ WIDTH(1), + /* U+D9C00 */ WIDTH(1), + /* U+D9D00 */ WIDTH(1), + /* U+D9E00 */ WIDTH(1), + /* U+D9F00 */ WIDTH(1), + /* U+DA000 */ WIDTH(1), + /* U+DA100 */ WIDTH(1), + /* U+DA200 */ WIDTH(1), + /* U+DA300 */ WIDTH(1), + /* U+DA400 */ WIDTH(1), + /* U+DA500 */ WIDTH(1), + /* U+DA600 */ WIDTH(1), + /* U+DA700 */ WIDTH(1), + /* U+DA800 */ WIDTH(1), + /* U+DA900 */ WIDTH(1), + /* U+DAA00 */ WIDTH(1), + /* U+DAB00 */ WIDTH(1), + /* U+DAC00 */ WIDTH(1), + /* U+DAD00 */ WIDTH(1), + /* U+DAE00 */ WIDTH(1), + /* U+DAF00 */ WIDTH(1), + /* U+DB000 */ WIDTH(1), + /* U+DB100 */ WIDTH(1), + /* U+DB200 */ WIDTH(1), + /* U+DB300 */ WIDTH(1), + /* U+DB400 */ WIDTH(1), + /* U+DB500 */ WIDTH(1), + /* U+DB600 */ WIDTH(1), + /* U+DB700 */ WIDTH(1), + /* U+DB800 */ WIDTH(1), + /* U+DB900 */ WIDTH(1), + /* U+DBA00 */ WIDTH(1), + /* U+DBB00 */ WIDTH(1), + /* U+DBC00 */ WIDTH(1), + /* U+DBD00 */ WIDTH(1), + /* U+DBE00 */ WIDTH(1), + /* U+DBF00 */ WIDTH(1), + /* U+DC000 */ WIDTH(1), + /* U+DC100 */ WIDTH(1), + /* U+DC200 */ WIDTH(1), + /* U+DC300 */ WIDTH(1), + /* U+DC400 */ WIDTH(1), + /* U+DC500 */ WIDTH(1), + /* U+DC600 */ WIDTH(1), + /* U+DC700 */ WIDTH(1), + /* U+DC800 */ WIDTH(1), + /* U+DC900 */ WIDTH(1), + /* U+DCA00 */ WIDTH(1), + /* U+DCB00 */ WIDTH(1), + /* U+DCC00 */ WIDTH(1), + /* U+DCD00 */ WIDTH(1), + /* U+DCE00 */ WIDTH(1), + /* U+DCF00 */ WIDTH(1), + /* U+DD000 */ WIDTH(1), + /* U+DD100 */ WIDTH(1), + /* U+DD200 */ WIDTH(1), + /* U+DD300 */ WIDTH(1), + /* U+DD400 */ WIDTH(1), + /* U+DD500 */ WIDTH(1), + /* U+DD600 */ WIDTH(1), + /* U+DD700 */ WIDTH(1), + /* U+DD800 */ WIDTH(1), + /* U+DD900 */ WIDTH(1), + /* U+DDA00 */ WIDTH(1), + /* U+DDB00 */ WIDTH(1), + /* U+DDC00 */ WIDTH(1), + /* U+DDD00 */ WIDTH(1), + /* U+DDE00 */ WIDTH(1), + /* U+DDF00 */ WIDTH(1), + /* U+DE000 */ WIDTH(1), + /* U+DE100 */ WIDTH(1), + /* U+DE200 */ WIDTH(1), + /* U+DE300 */ WIDTH(1), + /* U+DE400 */ WIDTH(1), + /* U+DE500 */ WIDTH(1), + /* U+DE600 */ WIDTH(1), + /* U+DE700 */ WIDTH(1), + /* U+DE800 */ WIDTH(1), + /* U+DE900 */ WIDTH(1), + /* U+DEA00 */ WIDTH(1), + /* U+DEB00 */ WIDTH(1), + /* U+DEC00 */ WIDTH(1), + /* U+DED00 */ WIDTH(1), + /* U+DEE00 */ WIDTH(1), + /* U+DEF00 */ WIDTH(1), + /* U+DF000 */ WIDTH(1), + /* U+DF100 */ WIDTH(1), + /* U+DF200 */ WIDTH(1), + /* U+DF300 */ WIDTH(1), + /* U+DF400 */ WIDTH(1), + /* U+DF500 */ WIDTH(1), + /* U+DF600 */ WIDTH(1), + /* U+DF700 */ WIDTH(1), + /* U+DF800 */ WIDTH(1), + /* U+DF900 */ WIDTH(1), + /* U+DFA00 */ WIDTH(1), + /* U+DFB00 */ WIDTH(1), + /* U+DFC00 */ WIDTH(1), + /* U+DFD00 */ WIDTH(1), + /* U+DFE00 */ WIDTH(1), + /* U+DFF00 */ WIDTH(1), + /* U+E0000 */ MIN_TABLE(106), + /* U+E0100 */ MIN_TABLE(107), + /* U+E0200 */ WIDTH(1), + /* U+E0300 */ WIDTH(1), + /* U+E0400 */ WIDTH(1), + /* U+E0500 */ WIDTH(1), + /* U+E0600 */ WIDTH(1), + /* U+E0700 */ WIDTH(1), + /* U+E0800 */ WIDTH(1), + /* U+E0900 */ WIDTH(1), + /* U+E0A00 */ WIDTH(1), + /* U+E0B00 */ WIDTH(1), + /* U+E0C00 */ WIDTH(1), + /* U+E0D00 */ WIDTH(1), + /* U+E0E00 */ WIDTH(1), + /* U+E0F00 */ WIDTH(1), + /* U+E1000 */ WIDTH(1), + /* U+E1100 */ WIDTH(1), + /* U+E1200 */ WIDTH(1), + /* U+E1300 */ WIDTH(1), + /* U+E1400 */ WIDTH(1), + /* U+E1500 */ WIDTH(1), + /* U+E1600 */ WIDTH(1), + /* U+E1700 */ WIDTH(1), + /* U+E1800 */ WIDTH(1), + /* U+E1900 */ WIDTH(1), + /* U+E1A00 */ WIDTH(1), + /* U+E1B00 */ WIDTH(1), + /* U+E1C00 */ WIDTH(1), + /* U+E1D00 */ WIDTH(1), + /* U+E1E00 */ WIDTH(1), + /* U+E1F00 */ WIDTH(1), + /* U+E2000 */ WIDTH(1), + /* U+E2100 */ WIDTH(1), + /* U+E2200 */ WIDTH(1), + /* U+E2300 */ WIDTH(1), + /* U+E2400 */ WIDTH(1), + /* U+E2500 */ WIDTH(1), + /* U+E2600 */ WIDTH(1), + /* U+E2700 */ WIDTH(1), + /* U+E2800 */ WIDTH(1), + /* U+E2900 */ WIDTH(1), + /* U+E2A00 */ WIDTH(1), + /* U+E2B00 */ WIDTH(1), + /* U+E2C00 */ WIDTH(1), + /* U+E2D00 */ WIDTH(1), + /* U+E2E00 */ WIDTH(1), + /* U+E2F00 */ WIDTH(1), + /* U+E3000 */ WIDTH(1), + /* U+E3100 */ WIDTH(1), + /* U+E3200 */ WIDTH(1), + /* U+E3300 */ WIDTH(1), + /* U+E3400 */ WIDTH(1), + /* U+E3500 */ WIDTH(1), + /* U+E3600 */ WIDTH(1), + /* U+E3700 */ WIDTH(1), + /* U+E3800 */ WIDTH(1), + /* U+E3900 */ WIDTH(1), + /* U+E3A00 */ WIDTH(1), + /* U+E3B00 */ WIDTH(1), + /* U+E3C00 */ WIDTH(1), + /* U+E3D00 */ WIDTH(1), + /* U+E3E00 */ WIDTH(1), + /* U+E3F00 */ WIDTH(1), + /* U+E4000 */ WIDTH(1), + /* U+E4100 */ WIDTH(1), + /* U+E4200 */ WIDTH(1), + /* U+E4300 */ WIDTH(1), + /* U+E4400 */ WIDTH(1), + /* U+E4500 */ WIDTH(1), + /* U+E4600 */ WIDTH(1), + /* U+E4700 */ WIDTH(1), + /* U+E4800 */ WIDTH(1), + /* U+E4900 */ WIDTH(1), + /* U+E4A00 */ WIDTH(1), + /* U+E4B00 */ WIDTH(1), + /* U+E4C00 */ WIDTH(1), + /* U+E4D00 */ WIDTH(1), + /* U+E4E00 */ WIDTH(1), + /* U+E4F00 */ WIDTH(1), + /* U+E5000 */ WIDTH(1), + /* U+E5100 */ WIDTH(1), + /* U+E5200 */ WIDTH(1), + /* U+E5300 */ WIDTH(1), + /* U+E5400 */ WIDTH(1), + /* U+E5500 */ WIDTH(1), + /* U+E5600 */ WIDTH(1), + /* U+E5700 */ WIDTH(1), + /* U+E5800 */ WIDTH(1), + /* U+E5900 */ WIDTH(1), + /* U+E5A00 */ WIDTH(1), + /* U+E5B00 */ WIDTH(1), + /* U+E5C00 */ WIDTH(1), + /* U+E5D00 */ WIDTH(1), + /* U+E5E00 */ WIDTH(1), + /* U+E5F00 */ WIDTH(1), + /* U+E6000 */ WIDTH(1), + /* U+E6100 */ WIDTH(1), + /* U+E6200 */ WIDTH(1), + /* U+E6300 */ WIDTH(1), + /* U+E6400 */ WIDTH(1), + /* U+E6500 */ WIDTH(1), + /* U+E6600 */ WIDTH(1), + /* U+E6700 */ WIDTH(1), + /* U+E6800 */ WIDTH(1), + /* U+E6900 */ WIDTH(1), + /* U+E6A00 */ WIDTH(1), + /* U+E6B00 */ WIDTH(1), + /* U+E6C00 */ WIDTH(1), + /* U+E6D00 */ WIDTH(1), + /* U+E6E00 */ WIDTH(1), + /* U+E6F00 */ WIDTH(1), + /* U+E7000 */ WIDTH(1), + /* U+E7100 */ WIDTH(1), + /* U+E7200 */ WIDTH(1), + /* U+E7300 */ WIDTH(1), + /* U+E7400 */ WIDTH(1), + /* U+E7500 */ WIDTH(1), + /* U+E7600 */ WIDTH(1), + /* U+E7700 */ WIDTH(1), + /* U+E7800 */ WIDTH(1), + /* U+E7900 */ WIDTH(1), + /* U+E7A00 */ WIDTH(1), + /* U+E7B00 */ WIDTH(1), + /* U+E7C00 */ WIDTH(1), + /* U+E7D00 */ WIDTH(1), + /* U+E7E00 */ WIDTH(1), + /* U+E7F00 */ WIDTH(1), + /* U+E8000 */ WIDTH(1), + /* U+E8100 */ WIDTH(1), + /* U+E8200 */ WIDTH(1), + /* U+E8300 */ WIDTH(1), + /* U+E8400 */ WIDTH(1), + /* U+E8500 */ WIDTH(1), + /* U+E8600 */ WIDTH(1), + /* U+E8700 */ WIDTH(1), + /* U+E8800 */ WIDTH(1), + /* U+E8900 */ WIDTH(1), + /* U+E8A00 */ WIDTH(1), + /* U+E8B00 */ WIDTH(1), + /* U+E8C00 */ WIDTH(1), + /* U+E8D00 */ WIDTH(1), + /* U+E8E00 */ WIDTH(1), + /* U+E8F00 */ WIDTH(1), + /* U+E9000 */ WIDTH(1), + /* U+E9100 */ WIDTH(1), + /* U+E9200 */ WIDTH(1), + /* U+E9300 */ WIDTH(1), + /* U+E9400 */ WIDTH(1), + /* U+E9500 */ WIDTH(1), + /* U+E9600 */ WIDTH(1), + /* U+E9700 */ WIDTH(1), + /* U+E9800 */ WIDTH(1), + /* U+E9900 */ WIDTH(1), + /* U+E9A00 */ WIDTH(1), + /* U+E9B00 */ WIDTH(1), + /* U+E9C00 */ WIDTH(1), + /* U+E9D00 */ WIDTH(1), + /* U+E9E00 */ WIDTH(1), + /* U+E9F00 */ WIDTH(1), + /* U+EA000 */ WIDTH(1), + /* U+EA100 */ WIDTH(1), + /* U+EA200 */ WIDTH(1), + /* U+EA300 */ WIDTH(1), + /* U+EA400 */ WIDTH(1), + /* U+EA500 */ WIDTH(1), + /* U+EA600 */ WIDTH(1), + /* U+EA700 */ WIDTH(1), + /* U+EA800 */ WIDTH(1), + /* U+EA900 */ WIDTH(1), + /* U+EAA00 */ WIDTH(1), + /* U+EAB00 */ WIDTH(1), + /* U+EAC00 */ WIDTH(1), + /* U+EAD00 */ WIDTH(1), + /* U+EAE00 */ WIDTH(1), + /* U+EAF00 */ WIDTH(1), + /* U+EB000 */ WIDTH(1), + /* U+EB100 */ WIDTH(1), + /* U+EB200 */ WIDTH(1), + /* U+EB300 */ WIDTH(1), + /* U+EB400 */ WIDTH(1), + /* U+EB500 */ WIDTH(1), + /* U+EB600 */ WIDTH(1), + /* U+EB700 */ WIDTH(1), + /* U+EB800 */ WIDTH(1), + /* U+EB900 */ WIDTH(1), + /* U+EBA00 */ WIDTH(1), + /* U+EBB00 */ WIDTH(1), + /* U+EBC00 */ WIDTH(1), + /* U+EBD00 */ WIDTH(1), + /* U+EBE00 */ WIDTH(1), + /* U+EBF00 */ WIDTH(1), + /* U+EC000 */ WIDTH(1), + /* U+EC100 */ WIDTH(1), + /* U+EC200 */ WIDTH(1), + /* U+EC300 */ WIDTH(1), + /* U+EC400 */ WIDTH(1), + /* U+EC500 */ WIDTH(1), + /* U+EC600 */ WIDTH(1), + /* U+EC700 */ WIDTH(1), + /* U+EC800 */ WIDTH(1), + /* U+EC900 */ WIDTH(1), + /* U+ECA00 */ WIDTH(1), + /* U+ECB00 */ WIDTH(1), + /* U+ECC00 */ WIDTH(1), + /* U+ECD00 */ WIDTH(1), + /* U+ECE00 */ WIDTH(1), + /* U+ECF00 */ WIDTH(1), + /* U+ED000 */ WIDTH(1), + /* U+ED100 */ WIDTH(1), + /* U+ED200 */ WIDTH(1), + /* U+ED300 */ WIDTH(1), + /* U+ED400 */ WIDTH(1), + /* U+ED500 */ WIDTH(1), + /* U+ED600 */ WIDTH(1), + /* U+ED700 */ WIDTH(1), + /* U+ED800 */ WIDTH(1), + /* U+ED900 */ WIDTH(1), + /* U+EDA00 */ WIDTH(1), + /* U+EDB00 */ WIDTH(1), + /* U+EDC00 */ WIDTH(1), + /* U+EDD00 */ WIDTH(1), + /* U+EDE00 */ WIDTH(1), + /* U+EDF00 */ WIDTH(1), + /* U+EE000 */ WIDTH(1), + /* U+EE100 */ WIDTH(1), + /* U+EE200 */ WIDTH(1), + /* U+EE300 */ WIDTH(1), + /* U+EE400 */ WIDTH(1), + /* U+EE500 */ WIDTH(1), + /* U+EE600 */ WIDTH(1), + /* U+EE700 */ WIDTH(1), + /* U+EE800 */ WIDTH(1), + /* U+EE900 */ WIDTH(1), + /* U+EEA00 */ WIDTH(1), + /* U+EEB00 */ WIDTH(1), + /* U+EEC00 */ WIDTH(1), + /* U+EED00 */ WIDTH(1), + /* U+EEE00 */ WIDTH(1), + /* U+EEF00 */ WIDTH(1), + /* U+EF000 */ WIDTH(1), + /* U+EF100 */ WIDTH(1), + /* U+EF200 */ WIDTH(1), + /* U+EF300 */ WIDTH(1), + /* U+EF400 */ WIDTH(1), + /* U+EF500 */ WIDTH(1), + /* U+EF600 */ WIDTH(1), + /* U+EF700 */ WIDTH(1), + /* U+EF800 */ WIDTH(1), + /* U+EF900 */ WIDTH(1), + /* U+EFA00 */ WIDTH(1), + /* U+EFB00 */ WIDTH(1), + /* U+EFC00 */ WIDTH(1), + /* U+EFD00 */ WIDTH(1), + /* U+EFE00 */ WIDTH(1), + /* U+EFF00 */ WIDTH(1), + /* U+F0000 */ WIDTH(3), + /* U+F0100 */ WIDTH(3), + /* U+F0200 */ WIDTH(3), + /* U+F0300 */ WIDTH(3), + /* U+F0400 */ WIDTH(3), + /* U+F0500 */ WIDTH(3), + /* U+F0600 */ WIDTH(3), + /* U+F0700 */ WIDTH(3), + /* U+F0800 */ WIDTH(3), + /* U+F0900 */ WIDTH(3), + /* U+F0A00 */ WIDTH(3), + /* U+F0B00 */ WIDTH(3), + /* U+F0C00 */ WIDTH(3), + /* U+F0D00 */ WIDTH(3), + /* U+F0E00 */ WIDTH(3), + /* U+F0F00 */ WIDTH(3), + /* U+F1000 */ WIDTH(3), + /* U+F1100 */ WIDTH(3), + /* U+F1200 */ WIDTH(3), + /* U+F1300 */ WIDTH(3), + /* U+F1400 */ WIDTH(3), + /* U+F1500 */ WIDTH(3), + /* U+F1600 */ WIDTH(3), + /* U+F1700 */ WIDTH(3), + /* U+F1800 */ WIDTH(3), + /* U+F1900 */ WIDTH(3), + /* U+F1A00 */ WIDTH(3), + /* U+F1B00 */ WIDTH(3), + /* U+F1C00 */ WIDTH(3), + /* U+F1D00 */ WIDTH(3), + /* U+F1E00 */ WIDTH(3), + /* U+F1F00 */ WIDTH(3), + /* U+F2000 */ WIDTH(3), + /* U+F2100 */ WIDTH(3), + /* U+F2200 */ WIDTH(3), + /* U+F2300 */ WIDTH(3), + /* U+F2400 */ WIDTH(3), + /* U+F2500 */ WIDTH(3), + /* U+F2600 */ WIDTH(3), + /* U+F2700 */ WIDTH(3), + /* U+F2800 */ WIDTH(3), + /* U+F2900 */ WIDTH(3), + /* U+F2A00 */ WIDTH(3), + /* U+F2B00 */ WIDTH(3), + /* U+F2C00 */ WIDTH(3), + /* U+F2D00 */ WIDTH(3), + /* U+F2E00 */ WIDTH(3), + /* U+F2F00 */ WIDTH(3), + /* U+F3000 */ WIDTH(3), + /* U+F3100 */ WIDTH(3), + /* U+F3200 */ WIDTH(3), + /* U+F3300 */ WIDTH(3), + /* U+F3400 */ WIDTH(3), + /* U+F3500 */ WIDTH(3), + /* U+F3600 */ WIDTH(3), + /* U+F3700 */ WIDTH(3), + /* U+F3800 */ WIDTH(3), + /* U+F3900 */ WIDTH(3), + /* U+F3A00 */ WIDTH(3), + /* U+F3B00 */ WIDTH(3), + /* U+F3C00 */ WIDTH(3), + /* U+F3D00 */ WIDTH(3), + /* U+F3E00 */ WIDTH(3), + /* U+F3F00 */ WIDTH(3), + /* U+F4000 */ WIDTH(3), + /* U+F4100 */ WIDTH(3), + /* U+F4200 */ WIDTH(3), + /* U+F4300 */ WIDTH(3), + /* U+F4400 */ WIDTH(3), + /* U+F4500 */ WIDTH(3), + /* U+F4600 */ WIDTH(3), + /* U+F4700 */ WIDTH(3), + /* U+F4800 */ WIDTH(3), + /* U+F4900 */ WIDTH(3), + /* U+F4A00 */ WIDTH(3), + /* U+F4B00 */ WIDTH(3), + /* U+F4C00 */ WIDTH(3), + /* U+F4D00 */ WIDTH(3), + /* U+F4E00 */ WIDTH(3), + /* U+F4F00 */ WIDTH(3), + /* U+F5000 */ WIDTH(3), + /* U+F5100 */ WIDTH(3), + /* U+F5200 */ WIDTH(3), + /* U+F5300 */ WIDTH(3), + /* U+F5400 */ WIDTH(3), + /* U+F5500 */ WIDTH(3), + /* U+F5600 */ WIDTH(3), + /* U+F5700 */ WIDTH(3), + /* U+F5800 */ WIDTH(3), + /* U+F5900 */ WIDTH(3), + /* U+F5A00 */ WIDTH(3), + /* U+F5B00 */ WIDTH(3), + /* U+F5C00 */ WIDTH(3), + /* U+F5D00 */ WIDTH(3), + /* U+F5E00 */ WIDTH(3), + /* U+F5F00 */ WIDTH(3), + /* U+F6000 */ WIDTH(3), + /* U+F6100 */ WIDTH(3), + /* U+F6200 */ WIDTH(3), + /* U+F6300 */ WIDTH(3), + /* U+F6400 */ WIDTH(3), + /* U+F6500 */ WIDTH(3), + /* U+F6600 */ WIDTH(3), + /* U+F6700 */ WIDTH(3), + /* U+F6800 */ WIDTH(3), + /* U+F6900 */ WIDTH(3), + /* U+F6A00 */ WIDTH(3), + /* U+F6B00 */ WIDTH(3), + /* U+F6C00 */ WIDTH(3), + /* U+F6D00 */ WIDTH(3), + /* U+F6E00 */ WIDTH(3), + /* U+F6F00 */ WIDTH(3), + /* U+F7000 */ WIDTH(3), + /* U+F7100 */ WIDTH(3), + /* U+F7200 */ WIDTH(3), + /* U+F7300 */ WIDTH(3), + /* U+F7400 */ WIDTH(3), + /* U+F7500 */ WIDTH(3), + /* U+F7600 */ WIDTH(3), + /* U+F7700 */ WIDTH(3), + /* U+F7800 */ WIDTH(3), + /* U+F7900 */ WIDTH(3), + /* U+F7A00 */ WIDTH(3), + /* U+F7B00 */ WIDTH(3), + /* U+F7C00 */ WIDTH(3), + /* U+F7D00 */ WIDTH(3), + /* U+F7E00 */ WIDTH(3), + /* U+F7F00 */ WIDTH(3), + /* U+F8000 */ WIDTH(3), + /* U+F8100 */ WIDTH(3), + /* U+F8200 */ WIDTH(3), + /* U+F8300 */ WIDTH(3), + /* U+F8400 */ WIDTH(3), + /* U+F8500 */ WIDTH(3), + /* U+F8600 */ WIDTH(3), + /* U+F8700 */ WIDTH(3), + /* U+F8800 */ WIDTH(3), + /* U+F8900 */ WIDTH(3), + /* U+F8A00 */ WIDTH(3), + /* U+F8B00 */ WIDTH(3), + /* U+F8C00 */ WIDTH(3), + /* U+F8D00 */ WIDTH(3), + /* U+F8E00 */ WIDTH(3), + /* U+F8F00 */ WIDTH(3), + /* U+F9000 */ WIDTH(3), + /* U+F9100 */ WIDTH(3), + /* U+F9200 */ WIDTH(3), + /* U+F9300 */ WIDTH(3), + /* U+F9400 */ WIDTH(3), + /* U+F9500 */ WIDTH(3), + /* U+F9600 */ WIDTH(3), + /* U+F9700 */ WIDTH(3), + /* U+F9800 */ WIDTH(3), + /* U+F9900 */ WIDTH(3), + /* U+F9A00 */ WIDTH(3), + /* U+F9B00 */ WIDTH(3), + /* U+F9C00 */ WIDTH(3), + /* U+F9D00 */ WIDTH(3), + /* U+F9E00 */ WIDTH(3), + /* U+F9F00 */ WIDTH(3), + /* U+FA000 */ WIDTH(3), + /* U+FA100 */ WIDTH(3), + /* U+FA200 */ WIDTH(3), + /* U+FA300 */ WIDTH(3), + /* U+FA400 */ WIDTH(3), + /* U+FA500 */ WIDTH(3), + /* U+FA600 */ WIDTH(3), + /* U+FA700 */ WIDTH(3), + /* U+FA800 */ WIDTH(3), + /* U+FA900 */ WIDTH(3), + /* U+FAA00 */ WIDTH(3), + /* U+FAB00 */ WIDTH(3), + /* U+FAC00 */ WIDTH(3), + /* U+FAD00 */ WIDTH(3), + /* U+FAE00 */ WIDTH(3), + /* U+FAF00 */ WIDTH(3), + /* U+FB000 */ WIDTH(3), + /* U+FB100 */ WIDTH(3), + /* U+FB200 */ WIDTH(3), + /* U+FB300 */ WIDTH(3), + /* U+FB400 */ WIDTH(3), + /* U+FB500 */ WIDTH(3), + /* U+FB600 */ WIDTH(3), + /* U+FB700 */ WIDTH(3), + /* U+FB800 */ WIDTH(3), + /* U+FB900 */ WIDTH(3), + /* U+FBA00 */ WIDTH(3), + /* U+FBB00 */ WIDTH(3), + /* U+FBC00 */ WIDTH(3), + /* U+FBD00 */ WIDTH(3), + /* U+FBE00 */ WIDTH(3), + /* U+FBF00 */ WIDTH(3), + /* U+FC000 */ WIDTH(3), + /* U+FC100 */ WIDTH(3), + /* U+FC200 */ WIDTH(3), + /* U+FC300 */ WIDTH(3), + /* U+FC400 */ WIDTH(3), + /* U+FC500 */ WIDTH(3), + /* U+FC600 */ WIDTH(3), + /* U+FC700 */ WIDTH(3), + /* U+FC800 */ WIDTH(3), + /* U+FC900 */ WIDTH(3), + /* U+FCA00 */ WIDTH(3), + /* U+FCB00 */ WIDTH(3), + /* U+FCC00 */ WIDTH(3), + /* U+FCD00 */ WIDTH(3), + /* U+FCE00 */ WIDTH(3), + /* U+FCF00 */ WIDTH(3), + /* U+FD000 */ WIDTH(3), + /* U+FD100 */ WIDTH(3), + /* U+FD200 */ WIDTH(3), + /* U+FD300 */ WIDTH(3), + /* U+FD400 */ WIDTH(3), + /* U+FD500 */ WIDTH(3), + /* U+FD600 */ WIDTH(3), + /* U+FD700 */ WIDTH(3), + /* U+FD800 */ WIDTH(3), + /* U+FD900 */ WIDTH(3), + /* U+FDA00 */ WIDTH(3), + /* U+FDB00 */ WIDTH(3), + /* U+FDC00 */ WIDTH(3), + /* U+FDD00 */ WIDTH(3), + /* U+FDE00 */ WIDTH(3), + /* U+FDF00 */ WIDTH(3), + /* U+FE000 */ WIDTH(3), + /* U+FE100 */ WIDTH(3), + /* U+FE200 */ WIDTH(3), + /* U+FE300 */ WIDTH(3), + /* U+FE400 */ WIDTH(3), + /* U+FE500 */ WIDTH(3), + /* U+FE600 */ WIDTH(3), + /* U+FE700 */ WIDTH(3), + /* U+FE800 */ WIDTH(3), + /* U+FE900 */ WIDTH(3), + /* U+FEA00 */ WIDTH(3), + /* U+FEB00 */ WIDTH(3), + /* U+FEC00 */ WIDTH(3), + /* U+FED00 */ WIDTH(3), + /* U+FEE00 */ WIDTH(3), + /* U+FEF00 */ WIDTH(3), + /* U+FF000 */ WIDTH(3), + /* U+FF100 */ WIDTH(3), + /* U+FF200 */ WIDTH(3), + /* U+FF300 */ WIDTH(3), + /* U+FF400 */ WIDTH(3), + /* U+FF500 */ WIDTH(3), + /* U+FF600 */ WIDTH(3), + /* U+FF700 */ WIDTH(3), + /* U+FF800 */ WIDTH(3), + /* U+FF900 */ WIDTH(3), + /* U+FFA00 */ WIDTH(3), + /* U+FFB00 */ WIDTH(3), + /* U+FFC00 */ WIDTH(3), + /* U+FFD00 */ WIDTH(3), + /* U+FFE00 */ WIDTH(3), + /* U+FFF00 */ MIN_TABLE(108), + /* U+100000 */ WIDTH(3), + /* U+100100 */ WIDTH(3), + /* U+100200 */ WIDTH(3), + /* U+100300 */ WIDTH(3), + /* U+100400 */ WIDTH(3), + /* U+100500 */ WIDTH(3), + /* U+100600 */ WIDTH(3), + /* U+100700 */ WIDTH(3), + /* U+100800 */ WIDTH(3), + /* U+100900 */ WIDTH(3), + /* U+100A00 */ WIDTH(3), + /* U+100B00 */ WIDTH(3), + /* U+100C00 */ WIDTH(3), + /* U+100D00 */ WIDTH(3), + /* U+100E00 */ WIDTH(3), + /* U+100F00 */ WIDTH(3), + /* U+101000 */ WIDTH(3), + /* U+101100 */ WIDTH(3), + /* U+101200 */ WIDTH(3), + /* U+101300 */ WIDTH(3), + /* U+101400 */ WIDTH(3), + /* U+101500 */ WIDTH(3), + /* U+101600 */ WIDTH(3), + /* U+101700 */ WIDTH(3), + /* U+101800 */ WIDTH(3), + /* U+101900 */ WIDTH(3), + /* U+101A00 */ WIDTH(3), + /* U+101B00 */ WIDTH(3), + /* U+101C00 */ WIDTH(3), + /* U+101D00 */ WIDTH(3), + /* U+101E00 */ WIDTH(3), + /* U+101F00 */ WIDTH(3), + /* U+102000 */ WIDTH(3), + /* U+102100 */ WIDTH(3), + /* U+102200 */ WIDTH(3), + /* U+102300 */ WIDTH(3), + /* U+102400 */ WIDTH(3), + /* U+102500 */ WIDTH(3), + /* U+102600 */ WIDTH(3), + /* U+102700 */ WIDTH(3), + /* U+102800 */ WIDTH(3), + /* U+102900 */ WIDTH(3), + /* U+102A00 */ WIDTH(3), + /* U+102B00 */ WIDTH(3), + /* U+102C00 */ WIDTH(3), + /* U+102D00 */ WIDTH(3), + /* U+102E00 */ WIDTH(3), + /* U+102F00 */ WIDTH(3), + /* U+103000 */ WIDTH(3), + /* U+103100 */ WIDTH(3), + /* U+103200 */ WIDTH(3), + /* U+103300 */ WIDTH(3), + /* U+103400 */ WIDTH(3), + /* U+103500 */ WIDTH(3), + /* U+103600 */ WIDTH(3), + /* U+103700 */ WIDTH(3), + /* U+103800 */ WIDTH(3), + /* U+103900 */ WIDTH(3), + /* U+103A00 */ WIDTH(3), + /* U+103B00 */ WIDTH(3), + /* U+103C00 */ WIDTH(3), + /* U+103D00 */ WIDTH(3), + /* U+103E00 */ WIDTH(3), + /* U+103F00 */ WIDTH(3), + /* U+104000 */ WIDTH(3), + /* U+104100 */ WIDTH(3), + /* U+104200 */ WIDTH(3), + /* U+104300 */ WIDTH(3), + /* U+104400 */ WIDTH(3), + /* U+104500 */ WIDTH(3), + /* U+104600 */ WIDTH(3), + /* U+104700 */ WIDTH(3), + /* U+104800 */ WIDTH(3), + /* U+104900 */ WIDTH(3), + /* U+104A00 */ WIDTH(3), + /* U+104B00 */ WIDTH(3), + /* U+104C00 */ WIDTH(3), + /* U+104D00 */ WIDTH(3), + /* U+104E00 */ WIDTH(3), + /* U+104F00 */ WIDTH(3), + /* U+105000 */ WIDTH(3), + /* U+105100 */ WIDTH(3), + /* U+105200 */ WIDTH(3), + /* U+105300 */ WIDTH(3), + /* U+105400 */ WIDTH(3), + /* U+105500 */ WIDTH(3), + /* U+105600 */ WIDTH(3), + /* U+105700 */ WIDTH(3), + /* U+105800 */ WIDTH(3), + /* U+105900 */ WIDTH(3), + /* U+105A00 */ WIDTH(3), + /* U+105B00 */ WIDTH(3), + /* U+105C00 */ WIDTH(3), + /* U+105D00 */ WIDTH(3), + /* U+105E00 */ WIDTH(3), + /* U+105F00 */ WIDTH(3), + /* U+106000 */ WIDTH(3), + /* U+106100 */ WIDTH(3), + /* U+106200 */ WIDTH(3), + /* U+106300 */ WIDTH(3), + /* U+106400 */ WIDTH(3), + /* U+106500 */ WIDTH(3), + /* U+106600 */ WIDTH(3), + /* U+106700 */ WIDTH(3), + /* U+106800 */ WIDTH(3), + /* U+106900 */ WIDTH(3), + /* U+106A00 */ WIDTH(3), + /* U+106B00 */ WIDTH(3), + /* U+106C00 */ WIDTH(3), + /* U+106D00 */ WIDTH(3), + /* U+106E00 */ WIDTH(3), + /* U+106F00 */ WIDTH(3), + /* U+107000 */ WIDTH(3), + /* U+107100 */ WIDTH(3), + /* U+107200 */ WIDTH(3), + /* U+107300 */ WIDTH(3), + /* U+107400 */ WIDTH(3), + /* U+107500 */ WIDTH(3), + /* U+107600 */ WIDTH(3), + /* U+107700 */ WIDTH(3), + /* U+107800 */ WIDTH(3), + /* U+107900 */ WIDTH(3), + /* U+107A00 */ WIDTH(3), + /* U+107B00 */ WIDTH(3), + /* U+107C00 */ WIDTH(3), + /* U+107D00 */ WIDTH(3), + /* U+107E00 */ WIDTH(3), + /* U+107F00 */ WIDTH(3), + /* U+108000 */ WIDTH(3), + /* U+108100 */ WIDTH(3), + /* U+108200 */ WIDTH(3), + /* U+108300 */ WIDTH(3), + /* U+108400 */ WIDTH(3), + /* U+108500 */ WIDTH(3), + /* U+108600 */ WIDTH(3), + /* U+108700 */ WIDTH(3), + /* U+108800 */ WIDTH(3), + /* U+108900 */ WIDTH(3), + /* U+108A00 */ WIDTH(3), + /* U+108B00 */ WIDTH(3), + /* U+108C00 */ WIDTH(3), + /* U+108D00 */ WIDTH(3), + /* U+108E00 */ WIDTH(3), + /* U+108F00 */ WIDTH(3), + /* U+109000 */ WIDTH(3), + /* U+109100 */ WIDTH(3), + /* U+109200 */ WIDTH(3), + /* U+109300 */ WIDTH(3), + /* U+109400 */ WIDTH(3), + /* U+109500 */ WIDTH(3), + /* U+109600 */ WIDTH(3), + /* U+109700 */ WIDTH(3), + /* U+109800 */ WIDTH(3), + /* U+109900 */ WIDTH(3), + /* U+109A00 */ WIDTH(3), + /* U+109B00 */ WIDTH(3), + /* U+109C00 */ WIDTH(3), + /* U+109D00 */ WIDTH(3), + /* U+109E00 */ WIDTH(3), + /* U+109F00 */ WIDTH(3), + /* U+10A000 */ WIDTH(3), + /* U+10A100 */ WIDTH(3), + /* U+10A200 */ WIDTH(3), + /* U+10A300 */ WIDTH(3), + /* U+10A400 */ WIDTH(3), + /* U+10A500 */ WIDTH(3), + /* U+10A600 */ WIDTH(3), + /* U+10A700 */ WIDTH(3), + /* U+10A800 */ WIDTH(3), + /* U+10A900 */ WIDTH(3), + /* U+10AA00 */ WIDTH(3), + /* U+10AB00 */ WIDTH(3), + /* U+10AC00 */ WIDTH(3), + /* U+10AD00 */ WIDTH(3), + /* U+10AE00 */ WIDTH(3), + /* U+10AF00 */ WIDTH(3), + /* U+10B000 */ WIDTH(3), + /* U+10B100 */ WIDTH(3), + /* U+10B200 */ WIDTH(3), + /* U+10B300 */ WIDTH(3), + /* U+10B400 */ WIDTH(3), + /* U+10B500 */ WIDTH(3), + /* U+10B600 */ WIDTH(3), + /* U+10B700 */ WIDTH(3), + /* U+10B800 */ WIDTH(3), + /* U+10B900 */ WIDTH(3), + /* U+10BA00 */ WIDTH(3), + /* U+10BB00 */ WIDTH(3), + /* U+10BC00 */ WIDTH(3), + /* U+10BD00 */ WIDTH(3), + /* U+10BE00 */ WIDTH(3), + /* U+10BF00 */ WIDTH(3), + /* U+10C000 */ WIDTH(3), + /* U+10C100 */ WIDTH(3), + /* U+10C200 */ WIDTH(3), + /* U+10C300 */ WIDTH(3), + /* U+10C400 */ WIDTH(3), + /* U+10C500 */ WIDTH(3), + /* U+10C600 */ WIDTH(3), + /* U+10C700 */ WIDTH(3), + /* U+10C800 */ WIDTH(3), + /* U+10C900 */ WIDTH(3), + /* U+10CA00 */ WIDTH(3), + /* U+10CB00 */ WIDTH(3), + /* U+10CC00 */ WIDTH(3), + /* U+10CD00 */ WIDTH(3), + /* U+10CE00 */ WIDTH(3), + /* U+10CF00 */ WIDTH(3), + /* U+10D000 */ WIDTH(3), + /* U+10D100 */ WIDTH(3), + /* U+10D200 */ WIDTH(3), + /* U+10D300 */ WIDTH(3), + /* U+10D400 */ WIDTH(3), + /* U+10D500 */ WIDTH(3), + /* U+10D600 */ WIDTH(3), + /* U+10D700 */ WIDTH(3), + /* U+10D800 */ WIDTH(3), + /* U+10D900 */ WIDTH(3), + /* U+10DA00 */ WIDTH(3), + /* U+10DB00 */ WIDTH(3), + /* U+10DC00 */ WIDTH(3), + /* U+10DD00 */ WIDTH(3), + /* U+10DE00 */ WIDTH(3), + /* U+10DF00 */ WIDTH(3), + /* U+10E000 */ WIDTH(3), + /* U+10E100 */ WIDTH(3), + /* U+10E200 */ WIDTH(3), + /* U+10E300 */ WIDTH(3), + /* U+10E400 */ WIDTH(3), + /* U+10E500 */ WIDTH(3), + /* U+10E600 */ WIDTH(3), + /* U+10E700 */ WIDTH(3), + /* U+10E800 */ WIDTH(3), + /* U+10E900 */ WIDTH(3), + /* U+10EA00 */ WIDTH(3), + /* U+10EB00 */ WIDTH(3), + /* U+10EC00 */ WIDTH(3), + /* U+10ED00 */ WIDTH(3), + /* U+10EE00 */ WIDTH(3), + /* U+10EF00 */ WIDTH(3), + /* U+10F000 */ WIDTH(3), + /* U+10F100 */ WIDTH(3), + /* U+10F200 */ WIDTH(3), + /* U+10F300 */ WIDTH(3), + /* U+10F400 */ WIDTH(3), + /* U+10F500 */ WIDTH(3), + /* U+10F600 */ WIDTH(3), + /* U+10F700 */ WIDTH(3), + /* U+10F800 */ WIDTH(3), + /* U+10F900 */ WIDTH(3), + /* U+10FA00 */ WIDTH(3), + /* U+10FB00 */ WIDTH(3), + /* U+10FC00 */ WIDTH(3), + /* U+10FD00 */ WIDTH(3), + /* U+10FE00 */ WIDTH(3), + /* U+10FF00 */ MIN_TABLE(108), + +}; + +#undef MIN_TABLE +#undef WIDTH + +#define WIDTHS(a, b, c, d) (((a) << 6) | ((b) << 4) | ((c) << 2) | (d)) + +static uint8_t _vte_width_min_table[][64] = { + + /* [0] */ { + /* U+0000 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0004 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0008 */ WIDTHS( 1, 1, 1, 1 ), + /* U+000C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0010 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0014 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0018 */ WIDTHS( 1, 1, 1, 1 ), + /* U+001C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0020 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0024 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0028 */ WIDTHS( 1, 1, 1, 1 ), + /* U+002C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0030 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0034 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0038 */ WIDTHS( 1, 1, 1, 1 ), + /* U+003C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0040 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0044 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0048 */ WIDTHS( 1, 1, 1, 1 ), + /* U+004C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0050 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0054 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0058 */ WIDTHS( 1, 1, 1, 1 ), + /* U+005C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0060 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0064 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0068 */ WIDTHS( 1, 1, 1, 1 ), + /* U+006C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0070 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0074 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0078 */ WIDTHS( 1, 1, 1, 1 ), + /* U+007C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0080 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0084 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0088 */ WIDTHS( 1, 1, 1, 1 ), + /* U+008C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0090 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0094 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0098 */ WIDTHS( 1, 1, 1, 1 ), + /* U+009C */ WIDTHS( 1, 1, 1, 1 ), + /* U+00A0 */ WIDTHS( 1, 3, 1, 1 ), + /* U+00A4 */ WIDTHS( 3, 1, 1, 3 ), + /* U+00A8 */ WIDTHS( 3, 1, 3, 1 ), + /* U+00AC */ WIDTHS( 1, 3, 3, 1 ), + /* U+00B0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+00B4 */ WIDTHS( 3, 1, 3, 3 ), + /* U+00B8 */ WIDTHS( 3, 3, 3, 1 ), + /* U+00BC */ WIDTHS( 3, 3, 3, 3 ), + /* U+00C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+00C4 */ WIDTHS( 1, 1, 3, 1 ), + /* U+00C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+00CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+00D0 */ WIDTHS( 3, 1, 1, 1 ), + /* U+00D4 */ WIDTHS( 1, 1, 1, 3 ), + /* U+00D8 */ WIDTHS( 3, 1, 1, 1 ), + /* U+00DC */ WIDTHS( 1, 1, 3, 3 ), + /* U+00E0 */ WIDTHS( 3, 3, 1, 1 ), + /* U+00E4 */ WIDTHS( 1, 1, 3, 1 ), + /* U+00E8 */ WIDTHS( 3, 3, 3, 1 ), + /* U+00EC */ WIDTHS( 3, 3, 1, 1 ), + /* U+00F0 */ WIDTHS( 3, 1, 3, 3 ), + /* U+00F4 */ WIDTHS( 1, 1, 1, 3 ), + /* U+00F8 */ WIDTHS( 3, 3, 3, 1 ), + /* U+00FC */ WIDTHS( 3, 1, 3, 1 ), + }, + /* [1] */ { + /* U+0100 */ WIDTHS( 1, 3, 1, 1 ), + /* U+0104 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0108 */ WIDTHS( 1, 1, 1, 1 ), + /* U+010C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0110 */ WIDTHS( 1, 3, 1, 3 ), + /* U+0114 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0118 */ WIDTHS( 1, 1, 1, 3 ), + /* U+011C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0120 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0124 */ WIDTHS( 1, 1, 3, 3 ), + /* U+0128 */ WIDTHS( 1, 1, 1, 3 ), + /* U+012C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0130 */ WIDTHS( 1, 3, 3, 3 ), + /* U+0134 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0138 */ WIDTHS( 3, 1, 1, 1 ), + /* U+013C */ WIDTHS( 1, 1, 1, 3 ), + /* U+0140 */ WIDTHS( 3, 3, 3, 1 ), + /* U+0144 */ WIDTHS( 3, 1, 1, 1 ), + /* U+0148 */ WIDTHS( 3, 3, 3, 3 ), + /* U+014C */ WIDTHS( 1, 3, 1, 1 ), + /* U+0150 */ WIDTHS( 1, 1, 3, 3 ), + /* U+0154 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0158 */ WIDTHS( 1, 1, 1, 1 ), + /* U+015C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0160 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0164 */ WIDTHS( 1, 1, 3, 3 ), + /* U+0168 */ WIDTHS( 1, 1, 1, 3 ), + /* U+016C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0170 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0174 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0178 */ WIDTHS( 1, 1, 1, 1 ), + /* U+017C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0180 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0184 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0188 */ WIDTHS( 1, 1, 1, 1 ), + /* U+018C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0190 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0194 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0198 */ WIDTHS( 1, 1, 1, 1 ), + /* U+019C */ WIDTHS( 1, 1, 1, 1 ), + /* U+01A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+01B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+01C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01CC */ WIDTHS( 1, 1, 3, 1 ), + /* U+01D0 */ WIDTHS( 3, 1, 3, 1 ), + /* U+01D4 */ WIDTHS( 3, 1, 3, 1 ), + /* U+01D8 */ WIDTHS( 3, 1, 3, 1 ), + /* U+01DC */ WIDTHS( 3, 1, 1, 1 ), + /* U+01E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+01F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+01FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [2] */ { + /* U+0200 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0204 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0208 */ WIDTHS( 1, 1, 1, 1 ), + /* U+020C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0210 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0214 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0218 */ WIDTHS( 1, 1, 1, 1 ), + /* U+021C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0220 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0224 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0228 */ WIDTHS( 1, 1, 1, 1 ), + /* U+022C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0230 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0234 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0238 */ WIDTHS( 1, 1, 1, 1 ), + /* U+023C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0240 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0244 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0248 */ WIDTHS( 1, 1, 1, 1 ), + /* U+024C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0250 */ WIDTHS( 1, 3, 1, 1 ), + /* U+0254 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0258 */ WIDTHS( 1, 1, 1, 1 ), + /* U+025C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0260 */ WIDTHS( 1, 3, 1, 1 ), + /* U+0264 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0268 */ WIDTHS( 1, 1, 1, 1 ), + /* U+026C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0270 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0274 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0278 */ WIDTHS( 1, 1, 1, 1 ), + /* U+027C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0280 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0284 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0288 */ WIDTHS( 1, 1, 1, 1 ), + /* U+028C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0290 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0294 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0298 */ WIDTHS( 1, 1, 1, 1 ), + /* U+029C */ WIDTHS( 1, 1, 1, 1 ), + /* U+02A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+02B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+02C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02C4 */ WIDTHS( 3, 1, 1, 3 ), + /* U+02C8 */ WIDTHS( 1, 3, 3, 3 ), + /* U+02CC */ WIDTHS( 1, 3, 1, 1 ), + /* U+02D0 */ WIDTHS( 3, 1, 1, 1 ), + /* U+02D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02D8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+02DC */ WIDTHS( 1, 3, 1, 3 ), + /* U+02E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+02F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+02FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [3] */ { + /* U+0300 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0304 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0308 */ WIDTHS( 0, 0, 0, 0 ), + /* U+030C */ WIDTHS( 0, 0, 0, 0 ), + /* U+0310 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0314 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0318 */ WIDTHS( 0, 0, 0, 0 ), + /* U+031C */ WIDTHS( 0, 0, 0, 0 ), + /* U+0320 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0324 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0328 */ WIDTHS( 0, 0, 0, 0 ), + /* U+032C */ WIDTHS( 0, 0, 0, 0 ), + /* U+0330 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0334 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0338 */ WIDTHS( 0, 0, 0, 0 ), + /* U+033C */ WIDTHS( 0, 0, 0, 0 ), + /* U+0340 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0344 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0348 */ WIDTHS( 0, 0, 0, 0 ), + /* U+034C */ WIDTHS( 0, 0, 0, 0 ), + /* U+0350 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0354 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0358 */ WIDTHS( 0, 0, 0, 0 ), + /* U+035C */ WIDTHS( 0, 0, 0, 0 ), + /* U+0360 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0364 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0368 */ WIDTHS( 0, 0, 0, 0 ), + /* U+036C */ WIDTHS( 0, 0, 0, 0 ), + /* U+0370 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0374 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0378 */ WIDTHS( 1, 1, 1, 1 ), + /* U+037C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0380 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0384 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0388 */ WIDTHS( 1, 1, 1, 1 ), + /* U+038C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0390 */ WIDTHS( 1, 3, 3, 3 ), + /* U+0394 */ WIDTHS( 3, 3, 3, 3 ), + /* U+0398 */ WIDTHS( 3, 3, 3, 3 ), + /* U+039C */ WIDTHS( 3, 3, 3, 3 ), + /* U+03A0 */ WIDTHS( 3, 3, 1, 3 ), + /* U+03A4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+03A8 */ WIDTHS( 3, 3, 1, 1 ), + /* U+03AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+03B0 */ WIDTHS( 1, 3, 3, 3 ), + /* U+03B4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+03B8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+03BC */ WIDTHS( 3, 3, 3, 3 ), + /* U+03C0 */ WIDTHS( 3, 3, 1, 3 ), + /* U+03C4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+03C8 */ WIDTHS( 3, 3, 1, 1 ), + /* U+03CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+03D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+03D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+03D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+03DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+03E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+03E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+03E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+03EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+03F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+03F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+03F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+03FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [4] */ { + /* U+0400 */ WIDTHS( 1, 3, 1, 1 ), + /* U+0404 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0408 */ WIDTHS( 1, 1, 1, 1 ), + /* U+040C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0410 */ WIDTHS( 3, 3, 3, 3 ), + /* U+0414 */ WIDTHS( 3, 3, 3, 3 ), + /* U+0418 */ WIDTHS( 3, 3, 3, 3 ), + /* U+041C */ WIDTHS( 3, 3, 3, 3 ), + /* U+0420 */ WIDTHS( 3, 3, 3, 3 ), + /* U+0424 */ WIDTHS( 3, 3, 3, 3 ), + /* U+0428 */ WIDTHS( 3, 3, 3, 3 ), + /* U+042C */ WIDTHS( 3, 3, 3, 3 ), + /* U+0430 */ WIDTHS( 3, 3, 3, 3 ), + /* U+0434 */ WIDTHS( 3, 3, 3, 3 ), + /* U+0438 */ WIDTHS( 3, 3, 3, 3 ), + /* U+043C */ WIDTHS( 3, 3, 3, 3 ), + /* U+0440 */ WIDTHS( 3, 3, 3, 3 ), + /* U+0444 */ WIDTHS( 3, 3, 3, 3 ), + /* U+0448 */ WIDTHS( 3, 3, 3, 3 ), + /* U+044C */ WIDTHS( 3, 3, 3, 3 ), + /* U+0450 */ WIDTHS( 1, 3, 1, 1 ), + /* U+0454 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0458 */ WIDTHS( 1, 1, 1, 1 ), + /* U+045C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0460 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0464 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0468 */ WIDTHS( 1, 1, 1, 1 ), + /* U+046C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0470 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0474 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0478 */ WIDTHS( 1, 1, 1, 1 ), + /* U+047C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0480 */ WIDTHS( 1, 1, 1, 0 ), + /* U+0484 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0488 */ WIDTHS( 0, 0, 1, 1 ), + /* U+048C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0490 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0494 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0498 */ WIDTHS( 1, 1, 1, 1 ), + /* U+049C */ WIDTHS( 1, 1, 1, 1 ), + /* U+04A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+04B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+04C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+04D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+04E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+04F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+04FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [5] */ { + /* U+0500 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0504 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0508 */ WIDTHS( 1, 1, 1, 1 ), + /* U+050C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0510 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0514 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0518 */ WIDTHS( 1, 1, 1, 1 ), + /* U+051C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0520 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0524 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0528 */ WIDTHS( 1, 1, 1, 1 ), + /* U+052C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0530 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0534 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0538 */ WIDTHS( 1, 1, 1, 1 ), + /* U+053C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0540 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0544 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0548 */ WIDTHS( 1, 1, 1, 1 ), + /* U+054C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0550 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0554 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0558 */ WIDTHS( 1, 1, 1, 1 ), + /* U+055C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0560 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0564 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0568 */ WIDTHS( 1, 1, 1, 1 ), + /* U+056C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0570 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0574 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0578 */ WIDTHS( 1, 1, 1, 1 ), + /* U+057C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0580 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0584 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0588 */ WIDTHS( 1, 1, 1, 1 ), + /* U+058C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0590 */ WIDTHS( 1, 0, 0, 0 ), + /* U+0594 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0598 */ WIDTHS( 0, 0, 0, 0 ), + /* U+059C */ WIDTHS( 0, 0, 0, 0 ), + /* U+05A0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+05A4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+05A8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+05AC */ WIDTHS( 0, 0, 0, 0 ), + /* U+05B0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+05B4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+05B8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+05BC */ WIDTHS( 0, 0, 1, 0 ), + /* U+05C0 */ WIDTHS( 1, 0, 0, 1 ), + /* U+05C4 */ WIDTHS( 0, 0, 1, 0 ), + /* U+05C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+05CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+05D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+05D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+05D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+05DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+05E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+05E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+05E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+05EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+05F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+05F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+05F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+05FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [6] */ { + /* U+0600 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0604 */ WIDTHS( 0, 0, 1, 1 ), + /* U+0608 */ WIDTHS( 1, 1, 1, 1 ), + /* U+060C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0610 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0614 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0618 */ WIDTHS( 0, 0, 0, 1 ), + /* U+061C */ WIDTHS( 0, 1, 1, 1 ), + /* U+0620 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0624 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0628 */ WIDTHS( 1, 1, 1, 1 ), + /* U+062C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0630 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0634 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0638 */ WIDTHS( 1, 1, 1, 1 ), + /* U+063C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0640 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0644 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0648 */ WIDTHS( 1, 1, 1, 0 ), + /* U+064C */ WIDTHS( 0, 0, 0, 0 ), + /* U+0650 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0654 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0658 */ WIDTHS( 0, 0, 0, 0 ), + /* U+065C */ WIDTHS( 0, 0, 0, 0 ), + /* U+0660 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0664 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0668 */ WIDTHS( 1, 1, 1, 1 ), + /* U+066C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0670 */ WIDTHS( 0, 1, 1, 1 ), + /* U+0674 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0678 */ WIDTHS( 1, 1, 1, 1 ), + /* U+067C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0680 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0684 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0688 */ WIDTHS( 1, 1, 1, 1 ), + /* U+068C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0690 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0694 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0698 */ WIDTHS( 1, 1, 1, 1 ), + /* U+069C */ WIDTHS( 1, 1, 1, 1 ), + /* U+06A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+06A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+06A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+06AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+06B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+06B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+06B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+06BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+06C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+06C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+06C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+06CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+06D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+06D4 */ WIDTHS( 1, 1, 0, 0 ), + /* U+06D8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+06DC */ WIDTHS( 0, 0, 1, 0 ), + /* U+06E0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+06E4 */ WIDTHS( 0, 1, 1, 0 ), + /* U+06E8 */ WIDTHS( 0, 1, 0, 0 ), + /* U+06EC */ WIDTHS( 0, 0, 1, 1 ), + /* U+06F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+06F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+06F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+06FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [7] */ { + /* U+0700 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0704 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0708 */ WIDTHS( 1, 1, 1, 1 ), + /* U+070C */ WIDTHS( 1, 1, 1, 0 ), + /* U+0710 */ WIDTHS( 1, 0, 1, 1 ), + /* U+0714 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0718 */ WIDTHS( 1, 1, 1, 1 ), + /* U+071C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0720 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0724 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0728 */ WIDTHS( 1, 1, 1, 1 ), + /* U+072C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0730 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0734 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0738 */ WIDTHS( 0, 0, 0, 0 ), + /* U+073C */ WIDTHS( 0, 0, 0, 0 ), + /* U+0740 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0744 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0748 */ WIDTHS( 0, 0, 0, 1 ), + /* U+074C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0750 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0754 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0758 */ WIDTHS( 1, 1, 1, 1 ), + /* U+075C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0760 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0764 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0768 */ WIDTHS( 1, 1, 1, 1 ), + /* U+076C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0770 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0774 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0778 */ WIDTHS( 1, 1, 1, 1 ), + /* U+077C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0780 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0784 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0788 */ WIDTHS( 1, 1, 1, 1 ), + /* U+078C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0790 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0794 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0798 */ WIDTHS( 1, 1, 1, 1 ), + /* U+079C */ WIDTHS( 1, 1, 1, 1 ), + /* U+07A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+07A4 */ WIDTHS( 1, 1, 0, 0 ), + /* U+07A8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+07AC */ WIDTHS( 0, 0, 0, 0 ), + /* U+07B0 */ WIDTHS( 0, 1, 1, 1 ), + /* U+07B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+07B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+07BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+07C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+07C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+07C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+07CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+07D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+07D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+07D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+07DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+07E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+07E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+07E8 */ WIDTHS( 1, 1, 1, 0 ), + /* U+07EC */ WIDTHS( 0, 0, 0, 0 ), + /* U+07F0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+07F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+07F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+07FC */ WIDTHS( 1, 0, 1, 1 ), + }, + /* [8] */ { + /* U+0800 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0804 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0808 */ WIDTHS( 1, 1, 1, 1 ), + /* U+080C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0810 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0814 */ WIDTHS( 1, 1, 0, 0 ), + /* U+0818 */ WIDTHS( 0, 0, 1, 0 ), + /* U+081C */ WIDTHS( 0, 0, 0, 0 ), + /* U+0820 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0824 */ WIDTHS( 1, 0, 0, 0 ), + /* U+0828 */ WIDTHS( 1, 0, 0, 0 ), + /* U+082C */ WIDTHS( 0, 0, 1, 1 ), + /* U+0830 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0834 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0838 */ WIDTHS( 1, 1, 1, 1 ), + /* U+083C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0840 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0844 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0848 */ WIDTHS( 1, 1, 1, 1 ), + /* U+084C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0850 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0854 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0858 */ WIDTHS( 1, 0, 0, 0 ), + /* U+085C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0860 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0864 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0868 */ WIDTHS( 1, 1, 1, 1 ), + /* U+086C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0870 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0874 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0878 */ WIDTHS( 1, 1, 1, 1 ), + /* U+087C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0880 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0884 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0888 */ WIDTHS( 1, 1, 1, 1 ), + /* U+088C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0890 */ WIDTHS( 0, 0, 1, 1 ), + /* U+0894 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0898 */ WIDTHS( 0, 0, 0, 0 ), + /* U+089C */ WIDTHS( 0, 0, 0, 0 ), + /* U+08A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+08A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+08A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+08AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+08B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+08B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+08B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+08BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+08C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+08C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+08C8 */ WIDTHS( 1, 1, 0, 0 ), + /* U+08CC */ WIDTHS( 0, 0, 0, 0 ), + /* U+08D0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+08D4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+08D8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+08DC */ WIDTHS( 0, 0, 0, 0 ), + /* U+08E0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+08E4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+08E8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+08EC */ WIDTHS( 0, 0, 0, 0 ), + /* U+08F0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+08F4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+08F8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+08FC */ WIDTHS( 0, 0, 0, 0 ), + }, + /* [9] */ { + /* U+0900 */ WIDTHS( 0, 0, 0, 1 ), + /* U+0904 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0908 */ WIDTHS( 1, 1, 1, 1 ), + /* U+090C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0910 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0914 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0918 */ WIDTHS( 1, 1, 1, 1 ), + /* U+091C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0920 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0924 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0928 */ WIDTHS( 1, 1, 1, 1 ), + /* U+092C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0930 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0934 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0938 */ WIDTHS( 1, 1, 0, 1 ), + /* U+093C */ WIDTHS( 0, 1, 1, 1 ), + /* U+0940 */ WIDTHS( 1, 0, 0, 0 ), + /* U+0944 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0948 */ WIDTHS( 0, 1, 1, 1 ), + /* U+094C */ WIDTHS( 1, 0, 1, 1 ), + /* U+0950 */ WIDTHS( 1, 0, 0, 0 ), + /* U+0954 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0958 */ WIDTHS( 1, 1, 1, 1 ), + /* U+095C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0960 */ WIDTHS( 1, 1, 0, 0 ), + /* U+0964 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0968 */ WIDTHS( 1, 1, 1, 1 ), + /* U+096C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0970 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0974 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0978 */ WIDTHS( 1, 1, 1, 1 ), + /* U+097C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0980 */ WIDTHS( 1, 0, 1, 1 ), + /* U+0984 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0988 */ WIDTHS( 1, 1, 1, 1 ), + /* U+098C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0990 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0994 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0998 */ WIDTHS( 1, 1, 1, 1 ), + /* U+099C */ WIDTHS( 1, 1, 1, 1 ), + /* U+09A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+09B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09BC */ WIDTHS( 0, 1, 1, 1 ), + /* U+09C0 */ WIDTHS( 1, 0, 0, 0 ), + /* U+09C4 */ WIDTHS( 0, 1, 1, 1 ), + /* U+09C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09CC */ WIDTHS( 1, 0, 1, 1 ), + /* U+09D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+09E0 */ WIDTHS( 1, 1, 0, 0 ), + /* U+09E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+09F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+09FC */ WIDTHS( 1, 1, 0, 1 ), + }, + /* [10] */ { + /* U+0A00 */ WIDTHS( 1, 0, 0, 1 ), + /* U+0A04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A3C */ WIDTHS( 0, 1, 1, 1 ), + /* U+0A40 */ WIDTHS( 1, 0, 0, 1 ), + /* U+0A44 */ WIDTHS( 1, 1, 1, 0 ), + /* U+0A48 */ WIDTHS( 0, 1, 1, 0 ), + /* U+0A4C */ WIDTHS( 0, 0, 1, 1 ), + /* U+0A50 */ WIDTHS( 1, 0, 1, 1 ), + /* U+0A54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A70 */ WIDTHS( 0, 0, 1, 1 ), + /* U+0A74 */ WIDTHS( 1, 0, 1, 1 ), + /* U+0A78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A80 */ WIDTHS( 1, 0, 0, 1 ), + /* U+0A84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0A9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0ABC */ WIDTHS( 0, 1, 1, 1 ), + /* U+0AC0 */ WIDTHS( 1, 0, 0, 0 ), + /* U+0AC4 */ WIDTHS( 0, 0, 1, 0 ), + /* U+0AC8 */ WIDTHS( 0, 1, 1, 1 ), + /* U+0ACC */ WIDTHS( 1, 0, 1, 1 ), + /* U+0AD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0ADC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AE0 */ WIDTHS( 1, 1, 0, 0 ), + /* U+0AE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0AF8 */ WIDTHS( 1, 1, 0, 0 ), + /* U+0AFC */ WIDTHS( 0, 0, 0, 0 ), + }, + /* [11] */ { + /* U+0B00 */ WIDTHS( 1, 0, 1, 1 ), + /* U+0B04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B3C */ WIDTHS( 0, 1, 1, 0 ), + /* U+0B40 */ WIDTHS( 1, 0, 0, 0 ), + /* U+0B44 */ WIDTHS( 0, 1, 1, 1 ), + /* U+0B48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B4C */ WIDTHS( 1, 0, 1, 1 ), + /* U+0B50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B54 */ WIDTHS( 1, 0, 0, 1 ), + /* U+0B58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B60 */ WIDTHS( 1, 1, 0, 0 ), + /* U+0B64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B80 */ WIDTHS( 1, 1, 0, 1 ), + /* U+0B84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0B9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BC0 */ WIDTHS( 0, 1, 1, 1 ), + /* U+0BC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BCC */ WIDTHS( 1, 0, 1, 1 ), + /* U+0BD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0BFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [12] */ { + /* U+0C00 */ WIDTHS( 0, 1, 1, 1 ), + /* U+0C04 */ WIDTHS( 0, 1, 1, 1 ), + /* U+0C08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C3C */ WIDTHS( 0, 1, 0, 0 ), + /* U+0C40 */ WIDTHS( 0, 1, 1, 1 ), + /* U+0C44 */ WIDTHS( 1, 1, 0, 0 ), + /* U+0C48 */ WIDTHS( 0, 1, 0, 0 ), + /* U+0C4C */ WIDTHS( 0, 0, 1, 1 ), + /* U+0C50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C54 */ WIDTHS( 1, 0, 0, 1 ), + /* U+0C58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C60 */ WIDTHS( 1, 1, 0, 0 ), + /* U+0C64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C80 */ WIDTHS( 1, 0, 1, 1 ), + /* U+0C84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0C9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CBC */ WIDTHS( 0, 1, 1, 0 ), + /* U+0CC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CC4 */ WIDTHS( 1, 1, 0, 1 ), + /* U+0CC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CCC */ WIDTHS( 0, 0, 1, 1 ), + /* U+0CD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CE0 */ WIDTHS( 1, 1, 0, 0 ), + /* U+0CE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0CFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [13] */ { + /* U+0D00 */ WIDTHS( 0, 0, 1, 1 ), + /* U+0D04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D38 */ WIDTHS( 1, 1, 1, 0 ), + /* U+0D3C */ WIDTHS( 0, 1, 1, 1 ), + /* U+0D40 */ WIDTHS( 1, 0, 0, 0 ), + /* U+0D44 */ WIDTHS( 0, 1, 1, 1 ), + /* U+0D48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D4C */ WIDTHS( 1, 0, 1, 1 ), + /* U+0D50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D60 */ WIDTHS( 1, 1, 0, 0 ), + /* U+0D64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D80 */ WIDTHS( 1, 0, 1, 1 ), + /* U+0D84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0D9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DC8 */ WIDTHS( 1, 1, 0, 1 ), + /* U+0DCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DD0 */ WIDTHS( 1, 1, 0, 0 ), + /* U+0DD4 */ WIDTHS( 0, 1, 0, 1 ), + /* U+0DD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0DFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [14] */ { + /* U+0E00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E30 */ WIDTHS( 1, 0, 1, 1 ), + /* U+0E34 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0E38 */ WIDTHS( 0, 0, 0, 1 ), + /* U+0E3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E44 */ WIDTHS( 1, 1, 1, 0 ), + /* U+0E48 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0E4C */ WIDTHS( 0, 0, 0, 1 ), + /* U+0E50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0E9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EB0 */ WIDTHS( 1, 0, 1, 1 ), + /* U+0EB4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0EB8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0EBC */ WIDTHS( 0, 1, 1, 1 ), + /* U+0EC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EC8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0ECC */ WIDTHS( 0, 0, 0, 1 ), + /* U+0ED0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0ED4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0ED8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0EFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [15] */ { + /* U+0F00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F18 */ WIDTHS( 0, 0, 1, 1 ), + /* U+0F1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F34 */ WIDTHS( 1, 0, 1, 0 ), + /* U+0F38 */ WIDTHS( 1, 0, 1, 1 ), + /* U+0F3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F70 */ WIDTHS( 1, 0, 0, 0 ), + /* U+0F74 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0F78 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0F7C */ WIDTHS( 0, 0, 0, 1 ), + /* U+0F80 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0F84 */ WIDTHS( 0, 1, 0, 0 ), + /* U+0F88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0F8C */ WIDTHS( 1, 0, 0, 0 ), + /* U+0F90 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0F94 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0F98 */ WIDTHS( 1, 0, 0, 0 ), + /* U+0F9C */ WIDTHS( 0, 0, 0, 0 ), + /* U+0FA0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0FA4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0FA8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0FAC */ WIDTHS( 0, 0, 0, 0 ), + /* U+0FB0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0FB4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0FB8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+0FBC */ WIDTHS( 0, 1, 1, 1 ), + /* U+0FC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FC4 */ WIDTHS( 1, 1, 0, 1 ), + /* U+0FC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+0FFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [16] */ { + /* U+1000 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1004 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1008 */ WIDTHS( 1, 1, 1, 1 ), + /* U+100C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1010 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1014 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1018 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1020 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1024 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1028 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102C */ WIDTHS( 1, 0, 0, 0 ), + /* U+1030 */ WIDTHS( 0, 1, 0, 0 ), + /* U+1034 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1038 */ WIDTHS( 1, 0, 0, 1 ), + /* U+103C */ WIDTHS( 1, 0, 0, 1 ), + /* U+1040 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1044 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1048 */ WIDTHS( 1, 1, 1, 1 ), + /* U+104C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1050 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1054 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1058 */ WIDTHS( 0, 0, 1, 1 ), + /* U+105C */ WIDTHS( 1, 1, 0, 0 ), + /* U+1060 */ WIDTHS( 0, 1, 1, 1 ), + /* U+1064 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1068 */ WIDTHS( 1, 1, 1, 1 ), + /* U+106C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1070 */ WIDTHS( 1, 0, 0, 0 ), + /* U+1074 */ WIDTHS( 0, 1, 1, 1 ), + /* U+1078 */ WIDTHS( 1, 1, 1, 1 ), + /* U+107C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1080 */ WIDTHS( 1, 1, 0, 1 ), + /* U+1084 */ WIDTHS( 1, 0, 0, 1 ), + /* U+1088 */ WIDTHS( 1, 1, 1, 1 ), + /* U+108C */ WIDTHS( 1, 0, 1, 1 ), + /* U+1090 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1094 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1098 */ WIDTHS( 1, 1, 1, 1 ), + /* U+109C */ WIDTHS( 1, 0, 1, 1 ), + /* U+10A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [17] */ { + /* U+1100 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1104 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1108 */ WIDTHS( 2, 2, 2, 2 ), + /* U+110C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1110 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1114 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1118 */ WIDTHS( 2, 2, 2, 2 ), + /* U+111C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1120 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1124 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1128 */ WIDTHS( 2, 2, 2, 2 ), + /* U+112C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1130 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1134 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1138 */ WIDTHS( 2, 2, 2, 2 ), + /* U+113C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1140 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1144 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1148 */ WIDTHS( 2, 2, 2, 2 ), + /* U+114C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1150 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1154 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1158 */ WIDTHS( 2, 2, 2, 2 ), + /* U+115C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1160 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1164 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1168 */ WIDTHS( 0, 0, 0, 0 ), + /* U+116C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1170 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1174 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1178 */ WIDTHS( 0, 0, 0, 0 ), + /* U+117C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1180 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1184 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1188 */ WIDTHS( 0, 0, 0, 0 ), + /* U+118C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1190 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1194 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1198 */ WIDTHS( 0, 0, 0, 0 ), + /* U+119C */ WIDTHS( 0, 0, 0, 0 ), + /* U+11A0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11A4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11A8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11AC */ WIDTHS( 0, 0, 0, 0 ), + /* U+11B0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11B4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11B8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11BC */ WIDTHS( 0, 0, 0, 0 ), + /* U+11C0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11C4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11C8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11CC */ WIDTHS( 0, 0, 0, 0 ), + /* U+11D0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11D4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11D8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11DC */ WIDTHS( 0, 0, 0, 0 ), + /* U+11E0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11E4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11E8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11EC */ WIDTHS( 0, 0, 0, 0 ), + /* U+11F0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11F4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11F8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11FC */ WIDTHS( 0, 0, 0, 0 ), + }, + /* [18] */ { + /* U+1300 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1304 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1308 */ WIDTHS( 1, 1, 1, 1 ), + /* U+130C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1310 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1314 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1318 */ WIDTHS( 1, 1, 1, 1 ), + /* U+131C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1320 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1324 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1328 */ WIDTHS( 1, 1, 1, 1 ), + /* U+132C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1330 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1334 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1338 */ WIDTHS( 1, 1, 1, 1 ), + /* U+133C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1340 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1344 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1348 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1350 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1354 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1358 */ WIDTHS( 1, 1, 1, 1 ), + /* U+135C */ WIDTHS( 1, 0, 0, 0 ), + /* U+1360 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1364 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1368 */ WIDTHS( 1, 1, 1, 1 ), + /* U+136C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1370 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1374 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1378 */ WIDTHS( 1, 1, 1, 1 ), + /* U+137C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1380 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1384 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1388 */ WIDTHS( 1, 1, 1, 1 ), + /* U+138C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1390 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1394 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1398 */ WIDTHS( 1, 1, 1, 1 ), + /* U+139C */ WIDTHS( 1, 1, 1, 1 ), + /* U+13A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+13B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+13C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+13D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+13E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+13F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [19] */ { + /* U+1700 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1704 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1708 */ WIDTHS( 1, 1, 1, 1 ), + /* U+170C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1710 */ WIDTHS( 1, 1, 0, 0 ), + /* U+1714 */ WIDTHS( 0, 1, 1, 1 ), + /* U+1718 */ WIDTHS( 1, 1, 1, 1 ), + /* U+171C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1720 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1724 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1728 */ WIDTHS( 1, 1, 1, 1 ), + /* U+172C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1730 */ WIDTHS( 1, 1, 0, 0 ), + /* U+1734 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1738 */ WIDTHS( 1, 1, 1, 1 ), + /* U+173C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1740 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1744 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1748 */ WIDTHS( 1, 1, 1, 1 ), + /* U+174C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1750 */ WIDTHS( 1, 1, 0, 0 ), + /* U+1754 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1758 */ WIDTHS( 1, 1, 1, 1 ), + /* U+175C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1760 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1764 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1768 */ WIDTHS( 1, 1, 1, 1 ), + /* U+176C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1770 */ WIDTHS( 1, 1, 0, 0 ), + /* U+1774 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1778 */ WIDTHS( 1, 1, 1, 1 ), + /* U+177C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1780 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1784 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1788 */ WIDTHS( 1, 1, 1, 1 ), + /* U+178C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1790 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1794 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1798 */ WIDTHS( 1, 1, 1, 1 ), + /* U+179C */ WIDTHS( 1, 1, 1, 1 ), + /* U+17A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+17A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+17A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+17AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+17B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+17B4 */ WIDTHS( 0, 0, 1, 0 ), + /* U+17B8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+17BC */ WIDTHS( 0, 0, 1, 1 ), + /* U+17C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+17C4 */ WIDTHS( 1, 1, 0, 1 ), + /* U+17C8 */ WIDTHS( 1, 0, 0, 0 ), + /* U+17CC */ WIDTHS( 0, 0, 0, 0 ), + /* U+17D0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+17D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+17D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+17DC */ WIDTHS( 1, 0, 1, 1 ), + /* U+17E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+17E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+17E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+17EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+17F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+17F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+17F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+17FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [20] */ { + /* U+1800 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1804 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1808 */ WIDTHS( 1, 1, 1, 0 ), + /* U+180C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1810 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1814 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1818 */ WIDTHS( 1, 1, 1, 1 ), + /* U+181C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1820 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1824 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1828 */ WIDTHS( 1, 1, 1, 1 ), + /* U+182C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1830 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1834 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1838 */ WIDTHS( 1, 1, 1, 1 ), + /* U+183C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1840 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1844 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1848 */ WIDTHS( 1, 1, 1, 1 ), + /* U+184C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1850 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1854 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1858 */ WIDTHS( 1, 1, 1, 1 ), + /* U+185C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1860 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1864 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1868 */ WIDTHS( 1, 1, 1, 1 ), + /* U+186C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1870 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1874 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1878 */ WIDTHS( 1, 1, 1, 1 ), + /* U+187C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1880 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1884 */ WIDTHS( 1, 0, 0, 1 ), + /* U+1888 */ WIDTHS( 1, 1, 1, 1 ), + /* U+188C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1890 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1894 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1898 */ WIDTHS( 1, 1, 1, 1 ), + /* U+189C */ WIDTHS( 1, 1, 1, 1 ), + /* U+18A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18A8 */ WIDTHS( 1, 0, 1, 1 ), + /* U+18AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+18B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+18C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+18E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+18F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [21] */ { + /* U+1900 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1904 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1908 */ WIDTHS( 1, 1, 1, 1 ), + /* U+190C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1910 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1914 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1918 */ WIDTHS( 1, 1, 1, 1 ), + /* U+191C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1920 */ WIDTHS( 0, 0, 0, 1 ), + /* U+1924 */ WIDTHS( 1, 1, 1, 0 ), + /* U+1928 */ WIDTHS( 0, 1, 1, 1 ), + /* U+192C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1930 */ WIDTHS( 1, 1, 0, 1 ), + /* U+1934 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1938 */ WIDTHS( 1, 0, 0, 0 ), + /* U+193C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1940 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1944 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1948 */ WIDTHS( 1, 1, 1, 1 ), + /* U+194C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1950 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1954 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1958 */ WIDTHS( 1, 1, 1, 1 ), + /* U+195C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1960 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1964 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1968 */ WIDTHS( 1, 1, 1, 1 ), + /* U+196C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1970 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1974 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1978 */ WIDTHS( 1, 1, 1, 1 ), + /* U+197C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1980 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1984 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1988 */ WIDTHS( 1, 1, 1, 1 ), + /* U+198C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1990 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1994 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1998 */ WIDTHS( 1, 1, 1, 1 ), + /* U+199C */ WIDTHS( 1, 1, 1, 1 ), + /* U+19A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+19B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+19C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+19D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+19E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+19F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+19FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [22] */ { + /* U+1A00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A14 */ WIDTHS( 1, 1, 1, 0 ), + /* U+1A18 */ WIDTHS( 0, 1, 1, 0 ), + /* U+1A1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A54 */ WIDTHS( 1, 1, 0, 1 ), + /* U+1A58 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1A5C */ WIDTHS( 0, 0, 0, 1 ), + /* U+1A60 */ WIDTHS( 0, 1, 0, 1 ), + /* U+1A64 */ WIDTHS( 1, 0, 0, 0 ), + /* U+1A68 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1A6C */ WIDTHS( 0, 1, 1, 1 ), + /* U+1A70 */ WIDTHS( 1, 1, 1, 0 ), + /* U+1A74 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1A78 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1A7C */ WIDTHS( 0, 1, 1, 0 ), + /* U+1A80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1A9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AB0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1AB4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1AB8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1ABC */ WIDTHS( 0, 0, 0, 0 ), + /* U+1AC0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1AC4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1AC8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1ACC */ WIDTHS( 0, 0, 0, 1 ), + /* U+1AD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1ADC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [23] */ { + /* U+1B00 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1B04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B34 */ WIDTHS( 0, 1, 0, 0 ), + /* U+1B38 */ WIDTHS( 0, 0, 0, 1 ), + /* U+1B3C */ WIDTHS( 0, 1, 1, 1 ), + /* U+1B40 */ WIDTHS( 1, 1, 0, 1 ), + /* U+1B44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B68 */ WIDTHS( 1, 1, 1, 0 ), + /* U+1B6C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1B70 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1B74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B80 */ WIDTHS( 0, 0, 1, 1 ), + /* U+1B84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BA0 */ WIDTHS( 1, 1, 0, 0 ), + /* U+1BA4 */ WIDTHS( 0, 0, 1, 1 ), + /* U+1BA8 */ WIDTHS( 0, 0, 1, 0 ), + /* U+1BAC */ WIDTHS( 0, 0, 1, 1 ), + /* U+1BB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BE4 */ WIDTHS( 1, 1, 0, 1 ), + /* U+1BE8 */ WIDTHS( 0, 0, 1, 1 ), + /* U+1BEC */ WIDTHS( 1, 0, 1, 0 ), + /* U+1BF0 */ WIDTHS( 0, 0, 1, 1 ), + /* U+1BF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [24] */ { + /* U+1C00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C2C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1C30 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1C34 */ WIDTHS( 1, 1, 0, 0 ), + /* U+1C38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1C9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CD0 */ WIDTHS( 0, 0, 0, 1 ), + /* U+1CD4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CD8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CDC */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CE0 */ WIDTHS( 0, 1, 0, 0 ), + /* U+1CE4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CE8 */ WIDTHS( 0, 1, 1, 1 ), + /* U+1CEC */ WIDTHS( 1, 0, 1, 1 ), + /* U+1CF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF4 */ WIDTHS( 0, 1, 1, 1 ), + /* U+1CF8 */ WIDTHS( 0, 0, 1, 1 ), + /* U+1CFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [25] */ { + /* U+1D00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DC0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DC4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DC8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DCC */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DD0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DD4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DD8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DDC */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DE0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DE4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DE8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DEC */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DF0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DF4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DF8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DFC */ WIDTHS( 0, 0, 0, 0 ), + }, + /* [26] */ { + /* U+2000 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2004 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2008 */ WIDTHS( 1, 1, 1, 0 ), + /* U+200C */ WIDTHS( 0, 0, 0, 0 ), + /* U+2010 */ WIDTHS( 3, 1, 1, 3 ), + /* U+2014 */ WIDTHS( 3, 3, 3, 1 ), + /* U+2018 */ WIDTHS( 3, 3, 1, 1 ), + /* U+201C */ WIDTHS( 3, 3, 1, 1 ), + /* U+2020 */ WIDTHS( 3, 3, 3, 1 ), + /* U+2024 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2028 */ WIDTHS( 1, 1, 0, 0 ), + /* U+202C */ WIDTHS( 0, 0, 0, 1 ), + /* U+2030 */ WIDTHS( 3, 1, 3, 3 ), + /* U+2034 */ WIDTHS( 1, 3, 1, 1 ), + /* U+2038 */ WIDTHS( 1, 1, 1, 3 ), + /* U+203C */ WIDTHS( 1, 1, 3, 1 ), + /* U+2040 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2044 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2048 */ WIDTHS( 1, 1, 1, 1 ), + /* U+204C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2050 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2054 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2058 */ WIDTHS( 1, 1, 1, 1 ), + /* U+205C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2060 */ WIDTHS( 0, 0, 0, 0 ), + /* U+2064 */ WIDTHS( 0, 1, 0, 0 ), + /* U+2068 */ WIDTHS( 0, 0, 0, 0 ), + /* U+206C */ WIDTHS( 0, 0, 0, 0 ), + /* U+2070 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2074 */ WIDTHS( 3, 1, 1, 1 ), + /* U+2078 */ WIDTHS( 1, 1, 1, 1 ), + /* U+207C */ WIDTHS( 1, 1, 1, 3 ), + /* U+2080 */ WIDTHS( 1, 3, 3, 3 ), + /* U+2084 */ WIDTHS( 3, 1, 1, 1 ), + /* U+2088 */ WIDTHS( 1, 1, 1, 1 ), + /* U+208C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2090 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2094 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2098 */ WIDTHS( 1, 1, 1, 1 ), + /* U+209C */ WIDTHS( 1, 1, 1, 1 ), + /* U+20A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+20A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+20A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+20AC */ WIDTHS( 3, 1, 1, 1 ), + /* U+20B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+20B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+20B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+20BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+20C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+20C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+20C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+20CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+20D0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+20D4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+20D8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+20DC */ WIDTHS( 0, 0, 0, 0 ), + /* U+20E0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+20E4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+20E8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+20EC */ WIDTHS( 0, 0, 0, 0 ), + /* U+20F0 */ WIDTHS( 0, 1, 1, 1 ), + /* U+20F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+20F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+20FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [27] */ { + /* U+2100 */ WIDTHS( 1, 1, 1, 3 ), + /* U+2104 */ WIDTHS( 1, 3, 1, 1 ), + /* U+2108 */ WIDTHS( 1, 3, 1, 1 ), + /* U+210C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2110 */ WIDTHS( 1, 1, 1, 3 ), + /* U+2114 */ WIDTHS( 1, 1, 3, 1 ), + /* U+2118 */ WIDTHS( 1, 1, 1, 1 ), + /* U+211C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2120 */ WIDTHS( 1, 3, 3, 1 ), + /* U+2124 */ WIDTHS( 1, 1, 3, 1 ), + /* U+2128 */ WIDTHS( 1, 1, 1, 3 ), + /* U+212C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2130 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2134 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2138 */ WIDTHS( 1, 1, 1, 1 ), + /* U+213C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2140 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2144 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2148 */ WIDTHS( 1, 1, 1, 1 ), + /* U+214C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2150 */ WIDTHS( 1, 1, 1, 3 ), + /* U+2154 */ WIDTHS( 3, 1, 1, 1 ), + /* U+2158 */ WIDTHS( 1, 1, 1, 3 ), + /* U+215C */ WIDTHS( 3, 3, 3, 1 ), + /* U+2160 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2164 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2168 */ WIDTHS( 3, 3, 3, 3 ), + /* U+216C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2170 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2174 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2178 */ WIDTHS( 3, 3, 1, 1 ), + /* U+217C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2180 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2184 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2188 */ WIDTHS( 1, 3, 1, 1 ), + /* U+218C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2190 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2194 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2198 */ WIDTHS( 3, 3, 1, 1 ), + /* U+219C */ WIDTHS( 1, 1, 1, 1 ), + /* U+21A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+21B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21B8 */ WIDTHS( 3, 3, 1, 1 ), + /* U+21BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+21C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+21D0 */ WIDTHS( 1, 1, 3, 1 ), + /* U+21D4 */ WIDTHS( 3, 1, 1, 1 ), + /* U+21D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+21E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21E4 */ WIDTHS( 1, 1, 1, 3 ), + /* U+21E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+21F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+21FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [28] */ { + /* U+2200 */ WIDTHS( 3, 1, 3, 3 ), + /* U+2204 */ WIDTHS( 1, 1, 1, 3 ), + /* U+2208 */ WIDTHS( 3, 1, 1, 3 ), + /* U+220C */ WIDTHS( 1, 1, 1, 3 ), + /* U+2210 */ WIDTHS( 1, 3, 1, 1 ), + /* U+2214 */ WIDTHS( 1, 3, 1, 1 ), + /* U+2218 */ WIDTHS( 1, 1, 3, 1 ), + /* U+221C */ WIDTHS( 1, 3, 3, 3 ), + /* U+2220 */ WIDTHS( 3, 1, 1, 3 ), + /* U+2224 */ WIDTHS( 1, 3, 1, 3 ), + /* U+2228 */ WIDTHS( 3, 3, 3, 3 ), + /* U+222C */ WIDTHS( 3, 1, 3, 1 ), + /* U+2230 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2234 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2238 */ WIDTHS( 1, 1, 1, 1 ), + /* U+223C */ WIDTHS( 3, 3, 1, 1 ), + /* U+2240 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2244 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2248 */ WIDTHS( 3, 1, 1, 1 ), + /* U+224C */ WIDTHS( 3, 1, 1, 1 ), + /* U+2250 */ WIDTHS( 1, 1, 3, 1 ), + /* U+2254 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2258 */ WIDTHS( 1, 1, 1, 1 ), + /* U+225C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2260 */ WIDTHS( 3, 3, 1, 1 ), + /* U+2264 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2268 */ WIDTHS( 1, 1, 3, 3 ), + /* U+226C */ WIDTHS( 1, 1, 3, 3 ), + /* U+2270 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2274 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2278 */ WIDTHS( 1, 1, 1, 1 ), + /* U+227C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2280 */ WIDTHS( 1, 1, 3, 3 ), + /* U+2284 */ WIDTHS( 1, 1, 3, 3 ), + /* U+2288 */ WIDTHS( 1, 1, 1, 1 ), + /* U+228C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2290 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2294 */ WIDTHS( 1, 3, 1, 1 ), + /* U+2298 */ WIDTHS( 1, 3, 1, 1 ), + /* U+229C */ WIDTHS( 1, 1, 1, 1 ), + /* U+22A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22A4 */ WIDTHS( 1, 3, 1, 1 ), + /* U+22A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+22B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22BC */ WIDTHS( 1, 1, 1, 3 ), + /* U+22C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+22D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+22E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+22F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+22FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [29] */ { + /* U+2300 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2304 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2308 */ WIDTHS( 1, 1, 1, 1 ), + /* U+230C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2310 */ WIDTHS( 1, 1, 3, 1 ), + /* U+2314 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2318 */ WIDTHS( 1, 1, 2, 2 ), + /* U+231C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2320 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2324 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2328 */ WIDTHS( 1, 2, 2, 1 ), + /* U+232C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2330 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2334 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2338 */ WIDTHS( 1, 1, 1, 1 ), + /* U+233C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2340 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2344 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2348 */ WIDTHS( 1, 1, 1, 1 ), + /* U+234C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2350 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2354 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2358 */ WIDTHS( 1, 1, 1, 1 ), + /* U+235C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2360 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2364 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2368 */ WIDTHS( 1, 1, 1, 1 ), + /* U+236C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2370 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2374 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2378 */ WIDTHS( 1, 1, 1, 1 ), + /* U+237C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2380 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2384 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2388 */ WIDTHS( 1, 1, 1, 1 ), + /* U+238C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2390 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2394 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2398 */ WIDTHS( 1, 1, 1, 1 ), + /* U+239C */ WIDTHS( 1, 1, 1, 1 ), + /* U+23A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+23B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+23C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+23D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+23E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23E8 */ WIDTHS( 1, 2, 2, 2 ), + /* U+23EC */ WIDTHS( 2, 1, 1, 1 ), + /* U+23F0 */ WIDTHS( 2, 1, 1, 2 ), + /* U+23F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+23FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [30] */ { + /* U+2400 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2404 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2408 */ WIDTHS( 1, 1, 1, 1 ), + /* U+240C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2410 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2414 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2418 */ WIDTHS( 1, 1, 1, 1 ), + /* U+241C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2420 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2424 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2428 */ WIDTHS( 1, 1, 1, 1 ), + /* U+242C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2430 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2434 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2438 */ WIDTHS( 1, 1, 1, 1 ), + /* U+243C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2440 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2444 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2448 */ WIDTHS( 1, 1, 1, 1 ), + /* U+244C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2450 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2454 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2458 */ WIDTHS( 1, 1, 1, 1 ), + /* U+245C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2460 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2464 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2468 */ WIDTHS( 3, 3, 3, 3 ), + /* U+246C */ WIDTHS( 3, 3, 3, 3 ), + /* U+2470 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2474 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2478 */ WIDTHS( 3, 3, 3, 3 ), + /* U+247C */ WIDTHS( 3, 3, 3, 3 ), + /* U+2480 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2484 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2488 */ WIDTHS( 3, 3, 3, 3 ), + /* U+248C */ WIDTHS( 3, 3, 3, 3 ), + /* U+2490 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2494 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2498 */ WIDTHS( 3, 3, 3, 3 ), + /* U+249C */ WIDTHS( 3, 3, 3, 3 ), + /* U+24A0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24A4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24A8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24AC */ WIDTHS( 3, 3, 3, 3 ), + /* U+24B0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24B4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24B8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24BC */ WIDTHS( 3, 3, 3, 3 ), + /* U+24C0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24C4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24C8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24CC */ WIDTHS( 3, 3, 3, 3 ), + /* U+24D0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24D4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24D8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24DC */ WIDTHS( 3, 3, 3, 3 ), + /* U+24E0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24E4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24E8 */ WIDTHS( 3, 3, 1, 3 ), + /* U+24EC */ WIDTHS( 3, 3, 3, 3 ), + /* U+24F0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24F4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24F8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+24FC */ WIDTHS( 3, 3, 3, 3 ), + }, + /* [31] */ { + /* U+2500 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2504 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2508 */ WIDTHS( 3, 3, 3, 3 ), + /* U+250C */ WIDTHS( 3, 3, 3, 3 ), + /* U+2510 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2514 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2518 */ WIDTHS( 3, 3, 3, 3 ), + /* U+251C */ WIDTHS( 3, 3, 3, 3 ), + /* U+2520 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2524 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2528 */ WIDTHS( 3, 3, 3, 3 ), + /* U+252C */ WIDTHS( 3, 3, 3, 3 ), + /* U+2530 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2534 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2538 */ WIDTHS( 3, 3, 3, 3 ), + /* U+253C */ WIDTHS( 3, 3, 3, 3 ), + /* U+2540 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2544 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2548 */ WIDTHS( 3, 3, 3, 3 ), + /* U+254C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2550 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2554 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2558 */ WIDTHS( 3, 3, 3, 3 ), + /* U+255C */ WIDTHS( 3, 3, 3, 3 ), + /* U+2560 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2564 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2568 */ WIDTHS( 3, 3, 3, 3 ), + /* U+256C */ WIDTHS( 3, 3, 3, 3 ), + /* U+2570 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2574 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2578 */ WIDTHS( 1, 1, 1, 1 ), + /* U+257C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2580 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2584 */ WIDTHS( 3, 3, 3, 3 ), + /* U+2588 */ WIDTHS( 3, 3, 3, 3 ), + /* U+258C */ WIDTHS( 3, 3, 3, 3 ), + /* U+2590 */ WIDTHS( 1, 1, 3, 3 ), + /* U+2594 */ WIDTHS( 3, 3, 1, 1 ), + /* U+2598 */ WIDTHS( 1, 1, 1, 1 ), + /* U+259C */ WIDTHS( 1, 1, 1, 1 ), + /* U+25A0 */ WIDTHS( 3, 3, 1, 3 ), + /* U+25A4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+25A8 */ WIDTHS( 3, 3, 1, 1 ), + /* U+25AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+25B0 */ WIDTHS( 1, 1, 3, 3 ), + /* U+25B4 */ WIDTHS( 1, 1, 3, 3 ), + /* U+25B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+25BC */ WIDTHS( 3, 3, 1, 1 ), + /* U+25C0 */ WIDTHS( 3, 3, 1, 1 ), + /* U+25C4 */ WIDTHS( 1, 1, 3, 3 ), + /* U+25C8 */ WIDTHS( 3, 1, 1, 3 ), + /* U+25CC */ WIDTHS( 1, 1, 3, 3 ), + /* U+25D0 */ WIDTHS( 3, 3, 1, 1 ), + /* U+25D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+25D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+25DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+25E0 */ WIDTHS( 1, 1, 3, 3 ), + /* U+25E4 */ WIDTHS( 3, 3, 1, 1 ), + /* U+25E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+25EC */ WIDTHS( 1, 1, 1, 3 ), + /* U+25F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+25F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+25F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+25FC */ WIDTHS( 1, 2, 2, 1 ), + }, + /* [32] */ { + /* U+2600 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2604 */ WIDTHS( 1, 3, 3, 1 ), + /* U+2608 */ WIDTHS( 1, 3, 1, 1 ), + /* U+260C */ WIDTHS( 1, 1, 3, 3 ), + /* U+2610 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2614 */ WIDTHS( 2, 2, 1, 1 ), + /* U+2618 */ WIDTHS( 1, 1, 1, 1 ), + /* U+261C */ WIDTHS( 3, 1, 3, 1 ), + /* U+2620 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2624 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2628 */ WIDTHS( 1, 1, 1, 1 ), + /* U+262C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2630 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2634 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2638 */ WIDTHS( 1, 1, 1, 1 ), + /* U+263C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2640 */ WIDTHS( 3, 1, 3, 1 ), + /* U+2644 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2648 */ WIDTHS( 2, 2, 2, 2 ), + /* U+264C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2650 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2654 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2658 */ WIDTHS( 1, 1, 1, 1 ), + /* U+265C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2660 */ WIDTHS( 3, 3, 1, 3 ), + /* U+2664 */ WIDTHS( 3, 3, 1, 3 ), + /* U+2668 */ WIDTHS( 3, 3, 3, 1 ), + /* U+266C */ WIDTHS( 3, 3, 1, 3 ), + /* U+2670 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2674 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2678 */ WIDTHS( 1, 1, 1, 1 ), + /* U+267C */ WIDTHS( 1, 1, 1, 2 ), + /* U+2680 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2684 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2688 */ WIDTHS( 1, 1, 1, 1 ), + /* U+268C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2690 */ WIDTHS( 1, 1, 1, 2 ), + /* U+2694 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2698 */ WIDTHS( 1, 1, 1, 1 ), + /* U+269C */ WIDTHS( 1, 1, 3, 3 ), + /* U+26A0 */ WIDTHS( 1, 2, 1, 1 ), + /* U+26A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+26A8 */ WIDTHS( 1, 1, 2, 2 ), + /* U+26AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+26B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+26B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+26B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+26BC */ WIDTHS( 1, 2, 2, 3 ), + /* U+26C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+26C4 */ WIDTHS( 2, 2, 3, 3 ), + /* U+26C8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+26CC */ WIDTHS( 3, 3, 2, 3 ), + /* U+26D0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+26D4 */ WIDTHS( 2, 3, 3, 3 ), + /* U+26D8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+26DC */ WIDTHS( 3, 3, 3, 3 ), + /* U+26E0 */ WIDTHS( 3, 3, 1, 3 ), + /* U+26E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+26E8 */ WIDTHS( 3, 3, 2, 3 ), + /* U+26EC */ WIDTHS( 3, 3, 3, 3 ), + /* U+26F0 */ WIDTHS( 3, 3, 2, 2 ), + /* U+26F4 */ WIDTHS( 3, 2, 3, 3 ), + /* U+26F8 */ WIDTHS( 3, 3, 2, 3 ), + /* U+26FC */ WIDTHS( 3, 2, 3, 3 ), + }, + /* [33] */ { + /* U+2700 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2704 */ WIDTHS( 1, 2, 1, 1 ), + /* U+2708 */ WIDTHS( 1, 1, 2, 2 ), + /* U+270C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2710 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2714 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2718 */ WIDTHS( 1, 1, 1, 1 ), + /* U+271C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2720 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2724 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2728 */ WIDTHS( 2, 1, 1, 1 ), + /* U+272C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2730 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2734 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2738 */ WIDTHS( 1, 1, 1, 1 ), + /* U+273C */ WIDTHS( 1, 3, 1, 1 ), + /* U+2740 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2744 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2748 */ WIDTHS( 1, 1, 1, 1 ), + /* U+274C */ WIDTHS( 2, 1, 2, 1 ), + /* U+2750 */ WIDTHS( 1, 1, 1, 2 ), + /* U+2754 */ WIDTHS( 2, 2, 1, 2 ), + /* U+2758 */ WIDTHS( 1, 1, 1, 1 ), + /* U+275C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2760 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2764 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2768 */ WIDTHS( 1, 1, 1, 1 ), + /* U+276C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2770 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2774 */ WIDTHS( 1, 1, 3, 3 ), + /* U+2778 */ WIDTHS( 3, 3, 3, 3 ), + /* U+277C */ WIDTHS( 3, 3, 3, 3 ), + /* U+2780 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2784 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2788 */ WIDTHS( 1, 1, 1, 1 ), + /* U+278C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2790 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2794 */ WIDTHS( 1, 2, 2, 2 ), + /* U+2798 */ WIDTHS( 1, 1, 1, 1 ), + /* U+279C */ WIDTHS( 1, 1, 1, 1 ), + /* U+27A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+27B0 */ WIDTHS( 2, 1, 1, 1 ), + /* U+27B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27BC */ WIDTHS( 1, 1, 1, 2 ), + /* U+27C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+27D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+27E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+27F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+27FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [34] */ { + /* U+2B00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B18 */ WIDTHS( 1, 1, 1, 2 ), + /* U+2B1C */ WIDTHS( 2, 1, 1, 1 ), + /* U+2B20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B50 */ WIDTHS( 2, 1, 1, 1 ), + /* U+2B54 */ WIDTHS( 1, 2, 3, 3 ), + /* U+2B58 */ WIDTHS( 3, 3, 1, 1 ), + /* U+2B5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2B9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2BFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [35] */ { + /* U+2C00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2C9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CEC */ WIDTHS( 1, 1, 1, 0 ), + /* U+2CF0 */ WIDTHS( 0, 0, 1, 1 ), + /* U+2CF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2CFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [36] */ { + /* U+2D00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D7C */ WIDTHS( 1, 1, 1, 0 ), + /* U+2D80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2D9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2DE0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+2DE4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+2DE8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+2DEC */ WIDTHS( 0, 0, 0, 0 ), + /* U+2DF0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+2DF4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+2DF8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+2DFC */ WIDTHS( 0, 0, 0, 0 ), + }, + /* [37] */ { + /* U+2E00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+2E80 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2E84 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2E88 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2E8C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2E90 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2E94 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2E98 */ WIDTHS( 2, 2, 1, 2 ), + /* U+2E9C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EA0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EA4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EA8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EAC */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EB0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EB4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EB8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EBC */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EC0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EC4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EC8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2ECC */ WIDTHS( 2, 2, 2, 2 ), + /* U+2ED0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2ED4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2ED8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EDC */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EE0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EE4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EE8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EEC */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EF0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2EF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2EF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2EFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [38] */ { + /* U+2F00 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F04 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F08 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F0C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F10 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F14 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F18 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F1C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F20 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F24 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F28 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F2C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F30 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F34 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F38 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F3C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F40 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F44 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F48 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F4C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F50 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F54 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F58 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F5C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F60 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F64 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F68 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F6C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F70 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F74 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F78 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F7C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F80 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F84 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F88 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F8C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F90 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F94 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F98 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2F9C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FA0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FA4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FA8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FAC */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FB0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FB4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FB8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FBC */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FC0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FC4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FC8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FCC */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FD0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FD4 */ WIDTHS( 2, 2, 1, 1 ), + /* U+2FD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2FDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2FE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2FE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2FE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+2FEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+2FF0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [39] */ { + /* U+3000 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3004 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3008 */ WIDTHS( 2, 2, 2, 2 ), + /* U+300C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3010 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3014 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3018 */ WIDTHS( 2, 2, 2, 2 ), + /* U+301C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3020 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3024 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3028 */ WIDTHS( 2, 2, 0, 0 ), + /* U+302C */ WIDTHS( 0, 0, 2, 2 ), + /* U+3030 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3034 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3038 */ WIDTHS( 2, 2, 2, 2 ), + /* U+303C */ WIDTHS( 2, 2, 2, 1 ), + /* U+3040 */ WIDTHS( 1, 2, 2, 2 ), + /* U+3044 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3048 */ WIDTHS( 2, 2, 2, 2 ), + /* U+304C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3050 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3054 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3058 */ WIDTHS( 2, 2, 2, 2 ), + /* U+305C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3060 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3064 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3068 */ WIDTHS( 2, 2, 2, 2 ), + /* U+306C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3070 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3074 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3078 */ WIDTHS( 2, 2, 2, 2 ), + /* U+307C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3080 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3084 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3088 */ WIDTHS( 2, 2, 2, 2 ), + /* U+308C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3090 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3094 */ WIDTHS( 2, 2, 2, 1 ), + /* U+3098 */ WIDTHS( 1, 0, 0, 2 ), + /* U+309C */ WIDTHS( 2, 2, 2, 2 ), + /* U+30A0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30A4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30A8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30AC */ WIDTHS( 2, 2, 2, 2 ), + /* U+30B0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30B4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30B8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30BC */ WIDTHS( 2, 2, 2, 2 ), + /* U+30C0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30C4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30C8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30CC */ WIDTHS( 2, 2, 2, 2 ), + /* U+30D0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30D4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30D8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30DC */ WIDTHS( 2, 2, 2, 2 ), + /* U+30E0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30E4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30E8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30EC */ WIDTHS( 2, 2, 2, 2 ), + /* U+30F0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30F4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30F8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+30FC */ WIDTHS( 2, 2, 2, 2 ), + }, + /* [40] */ { + /* U+3100 */ WIDTHS( 1, 1, 1, 1 ), + /* U+3104 */ WIDTHS( 1, 2, 2, 2 ), + /* U+3108 */ WIDTHS( 2, 2, 2, 2 ), + /* U+310C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3110 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3114 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3118 */ WIDTHS( 2, 2, 2, 2 ), + /* U+311C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3120 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3124 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3128 */ WIDTHS( 2, 2, 2, 2 ), + /* U+312C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3130 */ WIDTHS( 1, 2, 2, 2 ), + /* U+3134 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3138 */ WIDTHS( 2, 2, 2, 2 ), + /* U+313C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3140 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3144 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3148 */ WIDTHS( 2, 2, 2, 2 ), + /* U+314C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3150 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3154 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3158 */ WIDTHS( 2, 2, 2, 2 ), + /* U+315C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3160 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3164 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3168 */ WIDTHS( 2, 2, 2, 2 ), + /* U+316C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3170 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3174 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3178 */ WIDTHS( 2, 2, 2, 2 ), + /* U+317C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3180 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3184 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3188 */ WIDTHS( 2, 2, 2, 2 ), + /* U+318C */ WIDTHS( 2, 2, 2, 1 ), + /* U+3190 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3194 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3198 */ WIDTHS( 2, 2, 2, 2 ), + /* U+319C */ WIDTHS( 2, 2, 2, 2 ), + /* U+31A0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31A4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31A8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31AC */ WIDTHS( 2, 2, 2, 2 ), + /* U+31B0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31B4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31B8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31BC */ WIDTHS( 2, 2, 2, 2 ), + /* U+31C0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31C4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31C8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31CC */ WIDTHS( 2, 2, 2, 2 ), + /* U+31D0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31D4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31D8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31DC */ WIDTHS( 2, 2, 2, 2 ), + /* U+31E0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+31E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+31EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+31F0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31F4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31F8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+31FC */ WIDTHS( 2, 2, 2, 2 ), + }, + /* [41] */ { + /* U+3200 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3204 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3208 */ WIDTHS( 2, 2, 2, 2 ), + /* U+320C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3210 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3214 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3218 */ WIDTHS( 2, 2, 2, 2 ), + /* U+321C */ WIDTHS( 2, 2, 2, 1 ), + /* U+3220 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3224 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3228 */ WIDTHS( 2, 2, 2, 2 ), + /* U+322C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3230 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3234 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3238 */ WIDTHS( 2, 2, 2, 2 ), + /* U+323C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3240 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3244 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3248 */ WIDTHS( 3, 3, 3, 3 ), + /* U+324C */ WIDTHS( 3, 3, 3, 3 ), + /* U+3250 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3254 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3258 */ WIDTHS( 2, 2, 2, 2 ), + /* U+325C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3260 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3264 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3268 */ WIDTHS( 2, 2, 2, 2 ), + /* U+326C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3270 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3274 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3278 */ WIDTHS( 2, 2, 2, 2 ), + /* U+327C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3280 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3284 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3288 */ WIDTHS( 2, 2, 2, 2 ), + /* U+328C */ WIDTHS( 2, 2, 2, 2 ), + /* U+3290 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3294 */ WIDTHS( 2, 2, 2, 2 ), + /* U+3298 */ WIDTHS( 2, 2, 2, 2 ), + /* U+329C */ WIDTHS( 2, 2, 2, 2 ), + /* U+32A0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32A4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32A8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32AC */ WIDTHS( 2, 2, 2, 2 ), + /* U+32B0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32B4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32B8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32BC */ WIDTHS( 2, 2, 2, 2 ), + /* U+32C0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32C4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32C8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32CC */ WIDTHS( 2, 2, 2, 2 ), + /* U+32D0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32D4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32D8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32DC */ WIDTHS( 2, 2, 2, 2 ), + /* U+32E0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32E4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32E8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32EC */ WIDTHS( 2, 2, 2, 2 ), + /* U+32F0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32F4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32F8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+32FC */ WIDTHS( 2, 2, 2, 2 ), + }, + /* [42] */ { + /* U+4D00 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D04 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D08 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D0C */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D10 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D14 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D18 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D1C */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D20 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D24 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D28 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D2C */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D30 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D34 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D38 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D3C */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D40 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D44 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D48 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D4C */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D50 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D54 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D58 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D5C */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D60 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D64 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D68 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D6C */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D70 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D74 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D78 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D7C */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D80 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D84 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D88 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D8C */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D90 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D94 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D98 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4D9C */ WIDTHS( 2, 2, 2, 2 ), + /* U+4DA0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4DA4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4DA8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4DAC */ WIDTHS( 2, 2, 2, 2 ), + /* U+4DB0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4DB4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4DB8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+4DBC */ WIDTHS( 2, 2, 2, 2 ), + /* U+4DC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+4DFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [43] */ { + /* U+A400 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A404 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A408 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A40C */ WIDTHS( 2, 2, 2, 2 ), + /* U+A410 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A414 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A418 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A41C */ WIDTHS( 2, 2, 2, 2 ), + /* U+A420 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A424 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A428 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A42C */ WIDTHS( 2, 2, 2, 2 ), + /* U+A430 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A434 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A438 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A43C */ WIDTHS( 2, 2, 2, 2 ), + /* U+A440 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A444 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A448 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A44C */ WIDTHS( 2, 2, 2, 2 ), + /* U+A450 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A454 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A458 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A45C */ WIDTHS( 2, 2, 2, 2 ), + /* U+A460 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A464 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A468 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A46C */ WIDTHS( 2, 2, 2, 2 ), + /* U+A470 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A474 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A478 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A47C */ WIDTHS( 2, 2, 2, 2 ), + /* U+A480 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A484 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A488 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A48C */ WIDTHS( 2, 1, 1, 1 ), + /* U+A490 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A494 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A498 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A49C */ WIDTHS( 2, 2, 2, 2 ), + /* U+A4A0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A4A4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A4A8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A4AC */ WIDTHS( 2, 2, 2, 2 ), + /* U+A4B0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A4B4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A4B8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A4BC */ WIDTHS( 2, 2, 2, 2 ), + /* U+A4C0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A4C4 */ WIDTHS( 2, 2, 2, 1 ), + /* U+A4C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A4CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A4D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A4D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A4D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A4DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A4E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A4E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A4E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A4EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A4F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A4F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A4F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A4FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [44] */ { + /* U+A600 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A604 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A608 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A60C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A610 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A614 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A618 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A61C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A620 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A624 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A628 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A62C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A630 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A634 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A638 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A63C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A640 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A644 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A648 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A64C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A650 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A654 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A658 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A65C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A660 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A664 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A668 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A66C */ WIDTHS( 1, 1, 1, 0 ), + /* U+A670 */ WIDTHS( 0, 0, 0, 1 ), + /* U+A674 */ WIDTHS( 0, 0, 0, 0 ), + /* U+A678 */ WIDTHS( 0, 0, 0, 0 ), + /* U+A67C */ WIDTHS( 0, 0, 1, 1 ), + /* U+A680 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A684 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A688 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A68C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A690 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A694 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A698 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A69C */ WIDTHS( 1, 1, 0, 0 ), + /* U+A6A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6F0 */ WIDTHS( 0, 0, 1, 1 ), + /* U+A6F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A6FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [45] */ { + /* U+A800 */ WIDTHS( 1, 1, 0, 1 ), + /* U+A804 */ WIDTHS( 1, 1, 0, 1 ), + /* U+A808 */ WIDTHS( 1, 1, 1, 0 ), + /* U+A80C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A810 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A814 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A818 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A81C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A820 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A824 */ WIDTHS( 1, 0, 0, 1 ), + /* U+A828 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A82C */ WIDTHS( 0, 1, 1, 1 ), + /* U+A830 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A834 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A838 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A83C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A840 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A844 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A848 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A84C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A850 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A854 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A858 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A85C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A860 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A864 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A868 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A86C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A870 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A874 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A878 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A87C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A880 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A884 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A888 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A88C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A890 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A894 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A898 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A89C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8C4 */ WIDTHS( 0, 0, 1, 1 ), + /* U+A8C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8E0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+A8E4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+A8E8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+A8EC */ WIDTHS( 0, 0, 0, 0 ), + /* U+A8F0 */ WIDTHS( 0, 0, 1, 1 ), + /* U+A8F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A8FC */ WIDTHS( 1, 1, 1, 0 ), + }, + /* [46] */ { + /* U+A900 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A904 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A908 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A90C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A910 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A914 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A918 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A91C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A920 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A924 */ WIDTHS( 1, 1, 0, 0 ), + /* U+A928 */ WIDTHS( 0, 0, 0, 0 ), + /* U+A92C */ WIDTHS( 0, 0, 1, 1 ), + /* U+A930 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A934 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A938 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A93C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A940 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A944 */ WIDTHS( 1, 1, 1, 0 ), + /* U+A948 */ WIDTHS( 0, 0, 0, 0 ), + /* U+A94C */ WIDTHS( 0, 0, 0, 0 ), + /* U+A950 */ WIDTHS( 0, 0, 1, 1 ), + /* U+A954 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A958 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A95C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A960 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A964 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A968 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A96C */ WIDTHS( 2, 2, 2, 2 ), + /* U+A970 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A974 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A978 */ WIDTHS( 2, 2, 2, 2 ), + /* U+A97C */ WIDTHS( 2, 1, 1, 1 ), + /* U+A980 */ WIDTHS( 0, 0, 0, 1 ), + /* U+A984 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A988 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A98C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A990 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A994 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A998 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A99C */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9B0 */ WIDTHS( 1, 1, 1, 0 ), + /* U+A9B4 */ WIDTHS( 1, 1, 0, 0 ), + /* U+A9B8 */ WIDTHS( 0, 0, 1, 1 ), + /* U+A9BC */ WIDTHS( 0, 0, 1, 1 ), + /* U+A9C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9E4 */ WIDTHS( 1, 0, 1, 1 ), + /* U+A9E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+A9FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [47] */ { + /* U+AA00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA28 */ WIDTHS( 1, 0, 0, 0 ), + /* U+AA2C */ WIDTHS( 0, 0, 0, 1 ), + /* U+AA30 */ WIDTHS( 1, 0, 0, 1 ), + /* U+AA34 */ WIDTHS( 1, 0, 0, 1 ), + /* U+AA38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA40 */ WIDTHS( 1, 1, 1, 0 ), + /* U+AA44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA4C */ WIDTHS( 0, 1, 1, 1 ), + /* U+AA50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA7C */ WIDTHS( 0, 1, 1, 1 ), + /* U+AA80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AA9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAB0 */ WIDTHS( 0, 1, 0, 0 ), + /* U+AAB4 */ WIDTHS( 0, 1, 1, 0 ), + /* U+AAB8 */ WIDTHS( 0, 1, 1, 1 ), + /* U+AABC */ WIDTHS( 1, 1, 0, 0 ), + /* U+AAC0 */ WIDTHS( 1, 0, 1, 1 ), + /* U+AAC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AACC */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AADC */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAEC */ WIDTHS( 0, 0, 1, 1 ), + /* U+AAF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAF4 */ WIDTHS( 1, 1, 0, 1 ), + /* U+AAF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AAFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [48] */ { + /* U+AB00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+AB9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABE4 */ WIDTHS( 1, 0, 1, 1 ), + /* U+ABE8 */ WIDTHS( 0, 1, 1, 1 ), + /* U+ABEC */ WIDTHS( 1, 0, 1, 1 ), + /* U+ABF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+ABFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [49] */ { + /* U+D700 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D704 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D708 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D70C */ WIDTHS( 2, 2, 2, 2 ), + /* U+D710 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D714 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D718 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D71C */ WIDTHS( 2, 2, 2, 2 ), + /* U+D720 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D724 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D728 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D72C */ WIDTHS( 2, 2, 2, 2 ), + /* U+D730 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D734 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D738 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D73C */ WIDTHS( 2, 2, 2, 2 ), + /* U+D740 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D744 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D748 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D74C */ WIDTHS( 2, 2, 2, 2 ), + /* U+D750 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D754 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D758 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D75C */ WIDTHS( 2, 2, 2, 2 ), + /* U+D760 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D764 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D768 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D76C */ WIDTHS( 2, 2, 2, 2 ), + /* U+D770 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D774 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D778 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D77C */ WIDTHS( 2, 2, 2, 2 ), + /* U+D780 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D784 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D788 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D78C */ WIDTHS( 2, 2, 2, 2 ), + /* U+D790 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D794 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D798 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D79C */ WIDTHS( 2, 2, 2, 2 ), + /* U+D7A0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+D7A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+D7A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+D7AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+D7B0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7B4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7B8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7BC */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7C0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7C4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7C8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7CC */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7D0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7D4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7D8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7DC */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7E0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7E4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7E8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7EC */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7F0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7F4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7F8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+D7FC */ WIDTHS( 0, 0, 0, 0 ), + }, + /* [50] */ { + /* U+FB00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB1C */ WIDTHS( 1, 1, 0, 1 ), + /* U+FB20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FB9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FBFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [51] */ { + /* U+FE00 */ WIDTHS( 0, 0, 0, 0 ), + /* U+FE04 */ WIDTHS( 0, 0, 0, 0 ), + /* U+FE08 */ WIDTHS( 0, 0, 0, 0 ), + /* U+FE0C */ WIDTHS( 0, 0, 0, 0 ), + /* U+FE10 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE14 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE18 */ WIDTHS( 2, 2, 1, 1 ), + /* U+FE1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FE20 */ WIDTHS( 0, 0, 0, 0 ), + /* U+FE24 */ WIDTHS( 0, 0, 0, 0 ), + /* U+FE28 */ WIDTHS( 0, 0, 0, 0 ), + /* U+FE2C */ WIDTHS( 0, 0, 0, 0 ), + /* U+FE30 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE34 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE38 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE3C */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE40 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE44 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE48 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE4C */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE50 */ WIDTHS( 2, 2, 2, 1 ), + /* U+FE54 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE58 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE5C */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE60 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE64 */ WIDTHS( 2, 2, 2, 1 ), + /* U+FE68 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FE6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FE70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FE74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FE78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FE7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FE80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FE84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FE88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FE8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FE90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FE94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FE98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FE9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FECC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FED0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FED4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FED8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FEFC */ WIDTHS( 1, 1, 1, 0 ), + }, + /* [52] */ { + /* U+FF00 */ WIDTHS( 1, 2, 2, 2 ), + /* U+FF04 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF08 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF0C */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF10 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF14 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF18 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF1C */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF20 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF24 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF28 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF2C */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF30 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF34 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF38 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF3C */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF40 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF44 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF48 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF4C */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF50 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF54 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF58 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF5C */ WIDTHS( 2, 2, 2, 2 ), + /* U+FF60 */ WIDTHS( 2, 1, 1, 1 ), + /* U+FF64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FF9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFE0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+FFE4 */ WIDTHS( 2, 2, 2, 1 ), + /* U+FFE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+FFF8 */ WIDTHS( 1, 0, 0, 0 ), + /* U+FFFC */ WIDTHS( 1, 3, 1, 1 ), + }, + /* [53] */ { + /* U+10100 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10104 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10108 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1010C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10110 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10114 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10118 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1011C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10120 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10124 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10128 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1012C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10130 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10134 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10138 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1013C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10140 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10144 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10148 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1014C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10150 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10154 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10158 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1015C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10160 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10164 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10168 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1016C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10170 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10174 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10178 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1017C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10180 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10184 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10188 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1018C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10190 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10194 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10198 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1019C */ WIDTHS( 1, 1, 1, 1 ), + /* U+101A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+101B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+101C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+101D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+101E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+101F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+101FC */ WIDTHS( 1, 0, 1, 1 ), + }, + /* [54] */ { + /* U+10200 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10204 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10208 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1020C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10210 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10214 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10218 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1021C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10220 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10224 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10228 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1022C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10230 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10234 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10238 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1023C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10240 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10244 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10248 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1024C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10250 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10254 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10258 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1025C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10260 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10264 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10268 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1026C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10270 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10274 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10278 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1027C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10280 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10284 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10288 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1028C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10290 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10294 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10298 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1029C */ WIDTHS( 1, 1, 1, 1 ), + /* U+102A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+102B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+102C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+102D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+102E0 */ WIDTHS( 0, 1, 1, 1 ), + /* U+102E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+102F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+102FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [55] */ { + /* U+10300 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10304 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10308 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1030C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10310 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10314 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10318 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1031C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10320 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10324 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10328 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1032C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10330 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10334 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10338 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1033C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10340 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10344 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10348 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1034C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10350 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10354 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10358 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1035C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10360 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10364 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10368 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1036C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10370 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10374 */ WIDTHS( 1, 1, 0, 0 ), + /* U+10378 */ WIDTHS( 0, 0, 0, 1 ), + /* U+1037C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10380 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10384 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10388 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1038C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10390 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10394 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10398 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1039C */ WIDTHS( 1, 1, 1, 1 ), + /* U+103A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+103B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+103C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+103D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+103E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+103F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+103FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [56] */ { + /* U+10A00 */ WIDTHS( 1, 0, 0, 0 ), + /* U+10A04 */ WIDTHS( 1, 0, 0, 1 ), + /* U+10A08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A0C */ WIDTHS( 0, 0, 0, 0 ), + /* U+10A10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A38 */ WIDTHS( 0, 0, 0, 1 ), + /* U+10A3C */ WIDTHS( 1, 1, 1, 0 ), + /* U+10A40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10A9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10ABC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10ACC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10ADC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AE4 */ WIDTHS( 1, 0, 0, 1 ), + /* U+10AE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10AFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [57] */ { + /* U+10D00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D24 */ WIDTHS( 0, 0, 0, 0 ), + /* U+10D28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10D9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10DFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [58] */ { + /* U+10E00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10E9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EA8 */ WIDTHS( 1, 1, 1, 0 ), + /* U+10EAC */ WIDTHS( 0, 1, 1, 1 ), + /* U+10EB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10ECC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10ED0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10ED4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10ED8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10EFC */ WIDTHS( 1, 0, 0, 0 ), + }, + /* [59] */ { + /* U+10F00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F44 */ WIDTHS( 1, 1, 0, 0 ), + /* U+10F48 */ WIDTHS( 0, 0, 0, 0 ), + /* U+10F4C */ WIDTHS( 0, 0, 0, 0 ), + /* U+10F50 */ WIDTHS( 0, 1, 1, 1 ), + /* U+10F54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F80 */ WIDTHS( 1, 1, 0, 0 ), + /* U+10F84 */ WIDTHS( 0, 0, 1, 1 ), + /* U+10F88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10F9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+10FFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [60] */ { + /* U+11000 */ WIDTHS( 1, 0, 1, 1 ), + /* U+11004 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11008 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1100C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11010 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11014 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11018 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1101C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11020 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11024 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11028 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1102C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11030 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11034 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11038 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1103C */ WIDTHS( 0, 0, 0, 0 ), + /* U+11040 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11044 */ WIDTHS( 0, 0, 0, 1 ), + /* U+11048 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1104C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11050 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11054 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11058 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1105C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11060 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11064 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11068 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1106C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11070 */ WIDTHS( 0, 1, 1, 0 ), + /* U+11074 */ WIDTHS( 0, 1, 1, 1 ), + /* U+11078 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1107C */ WIDTHS( 1, 1, 1, 0 ), + /* U+11080 */ WIDTHS( 0, 0, 1, 1 ), + /* U+11084 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11088 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1108C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11090 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11094 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11098 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1109C */ WIDTHS( 1, 1, 1, 1 ), + /* U+110A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+110B0 */ WIDTHS( 1, 1, 1, 0 ), + /* U+110B4 */ WIDTHS( 0, 0, 0, 1 ), + /* U+110B8 */ WIDTHS( 1, 0, 0, 1 ), + /* U+110BC */ WIDTHS( 1, 0, 1, 1 ), + /* U+110C0 */ WIDTHS( 1, 1, 0, 1 ), + /* U+110C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110CC */ WIDTHS( 1, 0, 1, 1 ), + /* U+110D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+110E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+110F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+110FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [61] */ { + /* U+11100 */ WIDTHS( 0, 0, 0, 1 ), + /* U+11104 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11108 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1110C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11110 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11114 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11118 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1111C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11120 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11124 */ WIDTHS( 1, 1, 1, 0 ), + /* U+11128 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1112C */ WIDTHS( 1, 0, 0, 0 ), + /* U+11130 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11134 */ WIDTHS( 0, 1, 1, 1 ), + /* U+11138 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1113C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11140 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11144 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11148 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1114C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11150 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11154 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11158 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1115C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11160 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11164 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11168 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1116C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11170 */ WIDTHS( 1, 1, 1, 0 ), + /* U+11174 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11178 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1117C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11180 */ WIDTHS( 0, 0, 1, 1 ), + /* U+11184 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11188 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1118C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11190 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11194 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11198 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1119C */ WIDTHS( 1, 1, 1, 1 ), + /* U+111A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+111B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111B4 */ WIDTHS( 1, 1, 0, 0 ), + /* U+111B8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+111BC */ WIDTHS( 0, 0, 0, 1 ), + /* U+111C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111C8 */ WIDTHS( 1, 0, 0, 0 ), + /* U+111CC */ WIDTHS( 0, 1, 1, 0 ), + /* U+111D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+111E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+111F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+111FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [62] */ { + /* U+11200 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11204 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11208 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1120C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11210 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11214 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11218 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1121C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11220 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11224 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11228 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1122C */ WIDTHS( 1, 1, 1, 0 ), + /* U+11230 */ WIDTHS( 0, 0, 1, 1 ), + /* U+11234 */ WIDTHS( 0, 1, 0, 0 ), + /* U+11238 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1123C */ WIDTHS( 1, 1, 0, 1 ), + /* U+11240 */ WIDTHS( 1, 0, 1, 1 ), + /* U+11244 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11248 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1124C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11250 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11254 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11258 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1125C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11260 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11264 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11268 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1126C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11270 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11274 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11278 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1127C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11280 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11284 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11288 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1128C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11290 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11294 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11298 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1129C */ WIDTHS( 1, 1, 1, 1 ), + /* U+112A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+112B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+112C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+112D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112DC */ WIDTHS( 1, 1, 1, 0 ), + /* U+112E0 */ WIDTHS( 1, 1, 1, 0 ), + /* U+112E4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+112E8 */ WIDTHS( 0, 0, 0, 1 ), + /* U+112EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+112F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+112FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [63] */ { + /* U+11300 */ WIDTHS( 0, 0, 1, 1 ), + /* U+11304 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11308 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1130C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11310 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11314 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11318 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1131C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11320 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11324 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11328 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1132C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11330 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11334 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11338 */ WIDTHS( 1, 1, 1, 0 ), + /* U+1133C */ WIDTHS( 0, 1, 1, 1 ), + /* U+11340 */ WIDTHS( 0, 1, 1, 1 ), + /* U+11344 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11348 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1134C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11350 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11354 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11358 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1135C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11360 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11364 */ WIDTHS( 1, 1, 0, 0 ), + /* U+11368 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1136C */ WIDTHS( 0, 1, 1, 1 ), + /* U+11370 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11374 */ WIDTHS( 0, 1, 1, 1 ), + /* U+11378 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1137C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11380 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11384 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11388 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1138C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11390 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11394 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11398 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1139C */ WIDTHS( 1, 1, 1, 1 ), + /* U+113A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+113B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+113C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+113D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+113E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+113F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+113FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [64] */ { + /* U+11400 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11404 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11408 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1140C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11410 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11414 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11418 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1141C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11420 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11424 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11428 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1142C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11430 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11434 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11438 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1143C */ WIDTHS( 0, 0, 0, 0 ), + /* U+11440 */ WIDTHS( 1, 1, 0, 0 ), + /* U+11444 */ WIDTHS( 0, 1, 0, 1 ), + /* U+11448 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1144C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11450 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11454 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11458 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1145C */ WIDTHS( 1, 1, 0, 1 ), + /* U+11460 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11464 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11468 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1146C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11470 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11474 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11478 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1147C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11480 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11484 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11488 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1148C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11490 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11494 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11498 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1149C */ WIDTHS( 1, 1, 1, 1 ), + /* U+114A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+114B0 */ WIDTHS( 1, 1, 1, 0 ), + /* U+114B4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+114B8 */ WIDTHS( 0, 1, 0, 1 ), + /* U+114BC */ WIDTHS( 1, 1, 1, 0 ), + /* U+114C0 */ WIDTHS( 0, 1, 0, 0 ), + /* U+114C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+114D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+114E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+114F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+114FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [65] */ { + /* U+11500 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11504 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11508 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1150C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11510 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11514 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11518 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1151C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11520 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11524 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11528 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1152C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11530 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11534 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11538 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1153C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11540 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11544 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11548 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1154C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11550 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11554 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11558 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1155C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11560 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11564 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11568 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1156C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11570 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11574 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11578 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1157C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11580 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11584 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11588 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1158C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11590 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11594 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11598 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1159C */ WIDTHS( 1, 1, 1, 1 ), + /* U+115A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+115B0 */ WIDTHS( 1, 1, 0, 0 ), + /* U+115B4 */ WIDTHS( 0, 0, 1, 1 ), + /* U+115B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115BC */ WIDTHS( 0, 0, 1, 0 ), + /* U+115C0 */ WIDTHS( 0, 1, 1, 1 ), + /* U+115C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+115D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115DC */ WIDTHS( 0, 0, 1, 1 ), + /* U+115E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+115F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+115FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [66] */ { + /* U+11600 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11604 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11608 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1160C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11610 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11614 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11618 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1161C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11620 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11624 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11628 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1162C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11630 */ WIDTHS( 1, 1, 1, 0 ), + /* U+11634 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11638 */ WIDTHS( 0, 0, 0, 1 ), + /* U+1163C */ WIDTHS( 1, 0, 1, 0 ), + /* U+11640 */ WIDTHS( 0, 1, 1, 1 ), + /* U+11644 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11648 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1164C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11650 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11654 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11658 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1165C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11660 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11664 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11668 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1166C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11670 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11674 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11678 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1167C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11680 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11684 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11688 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1168C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11690 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11694 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11698 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1169C */ WIDTHS( 1, 1, 1, 1 ), + /* U+116A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116A8 */ WIDTHS( 1, 1, 1, 0 ), + /* U+116AC */ WIDTHS( 1, 0, 1, 1 ), + /* U+116B0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+116B4 */ WIDTHS( 0, 0, 1, 0 ), + /* U+116B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+116C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+116D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+116E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+116F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+116FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [67] */ { + /* U+11700 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11704 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11708 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1170C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11710 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11714 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11718 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1171C */ WIDTHS( 1, 0, 0, 0 ), + /* U+11720 */ WIDTHS( 1, 1, 0, 0 ), + /* U+11724 */ WIDTHS( 0, 0, 1, 0 ), + /* U+11728 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1172C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11730 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11734 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11738 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1173C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11740 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11744 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11748 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1174C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11750 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11754 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11758 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1175C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11760 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11764 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11768 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1176C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11770 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11774 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11778 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1177C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11780 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11784 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11788 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1178C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11790 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11794 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11798 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1179C */ WIDTHS( 1, 1, 1, 1 ), + /* U+117A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+117B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+117C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+117D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+117E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+117F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+117FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [68] */ { + /* U+11800 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11804 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11808 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1180C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11810 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11814 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11818 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1181C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11820 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11824 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11828 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1182C */ WIDTHS( 1, 1, 1, 0 ), + /* U+11830 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11834 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11838 */ WIDTHS( 1, 0, 0, 1 ), + /* U+1183C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11840 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11844 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11848 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1184C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11850 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11854 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11858 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1185C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11860 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11864 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11868 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1186C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11870 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11874 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11878 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1187C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11880 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11884 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11888 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1188C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11890 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11894 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11898 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1189C */ WIDTHS( 1, 1, 1, 1 ), + /* U+118A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+118B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+118C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+118D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+118E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+118F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+118FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [69] */ { + /* U+11900 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11904 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11908 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1190C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11910 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11914 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11918 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1191C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11920 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11924 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11928 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1192C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11930 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11934 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11938 */ WIDTHS( 1, 1, 1, 0 ), + /* U+1193C */ WIDTHS( 0, 1, 0, 1 ), + /* U+11940 */ WIDTHS( 1, 1, 1, 0 ), + /* U+11944 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11948 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1194C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11950 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11954 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11958 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1195C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11960 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11964 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11968 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1196C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11970 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11974 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11978 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1197C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11980 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11984 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11988 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1198C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11990 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11994 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11998 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1199C */ WIDTHS( 1, 1, 1, 1 ), + /* U+119A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+119B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+119C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+119D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119D4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+119D8 */ WIDTHS( 1, 1, 0, 0 ), + /* U+119DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+119E0 */ WIDTHS( 0, 1, 1, 1 ), + /* U+119E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+119F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+119FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [70] */ { + /* U+11A00 */ WIDTHS( 1, 0, 0, 0 ), + /* U+11A04 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11A08 */ WIDTHS( 0, 0, 0, 1 ), + /* U+11A0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A30 */ WIDTHS( 1, 1, 1, 0 ), + /* U+11A34 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11A38 */ WIDTHS( 0, 1, 1, 0 ), + /* U+11A3C */ WIDTHS( 0, 0, 0, 1 ), + /* U+11A40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A44 */ WIDTHS( 1, 1, 1, 0 ), + /* U+11A48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A50 */ WIDTHS( 1, 0, 0, 0 ), + /* U+11A54 */ WIDTHS( 0, 0, 0, 1 ), + /* U+11A58 */ WIDTHS( 1, 0, 0, 0 ), + /* U+11A5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11A88 */ WIDTHS( 1, 1, 0, 0 ), + /* U+11A8C */ WIDTHS( 0, 0, 0, 0 ), + /* U+11A90 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11A94 */ WIDTHS( 0, 0, 0, 1 ), + /* U+11A98 */ WIDTHS( 0, 0, 1, 1 ), + /* U+11A9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11ABC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11ACC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11ADC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11AFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [71] */ { + /* U+11C00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C30 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11C34 */ WIDTHS( 0, 0, 0, 1 ), + /* U+11C38 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11C3C */ WIDTHS( 0, 0, 1, 0 ), + /* U+11C40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11C90 */ WIDTHS( 1, 1, 0, 0 ), + /* U+11C94 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11C98 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11C9C */ WIDTHS( 0, 0, 0, 0 ), + /* U+11CA0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11CA4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11CA8 */ WIDTHS( 1, 1, 0, 0 ), + /* U+11CAC */ WIDTHS( 0, 0, 0, 0 ), + /* U+11CB0 */ WIDTHS( 0, 1, 0, 0 ), + /* U+11CB4 */ WIDTHS( 1, 0, 0, 1 ), + /* U+11CB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11CFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [72] */ { + /* U+11D00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D30 */ WIDTHS( 1, 0, 0, 0 ), + /* U+11D34 */ WIDTHS( 0, 0, 0, 1 ), + /* U+11D38 */ WIDTHS( 1, 1, 0, 1 ), + /* U+11D3C */ WIDTHS( 0, 0, 1, 0 ), + /* U+11D40 */ WIDTHS( 0, 0, 0, 0 ), + /* U+11D44 */ WIDTHS( 0, 0, 1, 0 ), + /* U+11D48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D90 */ WIDTHS( 0, 0, 1, 1 ), + /* U+11D94 */ WIDTHS( 1, 0, 1, 0 ), + /* U+11D98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11D9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11DFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [73] */ { + /* U+11E00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11E9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11ECC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11ED0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11ED4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11ED8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EF0 */ WIDTHS( 1, 1, 1, 0 ), + /* U+11EF4 */ WIDTHS( 0, 1, 1, 1 ), + /* U+11EF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11EFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [74] */ { + /* U+11F00 */ WIDTHS( 0, 0, 1, 1 ), + /* U+11F04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F34 */ WIDTHS( 1, 1, 0, 0 ), + /* U+11F38 */ WIDTHS( 0, 0, 0, 1 ), + /* U+11F3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F40 */ WIDTHS( 0, 1, 0, 1 ), + /* U+11F44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11F9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+11FFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [75] */ { + /* U+13400 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13404 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13408 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1340C */ WIDTHS( 1, 1, 1, 1 ), + /* U+13410 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13414 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13418 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1341C */ WIDTHS( 1, 1, 1, 1 ), + /* U+13420 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13424 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13428 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1342C */ WIDTHS( 1, 1, 1, 1 ), + /* U+13430 */ WIDTHS( 0, 0, 0, 0 ), + /* U+13434 */ WIDTHS( 0, 0, 0, 0 ), + /* U+13438 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1343C */ WIDTHS( 0, 0, 0, 0 ), + /* U+13440 */ WIDTHS( 0, 1, 1, 1 ), + /* U+13444 */ WIDTHS( 1, 1, 1, 0 ), + /* U+13448 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1344C */ WIDTHS( 0, 0, 0, 0 ), + /* U+13450 */ WIDTHS( 0, 0, 0, 0 ), + /* U+13454 */ WIDTHS( 0, 0, 1, 1 ), + /* U+13458 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1345C */ WIDTHS( 1, 1, 1, 1 ), + /* U+13460 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13464 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13468 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1346C */ WIDTHS( 1, 1, 1, 1 ), + /* U+13470 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13474 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13478 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1347C */ WIDTHS( 1, 1, 1, 1 ), + /* U+13480 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13484 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13488 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1348C */ WIDTHS( 1, 1, 1, 1 ), + /* U+13490 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13494 */ WIDTHS( 1, 1, 1, 1 ), + /* U+13498 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1349C */ WIDTHS( 1, 1, 1, 1 ), + /* U+134A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+134B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+134C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+134D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+134E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+134F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+134FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [76] */ { + /* U+16A00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16A9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16ABC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16ACC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16ADC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AF0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+16AF4 */ WIDTHS( 0, 1, 1, 1 ), + /* U+16AF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16AFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [77] */ { + /* U+16B00, U+1E100 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B04, U+1E104 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B08, U+1E108 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B0C, U+1E10C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B10, U+1E110 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B14, U+1E114 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B18, U+1E118 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B1C, U+1E11C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B20, U+1E120 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B24, U+1E124 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B28, U+1E128 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B2C, U+1E12C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B30, U+1E130 */ WIDTHS( 0, 0, 0, 0 ), + /* U+16B34, U+1E134 */ WIDTHS( 0, 0, 0, 1 ), + /* U+16B38, U+1E138 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B3C, U+1E13C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B40, U+1E140 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B44, U+1E144 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B48, U+1E148 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B4C, U+1E14C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B50, U+1E150 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B54, U+1E154 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B58, U+1E158 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B5C, U+1E15C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B60, U+1E160 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B64, U+1E164 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B68, U+1E168 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B6C, U+1E16C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B70, U+1E170 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B74, U+1E174 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B78, U+1E178 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B7C, U+1E17C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B80, U+1E180 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B84, U+1E184 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B88, U+1E188 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B8C, U+1E18C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B90, U+1E190 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B94, U+1E194 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B98, U+1E198 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16B9C, U+1E19C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BA0, U+1E1A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BA4, U+1E1A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BA8, U+1E1A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BAC, U+1E1AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BB0, U+1E1B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BB4, U+1E1B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BB8, U+1E1B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BBC, U+1E1BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BC0, U+1E1C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BC4, U+1E1C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BC8, U+1E1C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BCC, U+1E1CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BD0, U+1E1D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BD4, U+1E1D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BD8, U+1E1D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BDC, U+1E1DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BE0, U+1E1E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BE4, U+1E1E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BE8, U+1E1E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BEC, U+1E1EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BF0, U+1E1F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BF4, U+1E1F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BF8, U+1E1F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16BFC, U+1E1FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [78] */ { + /* U+16F00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F4C */ WIDTHS( 1, 1, 1, 0 ), + /* U+16F50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F8C */ WIDTHS( 1, 1, 1, 0 ), + /* U+16F90 */ WIDTHS( 0, 0, 0, 1 ), + /* U+16F94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16F9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FE0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+16FE4 */ WIDTHS( 0, 1, 1, 1 ), + /* U+16FE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FF0 */ WIDTHS( 2, 2, 1, 1 ), + /* U+16FF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+16FFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [79] */ { + /* U+18700 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18704 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18708 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1870C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18710 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18714 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18718 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1871C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18720 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18724 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18728 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1872C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18730 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18734 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18738 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1873C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18740 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18744 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18748 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1874C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18750 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18754 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18758 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1875C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18760 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18764 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18768 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1876C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18770 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18774 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18778 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1877C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18780 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18784 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18788 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1878C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18790 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18794 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18798 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1879C */ WIDTHS( 2, 2, 2, 2 ), + /* U+187A0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187A4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187A8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187AC */ WIDTHS( 2, 2, 2, 2 ), + /* U+187B0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187B4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187B8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187BC */ WIDTHS( 2, 2, 2, 2 ), + /* U+187C0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187C4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187C8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187CC */ WIDTHS( 2, 2, 2, 2 ), + /* U+187D0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187D4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187D8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187DC */ WIDTHS( 2, 2, 2, 2 ), + /* U+187E0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187E4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187E8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187EC */ WIDTHS( 2, 2, 2, 2 ), + /* U+187F0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187F4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+187F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+187FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [80] */ { + /* U+18C00 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C04 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C08 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C0C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C10 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C14 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C18 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C1C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C20 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C24 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C28 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C2C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C30 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C34 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C38 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C3C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C40 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C44 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C48 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C4C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C50 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C54 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C58 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C5C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C60 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C64 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C68 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C6C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C70 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C74 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C78 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C7C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C80 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C84 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C88 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C8C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C90 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C94 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C98 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18C9C */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CA0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CA4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CA8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CAC */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CB0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CB4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CB8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CBC */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CC0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CC4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CC8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CCC */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CD0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18CD4 */ WIDTHS( 2, 2, 1, 1 ), + /* U+18CD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18CDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+18CE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18CE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18CE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18CEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+18CF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18CF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18CF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18CFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [81] */ { + /* U+18D00 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18D04 */ WIDTHS( 2, 2, 2, 2 ), + /* U+18D08 */ WIDTHS( 2, 1, 1, 1 ), + /* U+18D0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18D9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+18DFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [82] */ { + /* U+1AF00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AF9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1AFF0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1AFF4 */ WIDTHS( 1, 2, 2, 2 ), + /* U+1AFF8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1AFFC */ WIDTHS( 1, 2, 2, 1 ), + }, + /* [83] */ { + /* U+1B100 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B104 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B108 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B10C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B110 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B114 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B118 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B11C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B120 */ WIDTHS( 2, 2, 2, 1 ), + /* U+1B124 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B128 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B12C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B130 */ WIDTHS( 1, 1, 2, 1 ), + /* U+1B134 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B138 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B13C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B140 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B144 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B148 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B14C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B150 */ WIDTHS( 2, 2, 2, 1 ), + /* U+1B154 */ WIDTHS( 1, 2, 1, 1 ), + /* U+1B158 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B15C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B160 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B164 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B168 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B16C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1B170 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B174 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B178 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B17C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B180 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B184 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B188 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B18C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B190 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B194 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B198 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B19C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1A0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1A4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1A8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1AC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1B0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1B4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1B8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1BC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1C0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1C4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1C8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1CC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1D0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1D4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1D8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1DC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1E0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1E4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1E8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1EC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1F0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1F4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1F8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B1FC */ WIDTHS( 2, 2, 2, 2 ), + }, + /* [84] */ { + /* U+1B200 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B204 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B208 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B20C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B210 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B214 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B218 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B21C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B220 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B224 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B228 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B22C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B230 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B234 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B238 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B23C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B240 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B244 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B248 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B24C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B250 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B254 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B258 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B25C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B260 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B264 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B268 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B26C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B270 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B274 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B278 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B27C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B280 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B284 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B288 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B28C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B290 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B294 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B298 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B29C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2A0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2A4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2A8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2AC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2B0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2B4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2B8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2BC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2C0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2C4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2C8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2CC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2D0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2D4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2D8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2DC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2E0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2E4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2E8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2EC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2F0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2F4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2F8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1B2FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [85] */ { + /* U+1BC00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BC9C */ WIDTHS( 1, 0, 0, 1 ), + /* U+1BCA0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1BCA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1BCFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [86] */ { + /* U+1CF00 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF04 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF08 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF0C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF10 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF14 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF18 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF1C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF20 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF24 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF28 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF2C */ WIDTHS( 0, 0, 1, 1 ), + /* U+1CF30 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF34 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF38 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF3C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF40 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1CF44 */ WIDTHS( 0, 0, 0, 1 ), + /* U+1CF48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF74 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF84 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF98 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CF9C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFA0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFA4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFA8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFAC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFBC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFCC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFDC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1CFFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [87] */ { + /* U+1D100 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D104 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D108 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D10C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D110 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D114 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D118 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D11C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D120 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D124 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D128 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D12C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D130 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D134 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D138 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D13C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D140 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D144 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D148 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D14C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D150 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D154 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D158 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D15C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D160 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D164 */ WIDTHS( 1, 1, 1, 0 ), + /* U+1D168 */ WIDTHS( 0, 0, 1, 1 ), + /* U+1D16C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D170 */ WIDTHS( 1, 1, 1, 0 ), + /* U+1D174 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1D178 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1D17C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1D180 */ WIDTHS( 0, 0, 0, 1 ), + /* U+1D184 */ WIDTHS( 1, 0, 0, 0 ), + /* U+1D188 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1D18C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D190 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D194 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D198 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D19C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1A8 */ WIDTHS( 1, 1, 0, 0 ), + /* U+1D1AC */ WIDTHS( 0, 0, 1, 1 ), + /* U+1D1B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D1FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [88] */ { + /* U+1D200 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D204 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D208 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D20C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D210 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D214 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D218 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D21C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D220 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D224 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D228 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D22C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D230 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D234 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D238 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D23C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D240 */ WIDTHS( 1, 1, 0, 0 ), + /* U+1D244 */ WIDTHS( 0, 1, 1, 1 ), + /* U+1D248 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D24C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D250 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D254 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D258 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D25C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D260 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D264 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D268 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D26C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D270 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D274 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D278 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D27C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D280 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D284 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D288 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D28C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D290 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D294 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D298 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D29C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1D2FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [89] */ { + /* U+1DA00 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA04 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA08 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA0C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA10 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA14 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA18 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA1C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA20 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA24 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA28 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA2C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA30 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA34 */ WIDTHS( 0, 0, 0, 1 ), + /* U+1DA38 */ WIDTHS( 1, 1, 1, 0 ), + /* U+1DA3C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA40 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA44 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA48 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA4C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA50 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA54 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA58 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA5C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA60 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA64 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA68 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DA6C */ WIDTHS( 0, 1, 1, 1 ), + /* U+1DA70 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DA74 */ WIDTHS( 1, 0, 1, 1 ), + /* U+1DA78 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DA7C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DA80 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DA84 */ WIDTHS( 0, 1, 1, 1 ), + /* U+1DA88 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DA8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DA90 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DA94 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DA98 */ WIDTHS( 1, 1, 1, 0 ), + /* U+1DA9C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DAA0 */ WIDTHS( 1, 0, 0, 0 ), + /* U+1DAA4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DAA8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DAAC */ WIDTHS( 0, 0, 0, 0 ), + /* U+1DAB0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAB4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAB8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DABC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAC0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAC4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DACC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAD0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAD4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAD8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DADC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAE0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAE4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAE8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAF0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAF4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAF8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1DAFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [90] */ { + /* U+1E000 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1E004 */ WIDTHS( 0, 0, 0, 1 ), + /* U+1E008 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1E00C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1E010 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1E014 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1E018 */ WIDTHS( 0, 1, 1, 0 ), + /* U+1E01C */ WIDTHS( 0, 0, 0, 0 ), + /* U+1E020 */ WIDTHS( 0, 0, 1, 0 ), + /* U+1E024 */ WIDTHS( 0, 1, 0, 0 ), + /* U+1E028 */ WIDTHS( 0, 0, 0, 1 ), + /* U+1E02C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E030 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E034 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E038 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E03C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E040 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E044 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E048 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E04C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E050 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E054 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E058 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E05C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E060 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E064 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E068 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E06C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E070 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E074 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E078 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E07C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E080 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E084 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E088 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E08C */ WIDTHS( 1, 1, 1, 0 ), + /* U+1E090 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E094 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E098 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E09C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E0FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [91] */ { + /* U+1E200 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E204 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E208 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E20C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E210 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E214 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E218 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E21C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E220 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E224 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E228 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E22C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E230 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E234 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E238 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E23C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E240 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E244 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E248 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E24C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E250 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E254 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E258 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E25C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E260 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E264 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E268 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E26C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E270 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E274 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E278 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E27C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E280 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E284 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E288 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E28C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E290 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E294 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E298 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E29C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2AC */ WIDTHS( 1, 1, 0, 1 ), + /* U+1E2B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2EC */ WIDTHS( 0, 0, 0, 0 ), + /* U+1E2F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E2FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [92] */ { + /* U+1E400 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E404 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E408 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E40C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E410 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E414 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E418 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E41C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E420 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E424 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E428 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E42C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E430 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E434 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E438 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E43C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E440 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E444 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E448 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E44C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E450 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E454 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E458 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E45C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E460 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E464 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E468 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E46C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E470 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E474 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E478 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E47C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E480 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E484 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E488 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E48C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E490 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E494 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E498 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E49C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4EC */ WIDTHS( 0, 0, 0, 0 ), + /* U+1E4F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E4FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [93] */ { + /* U+1E800 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E804 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E808 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E80C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E810 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E814 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E818 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E81C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E820 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E824 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E828 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E82C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E830 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E834 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E838 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E83C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E840 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E844 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E848 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E84C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E850 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E854 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E858 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E85C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E860 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E864 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E868 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E86C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E870 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E874 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E878 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E87C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E880 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E884 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E888 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E88C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E890 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E894 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E898 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E89C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8D0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1E8D4 */ WIDTHS( 0, 0, 0, 1 ), + /* U+1E8D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E8FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [94] */ { + /* U+1E900 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E904 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E908 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E90C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E910 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E914 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E918 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E91C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E920 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E924 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E928 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E92C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E930 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E934 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E938 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E93C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E940 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E944 */ WIDTHS( 0, 0, 0, 0 ), + /* U+1E948 */ WIDTHS( 0, 0, 0, 1 ), + /* U+1E94C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E950 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E954 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E958 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E95C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E960 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E964 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E968 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E96C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E970 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E974 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E978 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E97C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E980 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E984 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E988 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E98C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E990 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E994 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E998 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E99C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1E9FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [95] */ { + /* U+1F000 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F004 */ WIDTHS( 2, 1, 1, 1 ), + /* U+1F008 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F00C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F010 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F014 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F018 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F01C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F020 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F024 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F028 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F02C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F030 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F034 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F038 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F03C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F040 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F044 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F048 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F04C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F050 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F054 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F058 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F05C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F060 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F064 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F068 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F06C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F070 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F074 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F078 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F07C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F080 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F084 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F088 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F08C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F090 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F094 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F098 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F09C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0CC */ WIDTHS( 1, 1, 1, 2 ), + /* U+1F0D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F0FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [96] */ { + /* U+1F100 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F104 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F108 */ WIDTHS( 3, 3, 3, 1 ), + /* U+1F10C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F110 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F114 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F118 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F11C */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F120 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F124 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F128 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F12C */ WIDTHS( 3, 3, 1, 1 ), + /* U+1F130 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F134 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F138 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F13C */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F140 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F144 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F148 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F14C */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F150 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F154 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F158 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F15C */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F160 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F164 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F168 */ WIDTHS( 3, 3, 1, 1 ), + /* U+1F16C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F170 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F174 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F178 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F17C */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F180 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F184 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F188 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F18C */ WIDTHS( 3, 3, 2, 3 ), + /* U+1F190 */ WIDTHS( 3, 2, 2, 2 ), + /* U+1F194 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F198 */ WIDTHS( 2, 2, 2, 3 ), + /* U+1F19C */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F1A0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F1A4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F1A8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+1F1AC */ WIDTHS( 3, 1, 1, 1 ), + /* U+1F1B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F1FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [97] */ { + /* U+1F200 */ WIDTHS( 2, 2, 2, 1 ), + /* U+1F204 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F208 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F20C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F210 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F214 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F218 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F21C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F220 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F224 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F228 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F22C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F230 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F234 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F238 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F23C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F240 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F244 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F248 */ WIDTHS( 2, 1, 1, 1 ), + /* U+1F24C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F250 */ WIDTHS( 2, 2, 1, 1 ), + /* U+1F254 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F258 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F25C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F260 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F264 */ WIDTHS( 2, 2, 1, 1 ), + /* U+1F268 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F26C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F270 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F274 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F278 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F27C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F280 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F284 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F288 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F28C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F290 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F294 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F298 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F29C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F2FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [98] */ { + /* U+1F300 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F304 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F308 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F30C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F310 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F314 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F318 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F31C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F320 */ WIDTHS( 2, 1, 1, 1 ), + /* U+1F324 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F328 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F32C */ WIDTHS( 1, 2, 2, 2 ), + /* U+1F330 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F334 */ WIDTHS( 2, 2, 1, 2 ), + /* U+1F338 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F33C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F340 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F344 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F348 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F34C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F350 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F354 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F358 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F35C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F360 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F364 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F368 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F36C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F370 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F374 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F378 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F37C */ WIDTHS( 2, 1, 2, 2 ), + /* U+1F380 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F384 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F388 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F38C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F390 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F394 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F398 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F39C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F3A0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3A4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3A8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3AC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3B0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3B4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3B8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3BC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3C0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3C4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3C8 */ WIDTHS( 2, 2, 2, 1 ), + /* U+1F3CC */ WIDTHS( 1, 1, 1, 2 ), + /* U+1F3D0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F3D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F3DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F3E0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3E4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3E8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3EC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3F0 */ WIDTHS( 2, 1, 1, 1 ), + /* U+1F3F4 */ WIDTHS( 2, 1, 1, 1 ), + /* U+1F3F8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F3FC */ WIDTHS( 2, 2, 2, 2 ), + }, + /* [99] */ { + /* U+1F400 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F404 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F408 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F40C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F410 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F414 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F418 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F41C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F420 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F424 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F428 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F42C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F430 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F434 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F438 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F43C */ WIDTHS( 2, 2, 2, 1 ), + /* U+1F440 */ WIDTHS( 2, 1, 2, 2 ), + /* U+1F444 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F448 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F44C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F450 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F454 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F458 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F45C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F460 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F464 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F468 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F46C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F470 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F474 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F478 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F47C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F480 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F484 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F488 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F48C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F490 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F494 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F498 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F49C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4A0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4A4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4A8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4AC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4B0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4B4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4B8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4BC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4C0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4C4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4C8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4CC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4D0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4D4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4D8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4DC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4E0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4E4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4E8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4EC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4F0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4F4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4F8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F4FC */ WIDTHS( 2, 1, 1, 2 ), + }, + /* [100] */ { + /* U+1F500 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F504 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F508 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F50C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F510 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F514 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F518 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F51C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F520 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F524 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F528 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F52C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F530 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F534 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F538 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F53C */ WIDTHS( 2, 2, 1, 1 ), + /* U+1F540 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F544 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F548 */ WIDTHS( 1, 1, 1, 2 ), + /* U+1F54C */ WIDTHS( 2, 2, 2, 1 ), + /* U+1F550 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F554 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F558 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F55C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F560 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F564 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F568 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F56C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F570 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F574 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F578 */ WIDTHS( 1, 1, 2, 1 ), + /* U+1F57C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F580 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F584 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F588 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F58C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F590 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F594 */ WIDTHS( 1, 2, 2, 1 ), + /* U+1F598 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F59C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5A4 */ WIDTHS( 2, 1, 1, 1 ), + /* U+1F5A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F5F8 */ WIDTHS( 1, 1, 1, 2 ), + /* U+1F5FC */ WIDTHS( 2, 2, 2, 2 ), + }, + /* [101] */ { + /* U+1F600 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F604 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F608 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F60C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F610 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F614 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F618 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F61C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F620 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F624 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F628 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F62C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F630 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F634 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F638 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F63C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F640 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F644 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F648 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F64C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F650 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F654 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F658 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F65C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F660 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F664 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F668 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F66C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F670 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F674 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F678 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F67C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F680 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F684 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F688 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F68C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F690 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F694 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F698 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F69C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F6A0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F6A4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F6A8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F6AC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F6B0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F6B4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F6B8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F6BC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F6C0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F6C4 */ WIDTHS( 2, 2, 1, 1 ), + /* U+1F6C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F6CC */ WIDTHS( 2, 1, 1, 1 ), + /* U+1F6D0 */ WIDTHS( 2, 2, 2, 1 ), + /* U+1F6D4 */ WIDTHS( 1, 2, 2, 2 ), + /* U+1F6D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F6DC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F6E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F6E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F6E8 */ WIDTHS( 1, 1, 1, 2 ), + /* U+1F6EC */ WIDTHS( 2, 1, 1, 1 ), + /* U+1F6F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F6F4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F6F8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F6FC */ WIDTHS( 2, 1, 1, 1 ), + }, + /* [102] */ { + /* U+1F700 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F704 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F708 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F70C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F710 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F714 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F718 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F71C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F720 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F724 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F728 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F72C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F730 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F734 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F738 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F73C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F740 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F744 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F748 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F74C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F750 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F754 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F758 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F75C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F760 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F764 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F768 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F76C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F770 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F774 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F778 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F77C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F780 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F784 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F788 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F78C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F790 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F794 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F798 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F79C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7E0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F7E4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F7E8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F7EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7F0 */ WIDTHS( 2, 1, 1, 1 ), + /* U+1F7F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F7FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [103] */ { + /* U+1F900 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F904 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F908 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1F90C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F910 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F914 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F918 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F91C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F920 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F924 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F928 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F92C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F930 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F934 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F938 */ WIDTHS( 2, 2, 2, 1 ), + /* U+1F93C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F940 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F944 */ WIDTHS( 2, 2, 1, 2 ), + /* U+1F948 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F94C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F950 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F954 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F958 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F95C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F960 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F964 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F968 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F96C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F970 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F974 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F978 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F97C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F980 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F984 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F988 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F98C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F990 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F994 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F998 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F99C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9A0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9A4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9A8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9AC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9B0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9B4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9B8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9BC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9C0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9C4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9C8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9CC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9D0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9D4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9D8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9DC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9E0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9E4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9E8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9EC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9F0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9F4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9F8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1F9FC */ WIDTHS( 2, 2, 2, 2 ), + }, + /* [104] */ { + /* U+1FA00 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA04 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA08 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA0C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA10 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA14 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA18 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA1C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA20 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA24 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA28 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA2C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA30 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA34 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA38 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA3C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA40 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA44 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA48 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA4C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA50 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA54 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA58 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA5C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA60 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA64 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA68 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA6C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA70 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FA74 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FA78 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FA7C */ WIDTHS( 2, 1, 1, 1 ), + /* U+1FA80 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FA84 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FA88 */ WIDTHS( 2, 1, 1, 1 ), + /* U+1FA8C */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FA90 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FA94 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FA98 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FA9C */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAA0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAA4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAA8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAAC */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAB0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAB4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAB8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FABC */ WIDTHS( 2, 2, 1, 2 ), + /* U+1FAC0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAC4 */ WIDTHS( 2, 2, 1, 1 ), + /* U+1FAC8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FACC */ WIDTHS( 1, 1, 2, 2 ), + /* U+1FAD0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAD4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAD8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FADC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FAE0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAE4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAE8 */ WIDTHS( 2, 1, 1, 1 ), + /* U+1FAEC */ WIDTHS( 1, 1, 1, 1 ), + /* U+1FAF0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAF4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+1FAF8 */ WIDTHS( 2, 1, 1, 1 ), + /* U+1FAFC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [105] */ { + /* U+2FF00, U+3FF00 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF04, U+3FF04 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF08, U+3FF08 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF0C, U+3FF0C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF10, U+3FF10 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF14, U+3FF14 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF18, U+3FF18 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF1C, U+3FF1C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF20, U+3FF20 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF24, U+3FF24 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF28, U+3FF28 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF2C, U+3FF2C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF30, U+3FF30 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF34, U+3FF34 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF38, U+3FF38 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF3C, U+3FF3C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF40, U+3FF40 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF44, U+3FF44 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF48, U+3FF48 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF4C, U+3FF4C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF50, U+3FF50 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF54, U+3FF54 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF58, U+3FF58 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF5C, U+3FF5C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF60, U+3FF60 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF64, U+3FF64 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF68, U+3FF68 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF6C, U+3FF6C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF70, U+3FF70 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF74, U+3FF74 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF78, U+3FF78 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF7C, U+3FF7C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF80, U+3FF80 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF84, U+3FF84 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF88, U+3FF88 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF8C, U+3FF8C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF90, U+3FF90 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF94, U+3FF94 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF98, U+3FF98 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FF9C, U+3FF9C */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFA0, U+3FFA0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFA4, U+3FFA4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFA8, U+3FFA8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFAC, U+3FFAC */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFB0, U+3FFB0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFB4, U+3FFB4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFB8, U+3FFB8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFBC, U+3FFBC */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFC0, U+3FFC0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFC4, U+3FFC4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFC8, U+3FFC8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFCC, U+3FFCC */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFD0, U+3FFD0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFD4, U+3FFD4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFD8, U+3FFD8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFDC, U+3FFDC */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFE0, U+3FFE0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFE4, U+3FFE4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFE8, U+3FFE8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFEC, U+3FFEC */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFF0, U+3FFF0 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFF4, U+3FFF4 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFF8, U+3FFF8 */ WIDTHS( 2, 2, 2, 2 ), + /* U+2FFFC, U+3FFFC */ WIDTHS( 2, 2, 1, 1 ), + }, + /* [106] */ { + /* U+E0000 */ WIDTHS( 1, 0, 1, 1 ), + /* U+E0004 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E0008 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E000C */ WIDTHS( 1, 1, 1, 1 ), + /* U+E0010 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E0014 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E0018 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E001C */ WIDTHS( 1, 1, 1, 1 ), + /* U+E0020 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0024 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0028 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E002C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0030 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0034 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0038 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E003C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0040 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0044 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0048 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E004C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0050 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0054 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0058 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E005C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0060 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0064 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0068 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E006C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0070 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0074 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0078 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E007C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0080 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E0084 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E0088 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E008C */ WIDTHS( 1, 1, 1, 1 ), + /* U+E0090 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E0094 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E0098 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E009C */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00A0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00A4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00A8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00AC */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00B0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00B4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00B8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00BC */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00C0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00C4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00C8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00CC */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00D0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00D4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00D8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00DC */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00E0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00E4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00E8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00EC */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E00FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [107] */ { + /* U+E0100 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0104 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0108 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E010C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0110 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0114 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0118 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E011C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0120 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0124 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0128 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E012C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0130 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0134 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0138 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E013C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0140 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0144 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0148 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E014C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0150 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0154 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0158 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E015C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0160 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0164 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0168 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E016C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0170 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0174 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0178 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E017C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0180 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0184 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0188 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E018C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0190 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0194 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E0198 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E019C */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01A0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01A4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01A8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01AC */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01B0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01B4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01B8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01BC */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01C0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01C4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01C8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01CC */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01D0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01D4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01D8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01DC */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01E0 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01E4 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01E8 */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01EC */ WIDTHS( 0, 0, 0, 0 ), + /* U+E01F0 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E01F4 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E01F8 */ WIDTHS( 1, 1, 1, 1 ), + /* U+E01FC */ WIDTHS( 1, 1, 1, 1 ), + }, + /* [108] */ { + /* U+FFF00, U+10FF00 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF04, U+10FF04 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF08, U+10FF08 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF0C, U+10FF0C */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF10, U+10FF10 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF14, U+10FF14 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF18, U+10FF18 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF1C, U+10FF1C */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF20, U+10FF20 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF24, U+10FF24 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF28, U+10FF28 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF2C, U+10FF2C */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF30, U+10FF30 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF34, U+10FF34 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF38, U+10FF38 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF3C, U+10FF3C */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF40, U+10FF40 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF44, U+10FF44 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF48, U+10FF48 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF4C, U+10FF4C */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF50, U+10FF50 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF54, U+10FF54 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF58, U+10FF58 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF5C, U+10FF5C */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF60, U+10FF60 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF64, U+10FF64 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF68, U+10FF68 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF6C, U+10FF6C */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF70, U+10FF70 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF74, U+10FF74 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF78, U+10FF78 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF7C, U+10FF7C */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF80, U+10FF80 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF84, U+10FF84 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF88, U+10FF88 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF8C, U+10FF8C */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF90, U+10FF90 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF94, U+10FF94 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF98, U+10FF98 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFF9C, U+10FF9C */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFA0, U+10FFA0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFA4, U+10FFA4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFA8, U+10FFA8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFAC, U+10FFAC */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFB0, U+10FFB0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFB4, U+10FFB4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFB8, U+10FFB8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFBC, U+10FFBC */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFC0, U+10FFC0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFC4, U+10FFC4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFC8, U+10FFC8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFCC, U+10FFCC */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFD0, U+10FFD0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFD4, U+10FFD4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFD8, U+10FFD8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFDC, U+10FFDC */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFE0, U+10FFE0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFE4, U+10FFE4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFE8, U+10FFE8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFEC, U+10FFEC */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFF0, U+10FFF0 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFF4, U+10FFF4 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFF8, U+10FFF8 */ WIDTHS( 3, 3, 3, 3 ), + /* U+FFFFC, U+10FFFC */ WIDTHS( 3, 3, 1, 1 ), + }, + +}; + +#undef WIDTHS + +/* Returns the width of the given printable Unicode character. + * For non-printable (control) characters the return value is undefined. */ +static int (_vte_unichar_width)(gunichar c, int utf8_ambiguous_width) +{ + vte_assert_cmpuint(c, <=, 0x10FFFFU); + + /* TODO bump to 0x0300 when ambiguous width support is removed */ + if (c < 0x0080) [[likely]] { + return 1; + } + uint8_t x = _vte_width_maj_table[c / 256]; + if (x >= 252) { + x -= 252; + } else { + x = (_vte_width_min_table[x][c % 256 / 4] >> (6 - (c % 4) * 2)) & 0x03; + } + if (x == 3) + x = utf8_ambiguous_width; + return x; +} + diff --git a/src/urlencode.cc b/src/urlencode.cc index 8b93ddc..0053058 100644 --- a/src/urlencode.cc +++ b/src/urlencode.cc @@ -12,7 +12,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . * * Red Hat Author(s): Carlos Santos */ diff --git a/src/utf8-test.cc b/src/utf8-test.cc index 4fae7f8..e8f198f 100644 --- a/src/utf8-test.cc +++ b/src/utf8-test.cc @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -294,6 +294,18 @@ test_utf8_decoder_replacement(void) // Highest four-byte with last byte replaced with 0xFF assert_decode("a\xF4\x8F\xBF\xFF", -1, U"a\uFFFD\uFFFD"s); assert_decode("a\xF4\x8F\xBF\xFFZ", -1, U"a\uFFFD\uFFFDZ"s); + + // Test old-style-UTF-8 sequences + // Five-byte (lowest and highest) + assert_decode("\xF8\x80\x80\x80\x80", -1, U"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"s); + assert_decode("\xF8\xBF\xBF\xBF\xBF", -1, U"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"s); + // Six-byte (lowest and highest) + assert_decode("\xFC\x80\x80\x80\x80\x80", -1, U"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"s); + assert_decode("\xFD\xBF\xBF\xBF\xBF\xBF", -1, U"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"s); + + // 0xFE "start byte" + assert_decode("\xFE\x80\x80\x80\x80\x80\x80", -1, U"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"s); + assert_decode("\xFE\xBF\xBF\xBF\xBF\xBF\xBF", -1, U"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"s); } int diff --git a/src/vte-glue.hh b/src/vte-glue.hh new file mode 100644 index 0000000..f7a994b --- /dev/null +++ b/src/vte-glue.hh @@ -0,0 +1,28 @@ +/* + * Copyright © 2020 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#include "vteregex.h" + +#include "std-glue.hh" + +namespace vte { + +VTE_DECLARE_FREEABLE(VteRegex, vte_regex_unref); + +} // namespace vte diff --git a/src/vte-gtk4.gresource.xml b/src/vte-gtk4.gresource.xml new file mode 100644 index 0000000..5eb238a --- /dev/null +++ b/src/vte-gtk4.gresource.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/src/vte.cc b/src/vte.cc index 56b336a..b3bcc0a 100644 --- a/src/vte.cc +++ b/src/vte.cc @@ -1,23 +1,22 @@ /* * Copyright (C) 2001-2004,2009,2010 Red Hat, Inc. - * Copyright © 2008, 2009, 2010 Christian Persch + * Copyright © 2008, 2009, 2010, 2020 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ -#include +#include "config.h" #include #include @@ -26,8 +25,14 @@ #include #include #include -#ifdef HAVE_SYS_TERMIOS_H -#include +#include + +#if __has_include() +#include +#define HAVE_STROPTS_H +#endif +#if __has_include() +#include #endif #include @@ -39,21 +44,27 @@ #include "bidi.hh" #include "buffer.h" #include "debug.h" -#include "vtedraw.hh" #include "reaper.hh" #include "ring.hh" #include "ringview.hh" #include "caps.hh" #include "widget.hh" +#include "cairo-glue.hh" +#include "scheduler.h" -#ifdef HAVE_WCHAR_H +#if VTE_GTK == 4 +#include "graphene-glue.hh" +#endif + +#if __has_include() #include #endif -#ifdef HAVE_SYS_SYSLIMITS_H +#if __has_include() #include #endif -#ifdef HAVE_SYS_WAIT_H +#if __has_include() #include +#define HAVE_SYS_WAIT_H #endif #include #include @@ -62,18 +73,25 @@ #include #include "keymap.h" #include "marshal.h" +#include "pastify.hh" #include "vtepty.h" #include "vtegtk.hh" +#include "cxx-utils.hh" +#include "gobject-glue.hh" -#ifdef WITH_A11Y +#if WITH_A11Y +#if VTE_GTK == 3 #include "vteaccess.h" -#endif +#endif /* VTE_GTK == 3 */ +#endif /* WITH_A11Y */ + +#include "unicode-width.hh" #include /* placement new */ using namespace std::literals; -#ifndef HAVE_ROUND +#if !HAVE_ROUND static inline double round(double x) { if(x - floor(x) < 0.5) { return floor(x); @@ -81,110 +99,168 @@ static inline double round(double x) { return ceil(x); } } -#endif +#endif /* !HAVE_ROUND */ #define WORD_CHAR_EXCEPTIONS_DEFAULT "-#%&+,./=?@\\_~\302\267"sv #define I_(string) (g_intern_static_string(string)) +#if VTE_GTK == 3 +#define VTE_STYLE_CLASS_READ_ONLY GTK_STYLE_CLASS_READ_ONLY +#elif VTE_GTK == 4 +#define VTE_STYLE_CLASS_READ_ONLY "read-only" +#endif + namespace vte { namespace terminal { -static int _vte_unichar_width(gunichar c, int utf8_ambiguous_width); +// _vte_unichar_width() determines the number of cells that a character +// would occupy. The primary likely case is hoisted into a define so +// it ends up in the caller without inlining the entire function. +#define _vte_unichar_width(c,u) \ + (G_LIKELY ((c) < 0x80) ? 1 : (_vte_unichar_width)((c),(u))) + static void stop_processing(vte::terminal::Terminal* that); static void add_process_timeout(vte::terminal::Terminal* that); -static void add_update_timeout(vte::terminal::Terminal* that); -static void remove_update_timeout(vte::terminal::Terminal* that); +static void process_timeout (GtkWidget *widget, gpointer data) noexcept; -static gboolean process_timeout (gpointer data); -static gboolean update_timeout (gpointer data); -static cairo_region_t *vte_cairo_get_clip_region (cairo_t *cr); +#if VTE_GTK == 3 +static vte::Freeable vte_cairo_get_clip_region(cairo_t* cr); +#endif -/* these static variables are guarded by the GDK mutex */ -static guint process_timeout_tag = 0; -static gboolean in_process_timeout; -static guint update_timeout_tag = 0; -static gboolean in_update_timeout; -static GList *g_active_terminals; +class Terminal::ProcessingContext { +public: + vte::grid::row_t m_bbox_top{-G_MAXINT}; + vte::grid::row_t m_bbox_bottom{G_MAXINT}; + bool m_modified{false}; + bool m_bottom{false}; + bool m_invalidated_text{false}; + bool m_in_scroll_region{false}; + bool m_saved_cursor_visible{false}; + CursorStyle m_saved_cursor_style; + VteVisualPosition m_saved_cursor; + VteScreen const* m_saved_screen{nullptr}; + Terminal *m_terminal; -static int -_vte_unichar_width(gunichar c, int utf8_ambiguous_width) -{ - if (G_LIKELY (c < 0x80)) - return 1; - if (G_UNLIKELY (g_unichar_iszerowidth (c))) - return 0; - if (G_UNLIKELY (g_unichar_iswide (c))) - return 2; - if (G_LIKELY (utf8_ambiguous_width == 1)) - return 1; - if (G_UNLIKELY (g_unichar_iswide_cjk (c))) - return 2; - return 1; -} + ProcessingContext(Terminal& terminal) noexcept + { + m_terminal = &terminal; + + auto screen = m_saved_screen = terminal.m_screen; + + // FIXMEchpe make this a method on VteScreen + m_bottom = screen->insert_delta == long(screen->scroll_delta); + + /* Save the current cursor position. */ + m_saved_cursor = screen->cursor; + m_saved_cursor_visible = terminal.m_modes_private.DEC_TEXT_CURSOR(); + m_saved_cursor_style = terminal.m_cursor_style; + + m_in_scroll_region = terminal.m_scrolling_region.is_restricted() + && (screen->cursor.row >= (screen->insert_delta + terminal.m_scrolling_region.top())) + && (screen->cursor.row <= (screen->insert_delta + terminal.m_scrolling_region.bottom())); + + //context.modified = false; + //context.invalidated_text = false; + + //context.bbox_bottom = -G_MAXINT; + //context.bbox_top = G_MAXINT; + } + + ~ProcessingContext() = default; + + ProcessingContext(ProcessingContext const&) = delete; + ProcessingContext(ProcessingContext&&) = delete; + + ProcessingContext& operator=(ProcessingContext const&) = delete; + ProcessingContext& operator=(ProcessingContext&&) = delete; + + [[gnu::always_inline]] + inline void pre_GRAPHIC() noexcept + { + m_bbox_top = std::min(m_bbox_top, + m_terminal->m_screen->cursor.row); + } + + [[gnu::always_inline]] + inline void post_GRAPHIC() noexcept + { + /* Add the cells over which we have moved to the region + * which we need to refresh for the user. */ + m_bbox_bottom = std::max(m_bbox_bottom, + m_terminal->m_screen->cursor.row); + + m_invalidated_text = true; + m_modified = true; + } + + [[gnu::always_inline]] + inline void post_CMD() noexcept + { + m_modified = true; + + // FIXME m_terminal->m_screen may be != m_saved_screen, check for that! + + auto const* screen = m_terminal->m_screen; + auto const new_in_scroll_region = m_terminal->m_scrolling_region.is_restricted() && + (screen->cursor.row >= (screen->insert_delta + m_terminal->m_scrolling_region.top())) && + (screen->cursor.row <= (screen->insert_delta + m_terminal->m_scrolling_region.bottom())); + + /* if we have moved greatly during the sequence handler, or moved + * into a scroll_region from outside it, restart the bbox. + */ + if (m_invalidated_text && + ((new_in_scroll_region && !m_in_scroll_region) || + (screen->cursor.row > m_bbox_bottom + VTE_CELL_BBOX_SLACK || + screen->cursor.row < m_bbox_top - VTE_CELL_BBOX_SLACK))) { + m_terminal->invalidate_rows_and_context(m_bbox_top, m_bbox_bottom); + m_invalidated_text = false; + m_bbox_bottom = -G_MAXINT; + m_bbox_top = G_MAXINT; + } + + m_in_scroll_region = new_in_scroll_region; + } + +}; // class ProcessingContext static void -vte_g_array_fill(GArray *array, gconstpointer item, guint final_size) +vte_char_attr_list_fill (VteCharAttrList *array, + const struct _VteCharAttributes *item, + guint final_size) { - if (array->len >= final_size) - return; + guint old_len = vte_char_attr_list_get_size(array); - final_size -= array->len; - do { - g_array_append_vals(array, item, 1); - } while (--final_size); + if (old_len >= final_size) + return; + + vte_char_attr_list_set_size(array, final_size); + std::fill_n(vte_char_attr_list_get(array, old_len), final_size - old_len, *item); } void Terminal::unset_widget() noexcept { +#if WITH_A11Y && VTE_GTK == 3 + set_accessible(nullptr); +#endif + m_real_widget = nullptr; m_terminal = nullptr; m_widget = nullptr; } -// FIXMEchpe replace this with a method on VteRing -VteRowData* -Terminal::ring_insert(vte::grid::row_t position, - bool fill) -{ - VteRowData *row; - VteRing *ring = m_screen->row_data; - bool const not_default_bg = (m_color_defaults.attr.back() != VTE_DEFAULT_BG); - - while (G_UNLIKELY (_vte_ring_next (ring) < position)) { - row = _vte_ring_append (ring, get_bidi_flags()); - if (not_default_bg) - _vte_row_data_fill (row, &m_color_defaults, m_column_count); - } - row = _vte_ring_insert (ring, position, get_bidi_flags()); - if (fill && not_default_bg) - _vte_row_data_fill (row, &m_color_defaults, m_column_count); - return row; -} - -// FIXMEchpe replace this with a method on VteRing -VteRowData* -Terminal::ring_append(bool fill) -{ - return ring_insert(_vte_ring_next(m_screen->row_data), fill); -} - -// FIXMEchpe replace this with a method on VteRing -void -Terminal::ring_remove(vte::grid::row_t position) -{ - _vte_ring_remove(m_screen->row_data, position); -} - /* Reset defaults for character insertion. */ void -Terminal::reset_default_attributes(bool reset_hyperlink) +Terminal::reset_default_attributes(bool reset_osc) { auto const hyperlink_idx_save = m_defaults.attr.hyperlink_idx; + auto const shell_integration_save = m_defaults.attr.shellintegration(); m_defaults = m_color_defaults = basic_cell; - if (!reset_hyperlink) + if (!reset_osc) { m_defaults.attr.hyperlink_idx = hyperlink_idx_save; + m_defaults.attr.set_shellintegration(shell_integration_save); + } } //FIXMEchpe this function is bad @@ -217,7 +293,7 @@ inline vte::view::coord_t Terminal::row_to_pixel(vte::grid::row_t row) const { // FIXMEchpe this is bad! - return row * m_cell_height - (glong)round(m_screen->scroll_delta * m_cell_height); + return row * m_cell_height - (long)round(m_screen->scroll_delta * m_cell_height); } inline vte::grid::row_t @@ -253,7 +329,7 @@ Terminal::cursor_is_onscreen() const noexcept { /* Note: the cursor can only be offscreen below the visible area, not above. */ auto cursor_top = row_to_pixel (m_screen->cursor.row) - VTE_LINE_WIDTH; - auto display_bottom = m_view_usable_extents.height() + MIN(m_padding.bottom, VTE_LINE_WIDTH); + auto display_bottom = m_view_usable_extents.height() + MIN(m_border.bottom, VTE_LINE_WIDTH); return cursor_top < display_bottom; } @@ -268,6 +344,7 @@ void Terminal::invalidate_rows(vte::grid::row_t row_start, vte::grid::row_t row_end /* inclusive */) { +#if VTE_GTK == 3 if (G_UNLIKELY (!widget_realized())) return; @@ -293,6 +370,7 @@ Terminal::invalidate_rows(vte::grid::row_t row_start, return; } +#if VTE_GTK == 3 cairo_rectangle_int_t rect; /* Convert the column and row start and end to pixel values * by multiplying by the size of a character cell. @@ -311,22 +389,32 @@ Terminal::invalidate_rows(vte::grid::row_t row_start, _vte_debug_print (VTE_DEBUG_UPDATES, "Invalidating pixels at (%d,%d)x(%d,%d).\n", rect.x, rect.y, rect.width, rect.height); +#endif - if (m_active_terminals_link != nullptr) { + if (is_processing()) { +#if VTE_GTK == 3 g_array_append_val(m_update_rects, rect); +#endif /* Wait a bit before doing any invalidation, just in * case updates are coming in really soon. */ - add_update_timeout(this); + add_process_timeout(this); } else { +#if VTE_GTK == 3 auto allocation = get_allocated_rect(); - rect.x += allocation.x + m_padding.left; - rect.y += allocation.y + m_padding.top; + rect.x += allocation.x + m_border.left; + rect.y += allocation.y + m_border.top; cairo_region_t *region = cairo_region_create_rectangle(&rect); gtk_widget_queue_draw_region(m_widget, region); cairo_region_destroy(region); +#elif VTE_GTK == 4 + gtk_widget_queue_draw(m_widget); // FIXMEgtk4 +#endif } _vte_debug_print (VTE_DEBUG_WORK, "!"); +#elif VTE_GTK == 4 + invalidate_all(); +#endif } /* Invalidate the requested rows, extending the region in both directions up to @@ -452,22 +540,25 @@ Terminal::invalidate_all() _vte_debug_print (VTE_DEBUG_WORK, "*"); _vte_debug_print (VTE_DEBUG_UPDATES, "Invalidating all.\n"); - /* replace invalid regions with one covering the whole terminal */ reset_update_rects(); m_invalidated_all = TRUE; - if (m_active_terminals_link != nullptr) { + if (is_processing ()) { +#if VTE_GTK == 3 + /* replace invalid regions with one covering the whole terminal */ auto allocation = get_allocated_rect(); cairo_rectangle_int_t rect; - rect.x = -m_padding.left; - rect.y = -m_padding.top; + rect.x = -m_border.left; + rect.y = -m_border.top; rect.width = allocation.width; rect.height = allocation.height; g_array_append_val(m_update_rects, rect); +#endif /* VTE_GTK == 3 */ + /* Wait a bit before doing any invalidation, just in * case updates are coming in really soon. */ - add_update_timeout(this); + add_process_timeout(this); } else { gtk_widget_queue_draw(m_widget); } @@ -482,8 +573,8 @@ Terminal::find_row_data(vte::grid::row_t row) const { VteRowData const* rowdata = nullptr; - if (G_LIKELY(_vte_ring_contains(m_screen->row_data, row))) { - rowdata = _vte_ring_index(m_screen->row_data, row); + if (G_LIKELY(m_screen->row_data->contains(row))) { + rowdata = m_screen->row_data->index(row); } return rowdata; } @@ -495,8 +586,8 @@ Terminal::find_row_data_writable(vte::grid::row_t row) const { VteRowData *rowdata = nullptr; - if (G_LIKELY (_vte_ring_contains(m_screen->row_data, row))) { - rowdata = _vte_ring_index_writable(m_screen->row_data, row); + if (G_LIKELY (m_screen->row_data->contains(row))) { + rowdata = m_screen->row_data->index_writable(row); } return rowdata; } @@ -512,8 +603,8 @@ Terminal::find_charcell(vte::grid::column_t col, VteRowData const* rowdata; VteCell const* ret = nullptr; - if (_vte_ring_contains(m_screen->row_data, row)) { - rowdata = _vte_ring_index(m_screen->row_data, row); + if (m_screen->row_data->contains(row)) { + rowdata = m_screen->row_data->index(row); ret = _vte_row_data_get (rowdata, col); } return ret; @@ -564,8 +655,8 @@ void Terminal::set_hard_wrapped(vte::grid::row_t row) { /* We can set the row just above insert_delta to hard wrapped. */ - g_assert_cmpint(row, >=, m_screen->insert_delta - 1); - g_assert_cmpint(row, <, m_screen->insert_delta + m_row_count); + vte_assert_cmpint(row, >=, m_screen->insert_delta - 1); + vte_assert_cmpint(row, <, m_screen->insert_delta + m_row_count); VteRowData *row_data = find_row_data_writable(row); @@ -585,8 +676,8 @@ Terminal::set_hard_wrapped(vte::grid::row_t row) void Terminal::set_soft_wrapped(vte::grid::row_t row) { - g_assert_cmpint(row, >=, m_screen->insert_delta); - g_assert_cmpint(row, <, m_screen->insert_delta + m_row_count); + vte_assert_cmpint(row, >=, m_screen->insert_delta); + vte_assert_cmpint(row, <, m_screen->insert_delta + m_row_count); VteRowData *row_data = find_row_data_writable(row); g_assert(row_data != nullptr); @@ -688,22 +779,23 @@ Terminal::invalidate_cursor_once(bool periodic) /* Invalidate the cursor repeatedly. */ // FIXMEchpe this continually adds and removes the blink timeout. Find a better solution bool -Terminal::cursor_blink_timer_callback() noexcept +Terminal::cursor_blink_timer_callback() { m_cursor_blink_state = !m_cursor_blink_state; - m_cursor_blink_time += m_cursor_blink_cycle; + m_cursor_blink_time_ms += m_cursor_blink_cycle_ms; invalidate_cursor_once(true); /* only disable the blink if the cursor is currently shown. * else, wait until next time. */ - if (m_cursor_blink_time / 1000 >= m_cursor_blink_timeout && + if (m_cursor_blink_time_ms >= m_cursor_blink_timeout_ms && m_cursor_blink_state) { return false; } - m_cursor_blink_timer.schedule(m_cursor_blink_cycle, vte::glib::Timer::Priority::eLOW); + m_cursor_blink_timer.schedule(m_cursor_blink_cycle_ms, + vte::glib::Timer::Priority::eLOW); return false; } @@ -781,12 +873,17 @@ Terminal::emit_eof() static gboolean emit_eof_idle_cb(VteTerminal *terminal) +try { _vte_terminal_get_impl(terminal)->emit_eof(); - // @terminal might be destroyed at this point return G_SOURCE_REMOVE; } +catch (...) +{ + vte::log_exception(); + return G_SOURCE_REMOVE; +} void Terminal::queue_eof() @@ -811,12 +908,17 @@ Terminal::emit_child_exited() static gboolean emit_child_exited_idle_cb(VteTerminal *terminal) +try { _vte_terminal_get_impl(terminal)->emit_child_exited(); - // @terminal might be destroyed at this point return G_SOURCE_REMOVE; } +catch (...) +{ + vte::log_exception(); + return G_SOURCE_REMOVE; +} /* Emit a "child-exited" signal on idle, so that if the handler destroys * the terminal, we're not deep within terminal code callstack @@ -825,7 +927,6 @@ void Terminal::queue_child_exited() { _vte_debug_print(VTE_DEBUG_SIGNALS, "Queueing `child-exited'.\n"); - m_child_exited_after_eos_pending = false; g_idle_add_full(G_PRIORITY_HIGH, (GSourceFunc)emit_child_exited_idle_cb, @@ -833,35 +934,6 @@ Terminal::queue_child_exited() g_object_unref); } -bool -Terminal::child_exited_eos_wait_callback() noexcept -{ - /* If we get this callback, there has been some time elapsed - * after child-exited, but no EOS yet. This happens for example - * when the primary child started other processes in the background, - * which inherited the PTY, and thus keep it open, see - * https://gitlab.gnome.org/GNOME/vte/issues/204 - * - * Force an EOS. - */ - if (pty()) - pty_io_read(pty()->fd(), G_IO_HUP); - - return false; // don't run again -} - -/* Emit a "char-size-changed" signal. */ -void -Terminal::emit_char_size_changed(int width, - int height) -{ - _vte_debug_print(VTE_DEBUG_SIGNALS, - "Emitting `char-size-changed'.\n"); - /* FIXME on next API break, change the signature */ - g_signal_emit(m_terminal, signals[SIGNAL_CHAR_SIZE_CHANGED], 0, - (guint)width, (guint)height); -} - /* Emit an "increase-font-size" signal. */ void Terminal::emit_increase_font_size() @@ -880,63 +952,6 @@ Terminal::emit_decrease_font_size() g_signal_emit(m_terminal, signals[SIGNAL_DECREASE_FONT_SIZE], 0); } -/* Emit a "text-inserted" signal. */ -void -Terminal::emit_text_inserted() -{ -#ifdef WITH_A11Y - if (!m_accessible_emit) { - return; - } - _vte_debug_print(VTE_DEBUG_SIGNALS, - "Emitting `text-inserted'.\n"); - g_signal_emit(m_terminal, signals[SIGNAL_TEXT_INSERTED], 0); -#endif -} - -/* Emit a "text-deleted" signal. */ -void -Terminal::emit_text_deleted() -{ -#ifdef WITH_A11Y - if (!m_accessible_emit) { - return; - } - _vte_debug_print(VTE_DEBUG_SIGNALS, - "Emitting `text-deleted'.\n"); - g_signal_emit(m_terminal, signals[SIGNAL_TEXT_DELETED], 0); -#endif -} - -/* Emit a "text-modified" signal. */ -void -Terminal::emit_text_modified() -{ -#ifdef WITH_A11Y - if (!m_accessible_emit) { - return; - } - _vte_debug_print(VTE_DEBUG_SIGNALS, - "Emitting `text-modified'.\n"); - g_signal_emit(m_terminal, signals[SIGNAL_TEXT_MODIFIED], 0); -#endif -} - -/* Emit a "text-scrolled" signal. */ -void -Terminal::emit_text_scrolled(long delta) -{ -#ifdef WITH_A11Y - if (!m_accessible_emit) { - return; - } - _vte_debug_print(VTE_DEBUG_SIGNALS, - "Emitting `text-scrolled'(%ld).\n", delta); - // FIXMEchpe fix signal signature? - g_signal_emit(m_terminal, signals[SIGNAL_TEXT_SCROLLED], 0, (int)delta); -#endif -} - void Terminal::emit_copy_clipboard() { @@ -985,14 +1000,9 @@ void Terminal::match_contents_clear() { match_hilite_clear(); - if (m_match_contents != nullptr) { - g_free(m_match_contents); - m_match_contents = nullptr; - } - if (m_match_attributes != nullptr) { - g_array_free(m_match_attributes, TRUE); - m_match_attributes = nullptr; - } + + g_string_truncate(m_match_contents, 0); + vte_char_attr_list_set_size(&m_match_attributes, 0); } void @@ -1000,11 +1010,12 @@ Terminal::match_contents_refresh() { match_contents_clear(); - GArray *array = g_array_new(FALSE, TRUE, sizeof(struct _VteCharAttributes)); - auto match_contents = get_text_displayed(true /* wrap */, - array); - m_match_contents = g_string_free(match_contents, FALSE); - m_match_attributes = array; + + g_assert (m_match_contents != nullptr); + g_assert (m_match_contents->len == 0); + g_assert (vte_char_attr_list_get_size(&m_match_attributes) == 0); + + get_text_displayed(m_match_contents, &m_match_attributes); } void @@ -1042,22 +1053,25 @@ Terminal::regex_match_remove(int tag) noexcept */ bool Terminal::match_rowcol_to_offset(vte::grid::column_t column, - vte::grid::row_t row, - gsize *offset_ptr, - gsize *sattr_ptr, - gsize *eattr_ptr) + vte::grid::row_t row, + gsize *offset_ptr, + gsize *sattr_ptr, + gsize *eattr_ptr) { /* FIXME: use gsize, after making sure the code below doesn't underflow offset */ gssize offset, sattr, eattr; struct _VteCharAttributes *attr = NULL; + if (m_match_contents->len == 0) + return false; + + auto const match_contents = m_match_contents->str; + /* Map the pointer position to a portion of the string. */ // FIXME do a bsearch here? - eattr = m_match_attributes->len; + eattr = vte_char_attr_list_get_size(&m_match_attributes); for (offset = eattr; offset--; ) { - attr = &g_array_index(m_match_attributes, - struct _VteCharAttributes, - offset); + attr = vte_char_attr_list_get(&m_match_attributes, offset); if (row < attr->row) { eattr = offset; } @@ -1073,7 +1087,7 @@ Terminal::match_rowcol_to_offset(vte::grid::column_t column, else { gunichar c; char utf[7]; - c = g_utf8_get_char (m_match_contents + offset); + c = g_utf8_get_char (match_contents + offset); utf[g_unichar_to_utf8(g_unichar_isprint(c) ? c : 0xFFFD, utf)] = 0; g_printerr("Cursor is on character U+%04X '%s' at %" G_GSSIZE_FORMAT ".\n", @@ -1087,20 +1101,20 @@ Terminal::match_rowcol_to_offset(vte::grid::column_t column, } /* If the pointer is on a newline, bug out. */ - if (m_match_contents[offset] == '\0') { + if (match_contents[offset] == '\0') { _vte_debug_print(VTE_DEBUG_EVENTS, "Cursor is on newline.\n"); return false; } /* Snip off any final newlines. */ - while (m_match_contents[eattr] == '\n' || - m_match_contents[eattr] == '\0') { + while (match_contents[eattr] == '\n' || + match_contents[eattr] == '\0') { eattr--; } /* and scan forwards to find the end of this line */ - while (!(m_match_contents[eattr] == '\n' || - m_match_contents[eattr] == '\0')) { + while (!(match_contents[eattr] == '\n' || + match_contents[eattr] == '\0')) { eattr++; } @@ -1109,9 +1123,7 @@ Terminal::match_rowcol_to_offset(vte::grid::column_t column, sattr = 0; } else { for (sattr = offset; sattr > 0; sattr--) { - attr = &g_array_index(m_match_attributes, - struct _VteCharAttributes, - sattr); + attr = vte_char_attr_list_get(&m_match_attributes, sattr); if (row > attr->row) { break; } @@ -1119,13 +1131,13 @@ Terminal::match_rowcol_to_offset(vte::grid::column_t column, } /* Scan backwards to find the start of this line */ while (sattr > 0 && - ! (m_match_contents[sattr] == '\n' || - m_match_contents[sattr] == '\0')) { + ! (match_contents[sattr] == '\n' || + match_contents[sattr] == '\0')) { sattr--; } /* and skip any initial newlines. */ - while (m_match_contents[sattr] == '\n' || - m_match_contents[sattr] == '\0') { + while (match_contents[sattr] == '\n' || + match_contents[sattr] == '\0') { sattr++; } if (eattr <= sattr) { /* blank line */ @@ -1142,12 +1154,8 @@ Terminal::match_rowcol_to_offset(vte::grid::column_t column, _VTE_DEBUG_IF(VTE_DEBUG_REGEX) { struct _VteCharAttributes *_sattr, *_eattr; - _sattr = &g_array_index(m_match_attributes, - struct _VteCharAttributes, - sattr); - _eattr = &g_array_index(m_match_attributes, - struct _VteCharAttributes, - eattr - 1); + _sattr = vte_char_attr_list_get(&m_match_attributes, sattr); + _eattr = vte_char_attr_list_get(&m_match_attributes, eattr - 1); g_printerr("Cursor is in line from %" G_GSIZE_FORMAT "(%ld,%ld) to %" G_GSIZE_FORMAT "(%ld,%ld)\n", sattr, _sattr->column, _sattr->row, eattr - 1, _eattr->column, _eattr->row); @@ -1157,16 +1165,14 @@ Terminal::match_rowcol_to_offset(vte::grid::column_t column, } /* creates a pcre match context with appropriate limits */ -pcre2_match_context_8 * +vte::Freeable Terminal::create_match_context() { - pcre2_match_context_8 *match_context; + auto context = vte::take_freeable(pcre2_match_context_create_8(nullptr /* general context */)); + pcre2_set_match_limit_8(context.get(), 65536); /* should be plenty */ + pcre2_set_recursion_limit_8(context.get(), 64); /* should be plenty */ - match_context = pcre2_match_context_create_8(nullptr /* general context */); - pcre2_set_match_limit_8(match_context, 65536); /* should be plenty */ - pcre2_set_recursion_limit_8(match_context, 64); /* should be plenty */ - - return match_context; + return context; } bool @@ -1196,7 +1202,7 @@ Terminal::match_check_pcre(pcre2_match_data_8 *match_data, else match_fn = pcre2_match_8; - line = m_match_contents; + line = m_match_contents->str; /* FIXME: what we really want is to pass the whole data to pcre2_match, but * limit matching to between sattr and eattr, so that the extra data can * satisfy lookahead assertions. This needs new pcre2 API though. @@ -1237,12 +1243,8 @@ Terminal::match_check_pcre(pcre2_match_data_8 *match_data, gchar *result; struct _VteCharAttributes *_sattr, *_eattr; result = g_strndup(line + rm_so, rm_eo - rm_so); - _sattr = &g_array_index(m_match_attributes, - struct _VteCharAttributes, - rm_so); - _eattr = &g_array_index(m_match_attributes, - struct _VteCharAttributes, - rm_eo - 1); + _sattr = vte_char_attr_list_get(&m_match_attributes, rm_so); + _eattr = vte_char_attr_list_get(&m_match_attributes, rm_eo - 1); g_printerr("%s match `%s' from %" G_GSIZE_FORMAT "(%ld,%ld) to %" G_GSIZE_FORMAT "(%ld,%ld) (%" G_GSSIZE_FORMAT ").\n", r == PCRE2_ERROR_PARTIAL ? "Partial":"Full", result, @@ -1295,8 +1297,6 @@ Terminal::match_check_internal_pcre(vte::grid::column_t column, size_t* end) { gsize offset, sattr, eattr, start_blank, end_blank; - pcre2_match_data_8 *match_data; - pcre2_match_context_8 *match_context; _vte_debug_print(VTE_DEBUG_REGEX, "Checking for pcre match at (%ld,%ld).\n", row, column); @@ -1308,15 +1308,16 @@ Terminal::match_check_internal_pcre(vte::grid::column_t column, start_blank = sattr; end_blank = eattr; - match_context = create_match_context(); - match_data = pcre2_match_data_create_8(256 /* should be plenty */, NULL /* general context */); + auto match_context = create_match_context(); + auto match_data = vte::take_freeable(pcre2_match_data_create_8(256 /* should be plenty */, + nullptr /* general context */)); /* Now iterate over each regex we need to match against. */ char* dingu_match{nullptr}; for (auto const& rem : m_match_regexes) { gsize sblank, eblank; - if (match_check_pcre(match_data, match_context, + if (match_check_pcre(match_data.get(), match_context.get(), rem.regex(), rem.match_flags(), sattr, eattr, offset, @@ -1346,21 +1347,14 @@ Terminal::match_check_internal_pcre(vte::grid::column_t column, _VTE_DEBUG_IF(VTE_DEBUG_REGEX) { struct _VteCharAttributes *_sattr, *_eattr; - _sattr = &g_array_index(m_match_attributes, - struct _VteCharAttributes, - start_blank); - _eattr = &g_array_index(m_match_attributes, - struct _VteCharAttributes, - end_blank - 1); + _sattr = vte_char_attr_list_get(&m_match_attributes, start_blank); + _eattr = vte_char_attr_list_get(&m_match_attributes, end_blank - 1); g_printerr("No-match region from %" G_GSIZE_FORMAT "(%ld,%ld) to %" G_GSIZE_FORMAT "(%ld,%ld)\n", start_blank, _sattr->column, _sattr->row, end_blank - 1, _eattr->column, _eattr->row); } } - pcre2_match_data_free_8(match_data); - pcre2_match_context_free_8(match_context); - return dingu_match; } @@ -1388,9 +1382,8 @@ Terminal::match_check_internal(vte::grid::column_t column, size_t* start, size_t* end) { - if (m_match_contents == nullptr) { - match_contents_refresh(); - } + if (m_match_contents->len == 0) + match_contents_refresh(); assert(match != nullptr); assert(start != nullptr); @@ -1408,6 +1401,11 @@ Terminal::regex_match_check(vte::grid::column_t column, vte::grid::row_t row, int* tag) { + + // Caller needs to update the ringview. + if (!m_ringview.is_updated()) + [[unlikely]] return nullptr; + long delta = m_screen->scroll_delta; _vte_debug_print(VTE_DEBUG_EVENTS | VTE_DEBUG_REGEX, "Checking for match at (%ld,%ld).\n", @@ -1437,7 +1435,7 @@ Terminal::regex_match_check(vte::grid::column_t column, /* * Terminal::view_coords_from_event: - * @event: a #GdkEvent + * @event: a mouse event * * Translates the event coordinates to view coordinates, by * subtracting the padding and window offset. @@ -1446,15 +1444,9 @@ Terminal::regex_match_check(vte::grid::column_t column, * at that side; use view_coords_visible() to check for that. */ vte::view::coords -Terminal::view_coords_from_event(GdkEvent const* event) const +Terminal::view_coords_from_event(vte::platform::MouseEvent const& event) const { - double x, y; - if (event == nullptr || - ((reinterpret_cast(event))->window != m_real_widget->event_window()) || - !gdk_event_get_coords(event, &x, &y)) - return vte::view::coords(-1, -1); - - return vte::view::coords(x - m_padding.left, y - m_padding.top); + return vte::view::coords(event.x() - m_border.left, event.y() - m_border.top); } bool @@ -1465,7 +1457,7 @@ Terminal::widget_realized() const noexcept /* * Terminal::grid_coords_from_event: - * @event: a #GdkEvent + * @event: a mouse event * * Translates the event coordinates to view coordinates, by * subtracting the padding and window offset. @@ -1474,20 +1466,20 @@ Terminal::widget_realized() const noexcept * at that side; use grid_coords_visible() to check for that. */ vte::grid::coords -Terminal::grid_coords_from_event(GdkEvent const* event) const +Terminal::grid_coords_from_event(vte::platform::MouseEvent const& event) const { return grid_coords_from_view_coords(view_coords_from_event(event)); } /* * Terminal::confined_grid_coords_from_event: - * @event: a #GdkEvent + * @event: a mouse event * * Like grid_coords_from_event(), but also confines the coordinates * to an actual cell in the visible area. */ vte::grid::coords -Terminal::confined_grid_coords_from_event(GdkEvent const* event) const +Terminal::confined_grid_coords_from_event(vte::platform::MouseEvent const& event) const { auto pos = view_coords_from_event(event); return confined_grid_coords_from_view_coords(pos); @@ -1504,8 +1496,10 @@ Terminal::confined_grid_coords_from_event(GdkEvent const* event) const vte::grid::coords Terminal::grid_coords_from_view_coords(vte::view::coords const& pos) const { - /* Our caller had to update the ringview (we can't do because we're const). */ - g_assert(m_ringview.is_updated()); + // Callers need to update the ringview. However, don't assert, just + // return out-of-view coords. FIXME: may want to throw instead + if (!m_ringview.is_updated()) + [[unlikely]] return {-1, -1}; vte::grid::column_t col; if (pos.x >= 0 && pos.x < m_view_usable_extents.width()) @@ -1530,7 +1524,7 @@ Terminal::confine_grid_row(vte::grid::row_t const& row) const auto first_row = first_displayed_row(); auto last_row = last_displayed_row(); - return std::clamp(row, first_row, last_row); + return vte::clamp(row, first_row, last_row); } /* @@ -1610,8 +1604,10 @@ Terminal::confine_grid_coords(vte::grid::coords const& rowcol) const vte::grid::halfcoords Terminal::selection_grid_halfcoords_from_view_coords(vte::view::coords const& pos) const { - /* Our caller had to update the ringview (we can't do because we're const). */ - g_assert(m_ringview.is_updated()); + // Callers need to update the ringview. However, don't assert, just + // return out-of-view coords. FIXME: may want to throw instead + if (!m_ringview.is_updated()) + [[unlikely]] return {-1, {-1, 1}}; vte::grid::row_t row = pixel_to_row(pos.y); vte::grid::column_t col; @@ -1655,7 +1651,8 @@ Terminal::selection_maybe_swap_endpoints(vte::view::coords const& pos) return; /* Need to ensure the ringview is updated. */ - ringview_update(); + if (!m_ringview.is_updated()) + ringview_update(); auto current = selection_grid_halfcoords_from_view_coords (pos); @@ -1677,7 +1674,8 @@ Terminal::selection_maybe_swap_endpoints(vte::view::coords const& pos) } else { if ((current <= m_selection_origin && m_selection_origin < m_selection_last) || (current >= m_selection_origin && m_selection_origin > m_selection_last)) { - std::swap (m_selection_origin, m_selection_last); + using std::swap; + swap(m_selection_origin, m_selection_last); } } @@ -1688,9 +1686,9 @@ Terminal::selection_maybe_swap_endpoints(vte::view::coords const& pos) } bool -Terminal::rowcol_from_event(GdkEvent *event, - long *column, - long *row) +Terminal::rowcol_from_event(vte::platform::MouseEvent const& event, + long *column, + long *row) { auto rowcol = grid_coords_from_event(event); if (!grid_coords_visible(rowcol)) @@ -1701,23 +1699,70 @@ Terminal::rowcol_from_event(GdkEvent *event, return true; } -char * -Terminal::hyperlink_check(GdkEvent *event) +#if VTE_GTK == 4 + +bool +Terminal::rowcol_at(double x, + double y, + long* column, + long* row) { + auto const vcoords = vte::view::coords(x - m_border.left, y - m_border.top); + auto const rowcol = grid_coords_from_view_coords(vcoords); + if (!grid_coords_visible(rowcol)) + return false; + + *column = rowcol.column(); + *row = rowcol.row(); + return true; +} + +char* +Terminal::hyperlink_check_at(double x, + double y) +{ + /* Need to ensure the ringview is updated. */ + if (!m_ringview.is_updated()) + ringview_update(); + long col, row; + if (!rowcol_at(x, y, &col, &row)) + return nullptr; + + return hyperlink_check(col, row); +} + +#endif /* VTE_GTK == 4 */ + +char* +Terminal::hyperlink_check(vte::platform::MouseEvent const& event) +{ + /* Need to ensure the ringview is updated. */ + if (!m_ringview.is_updated()) + ringview_update(); + + long col, row; + if (!rowcol_from_event(event, &col, &row)) + return nullptr; + + return hyperlink_check(col, row); +} + +char* +Terminal::hyperlink_check(vte::grid::column_t col, + vte::grid::row_t row) +{ const char *hyperlink; const char *separator; if (!m_allow_hyperlink) return NULL; - /* Need to ensure the ringview is updated. */ - ringview_update(); + // Caller needs to update the ringview. + if (!m_ringview.is_updated()) + [[unlikely]] return nullptr; - if (!rowcol_from_event(event, &col, &row)) - return NULL; - - _vte_ring_get_hyperlink_at_position(m_screen->row_data, row, col, false, &hyperlink); + m_screen->row_data->get_hyperlink_at_position(row, col, false, &hyperlink); if (hyperlink != NULL) { /* URI is after the first semicolon */ @@ -1733,57 +1778,111 @@ Terminal::hyperlink_check(GdkEvent *event) return g_strdup(hyperlink); } -char * -Terminal::regex_match_check(GdkEvent* event, +char* +Terminal::regex_match_check(vte::platform::MouseEvent const& event, int *tag) { - long col, row; - /* Need to ensure the ringview is updated. */ - ringview_update(); + if (!m_ringview.is_updated()) + ringview_update(); + long col, row; if (!rowcol_from_event(event, &col, &row)) - return FALSE; + return nullptr; /* FIXME Shouldn't rely on a deprecated, not sub-row aware method. */ // FIXMEchpe fix this scroll_delta substraction! - return regex_match_check(col, row - (long)m_screen->scroll_delta, tag); + return regex_match_check(col, row - long(m_screen->scroll_delta), tag); +} + +#if VTE_GTK == 4 + +char* +Terminal::regex_match_check_at(double x, + double y, + int *tag) +{ + /* Need to ensure the ringview is updated. */ + if (!m_ringview.is_updated()) + ringview_update(); + + long col, row; + if (!rowcol_at(x, y, &col, &row)) + return nullptr; + + /* FIXME Shouldn't rely on a deprecated, not sub-row aware method. */ + // FIXMEchpe fix this scroll_delta substraction! + return regex_match_check(col, row - long(m_screen->scroll_delta), tag); } bool -Terminal::regex_match_check_extra(GdkEvent *event, +Terminal::regex_match_check_extra_at(double x, + double y, + vte::base::Regex const** regexes, + size_t n_regexes, + uint32_t match_flags, + char** matches) +{ + /* Need to ensure the ringview is updated. */ + if (!m_ringview.is_updated()) + ringview_update(); + + long col, row; + if (!rowcol_at(x, y, &col, &row)) + return false; + + return regex_match_check_extra(col, row, regexes, n_regexes, match_flags, matches); +} + +#endif /* VTE_GTK == 4 */ + +bool +Terminal::regex_match_check_extra(vte::platform::MouseEvent const& event, + vte::base::Regex const** regexes, + size_t n_regexes, + uint32_t match_flags, + char** matches) +{ + /* Need to ensure the ringview is updated. */ + if (!m_ringview.is_updated()) + ringview_update(); + + long col, row; + if (!rowcol_from_event(event, &col, &row)) + return false; + + return regex_match_check_extra(col, row, regexes, n_regexes, match_flags, matches); +} + +bool +Terminal::regex_match_check_extra(vte::grid::column_t col, + vte::grid::row_t row, vte::base::Regex const** regexes, size_t n_regexes, uint32_t match_flags, char** matches) { gsize offset, sattr, eattr; - pcre2_match_data_8 *match_data; - pcre2_match_context_8 *match_context; bool any_matches = false; - long col, row; guint i; - assert(event); assert(regexes != nullptr || n_regexes == 0); assert(matches != nullptr); - /* Need to ensure the ringview is updated. */ - ringview_update(); + // Caller needs to update the ringview. + if (!m_ringview.is_updated()) + [[unlikely]] return false; - if (!rowcol_from_event(event, &col, &row)) - return false; - - if (m_match_contents == nullptr) { + if (m_match_contents->len == 0) match_contents_refresh(); - } if (!match_rowcol_to_offset(col, row, &offset, &sattr, &eattr)) return false; - match_context = create_match_context(); - match_data = pcre2_match_data_create_8(256 /* should be plenty */, nullptr /* general context */); + auto match_context = create_match_context(); + auto match_data = vte::take_freeable(pcre2_match_data_create_8(256 /* should be plenty */, + nullptr /* general context */)); for (i = 0; i < n_regexes; i++) { gsize start, end, sblank, eblank; @@ -1791,7 +1890,7 @@ Terminal::regex_match_check_extra(GdkEvent *event, g_return_val_if_fail(regexes[i] != nullptr, false); - if (match_check_pcre(match_data, match_context, + if (match_check_pcre(match_data.get(), match_context.get(), regexes[i], match_flags, sattr, eattr, offset, &match_string, @@ -1804,9 +1903,6 @@ Terminal::regex_match_check_extra(GdkEvent *event, matches[i] = nullptr; } - pcre2_match_data_free_8(match_data); - pcre2_match_context_free_8(match_context); - return any_matches; } @@ -1814,94 +1910,19 @@ Terminal::regex_match_check_extra(GdkEvent *event, void Terminal::emit_adjustment_changed() { - if (m_adjustment_changed_pending) { - bool changed = false; - gdouble current, v; + if (!widget()) + return; - auto vadjustment = m_vadjustment.get(); + if (m_adjustment_changed_pending) { + widget()->notify_scroll_bounds_changed(m_adjustment_value_changed_pending); - g_object_freeze_notify(G_OBJECT(vadjustment)); + m_adjustment_changed_pending = m_adjustment_value_changed_pending = false; + } + else if (m_adjustment_value_changed_pending) { + widget()->notify_scroll_value_changed(); - v = _vte_ring_delta (m_screen->row_data); - current = gtk_adjustment_get_lower(vadjustment); - if (!_vte_double_equal(current, v)) { - _vte_debug_print(VTE_DEBUG_ADJ, - "Changing lower bound from %.0f to %f\n", - current, v); - gtk_adjustment_set_lower(vadjustment, v); - changed = true; - } - - v = m_screen->insert_delta + m_row_count; - current = gtk_adjustment_get_upper(vadjustment); - if (!_vte_double_equal(current, v)) { - _vte_debug_print(VTE_DEBUG_ADJ, - "Changing upper bound from %.0f to %f\n", - current, v); - gtk_adjustment_set_upper(vadjustment, v); - changed = true; - } - - /* The step increment should always be one. */ - v = gtk_adjustment_get_step_increment(vadjustment); - if (!_vte_double_equal(v, 1)) { - _vte_debug_print(VTE_DEBUG_ADJ, - "Changing step increment from %.0lf to 1\n", v); - gtk_adjustment_set_step_increment(vadjustment, 1); - changed = true; - } - - /* Set the number of rows the user sees to the number of rows the - * user sees. */ - v = gtk_adjustment_get_page_size(vadjustment); - if (!_vte_double_equal(v, m_row_count)) { - _vte_debug_print(VTE_DEBUG_ADJ, - "Changing page size from %.0f to %ld\n", - v, m_row_count); - gtk_adjustment_set_page_size(vadjustment, - m_row_count); - changed = true; - } - - /* Clicking in the empty area should scroll one screen, so set the - * page size to the number of visible rows. */ - v = gtk_adjustment_get_page_increment(vadjustment); - if (!_vte_double_equal(v, m_row_count)) { - _vte_debug_print(VTE_DEBUG_ADJ, - "Changing page increment from " - "%.0f to %ld\n", - v, m_row_count); - gtk_adjustment_set_page_increment(vadjustment, - m_row_count); - changed = true; - } - - g_object_thaw_notify(G_OBJECT(vadjustment)); - - if (changed) - _vte_debug_print(VTE_DEBUG_SIGNALS, - "Emitting adjustment_changed.\n"); - m_adjustment_changed_pending = FALSE; - } - if (m_adjustment_value_changed_pending) { - double v, delta; - _vte_debug_print(VTE_DEBUG_SIGNALS, - "Emitting adjustment_value_changed.\n"); - m_adjustment_value_changed_pending = FALSE; - - auto vadjustment = m_vadjustment.get(); - v = gtk_adjustment_get_value(vadjustment); - if (!_vte_double_equal(v, m_screen->scroll_delta)) { - /* this little dance is so that the scroll_delta is - * updated immediately, but we still handled scrolling - * via the adjustment - e.g. user interaction with the - * scrollbar - */ - delta = m_screen->scroll_delta; - m_screen->scroll_delta = v; - gtk_adjustment_set_value(vadjustment, delta); - } - } + m_adjustment_value_changed_pending = false; + } } /* Queue an adjustment-changed signal to be delivered when convenient. */ @@ -1910,44 +1931,58 @@ void Terminal::queue_adjustment_changed() { m_adjustment_changed_pending = true; - add_update_timeout(this); + add_process_timeout(this); } void Terminal::queue_adjustment_value_changed(double v) { - if (!_vte_double_equal(v, m_screen->scroll_delta)) { - _vte_debug_print(VTE_DEBUG_ADJ, - "Adjustment value changed to %f\n", - v); - m_screen->scroll_delta = v; - m_adjustment_value_changed_pending = true; - add_update_timeout(this); - } + /* FIXME: do this check in pixel space? */ + if (_vte_double_equal(v, m_screen->scroll_delta)) + return; + + _vte_debug_print(VTE_DEBUG_ADJ, + "Scroll value changed to %f\n", v); + + /* Save the difference. */ + auto const dy = v - m_screen->scroll_delta; + + m_screen->scroll_delta = v; + m_adjustment_value_changed_pending = true; + add_process_timeout(this); + + if (!widget_realized()) [[unlikely]] + return; + + _vte_debug_print(VTE_DEBUG_ADJ, + "Scrolling by %f\n", dy); + + m_ringview.invalidate(); + invalidate_all(); + match_contents_clear(); + emit_text_scrolled(dy); + queue_contents_changed(); } void Terminal::queue_adjustment_value_changed_clamped(double v) { - auto vadjustment = m_vadjustment.get(); - auto const lower = gtk_adjustment_get_lower(vadjustment); - auto const upper = gtk_adjustment_get_upper(vadjustment); - - v = CLAMP(v, lower, MAX (lower, upper - m_row_count)); + auto const lower = m_screen->row_data->delta(); + auto const upper_minus_row_count = m_screen->insert_delta; + v = std::clamp(v, + double(lower), + double(std::max(long(lower), upper_minus_row_count))); queue_adjustment_value_changed(v); } void Terminal::adjust_adjustments() { - g_assert(m_screen != nullptr); - g_assert(m_screen->row_data != nullptr); - queue_adjustment_changed(); /* The lower value should be the first row in the buffer. */ - long delta = _vte_ring_delta(m_screen->row_data); + long delta = m_screen->row_data->delta(); /* Snap the insert delta and the cursor position to be in the visible * area. Leave the scrolling delta alone because it will be updated * when the adjustment changes. */ @@ -1965,9 +2000,6 @@ Terminal::adjust_adjustments() void Terminal::adjust_adjustments_full() { - g_assert(m_screen != NULL); - g_assert(m_screen->row_data != NULL); - adjust_adjustments(); queue_adjustment_changed(); } @@ -1992,19 +2024,51 @@ Terminal::scroll_lines(long lines) /* Scroll so that the scroll delta is the minimum value. */ void -Terminal::maybe_scroll_to_top() +Terminal::scroll_to_top() { - queue_adjustment_value_changed(_vte_ring_delta(m_screen->row_data)); + queue_adjustment_value_changed(m_screen->row_data->delta()); } void -Terminal::maybe_scroll_to_bottom() +Terminal::scroll_to_bottom() { queue_adjustment_value_changed(m_screen->insert_delta); _vte_debug_print(VTE_DEBUG_ADJ, "Snapping to bottom of screen\n"); } +void +Terminal::scroll_to_previous_prompt() +{ + long row = ceil(m_screen->scroll_delta) - 1; + row = MAX(row, (long) m_screen->row_data->delta()); + + while (row > (long) m_screen->row_data->delta()) { + if (m_screen->row_data->contains_prompt_beginning(row)) { + break; + } + row--; + } + + queue_adjustment_value_changed_clamped(row); +} + +void +Terminal::scroll_to_next_prompt() +{ + long row = floor(m_screen->scroll_delta) + 1; + row = MIN(row, m_screen->insert_delta); + + while (row < m_screen->insert_delta) { + if (m_screen->row_data->contains_prompt_beginning(row)) { + break; + } + row++; + } + + queue_adjustment_value_changed_clamped(row); +} + /* * Terminal::set_encoding: * @charset: (allow-none): target charset, or %NULL to use UTF-8 @@ -2018,12 +2082,37 @@ bool Terminal::set_encoding(char const* charset, GError** error) { -#ifdef WITH_ICU - auto const using_utf8 = bool{charset == nullptr || g_ascii_strcasecmp(charset, "UTF-8") == 0}; - auto const syntax = using_utf8 ? DataSyntax::eECMA48_UTF8 : DataSyntax::eECMA48_PCTERM; + auto const to_utf8 = bool{charset == nullptr || g_ascii_strcasecmp(charset, "UTF-8") == 0}; + auto const primary_is_current = (current_data_syntax() == primary_data_syntax()); - if (syntax == data_syntax()) - return true; +#if WITH_ICU + /* Note that if the current data syntax is not a primary one, the change + * will only be applied when returning to the primrary data syntax. + */ + + if (to_utf8) { + if (primary_data_syntax() == DataSyntax::ECMA48_UTF8) + return true; + + m_converter.reset(); + m_primary_data_syntax = DataSyntax::ECMA48_UTF8; + } else { + if (primary_data_syntax() == DataSyntax::ECMA48_PCTERM && + m_converter->charset() == charset) + return true; + + try { + auto converter = vte::base::ICUConverter::make(charset, error); + if (!converter) + return false; + + m_converter = std::move(converter); + m_primary_data_syntax = DataSyntax::ECMA48_PCTERM; + + } catch (...) { + return vte::glib::set_error_from_exception(error); + } + } /* Note: we DON'T convert any pending output from the previous charset to * the new charset, since that is in general not possible without loss, and @@ -2032,35 +2121,29 @@ Terminal::set_encoding(char const* charset, * the outgooing and only change charsets once it's empty.) * Do not clear the incoming queue. */ - _vte_byte_array_clear(m_outgoing); - if (using_utf8) { - m_converter.reset(); - } else { - m_converter = vte::base::ICUConverter::make(charset, error); - if (!m_converter) - return false; - } - - m_data_syntax = syntax; reset_decoder(); if (pty()) - pty()->set_utf8(using_utf8); + pty()->set_utf8(primary_data_syntax() == DataSyntax::ECMA48_UTF8); + + if (primary_is_current) + m_current_data_syntax = m_primary_data_syntax; _vte_debug_print(VTE_DEBUG_IO, - "Set terminal encoding to `%s'.\n", - encoding()); - _vte_debug_print(VTE_DEBUG_SIGNALS, - "Emitting `encoding-changed'.\n"); - - GObject *object = G_OBJECT(m_terminal); - g_signal_emit(object, signals[SIGNAL_ENCODING_CHANGED], 0); - g_object_notify_by_pspec(object, pspecs[PROP_ENCODING]); + "Set terminal encoding to \"%s\" data syntax %d\n", + encoding(), int(primary_data_syntax())); return true; + #else + + if (to_utf8) + return true; + + g_set_error_literal(error, G_CONVERT_ERROR, G_CONVERT_ERROR_NO_CONVERSION, + "ICU support not available"); return false; #endif } @@ -2077,39 +2160,6 @@ Terminal::set_cjk_ambiguous_width(int width) return true; } -// FIXMEchpe replace this with a method on VteRing -VteRowData * -Terminal::insert_rows (guint cnt) -{ - VteRowData *row; - do { - row = ring_append(false); - } while(--cnt); - return row; -} - -/* Make sure we have enough rows and columns to hold data at the current - * cursor position. */ -VteRowData * -Terminal::ensure_row() -{ - VteRowData *row; - - /* Figure out how many rows we need to add. */ - //FIXMEchpe use long, not int - int delta = m_screen->cursor.row - _vte_ring_next(m_screen->row_data) + 1; - if (delta > 0) { - row = insert_rows(delta); - adjust_adjustments(); - } else { - /* Find the row the cursor is in. */ - row = _vte_ring_index_writable(m_screen->row_data, m_screen->cursor.row); - } - g_assert(row != NULL); - - return row; -} - VteRowData * Terminal::ensure_cursor() { @@ -2126,21 +2176,21 @@ Terminal::update_insert_delta() { /* The total number of lines. Add one to the cursor offset * because it's zero-based. */ - auto rows = _vte_ring_next(m_screen->row_data); + auto rows = long(m_screen->row_data->next()); auto delta = m_screen->cursor.row - rows + 1; if (G_UNLIKELY (delta > 0)) { insert_rows(delta); - rows = _vte_ring_next(m_screen->row_data); + rows = m_screen->row_data->next(); } /* Make sure that the bottom row is visible, and that it's in * the buffer (even if it's empty). This usually causes the * top row to become a history-only row. */ delta = m_screen->insert_delta; - delta = MIN(delta, rows - m_row_count); - delta = MAX(delta, - m_screen->cursor.row - (m_row_count - 1)); - delta = MAX(delta, _vte_ring_delta(m_screen->row_data)); + delta = MIN (delta, rows - m_row_count); + delta = MAX (long(delta), + m_screen->cursor.row - (m_row_count - 1)); + delta = MAX (delta, long(m_screen->row_data->delta())); /* Adjust the insert delta and scroll if needed. */ if (delta != m_screen->insert_delta) { @@ -2576,10 +2626,11 @@ Terminal::reset_color_highlight_foreground() /* * Terminal::cleanup_fragments: + * @rownum: the row to operate on * @start: the starting column, inclusive * @end: the end column, exclusive * - * Needs to be called before modifying the contents in the cursor's row, + * Needs to be called before modifying the contents in the given row, * between the two given columns. Cleans up TAB and CJK fragments to the * left of @start and to the right of @end. If a CJK is split in half, * the remaining half is replaced by a space. If a TAB at @start is split, @@ -2593,12 +2644,17 @@ Terminal::reset_color_highlight_foreground() * * Invalidates the cells that visually change outside of the range, * because the caller can't reasonably be expected to take care of this. + * FIXME This is obviously a leftover from the days when we invalidated + * arbitrary rectangles rather than entire rows; we should revise this. */ void -Terminal::cleanup_fragments(long start, - long end) +Terminal::cleanup_fragments(long rownum, + long start, + long end) { - VteRowData *row = ensure_row(); + VteRowData *row = m_screen->row_data->index_writable(rownum); + g_assert(row); + const VteCell *cell_start; VteCell *cell_end, *cell_col; gboolean cell_start_is_fragment; @@ -2639,7 +2695,7 @@ Terminal::cleanup_fragments(long start, cell_end->c = ' '; cell_end->attr.set_fragment(false); cell_end->attr.set_columns(1); - invalidate_row_and_context(m_screen->cursor.row); /* FIXME can we do cheaper? */ + invalidate_row_and_context(rownum); /* FIXME can we do cheaper? */ } } @@ -2663,7 +2719,7 @@ Terminal::cleanup_fragments(long start, "Cleaning CJK left half at %ld\n", col); g_assert(start - col == 1); - invalidate_row_and_context(m_screen->cursor.row); /* FIXME can we do cheaper? */ + invalidate_row_and_context(rownum); /* FIXME can we do cheaper? */ } keep_going = FALSE; } @@ -2674,76 +2730,418 @@ Terminal::cleanup_fragments(long start, } } -/* Cursor down, with scrolling. */ +/* Terminal::scroll_text_up: + * + * Scrolls the text upwards by the given amount, within the given custom scrolling region. + * The DECSTBM / DECSLRM scrolling region (or lack thereof) is irrelevant (unless, of course, + * it is the one passed to this method). + * + * If the entire topmost row is part of the scrolling region then the scrolled out lines go + * to the scrollback buffer. + * + * "fill" tells whether to fill the new lines with the background color. + * + * The cursor's position is irrelevant, and it stays where it was (relative to insert_delta). + */ void -Terminal::cursor_down(bool explicit_sequence) +Terminal::scroll_text_up(scrolling_region const& scrolling_region, + vte::grid::row_t amount, bool fill) { - long start, end; + auto const top = m_screen->insert_delta + scrolling_region.top(); + auto const bottom = m_screen->insert_delta + scrolling_region.bottom(); + auto const left = scrolling_region.left(); + auto const right = scrolling_region.right(); - if (m_scrolling_restricted) { - start = m_screen->insert_delta + m_scrolling_region.start; - end = m_screen->insert_delta + m_scrolling_region.end; - } else { - start = m_screen->insert_delta; - end = start + m_row_count - 1; - } - if (m_screen->cursor.row == end) { - if (m_scrolling_restricted) { - if (start == m_screen->insert_delta) { - /* Set the boundary to hard wrapped where - * we're about to tear apart the contents. */ - set_hard_wrapped(m_screen->cursor.row); - /* Scroll this line into the scrollback - * buffer by inserting a line at the next - * line and scrolling the area up. */ - m_screen->insert_delta++; - m_screen->cursor.row++; - /* Update start and end, too. */ - start++; - end++; - ring_insert(m_screen->cursor.row, false); - /* Repaint the affected lines, which is _below_ - * the region (bug 131). No need to extend, - * set_hard_wrapped() took care of invalidating - * the context lines if necessary. */ - invalidate_rows(m_screen->cursor.row, - m_screen->insert_delta + m_row_count - 1); - /* Force scroll. */ - adjust_adjustments(); - } else { - /* Set the boundaries to hard wrapped where - * we're about to tear apart the contents. */ - set_hard_wrapped(start - 1); - set_hard_wrapped(end); - /* Scroll by removing a line and inserting a new one. */ - ring_remove(start); - ring_insert(end, true); - /* Repaint the affected lines. No need to extend, - * set_hard_wrapped() took care of invalidating - * the context lines if necessary. */ - invalidate_rows(start, end); - } - } else { - /* Scroll up with history. */ - m_screen->cursor.row++; - update_insert_delta(); - } + amount = CLAMP(amount, 1, bottom - top + 1); - /* Handle bce (background color erase), however, diverge from xterm: - * only fill the new row with the background color if scrolling - * happens due to an explicit escape sequence, not due to autowrapping. - * See bug 754596 for details. */ - bool const not_default_bg = (m_color_defaults.attr.back() != VTE_DEFAULT_BG); + /* Make sure the ring covers the area we'll operate on. */ + while (long(m_screen->row_data->next()) <= bottom) [[unlikely]] + ring_append(false /* no fill */); - if (explicit_sequence && not_default_bg) { - VteRowData *rowdata = ensure_row(); - _vte_row_data_fill (rowdata, &m_color_defaults, m_column_count); - } - } else if (m_screen->cursor.row < m_screen->insert_delta + m_row_count - 1) { - /* Otherwise, just move the cursor down; unless it's already in the last - * physical row (which is possible with scrolling region, see #176). */ + if (!scrolling_region.is_restricted()) [[likely]] { + /* Scroll up the entire screen, with history. This is functionally equivalent to the + * next branch, but is a bit faster, and speed does matter in this very common case. */ + m_screen->insert_delta += amount; + m_screen->cursor.row += amount; + while (amount--) { + ring_append(fill); + } + /* Force scroll. */ + adjust_adjustments(); + } else if (scrolling_region.top() == 0 && left == 0 && right == m_column_count - 1) { + /* Scroll up whole rows at the top (but not the entire screen), with history. */ + + /* Set the boundary to hard wrapped where we'll tear apart the contents. */ + set_hard_wrapped(bottom); + /* Scroll (and add to history) by inserting new lines. */ + m_screen->insert_delta += amount; + m_screen->cursor.row += amount; + for (auto insert_at = bottom + 1; insert_at <= bottom + amount; insert_at++) { + ring_insert(insert_at, fill); + } + /* Repaint the affected lines, which is _below_ the region, see + * https://gitlab.gnome.org/GNOME/vte/-/issues/131. + * No need to extend, set_hard_wrapped() took care of invalidating + * the context lines if necessary. */ + invalidate_rows(bottom + 1, m_screen->insert_delta + m_row_count - 1); + /* Force scroll. */ + adjust_adjustments(); + } else if (left == 0 && right == m_column_count - 1) { + /* Scroll up whole rows (but not at the top), along with their hard/soft line ending, and BiDi flags. + * Don't add to history. */ + + /* Set the boundaries to hard wrapped where we'll tear apart or glue together the contents. + * Do it before scrolling up, for the bottom row to be the desired one. */ + set_hard_wrapped(top - 1); + set_hard_wrapped(bottom); + /* Scroll up by removing a line at the top and inserting a new one at the bottom. */ + // FIXME The runtime is quadratical to the number of lines scrolled, + // modify ring_remove() and ring_insert() to take an "amount" parameter. + while (amount--) { + ring_remove(top); + ring_insert(bottom, fill); + } + /* Repaint the affected lines. No need to extend, set_hard_wrapped() took care of + * invalidating the context lines if necessary. */ + invalidate_rows(top, bottom); + /* We've modified the display. Make a note of it. */ + m_text_deleted_flag = TRUE; + } else { + /* Scroll up partial rows. The line endings and the BiDi flags don't scroll. */ + + /* Make sure the area we're about to scroll is present in memory. */ + long row = top; + for (row = top; row <= bottom; row++) { + _vte_row_data_fill(m_screen->row_data->index_writable(row), &basic_cell, right + 1); + } + /* Handle TABs, CJKs, emojis that will be cut in half. */ + for (row = top; row <= bottom; row++) { + cleanup_fragments(row, left, left); + cleanup_fragments(row, right + 1, right + 1); + } + /* Scroll up by copying the cell data. */ + for (row = top; row <= bottom - amount; row++) { + VteRowData *dst = m_screen->row_data->index_writable(row); + VteRowData *src = m_screen->row_data->index_writable(row + amount); + memcpy(dst->cells + left, src->cells + left, (right - left + 1) * sizeof(VteCell)); + } + /* Erase the cells we scrolled away from. */ + const VteCell *cell = fill ? &m_color_defaults : &basic_cell; + for (; row <= bottom; row++) { + VteRowData *empty = m_screen->row_data->index_writable(row); + std::fill_n(&empty->cells[left], right - left + 1, *cell); + } + /* Repaint the affected lines, with context if necessary. */ + invalidate_rows_and_context(top, bottom); + /* We've modified the display. Make a note of it. */ + m_text_deleted_flag = TRUE; + } +} + +/* Terminal::scroll_text_down: + * + * Scrolls the text downwards by the given amount, within the given custom scrolling region. + * The DECSTBM / DECSLRM scrolling region (or lack thereof) is irrelevant (unless, of course, + * it is the one passed to this method). + * + * "fill" tells whether to fill the new lines with the background color. + * + * The cursor's position is irrelevant, and it stays where it was. + */ +void +Terminal::scroll_text_down(scrolling_region const& scrolling_region, + vte::grid::row_t amount, bool fill) +{ + auto const top = m_screen->insert_delta + scrolling_region.top(); + auto const bottom = m_screen->insert_delta + scrolling_region.bottom(); + auto const left = scrolling_region.left(); + auto const right = scrolling_region.right(); + + amount = CLAMP(amount, 1, bottom - top + 1); + + /* Make sure the ring covers the area we'll operate on. */ + while (long(m_screen->row_data->next()) <= bottom) [[unlikely]] + ring_append(false /* no fill */); + + /* Scroll down. This code is the counterpart of the branches in scroll_text_up() that don't + * add to the history. */ + + if (left == 0 && right == m_column_count - 1) { + /* Scroll down whole rows, along with their hard/soft line ending, and BiDi flags. */ + + /* Scroll down by removing a line at the bottom and inserting a new one at the top. */ + // FIXME The runtime is quadratical to the number of lines scrolled, + // modify ring_remove() and ring_insert() to take an "amount" parameter. + while (amount--) { + ring_remove(bottom); + ring_insert(top, fill); + } + /* Set the boundaries to hard wrapped where we tore apart or glued together the contents. + * Do it after scrolling down, for the bottom row to be the desired one. */ + set_hard_wrapped(top - 1); + set_hard_wrapped(bottom); + /* Repaint the affected lines. No need to extend, set_hard_wrapped() took care of + * invalidating the context lines if necessary. */ + invalidate_rows(top, bottom); + /* We've modified the display. Make a note of it. */ + m_text_deleted_flag = TRUE; + } else { + /* Scroll down partial rows. The line endings and the BiDi flags don't scroll. */ + + /* Make sure the area we're about to scroll is present in memory. */ + long row = top; + for (row = top; row <= bottom; row++) { + _vte_row_data_fill(m_screen->row_data->index_writable(row), &basic_cell, right + 1); + } + /* Handle TABs, CJKs, emojis that will be cut in half. */ + for (row = top; row <= bottom; row++) { + cleanup_fragments(row, left, left); + cleanup_fragments(row, right + 1, right + 1); + } + /* Scroll down by copying the cell data. */ + for (row = bottom; row >= top + amount; row--) { + VteRowData *dst = m_screen->row_data->index_writable(row); + VteRowData *src = m_screen->row_data->index_writable(row - amount); + memcpy(dst->cells + left, src->cells + left, (right - left + 1) * sizeof(VteCell)); + } + /* Erase the cells we scrolled away from. */ + const VteCell *cell = fill ? &m_color_defaults : &basic_cell; + for (; row >= top; row--) { + VteRowData *empty = m_screen->row_data->index_writable(row); + std::fill_n(&empty->cells[left], right - left + 1, *cell); + } + /* Repaint the affected lines, with context if necessary. */ + invalidate_rows_and_context(top, bottom); + /* We've modified the display. Make a note of it. */ + m_text_deleted_flag = TRUE; + } +} + +/* Terminal::scroll_text_left: + * + * Scrolls the text to the left by the given amount, within the given custom scrolling region. + * The DECSTBM / DECSLRM scrolling region (or lack thereof) is irrelevant (unless, of course, + * it is the one passed to this method). + * + * "fill" tells whether to fill the new lines with the background color. + * + * The cursor's position is irrelevant, and it stays where it was. + */ +void +Terminal::scroll_text_left(scrolling_region const& scrolling_region, + vte::grid::row_t amount, bool fill) +{ + auto const top = m_screen->insert_delta + scrolling_region.top(); + auto const bottom = m_screen->insert_delta + scrolling_region.bottom(); + auto const left = scrolling_region.left(); + auto const right = scrolling_region.right(); + + amount = CLAMP(amount, 1, right - left + 1); + + /* Make sure the ring covers the area we'll operate on. */ + while (long(m_screen->row_data->next()) <= bottom) [[unlikely]] + ring_append(false /* no fill */); + + const VteCell *cell = fill ? &m_color_defaults : &basic_cell; + + /* Scroll left in each row separately. */ + for (auto row = top; row <= bottom; row++) { + /* Make sure the area we're about to scroll is present in memory. */ + _vte_row_data_fill(m_screen->row_data->index_writable(row), &basic_cell, right + 1); + /* Handle TABs, CJKs, emojis that will be cut in half. */ + cleanup_fragments(row, left, left + amount); + cleanup_fragments(row, right + 1, right + 1); + /* Scroll left by copying the cell data. */ + VteRowData *rowdata = m_screen->row_data->index_writable(row); + memmove(rowdata->cells + left, rowdata->cells + left + amount, (right - left + 1 - amount) * sizeof(VteCell)); + /* Erase the cells we scrolled away from. */ + std::fill_n(&rowdata->cells[right + 1 - amount], amount, *cell); + /* To match xterm, we modify the line endings of the scrolled lines to hard newline. + * This differs from scroll_text_right(). */ + set_hard_wrapped(row); + } + /* Repaint the affected lines, with context if necessary. */ + invalidate_rows_and_context(top, bottom); + /* We've modified the display. Make a note of it. */ + m_text_deleted_flag = TRUE; +} + +/* Terminal::scroll_text_right: + * + * Scrolls the text to the right by the given amount, within the given custom scrolling region. + * The DECSTBM / DECSLRM scrolling region (or lack thereof) is irrelevant (unless, of course, + * it is the one passed to this method). + * + * "fill" tells whether to fill the new lines with the background color. + * + * The cursor's position is irrelevant, and it stays where it was. + */ +void +Terminal::scroll_text_right(scrolling_region const& scrolling_region, + vte::grid::row_t amount, bool fill) +{ + auto const top = m_screen->insert_delta + scrolling_region.top(); + auto const bottom = m_screen->insert_delta + scrolling_region.bottom(); + auto const left = scrolling_region.left(); + auto const right = scrolling_region.right(); + + amount = CLAMP(amount, 1, right - left + 1); + + /* Make sure the ring covers the area we'll operate on. */ + while (long(m_screen->row_data->next()) <= bottom) [[unlikely]] + ring_append(false /* no fill */); + + const VteCell *cell = fill ? &m_color_defaults : &basic_cell; + + /* Scroll right in each row separately. */ + for (auto row = top; row <= bottom; row++) { + /* Make sure the area we're about to scroll is present in memory. */ + _vte_row_data_fill(m_screen->row_data->index_writable(row), &basic_cell, right + 1); + /* Handle TABs, CJKs, emojis that will be cut in half. */ + cleanup_fragments(row, left, left); + cleanup_fragments(row, right + 1 - amount, right + 1); + /* Scroll right by copying the cell data. */ + VteRowData *rowdata = m_screen->row_data->index_writable(row); + memmove(rowdata->cells + left + amount, rowdata->cells + left, (right - left + 1 - amount) * sizeof(VteCell)); + /* Erase the cells we scrolled away from. */ + std::fill_n(&rowdata->cells[left], amount, *cell); + /* To match xterm, we don't modify the line endings. This differs from scroll_text_left(). */ + } + /* Repaint the affected lines, with context if necessary. */ + invalidate_rows_and_context(top, bottom); + /* We've modified the display. Make a note of it. */ + m_text_deleted_flag = TRUE; +} + +/* Terminal::cursor_down_with_scrolling: + * Cursor down by one line, with scrolling if needed (respecting the DECSTBM / DECSLRM scrolling region). + * + * See the "RI, IND/LF, DECFI, DECBI" picture in ../doc/scrolling-region.txt. + * + * DEC STD 070 says not to do anything if the cursor hits the margin outside of the scrolling area. + * Xterm follows this, and so do we. Reportedly (#2526) DEC terminals move the cursor despite their doc. + * + * If the region's top, left and right edges are at the screen's top, left and right then + * the scrolled out line goes to the scrollback buffer. + * + * "fill" tells whether to fill the new line with the background color. + */ +void +Terminal::cursor_down_with_scrolling(bool fill) +{ + auto cursor_row = get_xterm_cursor_row(); + auto cursor_col = get_xterm_cursor_column(); + + if (cursor_row == m_scrolling_region.bottom()) { + /* Hit the bottom row of the scrolling region. */ + if (cursor_col >= m_scrolling_region.left() && cursor_col <= m_scrolling_region.right()) { + /* Inside the horizontal margins, scroll the text in the scrolling region. */ + scroll_text_up(m_scrolling_region, 1, fill); + } else { + /* Outside of the horizontal margins, do nothing. */ + } + } else if (cursor_row == m_row_count - 1) { + /* Hit the bottom of the screen outside of the scrolling region, do nothing. */ + } else { + /* No boundary hit, move the cursor down. process_incoming() takes care of invalidating both rows. */ m_screen->cursor.row++; - } + } +} + +/* Terminal::cursor_up_with_scrolling: + * Cursor up by one line, with scrolling if needed (respecting the DECSTBM / DECSLRM scrolling region). + * + * See the "RI, IND/LF, DECFI, DECBI" picture in ../doc/scrolling-region.txt. + * + * DEC STD 070 says not to do anything if the cursor hits the margin outside of the scrolling area. + * Xterm follows this, and so do we. Reportedly (#2526) DEC terminals move the cursor despite their doc. + * + * "fill" tells whether to fill the new line with the background color. + */ +void +Terminal::cursor_up_with_scrolling(bool fill) +{ + auto cursor_row = get_xterm_cursor_row(); + auto cursor_col = get_xterm_cursor_column(); + + if (cursor_row == m_scrolling_region.top()) { + /* Hit the top row of the scrolling region. */ + if (cursor_col >= m_scrolling_region.left() && cursor_col <= m_scrolling_region.right()) { + /* Inside the horizontal margins, scroll the text in the scrolling region. */ + scroll_text_down(m_scrolling_region, 1, fill); + } else { + /* Outside of the horizontal margins, do nothing. */ + } + } else if (cursor_row == 0) { + /* Hit the top of the screen outside of the scrolling region, do nothing. */ + } else { + /* No boundary hit, move the cursor up. process_incoming() takes care of invalidating both rows. */ + m_screen->cursor.row--; + } +} + +/* Terminal::cursor_right_with_scrolling: + * Cursor right by one column, with scrolling if needed (respecting the DECSTBM / DECSLRM scrolling region). + * + * See the "RI, IND/LF, DECFI, DECBI" picture in ../doc/scrolling-region.txt. + * + * DEC STD 070 says not to do anything if the cursor hits the margin outside of the scrolling area. + * Xterm follows this, and so do we. Reportedly (#2526) DEC terminals move the cursor despite their doc. + * + * "fill" tells whether to fill the new line with the background color. + */ +void +Terminal::cursor_right_with_scrolling(bool fill) +{ + auto cursor_row = get_xterm_cursor_row(); + auto cursor_col = get_xterm_cursor_column(); + + if (cursor_col == m_scrolling_region.right()) { + /* Hit the right column of the scrolling region. */ + if (cursor_row >= m_scrolling_region.top() && cursor_row <= m_scrolling_region.bottom()) { + /* Inside the vertical margins, scroll the text in the scrolling region. */ + scroll_text_left(m_scrolling_region, 1, fill); + } else { + /* Outside of the vertical margins, do nothing. */ + } + } else if (cursor_col == m_column_count - 1) { + /* Hit the right edge of the screen outside of the scrolling region, do nothing. */ + } else { + /* No boundary hit, move the cursor right. process_incoming() takes care of invalidating its row. */ + m_screen->cursor.col++; + } +} + +/* Terminal::cursor_left_with_scrolling: + * Cursor left by one column, with scrolling if needed (respecting the DECSTBM / DECSLRM scrolling region). + * + * See the "RI, IND/LF, DECFI, DECBI" picture in ../doc/scrolling-region.txt. + * + * DEC STD 070 says not to do anything if the cursor hits the margin outside of the scrolling area. + * Xterm follows this, and so do we. Reportedly (#2526) DEC terminals move the cursor despite their doc. + * + * "fill" tells whether to fill the new line with the background color. + */ +void +Terminal::cursor_left_with_scrolling(bool fill) +{ + auto cursor_row = get_xterm_cursor_row(); + auto cursor_col = get_xterm_cursor_column(); + + if (cursor_col == m_scrolling_region.left()) { + /* Hit the left column of the scrolling region. */ + if (cursor_row >= m_scrolling_region.top() && cursor_row <= m_scrolling_region.bottom()) { + /* Inside the vertical margins, scroll the text in the scrolling region. */ + scroll_text_right(m_scrolling_region, 1, fill); + } else { + /* Outside of the vertical margins, do nothing. */ + } + } else if (cursor_col == 0) { + /* Hit the left edge of the screen outside of the scrolling region, do nothing. */ + } else { + /* No boundary hit, move the cursor left. process_incoming() takes care of invalidating its row. */ + m_screen->cursor.col--; + } } /* Drop the scrollback. */ @@ -2751,12 +3149,14 @@ void Terminal::drop_scrollback() { /* Only for normal screen; alternate screen doesn't have a scrollback. */ - _vte_ring_drop_scrollback (m_normal_screen.row_data, - m_normal_screen.insert_delta); + m_normal_screen.row_data->drop_scrollback(m_normal_screen.insert_delta); if (m_screen == &m_normal_screen) { queue_adjustment_value_changed(m_normal_screen.insert_delta); adjust_adjustments_full(); + m_ringview.invalidate(); + invalidate_all(); + match_contents_clear(); } } @@ -2767,8 +3167,7 @@ Terminal::restore_cursor(VteScreen *screen__) screen__->cursor.col = screen__->saved.cursor.col; screen__->cursor.row = screen__->insert_delta + CLAMP(screen__->saved.cursor.row, 0, m_row_count - 1); - - m_modes_ecma.set_modes(screen__->saved.modes_ecma); + screen__->cursor_advanced_by_graphic_character = screen__->saved.cursor_advanced_by_graphic_character; m_modes_private.set_DEC_REVERSE_IMAGE(screen__->saved.reverse_mode); m_modes_private.set_DEC_ORIGIN(screen__->saved.origin_mode); @@ -2786,8 +3185,7 @@ Terminal::save_cursor(VteScreen *screen__) { screen__->saved.cursor.col = screen__->cursor.col; screen__->saved.cursor.row = screen__->cursor.row - screen__->insert_delta; - - screen__->saved.modes_ecma = m_modes_ecma.get_modes(); + screen__->saved.cursor_advanced_by_graphic_character = screen__->cursor_advanced_by_graphic_character; screen__->saved.reverse_mode = m_modes_private.DEC_REVERSE_IMAGE(); screen__->saved.origin_mode = m_modes_private.DEC_ORIGIN(); @@ -2799,17 +3197,18 @@ Terminal::save_cursor(VteScreen *screen__) screen__->saved.character_replacement = m_character_replacement; } -/* Insert a single character into the stored data array. */ +/* Insert a single character into the stored data array. + * + * Note that much of this method is duplicated below in insert_single_width_chars(). + * Make sure to keep the two in sync! */ void Terminal::insert_char(gunichar c, - bool insert, - bool invalidate_now) + bool invalidate_now) { VteCellAttr attr; VteRowData *row; long col; int columns, i; - bool line_wrapped = false; /* cursor moved before char inserted */ gunichar c_unmapped = c; /* DEC Special Character and Line Drawing Set. VT100 and higher (per XTerm docs). */ @@ -2848,8 +3247,6 @@ Terminal::insert_char(gunichar c, 0x00b7, /* ~ => bullet */ }; - insert |= m_modes_ecma.IRM(); - /* If we've enabled the special drawing set, map the characters to * Unicode. */ if (G_UNLIKELY (*m_character_replacement == VTE_CHARACTER_REPLACEMENT_LINE_DRAWING)) { @@ -2862,25 +3259,43 @@ Terminal::insert_char(gunichar c, /* If we're autowrapping here, do it. */ col = m_screen->cursor.col; - if (G_UNLIKELY (columns && col + columns > m_column_count)) { + if (G_UNLIKELY (columns && ( + /* no room at the terminal's right edge */ + (col + columns > m_column_count) || + /* cursor is just beyond the DECSLRM right margin, moved there by printing a letter */ + (col == m_scrolling_region.right() + 1 && m_screen->cursor_advanced_by_graphic_character) || + /* wide character is printed, cursor would cross the DECSLRM right margin */ + (col <= m_scrolling_region.right() && col + columns > m_scrolling_region.right() + 1)))) { if (m_modes_private.DEC_AUTOWRAP()) { _vte_debug_print(VTE_DEBUG_ADJ, "Autowrapping before character\n"); /* Wrap. */ /* XXX clear to the end of line */ - col = m_screen->cursor.col = 0; + col = m_screen->cursor.col = m_scrolling_region.left(); /* Mark this line as soft-wrapped. */ row = ensure_row(); set_soft_wrapped(m_screen->cursor.row); - cursor_down(false); + /* Handle bce (background color erase) differently from xterm: + * only fill the new row with the background color if scrolling happens due + * to an explicit escape sequence, not due to autowrapping (i.e. not here). + * See https://gitlab.gnome.org/GNOME/vte/-/issues/2219 for details. */ + cursor_down_with_scrolling(false); ensure_row(); apply_bidi_attributes(m_screen->cursor.row, row->attr.bidi_flags, VTE_BIDI_FLAG_ALL); } else { - /* Don't wrap, stay at the rightmost column. */ - col = m_screen->cursor.col = - m_column_count - columns; + /* Don't wrap, stay at the rightmost column or at the right margin. + * Note that we slighly differ from xterm. Xterm swallows wide characters + * that do not fit, we retreat the cursor to fit them. + */ + if (/* cursor is just beyond the DECSLRM right margin, moved there by printing a letter */ + (col == m_scrolling_region.right() + 1 && m_screen->cursor_advanced_by_graphic_character) || + /* wide character is printed, cursor would cross the DECSLRM right margin */ + (col <= m_scrolling_region.right() && col + columns > m_scrolling_region.right() + 1)) { + col = m_screen->cursor.col = m_scrolling_region.right() + 1 - columns; + } else { + col = m_screen->cursor.col = m_column_count - columns; + } } - line_wrapped = true; } _vte_debug_print(VTE_DEBUG_PARSER, @@ -2960,13 +3375,18 @@ Terminal::insert_char(gunichar c, row = ensure_cursor(); g_assert(row != NULL); - if (insert) { - cleanup_fragments(col, col); - for (i = 0; i < columns; i++) - _vte_row_data_insert (row, col + i, &basic_cell); + if (m_modes_ecma.IRM() && + m_screen->cursor.col >= m_scrolling_region.left() && + m_screen->cursor.col <= m_scrolling_region.right()) { + /* Like ICH's handler: Scroll right in a custom region: only the cursor's row, from the cursor to the DECSLRM right margin. */ + auto scrolling_region = m_scrolling_region; + scrolling_region.set_vertical(get_xterm_cursor_row(), get_xterm_cursor_row()); + scrolling_region.set_horizontal(m_screen->cursor.col, scrolling_region.right()); + scroll_text_right(scrolling_region, columns, false /* no fill */); } else { cleanup_fragments(col, col + columns); - _vte_row_data_fill (row, &basic_cell, col + columns); + _vte_row_data_fill (row, &basic_cell, col); + _vte_row_data_expand (row, col + columns); } attr = m_defaults.attr; @@ -2999,6 +3419,8 @@ done: invalidate_row_and_context(m_screen->cursor.row); } + m_screen->cursor_advanced_by_graphic_character = true; + /* We added text, so make a note of it. */ m_text_inserted_flag = TRUE; @@ -3006,8 +3428,109 @@ not_inserted: _vte_debug_print(VTE_DEBUG_ADJ|VTE_DEBUG_PARSER, "insertion delta => %ld.\n", (long)m_screen->insert_delta); +} - m_line_wrapped = line_wrapped; +/* Inserts each character of the string. + * The passed string MUST consist of single-width printable characters only. + * It performs the equivalent of calling insert_char(..., false) on each of them, + * but is usually much faster. + * + * Note that much of this method is duplicated above in insert_char(). + * Make sure to keep the two in sync! */ +void +Terminal::insert_single_width_chars(gunichar const *p, int len) +{ + if (m_scrolling_region.is_restricted() || + (*m_character_replacement == VTE_CHARACTER_REPLACEMENT_LINE_DRAWING) || + !m_modes_private.DEC_AUTOWRAP() || + m_modes_ecma.IRM()) { + /* There is some special unusual circumstance. + * Resort to inserting the characters one by one. */ + while (len--) { + insert_char(*p++, false); + } + return; + } + + /* The usual circumstances, that is, no custom margins, + * no box drawing mode, autowrapping enabled, no insert mode. + * Much of this code is duplicated from insert_char(), with + * the checks for the unnecessary conditions stripped off. + * Also, don't check for wrapping after each character; rather, + * fill up runs within a single row as quickly as we can. + * Furthermore, don't clean up CJK fragments at each character. + * All these combined result in significantly faster operation. */ + while (len) { + VteRowData *row; + long col; + + /* If we're autowrapping here, do it. */ + col = m_screen->cursor.col; + if (G_UNLIKELY (col >= m_column_count)) { + _vte_debug_print(VTE_DEBUG_ADJ, + "Autowrapping before character\n"); + /* Wrap. */ + /* XXX clear to the end of line */ + col = m_screen->cursor.col = 0; + /* Mark this line as soft-wrapped. */ + row = ensure_row(); + set_soft_wrapped(m_screen->cursor.row); + /* Handle bce (background color erase) differently from xterm: + * only fill the new row with the background color if scrolling happens due + * to an explicit escape sequence, not due to autowrapping (i.e. not here). + * See https://gitlab.gnome.org/GNOME/vte/-/issues/2219 for details. */ + cursor_down_with_scrolling(false); + ensure_row(); + apply_bidi_attributes(m_screen->cursor.row, row->attr.bidi_flags, VTE_BIDI_FLAG_ALL); + } + + /* The number of cells we can populate in this row. */ + int run = MIN(len, m_column_count - col); + vte_assert_cmpint(run, >=, 1); + + _VTE_DEBUG_IF(VTE_DEBUG_PARSER) { + gchar *utf8 = g_ucs4_to_utf8(p, run, NULL, NULL, NULL); + _vte_debug_print(VTE_DEBUG_PARSER, + "Inserting string of %d single-width characters \"%s\" (colors %" G_GUINT64_FORMAT ") (%ld+%d, %ld), delta = %ld; ", + run, utf8, m_color_defaults.attr.colors(), + col, run, (long)m_screen->cursor.row, + (long)m_screen->insert_delta); + g_free(utf8); + } + + /* Make sure we have enough rows to hold this data. */ + row = ensure_cursor(); + g_assert(row != NULL); + + cleanup_fragments(col, col + run); + _vte_row_data_fill (row, &basic_cell, col); + _vte_row_data_expand (row, col + run); + + len -= run; + while (run--) { + VteCell *pcell = _vte_row_data_get_writable (row, col); + pcell->c = *p; + pcell->attr = m_defaults.attr; + p++; + col++; + } + + if (_vte_row_data_length (row) > m_column_count) + cleanup_fragments(m_column_count, _vte_row_data_length (row)); + _vte_row_data_shrink (row, m_column_count); + + m_screen->cursor.col = col; + + m_last_graphic_character = *(p - 1); + m_screen->cursor_advanced_by_graphic_character = true; + + /* We added text, so make a note of it. */ + m_text_inserted_flag = TRUE; + + _vte_debug_print(VTE_DEBUG_ADJ|VTE_DEBUG_PARSER, + "insertion delta => %ld.\n", + (long)m_screen->insert_delta); + } } guint8 @@ -3031,7 +3554,7 @@ Terminal::apply_bidi_attributes(vte::grid::row_t start, guint8 bidi_flags, guint _vte_debug_print(VTE_DEBUG_BIDI, "Applying BiDi parameters from row %ld.\n", row); - rowdata = _vte_ring_index_writable (m_screen->row_data, row); + rowdata = m_screen->row_data->index_writable(row); if (rowdata == nullptr || (rowdata->attr.bidi_flags & bidi_flags_mask) == bidi_flags) { _vte_debug_print(VTE_DEBUG_BIDI, "BiDi parameters didn't change for this paragraph.\n"); @@ -3045,7 +3568,7 @@ Terminal::apply_bidi_attributes(vte::grid::row_t start, guint8 bidi_flags, guint if (!rowdata->attr.soft_wrapped) break; - rowdata = _vte_ring_index_writable (m_screen->row_data, row + 1); + rowdata = m_screen->row_data->index_writable(row + 1); if (rowdata == nullptr) break; row++; @@ -3074,8 +3597,8 @@ Terminal::maybe_apply_bidi_attributes(guint8 bidi_flags_mask) auto row = m_screen->cursor.row; - if (row > _vte_ring_delta (m_screen->row_data)) { - const VteRowData *rowdata = _vte_ring_index (m_screen->row_data, row - 1); + if (row > (long)m_screen->row_data->delta()) { + const VteRowData *rowdata = m_screen->row_data->index(row - 1); if (rowdata != nullptr && rowdata->attr.soft_wrapped) { _vte_debug_print(VTE_DEBUG_BIDI, "No, we're not after a hard wrap.\n"); @@ -3093,11 +3616,16 @@ static void reaper_child_exited_cb(VteReaper *reaper, int ipid, int status, - vte::terminal::Terminal* that) + vte::terminal::Terminal* that) noexcept +try { that->child_watch_done(pid_t{ipid}, status); // @that might be destroyed at this point } +catch (...) +{ + vte::log_exception(); +} void Terminal::child_watch_done(pid_t pid, @@ -3134,17 +3662,23 @@ Terminal::child_watch_done(pid_t pid, /* If we still have a PTY, or data to process, defer emitting the signals * until we have EOF on the PTY, so that we can process all pending data. */ - if (pty() || !m_incoming_queue.empty()) { - m_child_exit_status = status; - m_child_exited_after_eos_pending = true; + if (pty()) { + /* Read and process about 64k synchronously, up to EOF or EAGAIN + * or other error, to make sure we consume the child's output. + * See https://gitlab.gnome.org/GNOME/vte/-/issues/2627 */ + pty_io_read(pty()->fd(), G_IO_IN, 65536); + if (!m_incoming_queue.empty()) { + process_incoming(); + } - m_child_exited_eos_wait_timer.schedule_seconds(2); // FIXME: better value? - } else { - m_child_exited_after_eos_pending = false; - - if (widget()) - widget()->emit_child_exited(status); + /* Stop processing data. Optional. Keeping processing data from grandchildren and + * other writers would also be a reasonable choice. It makes a difference if the + * terminal is held open after the child exits. */ + unset_pty(); } + + if (widget()) + widget()->emit_child_exited(status); } static void @@ -3283,8 +3817,7 @@ Terminal::watch_child (pid_t child_pid) if (!pty()) return; - GObject *object = G_OBJECT(m_terminal); - g_object_freeze_notify(object); + auto const freezer = vte::glib::FreezeObjectNotify{m_terminal}; /* Set this as the child's pid. */ m_pty_pid = child_pid; @@ -3308,8 +3841,6 @@ Terminal::watch_child (pid_t child_pid) } /* FIXMEchpe: call set_size() here? */ - - g_object_thaw_notify(object); } /* Reset the input method context. */ @@ -3325,584 +3856,463 @@ Terminal::im_reset() void Terminal::process_incoming() { - switch (data_syntax()) { - case DataSyntax::eECMA48_UTF8: process_incoming_utf8(); break; -#ifdef WITH_ICU - case DataSyntax::eECMA48_PCTERM: process_incoming_pcterm(); break; -#endif - default: g_assert_not_reached(); break; - } -} + _vte_debug_print(VTE_DEBUG_IO, + "Handler processing %" G_GSIZE_FORMAT " bytes over %" G_GSIZE_FORMAT " chunks.\n", + m_input_bytes, + m_incoming_queue.size()); + _vte_debug_print (VTE_DEBUG_WORK, "("); + /* We should only be called when there's data to process. */ + g_assert(!m_incoming_queue.empty()); + + auto bytes_processed = ssize_t{0}; + + auto context = ProcessingContext{*this}; + + while (!m_incoming_queue.empty()) { + auto& chunk = m_incoming_queue.front(); + + assert((bool)chunk); + + auto const start = chunk->begin_reading(); + + _VTE_DEBUG_IF(VTE_DEBUG_IO) { + _vte_debug_print(VTE_DEBUG_IO, + "Processing data syntax %d chunk %p starting at offset %u\n", + (int)current_data_syntax(), + (void*)chunk.get(), + unsigned(chunk->begin_reading() - chunk->data())); + + _vte_debug_hexdump("Incoming buffer", + chunk->begin_reading(), + chunk->size_reading()); + } + + switch (current_data_syntax()) { + case DataSyntax::ECMA48_UTF8: + process_incoming_utf8(context, *chunk); + break; + +#if WITH_ICU + case DataSyntax::ECMA48_PCTERM: + process_incoming_pcterm(context, *chunk); + break; +#endif + + default: + g_assert_not_reached(); + break; + } + + bytes_processed += size_t(chunk->begin_reading() - start); + + _vte_debug_print(VTE_DEBUG_IO, "read %d bytes, chunk %s, data syntax now %d\n", + int(chunk->begin_reading() - start), + chunk->has_reading()?"has more":"finished", + (int)current_data_syntax()); + // If all data from this chunk has been processed, go to the next one + if (!chunk->has_reading()) + m_incoming_queue.pop(); + } + +#if VTE_DEBUG + /* Some safety checks: ensure the visible parts of the buffer + * are all in the buffer. */ + vte_assert_cmpint(m_screen->insert_delta, >=, m_screen->row_data->delta()); + + /* The cursor shouldn't be above or below the addressable + * part of the display buffer. */ + vte_assert_cmpint(m_screen->cursor.row, >=, m_screen->insert_delta); +#endif + + if (context.m_modified) { + /* Keep the cursor on-screen if we scroll on output, or if + * we're currently at the bottom of the buffer. */ + update_insert_delta(); + if (m_scroll_on_output || context.m_bottom) { + scroll_to_bottom(); + } + /* Deselect the current selection if its contents are changed + * by this insertion. */ + if (!m_selection_resolved.empty()) { + //FIXMEchpe: this is atrocious + auto selection = g_string_new(nullptr); + get_selected_text(selection); + if ((selection == nullptr) || + (m_selection[vte::to_integral(vte::platform::ClipboardType::PRIMARY)] == nullptr) || + (strcmp(selection->str, m_selection[vte::to_integral(vte::platform::ClipboardType::PRIMARY)]->str) != 0)) { + deselect_all(); + } + g_string_free(selection, TRUE); + } + } + + if (context.m_modified || (m_screen != context.m_saved_screen)) { + m_ringview.invalidate(); + /* Signal that the visible contents changed. */ + queue_contents_changed(); + } + + emit_pending_signals(); + + if (context.m_invalidated_text) { + invalidate_rows_and_context(context.m_bbox_top, context.m_bbox_bottom); + } + + if ((context.m_saved_cursor.col != m_screen->cursor.col) || + (context.m_saved_cursor.row != m_screen->cursor.row)) { + /* invalidate the old and new cursor positions */ + if (context.m_saved_cursor_visible) + invalidate_row(context.m_saved_cursor.row); + invalidate_cursor_once(); + check_cursor_blink(); + /* Signal that the cursor moved. */ + queue_cursor_moved(); + } else if ((context.m_saved_cursor_visible != m_modes_private.DEC_TEXT_CURSOR()) || + (context.m_saved_cursor_style != m_cursor_style)) { + invalidate_row(context.m_saved_cursor.row); + check_cursor_blink(); + } + + /* Tell the input method where the cursor is. */ + im_update_cursor(); + + /* After processing some data, do a hyperlink GC. The multiplier is totally arbitrary, feel free to fine tune. */ + m_screen->row_data->hyperlink_maybe_gc(bytes_processed * 8); + + _vte_debug_print (VTE_DEBUG_WORK, ")"); + _vte_debug_print (VTE_DEBUG_IO, + "%" G_GSIZE_FORMAT " bytes in %" G_GSIZE_FORMAT " chunks left to process.\n", + m_input_bytes, + m_incoming_queue.size()); +} /* Note that this code is mostly copied to process_incoming_pcterm() below; any non-charset-decoding * related changes made here need to be made there, too. - * FIXMEchpe: refactor this to share more code with process_incoming_pcterm(). */ void -Terminal::process_incoming_utf8() +Terminal::process_incoming_utf8(ProcessingContext& context, + vte::base::Chunk& chunk) { - VteVisualPosition saved_cursor; - gboolean saved_cursor_visible; - CursorStyle saved_cursor_style; - vte::grid::row_t bbox_top, bbox_bottom; - gboolean modified, bottom; - gboolean invalidated_text; - gboolean in_scroll_region; + auto seq = vte::parser::Sequence{m_parser}; - _vte_debug_print(VTE_DEBUG_IO, - "Handler processing %" G_GSIZE_FORMAT " bytes over %" G_GSIZE_FORMAT " chunks.\n", - m_input_bytes, - m_incoming_queue.size()); - _vte_debug_print (VTE_DEBUG_WORK, "("); + auto const iend = chunk.end_reading(); + auto ip = chunk.begin_reading(); - auto previous_screen = m_screen; + /* Chunk size (k_chunk_size) is around 8kB, so single_width_chars is at most 32kB, fine on the stack. */ + static_assert(vte::base::Chunk::max_size() <= 8 * 1024); + gunichar *single_width_chars = g_newa(gunichar, iend - ip); + int single_width_chars_count; - bottom = m_screen->insert_delta == (long)m_screen->scroll_delta; + while (ip < iend) [[likely]] { - /* Save the current cursor position. */ - saved_cursor = m_screen->cursor; - saved_cursor_visible = m_modes_private.DEC_TEXT_CURSOR(); - saved_cursor_style = m_cursor_style; + switch (m_utf8_decoder.decode(*(ip++))) { + case vte::base::UTF8Decoder::REJECT_REWIND: + /* Rewind the stream. + * Note that this will never lead to a loop, since in the + * next round this byte *will* be consumed. + */ + --ip; + [[fallthrough]]; + case vte::base::UTF8Decoder::REJECT: + m_utf8_decoder.reset(); + /* Fall through to insert the U+FFFD replacement character. */ + [[fallthrough]]; + case vte::base::UTF8Decoder::ACCEPT: { + [[likely]]; - in_scroll_region = m_scrolling_restricted - && (m_screen->cursor.row >= (m_screen->insert_delta + m_scrolling_region.start)) - && (m_screen->cursor.row <= (m_screen->insert_delta + m_scrolling_region.end)); + auto rv = m_parser.feed(m_utf8_decoder.codepoint()); + if (G_UNLIKELY(rv < 0)) { +#if VTE_DEBUG + uint32_t c = m_utf8_decoder.codepoint(); + char c_buf[7]; + g_snprintf(c_buf, sizeof(c_buf), "%lc", c); + char const* wp_str = g_unichar_isprint(c) ? c_buf : _vte_debug_sequence_to_string(c_buf, -1); + _vte_debug_print(VTE_DEBUG_PARSER, "Parser error on U+%04X [%s]!\n", + c, wp_str); +#endif /* VTE_DEBUG */ + break; + } - /* We should only be called when there's data to process. */ - g_assert(!m_incoming_queue.empty()); - - modified = FALSE; - invalidated_text = FALSE; - - bbox_bottom = -G_MAXINT; - bbox_top = G_MAXINT; - - vte::parser::Sequence seq{m_parser}; - - m_line_wrapped = false; - - size_t bytes_processed = 0; - - while (!m_incoming_queue.empty()) { - auto chunk = std::move(m_incoming_queue.front()); - m_incoming_queue.pop(); - - g_assert_nonnull(chunk.get()); - - _VTE_DEBUG_IF(VTE_DEBUG_IO) { - _vte_debug_hexdump("Incoming buffer", chunk->data, chunk->len); - } - - bytes_processed += chunk->len; - - auto const* ip = chunk->data; - auto const* iend = chunk->data + chunk->len; - - for ( ; ip < iend; ++ip) { - - switch (m_utf8_decoder.decode(*ip)) { - case vte::base::UTF8Decoder::REJECT_REWIND: - /* Rewind the stream. - * Note that this will never lead to a loop, since in the - * next round this byte *will* be consumed. - */ - --ip; - [[fallthrough]]; - case vte::base::UTF8Decoder::REJECT: - m_utf8_decoder.reset(); - /* Fall through to insert the U+FFFD replacement character. */ - [[fallthrough]]; - case vte::base::UTF8Decoder::ACCEPT: { - auto rv = m_parser.feed(m_utf8_decoder.codepoint()); - if (G_UNLIKELY(rv < 0)) { -#ifdef DEBUG - uint32_t c = m_utf8_decoder.codepoint(); - char c_buf[7]; - g_snprintf(c_buf, sizeof(c_buf), "%lc", c); - char const* wp_str = g_unichar_isprint(c) ? c_buf : _vte_debug_sequence_to_string(c_buf, -1); - _vte_debug_print(VTE_DEBUG_PARSER, "Parser error on U+%04X [%s]!\n", - c, wp_str); +#if VTE_DEBUG + if (rv != VTE_SEQ_NONE) + g_assert((bool)seq); #endif - break; + + _VTE_DEBUG_IF(VTE_DEBUG_PARSER) { + if (rv != VTE_SEQ_NONE) { + seq.print(); } + } -#ifdef VTE_DEBUG - if (rv != VTE_SEQ_NONE) - g_assert((bool)seq); -#endif + // FIXMEchpe this assumes that the only handler inserting + // a character is GRAPHIC, which isn't true (at least ICH, REP, SUB + // also do, and invalidate directly for now)... - _VTE_DEBUG_IF(VTE_DEBUG_PARSER) { - if (rv != VTE_SEQ_NONE) { - seq.print(); + switch (rv) { + case VTE_SEQ_GRAPHIC: [[likely]] { + + context.pre_GRAPHIC(); + + // does insert_char(c, false) + GRAPHIC(seq); + _vte_debug_print(VTE_DEBUG_PARSER, + "Last graphic is now U+%04X %lc\n", + m_last_graphic_character, + g_unichar_isprint(m_last_graphic_character) ? m_last_graphic_character : 0xfffd); + + // It's very common to get batches of printable single-width + // characters. So plan for that and avoid round-tripping + // through the main UTF-8 decoder as well as the Parser. It + // also allows for a single pre_GRAPHIC()/post_GRAPHIC(). + single_width_chars_count = 0; + /* Super quickly process initial ASCII segment. */ + while (ip < iend && *ip >= 0x20 && *ip < 0x7F) [[likely]] { + single_width_chars[single_width_chars_count++] = *ip; + ip++; + } + if (ip < iend || *ip >= 0x80) { + /* Continue with UTF-8 (possibly including further ASCII) non-control chars. */ + /* This is just a little bit slower than the ASCII loop above. */ + vte::base::UTF8Decoder decoder; + auto ip_lookahead = ip; + while (ip_lookahead < iend) [[likely]] { + auto state = decoder.decode(*ip_lookahead++); + if (state == vte::base::UTF8Decoder::ACCEPT) [[likely]] { + gunichar c = decoder.codepoint(); + if ((c >= 0x20 && c < 0x7F) || + (c >= 0xA0 && _vte_unichar_width(c, context.m_terminal->m_utf8_ambiguous_width) == 1)) [[likely]] { + /* Single width char, append to the array. */ + single_width_chars[single_width_chars_count++] = c; + ip = ip_lookahead; + continue; + } else if (c >= 0xA0) { + /* Zero or double width char, flush the array of single width ones and then process this. */ + if (single_width_chars_count > 0) { + insert_single_width_chars(single_width_chars, single_width_chars_count); + single_width_chars_count = 0; + } + insert_char(c, false); + ip = ip_lookahead; + continue; + } else { + /* Control char. */ + break; + } + } else if (state == vte::base::UTF8Decoder::REJECT || + state == vte::base::UTF8Decoder::REJECT_REWIND) [[unlikely]] { + /* Encoding error. */ + break; + } + /* else: More bytes needed, continue. */ } } - - // FIXMEchpe this assumes that the only handler inserting - // a character is GRAPHIC, which isn't true (at least ICH, REP, SUB - // also do, and invalidate directly for now)... - - switch (rv) { - case VTE_SEQ_GRAPHIC: { - - bbox_top = std::min(bbox_top, - m_screen->cursor.row); - - // does insert_char(c, false, false) - GRAPHIC(seq); + /* Flush the array of single width chars. */ + if (single_width_chars_count > 0) [[likely]] { + insert_single_width_chars(single_width_chars, single_width_chars_count); _vte_debug_print(VTE_DEBUG_PARSER, "Last graphic is now U+%04X %lc\n", m_last_graphic_character, g_unichar_isprint(m_last_graphic_character) ? m_last_graphic_character : 0xfffd); + } - if (m_line_wrapped) { - m_line_wrapped = false; - /* line wrapped, correct bbox */ - if (invalidated_text && - (m_screen->cursor.row > bbox_bottom + VTE_CELL_BBOX_SLACK || - m_screen->cursor.row < bbox_top - VTE_CELL_BBOX_SLACK)) { - invalidate_rows_and_context(bbox_top, bbox_bottom); - bbox_bottom = -G_MAXINT; - bbox_top = G_MAXINT; - } - bbox_top = std::min(bbox_top, - m_screen->cursor.row); - } - /* Add the cells over which we have moved to the region - * which we need to refresh for the user. */ - bbox_bottom = std::max(bbox_bottom, - m_screen->cursor.row); - invalidated_text = TRUE; + context.post_GRAPHIC(); + break; + } - /* We *don't* emit flush pending signals here. */ - modified = TRUE; + case VTE_SEQ_NONE: + case VTE_SEQ_IGNORE: + break; + default: { + switch (seq.command()) { +#define _VTE_CMD_HANDLER(cmd) \ + case VTE_CMD_##cmd: cmd(seq); break; +#define _VTE_CMD_HANDLER_R(cmd) \ + case VTE_CMD_##cmd: if (cmd(seq)) { \ + context.post_CMD(); \ + goto switched_data_syntax; \ + } \ + break; +#define _VTE_CMD_HANDLER_NOP(cmd) +#include "parser-cmd-handlers.hh" +#undef _VTE_CMD_HANDLER +#undef _VTE_CMD_HANDLER_NOP +#undef _VTE_CMD_HANDLER_R + default: + _vte_debug_print(VTE_DEBUG_PARSER, + "Unknown parser command %d\n", seq.command()); break; } - case VTE_SEQ_NONE: - case VTE_SEQ_IGNORE: - break; + m_last_graphic_character = 0; - default: { - switch (seq.command()) { -#define _VTE_CMD(cmd) case VTE_CMD_##cmd: cmd(seq); break; -#define _VTE_NOP(cmd) -#include "parser-cmd.hh" -#undef _VTE_CMD -#undef _VTE_NOP - default: - _vte_debug_print(VTE_DEBUG_PARSER, - "Unknown parser command %d\n", seq.command()); - break; - } - - m_last_graphic_character = 0; - - modified = TRUE; - - // FIXME m_screen may be != previous_screen, check for that! - - gboolean new_in_scroll_region = m_scrolling_restricted - && (m_screen->cursor.row >= (m_screen->insert_delta + m_scrolling_region.start)) - && (m_screen->cursor.row <= (m_screen->insert_delta + m_scrolling_region.end)); - - /* if we have moved greatly during the sequence handler, or moved - * into a scroll_region from outside it, restart the bbox. - */ - if (invalidated_text && - ((new_in_scroll_region && !in_scroll_region) || - (m_screen->cursor.row > bbox_bottom + VTE_CELL_BBOX_SLACK || - m_screen->cursor.row < bbox_top - VTE_CELL_BBOX_SLACK))) { - invalidate_rows_and_context(bbox_top, bbox_bottom); - invalidated_text = FALSE; - bbox_bottom = -G_MAXINT; - bbox_top = G_MAXINT; - } - - in_scroll_region = new_in_scroll_region; - - break; - } - } + context.post_CMD(); break; } } - } - - if (chunk->eos()) { - m_eos_pending = true; - /* If there's an unfinished character in the queue, insert a replacement character */ - if (m_utf8_decoder.flush()) { - insert_char(m_utf8_decoder.codepoint(), false, true); - } - break; } + } } -#ifdef VTE_DEBUG - /* Some safety checks: ensure the visible parts of the buffer - * are all in the buffer. */ - g_assert_cmpint(m_screen->insert_delta, >=, _vte_ring_delta(m_screen->row_data)); + if (chunk.eos() && ip == iend) { + m_eos_pending = true; + /* If there's an unfinished character in the queue, insert a replacement character */ + if (m_utf8_decoder.flush()) { + insert_char(m_utf8_decoder.codepoint(), true); + } + } - /* The cursor shouldn't be above or below the addressable - * part of the display buffer. */ - g_assert_cmpint(m_screen->cursor.row, >=, m_screen->insert_delta); -#endif +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-label" +switched_data_syntax: +#pragma GCC diagnostic pop - if (modified) { - /* Keep the cursor on-screen if we scroll on output, or if - * we're currently at the bottom of the buffer. */ - update_insert_delta(); - if (m_scroll_on_output || bottom) { - maybe_scroll_to_bottom(); - } - /* Deselect the current selection if its contents are changed - * by this insertion. */ - if (!m_selection_resolved.empty()) { - //FIXMEchpe: this is atrocious - auto selection = get_selected_text(); - if ((selection == nullptr) || - (m_selection[VTE_SELECTION_PRIMARY] == nullptr) || - (strcmp(selection->str, m_selection[VTE_SELECTION_PRIMARY]->str) != 0)) { - deselect_all(); - } - if (selection) - g_string_free(selection, TRUE); - } - } - - if (modified || (m_screen != previous_screen)) { - m_ringview.invalidate(); - /* Signal that the visible contents changed. */ - queue_contents_changed(); - } - - emit_pending_signals(); - - if (invalidated_text) { - invalidate_rows_and_context(bbox_top, bbox_bottom); - } - - if ((saved_cursor.col != m_screen->cursor.col) || - (saved_cursor.row != m_screen->cursor.row)) { - /* invalidate the old and new cursor positions */ - if (saved_cursor_visible) - invalidate_row(saved_cursor.row); - invalidate_cursor_once(); - check_cursor_blink(); - /* Signal that the cursor moved. */ - queue_cursor_moved(); - } else if ((saved_cursor_visible != m_modes_private.DEC_TEXT_CURSOR()) || - (saved_cursor_style != m_cursor_style)) { - invalidate_row(saved_cursor.row); - check_cursor_blink(); - } - - /* Tell the input method where the cursor is. */ - im_update_cursor(); - - /* After processing some data, do a hyperlink GC. The multiplier is totally arbitrary, feel free to fine tune. */ - _vte_ring_hyperlink_maybe_gc(m_screen->row_data, bytes_processed * 8); - - _vte_debug_print (VTE_DEBUG_WORK, ")"); - _vte_debug_print (VTE_DEBUG_IO, - "%" G_GSIZE_FORMAT " bytes in %" G_GSIZE_FORMAT " chunks left to process.\n", - m_input_bytes, - m_incoming_queue.size()); + // Update start for data consumed + chunk.set_begin_reading(ip); } -#ifdef WITH_ICU +#if WITH_ICU /* Note that this is mostly a copy of process_incoming_utf8() above; any non-charset-decoding * related changes made here need to be made there, too. - * FIXMEchpe: refactor this to share more code with process_incoming_utf8(). */ void -Terminal::process_incoming_pcterm() +Terminal::process_incoming_pcterm(ProcessingContext& context, + vte::base::Chunk& chunk) { - VteVisualPosition saved_cursor; - gboolean saved_cursor_visible; - CursorStyle saved_cursor_style; - vte::grid::row_t bbox_top, bbox_bottom; - gboolean modified, bottom; - gboolean invalidated_text; - gboolean in_scroll_region; - - _vte_debug_print(VTE_DEBUG_IO, - "Handler processing %" G_GSIZE_FORMAT " bytes over %" G_GSIZE_FORMAT " chunks.\n", - m_input_bytes, - m_incoming_queue.size()); - _vte_debug_print (VTE_DEBUG_WORK, "("); - - auto previous_screen = m_screen; - - bottom = m_screen->insert_delta == (long)m_screen->scroll_delta; - - /* Save the current cursor position. */ - saved_cursor = m_screen->cursor; - saved_cursor_visible = m_modes_private.DEC_TEXT_CURSOR(); - saved_cursor_style = m_cursor_style; - - in_scroll_region = m_scrolling_restricted - && (m_screen->cursor.row >= (m_screen->insert_delta + m_scrolling_region.start)) - && (m_screen->cursor.row <= (m_screen->insert_delta + m_scrolling_region.end)); - - /* We should only be called when there's data to process. */ - g_assert(!m_incoming_queue.empty()); - - modified = FALSE; - invalidated_text = FALSE; - - bbox_bottom = -G_MAXINT; - bbox_top = G_MAXINT; - - vte::parser::Sequence seq{m_parser}; - - m_line_wrapped = false; - - size_t bytes_processed = 0; + auto seq = vte::parser::Sequence{m_parser}; auto& decoder = m_converter->decoder(); - while (!m_incoming_queue.empty()) { - auto chunk = std::move(m_incoming_queue.front()); - m_incoming_queue.pop(); + auto eos = bool{false}; + auto flush = bool{false}; - g_assert_nonnull(chunk.get()); + auto const iend = chunk.end_reading(); + auto ip = chunk.begin_reading(); - _VTE_DEBUG_IF(VTE_DEBUG_IO) { - _vte_debug_hexdump("Incoming buffer", chunk->data, chunk->len); - } - - bytes_processed += chunk->len; - - auto const* ip = chunk->data; - auto const* iend = chunk->data + chunk->len; - - auto eos = bool{false}; - auto flush = bool{false}; - - start: - while (ip < iend || flush) { - switch (decoder.decode(&ip, flush)) { - case vte::base::ICUDecoder::Result::eSomething: { - auto rv = m_parser.feed(decoder.codepoint()); - if (G_UNLIKELY(rv < 0)) { -#ifdef VTE_DEBUG - uint32_t c = decoder.codepoint(); - char c_buf[7]; - g_snprintf(c_buf, sizeof(c_buf), "%lc", c); - char const* wp_str = g_unichar_isprint(c) ? c_buf : _vte_debug_sequence_to_string(c_buf, -1); - _vte_debug_print(VTE_DEBUG_PARSER, "Parser error on U+%04X [%s]!\n", - c, wp_str); + start: + while (ip < iend || flush) { + switch (decoder.decode(&ip, flush)) { + case vte::base::ICUDecoder::Result::eSomething: { + auto rv = m_parser.feed(decoder.codepoint()); + if (G_UNLIKELY(rv < 0)) { +#if VTE_DEBUG + uint32_t c = decoder.codepoint(); + char c_buf[7]; + g_snprintf(c_buf, sizeof(c_buf), "%lc", c); + char const* wp_str = g_unichar_isprint(c) ? c_buf : _vte_debug_sequence_to_string(c_buf, -1); + _vte_debug_print(VTE_DEBUG_PARSER, "Parser error on U+%04X [%s]!\n", + c, wp_str); #endif + break; + } + +#if VTE_DEBUG + if (rv != VTE_SEQ_NONE) + g_assert((bool)seq); +#endif + + _VTE_DEBUG_IF(VTE_DEBUG_PARSER) { + if (rv != VTE_SEQ_NONE) { + seq.print(); + } + } + + // FIXMEchpe this assumes that the only handler inserting + // a character is GRAPHIC, which isn't true (at least ICH, REP, SUB + // also do, and invalidate directly for now)... + + switch (rv) { + case VTE_SEQ_GRAPHIC: { + + context.pre_GRAPHIC(); + + // does insert_char(c, false) + GRAPHIC(seq); + _vte_debug_print(VTE_DEBUG_PARSER, + "Last graphic is now U+%04X %lc\n", + m_last_graphic_character, + g_unichar_isprint(m_last_graphic_character) ? m_last_graphic_character : 0xfffd); + + context.post_GRAPHIC(); + break; + } + + case VTE_SEQ_NONE: + case VTE_SEQ_IGNORE: + break; + + default: { + switch (seq.command()) { +#define _VTE_CMD_HANDLER(cmd) \ + case VTE_CMD_##cmd: cmd(seq); break; +#define _VTE_CMD_HANDLER_R(cmd) \ + case VTE_CMD_##cmd: \ + if (cmd(seq)) { \ + context.post_CMD(); \ + goto switched_data_syntax; \ + } \ break; - } - -#ifdef VTE_DEBUG - if (rv != VTE_SEQ_NONE) - g_assert((bool)seq); -#endif - - _VTE_DEBUG_IF(VTE_DEBUG_PARSER) { - if (rv != VTE_SEQ_NONE) { - seq.print(); - } - } - - // FIXMEchpe this assumes that the only handler inserting - // a character is GRAPHIC, which isn't true (at least ICH, REP, SUB - // also do, and invalidate directly for now)... - - switch (rv) { - case VTE_SEQ_GRAPHIC: { - - bbox_top = std::min(bbox_top, - m_screen->cursor.row); - - // does insert_char(c, false, false) - GRAPHIC(seq); +#define _VTE_CMD_HANDLER_NOP(cmd) +#include "parser-cmd-handlers.hh" +#undef _VTE_CMD_HANDLER +#undef _VTE_CMD_HANDLER_NOP +#undef _VTE_CMD_HANDLER_R + default: _vte_debug_print(VTE_DEBUG_PARSER, - "Last graphic is now U+%04X %lc\n", - m_last_graphic_character, - g_unichar_isprint(m_last_graphic_character) ? m_last_graphic_character : 0xfffd); - - if (m_line_wrapped) { - m_line_wrapped = false; - /* line wrapped, correct bbox */ - if (invalidated_text && - (m_screen->cursor.row > bbox_bottom + VTE_CELL_BBOX_SLACK || - m_screen->cursor.row < bbox_top - VTE_CELL_BBOX_SLACK)) { - invalidate_rows_and_context(bbox_top, bbox_bottom); - bbox_bottom = -G_MAXINT; - bbox_top = G_MAXINT; - } - bbox_top = std::min(bbox_top, - m_screen->cursor.row); - } - /* Add the cells over which we have moved to the region - * which we need to refresh for the user. */ - bbox_bottom = std::max(bbox_bottom, - m_screen->cursor.row); - invalidated_text = TRUE; - - /* We *don't* emit flush pending signals here. */ - modified = TRUE; - + "Unknown parser command %d\n", seq.command()); break; } - case VTE_SEQ_NONE: - case VTE_SEQ_IGNORE: - break; + m_last_graphic_character = 0; - default: { - switch (seq.command()) { -#define _VTE_CMD(cmd) case VTE_CMD_##cmd: cmd(seq); break; -#define _VTE_NOP(cmd) -#include "parser-cmd.hh" -#undef _VTE_CMD -#undef _VTE_NOP - default: - _vte_debug_print(VTE_DEBUG_PARSER, - "Unknown parser command %d\n", seq.command()); - break; - } - - m_last_graphic_character = 0; - - modified = TRUE; - - // FIXME m_screen may be != previous_screen, check for that! - - gboolean new_in_scroll_region = m_scrolling_restricted - && (m_screen->cursor.row >= (m_screen->insert_delta + m_scrolling_region.start)) - && (m_screen->cursor.row <= (m_screen->insert_delta + m_scrolling_region.end)); - - /* if we have moved greatly during the sequence handler, or moved - * into a scroll_region from outside it, restart the bbox. - */ - if (invalidated_text && - ((new_in_scroll_region && !in_scroll_region) || - (m_screen->cursor.row > bbox_bottom + VTE_CELL_BBOX_SLACK || - m_screen->cursor.row < bbox_top - VTE_CELL_BBOX_SLACK))) { - invalidate_rows_and_context(bbox_top, bbox_bottom); - invalidated_text = FALSE; - bbox_bottom = -G_MAXINT; - bbox_top = G_MAXINT; - } - - in_scroll_region = new_in_scroll_region; - - break; - } - } + context.post_CMD(); break; } - case vte::base::ICUDecoder::Result::eNothing: - flush = false; - break; - - case vte::base::ICUDecoder::Result::eError: - // FIXMEchpe do we need ++ip here? - decoder.reset(); - break; - } - } - - if (eos) { - /* Done processing the last chunk */ - m_eos_pending = true; break; } + case vte::base::ICUDecoder::Result::eNothing: + flush = false; + break; + + case vte::base::ICUDecoder::Result::eError: + // FIXMEchpe do we need ++ip here? + decoder.reset(); + break; - if (chunk->eos()) { - /* On EOS, we still need to flush the decoder before we can finish */ - eos = flush = true; - goto start; } } -#ifdef VTE_DEBUG - /* Some safety checks: ensure the visible parts of the buffer - * are all in the buffer. */ - g_assert_cmpint(m_screen->insert_delta, >=, _vte_ring_delta(m_screen->row_data)); + if (eos) { + /* Done processing the last chunk */ + m_eos_pending = true; + return; + } - /* The cursor shouldn't be above or below the addressable - * part of the display buffer. */ - g_assert_cmpint(m_screen->cursor.row, >=, m_screen->insert_delta); -#endif +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-label" + switched_data_syntax: +#pragma GCC diagnostic pop - if (modified) { - /* Keep the cursor on-screen if we scroll on output, or if - * we're currently at the bottom of the buffer. */ - update_insert_delta(); - if (m_scroll_on_output || bottom) { - maybe_scroll_to_bottom(); - } - /* Deselect the current selection if its contents are changed - * by this insertion. */ - if (!m_selection_resolved.empty()) { - //FIXMEchpe: this is atrocious - auto selection = get_selected_text(); - if ((selection == nullptr) || - (m_selection[VTE_SELECTION_PRIMARY] == nullptr) || - (strcmp(selection->str, m_selection[VTE_SELECTION_PRIMARY]->str) != 0)) { - deselect_all(); - } - if (selection) - g_string_free(selection, TRUE); - } - } + // Update start for data consumed + chunk.set_begin_reading(ip); - if (modified || (m_screen != previous_screen)) { - m_ringview.invalidate(); - /* Signal that the visible contents changed. */ - queue_contents_changed(); - } - - emit_pending_signals(); - - if (invalidated_text) { - invalidate_rows_and_context(bbox_top, bbox_bottom); - } - - if ((saved_cursor.col != m_screen->cursor.col) || - (saved_cursor.row != m_screen->cursor.row)) { - /* invalidate the old and new cursor positions */ - if (saved_cursor_visible) - invalidate_row(saved_cursor.row); - invalidate_cursor_once(); - check_cursor_blink(); - /* Signal that the cursor moved. */ - queue_cursor_moved(); - } else if ((saved_cursor_visible != m_modes_private.DEC_TEXT_CURSOR()) || - (saved_cursor_style != m_cursor_style)) { - invalidate_row(saved_cursor.row); - check_cursor_blink(); - } - - /* Tell the input method where the cursor is. */ - im_update_cursor(); - - /* After processing some data, do a hyperlink GC. The multiplier is totally arbitrary, feel free to fine tune. */ - _vte_ring_hyperlink_maybe_gc(m_screen->row_data, bytes_processed * 8); - - _vte_debug_print (VTE_DEBUG_WORK, ")"); - _vte_debug_print (VTE_DEBUG_IO, - "%" G_GSIZE_FORMAT " bytes in %" G_GSIZE_FORMAT " chunks left to process.\n", - m_input_bytes, - m_incoming_queue.size()); + if (chunk.eos() && ip == chunk.end_reading()) { + /* On EOS, we still need to flush the decoder before we can finish */ + eos = flush = true; + goto start; + } } #endif /* WITH_ICU */ bool Terminal::pty_io_read(int const fd, - GIOCondition const condition) + GIOCondition const condition, + int amount) { _vte_debug_print (VTE_DEBUG_WORK, "."); _vte_debug_print(VTE_DEBUG_IO, "::pty_io_read condition %02x\n", condition); @@ -3928,22 +4338,16 @@ Terminal::pty_io_read(int const fd, int rem, len; guint bytes, max_bytes; - /* Limit the amount read between updates, so as to - * 1. maintain fairness between multiple terminals; - * 2. prevent reading the entire output of a command in one - * pass, i.e. we always try to refresh the terminal ~40Hz. - * See time_process_incoming() where we estimate the - * maximum number of bytes we can read/process in between - * updates. - */ - max_bytes = m_active_terminals_link != nullptr ? - g_list_length(g_active_terminals) - 1 : 0; - if (max_bytes) { - max_bytes = m_max_input_bytes / max_bytes; - } else { - max_bytes = m_max_input_bytes; - } bytes = m_input_bytes; + if (G_LIKELY (amount < 0)) { + max_bytes = m_max_input_bytes; + } else { + /* 'amount' explicitly specified. Try to read this much on top + * of what we might already have read and not yet processed, + * but stop at EAGAIN or EOS. + * See https://gitlab.gnome.org/GNOME/vte/-/issues/2627 */ + max_bytes = bytes + amount; + } /* If possible, try adding more data to the chunk at the back of the queue */ if (!m_incoming_queue.empty()) @@ -3953,27 +4357,30 @@ Terminal::pty_io_read(int const fd, /* No chunk, chunk sealed or at least ¾ full? Get a new chunk */ if (!chunk || chunk->sealed() || - chunk->len >= 3 * chunk->capacity() / 4) { - m_incoming_queue.push(vte::base::Chunk::get()); - + chunk->capacity_writing() < chunk->capacity() / 4) { + m_incoming_queue.push(vte::base::Chunk::get(chunk)); chunk = m_incoming_queue.back().get(); } - rem = chunk->remaining_capacity(); - bp = chunk->data + chunk->len; + rem = chunk->capacity_writing(); + bp = chunk->begin_writing(); len = 0; do { +#if defined(TIOCPKT) /* We'd like to read (fd, bp, rem); but due to TIOCPKT mode * there's an extra input byte returned at the beginning. * We need to see what that byte is, but otherwise drop it * and write continuously to chunk->data. */ - char pkt_header; - char save = bp[-1]; + auto const save = bp[-1]; errno = 0; - int ret = read (fd, bp - 1, rem + 1); - pkt_header = bp[-1]; + ssize_t ret; + do { + ret = read(fd, bp - 1, rem + 1); + } while (ret == -1 && errno == EINTR); + auto const pkt_header = bp[-1]; bp[-1] = save; + switch (ret){ case -1: err = errno; @@ -4011,12 +4418,89 @@ Terminal::pty_io_read(int const fd, } break; } +#elif defined(__sun) && defined(HAVE_STROPTS_H) + static unsigned char ctl_s[128]; + struct strbuf ctlbuf, databuf; + int ret, flags = 0; + bool have_data = false; + + ctlbuf.buf = (caddr_t)ctl_s; + ctlbuf.maxlen = sizeof(ctl_s); + databuf.buf = (caddr_t)bp; + databuf.maxlen = rem; + + do { + ret = getmsg(fd, &ctlbuf, &databuf, &flags); + } while (ret == -1 && errno == EINTR); + if (ret == -1) { + err = errno; + goto out; + } else if (ctlbuf.len == 1) { + switch (ctl_s[0]) { + case M_IOCTL: + pty_termios_changed(); + break; + case M_STOP: + pty_scroll_lock_changed(true); + break; + case M_START: + pty_scroll_lock_changed(false); + break; + case M_DATA: + have_data = true; + break; + } + } else if (ctlbuf.len == -1 && databuf.len != -1) { + // MOREDATA + have_data = true; + } + + if (have_data) { + if (databuf.len == 0) { + eos = true; + goto out; + } + bp += databuf.len; + rem -= databuf.len; + len += databuf.len; + } +#else /* neither TIOCPKT nor STREAMS pty */ + ssize_t ret; + do { + ret = read(fd, bp, rem); + } while (ret == -1 && errno == EINTR); + switch (ret) { + case -1: + err = errno; + goto out; + case 0: + eos = true; + goto out; + default: + bp += ret; + rem -= ret; + len += ret; + break; + } +#endif /* */ } while (rem); out: - chunk->len += len; + chunk->add_size(len); bytes += len; } while (bytes < max_bytes && - chunk->len == chunk->capacity()); + // This means that either a read into a not-yet-¾-full + // chunk used up all the available capacity, so + // let's assume that we can read more and thus + // we'll get a new chunk in the loop above and + // continue on (see commit 49a0cdf11); or a short read + // occurred in which case we also keep looping, it's + // important in order to consume all the data after the + // child quits, see + // https://gitlab.gnome.org/GNOME/vte/-/issues/2627 + // Note also that on EOS or error, this condition + // is false (since there was capacity, but it wasn't + // used up). + chunk->capacity_writing() == 0); /* We may have an empty chunk at the back of the queue, but * that doesn't matter, we'll fill it next time. @@ -4049,7 +4533,9 @@ out: case EBUSY: /* do nothing */ break; default: - _vte_debug_print (VTE_DEBUG_IO, "Error reading from child: %m"); + auto errsv = vte::libc::ErrnoSaver{}; + _vte_debug_print (VTE_DEBUG_IO, "Error reading from child: %s", + g_strerror(errsv)); break; } @@ -4057,19 +4543,16 @@ out: _vte_debug_print(VTE_DEBUG_IO, "got PTY EOF\n"); /* Make a note of the EOS; but do not process it since there may be data - * to be processed first in the incomding queue. + * to be processed first in the incoming queue. */ if (!chunk || chunk->sealed()) { - m_incoming_queue.push(vte::base::Chunk::get()); + m_incoming_queue.push(vte::base::Chunk::get(chunk)); chunk = m_incoming_queue.back().get(); } chunk->set_sealed(); chunk->set_eos(); - /* Cancel wait timer */ - m_child_exited_eos_wait_timer.abort(); - /* Need to process the EOS */ if (!is_processing()) { add_process_timeout(this); @@ -4097,20 +4580,20 @@ Terminal::feed(std::string_view const& data, vte::base::Chunk* chunk = nullptr; if (!m_incoming_queue.empty()) { auto& achunk = m_incoming_queue.back(); - if (length < achunk->remaining_capacity() && !achunk->sealed()) + if (length < achunk->capacity_writing() && !achunk->sealed()) chunk = achunk.get(); } if (chunk == nullptr) { - m_incoming_queue.push(vte::base::Chunk::get()); + m_incoming_queue.push(vte::base::Chunk::get(nullptr)); chunk = m_incoming_queue.back().get(); } /* Break the incoming data into chunks. */ do { - auto rem = chunk->remaining_capacity(); + auto rem = chunk->capacity_writing(); auto len = std::min(length, rem); - memcpy (chunk->data + chunk->len, ptr, len); - chunk->len += len; + memcpy (chunk->begin_writing(), ptr, len); + chunk->add_size(len); length -= len; if (length == 0) break; @@ -4118,7 +4601,7 @@ Terminal::feed(std::string_view const& data, ptr += len; /* Get another chunk for the remaining data */ - m_incoming_queue.push(vte::base::Chunk::get()); + m_incoming_queue.push(vte::base::Chunk::get(chunk)); chunk = m_incoming_queue.back().get(); } while (true); @@ -4156,16 +4639,19 @@ Terminal::send_child(std::string_view const& data) /* Note that for backward compatibility, we need to emit the * ::commit signal even if there is no PTY. See issue vte#222. + * + * We use the primary data syntax to decide on the format. */ - switch (data_syntax()) { - case DataSyntax::eECMA48_UTF8: + switch (primary_data_syntax()) { + case DataSyntax::ECMA48_UTF8: emit_commit(data); if (pty()) _vte_byte_array_append(m_outgoing, data.data(), data.size()); break; - case DataSyntax::eECMA48_PCTERM: { +#if WITH_ICU + case DataSyntax::ECMA48_PCTERM: { auto converted = m_converter->convert(data); emit_commit(converted); @@ -4173,6 +4659,7 @@ Terminal::send_child(std::string_view const& data) _vte_byte_array_append(m_outgoing, converted.data(), converted.size()); break; } +#endif default: g_assert_not_reached(); @@ -4253,7 +4740,7 @@ Terminal::send(vte::parser::Sequence const& seq, */ send(builder, false, vte::parser::u8SequenceBuilder::Introducer::DEFAULT, - seq.terminator() == 0x7 ? vte::parser::u8SequenceBuilder::ST::BEL + seq.st() == 0x7 ? vte::parser::u8SequenceBuilder::ST::BEL : vte::parser::u8SequenceBuilder::ST::DEFAULT); } else { send(builder, false); @@ -4314,10 +4801,11 @@ Terminal::reply(vte::parser::Sequence const& seq, { char buf[128]; va_list vargs; + va_start(vargs, format); - auto len = g_vsnprintf(buf, sizeof(buf), format, vargs); + G_GNUC_UNUSED auto len = g_vsnprintf(buf, sizeof(buf), format, vargs); va_end(vargs); - g_assert_cmpint(len, <, sizeof(buf)); + vte_assert_cmpint(len, <, sizeof(buf)); vte::parser::ReplyBuilder builder{type, params}; builder.set_string(std::string{buf}); @@ -4338,7 +4826,7 @@ Terminal::im_commit(std::string_view const& str) /* Committed text was committed because the user pressed a key, so * we need to obey the scroll-on-keystroke setting. */ if (m_scroll_on_keystroke && m_input_enabled) { - maybe_scroll_to_bottom(); + scroll_to_bottom(); } } @@ -4360,7 +4848,7 @@ Terminal::im_preedit_reset() noexcept void Terminal::im_preedit_changed(std::string_view const& str, int cursorpos, - pango_attr_list_unique_type&& attrs) noexcept + vte::Freeable attrs) noexcept { /* Queue the area where the current preedit string is being displayed * for repainting. */ @@ -4376,6 +4864,10 @@ Terminal::im_preedit_changed(std::string_view const& str, /* And tell the input method where the cursor is on the screen */ im_update_cursor(); + + if (m_scroll_on_keystroke && m_input_enabled) { + scroll_to_bottom(); + } } bool @@ -4400,47 +4892,37 @@ Terminal::im_update_cursor() return; cairo_rectangle_int_t rect; - rect.x = m_screen->cursor.col * m_cell_width + m_padding.left + - get_preedit_width(false) * m_cell_width; + rect.x = m_screen->cursor.col * m_cell_width + m_border.left + + get_preedit_width(true) * m_cell_width; rect.width = m_cell_width; // FIXMEchpe: if columns > 1 ? - rect.y = row_to_pixel(m_screen->cursor.row) + m_padding.top; + rect.y = row_to_pixel(m_screen->cursor.row) + m_border.top; rect.height = m_cell_height; m_real_widget->im_set_cursor_location(&rect); } +bool +Terminal::set_style_border(GtkBorder const& border) noexcept +{ + auto const changing = memcmp(&border, &m_style_border, sizeof(border)) != 0; + m_style_border = border; + return changing; +} + +void +Terminal::set_cursor_aspect(float aspect) +{ + if (_vte_double_equal(aspect, m_cursor_aspect_ratio)) + return; + + m_cursor_aspect_ratio = aspect; + invalidate_cursor_once(); +} + void Terminal::widget_style_updated() { - set_font_desc(m_unscaled_font_desc.get()); - - auto context = gtk_widget_get_style_context(m_widget); - GtkBorder new_padding; - gtk_style_context_get_padding(context, gtk_style_context_get_state(context), - &new_padding); - if (memcmp(&new_padding, &m_padding, sizeof(GtkBorder)) != 0) { - _vte_debug_print(VTE_DEBUG_MISC | VTE_DEBUG_WIDGET_SIZE, - "Setting padding to (%d,%d,%d,%d)\n", - new_padding.left, new_padding.right, - new_padding.top, new_padding.bottom); - - m_padding = new_padding; - update_view_extents(); - gtk_widget_queue_resize(m_widget); - } else { - _vte_debug_print(VTE_DEBUG_MISC | VTE_DEBUG_WIDGET_SIZE, - "Keeping padding the same at (%d,%d,%d,%d)\n", - new_padding.left, new_padding.right, - new_padding.top, new_padding.bottom); - - } - - float aspect; - gtk_widget_style_get(m_widget, "cursor-aspect-ratio", &aspect, nullptr); - if (!_vte_double_equal(aspect, m_cursor_aspect_ratio)) { - m_cursor_aspect_ratio = aspect; - invalidate_cursor_once(); - } - + // FIXMEchpe: remove taking font info from the widget style + update_font_desc(); } void @@ -4449,8 +4931,9 @@ Terminal::add_cursor_timeout() if (m_cursor_blink_timer) return; /* already added */ - m_cursor_blink_time = 0; - m_cursor_blink_timer.schedule(m_cursor_blink_cycle, vte::glib::Timer::Priority::eLOW); + m_cursor_blink_time_ms = 0; + m_cursor_blink_timer.schedule(m_cursor_blink_cycle_ms, + vte::glib::Timer::Priority::eLOW); } void @@ -4485,81 +4968,26 @@ Terminal::beep() m_real_widget->beep(); } -guint -Terminal::translate_ctrlkey(GdkEventKey *event) -{ - guint keyval; - GdkKeymap *keymap; - unsigned int i; - - if (event->keyval < 128) - return event->keyval; - - keymap = gdk_keymap_get_for_display(gdk_window_get_display (event->window)); - - /* Try groups in order to find one mapping the key to ASCII */ - for (i = 0; i < 4; i++) { - GdkModifierType consumed_modifiers; - - gdk_keymap_translate_keyboard_state (keymap, - event->hardware_keycode, - (GdkModifierType)event->state, - i, - &keyval, NULL, NULL, &consumed_modifiers); - if (keyval < 128) { - _vte_debug_print (VTE_DEBUG_EVENTS, - "ctrl+Key, group=%d de-grouped into keyval=0x%x\n", - event->group, keyval); - return keyval; - } - } - - return event->keyval; -} - -void -Terminal::read_modifiers(GdkEvent *event) -{ - GdkKeymap *keymap; - GdkModifierType mods; - guint mask; - - /* Read the modifiers. */ - if (!gdk_event_get_state((GdkEvent*)event, &mods)) - return; - - keymap = gdk_keymap_get_for_display(gdk_window_get_display(((GdkEventAny*)event)->window)); - - gdk_keymap_add_virtual_modifiers (keymap, &mods); - - mask = (guint)mods; -#if 1 - /* HACK! Treat ALT as META; see bug #663779. */ - if (mask & GDK_MOD1_MASK) - mask |= VTE_META_MASK; -#endif - - m_modifiers = mask; -} - bool -Terminal::widget_key_press(GdkEventKey *event) +Terminal::widget_key_press(vte::platform::KeyEvent const& event) { + auto handled = false; char *normal = NULL; gsize normal_length = 0; struct termios tio; - gboolean scrolled = FALSE, steal = FALSE, modifier = FALSE, handled, - suppress_meta_esc = FALSE, add_modifiers = FALSE; + gboolean scrolled = FALSE, steal = FALSE, modifier = FALSE, + suppress_alt_esc = FALSE, add_modifiers = FALSE; guint keyval = 0; gunichar keychar = 0; char keybuf[VTE_UTF8_BPC]; /* If it's a keypress, record that we got the event, in case the * input method takes the event from us. */ - if (event->type == GDK_KEY_PRESS) { + // FIXMEchpe this is ::widget_key_press; what other event type could it even be!? + if (event.is_key_press()) { /* Store a copy of the key. */ - keyval = event->keyval; - read_modifiers((GdkEvent*)event); + keyval = event.keyval(); + m_modifiers = event.modifiers(); // FIXMEchpe? if (m_cursor_blink_timer) { @@ -4575,12 +5003,6 @@ Terminal::widget_key_press(GdkEventKey *event) set_pointer_autohidden(true); } - _vte_debug_print(VTE_DEBUG_EVENTS, - "Keypress, modifiers=0x%x, " - "keyval=0x%x, raw string=`%s'.\n", - m_modifiers, - keyval, event->string); - /* We steal many keypad keys here. */ if (!m_im_preedit_active) { switch (keyval) { @@ -4594,7 +5016,7 @@ Terminal::widget_key_press(GdkEventKey *event) default: break; } - if (m_modifiers & VTE_META_MASK) { + if (m_modifiers & VTE_ALT_MASK) { steal = TRUE; } switch (keyval) { @@ -4670,6 +5092,7 @@ Terminal::widget_key_press(GdkEventKey *event) /* Let the input method at this one first. */ if (!steal && m_input_enabled) { + // FIXMEchpe FIXMEgtk4: update IM position? im_set_cursor_location() if (m_real_widget->im_filter_keypress(event)) { _vte_debug_print(VTE_DEBUG_EVENTS, "Keypress taken by IM.\n"); @@ -4677,28 +5100,35 @@ Terminal::widget_key_press(GdkEventKey *event) } } + // Try showing the context menu + if (!handled && + (event.matches(GDK_KEY_Menu, 0) || + event.matches(GDK_KEY_F10, GDK_SHIFT_MASK))) { + _vte_debug_print(VTE_DEBUG_EVENTS, "Showing context menu\n"); + handled = widget()->show_context_menu(vte::platform::EventContext{event}); + } + /* Now figure out what to send to the child. */ - if ((event->type == GDK_KEY_PRESS) && !modifier) { - handled = FALSE; + if (event.is_key_press() && !modifier && !handled) { /* Map the key to a sequence name if we can. */ - switch (keyval) { + switch (event.keyval()) { case GDK_KEY_BackSpace: switch (m_backspace_binding) { case EraseMode::eASCII_BACKSPACE: normal = g_strdup(""); normal_length = 1; - suppress_meta_esc = FALSE; + suppress_alt_esc = FALSE; break; case EraseMode::eASCII_DELETE: normal = g_strdup(""); normal_length = 1; - suppress_meta_esc = FALSE; + suppress_alt_esc = FALSE; break; case EraseMode::eDELETE_SEQUENCE: normal = g_strdup("\e[3~"); normal_length = 4; add_modifiers = TRUE; - suppress_meta_esc = TRUE; + suppress_alt_esc = TRUE; break; case EraseMode::eTTY: if (pty() && @@ -4707,7 +5137,7 @@ Terminal::widget_key_press(GdkEventKey *event) normal = g_strdup_printf("%c", tio.c_cc[VERASE]); normal_length = 1; } - suppress_meta_esc = FALSE; + suppress_alt_esc = FALSE; break; case EraseMode::eAUTO: default: @@ -4725,9 +5155,9 @@ Terminal::widget_key_press(GdkEventKey *event) { normal = g_strdup(""); normal_length = 1; - suppress_meta_esc = FALSE; + suppress_alt_esc = FALSE; } - suppress_meta_esc = FALSE; + suppress_alt_esc = FALSE; break; } /* Toggle ^H vs ^? if Ctrl is pressed */ @@ -4757,7 +5187,7 @@ Terminal::widget_key_press(GdkEventKey *event) normal = g_strdup_printf("%c", tio.c_cc[VERASE]); normal_length = 1; } - suppress_meta_esc = FALSE; + suppress_alt_esc = FALSE; break; case EraseMode::eDELETE_SEQUENCE: case EraseMode::eAUTO: @@ -4769,7 +5199,7 @@ Terminal::widget_key_press(GdkEventKey *event) } handled = TRUE; /* FIXMEchpe: why? this overrides the FALSE set above? */ - suppress_meta_esc = TRUE; + suppress_alt_esc = TRUE; break; case GDK_KEY_KP_Insert: case GDK_KEY_Insert: @@ -4777,16 +5207,16 @@ Terminal::widget_key_press(GdkEventKey *event) if (m_modifiers & GDK_CONTROL_MASK) { emit_paste_clipboard(); handled = TRUE; - suppress_meta_esc = TRUE; + suppress_alt_esc = TRUE; } else { - widget_paste(GDK_SELECTION_PRIMARY); + widget()->clipboard_request_text(vte::platform::ClipboardType::PRIMARY); handled = TRUE; - suppress_meta_esc = TRUE; + suppress_alt_esc = TRUE; } } else if (m_modifiers & GDK_CONTROL_MASK) { emit_copy_clipboard(); handled = TRUE; - suppress_meta_esc = TRUE; + suppress_alt_esc = TRUE; } break; /* Keypad/motion keys. */ @@ -4798,7 +5228,7 @@ Terminal::widget_key_press(GdkEventKey *event) scroll_lines(-1); scrolled = TRUE; handled = TRUE; - suppress_meta_esc = TRUE; + suppress_alt_esc = TRUE; } break; case GDK_KEY_KP_Down: @@ -4809,9 +5239,31 @@ Terminal::widget_key_press(GdkEventKey *event) scroll_lines(1); scrolled = TRUE; handled = TRUE; - suppress_meta_esc = TRUE; + suppress_alt_esc = TRUE; } break; + case GDK_KEY_KP_Left: + case GDK_KEY_Left: + if (m_screen == &m_normal_screen && + m_modifiers & GDK_CONTROL_MASK && + m_modifiers & GDK_SHIFT_MASK) { + scroll_to_previous_prompt(); + scrolled = TRUE; + handled = TRUE; + suppress_alt_esc = TRUE; + } + break; + case GDK_KEY_KP_Right: + case GDK_KEY_Right: + if (m_screen == &m_normal_screen && + m_modifiers & GDK_CONTROL_MASK && + m_modifiers & GDK_SHIFT_MASK) { + scroll_to_next_prompt(); + scrolled = TRUE; + handled = TRUE; + suppress_alt_esc = TRUE; + } + break; case GDK_KEY_KP_Page_Up: case GDK_KEY_Page_Up: if (m_screen == &m_normal_screen && @@ -4819,7 +5271,7 @@ Terminal::widget_key_press(GdkEventKey *event) scroll_pages(-1); scrolled = TRUE; handled = TRUE; - suppress_meta_esc = TRUE; + suppress_alt_esc = TRUE; } break; case GDK_KEY_KP_Page_Down: @@ -4829,14 +5281,14 @@ Terminal::widget_key_press(GdkEventKey *event) scroll_pages(1); scrolled = TRUE; handled = TRUE; - suppress_meta_esc = TRUE; + suppress_alt_esc = TRUE; } break; case GDK_KEY_KP_Home: case GDK_KEY_Home: if (m_screen == &m_normal_screen && m_modifiers & GDK_SHIFT_MASK) { - maybe_scroll_to_top(); + scroll_to_top(); scrolled = TRUE; handled = TRUE; } @@ -4845,7 +5297,7 @@ Terminal::widget_key_press(GdkEventKey *event) case GDK_KEY_End: if (m_screen == &m_normal_screen && m_modifiers & GDK_SHIFT_MASK) { - maybe_scroll_to_bottom(); + scroll_to_bottom(); scrolled = TRUE; handled = TRUE; } @@ -4858,12 +5310,12 @@ Terminal::widget_key_press(GdkEventKey *event) case GDK_KEY_KP_Add: emit_increase_font_size(); handled = TRUE; - suppress_meta_esc = TRUE; + suppress_alt_esc = TRUE; break; case GDK_KEY_KP_Subtract: emit_decrease_font_size(); handled = TRUE; - suppress_meta_esc = TRUE; + suppress_alt_esc = TRUE; break; } } @@ -4926,15 +5378,15 @@ Terminal::widget_key_press(GdkEventKey *event) &normal, &normal_length); /* If we found something this way, suppress - * escape-on-meta. */ + * escape-on-alt. */ if (normal != NULL && normal_length > 0) { - suppress_meta_esc = TRUE; + suppress_alt_esc = TRUE; } } /* Shall we do this here or earlier? See bug 375112 and bug 589557 */ - if (m_modifiers & GDK_CONTROL_MASK) - keyval = translate_ctrlkey(event); + if (m_modifiers & GDK_CONTROL_MASK && widget()) + keyval = widget()->key_event_translate_ctrlkey(event); /* If we didn't manage to do anything, try to salvage a * printable string. */ @@ -4984,9 +5436,9 @@ Terminal::widget_key_press(GdkEventKey *event) &normal_length); } if (m_modes_private.XTERM_META_SENDS_ESCAPE() && - !suppress_meta_esc && + !suppress_alt_esc && (normal_length > 0) && - (m_modifiers & VTE_META_MASK)) { + (m_modifiers & VTE_ALT_MASK)) { feed_child(_VTE_CAP_ESC, 1); } if (normal_length > 0) { @@ -4997,17 +5449,18 @@ Terminal::widget_key_press(GdkEventKey *event) /* Keep the cursor on-screen. */ if (!scrolled && !modifier && m_scroll_on_keystroke && m_input_enabled) { - maybe_scroll_to_bottom(); + scroll_to_bottom(); } - return true; + handled = true; } - return false; + + return handled; } bool -Terminal::widget_key_release(GdkEventKey *event) +Terminal::widget_key_release(vte::platform::KeyEvent const& event) { - read_modifiers((GdkEvent*)event); + m_modifiers = event.modifiers(); if (m_input_enabled && m_real_widget->im_filter_keypress(event)) @@ -5016,6 +5469,17 @@ Terminal::widget_key_release(GdkEventKey *event) return false; } +#if VTE_GTK == 4 + +bool +Terminal::widget_key_modifiers(unsigned modifiers) +{ + m_modifiers = modifiers; + return true; +} + +#endif /* VTE_GTK == 4 */ + static const guint8 word_char_by_category[] = { [G_UNICODE_CONTROL] = 2, [G_UNICODE_FORMAT] = 2, @@ -5343,13 +5807,13 @@ Terminal::resolve_selection_endpoint(vte::grid::halfcoords const& rowcolhalf, bo if (!after) { /* Back up as far as we can go. */ while (row > 0 && - _vte_ring_contains (m_screen->row_data, row - 1) && + m_screen->row_data->contains(row - 1) && m_screen->row_data->is_soft_wrapped(row - 1)) { row--; } } else { /* Move forward as far as we can go. */ - while (_vte_ring_contains (m_screen->row_data, row) && + while (m_screen->row_data->contains(row) && m_screen->row_data->is_soft_wrapped(row)) { row++; } @@ -5442,11 +5906,13 @@ Terminal::modify_selection (vte::view::coords const& pos) /* Check if a cell is selected or not. BiDi: the coordinate is logical. */ bool -Terminal::cell_is_selected_log(vte::grid::column_t lcol, +Terminal::_cell_is_selected_log(vte::grid::column_t lcol, vte::grid::row_t row) const { - /* Our caller had to update the ringview (we can't do because we're const). */ - g_assert(m_ringview.is_updated()); + // Callers need to update the ringview. However, don't assert, just + // return out-of-view coords. FIXME: may want to throw instead + if (!m_ringview.is_updated()) + [[unlikely]] return false; if (m_selection_block_mode) { /* In block mode, make sure CJKs and TABs aren't cut in half. */ @@ -5471,8 +5937,10 @@ bool Terminal::cell_is_selected_vis(vte::grid::column_t vcol, vte::grid::row_t row) const { - /* Our caller had to update the ringview (we can't do because we're const). */ - g_assert(m_ringview.is_updated()); + // Callers need to update the ringview. However, don't assert, just + // return out-of-view coords. FIXME: may want to throw instead + if (!m_ringview.is_updated()) + [[unlikely]] return false; /* Convert to logical column. */ vte::base::BidiRow const* bidirow = m_ringview.get_bidirow(row); @@ -5482,74 +5950,18 @@ Terminal::cell_is_selected_vis(vte::grid::column_t vcol, } void -Terminal::widget_paste_received(char const* text) +Terminal::widget_paste(std::string_view const& data) { - gchar *paste, *p; - gsize run; - unsigned char c; - - if (text == nullptr) + if (!m_input_enabled) return; - gsize len = strlen(text); - _vte_debug_print(VTE_DEBUG_SELECTION, - "Pasting %" G_GSIZE_FORMAT " UTF-8 bytes.\n", len); - // FIXMEchpe this cannot happen ever - if (!g_utf8_validate(text, len, NULL)) { - g_warning("Paste not valid UTF-8, dropping."); - return; - } + feed_child(vte::terminal::pastify_string(data, + m_modes_private.XTERM_READLINE_BRACKETED_PASTE(), + false /* C1 */)); - /* Convert newlines to carriage returns, which more software - * is able to cope with (cough, pico, cough). - * Filter out control chars except HT, CR (even stricter than xterm). - * Also filter out C1 controls: U+0080 (0xC2 0x80) - U+009F (0xC2 0x9F). */ - p = paste = (gchar *) g_malloc(len + 1); - while (p != nullptr && text[0] != '\0') { - run = strcspn(text, "\x01\x02\x03\x04\x05\x06\x07" - "\x08\x0A\x0B\x0C\x0E\x0F" - "\x10\x11\x12\x13\x14\x15\x16\x17" - "\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F" - "\x7F\xC2"); - memcpy(p, text, run); - p += run; - text += run; - switch (text[0]) { - case '\x00': - break; - case '\x0A': - *p = '\x0D'; - p++; - text++; - break; - case '\xC2': - c = text[1]; - if (c >= 0x80 && c <= 0x9F) { - /* Skip both bytes of a C1 */ - text += 2; - } else { - /* Move along, nothing to see here */ - *p = '\xC2'; - p++; - text++; - } - break; - default: - /* Swallow this byte */ - text++; - break; - } - } - - bool const bracketed_paste = m_modes_private.XTERM_READLINE_BRACKETED_PASTE(); - // FIXMEchpe can we not hardcode C0 controls here? - if (bracketed_paste) - feed_child("\e[200~"sv); - // FIXMEchpe add a way to avoid the extra string copy done here - feed_child(paste, p - paste); - if (bracketed_paste) - feed_child("\e[201~"sv); - g_free(paste); + if (m_scroll_on_insert) { + scroll_to_bottom(); + } } bool @@ -5601,7 +6013,7 @@ Terminal::feed_mouse_event(vte::grid::coords const& rowcol /* confined */, if (m_modifiers & GDK_SHIFT_MASK) { cb |= 4; } - if (m_modifiers & VTE_META_MASK) { + if (m_modifiers & VTE_ALT_MASK) { cb |= 8; } if (m_modifiers & GDK_CONTROL_MASK) { @@ -5644,7 +6056,7 @@ Terminal::feed_focus_event_initial() /* We immediately send the terminal a focus event, since otherwise * it has no way to know the current status. */ - feed_focus_event(gtk_widget_has_focus(m_widget)); + feed_focus_event(m_has_focus); } void @@ -5666,31 +6078,28 @@ Terminal::maybe_feed_focus_event(bool in) */ bool Terminal::maybe_send_mouse_button(vte::grid::coords const& unconfined_rowcol, - GdkEventType event_type, - int event_button) + vte::platform::MouseEvent const& event) { - switch (event_type) { - case GDK_BUTTON_PRESS: - if (m_mouse_tracking_mode < MouseTrackingMode::eSEND_XY_ON_CLICK) { + switch (event.type()) { + case vte::platform::EventBase::Type::eMOUSE_PRESS: + if (m_mouse_tracking_mode < MouseTrackingMode::eSEND_XY_ON_CLICK) { return false; } break; - case GDK_BUTTON_RELEASE: { - if (m_mouse_tracking_mode < MouseTrackingMode::eSEND_XY_ON_BUTTON) { + case vte::platform::EventBase::Type::eMOUSE_RELEASE: + if (m_mouse_tracking_mode < MouseTrackingMode::eSEND_XY_ON_BUTTON) { return false; } break; - } default: return false; - break; } auto rowcol = confine_grid_coords(unconfined_rowcol); return feed_mouse_event(rowcol, - event_button, + event.button_value(), false /* not drag */, - event_type == GDK_BUTTON_RELEASE); + event.is_mouse_release()); } /* @@ -5705,7 +6114,7 @@ Terminal::maybe_send_mouse_button(vte::grid::coords const& unconfined_rowcol, */ bool Terminal::maybe_send_mouse_drag(vte::grid::coords const& unconfined_rowcol, - GdkEventType event_type) + vte::platform::MouseEvent const& event) { /* Need to ensure the ringview is updated. */ ringview_update(); @@ -5713,8 +6122,8 @@ Terminal::maybe_send_mouse_drag(vte::grid::coords const& unconfined_rowcol, auto rowcol = confine_grid_coords(unconfined_rowcol); /* First determine if we even want to send notification. */ - switch (event_type) { - case GDK_MOTION_NOTIFY: + switch (event.type()) { + case vte::platform::EventBase::Type::eMOUSE_MOTION: if (m_mouse_tracking_mode < MouseTrackingMode::eCELL_MOTION_TRACKING) return false; @@ -5733,7 +6142,6 @@ Terminal::maybe_send_mouse_drag(vte::grid::coords const& unconfined_rowcol, break; default: return false; - break; } /* As per xterm, report the leftmost pressed button - if any. */ @@ -5773,7 +6181,7 @@ Terminal::hyperlink_invalidate_and_get_bbox(vte::base::Ring::hyperlink_idx_t idx g_assert (idx != 0); for (row = first_row; row < end_row; row++) { - rowdata = _vte_ring_index(m_screen->row_data, row); + rowdata = m_screen->row_data->index(row); if (rowdata != NULL) { bool do_invalidate_row = false; for (col = 0; col < rowdata->len; col++) { @@ -5798,8 +6206,8 @@ Terminal::hyperlink_invalidate_and_get_bbox(vte::base::Ring::hyperlink_idx_t idx g_assert (top != LONG_MAX && bottom != -1 && left != LONG_MAX && right != -1); auto allocation = get_allocated_rect(); - bbox->x = allocation.x + m_padding.left + left * m_cell_width; - bbox->y = allocation.y + m_padding.top + row_to_pixel(top); + bbox->x = allocation.x + m_border.left + left * m_cell_width; + bbox->y = allocation.y + m_border.top + row_to_pixel(top); bbox->width = (right - left + 1) * m_cell_width; bbox->height = (bottom - top + 1) * m_cell_height; _vte_debug_print (VTE_DEBUG_HYPERLINK, @@ -5863,7 +6271,7 @@ Terminal::hyperlink_hilite_update() * the pseudo idx VTE_HYPERLINK_IDX_TARGET_IN_STREAM and now a real idx is allocated. * Plus, the ring's internal belief of the hovered hyperlink is also updated. */ if (do_check_hilite) { - m_hyperlink_hover_idx = _vte_ring_get_hyperlink_at_position(m_screen->row_data, rowcol.row(), rowcol.column(), true, &m_hyperlink_hover_uri); + m_hyperlink_hover_idx = m_screen->row_data->get_hyperlink_at_position(rowcol.row(), rowcol.column(), true, &m_hyperlink_hover_uri); } else { m_hyperlink_hover_idx = 0; m_hyperlink_hover_uri = nullptr; @@ -5931,6 +6339,8 @@ Terminal::invalidate_match_span() void Terminal::match_hilite_update() { + _vte_debug_print(VTE_DEBUG_EVENTS, "Match hilite update\n"); + /* Need to ensure the ringview is updated. */ ringview_update(); @@ -5944,10 +6354,6 @@ Terminal::match_hilite_update() vte::base::BidiRow const* bidirow = m_ringview.get_bidirow(confine_grid_row(row)); col = bidirow->vis2log(col); - _vte_debug_print(VTE_DEBUG_EVENTS, - "Match hilite update (%ld, %ld) -> %ld, %ld\n", - pos.x, pos.y, col, row); - /* Whether there's any chance we'd highlight something */ bool do_check_hilite = view_coords_visible(pos) && m_mouse_cursor_over_widget && @@ -5976,15 +6382,11 @@ Terminal::match_hilite_update() &end); /* Read the new locations. */ - if (start < m_match_attributes->len && - end < m_match_attributes->len) { + if (start < vte_char_attr_list_get_size(&m_match_attributes) && + end < vte_char_attr_list_get_size(&m_match_attributes)) { struct _VteCharAttributes const *sa, *ea; - sa = &g_array_index(m_match_attributes, - struct _VteCharAttributes, - start); - ea = &g_array_index(m_match_attributes, - struct _VteCharAttributes, - end); + sa = vte_char_attr_list_get(&m_match_attributes, start); + ea = vte_char_attr_list_get(&m_match_attributes, end); /* convert from inclusive to exclusive (a.k.a. boundary) ending, taking a possible last CJK character into account */ m_match_span = vte::grid::span(sa->row, sa->column, ea->row, ea->column + ea->columns); @@ -6005,101 +6407,45 @@ Terminal::match_hilite_update() apply_mouse_cursor(); } -/* Note that the clipboard has cleared. */ -static void -clipboard_clear_cb(GtkClipboard *clipboard, - gpointer user_data) -{ - auto that = reinterpret_cast(user_data); - that->widget_clipboard_cleared(clipboard); -} - void -Terminal::widget_clipboard_cleared(GtkClipboard *clipboard_) +Terminal::widget_clipboard_data_clear(vte::platform::Clipboard const& clipboard) { if (m_changing_selection) return; - if (clipboard_ == m_clipboard[VTE_SELECTION_PRIMARY]) { - if (m_selection_owned[VTE_SELECTION_PRIMARY] && + switch (clipboard.type()) { + case vte::platform::ClipboardType::PRIMARY: + if (m_selection_owned[vte::to_integral(vte::platform::ClipboardType::PRIMARY)] && !m_selection_resolved.empty()) { _vte_debug_print(VTE_DEBUG_SELECTION, "Lost selection.\n"); deselect_all(); } - m_selection_owned[VTE_SELECTION_PRIMARY] = false; - } else if (clipboard_ == m_clipboard[VTE_SELECTION_CLIPBOARD]) { - m_selection_owned[VTE_SELECTION_CLIPBOARD] = false; + + [[fallthrough]]; + case vte::platform::ClipboardType::CLIPBOARD: + m_selection_owned[vte::to_integral(clipboard.type())] = false; + break; } } -/* Supply the selected text to the clipboard. */ -static void -clipboard_copy_cb(GtkClipboard *clipboard, - GtkSelectionData *data, - guint info, - gpointer user_data) +std::optional +Terminal::widget_clipboard_data_get(vte::platform::Clipboard const& clipboard, + vte::platform::ClipboardFormat format) { - auto that = reinterpret_cast(user_data); - that->widget_clipboard_requested(clipboard, data, info); -} + auto const sel = vte::to_integral(clipboard.type()); -static char* -text_to_utf16_mozilla(GString* text, - gsize* len_ptr) -{ - /* Use g_convert() instead of g_utf8_to_utf16() since the former - * adds a BOM which Mozilla requires for text/html format. - */ - return g_convert(text->str, text->len, - "UTF-16", /* conver to UTF-16 */ - "UTF-8", /* convert from UTF-8 */ - nullptr /* out bytes_read */, - len_ptr, - nullptr); -} + if (m_selection[sel] == nullptr) + return std::nullopt; -void -Terminal::widget_clipboard_requested(GtkClipboard *target_clipboard, - GtkSelectionData *data, - guint info) -{ - for (auto sel = 0; sel < LAST_VTE_SELECTION; sel++) { - if (target_clipboard == m_clipboard[sel] && - m_selection[sel] != nullptr) { - _VTE_DEBUG_IF(VTE_DEBUG_SELECTION) { - int i; - g_printerr("Setting selection %d (%" G_GSIZE_FORMAT " UTF-8 bytes.) for target %s\n", - sel, - m_selection[sel]->len, - gdk_atom_name(gtk_selection_data_get_target(data))); - char const* selection_text = m_selection[sel]->str; - for (i = 0; selection_text[i] != '\0'; i++) { - g_printerr("0x%04x ", selection_text[i]); - if ((i & 0x7) == 0x7) - g_printerr("\n"); - } - g_printerr("\n"); - } - if (info == VTE_TARGET_TEXT) { - gtk_selection_data_set_text(data, - m_selection[sel]->str, - m_selection[sel]->len); - } else if (info == VTE_TARGET_HTML) { - gsize len; - auto selection = text_to_utf16_mozilla(m_selection[sel], &len); - // FIXMEchpe this makes yet another copy of the data... :( - if (selection) - gtk_selection_data_set(data, - gdk_atom_intern_static_string("text/html"), - 16, - (const guchar *)selection, - len); - g_free(selection); - } else { - /* Not reached */ - } - } - } + _VTE_DEBUG_IF(VTE_DEBUG_SELECTION) { + g_printerr("Setting selection %d (%" G_GSIZE_FORMAT " UTF-8 bytes.) for target %s\n", + sel, + m_selection[sel]->len, + format == vte::platform::ClipboardFormat::HTML ? "HTML" : "TEXT"); + _vte_debug_hexdump("Selection data", (uint8_t const*)m_selection[sel]->str, m_selection[sel]->len); + } + + return std::string_view{m_selection[sel]->str, m_selection[sel]->len}; } /* Convert the internal color code (either index or RGB) into RGB. */ @@ -6135,17 +6481,17 @@ Terminal::rgb_from_index(guint index, } } -GString* +void Terminal::get_text(vte::grid::row_t start_row, - vte::grid::column_t start_col, - vte::grid::row_t end_row, - vte::grid::column_t end_col, - bool block, - bool wrap, - GArray *attributes) + vte::grid::column_t start_col, + vte::grid::row_t end_row, + vte::grid::column_t end_col, + bool block, + bool preserve_empty, + GString *string, + VteCharAttrList *attributes) { const VteCell *pcell = NULL; - GString *string; struct _VteCharAttributes attr; vte::color::rgb fore, back; std::unique_ptr ringview; @@ -6153,9 +6499,11 @@ Terminal::get_text(vte::grid::row_t start_row, vte::grid::column_t vcol; if (attributes) - g_array_set_size (attributes, 0); + vte_char_attr_list_set_size (attributes, 0); + + if (string->len > 0) + g_string_truncate(string, 0); - string = g_string_new(NULL); memset(&attr, 0, sizeof(attr)); if (start_col < 0) @@ -6228,9 +6576,10 @@ Terminal::get_text(vte::grid::row_t start_row, /* Store the cell string */ if (pcell->c == 0) { /* Empty cells of nondefault background color are - * stored as NUL characters. Treat them as spaces, + * stored as NUL characters. Treat them as spaces + * unless 'preserve_empty' is set, * but make a note of the last occurrence. */ - g_string_append_c (string, ' '); + g_string_append_c (string, preserve_empty ? 0 : ' '); last_empty = string->len; last_emptycol = lcol; } else { @@ -6242,8 +6591,7 @@ Terminal::get_text(vte::grid::row_t start_row, /* If we added text to the string, record its * attributes, one per byte. */ if (attributes) { - vte_g_array_fill(attributes, - &attr, string->len); + vte_char_attr_list_fill(attributes, &attr, string->len); } } @@ -6273,7 +6621,7 @@ Terminal::get_text(vte::grid::row_t start_row, if (pcell == NULL) { g_string_truncate(string, last_nonempty); if (attributes) - g_array_set_size(attributes, string->len); + vte_char_attr_list_set_size(attributes, string->len); attr.column = last_nonemptycol; } } @@ -6284,7 +6632,7 @@ Terminal::get_text(vte::grid::row_t start_row, /* Add a newline in block mode. */ if (block) { - string = g_string_append_c(string, '\n'); + g_string_append_c(string, '\n'); } /* Else, if the last visible column on this line was in range and * not soft-wrapped, append a newline. */ @@ -6292,59 +6640,63 @@ Terminal::get_text(vte::grid::row_t start_row, /* If we didn't softwrap, add a newline. */ /* XXX need to clear row->soft_wrap on deletion! */ if (!m_screen->row_data->is_soft_wrapped(row)) { - string = g_string_append_c(string, '\n'); + g_string_append_c(string, '\n'); } } /* Make sure that the attributes array is as long as the string. */ if (attributes) { - vte_g_array_fill (attributes, &attr, string->len); + vte_char_attr_list_fill(attributes, &attr, string->len); } } /* Sanity check. */ if (attributes != nullptr) - g_assert_cmpuint(string->len, ==, attributes->len); - - return string; + vte_assert_cmpuint(string->len, ==, vte_char_attr_list_get_size(attributes)); } -GString* -Terminal::get_text_displayed(bool wrap, - GArray *attributes) +void +Terminal::get_text_displayed(GString *string, + VteCharAttrList* attributes) { - return get_text(first_displayed_row(), 0, - last_displayed_row() + 1, 0, - false /* block */, wrap, - attributes); + get_text(first_displayed_row(), 0, + last_displayed_row() + 1, 0, + false /* block */, + false /* preserve_empty */, + string, + attributes); } /* This is distinct from just using first/last_displayed_row since a11y * doesn't know about sub-row displays. */ -GString* -Terminal::get_text_displayed_a11y(bool wrap, - GArray *attributes) +void +Terminal::get_text_displayed_a11y(GString *string, + VteCharAttrList* attributes) { return get_text(m_screen->scroll_delta, 0, m_screen->scroll_delta + m_row_count - 1 + 1, 0, - false /* block */, wrap, + false /* block */, + false /* preserve_empty */, + string, attributes); } -GString* -Terminal::get_selected_text(GArray *attributes) +void +Terminal::get_selected_text(GString *string, + VteCharAttrList* attributes) { return get_text(m_selection_resolved.start_row(), m_selection_resolved.start_column(), m_selection_resolved.end_row(), m_selection_resolved.end_column(), m_selection_block_mode, - true /* wrap */, + false /* preserve_empty */, + string, attributes); } -#ifdef VTE_DEBUG +#if VTE_DEBUG unsigned int Terminal::checksum_area(vte::grid::row_t start_row, vte::grid::column_t start_col, @@ -6352,22 +6704,45 @@ Terminal::checksum_area(vte::grid::row_t start_row, vte::grid::column_t end_col) { unsigned int checksum = 0; + VteCharAttrList attributes; + const VteCellAttr *attr; - auto text = get_text(start_row, start_col, end_row, end_col, - true /* block */, false /* wrap */, - nullptr /* not interested in attributes */); - if (text == nullptr) + vte_char_attr_list_init(&attributes); + auto text = g_string_new(nullptr); + get_text(start_row, start_col, end_row, end_col, + true /* block */, + true /* preserve_empty */, + text, + &attributes); + if (text == nullptr) { + vte_char_attr_list_clear(&attributes); return checksum; + } + vte_assert_cmpuint(text->len, ==, vte_char_attr_list_get_size(&attributes)); char const* end = (char const*)text->str + text->len; for (char const *p = text->str; p < end; p = g_utf8_next_char(p)) { auto const c = g_utf8_get_char(p); if (c == '\n') continue; checksum += c; + attr = char_to_cell_attr(vte_char_attr_list_get(&attributes, p - text->str)); + + if (attr->invisible()) + checksum += 0x08; + if (attr->underline()) + checksum += 0x10; + if (attr->reverse()) + checksum += 0x20; + if (attr->blink()) + checksum += 0x40; + if (attr->bold()) + checksum += 0x80; } + vte_char_attr_list_clear(&attributes); g_string_free(text, true); + checksum = -checksum; return checksum & 0xffff; } #endif /* VTE_DEBUG */ @@ -6414,7 +6789,7 @@ Terminal::cellattr_to_html(VteCellAttr const* attr, } /* should be inside so that it inherits its color by default */ if (attr->underline() != 0) { - static const char styles[][7] = {"", "single", "double", "wavy"}; + static const char styles[][7] = {"", "solid", "double", "wavy", "dotted", "dashed"}; char *tag, *colorattr; if (deco != VTE_DEFAULT_FG) { @@ -6507,7 +6882,7 @@ Terminal::char_to_cell_attr(VteCharAttributes const* attr) const */ GString* Terminal::attributes_to_html(GString* text_string, - GArray* attrs) + VteCharAttrList* attrs) { GString *string; guint from,to; @@ -6516,7 +6891,7 @@ Terminal::attributes_to_html(GString* text_string, char const* text = text_string->str; auto len = text_string->len; - g_assert_cmpuint(len, ==, attrs->len); + vte_assert_cmpuint(len, ==, vte_char_attr_list_get_size(attrs)); /* Initial size fits perfectly if the text has no attributes and no * characters that need to be escaped @@ -6534,12 +6909,10 @@ Terminal::attributes_to_html(GString* text_string, g_string_append_c(string, '\n'); from = ++to; } else { - attr = char_to_cell_attr( - &g_array_index(attrs, VteCharAttributes, from)); + attr = char_to_cell_attr(vte_char_attr_list_get(attrs, from)); while (text[to] != '\0' && text[to] != '\n' && vte_terminal_cellattr_equal(attr, - char_to_cell_attr( - &g_array_index(attrs, VteCharAttributes, to)))) + char_to_cell_attr(vte_char_attr_list_get(attrs, to)))) { to++; } @@ -6556,119 +6929,53 @@ Terminal::attributes_to_html(GString* text_string, return string; } -static GtkTargetEntry* -targets_for_format(VteFormat format, - int *n_targets) -{ - switch (format) { - case VTE_FORMAT_TEXT: { - static GtkTargetEntry *text_targets = nullptr; - static int n_text_targets; - - if (text_targets == nullptr) { - auto list = gtk_target_list_new (nullptr, 0); - gtk_target_list_add_text_targets (list, VTE_TARGET_TEXT); - - text_targets = gtk_target_table_new_from_list (list, &n_text_targets); - gtk_target_list_unref (list); - } - - *n_targets = n_text_targets; - return text_targets; - } - - case VTE_FORMAT_HTML: { - static GtkTargetEntry *html_targets = nullptr; - static int n_html_targets; - - if (html_targets == nullptr) { - auto list = gtk_target_list_new (nullptr, 0); - gtk_target_list_add_text_targets (list, VTE_TARGET_TEXT); - gtk_target_list_add (list, - gdk_atom_intern_static_string("text/html"), - 0, - VTE_TARGET_HTML); - - html_targets = gtk_target_table_new_from_list (list, &n_html_targets); - gtk_target_list_unref (list); - } - - *n_targets = n_html_targets; - return html_targets; - } - default: - g_assert_not_reached(); - } -} - /* Place the selected text onto the clipboard. Do this asynchronously so that * we get notified when the selection we placed on the clipboard is replaced. */ void -Terminal::widget_copy(VteSelection sel, - VteFormat format) +Terminal::widget_copy(vte::platform::ClipboardType type, + vte::platform::ClipboardFormat format) { /* Only put HTML on the CLIPBOARD, not PRIMARY */ - g_assert(sel == VTE_SELECTION_CLIPBOARD || format == VTE_FORMAT_TEXT); + assert(type == vte::platform::ClipboardType::CLIPBOARD || + format == vte::platform::ClipboardFormat::TEXT); /* Chuck old selected text and retrieve the newly-selected text. */ - GArray *attributes = g_array_new(FALSE, TRUE, sizeof(struct _VteCharAttributes)); - auto selection = get_selected_text(attributes); + VteCharAttrList attributes; + vte_char_attr_list_init(&attributes); + GString *selection = g_string_new(nullptr); + get_selected_text(selection, &attributes); + auto const sel = vte::to_integral(type); if (m_selection[sel]) { g_string_free(m_selection[sel], TRUE); m_selection[sel] = nullptr; } if (selection == nullptr) { - g_array_free(attributes, TRUE); + vte_char_attr_list_clear(&attributes); m_selection_owned[sel] = false; return; } - if (format == VTE_FORMAT_HTML) { - m_selection[sel] = attributes_to_html(selection, attributes); + if (format == vte::platform::ClipboardFormat::HTML) { + m_selection[sel] = attributes_to_html(selection, &attributes); g_string_free(selection, TRUE); } else { m_selection[sel] = selection; } - g_array_free (attributes, TRUE); + vte_char_attr_list_clear(&attributes); /* Place the text on the clipboard. */ _vte_debug_print(VTE_DEBUG_SELECTION, "Assuming ownership of selection.\n"); - int n_targets; - auto targets = targets_for_format(format, &n_targets); - - m_changing_selection = true; - gtk_clipboard_set_with_data(m_clipboard[sel], - targets, - n_targets, - clipboard_copy_cb, - clipboard_clear_cb, - this); - m_changing_selection = false; - - gtk_clipboard_set_can_store(m_clipboard[sel], nullptr, 0); m_selection_owned[sel] = true; m_selection_format[sel] = format; -} -/* Paste from the given clipboard. */ -void -Terminal::widget_paste(GdkAtom board) -{ - if (!m_input_enabled) - return; - - auto clip = gtk_clipboard_get_for_display(gtk_widget_get_display(m_widget), board); - if (!clip) - return; - - _vte_debug_print(VTE_DEBUG_SELECTION, "Requesting clipboard contents.\n"); - - m_paste_request.request_text(clip, &Terminal::widget_paste_received, this); + m_changing_selection = true; + widget()->clipboard_offer_data(type, format); + m_changing_selection = false; } /* Confine coordinates into the visible area. Padding is already subtracted. */ @@ -6743,7 +7050,8 @@ Terminal::maybe_end_selection() /* Copy only if something was selected. */ if (!m_selection_resolved.empty() && m_selecting_had_delta) { - widget_copy(VTE_SELECTION_PRIMARY, VTE_FORMAT_TEXT); + widget_copy(vte::platform::ClipboardType::PRIMARY, + vte::platform::ClipboardFormat::TEXT); emit_selection_changed(); } stop_autoscroll(); /* Required before setting m_selecting to false, see #105. */ @@ -6773,19 +7081,20 @@ Terminal::select_all() m_selecting_had_delta = TRUE; - m_selection_resolved.set ({ _vte_ring_delta (m_screen->row_data), 0 }, - { _vte_ring_next (m_screen->row_data), 0 }); + m_selection_resolved.set ({ (vte::grid::row_t)m_screen->row_data->delta(), 0 }, + { (vte::grid::row_t)m_screen->row_data->next(), 0 }); _vte_debug_print(VTE_DEBUG_SELECTION, "Selecting *all* text.\n"); - widget_copy(VTE_SELECTION_PRIMARY, VTE_FORMAT_TEXT); + widget_copy(vte::platform::ClipboardType::PRIMARY, + vte::platform::ClipboardFormat::TEXT); emit_selection_changed(); invalidate_all(); } bool -Terminal::mouse_autoscroll_timer_callback() noexcept +Terminal::mouse_autoscroll_timer_callback() { bool extend = false; long x, y, xmax, ymax; @@ -6795,21 +7104,19 @@ Terminal::mouse_autoscroll_timer_callback() noexcept /* Provide an immediate effect for mouse wigglers. */ if (m_mouse_last_position.y < 0) { - if (m_vadjustment) { - /* Try to scroll up by one line. */ - adj = m_screen->scroll_delta - 1; - queue_adjustment_value_changed_clamped(adj); - extend = true; - } + /* Try to scroll up by one line. */ + adj = m_screen->scroll_delta - 1; + queue_adjustment_value_changed_clamped(adj); + extend = true; + _vte_debug_print(VTE_DEBUG_EVENTS, "Autoscrolling down.\n"); } if (m_mouse_last_position.y >= m_view_usable_extents.height()) { - if (m_vadjustment) { - /* Try to scroll up by one line. */ - adj = m_screen->scroll_delta + 1; - queue_adjustment_value_changed_clamped(adj); - extend = true; - } + /* Try to scroll up by one line. */ + adj = m_screen->scroll_delta + 1; + queue_adjustment_value_changed_clamped(adj); + extend = true; + _vte_debug_print(VTE_DEBUG_EVENTS, "Autoscrolling up.\n"); } if (extend) { @@ -6849,58 +7156,49 @@ Terminal::start_autoscroll() } bool -Terminal::widget_motion_notify(GdkEventMotion *event) +Terminal::widget_mouse_motion(vte::platform::MouseEvent const& event) { - bool handled = false; - /* Need to ensure the ringview is updated. */ ringview_update(); - GdkEvent* base_event = reinterpret_cast(event); - auto pos = view_coords_from_event(base_event); + auto pos = view_coords_from_event(event); auto rowcol = grid_coords_from_view_coords(pos); _vte_debug_print(VTE_DEBUG_EVENTS, - "Motion notify %s %s\n", - pos.to_string(), rowcol.to_string()); + "Motion grid %s\n", rowcol.to_string()); - read_modifiers(base_event); + m_modifiers = event.modifiers(); - switch (event->type) { - case GDK_MOTION_NOTIFY: - if (m_will_select_after_threshold) { - if (!gtk_drag_check_threshold (m_widget, - m_mouse_last_position.x, - m_mouse_last_position.y, - pos.x, pos.y)) - return true; + if (m_will_select_after_threshold) { + if (!gtk_drag_check_threshold(m_widget, + m_mouse_last_position.x, + m_mouse_last_position.y, + pos.x, pos.y)) + return true; - start_selection(vte::view::coords(m_mouse_last_position.x, m_mouse_last_position.y), - SelectionType::eCHAR); - } + start_selection(vte::view::coords(m_mouse_last_position.x, m_mouse_last_position.y), + SelectionType::eCHAR); + } - if (m_selecting && - (m_mouse_handled_buttons & 1) != 0) { - _vte_debug_print(VTE_DEBUG_EVENTS, "Mousing drag 1.\n"); - modify_selection(pos); + auto handled = bool{false}; + if (m_selecting && + (m_mouse_handled_buttons & 1) != 0) { + _vte_debug_print(VTE_DEBUG_EVENTS, "Mousing drag 1.\n"); + modify_selection(pos); - /* Start scrolling if we need to. */ - if (pos.y < 0 || pos.y >= m_view_usable_extents.height()) { - /* Give mouse wigglers something. */ - stop_autoscroll(); - mouse_autoscroll_timer_callback(); - start_autoscroll(); - } + /* Start scrolling if we need to. */ + if (pos.y < 0 || pos.y >= m_view_usable_extents.height()) { + /* Give mouse wigglers something. */ + stop_autoscroll(); + mouse_autoscroll_timer_callback(); + start_autoscroll(); + } - handled = true; - } + handled = true; + } - if (!handled && m_input_enabled) - maybe_send_mouse_drag(rowcol, event->type); - break; - default: - break; - } + if (!handled && m_input_enabled) + maybe_send_mouse_drag(rowcol, event); if (pos != m_mouse_last_position) { m_mouse_last_position = pos; @@ -6914,7 +7212,7 @@ Terminal::widget_motion_notify(GdkEventMotion *event) } bool -Terminal::widget_button_press(GdkEventButton *event) +Terminal::widget_mouse_press(vte::platform::MouseEvent const& event) { bool handled = false; gboolean start_selecting = FALSE, extend_selecting = FALSE; @@ -6922,27 +7220,32 @@ Terminal::widget_button_press(GdkEventButton *event) /* Need to ensure the ringview is updated. */ ringview_update(); - GdkEvent* base_event = reinterpret_cast(event); - auto pos = view_coords_from_event(base_event); + /* Reset IM (like GtkTextView does) here */ + if (event.press_count() == 1) + widget()->im_reset(); + + auto pos = view_coords_from_event(event); auto rowcol = grid_coords_from_view_coords(pos); - read_modifiers(base_event); + _vte_debug_print(VTE_DEBUG_EVENTS, + "Click gesture pressed button=%d at grid %s\n", + event.button_value(), + rowcol.to_string()); - switch (event->type) { - case GDK_BUTTON_PRESS: - _vte_debug_print(VTE_DEBUG_EVENTS, - "Button %d single-click at %s\n", - event->button, - rowcol.to_string()); + m_modifiers = event.modifiers(); + + switch (event.press_count()) { + case 1: /* single click */ /* Handle this event ourselves. */ - switch (event->button) { - case 1: + switch (event.button()) { + case vte::platform::MouseEvent::Button::eLEFT: _vte_debug_print(VTE_DEBUG_EVENTS, "Handling click ourselves.\n"); /* Grab focus. */ - if (!gtk_widget_has_focus(m_widget)) { - gtk_widget_grab_focus(m_widget); - } + if (!m_has_focus) + widget()->grab_focus(); + + // FIXMEchpe FIXMEgtk do im_reset() here /* If we're in event mode, and the user held down the * shift key, we start selecting. */ @@ -6978,42 +7281,51 @@ Terminal::widget_button_press(GdkEventButton *event) break; /* Paste if the user pressed shift or we're not sending events * to the app. */ - case 2: + case vte::platform::MouseEvent::Button::eMIDDLE: if ((m_modifiers & GDK_SHIFT_MASK) || m_mouse_tracking_mode == MouseTrackingMode::eNONE) { - gboolean do_paste; - - g_object_get (gtk_widget_get_settings(m_widget), - "gtk-enable-primary-paste", - &do_paste, nullptr); - if (do_paste) - widget_paste(GDK_SELECTION_PRIMARY); - handled = do_paste; + if (widget()->primary_paste_enabled()) { + widget()->clipboard_request_text(vte::platform::ClipboardType::PRIMARY); + handled = true; + } } break; - case 3: + case vte::platform::MouseEvent::Button::eRIGHT: + // If we get a Shift+Right-Clickt, don't send the + // event to the app but instead first try to popup + // the context menu + if ((m_modifiers & (GDK_SHIFT_MASK | + GDK_CONTROL_MASK | +#if VTE_GTK == 3 + GDK_MOD1_MASK | +#elif VTE_GTK == 4 + GDK_ALT_MASK | +#endif + GDK_SUPER_MASK | + GDK_HYPER_MASK | + GDK_META_MASK)) == GDK_SHIFT_MASK) { + _vte_debug_print(VTE_DEBUG_EVENTS, "Showing context menu\n"); + handled = widget()->show_context_menu(vte::platform::EventContext{event}); + } + break; default: break; } - if (event->button >= 1 && event->button <= 3) { + if (event.button_value() >= 1 && event.button_value() <= 3) { if (handled) - m_mouse_handled_buttons |= (1 << (event->button - 1)); + m_mouse_handled_buttons |= (1 << (event.button_value() - 1)); else - m_mouse_handled_buttons &= ~(1 << (event->button - 1)); + m_mouse_handled_buttons &= ~(1 << (event.button_value() - 1)); } /* If we haven't done anything yet, try sending the mouse * event to the app. */ if (handled == FALSE) { - handled = maybe_send_mouse_button(rowcol, event->type, event->button); + handled = maybe_send_mouse_button(rowcol, event); } break; - case GDK_2BUTTON_PRESS: - _vte_debug_print(VTE_DEBUG_EVENTS, - "Button %d double-click at %s\n", - event->button, - rowcol.to_string()); - switch (event->button) { - case 1: + case 2: /* double click */ + switch (event.button()) { + case vte::platform::MouseEvent::Button::eLEFT: if (m_will_select_after_threshold) { start_selection(pos, SelectionType::eCHAR); @@ -7025,37 +7337,66 @@ Terminal::widget_button_press(GdkEventButton *event) handled = true; } break; - case 2: - case 3: + case vte::platform::MouseEvent::Button::eMIDDLE: + case vte::platform::MouseEvent::Button::eRIGHT: default: break; } +#if VTE_GTK == 4 + /* If we haven't done anything yet, try sending the mouse + * event to the app. */ + if (handled == FALSE) { + handled = maybe_send_mouse_button(rowcol, event); + } +#endif break; - case GDK_3BUTTON_PRESS: - _vte_debug_print(VTE_DEBUG_EVENTS, - "Button %d triple-click at %s\n", - event->button, - rowcol.to_string()); - switch (event->button) { - case 1: + case 3: /* triple click */ + switch (event.button()) { + case vte::platform::MouseEvent::Button::eLEFT: if ((m_mouse_handled_buttons & 1) != 0) { start_selection(pos, SelectionType::eLINE); handled = true; } break; - case 2: - case 3: + case vte::platform::MouseEvent::Button::eMIDDLE: + case vte::platform::MouseEvent::Button::eRIGHT: default: break; } +#if VTE_GTK == 4 + /* If we haven't done anything yet, try sending the mouse + * event to the app. */ + if (handled == FALSE) { + handled = maybe_send_mouse_button(rowcol, event); + } +#endif default: break; } + // If we haven't handled the event yet, and it's a right button, + // with no modifiers, try showing the context menu. + if (!handled && + ((event.button() == vte::platform::MouseEvent::Button::eRIGHT) && + ((m_modifiers & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK)) == 0) && + (m_modifiers & (GDK_SHIFT_MASK | + GDK_CONTROL_MASK | +#if VTE_GTK == 3 + GDK_MOD1_MASK | +#elif VTE_GTK == 4 + GDK_ALT_MASK | +#endif + GDK_SUPER_MASK | + GDK_HYPER_MASK | + GDK_META_MASK)) == 0)) { + _vte_debug_print(VTE_DEBUG_EVENTS, "Showing context menu\n"); + handled = widget()->show_context_menu(vte::platform::EventContext{event}); + } + /* Save the pointer state for later use. */ - if (event->button >= 1 && event->button <= 3) - m_mouse_pressed_buttons |= (1 << (event->button - 1)); + if (event.button_value() >= 1 && event.button_value() <= 3) + m_mouse_pressed_buttons |= (1 << (event.button_value() - 1)); m_mouse_last_position = pos; @@ -7067,41 +7408,43 @@ Terminal::widget_button_press(GdkEventButton *event) } bool -Terminal::widget_button_release(GdkEventButton *event) +Terminal::widget_mouse_release(vte::platform::MouseEvent const& event) { bool handled = false; /* Need to ensure the ringview is updated. */ ringview_update(); - GdkEvent* base_event = reinterpret_cast(event); - auto pos = view_coords_from_event(base_event); + auto pos = view_coords_from_event(event); auto rowcol = grid_coords_from_view_coords(pos); + _vte_debug_print(VTE_DEBUG_EVENTS, + "Click gesture released button=%d at grid %s\n", + event.button_value(), rowcol.to_string()); + stop_autoscroll(); - read_modifiers(base_event); + m_modifiers = event.modifiers(); - switch (event->type) { - case GDK_BUTTON_RELEASE: - _vte_debug_print(VTE_DEBUG_EVENTS, - "Button %d released at %s\n", - event->button, rowcol.to_string()); - switch (event->button) { - case 1: + switch (event.type()) { + case vte::platform::EventBase::Type::eMOUSE_RELEASE: + switch (event.button()) { + case vte::platform::MouseEvent::Button::eLEFT: + if (!m_selecting) + m_real_widget->im_activate_osk(); if ((m_mouse_handled_buttons & 1) != 0) handled = maybe_end_selection(); break; - case 2: + case vte::platform::MouseEvent::Button::eMIDDLE: handled = (m_mouse_handled_buttons & 2) != 0; m_mouse_handled_buttons &= ~2; break; - case 3: + case vte::platform::MouseEvent::Button::eRIGHT: default: break; } if (!handled && m_input_enabled) { - handled = maybe_send_mouse_button(rowcol, event->type, event->button); + handled = maybe_send_mouse_button(rowcol, event); } break; default: @@ -7109,8 +7452,8 @@ Terminal::widget_button_release(GdkEventButton *event) } /* Save the pointer state for later use. */ - if (event->button >= 1 && event->button <= 3) - m_mouse_pressed_buttons &= ~(1 << (event->button - 1)); + if (event.button_value() >= 1 && event.button_value() <= 3) + m_mouse_pressed_buttons &= ~(1 << (event.button_value() - 1)); m_mouse_last_position = pos; m_will_select_after_threshold = false; @@ -7123,20 +7466,18 @@ Terminal::widget_button_release(GdkEventButton *event) } void -Terminal::widget_focus_in(GdkEventFocus *event) +Terminal::widget_focus_in() { - _vte_debug_print(VTE_DEBUG_EVENTS, "Focus in.\n"); + m_has_focus = true; - gtk_widget_grab_focus(m_widget); - - /* Read the keyboard modifiers, though they're probably garbage. */ - read_modifiers((GdkEvent*)event); +#if VTE_GTK == 3 + widget()->grab_focus(); +#endif /* We only have an IM context when we're realized, and there's not much * point to painting the cursor if we don't have a window. */ if (widget_realized()) { m_cursor_blink_state = TRUE; - m_has_focus = TRUE; /* If blinking gets enabled now, do a full repaint. * If blinking gets disabled, only repaint if there's blinking stuff present @@ -7155,13 +7496,8 @@ Terminal::widget_focus_in(GdkEventFocus *event) } void -Terminal::widget_focus_out(GdkEventFocus *event) +Terminal::widget_focus_out() { - _vte_debug_print(VTE_DEBUG_EVENTS, "Focus out.\n"); - - /* Read the keyboard modifiers, though they're probably garbage. */ - read_modifiers((GdkEvent*)event); - /* We only have an IM context when we're realized, and there's not much * point to painting ourselves if we don't have a window. */ if (widget_realized()) { @@ -7189,12 +7525,14 @@ Terminal::widget_focus_out(GdkEventFocus *event) } void -Terminal::widget_enter(GdkEventCrossing *event) +Terminal::widget_mouse_enter(vte::platform::MouseEvent const& event) { - GdkEvent* base_event = reinterpret_cast(event); - auto pos = view_coords_from_event(base_event); + auto pos = view_coords_from_event(event); - _vte_debug_print(VTE_DEBUG_EVENTS, "Enter at %s\n", pos.to_string()); + // FIXMEchpe read event modifiers here + // FIXMEgtk4 or maybe not since there is no event to read them from on gtk4 + + _vte_debug_print(VTE_DEBUG_EVENTS, "Motion enter at grid %s\n", pos.to_string()); m_mouse_cursor_over_widget = TRUE; m_mouse_last_position = pos; @@ -7206,34 +7544,31 @@ Terminal::widget_enter(GdkEventCrossing *event) } void -Terminal::widget_leave(GdkEventCrossing *event) +Terminal::widget_mouse_leave(vte::platform::MouseEvent const& event) { - GdkEvent* base_event = reinterpret_cast(event); - auto pos = view_coords_from_event(base_event); +#if VTE_GTK == 3 + auto pos = view_coords_from_event(event); - _vte_debug_print(VTE_DEBUG_EVENTS, "Leave at %s\n", pos.to_string()); + // FIXMEchpe read event modifiers here + // FIXMEgtk4 or maybe not since there is no event to read them from on gtk4 + + _vte_debug_print(VTE_DEBUG_EVENTS, "Motion leave at grid %s\n", pos.to_string()); m_mouse_cursor_over_widget = FALSE; m_mouse_last_position = pos; +#elif VTE_GTK == 4 + // FIXMEgtk4 !!! + m_mouse_cursor_over_widget = false; + // keep m_mouse_last_position since the event here has no position +#endif + + // FIXMEchpe: also set m_mouse_scroll_delta to 0 here? hyperlink_hilite_update(); match_hilite_update(); apply_mouse_cursor(); } -static G_GNUC_UNUSED inline const char * -visibility_state_str(GdkVisibilityState state) -{ - switch(state){ - case GDK_VISIBILITY_FULLY_OBSCURED: - return "fully-obscured"; - case GDK_VISIBILITY_UNOBSCURED: - return "unobscured"; - default: - return "partial"; - } -} - /* Apply the changed metrics, and queue a resize if need be. * * The cell's height consists of 4 parts, from top to bottom: @@ -7245,7 +7580,9 @@ visibility_state_str(GdkVisibilityState state) * here. Similarly, increase cell_width_scale to get nonzero char_spacing.{left,right}. */ void -Terminal::apply_font_metrics(int cell_width, +Terminal::apply_font_metrics(int cell_width_unscaled, + int cell_height_unscaled, + int cell_width, int cell_height, int char_ascent, int char_descent, @@ -7255,6 +7592,8 @@ Terminal::apply_font_metrics(int cell_width, bool resize = false, cresize = false; /* Sanity check for broken font changes. */ + cell_width_unscaled = MAX(cell_width_unscaled, 1); + cell_height_unscaled = MAX(cell_height_unscaled, 2); cell_width = MAX(cell_width, 1); cell_height = MAX(cell_height, 2); char_ascent = MAX(char_ascent, 1); @@ -7264,6 +7603,14 @@ Terminal::apply_font_metrics(int cell_width, char_height = char_ascent + char_descent; /* Change settings, and keep track of when we've changed anything. */ + if (cell_width_unscaled != m_cell_width_unscaled) { + cresize = true; + m_cell_width_unscaled = cell_width_unscaled; + } + if (cell_height_unscaled != m_cell_height_unscaled) { + cresize = true; + m_cell_height_unscaled = cell_height_unscaled; + } if (cell_width != m_cell_width) { resize = cresize = true; m_cell_width = cell_width; @@ -7303,12 +7650,25 @@ Terminal::apply_font_metrics(int cell_width, /* Queue a resize if anything's changed. */ if (resize) { if (widget_realized()) { +#if VTE_GTK == 3 gtk_widget_queue_resize_no_redraw(m_widget); +#elif VTE_GTK == 4 + gtk_widget_queue_resize(m_widget); // FIXMEgtk4? +#endif } } /* Emit a signal that the font changed. */ if (cresize) { - emit_char_size_changed(m_cell_width, m_cell_height); + if (pty()) { + /* Update pixel size of PTY. */ + pty()->set_size(m_row_count, + m_column_count, + m_cell_height_unscaled, + m_cell_width_unscaled); + } + + if (widget()) + widget()->notify_char_size_changed(m_cell_width, m_cell_height); } /* Repaint. */ invalidate_all(); @@ -7317,26 +7677,48 @@ Terminal::apply_font_metrics(int cell_width, void Terminal::ensure_font() { - if (m_draw != NULL) { + { /* Load default fonts, if no fonts have been loaded. */ if (!m_has_fonts) { - set_font_desc(m_unscaled_font_desc.get()); + update_font_desc(); } if (m_fontdirty) { + int cell_width_unscaled, cell_height_unscaled; int cell_width, cell_height; int char_ascent, char_descent; GtkBorder char_spacing; m_fontdirty = false; - _vte_draw_set_text_font (m_draw, + + if (!_vte_double_equal(m_font_scale, 1.)) { + m_draw.set_text_font( + m_widget, + m_unscaled_font_desc.get(), + m_font_options.get(), + m_cell_width_scale, + m_cell_height_scale); + m_draw.get_text_metrics( + &cell_width_unscaled, &cell_height_unscaled, + nullptr, nullptr, nullptr); + } + + m_draw.set_text_font( m_widget, m_fontdesc.get(), + m_font_options.get(), m_cell_width_scale, m_cell_height_scale); - _vte_draw_get_text_metrics (m_draw, + m_draw.get_text_metrics( &cell_width, &cell_height, &char_ascent, &char_descent, &char_spacing); - apply_font_metrics(cell_width, cell_height, + + if (_vte_double_equal(m_font_scale, 1.)) { + cell_width_unscaled = cell_width; + cell_height_unscaled = cell_height; + } + + apply_font_metrics(cell_width_unscaled, cell_height_unscaled, + cell_width, cell_height, char_ascent, char_descent, char_spacing); } @@ -7350,16 +7732,16 @@ Terminal::update_font() if (!m_unscaled_font_desc) return; - auto desc = pango_font_description_copy(m_unscaled_font_desc.get()); + auto desc = vte::take_freeable(pango_font_description_copy(m_unscaled_font_desc.get())); - double size = pango_font_description_get_size(desc); - if (pango_font_description_get_size_is_absolute(desc)) { - pango_font_description_set_absolute_size(desc, m_font_scale * size); + double size = pango_font_description_get_size(desc.get()); + if (pango_font_description_get_size_is_absolute(desc.get())) { + pango_font_description_set_absolute_size(desc.get(), m_font_scale * size); } else { - pango_font_description_set_size(desc, m_font_scale * size); + pango_font_description_set_size(desc.get(), m_font_scale * size); } - m_fontdesc = {desc, &pango_font_description_free}; + m_fontdesc = std::move(desc); m_fontdirty = true; m_has_fonts = true; @@ -7380,24 +7762,44 @@ Terminal::update_font() * and columns. The font scale is applied to the specified font. */ bool -Terminal::set_font_desc(PangoFontDescription const* font_desc) +Terminal::set_font_desc(vte::Freeable font_desc) { - /* Create an owned font description. */ - PangoFontDescription *desc; + m_api_font_desc = std::move(font_desc); + return update_font_desc(); +} + +bool +Terminal::update_font_desc() +{ +#if VTE_GTK == 3 + auto desc = vte::Freeable{}; auto context = gtk_widget_get_style_context(m_widget); gtk_style_context_save(context); gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL); - gtk_style_context_get(context, GTK_STATE_FLAG_NORMAL, "font", &desc, nullptr); + gtk_style_context_get(context, GTK_STATE_FLAG_NORMAL, "font", + &vte::get_freeable(desc), + nullptr); gtk_style_context_restore(context); +#elif VTE_GTK == 4 + // FIXMEgtk4 + // This is how gtktextview does it, but the APIs are private... thanks, gtk4! + // desc = vte::take_freeable + // (gtk_css_style_get_pango_font(gtk_style_context_lookup_style(context)); - pango_font_description_set_family_static (desc, "monospace"); - if (font_desc != nullptr) { - pango_font_description_merge (desc, font_desc, TRUE); + auto context = gtk_widget_get_pango_context(m_widget); + auto context_desc = pango_context_get_font_description(context); + auto desc = vte::take_freeable(pango_font_description_copy(context_desc)); +#endif /* VTE_GTK */ + + pango_font_description_set_family_static(desc.get(), "monospace"); + + if (m_api_font_desc) { + pango_font_description_merge(desc.get(), m_api_font_desc.get(), true); _VTE_DEBUG_IF(VTE_DEBUG_MISC) { if (desc) { char *tmp; - tmp = pango_font_description_to_string(desc); + tmp = pango_font_description_to_string(desc.get()); g_printerr("Using pango font \"%s\".\n", tmp); g_free (tmp); } @@ -7407,8 +7809,32 @@ Terminal::set_font_desc(PangoFontDescription const* font_desc) "Using default monospace font.\n"); } + /* Sanitise the font description. + * + * Gravity makes no sense in vte. + * Style needs to be default, and weight needs to allow bolding, + * since those are set via SGR attributes. + * + * Allowing weight <= medium does not absolutely guarantee that bold + * actually is bolder than the specified weight, but should be good enough + * until we can check that the actually loaded bold font is weightier than + * the normal font (FIXME!). + * + * As a special exception, allow any weight if bold-is-bright is enabled. + */ + pango_font_description_unset_fields(desc.get(), + PangoFontMask(PANGO_FONT_MASK_GRAVITY | + PANGO_FONT_MASK_STYLE)); + + auto const max_weight = 1000 - VTE_FONT_WEIGHT_BOLDENING; + if ((pango_font_description_get_set_fields(desc.get()) & PANGO_FONT_MASK_WEIGHT) && + (pango_font_description_get_weight(desc.get()) > max_weight) && + !m_bold_is_bright) { + pango_font_description_set_weight(desc.get(), PangoWeight(max_weight)); + } + bool const same_desc = m_unscaled_font_desc && - pango_font_description_equal(m_unscaled_font_desc.get(), desc); + pango_font_description_equal(m_unscaled_font_desc.get(), desc.get()); /* Note that we proceed to recreating the font even if the description * are the same. This is because maybe screen @@ -7416,7 +7842,7 @@ Terminal::set_font_desc(PangoFontDescription const* font_desc) * detected at font creation time and respected. */ - m_unscaled_font_desc = {desc, &pango_font_description_free}; + m_unscaled_font_desc = std::move(desc); update_font(); return !same_desc; @@ -7435,6 +7861,22 @@ Terminal::set_font_scale(gdouble scale) return true; } +bool +Terminal::set_font_options(vte::Freeable font_options) +{ + if ((m_font_options && + font_options && + cairo_font_options_equal(m_font_options.get(), font_options.get())) || + (!m_font_options && + !font_options)) + return false; + + m_font_options = std::move(font_options); + update_font(); + + return true; +} + bool Terminal::set_cell_width_scale(double scale) { @@ -7499,13 +7941,13 @@ Terminal::screen_set_size(VteScreen *screen_, long old_rows, bool do_rewrap) { - VteRing *ring = screen_->row_data; + auto ring = screen_->row_data; VteVisualPosition cursor_saved_absolute; VteVisualPosition below_viewport; VteVisualPosition below_current_paragraph; VteVisualPosition selection_start, selection_end; VteVisualPosition *markers[7]; - gboolean was_scrolled_to_top = ((long) ceil(screen_->scroll_delta) == _vte_ring_delta(ring)); + gboolean was_scrolled_to_top = (long(ceil(screen_->scroll_delta)) == long(ring->delta())); gboolean was_scrolled_to_bottom = ((long) screen_->scroll_delta == screen_->insert_delta); glong old_top_lines; double new_scroll_delta; @@ -7528,8 +7970,8 @@ Terminal::screen_set_size(VteScreen *screen_, below_viewport.row = screen_->scroll_delta + old_rows; below_viewport.col = 0; below_current_paragraph.row = screen_->cursor.row + 1; - while (below_current_paragraph.row < _vte_ring_next(ring) - && _vte_ring_index(ring, below_current_paragraph.row - 1)->attr.soft_wrapped) { + while (below_current_paragraph.row < long(ring->next()) + && ring->index(below_current_paragraph.row - 1)->attr.soft_wrapped) { below_current_paragraph.row++; } below_current_paragraph.col = 0; @@ -7550,17 +7992,17 @@ Terminal::screen_set_size(VteScreen *screen_, old_top_lines = below_current_paragraph.row - screen_->insert_delta; if (do_rewrap && old_columns != m_column_count) - _vte_ring_rewrap(ring, m_column_count, markers); + ring->rewrap(m_column_count, markers); - if (_vte_ring_length(ring) > m_row_count) { + if (long(ring->length()) > m_row_count) { /* The content won't fit without scrollbars. Before figuring out the position, we might need to drop some lines from the ring if the cursor is not at the bottom, as XTerm does. See bug 708213. This code is really tricky, see ../doc/rewrap.txt for details! */ glong new_top_lines, drop1, drop2, drop3, drop; - screen_->insert_delta = _vte_ring_next(ring) - m_row_count; + screen_->insert_delta = ring->next() - m_row_count; new_top_lines = below_current_paragraph.row - screen_->insert_delta; - drop1 = _vte_ring_length(ring) - m_row_count; - drop2 = _vte_ring_next(ring) - below_current_paragraph.row; + drop1 = ring->length() - m_row_count; + drop2 = ring->next() - below_current_paragraph.row; drop3 = old_top_lines - new_top_lines; drop = MIN(MIN(drop1, drop2), drop3); if (drop > 0) { @@ -7568,7 +8010,7 @@ Terminal::screen_set_size(VteScreen *screen_, _vte_debug_print(VTE_DEBUG_RESIZE, "Dropping %ld [== MIN(%ld, %ld, %ld)] rows at the bottom\n", drop, drop1, drop2, drop3); - _vte_ring_shrink(ring, new_ring_next - _vte_ring_delta(ring)); + ring->shrink(new_ring_next - ring->delta()); } } @@ -7578,15 +8020,15 @@ Terminal::screen_set_size(VteScreen *screen_, } /* Figure out new insert and scroll deltas */ - if (_vte_ring_length(ring) <= m_row_count) { + if (long(ring->length()) <= m_row_count) { /* Everything fits without scrollbars. Align at top. */ - screen_->insert_delta = _vte_ring_delta(ring); + screen_->insert_delta = ring->delta(); new_scroll_delta = screen_->insert_delta; _vte_debug_print(VTE_DEBUG_RESIZE, "Everything fits without scrollbars\n"); } else { /* Scrollbar required. Can't afford unused lines at bottom. */ - screen_->insert_delta = _vte_ring_next(ring) - m_row_count; + screen_->insert_delta = ring->next() - m_row_count; if (was_scrolled_to_bottom) { /* Was scrolled to bottom, keep this way. */ new_scroll_delta = screen_->insert_delta; @@ -7594,7 +8036,7 @@ Terminal::screen_set_size(VteScreen *screen_, "Scroll to bottom\n"); } else if (was_scrolled_to_top) { /* Was scrolled to top, keep this way. Not sure if this special case is worth it. */ - new_scroll_delta = _vte_ring_delta(ring); + new_scroll_delta = ring->delta(); _vte_debug_print(VTE_DEBUG_RESIZE, "Scroll to top\n"); } else { @@ -7634,10 +8076,13 @@ Terminal::screen_set_size(VteScreen *screen_, void Terminal::set_size(long columns, - long rows) + long rows, + bool allocating) { glong old_columns, old_rows; + update_insert_delta(); /* addresses https://gitlab.gnome.org/GNOME/vte/-/issues/2258 */ + _vte_debug_print(VTE_DEBUG_RESIZE, "Setting PTY size to %ldx%ld.\n", columns, rows); @@ -7649,8 +8094,12 @@ Terminal::set_size(long columns, /* Try to set the terminal size, and read it back, * in case something went awry. */ - if (!pty()->set_size(rows, columns)) - g_warning("Failed to set PTY size: %m\n"); + if (!pty()->set_size(rows, + columns, + m_cell_height_unscaled, + m_cell_width_unscaled)) { + // nothing we can do here + } refresh_size(); } else { m_row_count = rows; @@ -7658,10 +8107,11 @@ Terminal::set_size(long columns, m_tabstops.resize(columns); } if (old_rows != m_row_count || old_columns != m_column_count) { - m_scrolling_restricted = FALSE; + reset_scrolling_region(); + m_modes_private.set_DEC_ORIGIN(false); - _vte_ring_set_visible_rows(m_normal_screen.row_data, m_row_count); - _vte_ring_set_visible_rows(m_alternate_screen.row_data, m_row_count); + m_normal_screen.row_data->set_visible_rows(m_row_count); + m_alternate_screen.row_data->set_visible_rows(m_row_count); /* Resize the normal screen and (if rewrapping is enabled) rewrap it even if the alternate screen is visible: bug 415277 */ screen_set_size(&m_normal_screen, old_columns, old_rows, m_rewrap_on_resize); @@ -7673,75 +8123,58 @@ Terminal::set_size(long columns, set_scrollback_lines(m_scrollback_lines); /* Ensure the cursor is valid */ - m_screen->cursor.row = CLAMP (m_screen->cursor.row, - _vte_ring_delta (m_screen->row_data), - MAX (_vte_ring_delta (m_screen->row_data), - _vte_ring_next (m_screen->row_data) - 1)); + m_screen->cursor.row = std::clamp(m_screen->cursor.row, + long(m_screen->row_data->delta()), + std::max(long(m_screen->row_data->delta()), + long(m_screen->row_data->next()) - 1)); adjust_adjustments_full(); +#if VTE_GTK == 3 gtk_widget_queue_resize_no_redraw(m_widget); +#elif VTE_GTK == 4 + if (!allocating) + gtk_widget_queue_resize(m_widget); // FIXMEgtk4? +#endif + + m_ringview.invalidate(); + invalidate_all(); + match_contents_clear(); /* Our visible text changed. */ emit_text_modified(); } } -/* Redraw the widget. */ -static void -vte_terminal_vadjustment_value_changed_cb(vte::terminal::Terminal* that) -{ - that->vadjustment_value_changed(); -} - void -Terminal::vadjustment_value_changed() +Terminal::set_scroll_value(double value) { - /* Read the new adjustment value and save the difference. */ - auto const adj = gtk_adjustment_get_value(m_vadjustment.get()); - double dy = adj - m_screen->scroll_delta; - m_screen->scroll_delta = adj; + auto const lower = m_screen->row_data->delta(); + auto const upper_minus_row_count = m_screen->insert_delta; - /* Sanity checks. */ + value = std::clamp(value, + double(lower), + double(std::max(long(lower), upper_minus_row_count))); + + /* Save the difference. */ + auto const dy = value - m_screen->scroll_delta; + + m_screen->scroll_delta = value; + + /* Sanity checks. */ if (G_UNLIKELY(!widget_realized())) return; /* FIXME: do this check in pixel space */ - if (!_vte_double_equal(dy, 0)) { - _vte_debug_print(VTE_DEBUG_ADJ, - "Scrolling by %f\n", dy); + if (!_vte_double_equal(dy, 0)) { + _vte_debug_print(VTE_DEBUG_ADJ, + "Scrolling by %f\n", dy); + invalidate_all(); match_contents_clear(); - emit_text_scrolled(dy); - queue_contents_changed(); - } else { - _vte_debug_print(VTE_DEBUG_ADJ, "Not scrolling\n"); - } -} - -void -Terminal::widget_set_vadjustment(vte::glib::RefPtr&& adjustment) -{ - if (adjustment && adjustment == m_vadjustment) - return; - if (!adjustment && m_vadjustment) - return; - - if (m_vadjustment) { - /* Disconnect our signal handlers from this object. */ - g_signal_handlers_disconnect_by_func(m_vadjustment.get(), - (void*)vte_terminal_vadjustment_value_changed_cb, - this); - } - - if (adjustment) - m_vadjustment = std::move(adjustment); - else - m_vadjustment = vte::glib::make_ref_sink(GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 0, 0, 0, 0))); - - /* We care about the offset, not the top or bottom. */ - g_signal_connect_swapped(m_vadjustment.get(), - "value-changed", - G_CALLBACK(vte_terminal_vadjustment_value_changed_cb), - this); + emit_text_scrolled(dy); + queue_contents_changed(); + } else { + _vte_debug_print(VTE_DEBUG_ADJ, "Not scrolling\n"); + } } Terminal::Terminal(vte::platform::Widget* w, @@ -7753,23 +8186,20 @@ Terminal::Terminal(vte::platform::Widget* w, m_alternate_screen(VTE_ROWS, false), m_screen(&m_normal_screen) { - widget_set_vadjustment({}); - /* Inits allocation to 1x1 @ -1,-1 */ cairo_rectangle_int_t allocation; gtk_widget_get_allocation(m_widget, &allocation); set_allocated_rect(allocation); - int i; - GdkDisplay *display; - /* NOTE! We allocated zeroed memory, just fill in non-zero stuff. */ // FIXMEegmont make this store row indices only, maybe convert to a bitmap +#if VTE_GTK == 3 m_update_rects = g_array_sized_new(FALSE /* zero terminated */, FALSE /* clear */, sizeof(cairo_rectangle_int_t), 32 /* preallocated size */); +#endif /* Set up dummy metrics, value != 0 to avoid division by 0 */ // FIXMEchpe this is wrong. These values must not be used before @@ -7778,7 +8208,6 @@ Terminal::Terminal(vte::platform::Widget* w, m_cell_height = 1; m_char_ascent = 1; m_char_descent = 1; - m_char_padding = {0, 0, 0, 0}; m_line_thickness = 1; m_underline_position = 1; m_double_underline_position = 1; @@ -7787,11 +8216,16 @@ Terminal::Terminal(vte::platform::Widget* w, m_overline_position = 1; m_regex_underline_position = 1; + vte_char_attr_list_init(&m_search_attrs); + vte_char_attr_list_init(&m_match_attributes); + + m_match_contents = g_string_new(nullptr); + reset_default_attributes(true); /* Set up the desired palette. */ set_colors_default(); - for (i = 0; i < VTE_PALETTE_SIZE; i++) + for (auto i = 0; i < VTE_PALETTE_SIZE; i++) m_palette[i].sources[VTE_COLOR_SOURCE_ESCAPE].is_set = FALSE; /* Set up I/O encodings. */ @@ -7799,18 +8233,12 @@ Terminal::Terminal(vte::platform::Widget* w, /* Setting the terminal type and size requires the PTY master to * be set up properly first. */ - set_size(VTE_COLUMNS, VTE_ROWS); + set_size(VTE_COLUMNS, VTE_ROWS, false); + reset_scrolling_region(); /* Default is 0, forces update in vte_terminal_set_scrollback_lines */ set_scrollback_lines(VTE_SCROLLBACK_INIT); - /* Selection info. */ - display = gtk_widget_get_display(m_widget); - m_clipboard[VTE_SELECTION_PRIMARY] = gtk_clipboard_get_for_display(display, GDK_SELECTION_PRIMARY); - m_clipboard[VTE_SELECTION_CLIPBOARD] = gtk_clipboard_get_for_display(display, GDK_SELECTION_CLIPBOARD); - m_selection_owned[VTE_SELECTION_PRIMARY] = false; - m_selection_owned[VTE_SELECTION_CLIPBOARD] = false; - /* Initialize the saved cursor. */ save_cursor(&m_normal_screen); save_cursor(&m_alternate_screen); @@ -7819,21 +8247,18 @@ Terminal::Terminal(vte::platform::Widget* w, m_match_span.clear(); // FIXMEchpe unnecessary match_hilite_clear(); // FIXMEchpe unnecessary - /* Rendering data */ - m_draw = _vte_draw_new(); - /* Word chars */ set_word_char_exceptions(WORD_CHAR_EXCEPTIONS_DEFAULT); update_view_extents(); -#ifdef VTE_DEBUG +#if VTE_DEBUG if (g_test_flags != 0) { feed("\e[1m\e[31mWARNING:\e[39m Test mode enabled. This is insecure!\e[0m\n\e[G"sv, false); } #endif -#ifndef WITH_GNUTLS +#if !WITH_GNUTLS std::string str{"\e[1m\e[31m"}; str.append(_("WARNING")); str.append(":\e[39m "); @@ -7845,32 +8270,20 @@ Terminal::Terminal(vte::platform::Widget* w, } void -Terminal::widget_constructed() +Terminal::widget_measure_width(int *minimum_width, + int *natural_width) noexcept { - /* Set the style as early as possible, before GTK+ starts - * invoking various callbacks. This is needed in order to - * compute the initial geometry correctly in presence of - * non-default padding, see bug 787710. */ - widget_style_updated(); -} - -void -Terminal::widget_get_preferred_width(int *minimum_width, - int *natural_width) -{ - _vte_debug_print(VTE_DEBUG_LIFECYCLE, "vte_terminal_get_preferred_width()\n"); - ensure_font(); refresh_size(); - *minimum_width = m_cell_width * 2; /* have room for a CJK or emoji */ + *minimum_width = m_cell_width * VTE_MIN_GRID_WIDTH; *natural_width = m_cell_width * m_column_count; - *minimum_width += m_padding.left + - m_padding.right; - *natural_width += m_padding.left + - m_padding.right; +#if VTE_GTK == 3 + *minimum_width += m_style_border.left + m_style_border.right; + *natural_width += m_style_border.left + m_style_border.right; +#endif _vte_debug_print(VTE_DEBUG_WIDGET_SIZE, "[Terminal %p] minimum_width=%d, natural_width=%d for %ldx%ld cells (padding %d,%d;%d,%d).\n", @@ -7878,26 +8291,25 @@ Terminal::widget_get_preferred_width(int *minimum_width, *minimum_width, *natural_width, m_column_count, m_row_count, - m_padding.left, m_padding.right, m_padding.top, m_padding.bottom); + m_style_border.left, m_style_border.right, + m_style_border.top, m_style_border.bottom); } void -Terminal::widget_get_preferred_height(int *minimum_height, - int *natural_height) +Terminal::widget_measure_height(int *minimum_height, + int *natural_height) noexcept { - _vte_debug_print(VTE_DEBUG_LIFECYCLE, "vte_terminal_get_preferred_height()\n"); - ensure_font(); refresh_size(); - *minimum_height = m_cell_height * 1; + *minimum_height = m_cell_height * VTE_MIN_GRID_HEIGHT; *natural_height = m_cell_height * m_row_count; - *minimum_height += m_padding.top + - m_padding.bottom; - *natural_height += m_padding.top + - m_padding.bottom; +#if VTE_GTK == 3 + *minimum_height += m_style_border.top + m_style_border.bottom; + *natural_height += m_style_border.top + m_style_border.bottom; +#endif _vte_debug_print(VTE_DEBUG_WIDGET_SIZE, "[Terminal %p] minimum_height=%d, natural_height=%d for %ldx%ld cells (padding %d,%d;%d,%d).\n", @@ -7905,60 +8317,116 @@ Terminal::widget_get_preferred_height(int *minimum_height, *minimum_height, *natural_height, m_column_count, m_row_count, - m_padding.left, m_padding.right, m_padding.top, m_padding.bottom); + m_style_border.left, m_style_border.right, + m_style_border.top, m_style_border.bottom); } void -Terminal::widget_size_allocate(GtkAllocation *allocation) +Terminal::widget_size_allocate( +#if VTE_GTK == 3 + int allocation_x, + int allocation_y, +#endif /* VTE_GTK == 3 */ + int allocation_width, + int allocation_height, + int allocation_baseline, + Alignment xalign, + Alignment yalign, + bool xfill, + bool yfill) noexcept { - glong width, height; - gboolean repaint, update_scrollback; + /* On gtk3, the style border is part of the widget's allocation; + * on gtk4, is is not. + */ +#if VTE_GTK == 3 + auto width = allocation_width - (m_style_border.left + m_style_border.right); + auto height = allocation_height - (m_style_border.top + m_style_border.bottom); +#elif VTE_GTK == 4 + auto width = allocation_width; + auto height = allocation_height; +#endif - _vte_debug_print(VTE_DEBUG_LIFECYCLE, - "vte_terminal_size_allocate()\n"); + auto grid_width = int(width / m_cell_width); + auto grid_height = int(height / m_cell_height); - width = (allocation->width - (m_padding.left + m_padding.right)) / - m_cell_width; - height = (allocation->height - (m_padding.top + m_padding.bottom)) / - m_cell_height; - width = MAX(width, 1); - height = MAX(height, 1); + width -= grid_width * m_cell_width; + height -= grid_height * m_cell_height; + /* assert(width >= 0); assert(height >= 0); */ - _vte_debug_print(VTE_DEBUG_WIDGET_SIZE, - "[Terminal %p] Sizing window to %dx%d (%ldx%ld, padding %d,%d;%d,%d).\n", - m_terminal, - allocation->width, allocation->height, - width, height, - m_padding.left, m_padding.right, m_padding.top, m_padding.bottom); + /* Distribute extra space according to alignment */ + /* xfill doesn't have any effect */ + auto lpad = 0, rpad = 0; + switch (xalign) { + default: + case Alignment::START: lpad = 0; rpad = width; break; + case Alignment::CENTRE: lpad = width / 2; rpad = width - lpad; break; + case Alignment::END: lpad = width; rpad = 0; break; + } - auto current_allocation = get_allocated_rect(); + /* yfill is only applied to START */ + auto tpad = 0, bpad = 0; + switch (yalign) { + default: + case Alignment::START: + tpad = 0; + bpad = yfill ? 0 : height; + break; - repaint = current_allocation.width != allocation->width - || current_allocation.height != allocation->height; - update_scrollback = current_allocation.height != allocation->height; + case Alignment::CENTRE: tpad = height / 2; bpad = height - tpad; break; + case Alignment::END: tpad = height; bpad = 0; break; + } - /* Set our allocation to match the structure. */ - gtk_widget_set_allocation(m_widget, allocation); - set_allocated_rect(*allocation); +#if VTE_GTK == 3 + m_border = m_style_border; +#elif VTE_GTK == 4 + m_border = {}; +#endif - if (width != m_column_count - || height != m_row_count - || update_scrollback) - { - /* Set the size of the pseudo-terminal. */ - set_size(width, height); + m_border.left += lpad; + m_border.right += rpad; + m_border.top += tpad; + m_border.bottom += bpad; + + /* The minimum size returned from ::widget_measure_width/height() + * is VTE_MIN_GRID_WIDTH/HEIGHT, but let's be extra safe. + */ + grid_width = std::max(grid_width, VTE_MIN_GRID_WIDTH); + grid_height = std::max(grid_height, VTE_MIN_GRID_HEIGHT); + + _vte_debug_print(VTE_DEBUG_WIDGET_SIZE, + "[Terminal %p] Sizing window to %dx%d (%dx%d, effective border %d,%d;%d,%d).\n", + m_terminal, + allocation_width, allocation_height, + grid_width, grid_height, + m_border.left, m_border.right, m_border.top, m_border.bottom); + + auto const current_allocation = get_allocated_rect(); + auto const repaint = current_allocation.width != allocation_width || + current_allocation.height != allocation_height; + /* FIXME: remove this */ + auto const update_scrollback = current_allocation.height != allocation_height; + +#if VTE_GTK == 3 + set_allocated_rect({allocation_x, allocation_y, allocation_width, allocation_height}); +#elif VTE_GTK == 4 + set_allocated_rect({0, 0, allocation_width, allocation_height}); +#endif + + if (grid_width != m_column_count || + grid_height != m_row_count || + update_scrollback) { + /* Set the size of the pseudo-terminal. */ + set_size(grid_width, grid_height, true); /* Notify viewers that the contents have changed. */ queue_contents_changed(); } - if (widget_realized()) { - /* Force a repaint if we were resized. */ - if (repaint) { - reset_update_rects(); - invalidate_all(); - } - } + /* Force a repaint if we were resized. */ + if (widget_realized() && repaint) { + reset_update_rects(); + invalidate_all(); + } } void @@ -7977,19 +8445,10 @@ Terminal::widget_unrealize() m_im_preedit_active = FALSE; - /* Clean up our draw structure. */ - if (m_draw != NULL) { - _vte_draw_free(m_draw); - m_draw = NULL; - } + /* Drop font cache */ + m_draw.clear_font_cache(); m_fontdirty = true; - /* Unmap the widget if it hasn't been already. */ - // FIXMEchpe this can't happen - if (gtk_widget_get_mapped(m_widget)) { - gtk_widget_unmap(m_widget); - } - /* Remove the cursor blink timeout function. */ remove_cursor_timeout(); @@ -7997,7 +8456,7 @@ Terminal::widget_unrealize() m_text_blink_timer.abort(); /* Cancel any pending redraws. */ - remove_update_timeout(this); + stop_processing(this); /* Cancel any pending signals */ m_contents_changed_pending = FALSE; @@ -8008,20 +8467,40 @@ Terminal::widget_unrealize() /* Clear modifiers. */ m_modifiers = 0; + + /* Free any selected text, but if we currently own the selection, + * throw the text onto the clipboard without an owner so that it + * doesn't just disappear. */ + for (auto sel_type : {vte::platform::ClipboardType::CLIPBOARD, + vte::platform::ClipboardType::PRIMARY}) { + auto const sel = vte::to_integral(sel_type); + if (m_selection[sel] != nullptr) { + if (m_selection_owned[sel]) { + // FIXMEchpe we should check m_selection_format[sel] + // and also put text/html on if it's HTML format + widget()->clipboard_set_text(sel_type, + m_selection[sel]->str, + m_selection[sel]->len); + } + g_string_free(m_selection[sel], TRUE); + m_selection[sel] = nullptr; + } + } } void Terminal::set_blink_settings(bool blink, - int blink_time, - int blink_timeout) noexcept + int blink_time_ms, + int blink_timeout_ms) noexcept { - m_cursor_blink_cycle = blink_time / 2; - m_cursor_blink_timeout = blink_timeout; + m_cursor_blinks = m_cursor_blinks_system = blink; + m_cursor_blink_cycle_ms = std::max(blink_time_ms / 2, VTE_MIN_CURSOR_BLINK_CYCLE); + m_cursor_blink_timeout_ms = std::max(blink_timeout_ms, VTE_MIN_CURSOR_BLINK_TIMEOUT); update_cursor_blinks(); /* Misuse gtk-cursor-blink-time for text blinking as well. This might change in the future. */ - m_text_blink_cycle = m_cursor_blink_cycle; + m_text_blink_cycle_ms = m_cursor_blink_cycle_ms; if (m_text_blink_timer) { /* The current phase might have changed, and an already installed * timer to blink might fire too late. So remove the timer and @@ -8036,51 +8515,23 @@ Terminal::~Terminal() /* Make sure not to change selection while in destruction. See issue vte#89. */ m_changing_selection = true; - int sel; - terminate_child(); unset_pty(false /* don't notify widget */); - remove_update_timeout(this); /* Stop processing input. */ stop_processing(this); - /* Free the draw structure. */ - if (m_draw != NULL) { - _vte_draw_free(m_draw); - } - /* Free matching data. */ - if (m_match_attributes != NULL) { - g_array_free(m_match_attributes, TRUE); - } - g_free(m_match_contents); + vte_char_attr_list_clear(&m_match_attributes); + g_string_free(m_match_contents, TRUE); - if (m_search_attrs) - g_array_free (m_search_attrs, TRUE); + vte_char_attr_list_clear(&m_search_attrs); /* Disconnect from autoscroll requests. */ stop_autoscroll(); /* Cancel pending adjustment change notifications. */ - m_adjustment_changed_pending = FALSE; - - /* Free any selected text, but if we currently own the selection, - * throw the text onto the clipboard without an owner so that it - * doesn't just disappear. */ - for (sel = VTE_SELECTION_PRIMARY; sel < LAST_VTE_SELECTION; sel++) { - if (m_selection[sel] != nullptr) { - if (m_selection_owned[sel]) { - // FIXMEchpe we should check m_selection_format[sel] - // and also put text/html on if it's VTE_FORMAT_HTML - gtk_clipboard_set_text(m_clipboard[sel], - m_selection[sel]->str, - m_selection[sel]->len); - } - g_string_free(m_selection[sel], TRUE); - m_selection[sel] = nullptr; - } - } + m_adjustment_changed_pending = false; /* Stop listening for child-exited signals. */ if (m_reaper) { @@ -8094,16 +8545,10 @@ Terminal::~Terminal() _vte_byte_array_free(m_outgoing); m_outgoing = nullptr; - /* Free public-facing data. */ - if (m_vadjustment) { - /* Disconnect our signal handlers from this object. */ - g_signal_handlers_disconnect_by_func(m_vadjustment.get(), - (void*)vte_terminal_vadjustment_value_changed_cb, - this); - } - +#if VTE_GTK == 3 /* Update rects */ g_array_free(m_update_rects, TRUE /* free segment */); +#endif } void @@ -8111,26 +8556,15 @@ Terminal::widget_realize() { m_mouse_cursor_over_widget = FALSE; /* We'll receive an enter_notify_event if the window appears under the cursor. */ - /* Create rendering data if this is a re-realise */ - if (m_draw == NULL) { - m_draw = _vte_draw_new(); - } - m_im_preedit_active = FALSE; /* Clear modifiers. */ m_modifiers = 0; + // Create the font cache ensure_font(); } -static inline void -swap (guint *a, guint *b) -{ - guint tmp; - tmp = *a, *a = *b, *b = tmp; -} - // FIXMEchpe probably @attr should be passed by ref void Terminal::determine_colors(VteCellAttr const* attr, @@ -8148,7 +8582,7 @@ Terminal::determine_colors(VteCellAttr const* attr, vte_color_triple_get(attr->colors(), &fore, &back, &deco); /* Reverse-mode switches default fore and back colors */ - if (G_UNLIKELY (m_modes_private.DEC_REVERSE_IMAGE())) { + if (m_modes_private.DEC_REVERSE_IMAGE()) [[unlikely]] { if (fore == VTE_DEFAULT_FG) fore = VTE_DEFAULT_BG; if (back == VTE_DEFAULT_BG) @@ -8156,7 +8590,7 @@ Terminal::determine_colors(VteCellAttr const* attr, } /* Handle bold by using set bold color or brightening */ - if (attr->bold()) { + if (attr->bold()) [[unlikely]] { if (fore == VTE_DEFAULT_FG && get_color(VTE_BOLD_FG) != NULL) { fore = VTE_BOLD_FG; } else if (m_bold_is_bright && @@ -8169,17 +8603,18 @@ Terminal::determine_colors(VteCellAttr const* attr, /* Handle dim colors. Only apply to palette colors, dimming direct RGB wouldn't make sense. * Apply to the foreground color only, but do this before handling reverse/highlight so that * those can be used to dim the background instead. */ - if (attr->dim() && !(fore & VTE_RGB_COLOR_MASK(8, 8, 8))) { + if (attr->dim() && !(fore & VTE_RGB_COLOR_MASK(8, 8, 8))) [[unlikely]] { fore |= VTE_DIM_COLOR; } /* Reverse cell? */ - if (attr->reverse()) { - swap (&fore, &back); + if (attr->reverse()) [[unlikely]] { + using std::swap; + swap(fore, back); } /* Selection: use hightlight back/fore, or inverse */ - if (is_selected) { + if (is_selected) [[unlikely]] { /* XXX what if hightlight back is same color as current back? */ bool do_swap = true; if (get_color(VTE_HIGHLIGHT_BG) != NULL) { @@ -8190,12 +8625,14 @@ Terminal::determine_colors(VteCellAttr const* attr, fore = VTE_HIGHLIGHT_FG; do_swap = false; } - if (do_swap) - swap (&fore, &back); + if (do_swap) { + using std::swap; + swap(fore, back); + } } /* Cursor: use cursor back, or inverse */ - if (is_cursor) { + if (is_cursor) [[unlikely]] { /* XXX what if cursor back is same color as current back? */ bool do_swap = true; if (get_color(VTE_CURSOR_BG) != NULL) { @@ -8206,17 +8643,10 @@ Terminal::determine_colors(VteCellAttr const* attr, fore = VTE_CURSOR_FG; do_swap = false; } - if (do_swap) - swap (&fore, &back); - } - - /* Invisible? */ - /* FIXME: This is dead code, this is not where we actually handle invisibile. - * Instead, draw_cells() is not called from draw_rows(). - * That is required for the foreground to be transparent if so is the background. */ - if (attr->invisible()) { - fore = back; - deco = VTE_DEFAULT_FG; + if (do_swap) { + using std::swap; + swap(fore, back); + } } *pfore = fore; @@ -8248,9 +8678,22 @@ Terminal::determine_cursor_colors(VteCell const* cell, fore, back, deco); } +void +Terminal::resolve_normal_colors(VteCell const* cell, + unsigned* pfore, + unsigned* pback, + vte::color::rgb& fg, + vte::color::rgb& bg) +{ + auto deco = unsigned{}; + determine_colors(cell, false, pfore, pback, &deco); + rgb_from_index<8, 8, 8>(*pfore, fg); + rgb_from_index<8, 8, 8>(*pback, bg); +} + // FIXMEchpe this constantly removes and reschedules the timer. improve this! bool -Terminal::text_blink_timer_callback() noexcept +Terminal::text_blink_timer_callback() { invalidate_all(); return false; /* don't run again */ @@ -8258,7 +8701,7 @@ Terminal::text_blink_timer_callback() noexcept /* Draw a string of characters with similar attributes. */ void -Terminal::draw_cells(struct _vte_draw_text_request *items, +Terminal::draw_cells(vte::view::DrawingContext::TextRequest* items, gssize n, uint32_t fore, uint32_t back, @@ -8320,11 +8763,11 @@ Terminal::draw_cells(struct _vte_draw_text_request *items, break; /* break the run */ } } - _vte_draw_fill_rectangle(m_draw, - xl, - y, - xr - xl, row_height, - &bg, VTE_DRAW_OPAQUE); + + m_draw.fill_rectangle(xl, + y, + xr - xl, row_height, + &bg); } } @@ -8372,93 +8815,125 @@ Terminal::draw_cells(struct _vte_draw_text_request *items, } } switch (vte_attr_get_value(attr, VTE_ATTR_UNDERLINE_VALUE_MASK, VTE_ATTR_UNDERLINE_SHIFT)) { - case 1: - _vte_draw_draw_line(m_draw, + case 1: /* single underline */ + m_draw.draw_line( xl, y + m_underline_position, xr - 1, y + m_underline_position + m_underline_thickness - 1, VTE_LINE_WIDTH, - &dc, VTE_DRAW_OPAQUE); + &dc); break; - case 2: - _vte_draw_draw_line(m_draw, + case 2: /* double underline */ + m_draw.draw_line( xl, y + m_double_underline_position, xr - 1, y + m_double_underline_position + m_double_underline_thickness - 1, VTE_LINE_WIDTH, - &dc, VTE_DRAW_OPAQUE); - _vte_draw_draw_line(m_draw, + &dc); + m_draw.draw_line( xl, y + m_double_underline_position + 2 * m_double_underline_thickness, xr - 1, y + m_double_underline_position + 3 * m_double_underline_thickness - 1, VTE_LINE_WIDTH, - &dc, VTE_DRAW_OPAQUE); + &dc); break; - case 3: - _vte_draw_draw_undercurl(m_draw, + case 3: /* curly underline */ + m_draw.draw_undercurl( xl, y + m_undercurl_position, m_undercurl_thickness, columns, - &dc, VTE_DRAW_OPAQUE); + widget()->scale_factor(), + &dc); + break; + case 4: /* dotted underline */ + for (int j = 0; j < columns; j++) { + for (int k = 0; k < column_width - m_underline_thickness; k += 2 * m_underline_thickness) { + m_draw.draw_line( + xl + j * column_width + k, + y + m_underline_position, + xl + j * column_width + k + m_underline_thickness - 1, + y + m_underline_position + m_underline_thickness - 1, + VTE_LINE_WIDTH, + &dc); + } + } + break; + case 5: /* dashed underline */ + for (int j = 0; j < columns; j++) { + /* left quarter */ + m_draw.draw_line( + xl + j * column_width, + y + m_underline_position, + xl + j * column_width + MAX(column_width / 4, 1) - 1, + y + m_underline_position + m_underline_thickness - 1, + VTE_LINE_WIDTH, + &dc); + /* right quarter */ + m_draw.draw_line( + xl + j * column_width + MAX(column_width * 3 / 4, 1) - 1, + y + m_underline_position, + xl + (j + 1) * column_width - 1, + y + m_underline_position + m_underline_thickness - 1, + VTE_LINE_WIDTH, + &dc); + } break; } if (attr & VTE_ATTR_STRIKETHROUGH) { - _vte_draw_draw_line(m_draw, + m_draw.draw_line( xl, y + m_strikethrough_position, xr - 1, y + m_strikethrough_position + m_strikethrough_thickness - 1, VTE_LINE_WIDTH, - &fg, VTE_DRAW_OPAQUE); + &fg); } if (attr & VTE_ATTR_OVERLINE) { - _vte_draw_draw_line(m_draw, + m_draw.draw_line( xl, y + m_overline_position, xr - 1, y + m_overline_position + m_overline_thickness - 1, VTE_LINE_WIDTH, - &fg, VTE_DRAW_OPAQUE); + &fg); } if (hilite) { - _vte_draw_draw_line(m_draw, + m_draw.draw_line( xl, y + m_regex_underline_position, xr - 1, y + m_regex_underline_position + m_regex_underline_thickness - 1, VTE_LINE_WIDTH, - &fg, VTE_DRAW_OPAQUE); + &fg); } else if (hyperlink) { for (double j = 1.0 / 6.0; j < columns; j += 0.5) { - _vte_draw_fill_rectangle(m_draw, + m_draw.fill_rectangle( xl + j * column_width, y + m_regex_underline_position, MAX(column_width / 6.0, 1.0), m_regex_underline_thickness, - &fg, VTE_DRAW_OPAQUE); + &fg); } } if (attr & VTE_ATTR_BOXED) { - _vte_draw_draw_rectangle(m_draw, + m_draw.draw_rectangle( xl, y, xr - xl, row_height, - &fg, VTE_DRAW_OPAQUE); + &fg); } } } - _vte_draw_text(m_draw, + m_draw.draw_text( items, n, attr, - &fg, VTE_DRAW_OPAQUE, - _vte_draw_get_style(attr & VTE_ATTR_BOLD, - attr & VTE_ATTR_ITALIC)); + &fg); } /* FIXME: we don't have a way to tell GTK+ what the default text attributes @@ -8684,7 +9159,7 @@ Terminal::translate_pango_cells(PangoAttrList *attrs, * attribute string is indexed by byte in the UTF-8 representation of the string * of characters. Because we draw a character at a time, this is slower. */ void -Terminal::draw_cells_with_attributes(struct _vte_draw_text_request *items, +Terminal::draw_cells_with_attributes(vte::view::DrawingContext::TextRequest* items, gssize n, PangoAttrList *attrs, bool draw_default_bg, @@ -8750,12 +9225,12 @@ Terminal::draw_rows(VteScreen *screen_, gint column_width, gint row_height) { - struct _vte_draw_text_request *items; vte::grid::row_t row; vte::grid::column_t i, j, lcol, vcol; int y; guint fore = VTE_DEFAULT_FG, nfore, back = VTE_DEFAULT_BG, nback, deco = VTE_DEFAULT_FG, ndeco; - gboolean hyperlink = FALSE, nhyperlink, hilite = FALSE, nhilite; + gboolean hyperlink = FALSE, nhyperlink; /* non-hovered explicit hyperlink, needs dashed underlining */ + gboolean hilite = FALSE, nhilite; /* hovered explicit hyperlink or regex match, needs continuous underlining */ gboolean selected; gboolean nrtl = FALSE, rtl; /* for debugging */ uint32_t attr = 0, nattr; @@ -8770,7 +9245,7 @@ Terminal::draw_rows(VteScreen *screen_, /* Need to ensure the ringview is updated. */ ringview_update(); - items = g_newa (struct _vte_draw_text_request, column_count); + auto items = g_newa(vte::view::DrawingContext::TextRequest, column_count); /* Paint the background. * Do it first for all the cells we're about to paint, before drawing the glyphs, @@ -8778,16 +9253,22 @@ Terminal::draw_rows(VteScreen *screen_, * chopped off by another cell's background, not even across changes of the * background or any other attribute. * Process each row independently. */ +#if VTE_GTK == 3 int const rect_width = get_allocated_width(); +#elif VTE_GTK == 4 + int const rect_width = get_allocated_width() + m_style_border.left + m_style_border.right; +#endif /* The rect contains the area of the row, and is moved row-wise in the loop. */ - auto rect = cairo_rectangle_int_t{-m_padding.left, start_y, rect_width, row_height}; + auto rect = vte::view::Rectangle{-m_border.left, start_y, rect_width, row_height}; for (row = start_row, y = start_y; row < end_row; - row++, y += row_height, rect.y = y /* same as rect.y += row_height */) { + row++, y += row_height, rect.move_y(y) /* same as rect.y += row_height */) { +#if VTE_GTK == 3 /* Check whether we need to draw this row at all */ - if (cairo_region_contains_rectangle(region, &rect) == CAIRO_REGION_OVERLAP_OUT) + if (cairo_region_contains_rectangle(region, rect.cairo()) == CAIRO_REGION_OVERLAP_OUT) continue; +#endif row_data = find_row_data(row); bidirow = m_ringview.get_bidirow(row); @@ -8801,18 +9282,18 @@ Terminal::draw_rows(VteScreen *screen_, bg.red = (bg.red + 0xC000) / 2; bg.green = (bg.green + 0xC000) / 2; bg.blue = (bg.blue + 0xC000) / 2; - _vte_draw_fill_rectangle (m_draw, - -m_padding.left, + m_draw.fill_rectangle( + -m_border.left, y, - m_padding.left, + m_border.left, row_height, - &bg, VTE_DRAW_OPAQUE); - _vte_draw_fill_rectangle (m_draw, + &bg); + m_draw.fill_rectangle( column_count * column_width, y, - rect_width - m_padding.left - column_count * column_width, + rect_width - m_border.left - column_count * column_width, row_height, - &bg, VTE_DRAW_OPAQUE); + &bg); } } @@ -8843,12 +9324,12 @@ Terminal::draw_rows(VteScreen *screen_, if (back != VTE_DEFAULT_BG) { vte::color::rgb bg; rgb_from_index<8, 8, 8>(back, bg); - _vte_draw_fill_rectangle (m_draw, + m_draw.fill_rectangle( i * column_width, y, (j - i) * column_width, row_height, - &bg, VTE_DRAW_OPAQUE); + &bg); } _VTE_DEBUG_IF (VTE_DEBUG_BIDI) { @@ -8864,28 +9345,28 @@ Terminal::draw_rows(VteScreen *screen_, /* Paint the top and bottom eighth of the cell with this more gray background * if the paragraph has a resolved RTL base direction. */ if (bidirow->base_is_rtl()) { - _vte_draw_fill_rectangle (m_draw, + m_draw.fill_rectangle( i * column_width, y, (j - i) * column_width, y1 - y, - &bg, VTE_DRAW_OPAQUE); - _vte_draw_fill_rectangle (m_draw, + &bg); + m_draw.fill_rectangle( i * column_width, y2, (j - i) * column_width, y + row_height - y2, - &bg, VTE_DRAW_OPAQUE); + &bg); } /* Paint the middle three quarters of the cell with this more gray background * if the current character has a resolved RTL direction. */ if (rtl) { - _vte_draw_fill_rectangle (m_draw, + m_draw.fill_rectangle( i * column_width, y1, (j - i) * column_width, y2 - y1, - &bg, VTE_DRAW_OPAQUE); + &bg); } } @@ -8900,17 +9381,19 @@ Terminal::draw_rows(VteScreen *screen_, * The rect contains the area of the row (enlarged a bit at the top and bottom * to allow the text to overdraw a bit), and is moved row-wise in the loop. */ - rect = cairo_rectangle_int_t{-m_padding.left, - start_y - cell_overflow_top(), - rect_width, - row_height + cell_overflow_top() + cell_overflow_bottom()}; + rect = vte::view::Rectangle{-m_border.left, + start_y - cell_overflow_top(), + rect_width, + row_height + cell_overflow_top() + cell_overflow_bottom()}; for (row = start_row, y = start_y; row < end_row; - row++, y += row_height, rect.y += row_height) { + row++, y += row_height, rect.advance_y(row_height)) { +#if VTE_GTK == 3 /* Check whether we need to draw this row at all */ - if (cairo_region_contains_rectangle(region, &rect) == CAIRO_REGION_OVERLAP_OUT) + if (cairo_region_contains_rectangle(region, rect.cairo()) == CAIRO_REGION_OVERLAP_OUT) continue; +#endif row_data = find_row_data(row); if (row_data == NULL) @@ -8933,15 +9416,19 @@ Terminal::draw_rows(VteScreen *screen_, g_assert(cell != nullptr); nhyperlink = (m_allow_hyperlink && cell->attr.hyperlink_idx != 0); + nhilite = (nhyperlink && cell->attr.hyperlink_idx == m_hyperlink_hover_idx) || + (!nhyperlink && regex_match_has_current() && m_match_span.contains(row, lcol)); if (cell->c == 0 || - ((cell->c == ' ' || cell->c == '\t') && // FIXME '\t' is newly added now, double check - cell->attr.has_none(VTE_ATTR_UNDERLINE_MASK | - VTE_ATTR_STRIKETHROUGH_MASK | - VTE_ATTR_OVERLINE_MASK) && - !nhyperlink) || + ((cell->c == ' ' || cell->c == '\t') && // FIXME '\t' is newly added now, double check + cell->attr.has_none(VTE_ATTR_UNDERLINE_MASK | + VTE_ATTR_STRIKETHROUGH_MASK | + VTE_ATTR_OVERLINE_MASK) && + !nhyperlink && + !nhilite) || cell->attr.fragment() || cell->attr.invisible()) { - /* Skip empty or fragment cell. */ + /* Skip empty or fragment cell, but erase on ' ' and '\t', since + * it may be overwriting an image. */ lcol++; continue; } @@ -8951,9 +9438,6 @@ Terminal::draw_rows(VteScreen *screen_, selected = cell_is_selected_log(lcol, row); determine_colors(cell, selected, &nfore, &nback, &ndeco); - nhilite = (nhyperlink && cell->attr.hyperlink_idx == m_hyperlink_hover_idx) || - (!nhyperlink && regex_match_has_current() && m_match_span.contains(row, lcol)); - /* See if it no longer fits the run. */ if (item_count > 0 && (((attr ^ nattr) & (VTE_ATTR_BOLD_MASK | @@ -9007,7 +9491,7 @@ Terminal::draw_rows(VteScreen *screen_, hyperlink = nhyperlink; hilite = nhilite; - g_assert_cmpint (item_count, <, column_count); + vte_assert_cmpint (item_count, <, column_count); items[item_count].c = bidirow->vis_get_shaped_char(vcol, c); items[item_count].columns = j - lcol; items[item_count].x = (vcol - (bidirow->vis_is_rtl(vcol) ? items[item_count].columns - 1 : 0)) * column_width; @@ -9016,7 +9500,7 @@ Terminal::draw_rows(VteScreen *screen_, items[item_count].box_mirror = !!(row_data->attr.bidi_flags & VTE_BIDI_FLAG_BOX_MIRROR); item_count++; - g_assert_cmpint (j, >, lcol); + vte_assert_cmpint (j, >, lcol); lcol = j; } @@ -9031,14 +9515,66 @@ Terminal::draw_rows(VteScreen *screen_, } } +// Returns the rectangle the cursor would be drawn if a block cursor, +// or a zero-size rect at the top left corner if the cursor is not +// on-screen. +vte::view::Rectangle +Terminal::cursor_rect() +{ + // This mostly replicates the code below in ::paint_cursor(), but + // it would be too complicated to try to extract that into a common + // method. + + auto lcol = m_screen->cursor.col; + auto const drow = m_screen->cursor.row; + auto const width = m_cell_width; + auto const height = m_cell_height; + + if (!cursor_is_onscreen() || + std::clamp(long(lcol), long(0), long(m_column_count - 1)) != lcol) + return {}; + + /* Need to ensure the ringview is updated. */ + ringview_update(); + + /* Find the first cell of the character "under" the cursor. + * This is for CJK. For TAB, paint the cursor where it really is. */ + vte::base::BidiRow const* bidirow = m_ringview.get_bidirow(drow); + + auto cell = find_charcell(lcol, drow); + while (cell && cell->attr.fragment() && cell->c != '\t' && lcol > 0) { + --lcol; + cell = find_charcell(lcol, drow); + } + + auto vcol = bidirow->log2vis(lcol); + auto const c = (cell && cell->c) ? bidirow->vis_get_shaped_char(vcol, cell->c) : ' '; + auto const columns = c == '\t' ? 1 : cell ? cell->attr.columns() : 1; + auto const x = (vcol - ((cell && bidirow->vis_is_rtl(vcol)) ? cell->attr.columns() - 1 : 0)) * width; + auto const y = row_to_pixel(drow); + + auto cursor_width = columns * width; + + // Include the spacings in the cursor, see bug 781479 comments 39-44. + // Make the cursor even wider if the glyph is wider. + if (cell && cell->c != 0 && cell->c != ' ' && cell->c != '\t') { + + auto const attr = cell && cell->c ? cell->attr.attr : 0; + int l, r; + m_draw.get_char_edges(cell->c, cell->attr.columns(), attr, l /* unused */, r); + cursor_width = cursor_width >= r ? cursor_width : r; + } + + return {int(x), int(y), int(cursor_width), int(height)}; +} + void Terminal::paint_cursor() { - struct _vte_draw_text_request item; + vte::view::DrawingContext::TextRequest item; vte::grid::row_t drow; vte::grid::column_t lcol, vcol; int width, height, cursor_width; - guint style = 0; guint fore, back, deco; vte::color::rgb bg; int x, y; @@ -9089,9 +9625,7 @@ Terminal::paint_cursor() item.y = row_to_pixel(drow); item.mirror = bidirow->vis_is_rtl(vcol); item.box_mirror = (row_data && (row_data->attr.bidi_flags & VTE_BIDI_FLAG_BOX_MIRROR)); - if (cell && cell->c != 0) { - style = _vte_draw_get_style(cell->attr.bold(), cell->attr.italic()); - } + auto const attr = cell && cell->c ? cell->attr.attr : 0; selected = cell_is_selected_log(lcol, drow); determine_cursor_colors(cell, selected, &fore, &back, &deco); @@ -9119,19 +9653,19 @@ Terminal::paint_cursor() if (bidirow->vis_is_rtl(vcol)) x += item.columns * m_cell_width - stem_width; - _vte_draw_fill_rectangle(m_draw, + m_draw.fill_rectangle( x, y + m_char_padding.top, stem_width, m_char_ascent + m_char_descent, - &bg, VTE_DRAW_OPAQUE); + &bg); /* Show the direction of the current character if the paragraph contains a mixture * of directions. * FIXME Do this for the other cursor shapes, too. Need to find a good visual design. */ if (focus && bidirow->has_foreign()) - _vte_draw_fill_rectangle(m_draw, + m_draw.fill_rectangle( bidirow->vis_is_rtl(vcol) ? x - stem_width : x + stem_width, y + m_char_padding.top, stem_width, stem_width, - &bg, VTE_DRAW_OPAQUE); + &bg); break; } @@ -9154,15 +9688,15 @@ Terminal::paint_cursor() if (cell && cell->c != 0 && cell->c != ' ' && cell->c != '\t') { int l, r; - _vte_draw_get_char_edges (m_draw, cell->c, cell->attr.columns(), style, &l, &r); + m_draw.get_char_edges(cell->c, cell->attr.columns(), attr, l, r); left = MIN(left, l); right = MAX(right, r); } - _vte_draw_fill_rectangle(m_draw, + m_draw.fill_rectangle( x + left, y + m_cell_height - m_char_padding.bottom - line_height, right - left, line_height, - &bg, VTE_DRAW_OPAQUE); + &bg); break; } @@ -9172,8 +9706,8 @@ Terminal::paint_cursor() cursor_width = item.columns * width; if (cell && cell->c != 0 && cell->c != ' ' && cell->c != '\t') { - int r; - _vte_draw_get_char_edges (m_draw, cell->c, cell->attr.columns(), style, NULL, &r); + int l, r; + m_draw.get_char_edges(cell->c, cell->attr.columns(), attr, l /* unused */, r); cursor_width = MAX(cursor_width, r); } @@ -9181,10 +9715,10 @@ Terminal::paint_cursor() if (focus) { /* just reverse the character under the cursor */ - _vte_draw_fill_rectangle(m_draw, + m_draw.fill_rectangle( x, y, cursor_width, height, - &bg, VTE_DRAW_OPAQUE); + &bg); if (cell && cell->c != 0 && cell->c != ' ' && cell->c != '\t') { draw_cells( @@ -9199,12 +9733,12 @@ Terminal::paint_cursor() } else { /* draw a box around the character */ - _vte_draw_draw_rectangle(m_draw, + m_draw.draw_rectangle( x - VTE_LINE_WIDTH, y - VTE_LINE_WIDTH, cursor_width + 2*VTE_LINE_WIDTH, height + 2*VTE_LINE_WIDTH, - &bg, VTE_DRAW_OPAQUE); + &bg); } break; @@ -9248,11 +9782,10 @@ Terminal::paint_im_preedit_string() /* Draw the preedit string, boxed. */ if (len > 0) { - struct _vte_draw_text_request *items; const char *preedit = m_im_preedit.c_str(); int preedit_cursor; - items = g_new0(struct _vte_draw_text_request, len); + auto items = g_new0(vte::view::DrawingContext::TextRequest, len); for (i = columns = 0; i < len; i++) { items[i].c = g_utf8_get_char(preedit); items[i].columns = _vte_unichar_width(items[i].c, @@ -9263,13 +9796,14 @@ Terminal::paint_im_preedit_string() preedit = g_utf8_next_char(preedit); } if (G_LIKELY(m_clear_background)) { - _vte_draw_clear(m_draw, + m_draw.clear( vcol * width, row_to_pixel(m_screen->cursor.row), width * columns, height, get_color(VTE_DEFAULT_BG), m_background_alpha); } + draw_cells_with_attributes( items, len, m_im_preedit_attrs.get(), @@ -9296,58 +9830,116 @@ Terminal::paint_im_preedit_string() } } +#if VTE_GTK == 3 + void -Terminal::widget_draw(cairo_t *cr) +Terminal::widget_draw(cairo_t* cr) noexcept +{ +#if VTE_DEBUG + _VTE_DEBUG_IF(VTE_DEBUG_LIFECYCLE | VTE_DEBUG_WORK | VTE_DEBUG_UPDATES) do { + auto clip_rect = cairo_rectangle_int_t{}; + if (!gdk_cairo_get_clip_rectangle (cr, &clip_rect)) + break; + + _vte_debug_print(VTE_DEBUG_LIFECYCLE, "vte_terminal_draw()\n"); + _vte_debug_print (VTE_DEBUG_WORK, "+"); + _vte_debug_print (VTE_DEBUG_UPDATES, "Draw (%d,%d)x(%d,%d)\n", + clip_rect.x, clip_rect.y, + clip_rect.width, clip_rect.height); + } while (0); +#endif /* VTE_DEBUG */ + + m_draw.set_cairo(cr); + m_draw.translate(m_border.left, m_border.top); + m_draw.set_scale_factor(widget()->scale_factor()); + + /* Both cr and region should be in view coordinates now. + * No need to further translation. + */ + + auto region = vte_cairo_get_clip_region(cr); + if (region != nullptr) + draw(region.get()); + + m_draw.untranslate(); + m_draw.set_cairo(nullptr); +} + +#endif /* VTE_GTK == 3 */ + +#if VTE_GTK == 4 + +void +Terminal::widget_snapshot(GtkSnapshot* snapshot_object) noexcept +{ + _vte_debug_print(VTE_DEBUG_DRAW, "Widget snapshot\n"); + + m_draw.set_snapshot(snapshot_object); + m_draw.translate(m_border.left, m_border.top); + m_draw.set_scale_factor(widget()->scale_factor()); + + draw(nullptr); + + m_draw.untranslate(); + m_draw.set_snapshot(nullptr); +} + +#endif /* VTE_GTK == 4 */ + +void +Terminal::draw(cairo_region_t const* region) noexcept { - cairo_rectangle_int_t clip_rect; - cairo_region_t *region; int allocated_width, allocated_height; int extra_area_for_cursor; bool text_blink_enabled_now; - gint64 now = 0; - - if (!gdk_cairo_get_clip_rectangle (cr, &clip_rect)) - return; - - _vte_debug_print(VTE_DEBUG_LIFECYCLE, "vte_terminal_draw()\n"); - _vte_debug_print (VTE_DEBUG_WORK, "+"); - _vte_debug_print (VTE_DEBUG_UPDATES, "Draw (%d,%d)x(%d,%d)\n", - clip_rect.x, clip_rect.y, - clip_rect.width, clip_rect.height); - - region = vte_cairo_get_clip_region (cr); - if (region == NULL) - return; + auto now_ms = int64_t{0}; allocated_width = get_allocated_width(); allocated_height = get_allocated_height(); - /* Designate the start of the drawing operation and clear the area. */ - _vte_draw_set_cairo(m_draw, cr); + /* Note: @cr's origin is at the top left of the view area; the left/top border + * is entirely to the left/top of this point. + */ if (G_LIKELY(m_clear_background)) { - _vte_draw_clear (m_draw, 0, 0, - allocated_width, allocated_height, - get_color(VTE_DEFAULT_BG), m_background_alpha); + m_draw.clear( +#if VTE_GTK == 3 + -m_border.left, + -m_border.top, + allocated_width, + allocated_height, +#elif VTE_GTK == 4 + -m_border.left - m_style_border.left, + -m_border.top - m_style_border.top, + allocated_width + m_style_border.left + m_style_border.right, + allocated_height + m_style_border.top + m_style_border.bottom, +#endif + get_color(VTE_DEFAULT_BG), m_background_alpha); } /* Clip vertically, for the sake of smooth scrolling. We want the top and bottom paddings to be unused. * Don't clip horizontally so that antialiasing can legally overflow to the right padding. */ - cairo_save(cr); - cairo_rectangle(cr, 0, m_padding.top, allocated_width, allocated_height - m_padding.top - m_padding.bottom); - cairo_clip(cr); - - cairo_translate(cr, m_padding.left, m_padding.top); - - /* Transform to view coordinates */ - cairo_region_translate(region, -m_padding.left, -m_padding.top); + auto const vert_clip = vte::view::Rectangle{ +#if VTE_GTK == 3 + -m_border.left, +#elif VTE_GTK == 4 + -m_style_border.left - m_border.left, +#endif + 0, +#if VTE_GTK == 3 + allocated_width, +#elif VTE_GTK == 4 + allocated_width + m_style_border.left + m_style_border.right, +#endif + allocated_height - m_border.top - m_border.bottom}; + m_draw.clip_border(&vert_clip); /* Whether blinking text should be visible now */ m_text_blink_state = true; text_blink_enabled_now = (unsigned)m_text_blink_mode & (unsigned)(m_has_focus ? TextBlinkMode::eFOCUSED : TextBlinkMode::eUNFOCUSED); if (text_blink_enabled_now) { - now = g_get_monotonic_time() / 1000; - if (now % (m_text_blink_cycle * 2) >= m_text_blink_cycle) + now_ms = g_get_monotonic_time() / 1000; + if (now_ms % (m_text_blink_cycle_ms * 2) >= m_text_blink_cycle_ms) m_text_blink_state = false; } /* Painting will flip this if it encounters any cell with blink attribute */ @@ -9365,25 +9957,28 @@ Terminal::widget_draw(cairo_t *cr) paint_im_preedit_string(); - cairo_restore(cr); + m_draw.unclip_border(); /* Re-clip, allowing VTE_LINE_WIDTH more pixel rows for the outline cursor. */ /* TODOegmont: It's really ugly to do it here. */ - cairo_save(cr); extra_area_for_cursor = (decscusr_cursor_shape() == CursorShape::eBLOCK && !m_has_focus) ? VTE_LINE_WIDTH : 0; - cairo_rectangle(cr, 0, m_padding.top - extra_area_for_cursor, allocated_width, allocated_height - m_padding.top - m_padding.bottom + 2 * extra_area_for_cursor); - cairo_clip(cr); - - cairo_translate(cr, m_padding.left, m_padding.top); + auto const reclip = vte::view::Rectangle{ +#if VTE_GTK == 3 + -m_border.left, +#elif VTE_GTK == 4 + -m_style_border.left - m_border.left, +#endif + -extra_area_for_cursor, +#if VTE_GTK == 3 + allocated_width, +#elif VTE_GTK == 4 + allocated_width + m_style_border.left + m_style_border.right, +#endif + allocated_height - m_border.top - m_border.bottom + 2 * extra_area_for_cursor}; + m_draw.clip_border(&reclip); paint_cursor(); - - cairo_restore(cr); - - /* Done with various structures. */ - _vte_draw_set_cairo(m_draw, NULL); - - cairo_region_destroy (region); + m_draw.unclip_border(); /* If painting encountered any cell with blink attribute, we might need to set up a timer. * Blinking is implemented using a one-shot (not repeating) timer that keeps getting reinstalled @@ -9392,102 +9987,69 @@ Terminal::widget_draw(cairo_t *cr) * implicitly by the timer not getting reinstalled anymore (often after a final unnecessary but * harmless repaint). */ if (G_UNLIKELY (m_text_to_blink && text_blink_enabled_now && !m_text_blink_timer)) - m_text_blink_timer.schedule(m_text_blink_cycle - now % m_text_blink_cycle, + m_text_blink_timer.schedule(m_text_blink_cycle_ms - now_ms % m_text_blink_cycle_ms, vte::glib::Timer::Priority::eLOW); m_invalidated_all = FALSE; } +#if VTE_GTK == 3 + /* Handle an expose event by painting the exposed area. */ -static cairo_region_t * -vte_cairo_get_clip_region (cairo_t *cr) +static vte::Freeable +vte_cairo_get_clip_region(cairo_t *cr) { - cairo_rectangle_list_t *list; - cairo_region_t *region; - int i; - - list = cairo_copy_clip_rectangle_list (cr); + auto list = vte::take_freeable(cairo_copy_clip_rectangle_list(cr)); if (list->status == CAIRO_STATUS_CLIP_NOT_REPRESENTABLE) { - cairo_rectangle_int_t clip_rect; - cairo_rectangle_list_destroy (list); + auto clip_rect = cairo_rectangle_int_t{}; + if (!gdk_cairo_get_clip_rectangle(cr, &clip_rect)) + return nullptr; - if (!gdk_cairo_get_clip_rectangle (cr, &clip_rect)) - return NULL; - return cairo_region_create_rectangle (&clip_rect); + return vte::take_freeable(cairo_region_create_rectangle(&clip_rect)); } + auto region = vte::take_freeable(cairo_region_create()); + for (auto i = list->num_rectangles - 1; i >= 0; --i) { + auto rect = &list->rectangles[i]; - region = cairo_region_create (); - for (i = list->num_rectangles - 1; i >= 0; --i) { - cairo_rectangle_t *rect = &list->rectangles[i]; cairo_rectangle_int_t clip_rect; - clip_rect.x = floor (rect->x); clip_rect.y = floor (rect->y); clip_rect.width = ceil (rect->x + rect->width) - clip_rect.x; clip_rect.height = ceil (rect->y + rect->height) - clip_rect.y; - if (cairo_region_union_rectangle (region, &clip_rect) != CAIRO_STATUS_SUCCESS) { - cairo_region_destroy (region); - region = NULL; + if (cairo_region_union_rectangle(region.get(), &clip_rect) != CAIRO_STATUS_SUCCESS) { + region.reset(); break; } } - cairo_rectangle_list_destroy (list); return region; } -void -Terminal::widget_scroll(GdkEventScroll *event) +#endif /* VTE_GTK == 3 */ + +bool +Terminal::widget_mouse_scroll(vte::platform::ScrollEvent const& event) { - gdouble delta_x, delta_y; gdouble v; gint cnt, i; int button; - /* Need to ensure the ringview is updated. */ - ringview_update(); - - GdkEvent *base_event = reinterpret_cast(event); - auto rowcol = confined_grid_coords_from_event(base_event); - - read_modifiers(base_event); - -#if GTK_CHECK_VERSION (2, 90, 8) - /* Do not intercept Alt+scroll, let the GtkNotebook handle it to switch tabs. - Requires a fixed GTK+, see https://bugzilla.gnome.org/show_bug.cgi?id=145244 */ - if (event->state & GDK_MOD1_MASK) - return; -#endif - - switch (event->direction) { - case GDK_SCROLL_UP: - m_mouse_smooth_scroll_delta -= 1.; - _vte_debug_print(VTE_DEBUG_EVENTS, "Scroll up\n"); - break; - case GDK_SCROLL_DOWN: - m_mouse_smooth_scroll_delta += 1.; - _vte_debug_print(VTE_DEBUG_EVENTS, "Scroll down\n"); - break; - case GDK_SCROLL_SMOOTH: - gdk_event_get_scroll_deltas ((GdkEvent*) event, &delta_x, &delta_y); - m_mouse_smooth_scroll_delta += delta_y; - _vte_debug_print(VTE_DEBUG_EVENTS, - "Smooth scroll by %f, delta now at %f\n", - delta_y, m_mouse_smooth_scroll_delta); - break; - default: - break; - } + m_modifiers = event.modifiers(); + m_mouse_smooth_scroll_delta += event.dy(); /* If we're running a mouse-aware application, map the scroll event * to a button press on buttons four and five. */ if (m_mouse_tracking_mode != MouseTrackingMode::eNONE) { cnt = m_mouse_smooth_scroll_delta; if (cnt == 0) - return; + return true; + + /* Need to ensure the ringview is updated. */ + ringview_update(); + m_mouse_smooth_scroll_delta -= cnt; _vte_debug_print(VTE_DEBUG_EVENTS, "Scroll application by %d lines, smooth scroll delta set back to %f\n", @@ -9498,15 +10060,15 @@ Terminal::widget_scroll(GdkEventScroll *event) cnt = -cnt; for (i = 0; i < cnt; i++) { /* Encode the parameters and send them to the app. */ - feed_mouse_event(rowcol, + feed_mouse_event(confined_grid_coords_from_view_coords(m_mouse_last_position), button, false /* not drag */, false /* not release */); } - return; + return true; } - v = MAX (1., ceil (gtk_adjustment_get_page_increment (m_vadjustment.get()) / 10.)); + v = MAX (1., ceil (m_row_count /* page increment */ / 10.)); _vte_debug_print(VTE_DEBUG_EVENTS, "Scroll speed is %d lines per non-smooth scroll unit\n", (int) v); @@ -9517,7 +10079,7 @@ Terminal::widget_scroll(GdkEventScroll *event) cnt = v * m_mouse_smooth_scroll_delta; if (cnt == 0) - return; + return true; m_mouse_smooth_scroll_delta -= cnt / v; _vte_debug_print(VTE_DEBUG_EVENTS, "Scroll by %d lines, smooth scroll delta set back to %f\n", @@ -9539,12 +10101,15 @@ Terminal::widget_scroll(GdkEventScroll *event) send_child({normal, normal_length}); } g_free (normal); - } else { + return true; + } else if (m_fallback_scrolling) { /* Perform a history scroll. */ double dcnt = m_screen->scroll_delta + v * m_mouse_smooth_scroll_delta; queue_adjustment_value_changed_clamped(dcnt); m_mouse_smooth_scroll_delta = 0; + return true; } + return false; } bool @@ -9624,6 +10189,10 @@ Terminal::set_bold_is_bright(bool setting) return false; m_bold_is_bright = setting; + + /* Need to re-sanitise the font description to ensure bold is distinct. */ + update_font_desc(); + invalidate_all(); return true; @@ -9636,11 +10205,11 @@ Terminal::set_allow_hyperlink(bool setting) return false; if (setting == false) { - m_hyperlink_hover_idx = _vte_ring_get_hyperlink_at_position(m_screen->row_data, -1, -1, true, NULL); + m_hyperlink_hover_idx = m_screen->row_data->get_hyperlink_at_position(-1, -1, true, NULL); g_assert (m_hyperlink_hover_idx == 0); m_hyperlink_hover_uri = NULL; emit_hyperlink_hover_uri_changed(NULL); /* FIXME only emit if really changed */ - m_defaults.attr.hyperlink_idx = _vte_ring_get_hyperlink_idx(m_screen->row_data, NULL); + m_defaults.attr.hyperlink_idx = m_screen->row_data->get_hyperlink_idx(NULL); g_assert (m_defaults.attr.hyperlink_idx == 0); } @@ -9650,6 +10219,26 @@ Terminal::set_allow_hyperlink(bool setting) return true; } +bool +Terminal::set_fallback_scrolling(bool set) +{ + if (set == m_fallback_scrolling) + return false; + + m_fallback_scrolling = set; + return true; +} + +bool +Terminal::set_scroll_on_insert(bool scroll) +{ + if (scroll == m_scroll_on_insert) + return false; + + m_scroll_on_insert = scroll; + return true; +} + bool Terminal::set_scroll_on_output(bool scroll) { @@ -9683,15 +10272,11 @@ Terminal::set_rewrap_on_resize(bool rewrap) void Terminal::update_cursor_blinks() { - bool blink = false; + auto blink = false; switch (decscusr_cursor_blink()) { case CursorBlinkMode::eSYSTEM: - gboolean v; - g_object_get(gtk_widget_get_settings(m_widget), - "gtk-cursor-blink", - &v, nullptr); - blink = v != FALSE; + blink = m_cursor_blinks_system; break; case CursorBlinkMode::eON: blink = true; @@ -9826,26 +10411,26 @@ Terminal::set_scrollback_lines(long lines) /* The main screen gets the full scrollback buffer. */ scrn = &m_normal_screen; - lines = MAX (lines, m_row_count); - next = MAX (m_screen->cursor.row + 1, - _vte_ring_next (scrn->row_data)); - _vte_ring_resize (scrn->row_data, lines); - low = _vte_ring_delta (scrn->row_data); + lines = std::max (lines, m_row_count); + next = std::max (m_screen->cursor.row + 1, + long(scrn->row_data->next())); + scrn->row_data->resize(lines); + low = scrn->row_data->delta(); high = lines + MIN (G_MAXLONG - lines, low - m_row_count + 1); scrn->insert_delta = CLAMP (scrn->insert_delta, low, high); scrn->scroll_delta = CLAMP (scrn->scroll_delta, low, scrn->insert_delta); next = MIN (next, scrn->insert_delta + m_row_count); - if (_vte_ring_next (scrn->row_data) > next){ - _vte_ring_shrink (scrn->row_data, next - low); + if (long(scrn->row_data->next()) > next){ + scrn->row_data->shrink(next - low); } /* The alternate scrn isn't allowed to scroll at all. */ scrn = &m_alternate_screen; - _vte_ring_resize (scrn->row_data, m_row_count); - scrn->scroll_delta = _vte_ring_delta (scrn->row_data); - scrn->insert_delta = _vte_ring_delta (scrn->row_data); - if (_vte_ring_next (scrn->row_data) > scrn->insert_delta + m_row_count){ - _vte_ring_shrink (scrn->row_data, m_row_count); + scrn->row_data->resize(m_row_count); + scrn->scroll_delta = scrn->row_data->delta(); + scrn->insert_delta = scrn->row_data->delta(); + if (long(scrn->row_data->next()) > scrn->insert_delta + m_row_count){ + scrn->row_data->shrink(m_row_count); } /* Adjust the scrollbar to the new location. */ @@ -9856,6 +10441,10 @@ Terminal::set_scrollback_lines(long lines) queue_adjustment_value_changed(scroll_delta); adjust_adjustments_full(); + m_ringview.invalidate(); + invalidate_all(); + match_contents_clear(); + return true; } @@ -9898,20 +10487,36 @@ Terminal::set_mouse_autohide(bool autohide) void Terminal::reset_decoder() { - switch (data_syntax()) { - case DataSyntax::eECMA48_UTF8: + switch (primary_data_syntax()) { + case DataSyntax::ECMA48_UTF8: m_utf8_decoder.reset(); break; - case DataSyntax::eECMA48_PCTERM: +#if WITH_ICU + case DataSyntax::ECMA48_PCTERM: m_converter->decoder().reset(); break; +#endif default: g_assert_not_reached(); } } +void +Terminal::reset_data_syntax() +{ + if (current_data_syntax() == primary_data_syntax()) + return; + + switch (current_data_syntax()) { + default: + break; + } + + pop_data_syntax(); +} + /* * Terminal::reset: * @clear_tabstops: whether to reset tabstops @@ -9931,8 +10536,7 @@ Terminal::reset(bool clear_tabstops, if (from_api && !m_input_enabled) return; - GObject *object = G_OBJECT(m_terminal); - g_object_freeze_notify(object); + auto const freezer = vte::glib::FreezeObjectNotify{m_terminal}; m_bell_pending = false; @@ -9945,6 +10549,7 @@ Terminal::reset(bool clear_tabstops, reset_decoder(); /* Reset parser */ + reset_data_syntax(); m_parser.reset(); m_last_graphic_character = 0; @@ -9979,13 +10584,15 @@ Terminal::reset(bool clear_tabstops, if (clear_history) { m_screen = &m_normal_screen; m_normal_screen.scroll_delta = m_normal_screen.insert_delta = - _vte_ring_reset(m_normal_screen.row_data); + m_normal_screen.row_data->reset(); m_normal_screen.cursor.row = m_normal_screen.insert_delta; m_normal_screen.cursor.col = 0; + m_normal_screen.cursor_advanced_by_graphic_character = false; m_alternate_screen.scroll_delta = m_alternate_screen.insert_delta = - _vte_ring_reset(m_alternate_screen.row_data); + m_alternate_screen.row_data->reset(); m_alternate_screen.cursor.row = m_alternate_screen.insert_delta; m_alternate_screen.cursor.col = 0; + m_alternate_screen.cursor_advanced_by_graphic_character = false; /* Adjust the scrollbar to the new location. */ /* Hack: force a change in scroll_delta even if the value remains, so that vte_term_q_adj_val_changed() doesn't shortcut to no-op, see bug 730599. */ @@ -9997,7 +10604,7 @@ Terminal::reset(bool clear_tabstops, set_cursor_style(CursorStyle::eTERMINAL_DEFAULT); /* Reset restricted scrolling regions, leave insert mode, make * the cursor visible again. */ - m_scrolling_restricted = FALSE; + reset_scrolling_region(); /* Reset the visual bits of selection on hard reset, see bug 789954. */ if (clear_history) { deselect_all(); @@ -10015,18 +10622,19 @@ Terminal::reset(bool clear_tabstops, m_mouse_smooth_scroll_delta = 0.; /* Clear modifiers. */ m_modifiers = 0; + /* Reset the saved cursor. */ save_cursor(&m_normal_screen); save_cursor(&m_alternate_screen); /* BiDi */ m_bidi_rtl = FALSE; /* Cause everything to be redrawn (or cleared). */ + m_ringview.invalidate(); invalidate_all(); + match_contents_clear(); /* Reset XTerm window controls */ m_xterm_wm_iconified = false; - - g_object_thaw_notify(object); } void @@ -10039,8 +10647,6 @@ Terminal::unset_pty(bool notify_widget) disconnect_pty_read(); disconnect_pty_write(); - m_child_exited_eos_wait_timer.abort(); - /* Clear incoming and outgoing queues */ m_input_bytes = 0; m_incoming_queue = {}; @@ -10070,10 +10676,11 @@ Terminal::set_pty(vte::base::Pty *new_pty) if (!new_pty) return true; - set_size(m_column_count, m_row_count); + set_size(m_column_count, m_row_count, false); - if (!pty()->set_utf8(data_syntax() == DataSyntax::eECMA48_UTF8)) - g_warning ("Failed to set UTF8 mode: %m\n"); + if (!pty()->set_utf8(primary_data_syntax() == DataSyntax::ECMA48_UTF8)) { + // nothing we can do here + } /* Open channels to listen for input on. */ connect_pty_read(); @@ -10088,7 +10695,7 @@ Terminal::terminate_child() noexcept return false; auto pgrp = getpgid(m_pty_pid); - if (pgrp != -1) { + if (pgrp != -1 && pgrp != getpgid(getpid())) { kill(-pgrp, SIGHUP); } @@ -10098,16 +10705,6 @@ Terminal::terminate_child() noexcept return true; } -/* We need this bit of glue to ensure that accessible objects will always - * get signals. */ -void -Terminal::subscribe_accessible_events() -{ -#ifdef WITH_A11Y - m_accessible_emit = true; -#endif -} - void Terminal::select_text(vte::grid::column_t start_col, vte::grid::row_t start_row, @@ -10120,7 +10717,8 @@ Terminal::select_text(vte::grid::column_t start_col, m_selecting_had_delta = true; m_selection_resolved.set ({ start_row, start_col }, { end_row, end_col }); - widget_copy(VTE_SELECTION_PRIMARY, VTE_FORMAT_TEXT); + widget_copy(vte::platform::ClipboardType::PRIMARY, + vte::platform::ClipboardFormat::TEXT); emit_selection_changed(); invalidate_rows(start_row, end_row); @@ -10133,102 +10731,32 @@ Terminal::select_empty(vte::grid::column_t col, select_text(col, row, col, row); } -static void -remove_process_timeout_source(void) -{ - if (process_timeout_tag == 0) - return; - - _vte_debug_print(VTE_DEBUG_TIMEOUT, "Removing process timeout\n"); - g_source_remove (process_timeout_tag); - process_timeout_tag = 0; -} - -static void -add_update_timeout(vte::terminal::Terminal* that) -{ - if (update_timeout_tag == 0) { - _vte_debug_print (VTE_DEBUG_TIMEOUT, - "Starting update timeout\n"); - update_timeout_tag = - g_timeout_add_full (GDK_PRIORITY_REDRAW, - VTE_UPDATE_TIMEOUT, - update_timeout, NULL, - NULL); - } - if (!in_process_timeout) { - remove_process_timeout_source(); - } - if (that->m_active_terminals_link == nullptr) { - _vte_debug_print (VTE_DEBUG_TIMEOUT, - "Adding terminal to active list\n"); - that->m_active_terminals_link = g_active_terminals = - g_list_prepend(g_active_terminals, that); - } -} - void Terminal::reset_update_rects() { +#if VTE_GTK == 3 g_array_set_size(m_update_rects, 0); - m_invalidated_all = FALSE; -} - -static bool -remove_from_active_list(vte::terminal::Terminal* that) -{ - if (that->m_active_terminals_link == nullptr || - that->m_update_rects->len != 0) - return false; - - _vte_debug_print(VTE_DEBUG_TIMEOUT, "Removing terminal from active list\n"); - g_active_terminals = g_list_delete_link(g_active_terminals, that->m_active_terminals_link); - that->m_active_terminals_link = nullptr; - return true; +#endif + m_invalidated_all = false; } static void stop_processing(vte::terminal::Terminal* that) -{ - if (!remove_from_active_list(that)) - return; - - if (g_active_terminals != nullptr) - return; - - if (!in_process_timeout) { - remove_process_timeout_source(); - } - if (in_update_timeout == FALSE && - update_timeout_tag != 0) { - _vte_debug_print(VTE_DEBUG_TIMEOUT, "Removing update timeout\n"); - g_source_remove (update_timeout_tag); - update_timeout_tag = 0; - } -} - -static void -remove_update_timeout(vte::terminal::Terminal* that) { that->reset_update_rects(); - stop_processing(that); + + if (that->m_scheduler != nullptr) { + _vte_scheduler_remove_callback (that->m_widget, that->m_scheduler); + that->m_scheduler = nullptr; + } } static void add_process_timeout(vte::terminal::Terminal* that) { - _vte_debug_print(VTE_DEBUG_TIMEOUT, - "Adding terminal to active list\n"); - that->m_active_terminals_link = g_active_terminals = - g_list_prepend(g_active_terminals, that); - if (update_timeout_tag == 0 && - process_timeout_tag == 0) { - _vte_debug_print(VTE_DEBUG_TIMEOUT, - "Starting process timeout\n"); - process_timeout_tag = - g_timeout_add (VTE_DISPLAY_TIMEOUT, - process_timeout, NULL); - } + if (that->m_scheduler == nullptr) + that->m_scheduler = _vte_scheduler_add_callback ( + that->m_widget, process_timeout, that); } void @@ -10241,59 +10769,57 @@ Terminal::start_processing() void Terminal::emit_pending_signals() { - GObject *object = G_OBJECT(m_terminal); - g_object_freeze_notify(object); + auto const freezer = vte::glib::FreezeObjectNotify{m_terminal}; emit_adjustment_changed(); - if (m_window_title_changed) { + if (m_pending_changes & vte::to_integral(PendingChanges::TITLE)) { if (m_window_title != m_window_title_pending) { m_window_title.swap(m_window_title_pending); _vte_debug_print(VTE_DEBUG_SIGNALS, "Emitting `window-title-changed'.\n"); - g_signal_emit(object, signals[SIGNAL_WINDOW_TITLE_CHANGED], 0); - g_object_notify_by_pspec(object, pspecs[PROP_WINDOW_TITLE]); + g_signal_emit(freezer.get(), signals[SIGNAL_WINDOW_TITLE_CHANGED], 0); + g_object_notify_by_pspec(freezer.get(), pspecs[PROP_WINDOW_TITLE]); } m_window_title_pending.clear(); - m_window_title_changed = false; } - if (m_current_directory_uri_changed) { + if (m_pending_changes & vte::to_integral(PendingChanges::CWD)) { if (m_current_directory_uri != m_current_directory_uri_pending) { m_current_directory_uri.swap(m_current_directory_uri_pending); _vte_debug_print(VTE_DEBUG_SIGNALS, "Emitting `current-directory-uri-changed'.\n"); - g_signal_emit(object, signals[SIGNAL_CURRENT_DIRECTORY_URI_CHANGED], 0); - g_object_notify_by_pspec(object, pspecs[PROP_CURRENT_DIRECTORY_URI]); + g_signal_emit(freezer.get(), signals[SIGNAL_CURRENT_DIRECTORY_URI_CHANGED], 0); + g_object_notify_by_pspec(freezer.get(), pspecs[PROP_CURRENT_DIRECTORY_URI]); } m_current_directory_uri_pending.clear(); - m_current_directory_uri_changed = false; } - if (m_current_file_uri_changed) { + if (m_pending_changes & vte::to_integral(PendingChanges::CWF)) { if (m_current_file_uri != m_current_file_uri_pending) { m_current_file_uri.swap(m_current_file_uri_pending); _vte_debug_print(VTE_DEBUG_SIGNALS, "Emitting `current-file-uri-changed'.\n"); - g_signal_emit(object, signals[SIGNAL_CURRENT_FILE_URI_CHANGED], 0); - g_object_notify_by_pspec(object, pspecs[PROP_CURRENT_FILE_URI]); + g_signal_emit(freezer.get(), signals[SIGNAL_CURRENT_FILE_URI_CHANGED], 0); + g_object_notify_by_pspec(freezer.get(), pspecs[PROP_CURRENT_FILE_URI]); } m_current_file_uri_pending.clear(); - m_current_file_uri_changed = false; } + m_pending_changes = 0; + /* Flush any pending "inserted" signals. */ if (m_cursor_moved_pending) { _vte_debug_print(VTE_DEBUG_SIGNALS, "Emitting `cursor-moved'.\n"); - g_signal_emit(object, signals[SIGNAL_CURSOR_MOVED], 0); + g_signal_emit(freezer.get(), signals[SIGNAL_CURSOR_MOVED], 0); m_cursor_moved_pending = false; } if (m_text_modified_flag) { @@ -10339,21 +10865,12 @@ Terminal::emit_pending_signals() m_bell_pending = false; } - g_object_thaw_notify(object); - - auto const eos = m_eos_pending; if (m_eos_pending) { queue_eof(); m_eos_pending = false; unset_pty(); } - - if (m_child_exited_after_eos_pending && eos) { - /* The signal handler could destroy the terminal, so send the signal on idle */ - queue_child_exited(); - m_child_exited_after_eos_pending = false; - } } void @@ -10367,19 +10884,15 @@ Terminal::time_process_incoming() } bool -Terminal::process(bool emit_adj_changed) +Terminal::process() { if (pty()) { if (m_pty_input_active || m_pty_input_source == 0) { m_pty_input_active = false; - /* Do one read directly. FIXMEchpe: Why? */ - pty_io_read(pty()->fd(), G_IO_IN); } connect_pty_read(); } - if (emit_adj_changed) - emit_adjustment_changed(); bool is_active = !m_incoming_queue.empty(); if (is_active) { @@ -10395,64 +10908,28 @@ Terminal::process(bool emit_adj_changed) return is_active; } -/* This function is called after DISPLAY_TIMEOUT ms. - * It makes sure initial output is never delayed by more than DISPLAY_TIMEOUT - */ -static gboolean -process_timeout (gpointer data) +static void +process_timeout (GtkWidget *widget, + gpointer data) noexcept +try { - GList *l, *next; - gboolean again; + auto that = reinterpret_cast(data); - in_process_timeout = TRUE; + that->m_is_processing = true; + auto is_active = that->process(); + that->m_is_processing = false; - _vte_debug_print (VTE_DEBUG_WORK, "<"); - _vte_debug_print (VTE_DEBUG_TIMEOUT, - "Process timeout: %d active\n", - g_list_length(g_active_terminals)); + that->invalidate_dirty_rects_and_process_updates(); + that->emit_adjustment_changed(); - for (l = g_active_terminals; l != NULL; l = next) { - auto that = reinterpret_cast(l->data); - bool active; - - next = l->next; - - if (l != g_active_terminals) { - _vte_debug_print (VTE_DEBUG_WORK, "T"); - } - - // FIXMEchpe find out why we don't emit_adjustment_changed() here!! - active = that->process(false); - - if (!active) { - remove_from_active_list(that); - } - } - - _vte_debug_print (VTE_DEBUG_WORK, ">"); - - if (g_active_terminals != nullptr && update_timeout_tag == 0) { - again = TRUE; - } else { - _vte_debug_print(VTE_DEBUG_TIMEOUT, - "Stopping process timeout\n"); - process_timeout_tag = 0; - again = FALSE; - } - - in_process_timeout = FALSE; - - if (again) { - /* Force us to relinquish the CPU as the child is running - * at full tilt and making us run to keep up... - */ - g_usleep (0); - } else if (update_timeout_tag == 0) { - /* otherwise free up memory used to capture incoming data */ + if (!is_active) { + stop_processing(that); vte::base::Chunk::prune(); - } - - return again; + } +} +catch (...) +{ + vte::log_exception(); } bool @@ -10461,6 +10938,7 @@ Terminal::invalidate_dirty_rects_and_process_updates() if (G_UNLIKELY(!widget_realized())) return false; +#if VTE_GTK == 3 if (G_UNLIKELY (!m_update_rects->len)) return false; @@ -10475,133 +10953,31 @@ Terminal::invalidate_dirty_rects_and_process_updates() auto allocation = get_allocated_rect(); cairo_region_translate(region, - allocation.x + m_padding.left, - allocation.y + m_padding.top); + allocation.x + m_border.left, + allocation.y + m_border.top); /* and perform the merge with the window visible area */ gtk_widget_queue_draw_region(m_widget, region); cairo_region_destroy (region); +#elif VTE_GTK == 4 + if (G_UNLIKELY(!m_invalidated_all)) + return false; + + invalidate_all(); + gtk_widget_queue_draw(m_widget); +#endif + return true; } -static gboolean -update_repeat_timeout (gpointer data) -{ - GList *l, *next; - bool again; - - in_update_timeout = TRUE; - - _vte_debug_print (VTE_DEBUG_WORK, "["); - _vte_debug_print (VTE_DEBUG_TIMEOUT, - "Repeat timeout: %d active\n", - g_list_length(g_active_terminals)); - - for (l = g_active_terminals; l != NULL; l = next) { - auto that = reinterpret_cast(l->data); - - next = l->next; - - if (l != g_active_terminals) { - _vte_debug_print (VTE_DEBUG_WORK, "T"); - } - - that->process(true); - - again = that->invalidate_dirty_rects_and_process_updates(); - if (!again) { - remove_from_active_list(that); - } - } - - _vte_debug_print (VTE_DEBUG_WORK, "]"); - - /* We only stop the timer if no update request was received in this - * past cycle. Technically, always stop this timer object and maybe - * reinstall a new one because we need to delay by the amount of time - * it took to repaint the screen: bug 730732. - */ - if (g_active_terminals == nullptr) { - _vte_debug_print(VTE_DEBUG_TIMEOUT, - "Stopping update timeout\n"); - update_timeout_tag = 0; - again = false; - } else { - update_timeout_tag = - g_timeout_add_full (G_PRIORITY_DEFAULT_IDLE, - VTE_UPDATE_REPEAT_TIMEOUT, - update_repeat_timeout, NULL, - NULL); - again = true; - } - - in_update_timeout = FALSE; - - if (again) { - /* Force us to relinquish the CPU as the child is running - * at full tilt and making us run to keep up... - */ - g_usleep (0); - } else { - /* otherwise free up memory used to capture incoming data */ - vte::base::Chunk::prune(); - } - - return FALSE; /* If we need to go again, we already have a new timer for that. */ -} - -static gboolean -update_timeout (gpointer data) -{ - GList *l, *next; - - in_update_timeout = TRUE; - - _vte_debug_print (VTE_DEBUG_WORK, "{"); - _vte_debug_print (VTE_DEBUG_TIMEOUT, - "Update timeout: %d active\n", - g_list_length(g_active_terminals)); - - remove_process_timeout_source(); - - for (l = g_active_terminals; l != NULL; l = next) { - auto that = reinterpret_cast(l->data); - - next = l->next; - - if (l != g_active_terminals) { - _vte_debug_print (VTE_DEBUG_WORK, "T"); - } - - that->process(true); - - that->invalidate_dirty_rects_and_process_updates(); - } - - _vte_debug_print (VTE_DEBUG_WORK, "}"); - - /* Set a timer such that we do not invalidate for a while. */ - /* This limits the number of times we draw to ~40fps. */ - update_timeout_tag = - g_timeout_add_full (G_PRIORITY_DEFAULT_IDLE, - VTE_UPDATE_REPEAT_TIMEOUT, - update_repeat_timeout, NULL, - NULL); - in_update_timeout = FALSE; - - return FALSE; -} - bool Terminal::write_contents_sync (GOutputStream *stream, - VteWriteFlags flags, - GCancellable *cancellable, - GError **error) + VteWriteFlags flags, + GCancellable *cancellable, + GError **error) { - return _vte_ring_write_contents (m_screen->row_data, - stream, flags, - cancellable, error); + return m_screen->row_data->write_contents(stream, flags, cancellable, error); } /* @@ -10653,14 +11029,15 @@ Terminal::search_rows(pcre2_match_context_8 *match_context, int start, end; long start_col, end_col; VteCharAttributes *ca; - GArray *attrs; - gdouble value, page_size; + VteCharAttrList *attrs; - auto row_text = get_text(start_row, 0, - end_row, 0, - false /* block */, - true /* wrap */, - nullptr); + auto row_text = g_string_new(nullptr); + get_text(start_row, 0, + end_row, 0, + false /* block */, + false /* preserve_empty */, + row_text, + nullptr); int (* match_fn) (const pcre2_code_8 *, PCRE2_SPTR8, PCRE2_SIZE, PCRE2_SIZE, uint32_t, @@ -10703,29 +11080,28 @@ Terminal::search_rows(pcre2_match_context_8 *match_context, end = eo; /* Fetch text again, with attributes */ - g_string_free(row_text, TRUE); - if (!m_search_attrs) - m_search_attrs = g_array_new (FALSE, TRUE, sizeof (VteCharAttributes)); - attrs = m_search_attrs; - row_text = get_text(start_row, 0, - end_row, 0, - false /* block */, - true /* wrap */, - attrs); + g_string_truncate(row_text, 0); + attrs = &m_search_attrs; + get_text(start_row, 0, + end_row, 0, + false /* block */, + false /* preserve_empty */, + row_text, + attrs); - ca = &g_array_index (attrs, VteCharAttributes, start); + ca = vte_char_attr_list_get(attrs, start); start_row = ca->row; start_col = ca->column; - ca = &g_array_index (attrs, VteCharAttributes, end - 1); + ca = vte_char_attr_list_get(attrs, end - 1); end_row = ca->row; end_col = ca->column + ca->columns; g_string_free (row_text, TRUE); select_text(start_col, start_row, end_col, end_row); - /* Quite possibly the math here should not access adjustment directly... */ - value = gtk_adjustment_get_value(m_vadjustment.get()); - page_size = gtk_adjustment_get_page_size(m_vadjustment.get()); + /* Quite possibly the math here should not access the scroll values directly... */ + auto const value = m_screen->scroll_delta; + auto const page_size = m_row_count; if (backward) { if (end_row < value || end_row > value + page_size - 1) queue_adjustment_value_changed_clamped(end_row - page_size + 1); @@ -10744,7 +11120,6 @@ Terminal::search_rows_iter(pcre2_match_context_8 *match_context, vte::grid::row_t end_row, bool backward) { - const VteRowData *row; long iter_start_row, iter_end_row; if (backward) { @@ -10754,8 +11129,7 @@ Terminal::search_rows_iter(pcre2_match_context_8 *match_context, do { iter_start_row--; - row = find_row_data(iter_start_row); - } while (row && row->attr.soft_wrapped); + } while (m_screen->row_data->is_soft_wrapped(iter_start_row - 1)); if (search_rows(match_context, match_data, iter_start_row, iter_end_row, backward)) @@ -10767,9 +11141,8 @@ Terminal::search_rows_iter(pcre2_match_context_8 *match_context, iter_start_row = iter_end_row; do { - row = find_row_data(iter_end_row); iter_end_row++; - } while (row && row->attr.soft_wrapped); + } while (m_screen->row_data->is_soft_wrapped(iter_end_row - 1)); if (search_rows(match_context, match_data, iter_start_row, iter_end_row, backward)) @@ -10796,10 +11169,11 @@ Terminal::search_find (bool backward) */ auto match_context = create_match_context(); - auto match_data = pcre2_match_data_create_8(256 /* should be plenty */, nullptr /* general context */); + auto match_data = vte::take_freeable(pcre2_match_data_create_8(256 /* should be plenty */, + nullptr /* general context */)); - buffer_start_row = _vte_ring_delta (m_screen->row_data); - buffer_end_row = _vte_ring_next (m_screen->row_data); + buffer_start_row = m_screen->row_data->delta(); + buffer_end_row = m_screen->row_data->next(); if (!m_selection_resolved.empty()) { last_start_row = m_selection_resolved.start_row(); @@ -10814,11 +11188,11 @@ Terminal::search_find (bool backward) /* If search fails, we make an empty selection at the last searched * position... */ if (backward) { - if (search_rows_iter (match_context, match_data, + if (search_rows_iter(match_context.get(), match_data.get(), buffer_start_row, last_start_row, backward)) goto found; if (m_search_wrap_around && - search_rows_iter (match_context, match_data, + search_rows_iter(match_context.get(), match_data.get(), last_end_row, buffer_end_row, backward)) goto found; if (!m_selection_resolved.empty()) { @@ -10829,11 +11203,11 @@ Terminal::search_find (bool backward) } match_found = false; } else { - if (search_rows_iter (match_context, match_data, + if (search_rows_iter(match_context.get(), match_data.get(), last_end_row, buffer_end_row, backward)) goto found; if (m_search_wrap_around && - search_rows_iter (match_context, match_data, + search_rows_iter(match_context.get(), match_data.get(), buffer_start_row, last_start_row, backward)) goto found; if (!m_selection_resolved.empty()) { @@ -10847,9 +11221,6 @@ Terminal::search_find (bool backward) found: - pcre2_match_data_free_8(match_data); - pcre2_match_context_free_8(match_context); - return match_found; } @@ -10876,19 +11247,19 @@ Terminal::set_input_enabled (bool enabled) /* FIXME: maybe hide cursor when input disabled, too? */ if (enabled) { - if (gtk_widget_has_focus(m_widget)) - m_real_widget->im_focus_in(); + if (m_has_focus) + widget()->im_focus_in(); - gtk_style_context_remove_class (context, GTK_STYLE_CLASS_READ_ONLY); + gtk_style_context_remove_class (context, VTE_STYLE_CLASS_READ_ONLY); } else { im_reset(); - if (gtk_widget_has_focus(m_widget)) - m_real_widget->im_focus_out(); + if (m_has_focus) + widget()->im_focus_out(); disconnect_pty_write(); _vte_byte_array_clear(m_outgoing); - gtk_style_context_add_class (context, GTK_STYLE_CLASS_READ_ONLY); + gtk_style_context_add_class (context, VTE_STYLE_CLASS_READ_ONLY); } return true; diff --git a/src/vte.csh.in b/src/vte.csh.in index c42e3d8..6bc9d75 100644 --- a/src/vte.csh.in +++ b/src/vte.csh.in @@ -11,7 +11,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # # Red Hat Author(s): Carlos Santos diff --git a/src/vte.gresource.xml b/src/vte.gresource.xml index 1196a60..700e53e 100644 --- a/src/vte.gresource.xml +++ b/src/vte.gresource.xml @@ -2,18 +2,18 @@ diff --git a/src/vte.sh.in b/src/vte.sh.in index 8b3153d..2328a9e 100644 --- a/src/vte.sh.in +++ b/src/vte.sh.in @@ -11,10 +11,10 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # Not bash or zsh? -[ -n "$BASH_VERSION" -o -n "$ZSH_VERSION" ] || return 0 +[ -n "${BASH_VERSION:-}" -o -n "${ZSH_VERSION:-}" ] || return 0 # Not an interactive shell? [[ $- == *i* ]] || return 0 @@ -22,23 +22,93 @@ # Not running under vte? [ "${VTE_VERSION:-0}" -ge 3405 ] || return 0 +# TERM not supported? +case "$TERM" in + xterm*|vte*|gnome*) :;; + *) return 0 ;; +esac + __vte_osc7 () { - printf "\033]7;file://%s%s\033\\" "${HOSTNAME}" "$(@libexecdir@/vte-urlencode-cwd)" + printf "\033]7;file://%s%s\033\\" "${HOSTNAME}" "$(@libexecdir@/vte-urlencode-cwd)" } __vte_prompt_command() { - local pwd='~' - [ "$PWD" != "$HOME" ] && pwd=${PWD/#$HOME\//\~\/} - pwd="${pwd//[[:cntrl:]]}" - printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${pwd}" - __vte_osc7 + local pwd='~' + [ "$PWD" != "$HOME" ] && pwd=${PWD/#$HOME\//\~\/} + pwd="${pwd//[[:cntrl:]]}" + printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${pwd}" + __vte_osc7 } -case "$TERM" in - xterm*|vte*) - [ -n "$BASH_VERSION" ] && PROMPT_COMMAND="__vte_prompt_command" - [ -n "$ZSH_VERSION" ] && precmd_functions+=(__vte_osc7) - ;; -esac +if [[ -n "${BASH_VERSION:-}" ]]; then -true + # Newer bash versions support PROMPT_COMMAND as an array. In this case + # only add the __vte_osc7 function to it, and leave setting the terminal + # title to the outside setup. + # On older bash, we can only overwrite the whole PROMPT_COMMAND, so must + # use the __vte_prompt_command function which also sets the title. + + if [[ "$(declare -p PROMPT_COMMAND 2>&1)" =~ "declare -a" ]]; then + PROMPT_COMMAND+=(__vte_osc7) + else + PROMPT_COMMAND="__vte_prompt_command" + fi + + # Shell integration + if [[ "$PS1" != *\]133\;* ]]; then + + # Enclose the primary prompt between + # ← OSC 133;D;retval ST (report exit status of previous command) + # ← OSC 133;A ST (mark beginning of prompt) + # → OSC 133;B ST (mark end of prompt, beginning of command line) + PS1='\[\e]133;D;$?\e\\\e]133;A\e\\\]'"$PS1"'\[\e]133;B\e\\\]' + + # Prepend OSC 133;L ST for a conditional newline if the previous + # command's output didn't end in one. + # This is not done here by default, in order to provide the default + # visual behavior of shells. Uncomment if you want this feature. + #PS1='\[\e]133;L\e\\\]'"$PS1" + + # iTerm2 doesn't touch the secondary prompt. + # Konsole encloses it between 133;A and 133;B. + # For efficient jumping between commands, we follow iTerm2 by default + # and don't mark PS2 as prompt. Uncomment if you want to mark it. + #PS2='\[\e]133;A\e\\\]'"$PS2"'\[\e]133;B\e\\\]' + + # Mark the beginning of the command's output by OSC 133;C ST. + # '\r' ensures that the kernel's cooked mode has the right idea of + # the column, important for handling TAB followed by BS keypresses. + # Prepend to the user's PS0 to preserve whether it ends in '\r'. + # Note that bash doesn't support the \[ \] markers here. + PS0='\e]133;C\e\\\r'"${PS0:-}" + fi + +elif [[ -n "${ZSH_VERSION:-}" ]]; then + precmd_functions+=(__vte_osc7) + + # Shell integration (see the bash counterpart for more detailed comments) + if [[ "$PS1" != *\]133\;* ]]; then + + # Enclose the primary prompt between D;retval, A and B. + PS1=$'%{\e]133;D;%?\e\\\e]133;A\e\\%}'"$PS1"$'%{\e]133;B\e\\%}' + + # Prepend L for conditional newline (skipped). + #PS1=$'%{\e]133;L\e\\%}'"$PS1" + + # Secondary prompt (skipped). + #PS2=$'%{\e]133;A\e\\%}'"$PS2"$'%{\e]133;B\e\\%}' + + # Mark the beginning of output by C. + # The execution order is: the single function possibly hooked up + # in $preexec, followed by all the functions hooked up in the + # $preexec_functions array. Ensure that we are the very first. + __vte_preexec() { + printf '\e]133;C\e\\\r' + } + preexec_functions=(__vte_preexec $preexec $preexec_functions) + unset preexec + fi + +fi + +return 0 diff --git a/src/vte/meson.build b/src/vte/meson.build index 20ddabc..04b6fa2 100644 --- a/src/vte/meson.build +++ b/src/vte/meson.build @@ -1,36 +1,21 @@ # Copyright © 2018, 2019 Iñigo Martínez # Copyright © 2019 Christian Persch # -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 3 of the License, or (at your -# option) any later version. +# This library is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. # -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser -# General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this library. If not, see . vte_inc = include_directories('.') -libvte_common_enum_headers = files( - # These files contain enums to be extracted by glib-mkenums - 'vtedeprecated.h', - 'vteenums.h', -) - -libvte_gtk3_enum_sources = gnome.mkenums( - 'vtetypebuiltins.h', - sources: libvte_common_enum_headers, - c_template: '../vtetypebuiltins.cc.template', - h_template: '../vtetypebuiltins.h.template', - install_header: true, - install_dir: vte_includedir / vte_gtk3_api_path -) - libvte_common_public_headers = files( 'vte.h', 'vtedeprecated.h', @@ -40,31 +25,111 @@ libvte_common_public_headers = files( 'vtepty.h', 'vteregex.h', 'vteterminal.h', + 'vtetypebuiltins.h', ) +libvte_common_enum_headers = files( + # These files contain enums to be extracted by glib-mkenums + 'vtedeprecated.h', + 'vteenums.h', +) + +# Version header + vteversion_conf = configuration_data() vteversion_conf.set('VTE_MAJOR_VERSION', vte_major_version) vteversion_conf.set('VTE_MINOR_VERSION', vte_minor_version) vteversion_conf.set('VTE_MICRO_VERSION', vte_micro_version) -libvte_version_headers = configure_file( +libvte_common_public_headers += configure_file( input: 'vteversion.h.in', output: '@BASENAME@', configuration: vteversion_conf, install: false, ) +# Install headers, and create the type builtin files. +# Note that we cannot use gnome.mkenums() to create the type builtins +# files, since we need to install the generated header for both gtk3 +# and gtk4, and gnome.mkenums does not work with install_header() +# [https://github.com/mesonbuild/meson/issues/1687]. However, neither does +# custom_target() itself. +# So we need to generate differently-named files for gtk3 and gtk4, and +# install them sepearately, with an extra header that includes the right +# one. And since gnome.mkenums() does not allow specifying the output names +# when using templates, we need to use custom_target() for that. +glib_mkenums = find_program('glib-mkenums') + if get_option('gtk3') - libvte_gtk3_public_headers = libvte_common_public_headers + [libvte_version_headers] + + libvte_gtk3_public_headers = libvte_common_public_headers install_headers( libvte_gtk3_public_headers, subdir: vte_gtk3_api_path ) - # BUG! Due to meson bug, this header cannot be installed with the rule above. Instead, - # use the install_header attribute in the mkenums call, and add the header afterwards - # to the list. - libvte_gtk3_public_headers += libvte_gtk3_enum_sources[1] + libvte_gtk3_public_headers += custom_target( + 'vtetypebuiltins-gtk3.h', + command: [ + glib_mkenums, + '--output', '@OUTPUT@', + '--template', meson.current_source_dir() / '..' / 'vtetypebuiltins.h.template', + '@INPUT@', + ], + input: libvte_common_enum_headers, + install: true, + install_dir: vte_includedir / vte_gtk3_api_path, + output: 'vtetypebuiltins-gtk3.h', + ) + libvte_gtk3_enum_sources = [custom_target( + 'vtetypebuiltins-gtk3.cc', + command: [ + glib_mkenums, + '--output', '@OUTPUT@', + '--template', meson.current_source_dir() / '..' / 'vtetypebuiltins.cc.template', + '@INPUT@', + ], + input: libvte_common_enum_headers, + install: false, + output: 'vtetypebuiltins-gtk3.cc', + ),] +endif + +if get_option('gtk4') + + libvte_gtk4_public_headers = libvte_common_public_headers + + install_headers( + libvte_gtk4_public_headers, + subdir: vte_gtk4_api_path + ) + + libvte_gtk4_public_headers += custom_target( + 'vtetypebuiltins-gtk4.h', + command: [ + glib_mkenums, + '--output', '@OUTPUT@', + '--template', meson.current_source_dir() / '..' / 'vtetypebuiltins.h.template', + '@INPUT@', + ], + input: libvte_common_enum_headers, + install: true, + install_dir: vte_includedir / vte_gtk4_api_path, + output: 'vtetypebuiltins-gtk4.h', + ) + + libvte_gtk4_enum_sources = [custom_target( + 'vtetypebuiltins-gtk4.cc', + command: [ + glib_mkenums, + '--output', '@OUTPUT@', + '--template', meson.current_source_dir() / '..' / 'vtetypebuiltins.cc.template', + '@INPUT@', + ], + input: libvte_common_enum_headers, + install: false, + output: 'vtetypebuiltins-gtk4.cc', + ),] endif diff --git a/src/vte/vte.h b/src/vte/vte.h index 85d267b..c9fa1fe 100644 --- a/src/vte/vte.h +++ b/src/vte/vte.h @@ -1,28 +1,30 @@ /* * Copyright (C) 2001,2002,2003,2009,2010 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ -#ifndef __VTE_VTE_H__ -#define __VTE_VTE_H__ +#pragma once #include +#include #define __VTE_VTE_H_INSIDE__ 1 +/* This must always be included first */ +#include "vtemacros.h" + #include "vteenums.h" #include "vteglobals.h" #include "vtepty.h" @@ -36,5 +38,3 @@ #endif /* !VTE_DISABLE_DEPRECATED */ #undef __VTE_VTE_H_INSIDE__ - -#endif /* __VTE_VTE_H__ */ diff --git a/src/vte/vtedeprecated.h b/src/vte/vtedeprecated.h index 6f6f56c..d48bd62 100644 --- a/src/vte/vtedeprecated.h +++ b/src/vte/vtedeprecated.h @@ -1,32 +1,31 @@ /* * Copyright (C) 2001,2002,2003,2009,2010 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ +#pragma once + #if !defined (__VTE_VTE_H_INSIDE__) && !defined (VTE_COMPILATION) #error "Only can be included directly." #endif -#ifndef __VTE_DEPRECATED_H__ -#define __VTE_DEPRECATED_H__ - #include "vteterminal.h" #include "vtepty.h" +#include "vtemacros.h" -#ifndef VTE_DISABLE_DEPRECATION_WARNINGS +#if !defined(VTE_DISABLE_DEPRECATION_WARNINGS) && !defined(VTE_COMPILATION) #define _VTE_DEPRECATED G_DEPRECATED #else #define _VTE_DEPRECATED @@ -34,29 +33,37 @@ G_BEGIN_DECLS +#if _VTE_GTK == 3 + _VTE_DEPRECATED _VTE_PUBLIC int vte_terminal_match_add_gregex(VteTerminal *terminal, GRegex *gregex, - GRegexMatchFlags gflags) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2); + GRegexMatchFlags gflags) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2); + +#endif /* _VTE_GTK == 3 */ _VTE_DEPRECATED _VTE_PUBLIC void vte_terminal_match_set_cursor(VteTerminal *terminal, int tag, - GdkCursor *cursor) _VTE_GNUC_NONNULL(1); + GdkCursor *cursor) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); +#if _VTE_GTK == 3 _VTE_DEPRECATED _VTE_PUBLIC void vte_terminal_match_set_cursor_type(VteTerminal *terminal, int tag, - GdkCursorType cursor_type) _VTE_GNUC_NONNULL(1); + GdkCursorType cursor_type) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); +#endif _VTE_DEPRECATED _VTE_PUBLIC char *vte_terminal_match_check(VteTerminal *terminal, glong column, glong row, - int *tag) _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; + int *tag) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; + +#if _VTE_GTK == 3 _VTE_DEPRECATED _VTE_PUBLIC @@ -65,17 +72,19 @@ gboolean vte_terminal_event_check_gregex_simple(VteTerminal *terminal, GRegex **regexes, gsize n_regexes, GRegexMatchFlags match_flags, - char **matches) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2); + char **matches) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2); _VTE_DEPRECATED _VTE_PUBLIC void vte_terminal_search_set_gregex (VteTerminal *terminal, GRegex *gregex, - GRegexMatchFlags gflags) _VTE_GNUC_NONNULL(1); + GRegexMatchFlags gflags) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_DEPRECATED _VTE_PUBLIC -GRegex *vte_terminal_search_get_gregex (VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +GRegex *vte_terminal_search_get_gregex (VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +#endif /* _VTE_GTK == 3 */ _VTE_DEPRECATED _VTE_PUBLIC @@ -89,81 +98,120 @@ gboolean vte_terminal_spawn_sync(VteTerminal *terminal, gpointer child_setup_data, GPid *child_pid /* out */, GCancellable *cancellable, - GError **error) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(4); + GError **error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 4); _VTE_DEPRECATED _VTE_PUBLIC -void vte_pty_close (VtePty *pty) _VTE_GNUC_NONNULL(1); +void vte_pty_close (VtePty *pty) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_DEPRECATED _VTE_PUBLIC -void vte_terminal_copy_clipboard(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +void vte_terminal_copy_clipboard(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +#if _VTE_GTK == 3 _VTE_DEPRECATED _VTE_PUBLIC void vte_terminal_get_geometry_hints(VteTerminal *terminal, GdkGeometry *hints, int min_rows, - int min_columns) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2); + int min_columns) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2); _VTE_DEPRECATED _VTE_PUBLIC void vte_terminal_set_geometry_hints_for_window(VteTerminal *terminal, - GtkWindow *window) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2); + GtkWindow *window) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2); + +#endif /* _VTE_GTK == 3 */ _VTE_DEPRECATED _VTE_PUBLIC -const char *vte_terminal_get_icon_title(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +const char *vte_terminal_get_icon_title(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_DEPRECATED _VTE_PUBLIC gboolean vte_terminal_set_encoding(VteTerminal *terminal, const char *codeset, - GError **error) _VTE_GNUC_NONNULL(1); + GError **error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_DEPRECATED _VTE_PUBLIC -const char *vte_terminal_get_encoding(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +const char *vte_terminal_get_encoding(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); +typedef gboolean (*VteSelectionFunc)(VteTerminal *terminal, + glong column, + glong row, + gpointer data) _VTE_GNUC_NONNULL(1) _VTE_DEPRECATED; + +G_GNUC_BEGIN_IGNORE_DEPRECATIONS +_VTE_DEPRECATED +_VTE_PUBLIC +char *vte_terminal_get_text(VteTerminal *terminal, + VteSelectionFunc is_selected, + gpointer user_data, + GArray *attributes) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; +G_GNUC_END_IGNORE_DEPRECATIONS + +G_GNUC_BEGIN_IGNORE_DEPRECATIONS +_VTE_DEPRECATED +_VTE_PUBLIC +char *vte_terminal_get_text_range(VteTerminal *terminal, + glong start_row, glong start_col, + glong end_row, glong end_col, + VteSelectionFunc is_selected, + gpointer user_data, + GArray *attributes) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; +G_GNUC_END_IGNORE_DEPRECATIONS + +G_GNUC_BEGIN_IGNORE_DEPRECATIONS _VTE_DEPRECATED _VTE_PUBLIC char *vte_terminal_get_text_include_trailing_spaces(VteTerminal *terminal, VteSelectionFunc is_selected, gpointer user_data, - GArray *attributes) _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; + GArray *attributes) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; +G_GNUC_END_IGNORE_DEPRECATIONS _VTE_DEPRECATED _VTE_PUBLIC void vte_terminal_set_rewrap_on_resize(VteTerminal *terminal, - gboolean rewrap) _VTE_GNUC_NONNULL(1); + gboolean rewrap) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_DEPRECATED _VTE_PUBLIC -gboolean vte_terminal_get_rewrap_on_resize(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gboolean vte_terminal_get_rewrap_on_resize(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_DEPRECATED _VTE_PUBLIC void vte_terminal_set_allow_bold(VteTerminal *terminal, - gboolean allow_bold) _VTE_GNUC_NONNULL(1); + gboolean allow_bold) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_DEPRECATED _VTE_PUBLIC -gboolean vte_terminal_get_allow_bold(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gboolean vte_terminal_get_allow_bold(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_DEPRECATED _VTE_PUBLIC void vte_terminal_feed_child_binary(VteTerminal *terminal, const guint8 *data, - gsize length) _VTE_GNUC_NONNULL(1); + gsize length) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_DEPRECATED _VTE_PUBLIC -char **vte_get_encodings(gboolean include_aliases); +char **vte_get_encodings(gboolean include_aliases) _VTE_CXX_NOEXCEPT; _VTE_DEPRECATED _VTE_PUBLIC -gboolean vte_get_encoding_supported(const char *encoding); +gboolean vte_get_encoding_supported(const char *encoding) _VTE_CXX_NOEXCEPT; + +typedef struct _VteCharAttributes VteCharAttributes _VTE_DEPRECATED; + +/* The structure we return as the supplemental attributes for strings. */ +struct _VteCharAttributes { + /*< private >*/ + long row, column; /* logical column */ + PangoColor fore, back; + guint underline:1, strikethrough:1, columns:4; +} _VTE_DEPRECATED; G_END_DECLS #undef _VTE_DEPRECATED - -#endif /* !__VTE_DEPRECATED__H__ */ diff --git a/src/vte/vteenums.h b/src/vte/vteenums.h index 84d07a0..3266727 100644 --- a/src/vte/vteenums.h +++ b/src/vte/vteenums.h @@ -1,23 +1,21 @@ /* * Copyright (C) 2001,2002,2003,2009,2010 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ -#ifndef __VTE_VTE_ENUMS_H__ -#define __VTE_VTE_ENUMS_H__ +#pragma once #if !defined (__VTE_VTE_H_INSIDE__) && !defined (VTE_COMPILATION) #error "Only can be included directly." @@ -167,7 +165,7 @@ typedef enum { * @VTE_FORMAT_TEXT: Export as plain text * @VTE_FORMAT_HTML: Export as HTML formatted text * - * An enumeratio type that can be used to specify the format the selection + * An enumeration type that can be used to specify the format the selection * should be copied to the clipboard in. * * Since: 0.50 @@ -177,6 +175,43 @@ typedef enum { VTE_FORMAT_HTML = 2 } VteFormat; -G_END_DECLS +/** + * VteFeatureFlags: + * @VTE_FEATURE_FLAG_BIDI: whether VTE was built with bidirectional text support + * @VTE_FEATURE_FLAG_ICU: whether VTE was built with ICU support + * @VTE_FEATURE_FLAG_SYSTEMD: whether VTE was built with systemd support + * @VTE_FEATURE_FLAG_SIXEL: whether VTE was built with SIXEL support + * @VTE_FEATURE_FLAGS_MASK: mask of all feature flags + * + * An enumeration type for features. + * + * Since: 0.62 + */ +typedef enum /*< skip >*/ { + VTE_FEATURE_FLAG_BIDI = 1ULL << 0, + VTE_FEATURE_FLAG_ICU = 1ULL << 1, + VTE_FEATURE_FLAG_SYSTEMD = 1ULL << 2, + VTE_FEATURE_FLAG_SIXEL = 1ULL << 3, -#endif /* __VTE_VTE_ENUMS_H__ */ + VTE_FEATURE_FLAGS_MASK = 0xFFFFFFFFFFFFFFFFULL, /* force enum to 64 bit */ +} VteFeatureFlags; + + +/** + * VteAlign: + * @VTE_ALIGN_START: align to left/top + * @VTE_ALIGN_CENTER: align to centre + * @VTE_ALIGN_END: align to right/bottom + * + * An enumeration type that can be used to specify how the terminal + * uses extra allocated space. + * + * Since: 0.76 + */ +typedef enum { + VTE_ALIGN_START = 0U, + VTE_ALIGN_CENTER = 1U, + VTE_ALIGN_END = 2U, +} VteAlign; + +G_END_DECLS diff --git a/src/vte/vteglobals.h b/src/vte/vteglobals.h index a2add13..b88be08 100644 --- a/src/vte/vteglobals.h +++ b/src/vte/vteglobals.h @@ -1,42 +1,42 @@ /* * Copyright (C) 2001,2002,2003,2009,2010 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ -#ifndef __VTE_VTE_GLOBALS_H__ -#define __VTE_VTE_GLOBALS_H__ +#pragma once #include #include "vtemacros.h" +#include "vteenums.h" G_BEGIN_DECLS _VTE_PUBLIC -char *vte_get_user_shell(void); +char *vte_get_user_shell(void) _VTE_CXX_NOEXCEPT; _VTE_PUBLIC -const char *vte_get_features (void); +const char *vte_get_features (void) _VTE_CXX_NOEXCEPT; + +_VTE_PUBLIC +VteFeatureFlags vte_get_feature_flags(void) _VTE_CXX_NOEXCEPT; #define VTE_TEST_FLAGS_NONE (G_GUINT64_CONSTANT(0)) #define VTE_TEST_FLAGS_ALL (~G_GUINT64_CONSTANT(0)) _VTE_PUBLIC -void vte_set_test_flags(guint64 flags); +void vte_set_test_flags(guint64 flags) _VTE_CXX_NOEXCEPT; G_END_DECLS - -#endif /* __VTE_VTE_GLOBALS_H__ */ diff --git a/src/vte/vtemacros.h b/src/vte/vtemacros.h index 3f8acf5..c130099 100644 --- a/src/vte/vtemacros.h +++ b/src/vte/vtemacros.h @@ -1,28 +1,38 @@ /* * Copyright © 2014 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ -#ifndef __VTE_VTE_MACROS_H__ -#define __VTE_VTE_MACROS_H__ +#pragma once #if !defined (__VTE_VTE_H_INSIDE__) && !defined (VTE_COMPILATION) #error "Only can be included directly." #endif +#include + +#if GTK_CHECK_VERSION(4,0,0) +#define _VTE_GTK 4 +#elif GTK_CHECK_VERSION(3,90,0) +#error gtk+ version not supported +#elif GTK_CHECK_VERSION(3,0,0) +#define _VTE_GTK 3 +#else +#error gtk+ version unknown +#endif + #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 6) #define _VTE_GNUC_PACKED __attribute__((__packed__)) #else @@ -30,15 +40,22 @@ #endif /* !__GNUC__ */ #ifdef VTE_COMPILATION -#define _VTE_GNUC_NONNULL(position) +#define _VTE_GNUC_NONNULL(...) #else -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2) -#define _VTE_GNUC_NONNULL(position) __attribute__((__nonnull__(position))) +#if defined(__GNUC__) +#define _VTE_GNUC_NONNULL(...) __attribute__((__nonnull__(__VA_ARGS__))) #else -#define _VTE_GNUC_NONNULL(position) +#define _VTE_GNUC_NONNULL(...) #endif #endif #define _VTE_PUBLIC __attribute__((__visibility__("default"))) extern -#endif /* __VTE_VTE_MACROS_H__ */ +#if defined(VTE_COMPILATION) && defined(__cplusplus) +#if __cplusplus >= 201103L +#define _VTE_CXX_NOEXCEPT noexcept +#endif +#endif +#ifndef _VTE_CXX_NOEXCEPT +#define _VTE_CXX_NOEXCEPT +#endif diff --git a/src/vte/vtepty.h b/src/vte/vtepty.h index 0682274..f6348cd 100644 --- a/src/vte/vtepty.h +++ b/src/vte/vtepty.h @@ -1,23 +1,21 @@ /* * Copyright © 2009, 2010 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ -#ifndef __VTE_VTE_PTY_H__ -#define __VTE_VTE_PTY_H__ +#pragma once #if !defined (__VTE_VTE_H_INSIDE__) && !defined (VTE_COMPILATION) #error "Only can be included directly." @@ -35,7 +33,7 @@ G_BEGIN_DECLS #define VTE_SPAWN_REQUIRE_SYSTEMD_SCOPE (1 << 27) _VTE_PUBLIC -GQuark vte_pty_error_quark (void); +GQuark vte_pty_error_quark (void) _VTE_CXX_NOEXCEPT; /** * VTE_PTY_ERROR: @@ -63,37 +61,35 @@ GType vte_pty_get_type (void); _VTE_PUBLIC VtePty *vte_pty_new_sync (VtePtyFlags flags, GCancellable *cancellable, - GError **error); + GError **error) _VTE_CXX_NOEXCEPT; _VTE_PUBLIC VtePty *vte_pty_new_foreign_sync (int fd, GCancellable *cancellable, - GError **error); + GError **error) _VTE_CXX_NOEXCEPT; _VTE_PUBLIC -int vte_pty_get_fd (VtePty *pty) _VTE_GNUC_NONNULL(1); +int vte_pty_get_fd (VtePty *pty) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -void vte_pty_child_setup (VtePty *pty) _VTE_GNUC_NONNULL(1); +void vte_pty_child_setup (VtePty *pty) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC gboolean vte_pty_get_size (VtePty *pty, int *rows, int *columns, - GError **error) _VTE_GNUC_NONNULL(1); + GError **error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC gboolean vte_pty_set_size (VtePty *pty, int rows, int columns, - GError **error) _VTE_GNUC_NONNULL(1); + GError **error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC gboolean vte_pty_set_utf8 (VtePty *pty, gboolean utf8, - GError **error) _VTE_GNUC_NONNULL(1); - -G_DEFINE_AUTOPTR_CLEANUP_FUNC(VtePty, g_object_unref) + GError **error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_pty_spawn_async(VtePty *pty, @@ -107,14 +103,32 @@ void vte_pty_spawn_async(VtePty *pty, int timeout, GCancellable *cancellable, GAsyncReadyCallback callback, - gpointer user_data) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(3); + gpointer user_data) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 3); + +_VTE_PUBLIC +void vte_pty_spawn_with_fds_async(VtePty *pty, + char const* working_directory, + char const* const* argv, + char const* const* envv, + int const* fds, + int n_fds, + int const* map_fds, + int n_map_fds, + GSpawnFlags spawn_flags, + GSpawnChildSetupFunc child_setup, + gpointer child_setup_data, + GDestroyNotify child_setup_data_destroy, + int timeout, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 3); _VTE_PUBLIC gboolean vte_pty_spawn_finish(VtePty *pty, GAsyncResult *result, GPid *child_pid /* out */, - GError **error) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2); + GError **error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC(VtePty, g_object_unref) G_END_DECLS - -#endif /* __VTE_VTE_PTY_H__ */ diff --git a/src/vte/vteregex.h b/src/vte/vteregex.h index 9001d44..10c5088 100644 --- a/src/vte/vteregex.h +++ b/src/vte/vteregex.h @@ -1,22 +1,21 @@ /* * Copyright © 2015 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ -#ifndef __VTE_VTE_REGEX_H__ -#define __VTE_VTE_REGEX_H__ +#pragma once #if !defined (__VTE_VTE_H_INSIDE__) && !defined (VTE_COMPILATION) #error "Only can be included directly." @@ -45,37 +44,51 @@ GQuark vte_regex_error_quark (void); #define VTE_REGEX_FLAGS_DEFAULT (0x00080000u | 0x40000000u | 0x00100000u) _VTE_PUBLIC -VteRegex *vte_regex_ref (VteRegex *regex) _VTE_GNUC_NONNULL(1); +VteRegex *vte_regex_ref (VteRegex *regex) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -VteRegex *vte_regex_unref (VteRegex *regex) _VTE_GNUC_NONNULL(1); +VteRegex *vte_regex_unref (VteRegex *regex) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC VteRegex *vte_regex_new_for_match (const char *pattern, gssize pattern_length, guint32 flags, - GError **error) _VTE_GNUC_NONNULL(1); + GError **error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +VteRegex *vte_regex_new_for_match_full (char const* pattern, + gssize pattern_length, + uint32_t flags, + uint32_t extra_flags, + gsize* error_offset, + GError** error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC VteRegex *vte_regex_new_for_search (const char *pattern, gssize pattern_length, guint32 flags, - GError **error) _VTE_GNUC_NONNULL(1); + GError **error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +VteRegex *vte_regex_new_for_search_full (char const* pattern, + gssize pattern_length, + uint32_t flags, + uint32_t extra_flags, + gsize* error_offset, + GError** error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC gboolean vte_regex_jit (VteRegex *regex, guint32 flags, - GError **error) _VTE_GNUC_NONNULL(1); + GError **error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC char *vte_regex_substitute(VteRegex *regex, const char *subject, const char *replacement, guint32 flags, - GError **error) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2) _VTE_GNUC_NONNULL(3) G_GNUC_MALLOC; + GError **error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2, 3) G_GNUC_MALLOC; G_DEFINE_AUTOPTR_CLEANUP_FUNC(VteRegex, vte_regex_unref) G_END_DECLS - -#endif /* __VTE_VTE_REGEX_H__ */ diff --git a/src/vte/vteterminal.h b/src/vte/vteterminal.h index 3101251..a9e1e49 100644 --- a/src/vte/vteterminal.h +++ b/src/vte/vteterminal.h @@ -1,23 +1,21 @@ /* * Copyright (C) 2001,2002,2003,2009,2010 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ -#ifndef __VTE_VTE_TERMINAL_H__ -#define __VTE_VTE_TERMINAL_H__ +#pragma once #if !defined (__VTE_VTE_H_INSIDE__) && !defined (VTE_COMPILATION) #error "Only can be included directly." @@ -25,6 +23,7 @@ #include #include +#include #include #include @@ -35,6 +34,10 @@ G_BEGIN_DECLS +#define VTE_TYPE_EVENT_CONTEXT (vte_event_context_get_type()) + +typedef struct _VteEventContext VteEventContext; + #define VTE_TYPE_TERMINAL (vte_terminal_get_type()) #define VTE_TERMINAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VTE_TYPE_TERMINAL, VteTerminal)) #define VTE_TERMINAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VTE_TYPE_TERMINAL, VteTerminalClass)) @@ -45,15 +48,16 @@ G_BEGIN_DECLS typedef struct _VteTerminal VteTerminal; typedef struct _VteTerminalClass VteTerminalClass; typedef struct _VteTerminalClassPrivate VteTerminalClassPrivate; -typedef struct _VteCharAttributes VteCharAttributes; /** * VteTerminal: */ struct _VteTerminal { GtkWidget widget; +#if _VTE_GTK == 3 /*< private >*/ gpointer *_unused_padding[1]; /* FIXMEchpe: remove this field on the next ABI break */ +#endif }; /** @@ -95,50 +99,58 @@ struct _VteTerminalClass { void (*increase_font_size)(VteTerminal* terminal); void (*decrease_font_size)(VteTerminal* terminal); +#if _VTE_GTK == 3 + /*< private >*/ void (*text_modified)(VteTerminal* terminal); void (*text_inserted)(VteTerminal* terminal); void (*text_deleted)(VteTerminal* terminal); void (*text_scrolled)(VteTerminal* terminal, gint delta); +#endif /* _VTE_GTK == 3 */ + + /*< protected >*/ void (*copy_clipboard)(VteTerminal* terminal); void (*paste_clipboard)(VteTerminal* terminal); void (*bell)(VteTerminal* terminal); - /* Padding for future expansion. */ - gpointer padding[16]; +#if _VTE_GTK == 3 + /* Compatibility padding due to fedora patches intruding on our ABI */ + /*< private >*/ + gpointer _extra_padding[3]; +#endif /* _VTE_GTK == 3 */ + void (*setup_context_menu)(VteTerminal* terminal, + VteEventContext const* context); + + /* Add new vfuncs just above, and subtract from the padding below. */ + + /* Padding for future expansion. */ +#if _VTE_GTK == 3 + gpointer _padding[12]; +#elif _VTE_GTK == 4 + gpointer _padding[15]; +#endif /* _VTE_GTK */ + +// FIXMEgtk4 use class private data instead VteTerminalClassPrivate *priv; }; -/* The structure we return as the supplemental attributes for strings. */ -struct _VteCharAttributes { - /*< private >*/ - long row, column; /* logical column */ - PangoColor fore, back; - guint underline:1, strikethrough:1, columns:4; -}; - -typedef gboolean (*VteSelectionFunc)(VteTerminal *terminal, - glong column, - glong row, - gpointer data) _VTE_GNUC_NONNULL(1); - /* The widget's type. */ _VTE_PUBLIC GType vte_terminal_get_type(void); _VTE_PUBLIC -GtkWidget *vte_terminal_new(void); +GtkWidget *vte_terminal_new(void) _VTE_CXX_NOEXCEPT; _VTE_PUBLIC VtePty *vte_terminal_pty_new_sync (VteTerminal *terminal, VtePtyFlags flags, GCancellable *cancellable, - GError **error) _VTE_GNUC_NONNULL(1); + GError **error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_watch_child (VteTerminal *terminal, - GPid child_pid) _VTE_GNUC_NONNULL(1); + GPid child_pid) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); typedef void (* VteTerminalSpawnAsyncCallback) (VteTerminal *terminal, GPid pid, @@ -151,323 +163,421 @@ void vte_terminal_spawn_async(VteTerminal *terminal, const char *working_directory, char **argv, char **envv, - GSpawnFlags spawn_flags_, + GSpawnFlags spawn_flags, GSpawnChildSetupFunc child_setup, gpointer child_setup_data, GDestroyNotify child_setup_data_destroy, int timeout, GCancellable *cancellable, VteTerminalSpawnAsyncCallback callback, - gpointer user_data) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(4); + gpointer user_data) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 4); + +_VTE_PUBLIC +void vte_terminal_spawn_with_fds_async(VteTerminal* terminal, + VtePtyFlags pty_flags, + char const* working_directory, + char const* const* argv, + char const* const* envv, + int const* fds, + int n_fds, + int const* map_fds, + int n_map_fds, + GSpawnFlags spawn_flags, + GSpawnChildSetupFunc child_setup, + gpointer child_setup_data, + GDestroyNotify child_setup_data_destroy, + int timeout, + GCancellable* cancellable, + VteTerminalSpawnAsyncCallback callback, + gpointer user_data) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 4); /* Send data to the terminal to display, or to the terminal's forked command * to handle in some way. If it's 'cat', they should be the same. */ _VTE_PUBLIC void vte_terminal_feed(VteTerminal *terminal, const char *data, - gssize length) _VTE_GNUC_NONNULL(1); + gssize length) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_feed_child(VteTerminal *terminal, const char *text, - gssize length) _VTE_GNUC_NONNULL(1); + gssize length) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* Copy currently-selected text to the clipboard, or from the clipboard to * the terminal. */ _VTE_PUBLIC void vte_terminal_copy_clipboard_format(VteTerminal *terminal, - VteFormat format) _VTE_GNUC_NONNULL(1); + VteFormat format) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -void vte_terminal_paste_clipboard(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +void vte_terminal_paste_clipboard(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -void vte_terminal_copy_primary(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +void vte_terminal_paste_text(VteTerminal *terminal, + char const* text) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -void vte_terminal_paste_primary(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +void vte_terminal_copy_primary(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -void vte_terminal_select_all(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +void vte_terminal_paste_primary(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -void vte_terminal_unselect_all(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +void vte_terminal_select_all(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); +_VTE_PUBLIC +void vte_terminal_unselect_all(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* By-word selection */ _VTE_PUBLIC void vte_terminal_set_word_char_exceptions(VteTerminal *terminal, - const char *exceptions) _VTE_GNUC_NONNULL(1); + const char *exceptions) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -const char *vte_terminal_get_word_char_exceptions(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +const char *vte_terminal_get_word_char_exceptions(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* Set the terminal's size. */ _VTE_PUBLIC void vte_terminal_set_size(VteTerminal *terminal, - glong columns, glong rows) _VTE_GNUC_NONNULL(1); + glong columns, glong rows) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_font_scale(VteTerminal *terminal, - gdouble scale) _VTE_GNUC_NONNULL(1); + gdouble scale) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -gdouble vte_terminal_get_font_scale(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gdouble vte_terminal_get_font_scale(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +void vte_terminal_set_font_options(VteTerminal *terminal, + cairo_font_options_t const* font_options) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); +_VTE_PUBLIC +cairo_font_options_t const* vte_terminal_get_font_options(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_cell_width_scale(VteTerminal *terminal, - double scale) _VTE_GNUC_NONNULL(1); + double scale) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -double vte_terminal_get_cell_width_scale(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +double vte_terminal_get_cell_width_scale(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_cell_height_scale(VteTerminal *terminal, - double scale) _VTE_GNUC_NONNULL(1); + double scale) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -double vte_terminal_get_cell_height_scale(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +double vte_terminal_get_cell_height_scale(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* Set various on-off settings. */ _VTE_PUBLIC void vte_terminal_set_text_blink_mode(VteTerminal *terminal, - VteTextBlinkMode text_blink_mode) _VTE_GNUC_NONNULL(1); + VteTextBlinkMode text_blink_mode) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -VteTextBlinkMode vte_terminal_get_text_blink_mode(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +VteTextBlinkMode vte_terminal_get_text_blink_mode(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_audible_bell(VteTerminal *terminal, - gboolean is_audible) _VTE_GNUC_NONNULL(1); + gboolean is_audible) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -gboolean vte_terminal_get_audible_bell(VteTerminal *terminal); +gboolean vte_terminal_get_audible_bell(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_scroll_on_output(VteTerminal *terminal, - gboolean scroll) _VTE_GNUC_NONNULL(1); + gboolean scroll) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -gboolean vte_terminal_get_scroll_on_output(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +void vte_terminal_set_scroll_on_insert(VteTerminal *terminal, + gboolean scroll) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); +_VTE_PUBLIC +gboolean vte_terminal_get_scroll_on_insert(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); +_VTE_PUBLIC +gboolean vte_terminal_get_scroll_on_output(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_scroll_on_keystroke(VteTerminal *terminal, - gboolean scroll); + gboolean scroll) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -gboolean vte_terminal_get_scroll_on_keystroke(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gboolean vte_terminal_get_scroll_on_keystroke(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); +_VTE_PUBLIC +void vte_terminal_set_enable_fallback_scrolling(VteTerminal *terminal, + gboolean enable) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); +_VTE_PUBLIC +gboolean vte_terminal_get_enable_fallback_scrolling(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +void vte_terminal_set_scroll_unit_is_pixels(VteTerminal *terminal, + gboolean enable) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); +_VTE_PUBLIC +gboolean vte_terminal_get_scroll_unit_is_pixels(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* Set the color scheme. */ _VTE_PUBLIC void vte_terminal_set_color_bold(VteTerminal *terminal, - const GdkRGBA *bold) _VTE_GNUC_NONNULL(1); + const GdkRGBA *bold) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_color_foreground(VteTerminal *terminal, - const GdkRGBA *foreground) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2); + const GdkRGBA *foreground) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2); _VTE_PUBLIC void vte_terminal_set_color_background(VteTerminal *terminal, - const GdkRGBA *background) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2); + const GdkRGBA *background) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2); _VTE_PUBLIC void vte_terminal_set_color_cursor(VteTerminal *terminal, - const GdkRGBA *cursor_background) _VTE_GNUC_NONNULL(1); + const GdkRGBA *cursor_background) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_color_cursor_foreground(VteTerminal *terminal, - const GdkRGBA *cursor_foreground) _VTE_GNUC_NONNULL(1); + const GdkRGBA *cursor_foreground) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_color_highlight(VteTerminal *terminal, - const GdkRGBA *highlight_background) _VTE_GNUC_NONNULL(1); + const GdkRGBA *highlight_background) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_color_highlight_foreground(VteTerminal *terminal, - const GdkRGBA *highlight_foreground) _VTE_GNUC_NONNULL(1); + const GdkRGBA *highlight_foreground) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_colors(VteTerminal *terminal, const GdkRGBA *foreground, const GdkRGBA *background, const GdkRGBA *palette, - gsize palette_size) _VTE_GNUC_NONNULL(1); + gsize palette_size) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -void vte_terminal_set_default_colors(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +void vte_terminal_set_default_colors(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* Set whether or not the cursor blinks. */ _VTE_PUBLIC void vte_terminal_set_cursor_blink_mode(VteTerminal *terminal, - VteCursorBlinkMode mode) _VTE_GNUC_NONNULL(1); + VteCursorBlinkMode mode) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -VteCursorBlinkMode vte_terminal_get_cursor_blink_mode(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +VteCursorBlinkMode vte_terminal_get_cursor_blink_mode(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* Set cursor shape */ _VTE_PUBLIC void vte_terminal_set_cursor_shape(VteTerminal *terminal, - VteCursorShape shape) _VTE_GNUC_NONNULL(1); + VteCursorShape shape) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -VteCursorShape vte_terminal_get_cursor_shape(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +VteCursorShape vte_terminal_get_cursor_shape(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* Set the number of scrollback lines, above or at an internal minimum. */ _VTE_PUBLIC void vte_terminal_set_scrollback_lines(VteTerminal *terminal, - glong lines) _VTE_GNUC_NONNULL(1); + glong lines) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -glong vte_terminal_get_scrollback_lines(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +glong vte_terminal_get_scrollback_lines(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* Set or retrieve the current font. */ _VTE_PUBLIC void vte_terminal_set_font(VteTerminal *terminal, - const PangoFontDescription *font_desc) _VTE_GNUC_NONNULL(1); + const PangoFontDescription *font_desc) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -const PangoFontDescription *vte_terminal_get_font(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +const PangoFontDescription *vte_terminal_get_font(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_bold_is_bright(VteTerminal *terminal, - gboolean bold_is_bright) _VTE_GNUC_NONNULL(1); + gboolean bold_is_bright) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -gboolean vte_terminal_get_bold_is_bright(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gboolean vte_terminal_get_bold_is_bright(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_allow_hyperlink(VteTerminal *terminal, - gboolean allow_hyperlink) _VTE_GNUC_NONNULL(1); + gboolean allow_hyperlink) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -gboolean vte_terminal_get_allow_hyperlink(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gboolean vte_terminal_get_allow_hyperlink(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* Check if the terminal is the current selection owner. */ _VTE_PUBLIC -gboolean vte_terminal_get_has_selection(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gboolean vte_terminal_get_has_selection(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +char* vte_terminal_get_text_selected(VteTerminal* terminal, + VteFormat format) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; + +_VTE_PUBLIC +char* vte_terminal_get_text_selected_full(VteTerminal* terminal, + VteFormat format, + gsize* length) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; /* Set what happens when the user strikes backspace or delete. */ _VTE_PUBLIC void vte_terminal_set_backspace_binding(VteTerminal *terminal, - VteEraseBinding binding) _VTE_GNUC_NONNULL(1); + VteEraseBinding binding) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_delete_binding(VteTerminal *terminal, - VteEraseBinding binding) _VTE_GNUC_NONNULL(1); + VteEraseBinding binding) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* BiDi and shaping */ _VTE_PUBLIC void vte_terminal_set_enable_bidi(VteTerminal *terminal, - gboolean enable_bidi) _VTE_GNUC_NONNULL(1); + gboolean enable_bidi) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -gboolean vte_terminal_get_enable_bidi(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gboolean vte_terminal_get_enable_bidi(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_enable_shaping(VteTerminal *terminal, - gboolean enable_shaping) _VTE_GNUC_NONNULL(1); + gboolean enable_shaping) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -gboolean vte_terminal_get_enable_shaping(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gboolean vte_terminal_get_enable_shaping(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* Manipulate the autohide setting. */ _VTE_PUBLIC void vte_terminal_set_mouse_autohide(VteTerminal *terminal, - gboolean setting) _VTE_GNUC_NONNULL(1); + gboolean setting) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -gboolean vte_terminal_get_mouse_autohide(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gboolean vte_terminal_get_mouse_autohide(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* Reset the terminal, optionally clearing the tab stops and line history. */ _VTE_PUBLIC void vte_terminal_reset(VteTerminal *terminal, gboolean clear_tabstops, - gboolean clear_history) _VTE_GNUC_NONNULL(1); + gboolean clear_history) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); -/* Read the contents of the terminal, using a callback function to determine - * if a particular location on the screen (0-based) is interesting enough to - * include. Each byte in the returned string will have a corresponding - * VteCharAttributes structure in the passed GArray, if the array was not %NULL. - * Note that it will have one entry per byte, not per character, so indexes - * should match up exactly. */ _VTE_PUBLIC -char *vte_terminal_get_text(VteTerminal *terminal, - VteSelectionFunc is_selected, - gpointer user_data, - GArray *attributes) _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; +char* vte_terminal_get_text_format(VteTerminal* terminal, + VteFormat format) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; + _VTE_PUBLIC -char *vte_terminal_get_text_range(VteTerminal *terminal, - glong start_row, glong start_col, - glong end_row, glong end_col, - VteSelectionFunc is_selected, - gpointer user_data, - GArray *attributes) _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; +char* vte_terminal_get_text_range_format(VteTerminal* terminal, + VteFormat format, + long start_row, + long start_col, + long end_row, + long end_col, + gsize* length) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; + _VTE_PUBLIC void vte_terminal_get_cursor_position(VteTerminal *terminal, glong *column, - glong *row) _VTE_GNUC_NONNULL(1); + glong *row) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +#if _VTE_GTK == 3 _VTE_PUBLIC char *vte_terminal_hyperlink_check_event(VteTerminal *terminal, - GdkEvent *event) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2) G_GNUC_MALLOC; + GdkEvent *event) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2) G_GNUC_MALLOC; + +#elif _VTE_GTK == 4 + +_VTE_PUBLIC +char* vte_terminal_check_hyperlink_at(VteTerminal* terminal, + double x, + double y) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; + +#endif /* _VTE_GTK */ /* Add a matching expression, returning the tag the widget assigns to that * expression. */ _VTE_PUBLIC int vte_terminal_match_add_regex(VteTerminal *terminal, VteRegex *regex, - guint32 flags) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2); + guint32 flags) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2); /* Set the cursor to be used when the pointer is over a given match. */ _VTE_PUBLIC void vte_terminal_match_set_cursor_name(VteTerminal *terminal, int tag, - const char *cursor_name) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(3); + const char *cursor_name) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 3); _VTE_PUBLIC void vte_terminal_match_remove(VteTerminal *terminal, - int tag) _VTE_GNUC_NONNULL(1); + int tag) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -void vte_terminal_match_remove_all(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +void vte_terminal_match_remove_all(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* Check if a given cell on the screen contains part of a matched string. If * it does, return the string, and store the match tag in the optional tag * argument. */ +#if _VTE_GTK == 3 + _VTE_PUBLIC char *vte_terminal_match_check_event(VteTerminal *terminal, GdkEvent *event, - int *tag) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2) G_GNUC_MALLOC; + int *tag) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2) G_GNUC_MALLOC; + +_VTE_PUBLIC +char **vte_terminal_event_check_regex_array(VteTerminal *terminal, + GdkEvent *event, + VteRegex **regexes, + gsize n_regexes, + guint32 match_flags, + gsize *n_matches) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2) G_GNUC_MALLOC; _VTE_PUBLIC gboolean vte_terminal_event_check_regex_simple(VteTerminal *terminal, GdkEvent *event, VteRegex **regexes, gsize n_regexes, guint32 match_flags, - char **matches) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2); + char **matches) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2); + +#elif _VTE_GTK == 4 + +_VTE_PUBLIC +char* vte_terminal_check_match_at(VteTerminal* terminal, + double x, + double y, + int* tag) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; + +_VTE_PUBLIC +char** vte_terminal_check_regex_array_at(VteTerminal* terminal, + double x, + double y, + VteRegex** regexes, + gsize n_regexes, + guint32 match_flags, + gsize* n_matches) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; + +_VTE_PUBLIC +gboolean vte_terminal_check_regex_simple_at(VteTerminal* terminal, + double x, + double y, + VteRegex** regexes, + gsize n_regexes, + guint32 match_flags, + char** matches) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +#endif /* _VTE_GTK */ _VTE_PUBLIC void vte_terminal_search_set_regex (VteTerminal *terminal, VteRegex *regex, - guint32 flags) _VTE_GNUC_NONNULL(1); + guint32 flags) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -VteRegex *vte_terminal_search_get_regex (VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +VteRegex *vte_terminal_search_get_regex (VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_search_set_wrap_around (VteTerminal *terminal, - gboolean wrap_around) _VTE_GNUC_NONNULL(1); + gboolean wrap_around) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -gboolean vte_terminal_search_get_wrap_around (VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gboolean vte_terminal_search_get_wrap_around (VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -gboolean vte_terminal_search_find_previous (VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gboolean vte_terminal_search_find_previous (VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -gboolean vte_terminal_search_find_next (VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gboolean vte_terminal_search_find_next (VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* CJK compatibility setting */ _VTE_PUBLIC void vte_terminal_set_cjk_ambiguous_width(VteTerminal *terminal, - int width) _VTE_GNUC_NONNULL(1); + int width) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -int vte_terminal_get_cjk_ambiguous_width(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +int vte_terminal_get_cjk_ambiguous_width(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_pty(VteTerminal *terminal, - VtePty *pty) _VTE_GNUC_NONNULL(1); + VtePty *pty) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -VtePty *vte_terminal_get_pty(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +VtePty *vte_terminal_get_pty(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* Accessors for bindings. */ _VTE_PUBLIC -glong vte_terminal_get_char_width(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +glong vte_terminal_get_char_width(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -glong vte_terminal_get_char_height(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +glong vte_terminal_get_char_height(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -glong vte_terminal_get_row_count(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +glong vte_terminal_get_row_count(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -glong vte_terminal_get_column_count(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +glong vte_terminal_get_column_count(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -const char *vte_terminal_get_window_title(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +const char *vte_terminal_get_window_title(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -const char *vte_terminal_get_current_directory_uri(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +const char *vte_terminal_get_current_directory_uri(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -const char *vte_terminal_get_current_file_uri(VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +const char *vte_terminal_get_current_file_uri(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* misc */ _VTE_PUBLIC void vte_terminal_set_input_enabled (VteTerminal *terminal, - gboolean enabled) _VTE_GNUC_NONNULL(1); + gboolean enabled) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -gboolean vte_terminal_get_input_enabled (VteTerminal *terminal) _VTE_GNUC_NONNULL(1); +gboolean vte_terminal_get_input_enabled (VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); /* rarely useful functions */ + _VTE_PUBLIC void vte_terminal_set_clear_background(VteTerminal* terminal, - gboolean setting) _VTE_GNUC_NONNULL(1); + gboolean setting) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_get_color_background_for_draw(VteTerminal* terminal, - GdkRGBA* color) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2); + GdkRGBA* color) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2); /* Writing contents out */ _VTE_PUBLIC @@ -475,10 +585,77 @@ gboolean vte_terminal_write_contents_sync (VteTerminal *terminal, GOutputStream *stream, VteWriteFlags flags, GCancellable *cancellable, - GError **error) _VTE_GNUC_NONNULL(1) _VTE_GNUC_NONNULL(2); + GError **error) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1, 2); + +/* Images */ + +/* Set or get whether SIXEL image support is enabled */ +_VTE_PUBLIC +void vte_terminal_set_enable_sixel(VteTerminal *terminal, + gboolean enabled) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +gboolean vte_terminal_get_enable_sixel(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +void vte_terminal_set_xalign(VteTerminal* terminal, + VteAlign align) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +VteAlign vte_terminal_get_xalign(VteTerminal* terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +void vte_terminal_set_yalign(VteTerminal* terminal, + VteAlign align) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +VteAlign vte_terminal_get_yalign(VteTerminal* terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +void vte_terminal_set_xfill(VteTerminal* terminal, + gboolean fill) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +gboolean vte_terminal_get_xfill(VteTerminal* terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +void vte_terminal_set_yfill(VteTerminal* terminal, + gboolean fill) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +gboolean vte_terminal_get_yfill(VteTerminal* terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +void vte_terminal_set_context_menu_model(VteTerminal* terminal, + GMenuModel* model) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +GMenuModel* vte_terminal_get_context_menu_model(VteTerminal* terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +void vte_terminal_set_context_menu(VteTerminal* terminal, + GtkWidget* menu) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +GtkWidget* vte_terminal_get_context_menu(VteTerminal* terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +_VTE_PUBLIC +GType vte_event_context_get_type(void); + +#if _VTE_GTK == 3 + +_VTE_PUBLIC +GdkEvent* vte_event_context_get_event(VteEventContext const* context) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +#elif _VTE_GTK == 4 + +_VTE_PUBLIC +gboolean vte_event_context_get_coordinates(VteEventContext const* context, + double* x, + double* y) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + +#endif /* VTE_GTK */ G_DEFINE_AUTOPTR_CLEANUP_FUNC(VteTerminal, g_object_unref) G_END_DECLS - -#endif /* __VTE_VTE_TERMINAL_H__ */ diff --git a/src/vte/vtetypebuiltins.h b/src/vte/vtetypebuiltins.h new file mode 100644 index 0000000..41334fe --- /dev/null +++ b/src/vte/vtetypebuiltins.h @@ -0,0 +1,28 @@ +/* + * Copyright © 2021 Christian Persch + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#pragma once + +#if !defined (__VTE_VTE_H_INSIDE__) && !defined (VTE_COMPILATION) +#error "Only can be included directly." +#endif + +#if _VTE_GTK == 3 +#include "vtetypebuiltins-gtk3.h" +#elif _VTE_GTK == 4 +#include "vtetypebuiltins-gtk4.h" +#endif diff --git a/src/vte/vteversion.h.in b/src/vte/vteversion.h.in index f558c8f..4316da8 100644 --- a/src/vte/vteversion.h.in +++ b/src/vte/vteversion.h.in @@ -1,23 +1,21 @@ /* * Copyright © 2008 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ -#ifndef __VTE_VTE_VERSION_H__ -#define __VTE_VTE_VERSION_H__ +#pragma once #if !defined (__VTE_VTE_H_INSIDE__) && !defined (VTE_COMPILATION) #error "Only can be included directly." @@ -67,8 +65,8 @@ G_BEGIN_DECLS * @micro: required micro version * * Macro to check the library version at compile time. - * It returns %1 if the version of VTE is greater or - * equal to the required one, and %0 otherwise. + * It returns 1 if the version of VTE is greater or + * equal to the required one, and 0 otherwise. */ #define VTE_CHECK_VERSION(major,minor,micro) \ (VTE_MAJOR_VERSION > (major) || \ @@ -76,14 +74,12 @@ G_BEGIN_DECLS (VTE_MAJOR_VERSION == (major) && VTE_MINOR_VERSION == (minor) && VTE_MICRO_VERSION >= (micro))) _VTE_PUBLIC -guint vte_get_major_version (void) G_GNUC_CONST; +guint vte_get_major_version (void) _VTE_CXX_NOEXCEPT G_GNUC_CONST; _VTE_PUBLIC -guint vte_get_minor_version (void) G_GNUC_CONST; +guint vte_get_minor_version (void) _VTE_CXX_NOEXCEPT G_GNUC_CONST; _VTE_PUBLIC -guint vte_get_micro_version (void) G_GNUC_CONST; +guint vte_get_micro_version (void) _VTE_CXX_NOEXCEPT G_GNUC_CONST; G_END_DECLS - -#endif /* __VTE_VTE_VERSION_H__ */ diff --git a/src/vteaccess.cc b/src/vteaccess.cc index 1851e07..fff918d 100644 --- a/src/vteaccess.cc +++ b/src/vteaccess.cc @@ -1,27 +1,18 @@ /* * Copyright (C) 2002,2003 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/* - * SECTION: vte-access - * @short_description: Accessibility peer of #VteTerminal - * - * The accessibility peer of a #VteTerminal, implementing GNOME's accessibility - * framework. + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -34,8 +25,9 @@ #include #include "vteaccess.h" #include "vteinternal.hh" +#include "widget.hh" -#ifdef HAVE_LOCALE_H +#if __has_include() #include #endif #include @@ -56,7 +48,7 @@ typedef struct _VteTerminalAccessiblePrivate { gboolean snapshot_caret_invalid; /* This data is stale. */ GString *snapshot_text; /* Pointer to UTF-8 text. */ GArray *snapshot_characters; /* Offsets to character begin points. */ - GArray *snapshot_attributes; /* Attributes, per byte. */ + VteCharAttrList snapshot_attributes; /* Attributes, per byte. */ GArray *snapshot_linebreaks; /* Offsets to line breaks. */ gint snapshot_caret; /* Location of the cursor (in characters). */ gboolean text_caret_moved_pending; @@ -269,11 +261,7 @@ vte_terminal_accessible_update_private_data_if_needed(VteTerminalAccessible *acc /* Free the attribute lists and allocate a new array to hold * them. */ - if (priv->snapshot_attributes != NULL) { - g_array_free(priv->snapshot_attributes, TRUE); - } - priv->snapshot_attributes = g_array_new(FALSE, FALSE, - sizeof(struct _VteCharAttributes)); + vte_char_attr_list_set_size(&priv->snapshot_attributes, 0); /* Free the linebreak offsets and allocate a new array to hold * them. */ @@ -283,13 +271,18 @@ vte_terminal_accessible_update_private_data_if_needed(VteTerminalAccessible *acc priv->snapshot_linebreaks = g_array_new(FALSE, FALSE, sizeof(int)); /* Get a new view of the uber-label. */ - priv->snapshot_text = impl->get_text_displayed_a11y(true /* wrap */, - priv->snapshot_attributes); - + auto text = g_string_new(nullptr); + try { + impl->get_text_displayed_a11y(text, + &priv->snapshot_attributes); + } catch (...) { + g_string_truncate(text, 0); + } + priv->snapshot_text = text; /* Get the offsets to the beginnings of each character. */ i = 0; next = priv->snapshot_text->str; - while (i < priv->snapshot_attributes->len) { + while (i < vte_char_attr_list_get_size(&priv->snapshot_attributes)) { g_array_append_val(priv->snapshot_characters, i); next = g_utf8_next_char(next); if (next == NULL) { @@ -303,9 +296,7 @@ vte_terminal_accessible_update_private_data_if_needed(VteTerminalAccessible *acc /* Get the attributes for the current cell. */ offset = g_array_index(priv->snapshot_characters, int, i); - attrs = g_array_index(priv->snapshot_attributes, - struct _VteCharAttributes, - offset); + attrs = *vte_char_attr_list_get(&priv->snapshot_attributes, offset); /* If this character is on a row different from the row * the character we looked at previously was on, then * it's a new line and we need to keep track of where @@ -336,9 +327,7 @@ vte_terminal_accessible_update_private_data_if_needed(VteTerminalAccessible *acc /* Get the attributes for the current cell. */ offset = g_array_index(priv->snapshot_characters, int, i); - attrs = g_array_index(priv->snapshot_attributes, - struct _VteCharAttributes, - offset); + attrs = *vte_char_attr_list_get(&priv->snapshot_attributes, offset); /* If this cell is "before" the cursor, move the * caret to be "here". */ if ((attrs.row < crow) || @@ -360,7 +349,7 @@ vte_terminal_accessible_update_private_data_if_needed(VteTerminalAccessible *acc _vte_debug_print(VTE_DEBUG_ALLY, "Refreshed accessibility snapshot, " "%ld cells, %ld characters.\n", - (long)priv->snapshot_attributes->len, + (long)vte_char_attr_list_get_size(&priv->snapshot_attributes), (long)priv->snapshot_characters->len); } @@ -375,11 +364,21 @@ vte_terminal_accessible_maybe_emit_text_caret_moved(VteTerminalAccessible *acces } } -/* A signal handler to catch "text-inserted/deleted/modified" signals. */ -static void -vte_terminal_accessible_text_modified(VteTerminal *terminal, gpointer data) +void +_vte_terminal_accessible_text_inserted(VteTerminalAccessible* accessible) +{ + _vte_terminal_accessible_text_modified(accessible); +} + +void +_vte_terminal_accessible_text_deleted (VteTerminalAccessible* accessible) +{ + _vte_terminal_accessible_text_modified(accessible); +} + +void +_vte_terminal_accessible_text_modified(VteTerminalAccessible* accessible) { - VteTerminalAccessible *accessible = (VteTerminalAccessible *)data; VteTerminalAccessiblePrivate *priv = (VteTerminalAccessiblePrivate *)_vte_terminal_accessible_get_instance_private(accessible); GString *old_text; GArray *old_characters; @@ -488,22 +487,60 @@ vte_terminal_accessible_text_modified(VteTerminal *terminal, gpointer data) g_array_free(old_characters, TRUE); } -/* A signal handler to catch "text-scrolled" signals. */ -static void -vte_terminal_accessible_text_scrolled(VteTerminal *terminal, - gint howmuch, - gpointer data) +/* Compute a simple diff between the `before` string (before_len bytes) and the + `after` string (after_len bytes). We here only check for common head and + tail. + + If the strings are equal, this returns FALSE. + + If the strings differ, this returns TRUE, and *head_len is set to the number + of bytes that are identical at the beginning of `before` and `after`, and + *tail_len is set to the number of bytes that are identical at the end of + `before` and `after`. */ +static gboolean +check_diff(const gchar *before, guint before_len, + const gchar *after, guint after_len, + guint *head_len, guint *tail_len) +{ + guint i; + + for (i = 0; i < before_len && i < after_len; i++) + if (before[i] != after[i]) + break; + + if (i == before_len && i == after_len) + /* They are identical. */ + return FALSE; + + /* They started diverging at i. */ + *head_len = i; + + for (i = 1; i <= before_len - *head_len && i <= after_len - *head_len; i++) + if (before[before_len - i] != after[after_len - i]) + break; + + /* They finished diverging here. */ + *tail_len = i - 1; + + return TRUE; +} + +void +_vte_terminal_accessible_text_scrolled(VteTerminalAccessible* accessible, + long howmuch) { - VteTerminalAccessible *accessible = (VteTerminalAccessible *)data; VteTerminalAccessiblePrivate *priv = (VteTerminalAccessiblePrivate *)_vte_terminal_accessible_get_instance_private(accessible); struct _VteCharAttributes attr; long delta, row_count; - guint i, len; + guint drop, old_len, new_len, old_common, new_common; /* TODOegmont: Fix this for smooth scrolling */ /* g_assert(howmuch != 0); */ if (howmuch == 0) return; + auto widget = gtk_accessible_get_widget(GTK_ACCESSIBLE(accessible)); + auto terminal = VTE_TERMINAL(widget); + row_count = vte_terminal_get_row_count(terminal); if (((howmuch < 0) && (howmuch <= -row_count)) || ((howmuch > 0) && (howmuch >= row_count))) { @@ -532,103 +569,217 @@ vte_terminal_accessible_text_scrolled(VteTerminal *terminal, vte_terminal_accessible_maybe_emit_text_caret_moved(accessible); return; } + /* Find the start point. */ delta = 0; - if (priv->snapshot_attributes != NULL) { - if (priv->snapshot_attributes->len > 0) { - attr = g_array_index(priv->snapshot_attributes, - struct _VteCharAttributes, - 0); - delta = attr.row; - } - } + if (vte_char_attr_list_get_size(&priv->snapshot_attributes) > 0) { + attr = *vte_char_attr_list_get(&priv->snapshot_attributes, 0); + delta = attr.row; + } /* We scrolled up, so text was added at the top and removed * from the bottom. */ if ((howmuch < 0) && (howmuch > -row_count)) { - gboolean inserted = FALSE; howmuch = -howmuch; - if (priv->snapshot_attributes != NULL && - priv->snapshot_text != NULL) { + if (priv->snapshot_text != NULL) { + old_len = vte_char_attr_list_get_size(&priv->snapshot_attributes); + /* Find the first byte that scrolled off. */ - for (i = 0; i < priv->snapshot_attributes->len; i++) { - attr = g_array_index(priv->snapshot_attributes, - struct _VteCharAttributes, - i); + for (old_common = 0; old_common < old_len; old_common++) { + attr = *vte_char_attr_list_get(&priv->snapshot_attributes, old_common); if (attr.row >= delta + row_count - howmuch) { break; } } - if (i < priv->snapshot_attributes->len) { - /* The rest of the string was deleted -- make a note. */ + if (old_common < old_len) { + drop = old_len - old_common; + + GString *old_text; + GArray *old_characters; + + /* Refresh. */ + priv->snapshot_contents_invalid = TRUE; + vte_terminal_accessible_update_private_data_if_needed(accessible, + &old_text, + &old_characters); + + GString *new_text = priv->snapshot_text; + GArray *new_characters = priv->snapshot_characters; + new_len = new_text->len; + + if (old_common > new_len) + /* Not only did we scroll, but we even removed some text */ + new_common = new_len; + else + new_common = old_common; + + guint head_len, tail_len; + gboolean diff; + + /* Check for more difference than just the addition at top and removal at bottom */ + diff = check_diff(old_text->str, old_common, + new_text->str + new_len - new_common, new_common, + &head_len, &tail_len); + + /* Note: to keep offsets correct, we need to + * notify deletions from bottom to top and + * additions from top to bottom + */ + + /* Temporarily switch to old text to emit deletion events */ + priv->snapshot_text = old_text; + priv->snapshot_characters = old_characters; + + /* Delete bottom first */ emit_text_changed_delete(G_OBJECT(accessible), - priv->snapshot_text->str, - i, - priv->snapshot_attributes->len - i); - } - inserted = TRUE; - } - /* Refresh. Note that i is now the length of the data which - * we expect to have left over. */ - priv->snapshot_contents_invalid = TRUE; - vte_terminal_accessible_update_private_data_if_needed(accessible, - NULL, - NULL); - /* If we now have more text than before, the initial portion - * was added. */ - if (inserted) { - len = priv->snapshot_text->len; - if (len > i) { - emit_text_changed_insert(G_OBJECT(accessible), - priv->snapshot_text->str, - 0, - len - i); + old_text->str, + old_common, + drop); + + if (diff) + /* Not only did we scroll, but we also modified some bits */ + /* Delete middle */ + emit_text_changed_delete(G_OBJECT(accessible), + old_text->str, + head_len, + old_common - tail_len - head_len); + + /* Switch to new text */ + priv->snapshot_text = new_text; + priv->snapshot_characters = new_characters; + + g_string_free(old_text, TRUE); + g_array_free(old_characters, TRUE); + + /* If we now have more text than before, the initial portion + * was added. */ + if (new_len > new_common) + /* Add top */ + emit_text_changed_insert(G_OBJECT(accessible), + new_text->str, + 0, + new_len - new_common); + + if (diff) + /* Add middle */ + emit_text_changed_insert(G_OBJECT(accessible), + new_text->str, + new_len - new_common + head_len, + new_common - tail_len - head_len); } + } else { + /* Just refresh. */ + priv->snapshot_contents_invalid = TRUE; + vte_terminal_accessible_update_private_data_if_needed(accessible, + NULL, + NULL); } + vte_terminal_accessible_maybe_emit_text_caret_moved(accessible); return; } /* We scrolled down, so text was added at the bottom and removed * from the top. */ if ((howmuch > 0) && (howmuch < row_count)) { - gboolean inserted = FALSE; - if (priv->snapshot_attributes != NULL && - priv->snapshot_text != NULL) { + if (priv->snapshot_text != NULL) { + /* Leave trailing '\n' untouched, so that the exposed text always contains a trailing '\n', + insertion happens in front of it: bug 657960 */ + old_len = vte_char_attr_list_get_size(&priv->snapshot_attributes) - 1; + /* Find the first byte that wasn't scrolled off the top. */ - for (i = 0; i < priv->snapshot_attributes->len; i++) { - attr = g_array_index(priv->snapshot_attributes, - struct _VteCharAttributes, - i); + for (drop = 0; drop < old_len; drop++) { + attr = *vte_char_attr_list_get(&priv->snapshot_attributes, drop); if (attr.row >= delta + howmuch) { break; } } - /* That many bytes disappeared -- make a note. */ + + /* Figure out how much text was common, and refresh. */ + old_common = old_len - drop; + + GString *old_text; + GArray *old_characters; + + priv->snapshot_contents_invalid = TRUE; + vte_terminal_accessible_update_private_data_if_needed(accessible, + &old_text, + &old_characters); + + GString *new_text = priv->snapshot_text; + GArray *new_characters = priv->snapshot_characters; + new_len = new_text->len - 1; + + if (old_common > new_len) + /* Not only did we scroll, but we even removed some text */ + new_common = new_len; + else + new_common = old_common; + + guint head_len, tail_len; + guint extra_add = 0; + gboolean diff; + + /* Check for more difference than just the removal at top and addition at bottom */ + diff = check_diff(old_text->str + drop, old_common, + new_text->str, new_common, + &head_len, &tail_len); + + /* Note: to keep offsets correct, we need to + * notify deletions from bottom to top and + * additions from top to bottom + */ + + /* Temporarily switch to old text to emit deletion events */ + priv->snapshot_text = old_text; + priv->snapshot_characters = old_characters; + + if (diff) + /* Not only did we scroll, but we also modified some bits */ + /* Delete middle first */ + emit_text_changed_delete(G_OBJECT(accessible), + old_text->str, + drop + head_len, + old_common - tail_len - head_len); + + /* Delete top */ emit_text_changed_delete(G_OBJECT(accessible), - priv->snapshot_text->str, + old_text->str, 0, - i); - /* Figure out how much text was left, and refresh. */ - i = strlen(priv->snapshot_text->str + i); - inserted = TRUE; - } - priv->snapshot_contents_invalid = TRUE; - vte_terminal_accessible_update_private_data_if_needed(accessible, - NULL, - NULL); - /* Any newly-added string data is new, so note that it was - * inserted. */ - if (inserted) { - len = priv->snapshot_text->len; - if (len > i) { - /* snapshot_text always contains a trailing '\n', - * insertion happens in front of it: bug 657960 */ - g_assert(i >= 1); + drop); + + /* Switch to new text */ + priv->snapshot_text = new_text; + priv->snapshot_characters = new_characters; + + g_string_free(old_text, TRUE); + g_array_free(old_characters, TRUE); + + if (diff) + { + /* Add middle */ + if (tail_len) + emit_text_changed_insert(G_OBJECT(accessible), + new_text->str, + head_len, + new_common - head_len - tail_len); + else + /* Diff was at bottom, merge with addition below */ + extra_add = new_common - head_len - tail_len; + } + + /* Add bottom */ + if (new_len > new_common - extra_add) emit_text_changed_insert(G_OBJECT(accessible), priv->snapshot_text->str, - i - 1, - len - i); - } + new_common - extra_add, + new_len - (new_common - extra_add)); + } else { + /* Just refresh. */ + priv->snapshot_contents_invalid = TRUE; + vte_terminal_accessible_update_private_data_if_needed(accessible, + NULL, + NULL); } + vte_terminal_accessible_maybe_emit_text_caret_moved(accessible); return; } @@ -704,28 +855,21 @@ vte_terminal_accessible_selection_changed (VteTerminal *terminal, } static void -vte_terminal_accessible_initialize (AtkObject *obj, gpointer data) +vte_terminal_accessible_initialize(AtkObject *obj, + gpointer data) { - VteTerminal *terminal = VTE_TERMINAL (data); + auto accessible = VTE_TERMINAL_ACCESSIBLE(obj); + VteTerminal *terminal = VTE_TERMINAL(data); const char *window_title; ATK_OBJECT_CLASS (_vte_terminal_accessible_parent_class)->initialize (obj, data); auto impl = IMPL(terminal); - impl->subscribe_accessible_events(); + try { + impl->set_accessible(accessible); + } catch (...) { + } - g_signal_connect(terminal, "text-inserted", - G_CALLBACK(vte_terminal_accessible_text_modified), - obj); - g_signal_connect(terminal, "text-deleted", - G_CALLBACK(vte_terminal_accessible_text_modified), - obj); - g_signal_connect(terminal, "text-modified", - G_CALLBACK(vte_terminal_accessible_text_modified), - obj); - g_signal_connect(terminal, "text-scrolled", - G_CALLBACK(vte_terminal_accessible_text_scrolled), - obj); g_signal_connect(terminal, "cursor-moved", G_CALLBACK(vte_terminal_accessible_invalidate_cursor), obj); @@ -760,12 +904,13 @@ _vte_terminal_accessible_init (VteTerminalAccessible *accessible) priv->snapshot_text = NULL; priv->snapshot_characters = NULL; - priv->snapshot_attributes = NULL; priv->snapshot_linebreaks = NULL; priv->snapshot_caret = -1; priv->snapshot_contents_invalid = TRUE; priv->snapshot_caret_invalid = TRUE; priv->text_caret_moved_pending = FALSE; + + vte_char_attr_list_init(&priv->snapshot_attributes); } static void @@ -781,16 +926,6 @@ vte_terminal_accessible_finalize(GObject *object) widget = gtk_accessible_get_widget (GTK_ACCESSIBLE(accessible)); if (widget != NULL) { - g_signal_handlers_disconnect_matched(widget, - (GSignalMatchType)(G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), - 0, 0, NULL, - (void *)vte_terminal_accessible_text_modified, - object); - g_signal_handlers_disconnect_matched(widget, - (GSignalMatchType)(G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), - 0, 0, NULL, - (void *)vte_terminal_accessible_text_scrolled, - object); g_signal_handlers_disconnect_matched(widget, (GSignalMatchType)(G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, NULL, @@ -806,6 +941,13 @@ vte_terminal_accessible_finalize(GObject *object) 0, 0, NULL, (void *)vte_terminal_accessible_visibility_notify, object); + + auto terminal = VTE_TERMINAL(widget); + auto impl = IMPL(terminal); + try { + impl->set_accessible(nullptr); + } catch (...) { + } } if (priv->snapshot_text != NULL) { @@ -814,9 +956,7 @@ vte_terminal_accessible_finalize(GObject *object) if (priv->snapshot_characters != NULL) { g_array_free(priv->snapshot_characters, TRUE); } - if (priv->snapshot_attributes != NULL) { - g_array_free(priv->snapshot_attributes, TRUE); - } + vte_char_attr_list_clear(&priv->snapshot_attributes); if (priv->snapshot_linebreaks != NULL) { g_array_free(priv->snapshot_linebreaks, TRUE); } @@ -905,7 +1045,7 @@ vte_terminal_accessible_get_text_somewhere(AtkText *text, auto impl = IMPL_FROM_ACCESSIBLE(text); _vte_debug_print(VTE_DEBUG_ALLY, - "Getting %s %s at %d of %d.\n", + "Getting %s %s at %d of %" G_GSIZE_FORMAT " .\n", (direction == direction_current) ? "this" : ((direction == direction_next) ? "next" : "previous"), (boundary_type == ATK_TEXT_BOUNDARY_CHAR) ? "char" : @@ -915,7 +1055,7 @@ vte_terminal_accessible_get_text_somewhere(AtkText *text, ((boundary_type == ATK_TEXT_BOUNDARY_WORD_END) ? "word (end)" : ((boundary_type == ATK_TEXT_BOUNDARY_SENTENCE_START) ? "sentence (start)" : ((boundary_type == ATK_TEXT_BOUNDARY_SENTENCE_END) ? "sentence (end)" : "unknown")))))), - offset, priv->snapshot_attributes->len); + offset, vte_char_attr_list_get_size(&priv->snapshot_attributes)); g_assert(priv->snapshot_text != NULL); g_assert(priv->snapshot_characters != NULL); if (offset >= (int) priv->snapshot_characters->len) { @@ -930,7 +1070,7 @@ vte_terminal_accessible_get_text_somewhere(AtkText *text, * position, the one before it, or the one after it. */ offset += direction; start = MAX(offset, 0); - end = MIN(offset + 1, (int) priv->snapshot_attributes->len); + end = MIN(offset + 1, (int) vte_char_attr_list_get_size(&priv->snapshot_attributes)); break; case ATK_TEXT_BOUNDARY_WORD_START: /* Back up to the previous non-word-word transition. */ @@ -1194,7 +1334,9 @@ static gunichar vte_terminal_accessible_get_character_at_offset(AtkText *text, gint offset) { VteTerminalAccessible *accessible = VTE_TERMINAL_ACCESSIBLE(text); +#ifndef G_DISABLE_ASSERT VteTerminalAccessiblePrivate *priv = (VteTerminalAccessiblePrivate *)_vte_terminal_accessible_get_instance_private(accessible); +#endif char *unichar; gunichar ret; @@ -1277,14 +1419,10 @@ vte_terminal_accessible_get_run_attributes(AtkText *text, gint offset, vte_terminal_accessible_update_private_data_if_needed(accessible, NULL, NULL); - attr = g_array_index (priv->snapshot_attributes, - struct _VteCharAttributes, - offset); + attr = *vte_char_attr_list_get(&priv->snapshot_attributes, offset); *start_offset = 0; for (i = offset; i--;) { - cur_attr = g_array_index (priv->snapshot_attributes, - struct _VteCharAttributes, - i); + cur_attr = *vte_char_attr_list_get(&priv->snapshot_attributes, i); if (!_pango_color_equal (&cur_attr.fore, &attr.fore) || !_pango_color_equal (&cur_attr.back, &attr.back) || cur_attr.underline != attr.underline || @@ -1293,11 +1431,9 @@ vte_terminal_accessible_get_run_attributes(AtkText *text, gint offset, break; } } - *end_offset = priv->snapshot_attributes->len - 1; - for (i = offset + 1; i < priv->snapshot_attributes->len; i++) { - cur_attr = g_array_index (priv->snapshot_attributes, - struct _VteCharAttributes, - i); + *end_offset = vte_char_attr_list_get_size(&priv->snapshot_attributes) - 1; + for (i = offset + 1; i < vte_char_attr_list_get_size(&priv->snapshot_attributes); i++) { + cur_attr = *vte_char_attr_list_get(&priv->snapshot_attributes, i); if (!_pango_color_equal (&cur_attr.fore, &attr.fore) || !_pango_color_equal (&cur_attr.back, &attr.back) || cur_attr.underline != attr.underline || @@ -1353,7 +1489,7 @@ vte_terminal_accessible_get_character_count(AtkText *text) vte_terminal_accessible_update_private_data_if_needed(accessible, NULL, NULL); - return priv->snapshot_attributes->len; + return vte_char_attr_list_get_size(&priv->snapshot_attributes); } static gint @@ -1419,15 +1555,18 @@ vte_terminal_accessible_get_selection(AtkText *text, gint selection_number, return NULL; } - auto impl = IMPL_FROM_WIDGET(widget); + try { + auto impl = IMPL_FROM_WIDGET(widget); + if (impl->m_selection_resolved.empty() || impl->m_selection[vte::to_integral(vte::platform::ClipboardType::PRIMARY)] == nullptr) + return nullptr; - if (impl->m_selection_resolved.empty() || impl->m_selection[VTE_SELECTION_PRIMARY] == nullptr) - return NULL; + *start_offset = offset_from_xy (priv, impl->m_selection_resolved.start_column(), impl->m_selection_resolved.start_row()); + *end_offset = offset_from_xy (priv, impl->m_selection_resolved.end_column(), impl->m_selection_resolved.end_row()); - *start_offset = offset_from_xy (priv, impl->m_selection_resolved.start_column(), impl->m_selection_resolved.start_row()); - *end_offset = offset_from_xy (priv, impl->m_selection_resolved.end_column(), impl->m_selection_resolved.end_row()); - - return g_strdup(impl->m_selection[VTE_SELECTION_PRIMARY]->str); + return g_strdup(impl->m_selection[vte::to_integral(vte::platform::ClipboardType::PRIMARY)]->str); + } catch (...) { + return nullptr; + } } static gboolean @@ -1472,7 +1611,10 @@ vte_terminal_accessible_remove_selection(AtkText *text, terminal = VTE_TERMINAL (widget); auto impl = IMPL_FROM_WIDGET(widget); if (selection_number == 0 && vte_terminal_get_has_selection (terminal)) { - impl->deselect_all(); + try { + impl->deselect_all(); + } catch (...) { + } return TRUE; } else { return FALSE; @@ -1501,7 +1643,10 @@ vte_terminal_accessible_set_selection(AtkText *text, gint selection_number, return FALSE; } if (vte_terminal_get_has_selection (terminal)) { - impl->deselect_all(); + try { + impl->deselect_all(); + } catch (...) { + } } return vte_terminal_accessible_add_selection (text, start_offset, end_offset); @@ -1576,17 +1721,21 @@ vte_terminal_accessible_set_size(AtkComponent *component, /* If the size is an exact multiple of the cell size, use that, * otherwise round down. */ - width -= impl->m_padding.left + impl->m_padding.right; - height -= impl->m_padding.top + impl->m_padding.bottom; + try { + width -= impl->m_border.left + impl->m_border.right; + height -= impl->m_border.top + impl->m_border.bottom; - auto columns = width / impl->m_cell_width; - auto rows = height / impl->m_cell_height; - if (columns <= 0 || rows <= 0) - return FALSE; + auto columns = width / impl->m_cell_width; + auto rows = height / impl->m_cell_height; + if (columns <= 0 || rows <= 0) + return FALSE; - vte_terminal_set_size(terminal, columns, rows); - return (vte_terminal_get_row_count (terminal) == rows) && - (vte_terminal_get_column_count (terminal) == columns); + vte_terminal_set_size(terminal, columns, rows); + return (vte_terminal_get_row_count (terminal) == rows) && + (vte_terminal_get_column_count (terminal) == columns); + } catch (...) { + return false; + } } static AtkObject * diff --git a/src/vteaccess.h b/src/vteaccess.h index 351d0c8..1ec9bd7 100644 --- a/src/vteaccess.h +++ b/src/vteaccess.h @@ -1,24 +1,21 @@ /* * Copyright (C) 2002 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ -#ifndef vte_vteaccess_h_included -#define vte_vteaccess_h_included - +#pragma once #include #include @@ -51,6 +48,13 @@ struct _VteTerminalAccessibleClass { GType _vte_terminal_accessible_get_type(void); -G_END_DECLS +void _vte_terminal_accessible_text_modified(VteTerminalAccessible* accessible); -#endif +void _vte_terminal_accessible_text_inserted(VteTerminalAccessible* accessible); + +void _vte_terminal_accessible_text_deleted (VteTerminalAccessible* accessible); + +void _vte_terminal_accessible_text_scrolled(VteTerminalAccessible* accessible, + long delta); + +G_END_DECLS diff --git a/src/vtedefines.hh b/src/vtedefines.hh index df45ecf..31a7912 100644 --- a/src/vtedefines.hh +++ b/src/vtedefines.hh @@ -1,19 +1,18 @@ /* * Copyright (C) 2001-2004 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -75,16 +74,13 @@ #define VTE_PALETTE_SIZE 263 #define VTE_SCROLLBACK_INIT 512 -#define VTE_DEFAULT_CURSOR GDK_XTERM -#define VTE_MOUSING_CURSOR GDK_LEFT_PTR -#define VTE_HYPERLINK_CURSOR GDK_HAND2 -#define VTE_HYPERLINK_CURSOR_DEBUG GDK_SPIDER +#define VTE_DEFAULT_CURSOR std::string{"text"} +#define VTE_MOUSING_CURSOR std::string{"default"} +#define VTE_HYPERLINK_CURSOR std::string{"pointer"} +#define VTE_HYPERLINK_CURSOR_DEBUG std::string{"crosshair"} #define VTE_CHILD_INPUT_PRIORITY G_PRIORITY_DEFAULT_IDLE #define VTE_CHILD_OUTPUT_PRIORITY G_PRIORITY_HIGH #define VTE_MAX_INPUT_READ 0x1000 -#define VTE_DISPLAY_TIMEOUT 10 -#define VTE_UPDATE_TIMEOUT 15 -#define VTE_UPDATE_REPEAT_TIMEOUT 30 #define VTE_MAX_PROCESS_TIME 100 #define VTE_CELL_BBOX_SLACK 1 #define VTE_DEFAULT_UTF8_AMBIGUOUS_WIDTH 1 @@ -139,3 +135,15 @@ /* Maximum length of a paragraph, in lines, that might get proper RingView (BiDi) treatment. */ #define VTE_RINGVIEW_PARAGRAPH_LENGTH_MAX 500 + +#define VTE_VERSION_NUMERIC ((VTE_MAJOR_VERSION) * 10000 + (VTE_MINOR_VERSION) * 100 + (VTE_MICRO_VERSION)) + +#define VTE_TERMINFO_NAME "xterm-256color" + +#define VTE_MIN_CURSOR_BLINK_CYCLE (50 /* ms */) +#define VTE_MIN_CURSOR_BLINK_TIMEOUT (50 /* ms */) + +#define VTE_MIN_GRID_WIDTH (2) /* space for one wide character */ +#define VTE_MIN_GRID_HEIGHT (1) + +#define VTE_FONT_WEIGHT_BOLDENING (PANGO_WEIGHT_BOLD - PANGO_WEIGHT_NORMAL) diff --git a/src/vtedraw.cc b/src/vtedraw.cc deleted file mode 100644 index 621bcb5..0000000 --- a/src/vtedraw.cc +++ /dev/null @@ -1,2399 +0,0 @@ -/* - * Copyright (C) 2003,2008 Red Hat, Inc. - * Copyright © 2019 Christian Persch - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "config.h" - -#include -#include -#include -#include - -#include -#include - -#include "attr.hh" -#include "bidi.hh" -#include "vtedraw.hh" -#include "vtedefines.hh" -#include "debug.h" - -#include - -/* Have a space between letters to make sure ligatures aren't used when caching the glyphs: bug 793391. */ -#define VTE_DRAW_SINGLE_WIDE_CHARACTERS \ - " ! \" # $ % & ' ( ) * + , - . / " \ - "0 1 2 3 4 5 6 7 8 9 " \ - ": ; < = > ? @ " \ - "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z " \ - "[ \\ ] ^ _ ` " \ - "a b c d e f g h i j k l m n o p q r s t u v w x y z " \ - "{ | } ~ " \ - "" - -static inline bool -_vte_double_equal(double a, - double b) -{ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wfloat-equal" - return a == b; -#pragma GCC diagnostic pop -} - -/* Overview: - * - * - * This file implements vte rendering using pangocairo. Note that this does - * NOT implement any kind of complex text rendering. That's not currently a - * goal. - * - * The aim is to be super-fast and avoid unneeded work as much as possible. - * Here is an overview of how that is accomplished: - * - * - We attach a font_info to the draw. A font_info has all the information - * to quickly draw text. - * - * - A font_info keeps uses unistr_font_info structs that represent all - * information needed to quickly draw a single vteunistr. The font_info - * creates those unistr_font_info structs on demand and caches them - * indefinitely. It uses a direct array for the ASCII range and a hash - * table for the rest. - * - * - * Fast rendering of unistrs: - * - * A unistr_font_info (uinfo) calls Pango to set text for the unistr upon - * initialization and then caches information needed to draw the results - * later. It uses three different internal representations and respectively - * three drawing paths: - * - * - COVERAGE_USE_CAIRO_GLYPH: - * Keeping a single glyph index and a cairo scaled-font. This is the - * fastest way to draw text as it bypasses Pango completely and allows - * for stuffing multiple glyphs into a single cairo_show_glyphs() request - * (if scaled-fonts match). This method is used if the glyphs used for - * the vteunistr as determined by Pango consists of a single regular glyph - * positioned at 0,0 using a regular font. This method is used for more - * than 99% of the cases. Only exceptional cases fall through to the - * other two methods. - * - * - COVERAGE_USE_PANGO_GLYPH_STRING: - * Keeping a pango glyphstring and a pango font. This is slightly slower - * than the previous case as drawing each glyph goes through pango - * separately and causes a separate cairo_show_glyphs() call. This method - * is used when the previous method cannot be used but the glyphs for the - * character all use a single font. This is the method used for hexboxes - * and "empty" characters like U+200C ZERO WIDTH NON-JOINER for example. - * - * - COVERAGE_USE_PANGO_LAYOUT_LINE: - * Keeping a pango layout line. This method is used only in the very - * weird and exceptional case that a single vteunistr uses more than one - * font to be drawn. This happens for example if some diacretics is not - * available in the font chosen for the base character. - * - * - * Caching of font infos: - * - * To avoid recreating font info structs for the same font again and again we - * do the following: - * - * - Use a global cache to share font info structs across different widgets. - * We use pango language, cairo font options, resolution, and font description - * as the key for our hash table. - * - * - When a font info struct is no longer used by any widget, we delay - * destroying it for a while (FONT_CACHE_TIMEOUT seconds). This is - * supposed to serve two purposes: - * - * * Destroying a terminal widget and creating it again right after will - * reuse the font info struct from the previous widget. - * - * * Zooming in and out a terminal reuses the font info structs. - * - * - * Pre-caching ASCII letters: - * - * When initializing a font info struct we measure a string consisting of all - * ASCII letters and some other ASCII characters. Since we have a shaped pango - * layout at hand, we walk over it and cache unistr font info for the ASCII - * letters if we can do that easily using COVERAGE_USE_CAIRO_GLYPH. This - * means that we precache all ASCII letters without any extra pango shaping - * involved. - */ - - - -#define FONT_CACHE_TIMEOUT (30) /* seconds */ - - -/* All shared data structures are implicitly protected by GDK mutex, because - * that's how vte.c works and we only get called from there. */ - - -/* cairo_show_glyphs accepts runs up to 102 glyphs before it allocates a - * temporary array. - * - * Setting this to a large value can cause dramatic slow-downs for some - * xservers (notably fglrx), see bug #410534. - */ -#define MAX_RUN_LENGTH 100 - - -enum unistr_coverage { - /* in increasing order of speed */ - COVERAGE_UNKNOWN = 0, /* we don't know about the character yet */ - COVERAGE_USE_PANGO_LAYOUT_LINE, /* use a PangoLayoutLine for the character */ - COVERAGE_USE_PANGO_GLYPH_STRING, /* use a PangoGlyphString for the character */ - COVERAGE_USE_CAIRO_GLYPH /* use a cairo_glyph_t for the character */ -}; - -union unistr_font_info { - /* COVERAGE_USE_PANGO_LAYOUT_LINE */ - struct { - PangoLayoutLine *line; - } using_pango_layout_line; - /* COVERAGE_USE_PANGO_GLYPH_STRING */ - struct { - PangoFont *font; - PangoGlyphString *glyph_string; - } using_pango_glyph_string; - /* COVERAGE_USE_CAIRO_GLYPH */ - struct { - cairo_scaled_font_t *scaled_font; - unsigned int glyph_index; - } using_cairo_glyph; -}; - -struct unistr_info { - guchar coverage; - guchar has_unknown_chars; - guint16 width; - union unistr_font_info ufi; -}; - -static struct unistr_info * -unistr_info_create (void) -{ - return g_slice_new0 (struct unistr_info); -} - -static void -unistr_info_finish (struct unistr_info *uinfo) -{ - union unistr_font_info *ufi = &uinfo->ufi; - - switch (uinfo->coverage) { - default: - case COVERAGE_UNKNOWN: - break; - case COVERAGE_USE_PANGO_LAYOUT_LINE: - /* we hold a manual reference on layout */ - g_object_unref (ufi->using_pango_layout_line.line->layout); - ufi->using_pango_layout_line.line->layout = NULL; - pango_layout_line_unref (ufi->using_pango_layout_line.line); - ufi->using_pango_layout_line.line = NULL; - break; - case COVERAGE_USE_PANGO_GLYPH_STRING: - if (ufi->using_pango_glyph_string.font) - g_object_unref (ufi->using_pango_glyph_string.font); - ufi->using_pango_glyph_string.font = NULL; - pango_glyph_string_free (ufi->using_pango_glyph_string.glyph_string); - ufi->using_pango_glyph_string.glyph_string = NULL; - break; - case COVERAGE_USE_CAIRO_GLYPH: - cairo_scaled_font_destroy (ufi->using_cairo_glyph.scaled_font); - ufi->using_cairo_glyph.scaled_font = NULL; - break; - } -} - -static void -unistr_info_destroy (struct unistr_info *uinfo) -{ - unistr_info_finish (uinfo); - g_slice_free (struct unistr_info, uinfo); -} - -struct font_info { - /* lifecycle */ - int ref_count; - guint destroy_timeout; /* only used when ref_count == 0 */ - - /* reusable layout set with font and everything set */ - PangoLayout *layout; - - /* cache of character info */ - struct unistr_info ascii_unistr_info[128]; - GHashTable *other_unistr_info; - - /* cell metrics as taken from the font, not yet scaled by cell_{width,height}_scale */ - gint width, height, ascent; - - /* reusable string for UTF-8 conversion */ - GString *string; - -#ifdef VTE_DEBUG - /* profiling info */ - int coverage_count[4]; -#endif -}; - - -static struct unistr_info * -font_info_find_unistr_info (struct font_info *info, - vteunistr c) -{ - struct unistr_info *uinfo; - - if (G_LIKELY (c < G_N_ELEMENTS (info->ascii_unistr_info))) - return &info->ascii_unistr_info[c]; - - if (G_UNLIKELY (info->other_unistr_info == NULL)) - info->other_unistr_info = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) unistr_info_destroy); - - uinfo = (struct unistr_info *)g_hash_table_lookup (info->other_unistr_info, GINT_TO_POINTER (c)); - if (G_LIKELY (uinfo)) - return uinfo; - - uinfo = unistr_info_create (); - g_hash_table_insert (info->other_unistr_info, GINT_TO_POINTER (c), uinfo); - return uinfo; -} - - -static void -font_info_cache_ascii (struct font_info *info) -{ - PangoLayoutLine *line; - PangoGlyphItemIter iter; - PangoGlyphItem *glyph_item; - PangoGlyphString *glyph_string; - PangoFont *pango_font; - cairo_scaled_font_t *scaled_font; - const char *text; - gboolean more; - PangoLanguage *language; - gboolean latin_uses_default_language; - - /* We have info->layout holding most ASCII characters. We want to - * cache as much info as we can about the ASCII letters so we don't - * have to look them up again later */ - - /* Don't cache if unknown glyphs found in layout */ - if (pango_layout_get_unknown_glyphs_count (info->layout) != 0) - return; - - language = pango_context_get_language (pango_layout_get_context (info->layout)); - if (language == NULL) - language = pango_language_get_default (); - latin_uses_default_language = pango_language_includes_script (language, PANGO_SCRIPT_LATIN); - - text = pango_layout_get_text (info->layout); - - line = pango_layout_get_line_readonly (info->layout, 0); - - /* Don't cache if more than one font used for the line */ - if (G_UNLIKELY (!line || !line->runs || line->runs->next)) - return; - - glyph_item = (PangoGlyphItem *)line->runs->data; - glyph_string = glyph_item->glyphs; - pango_font = glyph_item->item->analysis.font; - if (!pango_font) - return; - scaled_font = pango_cairo_font_get_scaled_font ((PangoCairoFont *) pango_font); - if (!scaled_font) - return; - - for (more = pango_glyph_item_iter_init_start (&iter, glyph_item, text); - more; - more = pango_glyph_item_iter_next_cluster (&iter)) - { - struct unistr_info *uinfo; - union unistr_font_info *ufi; - PangoGlyphGeometry *geometry; - PangoGlyph glyph; - vteunistr c; - - /* Only cache simple clusters */ - if (iter.start_char +1 != iter.end_char || - iter.start_index+1 != iter.end_index || - iter.start_glyph+1 != iter.end_glyph) - continue; - - c = text[iter.start_index]; - glyph = glyph_string->glyphs[iter.start_glyph].glyph; - geometry = &glyph_string->glyphs[iter.start_glyph].geometry; - - /* If not using the default locale language, only cache non-common - * characters as common characters get their font from their neighbors - * and we don't want to force Latin on them. */ - if (!latin_uses_default_language && - g_unichar_get_script (c) <= G_UNICODE_SCRIPT_INHERITED) - continue; - - /* Only cache simple glyphs */ - if (!(glyph <= 0xFFFF) || (geometry->x_offset | geometry->y_offset) != 0) - continue; - - uinfo = font_info_find_unistr_info (info, c); - if (G_UNLIKELY (uinfo->coverage != COVERAGE_UNKNOWN)) - continue; - - ufi = &uinfo->ufi; - - uinfo->width = PANGO_PIXELS_CEIL (geometry->width); - uinfo->has_unknown_chars = FALSE; - - uinfo->coverage = COVERAGE_USE_CAIRO_GLYPH; - - ufi->using_cairo_glyph.scaled_font = cairo_scaled_font_reference (scaled_font); - ufi->using_cairo_glyph.glyph_index = glyph; - -#ifdef VTE_DEBUG - info->coverage_count[0]++; - info->coverage_count[uinfo->coverage]++; -#endif - } - -#ifdef VTE_DEBUG - _vte_debug_print (VTE_DEBUG_PANGOCAIRO, - "vtepangocairo: %p cached %d ASCII letters\n", - info, info->coverage_count[0]); -#endif -} - -static void -font_info_measure_font (struct font_info *info) -{ - PangoRectangle logical; - - /* Measure U+0021..U+007E individually instead of all together and then - * averaging. For monospace fonts, the results should be the same, but - * if the user (by design, or trough mis-configuration) uses a proportional - * font, the latter method will greatly underestimate the required width, - * leading to unreadable, overlapping characters. - * https://gitlab.gnome.org/GNOME/vte/issues/138 - */ - int max_width{1}; - int max_height{1}; - for (char c = 0x21; c < 0x7f; ++c) { - pango_layout_set_text(info->layout, &c, 1); - pango_layout_get_extents (info->layout, NULL, &logical); - max_width = std::max(max_width, PANGO_PIXELS_CEIL(logical.width)); - max_height = std::max(max_height, PANGO_PIXELS_CEIL(logical.height)); - } - - /* Use the sample text to get the baseline */ - pango_layout_set_text (info->layout, VTE_DRAW_SINGLE_WIDE_CHARACTERS, -1); - pango_layout_get_extents (info->layout, NULL, &logical); - /* We don't do CEIL for width since we are averaging; - * rounding is more accurate */ - info->ascent = PANGO_PIXELS_CEIL (pango_layout_get_baseline (info->layout)); - - info->height = max_height; - info->width = max_width; - - /* Now that we shaped the entire ASCII character string, cache glyph - * info for them */ - font_info_cache_ascii (info); - - if (info->height == 0) { - info->height = PANGO_PIXELS_CEIL (logical.height); - } - if (info->ascent == 0) { - info->ascent = PANGO_PIXELS_CEIL (pango_layout_get_baseline (info->layout)); - } - - _vte_debug_print (VTE_DEBUG_MISC, - "vtepangocairo: %p font metrics = %dx%d (%d)\n", - info, info->width, info->height, info->ascent); -} - -static struct font_info * -font_info_allocate (PangoContext *context) -{ - struct font_info *info; - PangoTabArray *tabs; - - info = g_slice_new0 (struct font_info); - - _vte_debug_print (VTE_DEBUG_PANGOCAIRO, - "vtepangocairo: %p allocating font_info\n", - info); - - info->layout = pango_layout_new (context); - tabs = pango_tab_array_new_with_positions (1, FALSE, PANGO_TAB_LEFT, 1); - pango_layout_set_tabs (info->layout, tabs); - pango_tab_array_free (tabs); - - info->string = g_string_sized_new (VTE_UTF8_BPC+1); - - font_info_measure_font (info); - - return info; -} - -static void -font_info_free (struct font_info *info) -{ - vteunistr i; - -#ifdef VTE_DEBUG - _vte_debug_print (VTE_DEBUG_PANGOCAIRO, - "vtepangocairo: %p freeing font_info. coverages %d = %d + %d + %d\n", - info, - info->coverage_count[0], - info->coverage_count[1], - info->coverage_count[2], - info->coverage_count[3]); -#endif - - g_string_free (info->string, TRUE); - g_object_unref (info->layout); - - for (i = 0; i < G_N_ELEMENTS (info->ascii_unistr_info); i++) - unistr_info_finish (&info->ascii_unistr_info[i]); - - if (info->other_unistr_info) { - g_hash_table_destroy (info->other_unistr_info); - } - - g_slice_free (struct font_info, info); -} - - -static GHashTable *font_info_for_context; - -static struct font_info * -font_info_register (struct font_info *info) -{ - g_hash_table_insert (font_info_for_context, - pango_layout_get_context (info->layout), - info); - - return info; -} - -static void -font_info_unregister (struct font_info *info) -{ - g_hash_table_remove (font_info_for_context, - pango_layout_get_context (info->layout)); -} - - -static struct font_info * -font_info_reference (struct font_info *info) -{ - if (!info) - return info; - - g_return_val_if_fail (info->ref_count >= 0, info); - - if (info->destroy_timeout) { - g_source_remove (info->destroy_timeout); - info->destroy_timeout = 0; - } - - info->ref_count++; - - return info; -} - -static gboolean -font_info_destroy_delayed (struct font_info *info) -{ - info->destroy_timeout = 0; - - font_info_unregister (info); - font_info_free (info); - - return FALSE; -} - -static void -font_info_destroy (struct font_info *info) -{ - if (!info) - return; - - g_return_if_fail (info->ref_count > 0); - - info->ref_count--; - if (info->ref_count) - return; - - /* Delay destruction by a few seconds, in case we need it again */ - info->destroy_timeout = gdk_threads_add_timeout_seconds (FONT_CACHE_TIMEOUT, - (GSourceFunc) font_info_destroy_delayed, - info); -} - -static GQuark -fontconfig_timestamp_quark (void) -{ - static GQuark quark; - - if (G_UNLIKELY (!quark)) - quark = g_quark_from_static_string ("vte-fontconfig-timestamp"); - - return quark; -} - -static void -vte_pango_context_set_fontconfig_timestamp (PangoContext *context, - guint fontconfig_timestamp) -{ - g_object_set_qdata ((GObject *) context, - fontconfig_timestamp_quark (), - GUINT_TO_POINTER (fontconfig_timestamp)); -} - -static guint -vte_pango_context_get_fontconfig_timestamp (PangoContext *context) -{ - return GPOINTER_TO_UINT (g_object_get_qdata ((GObject *) context, - fontconfig_timestamp_quark ())); -} - -static guint -context_hash (PangoContext *context) -{ - return pango_units_from_double (pango_cairo_context_get_resolution (context)) - ^ pango_font_description_hash (pango_context_get_font_description (context)) - ^ cairo_font_options_hash (pango_cairo_context_get_font_options (context)) - ^ GPOINTER_TO_UINT (pango_context_get_language (context)) - ^ vte_pango_context_get_fontconfig_timestamp (context); -} - -static gboolean -context_equal (PangoContext *a, - PangoContext *b) -{ - return _vte_double_equal(pango_cairo_context_get_resolution(a), pango_cairo_context_get_resolution (b)) - && pango_font_description_equal (pango_context_get_font_description (a), pango_context_get_font_description (b)) - && cairo_font_options_equal (pango_cairo_context_get_font_options (a), pango_cairo_context_get_font_options (b)) - && pango_context_get_language (a) == pango_context_get_language (b) - && vte_pango_context_get_fontconfig_timestamp (a) == vte_pango_context_get_fontconfig_timestamp (b); -} - -static struct font_info * -font_info_find_for_context (PangoContext *context) -{ - struct font_info *info; - - if (G_UNLIKELY (font_info_for_context == NULL)) - font_info_for_context = g_hash_table_new ((GHashFunc) context_hash, (GEqualFunc) context_equal); - - info = (struct font_info *)g_hash_table_lookup (font_info_for_context, context); - if (G_LIKELY (info)) { - _vte_debug_print (VTE_DEBUG_PANGOCAIRO, - "vtepangocairo: %p found font_info in cache\n", - info); - info = font_info_reference (info); - } else { - info = font_info_allocate (context); - info->ref_count = 1; - font_info_register (info); - } - - g_object_unref (context); - - return info; -} - -/* assumes ownership/reference of context */ -static struct font_info * -font_info_create_for_context (PangoContext *context, - const PangoFontDescription *desc, - PangoLanguage *language, - guint fontconfig_timestamp) -{ - if (!PANGO_IS_CAIRO_FONT_MAP (pango_context_get_font_map (context))) { - /* Ouch, Gtk+ switched over to some drawing system? - * Lets just create one from the default font map. - */ - g_object_unref (context); - context = pango_font_map_create_context (pango_cairo_font_map_get_default ()); - } - - vte_pango_context_set_fontconfig_timestamp (context, fontconfig_timestamp); - - pango_context_set_base_dir (context, PANGO_DIRECTION_LTR); - - if (desc) - pango_context_set_font_description (context, desc); - - pango_context_set_language (context, language); - - /* Make sure our contexts have a font_options set. We use - * this invariant in our context hash and equal functions. - */ - if (!pango_cairo_context_get_font_options (context)) { - cairo_font_options_t *font_options; - - font_options = cairo_font_options_create (); - pango_cairo_context_set_font_options (context, font_options); - cairo_font_options_destroy (font_options); - } - - return font_info_find_for_context (context); -} - -static struct font_info * -font_info_create_for_screen (GdkScreen *screen, - const PangoFontDescription *desc, - PangoLanguage *language) -{ - GtkSettings *settings = gtk_settings_get_for_screen (screen); - int fontconfig_timestamp; - g_object_get (settings, "gtk-fontconfig-timestamp", &fontconfig_timestamp, nullptr); - return font_info_create_for_context (gdk_pango_context_get_for_screen (screen), - desc, language, fontconfig_timestamp); -} - -static struct font_info * -font_info_create_for_widget (GtkWidget *widget, - const PangoFontDescription *desc) -{ - GdkScreen *screen = gtk_widget_get_screen (widget); - PangoLanguage *language = pango_context_get_language (gtk_widget_get_pango_context (widget)); - - return font_info_create_for_screen (screen, desc, language); -} - -static struct unistr_info * -font_info_get_unistr_info (struct font_info *info, - vteunistr c) -{ - struct unistr_info *uinfo; - union unistr_font_info *ufi; - PangoRectangle logical; - PangoLayoutLine *line; - - uinfo = font_info_find_unistr_info (info, c); - if (G_LIKELY (uinfo->coverage != COVERAGE_UNKNOWN)) - return uinfo; - - ufi = &uinfo->ufi; - - g_string_set_size (info->string, 0); - _vte_unistr_append_to_string (c, info->string); - pango_layout_set_text (info->layout, info->string->str, info->string->len); - pango_layout_get_extents (info->layout, NULL, &logical); - - uinfo->width = PANGO_PIXELS_CEIL (logical.width); - - line = pango_layout_get_line_readonly (info->layout, 0); - - uinfo->has_unknown_chars = pango_layout_get_unknown_glyphs_count (info->layout) != 0; - /* we use PangoLayoutRun rendering unless there is exactly one run in the line. */ - if (G_UNLIKELY (!line || !line->runs || line->runs->next)) - { - uinfo->coverage = COVERAGE_USE_PANGO_LAYOUT_LINE; - - ufi->using_pango_layout_line.line = pango_layout_line_ref (line); - /* we hold a manual reference on layout. pango currently - * doesn't work if line->layout is NULL. ugh! */ - pango_layout_set_text (info->layout, "", -1); /* make layout disassociate from the line */ - ufi->using_pango_layout_line.line->layout = (PangoLayout *)g_object_ref (info->layout); - - } else { - PangoGlyphItem *glyph_item = (PangoGlyphItem *)line->runs->data; - PangoFont *pango_font = glyph_item->item->analysis.font; - PangoGlyphString *glyph_string = glyph_item->glyphs; - - /* we use fast cairo path if glyph string has only one real - * glyph and at origin */ - if (!uinfo->has_unknown_chars && - glyph_string->num_glyphs == 1 && glyph_string->glyphs[0].glyph <= 0xFFFF && - (glyph_string->glyphs[0].geometry.x_offset | - glyph_string->glyphs[0].geometry.y_offset) == 0) - { - cairo_scaled_font_t *scaled_font = pango_cairo_font_get_scaled_font ((PangoCairoFont *) pango_font); - - if (scaled_font) { - uinfo->coverage = COVERAGE_USE_CAIRO_GLYPH; - - ufi->using_cairo_glyph.scaled_font = cairo_scaled_font_reference (scaled_font); - ufi->using_cairo_glyph.glyph_index = glyph_string->glyphs[0].glyph; - } - } - - /* use pango fast path otherwise */ - if (G_UNLIKELY (uinfo->coverage == COVERAGE_UNKNOWN)) { - uinfo->coverage = COVERAGE_USE_PANGO_GLYPH_STRING; - - ufi->using_pango_glyph_string.font = pango_font ? (PangoFont *)g_object_ref (pango_font) : NULL; - ufi->using_pango_glyph_string.glyph_string = pango_glyph_string_copy (glyph_string); - } - } - - /* release internal layout resources */ - pango_layout_set_text (info->layout, "", -1); - -#ifdef VTE_DEBUG - info->coverage_count[0]++; - info->coverage_count[uinfo->coverage]++; -#endif - - return uinfo; -} - -guint _vte_draw_get_style(gboolean bold, gboolean italic) { - guint style = 0; - if (bold) - style |= VTE_DRAW_BOLD; - if (italic) - style |= VTE_DRAW_ITALIC; - return style; -} - -struct _vte_draw { - struct font_info *fonts[4]; - /* cell metrics, already adjusted by cell_{width,height}_scale */ - int cell_width, cell_height; - GtkBorder char_spacing; - - cairo_t *cr; - - /* Cache the undercurl's rendered look. */ - cairo_surface_t *undercurl_surface; -}; - -struct _vte_draw * -_vte_draw_new (void) -{ - struct _vte_draw *draw; - - /* Create the structure. */ - draw = g_slice_new0 (struct _vte_draw); - - _vte_debug_print (VTE_DEBUG_DRAW, "draw_new\n"); - - return draw; -} - -void -_vte_draw_free (struct _vte_draw *draw) -{ - gint style; - _vte_debug_print (VTE_DEBUG_DRAW, "draw_free\n"); - - /* Free all fonts (make sure to destroy every font only once)*/ - for (style = 3; style >= 0; style--) { - if (draw->fonts[style] != NULL && - (style == 0 || draw->fonts[style] != draw->fonts[style-1])) { - font_info_destroy (draw->fonts[style]); - draw->fonts[style] = NULL; - } - } - - if (draw->undercurl_surface != NULL) { - cairo_surface_destroy (draw->undercurl_surface); - draw->undercurl_surface = NULL; - } - - g_slice_free (struct _vte_draw, draw); -} - -void -_vte_draw_set_cairo (struct _vte_draw *draw, - cairo_t *cr) -{ - _vte_debug_print (VTE_DEBUG_DRAW, "%s cairo context\n", cr ? "Settings" : "Unsetting"); - - if (cr) { - g_assert (draw->cr == NULL); - draw->cr = cr; - } else { - g_assert (draw->cr != NULL); - draw->cr = NULL; - } -} - -void -_vte_draw_clip(struct _vte_draw *draw, - cairo_rectangle_int_t const* rect) -{ - cairo_save(draw->cr); - cairo_rectangle(draw->cr, - rect->x, rect->y, rect->width, rect->height); - cairo_clip(draw->cr); -} - -void -_vte_draw_unclip(struct _vte_draw *draw) -{ - cairo_restore(draw->cr); -} - -static void -_vte_draw_set_source_color_alpha (struct _vte_draw *draw, - vte::color::rgb const* color, - double alpha) -{ - g_assert(draw->cr); - cairo_set_source_rgba (draw->cr, - color->red / 65535., - color->green / 65535., - color->blue / 65535., - alpha); -} - -void -_vte_draw_clear (struct _vte_draw *draw, gint x, gint y, gint width, gint height, - vte::color::rgb const* color, double alpha) -{ - _vte_debug_print (VTE_DEBUG_DRAW, "draw_clear (%d, %d, %d, %d)\n", - x,y,width, height); - - g_assert(draw->cr); - cairo_rectangle (draw->cr, x, y, width, height); - cairo_set_operator (draw->cr, CAIRO_OPERATOR_SOURCE); - _vte_draw_set_source_color_alpha(draw, color, alpha); - cairo_fill (draw->cr); -} - -void -_vte_draw_set_text_font (struct _vte_draw *draw, - GtkWidget *widget, - const PangoFontDescription *fontdesc, - double cell_width_scale, - double cell_height_scale) -{ - PangoFontDescription *bolddesc = NULL; - PangoFontDescription *italicdesc = NULL; - PangoFontDescription *bolditalicdesc = NULL; - gint style, normal, bold, ratio; - - _vte_debug_print (VTE_DEBUG_DRAW, "draw_set_text_font\n"); - - /* Free all fonts (make sure to destroy every font only once)*/ - for (style = 3; style >= 0; style--) { - if (draw->fonts[style] != NULL && - (style == 0 || draw->fonts[style] != draw->fonts[style-1])) { - font_info_destroy (draw->fonts[style]); - draw->fonts[style] = NULL; - } - } - - /* calculate bold font desc */ - bolddesc = pango_font_description_copy (fontdesc); - pango_font_description_set_weight (bolddesc, PANGO_WEIGHT_BOLD); - - /* calculate italic font desc */ - italicdesc = pango_font_description_copy (fontdesc); - pango_font_description_set_style (italicdesc, PANGO_STYLE_ITALIC); - - /* calculate bold italic font desc */ - bolditalicdesc = pango_font_description_copy (bolddesc); - pango_font_description_set_style (bolditalicdesc, PANGO_STYLE_ITALIC); - - draw->fonts[VTE_DRAW_NORMAL] = font_info_create_for_widget (widget, fontdesc); - draw->fonts[VTE_DRAW_BOLD] = font_info_create_for_widget (widget, bolddesc); - draw->fonts[VTE_DRAW_ITALIC] = font_info_create_for_widget (widget, italicdesc); - draw->fonts[VTE_DRAW_ITALIC | VTE_DRAW_BOLD] = - font_info_create_for_widget (widget, bolditalicdesc); - pango_font_description_free (bolddesc); - pango_font_description_free (italicdesc); - pango_font_description_free (bolditalicdesc); - - /* Decide if we should keep this bold font face, per bug 54926: - * - reject bold font if it is not within 10% of normal font width - */ - normal = VTE_DRAW_NORMAL; - bold = normal | VTE_DRAW_BOLD; - ratio = draw->fonts[bold]->width * 100 / draw->fonts[normal]->width; - if (abs(ratio - 100) > 10) { - _vte_debug_print (VTE_DEBUG_DRAW, - "Rejecting bold font (%i%%).\n", ratio); - font_info_destroy (draw->fonts[bold]); - draw->fonts[bold] = draw->fonts[normal]; - } - normal = VTE_DRAW_ITALIC; - bold = normal | VTE_DRAW_BOLD; - ratio = draw->fonts[bold]->width * 100 / draw->fonts[normal]->width; - if (abs(ratio - 100) > 10) { - _vte_debug_print (VTE_DEBUG_DRAW, - "Rejecting italic bold font (%i%%).\n", ratio); - font_info_destroy (draw->fonts[bold]); - draw->fonts[bold] = draw->fonts[normal]; - } - - /* Apply letter spacing and line spacing. */ - draw->cell_width = draw->fonts[VTE_DRAW_NORMAL]->width * cell_width_scale; - draw->char_spacing.left = (draw->cell_width - draw->fonts[VTE_DRAW_NORMAL]->width) / 2; - draw->char_spacing.right = (draw->cell_width - draw->fonts[VTE_DRAW_NORMAL]->width + 1) / 2; - draw->cell_height = draw->fonts[VTE_DRAW_NORMAL]->height * cell_height_scale; - draw->char_spacing.top = (draw->cell_height - draw->fonts[VTE_DRAW_NORMAL]->height + 1) / 2; - draw->char_spacing.bottom = (draw->cell_height - draw->fonts[VTE_DRAW_NORMAL]->height) / 2; - - /* Drop the undercurl's cached look. Will recache on demand. */ - if (draw->undercurl_surface != NULL) { - cairo_surface_destroy (draw->undercurl_surface); - draw->undercurl_surface = NULL; - } -} - -void -_vte_draw_get_text_metrics(struct _vte_draw *draw, - int *cell_width, int *cell_height, - int *char_ascent, int *char_descent, - GtkBorder *char_spacing) -{ - g_return_if_fail (draw->fonts[VTE_DRAW_NORMAL] != NULL); - - if (cell_width) - *cell_width = draw->cell_width; - if (cell_height) - *cell_height = draw->cell_height; - if (char_ascent) - *char_ascent = draw->fonts[VTE_DRAW_NORMAL]->ascent; - if (char_descent) - *char_descent = draw->fonts[VTE_DRAW_NORMAL]->height - draw->fonts[VTE_DRAW_NORMAL]->ascent; - if (char_spacing) - *char_spacing = draw->char_spacing; -} - -/* Check if a unicode character is actually a graphic character we draw - * ourselves to handle cases where fonts don't have glyphs for them. */ -static gboolean -_vte_draw_unichar_is_local_graphic(vteunistr c) -{ - /* Box Drawing & Block Elements */ - return ((c >= 0x2500 && c <= 0x259f) || - (c >= 0x25e2 && c <= 0x25e5) || - (c >= 0x1fb00 && c <= 0x1fbaf)); -} - -/* Stores the left and right edges of the given glyph, relative to the cell's left edge. */ -void -_vte_draw_get_char_edges (struct _vte_draw *draw, vteunistr c, int columns, guint style, - int *left, int *right) -{ - if (G_UNLIKELY (_vte_draw_unichar_is_local_graphic (c))) { - if (left) - *left = 0; - if (right) - *right = draw->cell_width * columns; - return; - } - - int l, w, normal_width, fits_width; - - if (G_UNLIKELY (draw->fonts[VTE_DRAW_NORMAL] == NULL)) { - if (left) - *left = 0; - if (right) - *right = 0; - return; - } - - w = font_info_get_unistr_info (draw->fonts[style], c)->width; - normal_width = draw->fonts[VTE_DRAW_NORMAL]->width * columns; - fits_width = draw->cell_width * columns; - - if (G_LIKELY (w <= normal_width)) { - /* The regular case: The glyph is not wider than one (CJK: two) regular character(s). - * Align to the left, after applying half (CJK: one) letter spacing. */ - l = draw->char_spacing.left + (columns == 2 ? draw->char_spacing.right : 0); - } else if (G_UNLIKELY (w <= fits_width)) { - /* Slightly wider glyph, but still fits in the cell (spacing included). This case can - * only happen with nonzero letter spacing. Center the glyph in the cell(s). */ - l = (fits_width - w) / 2; - } else { - /* Even wider glyph: doesn't fit in the cell. Align at left and overflow on the right. */ - l = 0; - } - - if (left) - *left = l; - if (right) - *right = l + w; -} - -/* pixman data must have stride 0 mod 4 */ -static unsigned char const hatching_pattern_lr_data[16] = { - 0xff, 0x00, 0x00, 0x00, - 0x00, 0xff, 0x00, 0x00, - 0x00, 0x00, 0xff, 0x00, - 0x00, 0x00, 0x00, 0xff, -}; -static unsigned char const hatching_pattern_rl_data[16] = { - 0x00, 0x00, 0x00, 0xff, - 0x00, 0x00, 0xff, 0x00, - 0x00, 0xff, 0x00, 0x00, - 0xff, 0x00, 0x00, 0x00, -}; -static unsigned char const checkerboard_pattern_data[16] = { - 0xff, 0xff, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, - 0x00, 0x00, 0xff, 0xff, -}; -static unsigned char const checkerboard_reverse_pattern_data[16] = { - 0x00, 0x00, 0xff, 0xff, - 0x00, 0x00, 0xff, 0xff, - 0xff, 0xff, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, -}; - -#define DEFINE_STATIC_PATTERN_FUNC(name,data,width,height,stride) \ -static cairo_pattern_t* \ -name(void) \ -{ \ - static cairo_pattern_t* pattern = nullptr; \ -\ - if (pattern == nullptr) { \ - auto surface = cairo_image_surface_create_for_data(const_cast(data), \ - CAIRO_FORMAT_A8, \ - width, \ - height, \ - stride); \ - pattern = cairo_pattern_create_for_surface(surface); \ - cairo_surface_destroy(surface); \ -\ - cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT); \ - cairo_pattern_set_filter (pattern, CAIRO_FILTER_NEAREST); \ - } \ -\ - return pattern; \ -} - -DEFINE_STATIC_PATTERN_FUNC(create_hatching_pattern_lr, hatching_pattern_lr_data, 4, 4, 4) -DEFINE_STATIC_PATTERN_FUNC(create_hatching_pattern_rl, hatching_pattern_rl_data, 4, 4, 4) -DEFINE_STATIC_PATTERN_FUNC(create_checkerboard_pattern, checkerboard_pattern_data, 4, 4, 4) -DEFINE_STATIC_PATTERN_FUNC(create_checkerboard_reverse_pattern, checkerboard_reverse_pattern_data, 4, 4, 4) - -#undef DEFINE_STATIC_PATTERN_FUNC - -static void -rectangle(cairo_t* cr, - double x, - double y, - double w, - double h, - int xdenom, - int ydenom, - int xb1, - int yb1, - int xb2, - int yb2) -{ - int const x1 = (w) * (xb1) / (xdenom); - int const y1 = (h) * (yb1) / (ydenom); - int const x2 = (w) * (xb2) / (xdenom); - int const y2 = (h) * (yb2) / (ydenom); - cairo_rectangle ((cr), (x) + x1, (y) + y1, MAX(x2 - x1, 1), MAX(y2 - y1, 1)); - cairo_fill (cr); -} - -static void -polygon(cairo_t* cr, - double x, - double y, - double w, - double h, - int xdenom, - int ydenom, - int8_t const* cc) -{ - int x1 = (w) * (cc[0]) / (xdenom); - int y1 = (h) * (cc[1]) / (ydenom); - cairo_move_to ((cr), (x) + x1, (y) + y1); - int i = 2; - while (cc[i] != -1) { - x1 = (w) * (cc[i]) / (xdenom); - y1 = (h) * (cc[i + 1]) / (ydenom); - cairo_line_to ((cr), (x) + x1, (y) + y1); - i += 2; - } - cairo_fill (cr); -} - -static void -pattern(cairo_t* cr, - cairo_pattern_t* pattern, - double x, - double y, - double width, - double height) -{ - cairo_push_group(cr); - cairo_rectangle(cr, x, y, width, height); - cairo_fill(cr); - cairo_pop_group_to_source(cr); - cairo_mask(cr, pattern); -} - -#include "box_drawing.h" - -/* Draw the graphic representation of a line-drawing or special graphics - * character. */ -static void -_vte_draw_terminal_draw_graphic(struct _vte_draw *draw, - vteunistr c, - uint32_t attr, - vte::color::rgb const* fg, - gint x, gint y, - gint font_width, gint columns, gint font_height) -{ - gint width, height, xcenter, xright, ycenter, ybottom; - int upper_half, left_half; - int light_line_width, heavy_line_width; - double adjust; - cairo_t *cr = draw->cr; - - cairo_save (cr); - - width = draw->cell_width * columns; - height = draw->cell_height; - upper_half = height / 2; - left_half = width / 2; - - /* Exclude the spacing for line width computation. */ - light_line_width = font_width / 5; - light_line_width = MAX (light_line_width, 1); - - if (c >= 0x2550 && c <= 0x256c) { - heavy_line_width = 3 * light_line_width; - } else { - heavy_line_width = light_line_width + 2; - } - - xcenter = x + left_half; - ycenter = y + upper_half; - xright = x + width; - ybottom = y + height; - - switch (c) { - - /* Box Drawing */ - case 0x1fbaf: /* box drawings light horizontal with vertical stroke */ - rectangle(cr, x + left_half - light_line_width / 2, y, - light_line_width, height, 1, 3, 0, 1, 1, 2); - c = 0x2500; - [[fallthrough]]; - case 0x2500: /* box drawings light horizontal */ - case 0x2501: /* box drawings heavy horizontal */ - case 0x2502: /* box drawings light vertical */ - case 0x2503: /* box drawings heavy vertical */ - case 0x250c: /* box drawings light down and right */ - case 0x250d: /* box drawings down light and right heavy */ - case 0x250e: /* box drawings down heavy and right light */ - case 0x250f: /* box drawings heavy down and right */ - case 0x2510: /* box drawings light down and left */ - case 0x2511: /* box drawings down light and left heavy */ - case 0x2512: /* box drawings down heavy and left light */ - case 0x2513: /* box drawings heavy down and left */ - case 0x2514: /* box drawings light up and right */ - case 0x2515: /* box drawings up light and right heavy */ - case 0x2516: /* box drawings up heavy and right light */ - case 0x2517: /* box drawings heavy up and right */ - case 0x2518: /* box drawings light up and left */ - case 0x2519: /* box drawings up light and left heavy */ - case 0x251a: /* box drawings up heavy and left light */ - case 0x251b: /* box drawings heavy up and left */ - case 0x251c: /* box drawings light vertical and right */ - case 0x251d: /* box drawings vertical light and right heavy */ - case 0x251e: /* box drawings up heavy and right down light */ - case 0x251f: /* box drawings down heavy and right up light */ - case 0x2520: /* box drawings vertical heavy and right light */ - case 0x2521: /* box drawings down light and right up heavy */ - case 0x2522: /* box drawings up light and right down heavy */ - case 0x2523: /* box drawings heavy vertical and right */ - case 0x2524: /* box drawings light vertical and left */ - case 0x2525: /* box drawings vertical light and left heavy */ - case 0x2526: /* box drawings up heavy and left down light */ - case 0x2527: /* box drawings down heavy and left up light */ - case 0x2528: /* box drawings vertical heavy and left light */ - case 0x2529: /* box drawings down light and left up heavy */ - case 0x252a: /* box drawings up light and left down heavy */ - case 0x252b: /* box drawings heavy vertical and left */ - case 0x252c: /* box drawings light down and horizontal */ - case 0x252d: /* box drawings left heavy and right down light */ - case 0x252e: /* box drawings right heavy and left down light */ - case 0x252f: /* box drawings down light and horizontal heavy */ - case 0x2530: /* box drawings down heavy and horizontal light */ - case 0x2531: /* box drawings right light and left down heavy */ - case 0x2532: /* box drawings left light and right down heavy */ - case 0x2533: /* box drawings heavy down and horizontal */ - case 0x2534: /* box drawings light up and horizontal */ - case 0x2535: /* box drawings left heavy and right up light */ - case 0x2536: /* box drawings right heavy and left up light */ - case 0x2537: /* box drawings up light and horizontal heavy */ - case 0x2538: /* box drawings up heavy and horizontal light */ - case 0x2539: /* box drawings right light and left up heavy */ - case 0x253a: /* box drawings left light and right up heavy */ - case 0x253b: /* box drawings heavy up and horizontal */ - case 0x253c: /* box drawings light vertical and horizontal */ - case 0x253d: /* box drawings left heavy and right vertical light */ - case 0x253e: /* box drawings right heavy and left vertical light */ - case 0x253f: /* box drawings vertical light and horizontal heavy */ - case 0x2540: /* box drawings up heavy and down horizontal light */ - case 0x2541: /* box drawings down heavy and up horizontal light */ - case 0x2542: /* box drawings vertical heavy and horizontal light */ - case 0x2543: /* box drawings left up heavy and right down light */ - case 0x2544: /* box drawings right up heavy and left down light */ - case 0x2545: /* box drawings left down heavy and right up light */ - case 0x2546: /* box drawings right down heavy and left up light */ - case 0x2547: /* box drawings down light and up horizontal heavy */ - case 0x2548: /* box drawings up light and down horizontal heavy */ - case 0x2549: /* box drawings right light and left vertical heavy */ - case 0x254a: /* box drawings left light and right vertical heavy */ - case 0x254b: /* box drawings heavy vertical and horizontal */ - case 0x2550: /* box drawings double horizontal */ - case 0x2551: /* box drawings double vertical */ - case 0x2552: /* box drawings down single and right double */ - case 0x2553: /* box drawings down double and right single */ - case 0x2554: /* box drawings double down and right */ - case 0x2555: /* box drawings down single and left double */ - case 0x2556: /* box drawings down double and left single */ - case 0x2557: /* box drawings double down and left */ - case 0x2558: /* box drawings up single and right double */ - case 0x2559: /* box drawings up double and right single */ - case 0x255a: /* box drawings double up and right */ - case 0x255b: /* box drawings up single and left double */ - case 0x255c: /* box drawings up double and left single */ - case 0x255d: /* box drawings double up and left */ - case 0x255e: /* box drawings vertical single and right double */ - case 0x255f: /* box drawings vertical double and right single */ - case 0x2560: /* box drawings double vertical and right */ - case 0x2561: /* box drawings vertical single and left double */ - case 0x2562: /* box drawings vertical double and left single */ - case 0x2563: /* box drawings double vertical and left */ - case 0x2564: /* box drawings down single and horizontal double */ - case 0x2565: /* box drawings down double and horizontal single */ - case 0x2566: /* box drawings double down and horizontal */ - case 0x2567: /* box drawings up single and horizontal double */ - case 0x2568: /* box drawings up double and horizontal single */ - case 0x2569: /* box drawings double up and horizontal */ - case 0x256a: /* box drawings vertical single and horizontal double */ - case 0x256b: /* box drawings vertical double and horizontal single */ - case 0x256c: /* box drawings double vertical and horizontal */ - case 0x2574: /* box drawings light left */ - case 0x2575: /* box drawings light up */ - case 0x2576: /* box drawings light right */ - case 0x2577: /* box drawings light down */ - case 0x2578: /* box drawings heavy left */ - case 0x2579: /* box drawings heavy up */ - case 0x257a: /* box drawings heavy right */ - case 0x257b: /* box drawings heavy down */ - case 0x257c: /* box drawings light left and heavy right */ - case 0x257d: /* box drawings light up and heavy down */ - case 0x257e: /* box drawings heavy left and light right */ - case 0x257f: /* box drawings heavy up and light down */ - { - guint32 bitmap = _vte_draw_box_drawing_bitmaps[c - 0x2500]; - int xboundaries[6] = { 0, - left_half - heavy_line_width / 2, - left_half - light_line_width / 2, - left_half - light_line_width / 2 + light_line_width, - left_half - heavy_line_width / 2 + heavy_line_width, - width}; - int yboundaries[6] = { 0, - upper_half - heavy_line_width / 2, - upper_half - light_line_width / 2, - upper_half - light_line_width / 2 + light_line_width, - upper_half - heavy_line_width / 2 + heavy_line_width, - height}; - int xi, yi; - cairo_set_line_width(cr, 0); - for (yi = 4; yi >= 0; yi--) { - for (xi = 4; xi >= 0; xi--) { - if (bitmap & 1) { - cairo_rectangle(cr, - x + xboundaries[xi], - y + yboundaries[yi], - xboundaries[xi + 1] - xboundaries[xi], - yboundaries[yi + 1] - yboundaries[yi]); - cairo_fill(cr); - } - bitmap >>= 1; - } - } - break; - } - - case 0x2504: /* box drawings light triple dash horizontal */ - case 0x2505: /* box drawings heavy triple dash horizontal */ - case 0x2506: /* box drawings light triple dash vertical */ - case 0x2507: /* box drawings heavy triple dash vertical */ - case 0x2508: /* box drawings light quadruple dash horizontal */ - case 0x2509: /* box drawings heavy quadruple dash horizontal */ - case 0x250a: /* box drawings light quadruple dash vertical */ - case 0x250b: /* box drawings heavy quadruple dash vertical */ - case 0x254c: /* box drawings light double dash horizontal */ - case 0x254d: /* box drawings heavy double dash horizontal */ - case 0x254e: /* box drawings light double dash vertical */ - case 0x254f: /* box drawings heavy double dash vertical */ - { - const guint v = c - 0x2500; - int size, line_width; - - size = (v & 2) ? height : width; - - switch (v >> 2) { - case 1: /* triple dash */ - { - double segment = size / 8.; - double dashes[2] = { segment * 2., segment }; - cairo_set_dash(cr, dashes, G_N_ELEMENTS(dashes), 0.); - break; - } - case 2: /* quadruple dash */ - { - double segment = size / 11.; - double dashes[2] = { segment * 2., segment }; - cairo_set_dash(cr, dashes, G_N_ELEMENTS(dashes), 0.); - break; - } - case 19: /* double dash */ - { - double segment = size / 5.; - double dashes[2] = { segment * 2., segment }; - cairo_set_dash(cr, dashes, G_N_ELEMENTS(dashes), 0.); - break; - } - } - - line_width = (v & 1) ? heavy_line_width : light_line_width; - adjust = (line_width & 1) ? .5 : 0.; - - cairo_set_line_width(cr, line_width); - cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); - if (v & 2) { - cairo_move_to(cr, xcenter + adjust, y); - cairo_line_to(cr, xcenter + adjust, y + height); - } else { - cairo_move_to(cr, x, ycenter + adjust); - cairo_line_to(cr, x + width, ycenter + adjust); - } - cairo_stroke(cr); - break; - } - - case 0x256d: /* box drawings light arc down and right */ - case 0x256e: /* box drawings light arc down and left */ - case 0x256f: /* box drawings light arc up and left */ - case 0x2570: /* box drawings light arc up and right */ - { - const guint v = c - 0x256d; - int line_width; - int radius; - - cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); - - line_width = light_line_width; - adjust = (line_width & 1) ? .5 : 0.; - cairo_set_line_width(cr, line_width); - - radius = (font_width + 2) / 3; - radius = MAX(radius, heavy_line_width); - - if (v & 2) { - cairo_move_to(cr, xcenter + adjust, y); - cairo_line_to(cr, xcenter + adjust, ycenter - radius + 2 * adjust); - } else { - cairo_move_to(cr, xcenter + adjust, ybottom); - cairo_line_to(cr, xcenter + adjust, ycenter + radius); - } - cairo_stroke(cr); - - cairo_arc(cr, - (v == 1 || v == 2) ? xcenter - radius + 2 * adjust - : xcenter + radius, - (v & 2) ? ycenter - radius + 2 * adjust - : ycenter + radius, - radius - adjust, - (v + 2) * M_PI / 2.0, (v + 3) * M_PI / 2.0); - cairo_stroke(cr); - - if (v == 1 || v == 2) { - cairo_move_to(cr, xcenter - radius + 2 * adjust, ycenter + adjust); - cairo_line_to(cr, x, ycenter + adjust); - } else { - cairo_move_to(cr, xcenter + radius, ycenter + adjust); - cairo_line_to(cr, xright, ycenter + adjust); - } - - cairo_stroke(cr); - break; - } - - case 0x2571: /* box drawings light diagonal upper right to lower left */ - case 0x2572: /* box drawings light diagonal upper left to lower right */ - case 0x2573: /* box drawings light diagonal cross */ - { - auto const dx = (light_line_width + 1) / 2; - cairo_rectangle(cr, x - dx, y, width + 2 * dx, height); - cairo_clip(cr); - cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE); - cairo_set_line_width(cr, light_line_width); - if (c != 0x2571) { - cairo_move_to(cr, x, y); - cairo_line_to(cr, xright, ybottom); - cairo_stroke(cr); - } - if (c != 0x2572) { - cairo_move_to(cr, xright, y); - cairo_line_to(cr, x, ybottom); - cairo_stroke(cr); - } - break; - } - - /* Block Elements */ - case 0x2580: /* upper half block */ - rectangle(cr, x, y, width, height, 1, 2, 0, 0, 1, 1); - break; - - case 0x2581: /* lower one eighth block */ - case 0x2582: /* lower one quarter block */ - case 0x2583: /* lower three eighths block */ - case 0x2584: /* lower half block */ - case 0x2585: /* lower five eighths block */ - case 0x2586: /* lower three quarters block */ - case 0x2587: /* lower seven eighths block */ - { - const guint v = 0x2588 - c; - rectangle(cr, x, y, width, height, 1, 8, 0, v, 1, 8); - break; - } - - case 0x2588: /* full block */ - case 0x2589: /* left seven eighths block */ - case 0x258a: /* left three quarters block */ - case 0x258b: /* left five eighths block */ - case 0x258c: /* left half block */ - case 0x258d: /* left three eighths block */ - case 0x258e: /* left one quarter block */ - case 0x258f: /* left one eighth block */ - { - const guint v = 0x2590 - c; - rectangle(cr, x, y, width, height, 8, 1, 0, 0, v, 1); - break; - } - - case 0x2590: /* right half block */ - rectangle(cr, x, y, width, height, 2, 1, 1, 0, 2, 1); - break; - - case 0x2591: /* light shade */ - case 0x2592: /* medium shade */ - case 0x2593: /* dark shade */ - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - (c - 0x2590) / 4.); - cairo_rectangle(cr, x, y, width, height); - cairo_fill (cr); - break; - - case 0x2594: /* upper one eighth block */ - { - rectangle(cr, x, y, width, height, 1, 8, 0, 0, 1, 1); - break; - } - - case 0x2595: /* right one eighth block */ - { - rectangle(cr, x, y, width, height, 8, 1, 7, 0, 8, 1); - break; - } - - case 0x2596: /* quadrant lower left */ - rectangle(cr, x, y, width, height, 2, 2, 0, 1, 1, 2); - break; - - case 0x2597: /* quadrant lower right */ - rectangle(cr, x, y, width, height, 2, 2, 1, 1, 2, 2); - break; - - case 0x2598: /* quadrant upper left */ - rectangle(cr, x, y, width, height, 2, 2, 0, 0, 1, 1); - break; - - case 0x2599: /* quadrant upper left and lower left and lower right */ - rectangle(cr, x, y, width, height, 2, 2, 0, 0, 1, 1); - rectangle(cr, x, y, width, height, 2, 2, 0, 1, 2, 2); - break; - - case 0x259a: /* quadrant upper left and lower right */ - rectangle(cr, x, y, width, height, 2, 2, 0, 0, 1, 1); - rectangle(cr, x, y, width, height, 2, 2, 1, 1, 2, 2); - break; - - case 0x259b: /* quadrant upper left and upper right and lower left */ - rectangle(cr, x, y, width, height, 2, 2, 0, 0, 2, 1); - rectangle(cr, x, y, width, height, 2, 2, 0, 1, 1, 2); - break; - - case 0x259c: /* quadrant upper left and upper right and lower right */ - rectangle(cr, x, y, width, height, 2, 2, 0, 0, 2, 1); - rectangle(cr, x, y, width, height, 2, 2, 1, 1, 2, 2); - break; - - case 0x259d: /* quadrant upper right */ - rectangle(cr, x, y, width, height, 2, 2, 1, 0, 2, 1); - break; - - case 0x259e: /* quadrant upper right and lower left */ - rectangle(cr, x, y, width, height, 2, 2, 1, 0, 2, 1); - rectangle(cr, x, y, width, height, 2, 2, 0, 1, 1, 2); - break; - - case 0x259f: /* quadrant upper right and lower left and lower right */ - rectangle(cr, x, y, width, height, 2, 2, 1, 0, 2, 1); - rectangle(cr, x, y, width, height, 2, 2, 0, 1, 2, 2); - break; - - case 0x25e2: /* black lower right triangle */ - { - static int8_t const coords[] = { 0, 1, 1, 0, 1, 1, -1 }; - polygon(cr, x, y, width, height, 1, 1, coords); - break; - } - - case 0x25e3: /* black lower left triangle */ - { - static int8_t const coords[] = { 0, 0, 1, 1, 0, 1, -1 }; - polygon(cr, x, y, width, height, 1, 1, coords); - break; - } - - case 0x25e4: /* black upper left triangle */ - { - static int8_t const coords[] = { 0, 0, 1, 0, 0, 1, -1 }; - polygon(cr, x, y, width, height, 1, 1, coords); - break; - } - - case 0x25e5: /* black upper right triangle */ - { - static int8_t const coords[] = { 0, 0, 1, 0, 1, 1, -1 }; - polygon(cr, x, y, width, height, 1, 1, coords); - break; - } - - case 0x1fb00: - case 0x1fb01: - case 0x1fb02: - case 0x1fb03: - case 0x1fb04: - case 0x1fb05: - case 0x1fb06: - case 0x1fb07: - case 0x1fb08: - case 0x1fb09: - case 0x1fb0a: - case 0x1fb0b: - case 0x1fb0c: - case 0x1fb0d: - case 0x1fb0e: - case 0x1fb0f: - case 0x1fb10: - case 0x1fb11: - case 0x1fb12: - case 0x1fb13: - case 0x1fb14: - case 0x1fb15: - case 0x1fb16: - case 0x1fb17: - case 0x1fb18: - case 0x1fb19: - case 0x1fb1a: - case 0x1fb1b: - case 0x1fb1c: - case 0x1fb1d: - case 0x1fb1e: - case 0x1fb1f: - case 0x1fb20: - case 0x1fb21: - case 0x1fb22: - case 0x1fb23: - case 0x1fb24: - case 0x1fb25: - case 0x1fb26: - case 0x1fb27: - case 0x1fb28: - case 0x1fb29: - case 0x1fb2a: - case 0x1fb2b: - case 0x1fb2c: - case 0x1fb2d: - case 0x1fb2e: - case 0x1fb2f: - case 0x1fb30: - case 0x1fb31: - case 0x1fb32: - case 0x1fb33: - case 0x1fb34: - case 0x1fb35: - case 0x1fb36: - case 0x1fb37: - case 0x1fb38: - case 0x1fb39: - case 0x1fb3a: - case 0x1fb3b: - { - guint32 bitmap = c - 0x1fb00 + 1; - if (bitmap >= 0x15) bitmap++; - if (bitmap >= 0x2a) bitmap++; - int xi, yi; - cairo_set_line_width(cr, 0); - for (yi = 0; yi <= 2; yi++) { - for (xi = 0; xi <= 1; xi++) { - if (bitmap & 1) { - rectangle(cr, x, y, width, height, 2, 3, xi, yi, xi + 1, yi + 1); - } - bitmap >>= 1; - } - } - break; - } - - case 0x1fb3c: - case 0x1fb3d: - case 0x1fb3e: - case 0x1fb3f: - case 0x1fb40: - case 0x1fb41: - case 0x1fb42: - case 0x1fb43: - case 0x1fb44: - case 0x1fb45: - case 0x1fb46: - case 0x1fb47: - case 0x1fb48: - case 0x1fb49: - case 0x1fb4a: - case 0x1fb4b: - case 0x1fb4c: - case 0x1fb4d: - case 0x1fb4e: - case 0x1fb4f: - case 0x1fb50: - case 0x1fb51: - case 0x1fb52: - case 0x1fb53: - case 0x1fb54: - case 0x1fb55: - case 0x1fb56: - case 0x1fb57: - case 0x1fb58: - case 0x1fb59: - case 0x1fb5a: - case 0x1fb5b: - case 0x1fb5c: - case 0x1fb5d: - case 0x1fb5e: - case 0x1fb5f: - case 0x1fb60: - case 0x1fb61: - case 0x1fb62: - case 0x1fb63: - case 0x1fb64: - case 0x1fb65: - case 0x1fb66: - case 0x1fb67: - { - auto const v = c - 0x1fb3c; - static int8_t const coords[46][11] = { - { 0, 2, 1, 3, 0, 3, -1 }, /* 3c */ - { 0, 2, 2, 3, 0, 3, -1 }, /* 3d */ - { 0, 1, 1, 3, 0, 3, -1 }, /* 3e */ - { 0, 1, 2, 3, 0, 3, -1 }, /* 3f */ - { 0, 0, 1, 3, 0, 3, -1 }, /* 40 */ - { 0, 1, 1, 0, 2, 0, 2, 3, 0, 3, -1 }, /* 41 */ - { 0, 1, 2, 0, 2, 3, 0, 3, -1 }, /* 42 */ - { 0, 2, 1, 0, 2, 0, 2, 3, 0, 3, -1 }, /* 43 */ - { 0, 2, 2, 0, 2, 3, 0, 3, -1 }, /* 44 */ - { 0, 3, 1, 0, 2, 0, 2, 3, -1 }, /* 45 */ - { 0, 2, 2, 1, 2, 3, 0, 3, -1 }, /* 46 */ - { 1, 3, 2, 2, 2, 3, -1 }, /* 47 */ - { 0, 3, 2, 2, 2, 3, -1 }, /* 48 */ - { 1, 3, 2, 1, 2, 3, -1 }, /* 49 */ - { 0, 3, 2, 1, 2, 3, -1 }, /* 4a */ - { 1, 3, 2, 0, 2, 3, -1 }, /* 4b */ - { 0, 0, 1, 0, 2, 1, 2, 3, 0, 3, -1 }, /* 4c */ - { 0, 0, 2, 1, 2, 3, 0, 3, -1 }, /* 4d */ - { 0, 0, 1, 0, 2, 2, 2, 3, 0, 3, -1 }, /* 4e */ - { 0, 0, 2, 2, 2, 3, 0, 3, -1 }, /* 4f */ - { 0, 0, 1, 0, 2, 3, 0, 3, -1 }, /* 50 */ - { 0, 1, 2, 2, 2, 3, 0, 3, -1 }, /* 51 */ - { 0, 0, 2, 0, 2, 3, 1, 3, 0, 2, -1 }, /* 52 */ - { 0, 0, 2, 0, 2, 3, 0, 2, -1 }, /* 53 */ - { 0, 0, 2, 0, 2, 3, 1, 3, 0, 1, -1 }, /* 54 */ - { 0, 0, 2, 0, 2, 3, 0, 1, -1 }, /* 55 */ - { 0, 0, 2, 0, 2, 3, 1, 3, -1 }, /* 56 */ - { 0, 0, 1, 0, 0, 1, -1 }, /* 57 */ - { 0, 0, 2, 0, 0, 1, -1 }, /* 58 */ - { 0, 0, 1, 0, 0, 2, -1 }, /* 59 */ - { 0, 0, 2, 0, 0, 2, -1 }, /* 5a */ - { 0, 0, 1, 0, 0, 3, -1 }, /* 5b */ - { 0, 0, 2, 0, 2, 1, 0, 2, -1 }, /* 5c */ - { 0, 0, 2, 0, 2, 2, 1, 3, 0, 3, -1 }, /* 5d */ - { 0, 0, 2, 0, 2, 2, 0, 3, -1 }, /* 5e */ - { 0, 0, 2, 0, 2, 1, 1, 3, 0, 3, -1 }, /* 5f */ - { 0, 0, 2, 0, 2, 1, 0, 3, -1 }, /* 60 */ - { 0, 0, 2, 0, 1, 3, 0, 3, -1 }, /* 61 */ - { 1, 0, 2, 0, 2, 1, -1 }, /* 62 */ - { 0, 0, 2, 0, 2, 1, -1 }, /* 63 */ - { 1, 0, 2, 0, 2, 2, -1 }, /* 64 */ - { 0, 0, 2, 0, 2, 2, -1 }, /* 65 */ - { 1, 0, 2, 0, 2, 3, -1 }, /* 66 */ - { 0, 0, 2, 0, 2, 2, 0, 1, -1 }, /* 67 */ - }; - polygon(cr, x, y, width, height, 2, 3, coords[v]); - break; - } - - case 0x1fb68: - case 0x1fb69: - case 0x1fb6a: - case 0x1fb6b: - case 0x1fb6c: - case 0x1fb6d: - case 0x1fb6e: - case 0x1fb6f: - { - auto const v = c - 0x1fb68; - static int8_t const coords[8][11] = { - { 0, 0, 2, 0, 2, 2, 0, 2, 1, 1, -1 }, /* 68 */ - { 0, 0, 1, 1, 2, 0, 2, 2, 0, 2, -1 }, /* 69 */ - { 0, 0, 2, 0, 1, 1, 2, 2, 0, 2, -1 }, /* 6a */ - { 0, 0, 2, 0, 2, 2, 1, 1, 0, 2, -1 }, /* 6b */ - { 0, 0, 1, 1, 0, 2, -1 }, /* 6c */ - { 0, 0, 2, 0, 1, 1, -1 }, /* 6d */ - { 1, 1, 2, 0, 2, 2, -1 }, /* 6e */ - { 1, 1, 2, 2, 0, 2, -1 }, /* 6f */ - }; - polygon(cr, x, y, width, height, 2, 2, coords[v]); - break; - } - - case 0x1fb70: - case 0x1fb71: - case 0x1fb72: - case 0x1fb73: - case 0x1fb74: - case 0x1fb75: - { - auto const v = c - 0x1fb70 + 1; - rectangle(cr, x, y, width, height, 8, 1, v, 0, v + 1, 1); - break; - } - - case 0x1fb76: - case 0x1fb77: - case 0x1fb78: - case 0x1fb79: - case 0x1fb7a: - case 0x1fb7b: - { - auto const v = c - 0x1fb76 + 1; - rectangle(cr, x, y, width, height, 1, 8, 0, v, 1, v + 1); - break; - } - - case 0x1fb7c: - rectangle(cr, x, y, width, height, 1, 8, 0, 7, 1, 8); - rectangle(cr, x, y, width, height, 8, 1, 0, 0, 1, 1); - break; - - case 0x1fb7d: - rectangle(cr, x, y, width, height, 1, 8, 0, 0, 1, 1); - rectangle(cr, x, y, width, height, 8, 1, 0, 0, 1, 1); - break; - - case 0x1fb7e: - rectangle(cr, x, y, width, height, 1, 8, 0, 0, 1, 1); - rectangle(cr, x, y, width, height, 8, 1, 7, 0, 8, 1); - break; - - case 0x1fb7f: - rectangle(cr, x, y, width, height, 1, 8, 0, 7, 1, 8); - rectangle(cr, x, y, width, height, 8, 1, 7, 0, 8, 1); - break; - - case 0x1fb80: - rectangle(cr, x, y, width, height, 1, 8, 0, 0, 1, 1); - rectangle(cr, x, y, width, height, 1, 8, 0, 7, 1, 8); - break; - - case 0x1fb81: - rectangle(cr, x, y, width, height, 1, 8, 0, 0, 1, 1); - rectangle(cr, x, y, width, height, 1, 8, 0, 2, 1, 3); - rectangle(cr, x, y, width, height, 1, 8, 0, 4, 1, 5); - rectangle(cr, x, y, width, height, 1, 8, 0, 7, 1, 8); - break; - - case 0x1fb82: - case 0x1fb83: - case 0x1fb84: - case 0x1fb85: - case 0x1fb86: - { - auto v = c - 0x1fb82 + 2; - if (v >= 4) v++; - rectangle(cr, x, y, width, height, 1, 8, 0, 0, 1, v); - break; - } - - case 0x1fb87: - case 0x1fb88: - case 0x1fb89: - case 0x1fb8a: - case 0x1fb8b: - { - auto v = c - 0x1fb87 + 2; - if (v >= 4) v++; - rectangle(cr, x, y, width, height, 8, 1, 8 - v, 0, 8, 1); - break; - } - - case 0x1fb8c: - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - 0.5); - rectangle(cr, x, y, width, height, 2, 1, 0, 0, 1, 1); - break; - - case 0x1fb8d: - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - 0.5); - rectangle(cr, x, y, width, height, 2, 1, 1, 0, 2, 1); - break; - - case 0x1fb8e: - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - 0.5); - rectangle(cr, x, y, width, height, 1, 2, 0, 0, 1, 1); - break; - - case 0x1fb8f: - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - 0.5); - rectangle(cr, x, y, width, height, 1, 2, 0, 1, 1, 2); - break; - - case 0x1fb90: - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - 0.5); - rectangle(cr, x, y, width, height, 1, 1, 0, 0, 1, 1); - break; - - case 0x1fb91: - rectangle(cr, x, y, width, height, 1, 2, 0, 0, 1, 1); - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - 0.5); - rectangle(cr, x, y, width, height, 1, 2, 0, 1, 1, 2); - break; - - case 0x1fb92: - rectangle(cr, x, y, width, height, 1, 2, 0, 1, 1, 2); - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - 0.5); - rectangle(cr, x, y, width, height, 1, 2, 0, 0, 1, 1); - break; - - case 0x1fb93: -#if 0 - /* codepoint not assigned */ - rectangle(cr, x, y, width, height, 2, 1, 0, 0, 1, 1); - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - 0.5); - rectangle(cr, x, y, width, height, 2, 1, 1, 0, 2, 1); -#endif - break; - - case 0x1fb94: - rectangle(cr, x, y, width, height, 2, 1, 1, 0, 2, 1); - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - 0.5); - rectangle(cr, x, y, width, height, 2, 1, 0, 0, 1, 1); - break; - - case 0x1fb95: - pattern(cr, create_checkerboard_pattern(), x, y, width, height); - break; - - case 0x1fb96: - pattern(cr, create_checkerboard_reverse_pattern(), x, y, width, height); - break; - - case 0x1fb97: - rectangle(cr, x, y, width, height, 1, 4, 0, 1, 1, 2); - rectangle(cr, x, y, width, height, 1, 4, 0, 3, 1, 4); - break; - - case 0x1fb98: - pattern(cr, create_hatching_pattern_lr(), x, y, width, height); - break; - - case 0x1fb99: - pattern(cr, create_hatching_pattern_rl(), x, y, width, height); - break; - - case 0x1fb9a: - { - static int8_t const coords[] = { 0, 0, 1, 0, 0, 1, 1, 1, -1 }; - polygon(cr, x, y, width, height, 1, 1, coords); - break; - } - - case 0x1fb9b: - { - static int8_t coords[] = { 0, 0, 1, 1, 1, 0, 0, 1, -1 }; - polygon(cr, x, y, width, height, 1, 1, coords); - break; - } - - case 0x1fb9c: - { - static int8_t const coords[] = { 0, 0, 1, 0, 0, 1, -1 }; - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - 0.5); - polygon(cr, x, y, width, height, 1, 1, coords); - break; - } - - case 0x1fb9d: - { - static int8_t const coords[] = { 0, 0, 1, 0, 1, 1, -1 }; - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - 0.5); - polygon(cr, x, y, width, height, 1, 1, coords); - break; - } - - case 0x1fb9e: - { - static int8_t const coords[] = { 0, 1, 1, 0, 1, 1, -1 }; - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - 0.5); - polygon(cr, x, y, width, height, 1, 1, coords); - break; - } - - case 0x1fb9f: - { - static int8_t const coords[] = { 0, 0, 1, 1, 0, 1, -1 }; - cairo_set_source_rgba (cr, - fg->red / 65535., - fg->green / 65535., - fg->blue / 65535., - 0.5); - polygon(cr, x, y, width, height, 1, 1, coords); - break; - } - - case 0x1fba0: - case 0x1fba1: - case 0x1fba2: - case 0x1fba3: - case 0x1fba4: - case 0x1fba5: - case 0x1fba6: - case 0x1fba7: - case 0x1fba8: - case 0x1fba9: - case 0x1fbaa: - case 0x1fbab: - case 0x1fbac: - case 0x1fbad: - case 0x1fbae: - { - auto const v = c - 0x1fba0; - static uint8_t const map[15] = { 0b0001, 0b0010, 0b0100, 0b1000, 0b0101, 0b1010, 0b1100, 0b0011, - 0b1001, 0b0110, 0b1110, 0b1101, 0b1011, 0b0111, 0b1111 }; - cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); - cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); - cairo_set_line_width(cr, light_line_width); - adjust = (light_line_width & 1) ? .5 : 0.; - double const dx = light_line_width / 2.; - double const dy = light_line_width / 2.; - if (map[v] & 1) { - /* upper left */ - cairo_move_to(cr, x, ycenter + adjust); - cairo_line_to(cr, x + dx, ycenter + adjust); - cairo_line_to(cr, xcenter + adjust, y + dy); - cairo_line_to(cr, xcenter + adjust, y); - cairo_stroke(cr); - } - if (map[v] & 2) { - /* upper right */ - cairo_move_to(cr, xright, ycenter + adjust); - cairo_line_to(cr, xright - dx, ycenter + adjust); - cairo_line_to(cr, xcenter + adjust, y + dy); - cairo_line_to(cr, xcenter + adjust, y); - cairo_stroke(cr); - } - if (map[v] & 4) { - /* lower left */ - cairo_move_to(cr, x, ycenter + adjust); - cairo_line_to(cr, x + dx, ycenter + adjust); - cairo_line_to(cr, xcenter + adjust, ybottom - dy); - cairo_line_to(cr, xcenter + adjust, ybottom); - cairo_stroke(cr); - } - if (map[v] & 8) { - /* lower right */ - cairo_move_to(cr, xright, ycenter + adjust); - cairo_line_to(cr, xright - dx, ycenter + adjust); - cairo_line_to(cr, xcenter + adjust, ybottom - dy); - cairo_line_to(cr, xcenter + adjust, ybottom); - cairo_stroke(cr); - } - break; - } - - default: - g_assert_not_reached(); - } - - cairo_restore(cr); -} - -static void -_vte_draw_text_internal (struct _vte_draw *draw, - struct _vte_draw_text_request *requests, gsize n_requests, - uint32_t attr, - vte::color::rgb const* color, double alpha, guint style) -{ - gsize i; - cairo_scaled_font_t *last_scaled_font = NULL; - int n_cr_glyphs = 0; - cairo_glyph_t cr_glyphs[MAX_RUN_LENGTH]; - struct font_info *font = draw->fonts[style]; - - g_return_if_fail (font != NULL); - - g_assert(draw->cr); - _vte_draw_set_source_color_alpha (draw, color, alpha); - cairo_set_operator (draw->cr, CAIRO_OPERATOR_OVER); - - for (i = 0; i < n_requests; i++) { - vteunistr c = requests[i].c; - - if (G_UNLIKELY (requests[i].mirror)) { - vte_bidi_get_mirror_char (c, requests[i].box_mirror, &c); - } - - if (_vte_draw_unichar_is_local_graphic(c)) { - _vte_draw_terminal_draw_graphic(draw, c, - attr, - color, - requests[i].x, requests[i].y, - font->width, requests[i].columns, font->height); - continue; - } - - struct unistr_info *uinfo = font_info_get_unistr_info (font, c); - union unistr_font_info *ufi = &uinfo->ufi; - int x, y; - - _vte_draw_get_char_edges(draw, c, requests[i].columns, style, &x, NULL); - x += requests[i].x; - /* Bold/italic versions might have different ascents. In order to align their - * baselines, we offset by the normal font's ascent here. (Bug 137.) */ - y = requests[i].y + draw->char_spacing.top + draw->fonts[VTE_DRAW_NORMAL]->ascent; - - switch (uinfo->coverage) { - default: - case COVERAGE_UNKNOWN: - g_assert_not_reached (); - break; - case COVERAGE_USE_PANGO_LAYOUT_LINE: - cairo_move_to (draw->cr, x, y); - pango_cairo_show_layout_line (draw->cr, - ufi->using_pango_layout_line.line); - break; - case COVERAGE_USE_PANGO_GLYPH_STRING: - cairo_move_to (draw->cr, x, y); - pango_cairo_show_glyph_string (draw->cr, - ufi->using_pango_glyph_string.font, - ufi->using_pango_glyph_string.glyph_string); - break; - case COVERAGE_USE_CAIRO_GLYPH: - if (last_scaled_font != ufi->using_cairo_glyph.scaled_font || n_cr_glyphs == MAX_RUN_LENGTH) { - if (n_cr_glyphs) { - cairo_set_scaled_font (draw->cr, last_scaled_font); - cairo_show_glyphs (draw->cr, - cr_glyphs, - n_cr_glyphs); - n_cr_glyphs = 0; - } - last_scaled_font = ufi->using_cairo_glyph.scaled_font; - } - cr_glyphs[n_cr_glyphs].index = ufi->using_cairo_glyph.glyph_index; - cr_glyphs[n_cr_glyphs].x = x; - cr_glyphs[n_cr_glyphs].y = y; - n_cr_glyphs++; - break; - } - } - if (n_cr_glyphs) { - cairo_set_scaled_font (draw->cr, last_scaled_font); - cairo_show_glyphs (draw->cr, - cr_glyphs, - n_cr_glyphs); - n_cr_glyphs = 0; - } -} - -void -_vte_draw_text (struct _vte_draw *draw, - struct _vte_draw_text_request *requests, gsize n_requests, - uint32_t attr, - vte::color::rgb const* color, double alpha, guint style) -{ - g_assert(draw->cr); - - if (_vte_debug_on (VTE_DEBUG_DRAW)) { - GString *string = g_string_new (""); - gchar *str; - gsize n; - for (n = 0; n < n_requests; n++) { - g_string_append_unichar (string, requests[n].c); - } - str = g_string_free (string, FALSE); - g_printerr ("draw_text (\"%s\", len=%" G_GSIZE_FORMAT ", color=(%d,%d,%d,%.3f), %s - %s)\n", - str, n_requests, color->red, color->green, color->blue, alpha, - (style & VTE_DRAW_BOLD) ? "bold" : "normal", - (style & VTE_DRAW_ITALIC) ? "italic" : "regular"); - g_free (str); - } - - _vte_draw_text_internal (draw, requests, n_requests, attr, color, alpha, style); -} - -/* The following two functions are unused since commit 154abade902850afb44115cccf8fcac51fc082f0, - * but let's keep them for now since they may become used again. - */ -gboolean -_vte_draw_has_char (struct _vte_draw *draw, vteunistr c, guint style) -{ - struct unistr_info *uinfo; - - _vte_debug_print (VTE_DEBUG_DRAW, "draw_has_char ('0x%04X', %s - %s)\n", c, - (style & VTE_DRAW_BOLD) ? "bold" : "normal", - (style & VTE_DRAW_ITALIC) ? "italic" : "regular"); - - g_return_val_if_fail (draw->fonts[VTE_DRAW_NORMAL] != NULL, FALSE); - - uinfo = font_info_get_unistr_info (draw->fonts[style], c); - return !uinfo->has_unknown_chars; -} - -gboolean -_vte_draw_char (struct _vte_draw *draw, - struct _vte_draw_text_request *request, - uint32_t attr, - vte::color::rgb const* color, double alpha, guint style) -{ - gboolean has_char; - - _vte_debug_print (VTE_DEBUG_DRAW, - "draw_char ('%c', color=(%d,%d,%d,%.3f), %s, %s)\n", - request->c, - color->red, color->green, color->blue, - alpha, - (style & VTE_DRAW_BOLD) ? "bold" : "normal", - (style & VTE_DRAW_ITALIC) ? "italic" : "regular"); - - has_char =_vte_draw_has_char (draw, request->c, style); - if (has_char) - _vte_draw_text (draw, request, 1, attr, color, alpha, style); - - return has_char; -} - -void -_vte_draw_draw_rectangle (struct _vte_draw *draw, - gint x, gint y, gint width, gint height, - vte::color::rgb const* color, double alpha) -{ - g_assert(draw->cr); - - _vte_debug_print (VTE_DEBUG_DRAW, - "draw_rectangle (%d, %d, %d, %d, color=(%d,%d,%d,%.3f))\n", - x,y,width,height, - color->red, color->green, color->blue, - alpha); - - cairo_set_operator (draw->cr, CAIRO_OPERATOR_OVER); - cairo_rectangle (draw->cr, x+VTE_LINE_WIDTH/2., y+VTE_LINE_WIDTH/2., width-VTE_LINE_WIDTH, height-VTE_LINE_WIDTH); - _vte_draw_set_source_color_alpha (draw, color, alpha); - cairo_set_line_width (draw->cr, VTE_LINE_WIDTH); - cairo_stroke (draw->cr); -} - -void -_vte_draw_fill_rectangle (struct _vte_draw *draw, - gint x, gint y, gint width, gint height, - vte::color::rgb const* color, double alpha) -{ - g_assert(draw->cr); - - _vte_debug_print (VTE_DEBUG_DRAW, - "draw_fill_rectangle (%d, %d, %d, %d, color=(%d,%d,%d,%.3f))\n", - x,y,width,height, - color->red, color->green, color->blue, - alpha); - - cairo_set_operator (draw->cr, CAIRO_OPERATOR_OVER); - cairo_rectangle (draw->cr, x, y, width, height); - _vte_draw_set_source_color_alpha (draw, color, alpha); - cairo_fill (draw->cr); -} - - -void -_vte_draw_draw_line(struct _vte_draw *draw, - gint x, gint y, gint xp, gint yp, - int line_width, - vte::color::rgb const *color, double alpha) -{ - _vte_draw_fill_rectangle(draw, - x, y, - MAX(line_width, xp - x + 1), MAX(line_width, yp - y + 1), - color, alpha); -} - -static inline double -_vte_draw_get_undercurl_rad(gint width) -{ - return width / 2. / sqrt(2); -} - -static inline double -_vte_draw_get_undercurl_arc_height(gint width) -{ - return _vte_draw_get_undercurl_rad(width) * (1. - sqrt(2) / 2.); -} - -double -_vte_draw_get_undercurl_height(gint width, double line_width) -{ - return 2. * _vte_draw_get_undercurl_arc_height(width) + line_width; -} - -void -_vte_draw_draw_undercurl(struct _vte_draw *draw, - gint x, double y, - double line_width, - gint count, - vte::color::rgb const *color, double alpha) -{ - /* The end of the curly line slightly overflows to the next cell, so the canvas - * caching the rendered look has to be wider not to chop this off. */ - gint x_padding = line_width + 1; /* ceil, kind of */ - - gint surface_top = y; /* floor */ - - g_assert(draw->cr); - - _vte_debug_print (VTE_DEBUG_DRAW, - "draw_undercurl (x=%d, y=%f, count=%d, color=(%d,%d,%d,%.3f))\n", - x, y, count, - color->red, color->green, color->blue, - alpha); - - if (G_UNLIKELY (draw->undercurl_surface == NULL)) { - /* Cache the undercurl's look. The design assumes that until the cached look is - * invalidated (the font is changed), this method is always called with the "y" - * parameter having the same fractional part, and the same "line_width" parameter. - * For caching, only the fractional part of "y" is used. */ - cairo_t *undercurl_cr; - - double rad = _vte_draw_get_undercurl_rad(draw->cell_width); - double y_bottom = y + _vte_draw_get_undercurl_height(draw->cell_width, line_width); - double y_center = (y + y_bottom) / 2.; - gint surface_bottom = y_bottom + 1; /* ceil, kind of */ - - _vte_debug_print (VTE_DEBUG_DRAW, - "caching undercurl shape\n"); - - /* Add a line_width of margin horizontally on both sides, for nice antialias overflowing. */ - draw->undercurl_surface = cairo_surface_create_similar (cairo_get_target (draw->cr), - CAIRO_CONTENT_ALPHA, - draw->cell_width + 2 * x_padding, - surface_bottom - surface_top); - undercurl_cr = cairo_create (draw->undercurl_surface); - cairo_set_operator (undercurl_cr, CAIRO_OPERATOR_OVER); - /* First quarter circle, similar to the left half of the tilde symbol. */ - cairo_arc (undercurl_cr, x_padding + draw->cell_width / 4., y_center - surface_top + draw->cell_width / 4., rad, M_PI * 5 / 4, M_PI * 7 / 4); - /* Second quarter circle, similar to the right half of the tilde symbol. */ - cairo_arc_negative (undercurl_cr, x_padding + draw->cell_width * 3 / 4., y_center - surface_top - draw->cell_width / 4., rad, M_PI * 3 / 4, M_PI / 4); - cairo_set_line_width (undercurl_cr, line_width); - cairo_stroke (undercurl_cr); - cairo_destroy (undercurl_cr); - } - - /* Paint the cached look of the undercurl using the desired look. - * The cached look takes the fractional part of "y" into account, - * here we only offset by its integer part. */ - cairo_save (draw->cr); - cairo_set_operator (draw->cr, CAIRO_OPERATOR_OVER); - _vte_draw_set_source_color_alpha (draw, color, alpha); - for (int i = 0; i < count; i++) { - cairo_mask_surface (draw->cr, draw->undercurl_surface, x - x_padding + i * draw->cell_width, surface_top); - } - cairo_restore (draw->cr); -} diff --git a/src/vtedraw.hh b/src/vtedraw.hh deleted file mode 100644 index dc64b84..0000000 --- a/src/vtedraw.hh +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2003 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/* The interfaces in this file are subject to change at any time. */ - -#ifndef vte_vtedraw_h_included -#define vte_vtedraw_h_included - -#include -#include -#include -#include "vteunistr.h" -#include "vtetypes.hh" - -G_BEGIN_DECLS - -#define VTE_DRAW_OPAQUE (1.0) - -#define VTE_DRAW_NORMAL 0 -#define VTE_DRAW_BOLD 1 -#define VTE_DRAW_ITALIC 2 - -struct _vte_draw; - -/* A request to draw a particular character spanning a given number of columns - at the given location. Unlike most APIs, (x,y) specifies the top-left - corner of the cell into which the character will be drawn instead of the - left end of the baseline. */ -struct _vte_draw_text_request { - vteunistr c; - gshort x, y, columns; - guint8 mirror : 1; /* Char has RTL resolved directionality, mirror if mirrorable. */ - guint8 box_mirror : 1; /* Add box drawing chars to the set of mirrorable characters. */ -}; - -guint _vte_draw_get_style(gboolean bold, gboolean italic); - -/* Create and destroy a draw structure. */ -struct _vte_draw *_vte_draw_new(void); -void _vte_draw_free(struct _vte_draw *draw); - -void _vte_draw_set_cairo(struct _vte_draw *draw, - cairo_t *cr); - -void _vte_draw_clip(struct _vte_draw *draw, - cairo_rectangle_int_t const* rect); - -void _vte_draw_unclip(struct _vte_draw *draw); - -void _vte_draw_clear(struct _vte_draw *draw, - gint x, gint y, gint width, gint height, - vte::color::rgb const* color, double alpha); - -void _vte_draw_set_text_font(struct _vte_draw *draw, - GtkWidget *widget, - const PangoFontDescription *fontdesc, - double cell_width_scale, double cell_height_scale); -void _vte_draw_get_text_metrics(struct _vte_draw *draw, - int *cell_width, int *cell_height, - int *char_ascent, int *char_descent, - GtkBorder *char_spacing); -void _vte_draw_get_char_edges (struct _vte_draw *draw, vteunistr c, int columns, guint style, - int *left, int *right); - -void _vte_draw_text(struct _vte_draw *draw, - struct _vte_draw_text_request *requests, gsize n_requests, - uint32_t attr, - vte::color::rgb const* color, double alpha, guint style); -gboolean _vte_draw_char(struct _vte_draw *draw, - struct _vte_draw_text_request *request, - uint32_t attr, - vte::color::rgb const* color, double alpha, guint style); -gboolean _vte_draw_has_char(struct _vte_draw *draw, vteunistr c, guint style); - -void _vte_draw_fill_rectangle(struct _vte_draw *draw, - gint x, gint y, gint width, gint height, - vte::color::rgb const* color, double alpha); -void _vte_draw_draw_rectangle(struct _vte_draw *draw, - gint x, gint y, gint width, gint height, - vte::color::rgb const* color, double alpha); - -void _vte_draw_draw_line(struct _vte_draw *draw, - gint x, gint y, gint xp, gint yp, - int line_width, - vte::color::rgb const *color, double alpha); - -double -_vte_draw_get_undercurl_height(gint width, double line_width); - -void -_vte_draw_draw_undercurl(struct _vte_draw *draw, - gint x, double y, - double line_width, - gint count, - vte::color::rgb const *color, double alpha); - -G_END_DECLS - -class _vte_draw_autoclip_t { -private: - struct _vte_draw* m_draw; -public: - _vte_draw_autoclip_t(struct _vte_draw* draw, - cairo_rectangle_int_t const* rect) - : m_draw{draw} - { - _vte_draw_clip(m_draw, rect); - } - - ~_vte_draw_autoclip_t() - { - _vte_draw_unclip(m_draw); - } -}; - -#endif diff --git a/src/vtegtk.cc b/src/vtegtk.cc index 8f2dd2d..92eb688 100644 --- a/src/vtegtk.cc +++ b/src/vtegtk.cc @@ -1,19 +1,19 @@ /* * Copyright (C) 2001-2004,2009,2010 Red Hat, Inc. - * Copyright © 2008, 2009, 2010, 2015 Christian Persch + * Copyright © 2008, 2009, 2010, 2015, 2022, 2023 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ /** @@ -32,10 +32,12 @@ #include "config.h" #include /* placement new */ +#include +#include #include -#ifdef HAVE_LOCALE_H +#if __has_include() #include #endif @@ -49,6 +51,7 @@ #include "debug.h" #include "glib-glue.hh" +#include "gobject-glue.hh" #include "marshal.h" #include "reaper.hh" #include "vtedefines.hh" @@ -59,11 +62,15 @@ #include "vteptyinternal.hh" #include "vteregexinternal.hh" -#ifdef WITH_A11Y -#include "vteaccess.h" -#endif +#include -#ifdef WITH_ICU +#if WITH_A11Y +#if VTE_GTK == 3 +#include "vteaccess.h" +#endif /* VTE_GTK == 3 */ +#endif /* WITH_A11Y */ + +#if WITH_ICU #include "icu-glue.hh" #endif @@ -72,19 +79,90 @@ #define VTE_TERMINAL_CSS_NAME "vte-terminal" +/* Note that the exact priority used is an implementation detail subject to change + * and *not* an API guarantee. + * */ +#if VTE_GTK == 3 +#define VTE_TERMINAL_CSS_PRIORITY (GTK_STYLE_PROVIDER_PRIORITY_APPLICATION) +#elif VTE_GTK == 4 +#define VTE_TERMINAL_CSS_PRIORITY (GTK_STYLE_PROVIDER_PRIORITY_APPLICATION - 2) +#endif + +template +constexpr bool check_enum_value(T value) noexcept; + struct _VteTerminalClassPrivate { GtkStyleProvider *style_provider; - GtkStyleProvider *style_provider_padding; }; -#ifdef VTE_DEBUG +template<> +constexpr bool check_enum_value(VteFormat value) noexcept +{ + switch (value) { + case VTE_FORMAT_TEXT: + case VTE_FORMAT_HTML: + return true; + default: + return false; + } +} + +#if VTE_GTK == 4 + +static void +style_provider_parsing_error_cb(GtkCssProvider* provider, + void* section, + GError* error) +{ + g_assert_no_error(error); +} + +#endif + + +class VteTerminalPrivate { +public: + VteTerminalPrivate(VteTerminal* terminal) + : m_widget{std::make_shared(terminal)} + { + } + + ~VteTerminalPrivate() = default; + + VteTerminalPrivate(VteTerminalPrivate const&) = delete; + VteTerminalPrivate(VteTerminalPrivate&&) = delete; + + VteTerminalPrivate& operator=(VteTerminalPrivate const&) = delete; + VteTerminalPrivate& operator=(VteTerminalPrivate&&) = delete; + + auto get() const /* throws */ + { + if (!m_widget) + throw std::runtime_error{"Widget is nullptr"}; + + return m_widget.get(); + } + + void reset() + { + if (m_widget) + m_widget->dispose(); + + m_widget.reset(); + } + +private: + std::shared_ptr m_widget; +}; + +#if VTE_DEBUG G_DEFINE_TYPE_WITH_CODE(VteTerminal, vte_terminal, GTK_TYPE_WIDGET, { VteTerminal_private_offset = - g_type_add_instance_private(g_define_type_id, sizeof(vte::platform::Widget)); + g_type_add_instance_private(g_define_type_id, sizeof(VteTerminalPrivate)); } g_type_add_class_private (g_define_type_id, sizeof (VteTerminalClassPrivate)); - G_IMPLEMENT_INTERFACE(GTK_TYPE_SCROLLABLE, NULL) + G_IMPLEMENT_INTERFACE(GTK_TYPE_SCROLLABLE, nullptr) if (_vte_debug_on(VTE_DEBUG_LIFECYCLE)) { g_printerr("vte_terminal_get_type()\n"); }) @@ -92,22 +170,40 @@ G_DEFINE_TYPE_WITH_CODE(VteTerminal, vte_terminal, GTK_TYPE_WIDGET, G_DEFINE_TYPE_WITH_CODE(VteTerminal, vte_terminal, GTK_TYPE_WIDGET, { VteTerminal_private_offset = - g_type_add_instance_private(g_define_type_id, sizeof(vte::platform::Widget)); + g_type_add_instance_private(g_define_type_id, sizeof(VteTerminalPrivate)); } g_type_add_class_private (g_define_type_id, sizeof (VteTerminalClassPrivate)); - G_IMPLEMENT_INTERFACE(GTK_TYPE_SCROLLABLE, NULL)) + G_IMPLEMENT_INTERFACE(GTK_TYPE_SCROLLABLE, nullptr)) #endif -static inline -vte::platform::Widget* get_widget(VteTerminal* terminal) +static inline auto +get_private(VteTerminal* terminal) { - return reinterpret_cast(vte_terminal_get_instance_private(terminal)); + return reinterpret_cast(vte_terminal_get_instance_private(terminal)); +} + +#define PRIVATE(t) (get_private(t)) + +static inline auto +get_widget(VteTerminal* terminal) /* throws */ +{ + return get_private(terminal)->get(); } #define WIDGET(t) (get_widget(t)) +namespace vte::platform { + +Widget* +Widget::from_terminal(VteTerminal* t) +{ + return WIDGET(t); +} + +} // namespace vte::platform + vte::terminal::Terminal* -_vte_terminal_get_impl(VteTerminal *terminal) +_vte_terminal_get_impl(VteTerminal* terminal) /* throws */ { return WIDGET(terminal)->terminal(); } @@ -120,7 +216,7 @@ GTimer *process_timer; uint64_t g_test_flags = 0; static bool -valid_color(GdkRGBA const* color) +valid_color(GdkRGBA const* color) noexcept { return color->red >= 0. && color->red <= 1. && color->green >= 0. && color->green <= 1. && @@ -128,52 +224,94 @@ valid_color(GdkRGBA const* color) color->alpha >= 0. && color->alpha <= 1.; } +static vte::platform::ClipboardFormat +clipboard_format_from_vte(VteFormat format) +{ + switch (format) { + case VTE_FORMAT_TEXT: return vte::platform::ClipboardFormat::TEXT; + case VTE_FORMAT_HTML: return vte::platform::ClipboardFormat::HTML; + default: throw std::runtime_error{"Unknown VteFormat enum value"}; + } +} + static void vte_terminal_set_hadjustment(VteTerminal *terminal, - GtkAdjustment *adjustment) + GtkAdjustment *adjustment) noexcept +try { g_return_if_fail(adjustment == nullptr || GTK_IS_ADJUSTMENT(adjustment)); WIDGET(terminal)->set_hadjustment(vte::glib::make_ref_sink(adjustment)); } +catch (...) +{ + vte::log_exception(); +} static void vte_terminal_set_vadjustment(VteTerminal *terminal, - GtkAdjustment *adjustment) + GtkAdjustment *adjustment) noexcept +try { g_return_if_fail(adjustment == nullptr || GTK_IS_ADJUSTMENT(adjustment)); WIDGET(terminal)->set_vadjustment(vte::glib::make_ref_sink(adjustment)); } +catch (...) +{ + vte::log_exception(); +} static void vte_terminal_set_hscroll_policy(VteTerminal *terminal, - GtkScrollablePolicy policy) + GtkScrollablePolicy policy) noexcept +try { WIDGET(terminal)->set_hscroll_policy(policy); - gtk_widget_queue_resize_no_redraw (GTK_WIDGET (terminal)); +} +catch (...) +{ + vte::log_exception(); } static void vte_terminal_set_vscroll_policy(VteTerminal *terminal, - GtkScrollablePolicy policy) + GtkScrollablePolicy policy) noexcept +try { WIDGET(terminal)->set_vscroll_policy(policy); - gtk_widget_queue_resize_no_redraw (GTK_WIDGET (terminal)); } - -static void -vte_terminal_real_copy_clipboard(VteTerminal *terminal) +catch (...) { - WIDGET(terminal)->copy(VTE_SELECTION_CLIPBOARD, VTE_FORMAT_TEXT); + vte::log_exception(); } static void -vte_terminal_real_paste_clipboard(VteTerminal *terminal) +vte_terminal_real_copy_clipboard(VteTerminal *terminal) noexcept +try { - WIDGET(terminal)->paste(GDK_SELECTION_CLIPBOARD); + WIDGET(terminal)->copy(vte::platform::ClipboardType::CLIPBOARD, + vte::platform::ClipboardFormat::TEXT); +} +catch (...) +{ + vte::log_exception(); } static void -vte_terminal_style_updated (GtkWidget *widget) +vte_terminal_real_paste_clipboard(VteTerminal *terminal) noexcept +try +{ + WIDGET(terminal)->paste(vte::platform::ClipboardType::CLIPBOARD); +} +catch (...) +{ + vte::log_exception(); +} + +#if VTE_GTK == 3 + +static void +vte_terminal_style_updated (GtkWidget *widget) noexcept +try { VteTerminal *terminal = VTE_TERMINAL(widget); @@ -181,9 +319,15 @@ vte_terminal_style_updated (GtkWidget *widget) WIDGET(terminal)->style_updated(); } +catch (...) +{ + vte::log_exception(); +} static gboolean -vte_terminal_key_press(GtkWidget *widget, GdkEventKey *event) +vte_terminal_key_press(GtkWidget *widget, + GdkEventKey *event) noexcept +try { VteTerminal *terminal = VTE_TERMINAL(widget); @@ -203,63 +347,118 @@ vte_terminal_key_press(GtkWidget *widget, GdkEventKey *event) } } - return WIDGET(terminal)->key_press(event); + return WIDGET(terminal)->event_key_press(event); +} +catch (...) +{ + vte::log_exception(); + return true; } static gboolean -vte_terminal_key_release(GtkWidget *widget, GdkEventKey *event) +vte_terminal_key_release(GtkWidget *widget, + GdkEventKey *event) noexcept +try { VteTerminal *terminal = VTE_TERMINAL(widget); - return WIDGET(terminal)->key_release(event); + return WIDGET(terminal)->event_key_release(event); +} +catch (...) +{ + vte::log_exception(); + return true; } static gboolean -vte_terminal_motion_notify(GtkWidget *widget, GdkEventMotion *event) +vte_terminal_motion_notify(GtkWidget *widget, + GdkEventMotion *event) noexcept +try { VteTerminal *terminal = VTE_TERMINAL(widget); - return WIDGET(terminal)->motion_notify(event); + return WIDGET(terminal)->event_motion_notify(event); +} +catch (...) +{ + vte::log_exception(); + return true; } static gboolean -vte_terminal_button_press(GtkWidget *widget, GdkEventButton *event) +vte_terminal_button_press(GtkWidget *widget, + GdkEventButton *event) noexcept +try { VteTerminal *terminal = VTE_TERMINAL(widget); - return WIDGET(terminal)->button_press(event); + return WIDGET(terminal)->event_button_press(event); +} +catch (...) +{ + vte::log_exception(); + return true; } static gboolean -vte_terminal_button_release(GtkWidget *widget, GdkEventButton *event) +vte_terminal_button_release(GtkWidget *widget, + GdkEventButton *event) noexcept +try { VteTerminal *terminal = VTE_TERMINAL(widget); - return WIDGET(terminal)->button_release(event); + return WIDGET(terminal)->event_button_release(event); +} +catch (...) +{ + vte::log_exception(); + return true; } static gboolean -vte_terminal_scroll(GtkWidget *widget, GdkEventScroll *event) +vte_terminal_scroll(GtkWidget *widget, + GdkEventScroll *event) noexcept +try { - VteTerminal *terminal = VTE_TERMINAL(widget); - WIDGET(terminal)->scroll(event); - return TRUE; + auto terminal = VTE_TERMINAL(widget); + return WIDGET(terminal)->event_scroll(event); +} +catch (...) +{ + vte::log_exception(); + return true; } static gboolean -vte_terminal_focus_in(GtkWidget *widget, GdkEventFocus *event) +vte_terminal_focus_in(GtkWidget *widget, + GdkEventFocus *event) noexcept +try { VteTerminal *terminal = VTE_TERMINAL(widget); - WIDGET(terminal)->focus_in(event); + WIDGET(terminal)->event_focus_in(event); return FALSE; } - -static gboolean -vte_terminal_focus_out(GtkWidget *widget, GdkEventFocus *event) +catch (...) { - VteTerminal *terminal = VTE_TERMINAL(widget); - WIDGET(terminal)->focus_out(event); - return FALSE; + vte::log_exception(); + return false; } static gboolean -vte_terminal_enter(GtkWidget *widget, GdkEventCrossing *event) +vte_terminal_focus_out(GtkWidget *widget, + GdkEventFocus *event) noexcept +try +{ + VteTerminal *terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->event_focus_out(event); + return FALSE; +} +catch (...) +{ + vte::log_exception(); + return false; +} + +static gboolean +vte_terminal_enter(GtkWidget *widget, + GdkEventCrossing *event) noexcept +try { VteTerminal *terminal = VTE_TERMINAL(widget); gboolean ret = FALSE; @@ -268,13 +467,20 @@ vte_terminal_enter(GtkWidget *widget, GdkEventCrossing *event) ret = GTK_WIDGET_CLASS (vte_terminal_parent_class)->enter_notify_event (widget, event); } - WIDGET(terminal)->enter(event); + WIDGET(terminal)->event_enter(event); return ret; } +catch (...) +{ + vte::log_exception(); + return false; +} static gboolean -vte_terminal_leave(GtkWidget *widget, GdkEventCrossing *event) +vte_terminal_leave(GtkWidget *widget, + GdkEventCrossing *event) noexcept +try { VteTerminal *terminal = VTE_TERMINAL(widget); gboolean ret = FALSE; @@ -283,47 +489,49 @@ vte_terminal_leave(GtkWidget *widget, GdkEventCrossing *event) ret = GTK_WIDGET_CLASS (vte_terminal_parent_class)->leave_notify_event (widget, event); } - WIDGET(terminal)->leave(event); + WIDGET(terminal)->event_leave(event); return ret; } +catch (...) +{ + vte::log_exception(); + return false; +} static void vte_terminal_get_preferred_width(GtkWidget *widget, int *minimum_width, - int *natural_width) + int *natural_width) noexcept +try { VteTerminal *terminal = VTE_TERMINAL(widget); WIDGET(terminal)->get_preferred_width(minimum_width, natural_width); } +catch (...) +{ + vte::log_exception(); +} static void vte_terminal_get_preferred_height(GtkWidget *widget, int *minimum_height, - int *natural_height) + int *natural_height) noexcept +try { VteTerminal *terminal = VTE_TERMINAL(widget); WIDGET(terminal)->get_preferred_height(minimum_height, natural_height); } - -static void -vte_terminal_size_allocate(GtkWidget *widget, GtkAllocation *allocation) +catch (...) { - VteTerminal *terminal = VTE_TERMINAL(widget); - WIDGET(terminal)->size_allocate(allocation); + vte::log_exception(); } -static gboolean -vte_terminal_draw(GtkWidget *widget, - cairo_t *cr) -{ - VteTerminal *terminal = VTE_TERMINAL (widget); - WIDGET(terminal)->draw(cr); - return FALSE; -} +#endif /* VTE_GTK == 3 */ static void -vte_terminal_realize(GtkWidget *widget) +vte_terminal_realize(GtkWidget *widget) noexcept +try { _vte_debug_print(VTE_DEBUG_LIFECYCLE, "vte_terminal_realize()\n"); @@ -332,20 +540,29 @@ vte_terminal_realize(GtkWidget *widget) VteTerminal *terminal= VTE_TERMINAL(widget); WIDGET(terminal)->realize(); } +catch (...) +{ + vte::log_exception(); +} static void -vte_terminal_unrealize(GtkWidget *widget) +vte_terminal_unrealize(GtkWidget *widget) noexcept { _vte_debug_print(VTE_DEBUG_LIFECYCLE, "vte_terminal_unrealize()\n"); - VteTerminal *terminal = VTE_TERMINAL (widget); - WIDGET(terminal)->unrealize(); + try { + VteTerminal *terminal = VTE_TERMINAL (widget); + WIDGET(terminal)->unrealize(); + } catch (...) { + vte::log_exception(); + } GTK_WIDGET_CLASS(vte_terminal_parent_class)->unrealize(widget); } static void -vte_terminal_map(GtkWidget *widget) +vte_terminal_map(GtkWidget *widget) noexcept +try { _vte_debug_print(VTE_DEBUG_LIFECYCLE, "vte_terminal_map()\n"); @@ -354,33 +571,306 @@ vte_terminal_map(GtkWidget *widget) WIDGET(terminal)->map(); } +catch (...) +{ + vte::log_exception(); +} static void -vte_terminal_unmap(GtkWidget *widget) +vte_terminal_unmap(GtkWidget *widget) noexcept { _vte_debug_print(VTE_DEBUG_LIFECYCLE, "vte_terminal_unmap()\n"); - VteTerminal *terminal = VTE_TERMINAL(widget); - WIDGET(terminal)->unmap(); + try { + VteTerminal *terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->unmap(); + } catch (...) { + vte::log_exception(); + } GTK_WIDGET_CLASS(vte_terminal_parent_class)->unmap(widget); } static void -vte_terminal_screen_changed (GtkWidget *widget, - GdkScreen *previous_screen) +vte_terminal_state_flags_changed(GtkWidget* widget, + GtkStateFlags old_flags) noexcept +try { - VteTerminal *terminal = VTE_TERMINAL (widget); + GTK_WIDGET_CLASS(vte_terminal_parent_class)->state_flags_changed(widget, old_flags); - if (GTK_WIDGET_CLASS (vte_terminal_parent_class)->screen_changed) { - GTK_WIDGET_CLASS (vte_terminal_parent_class)->screen_changed (widget, previous_screen); - } - - WIDGET(terminal)->screen_changed(previous_screen); + auto terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->state_flags_changed(old_flags); +} +catch (...) +{ + vte::log_exception(); } static void -vte_terminal_constructed (GObject *object) +vte_terminal_direction_changed(GtkWidget* widget, + GtkTextDirection old_direction) noexcept +try +{ + auto const parent_class = GTK_WIDGET_CLASS(vte_terminal_parent_class); + if (parent_class->direction_changed) + parent_class->direction_changed(widget, old_direction); + + auto terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->direction_changed(old_direction); +} +catch (...) +{ + vte::log_exception(); +} + +static GtkSizeRequestMode +vte_terminal_get_request_mode(GtkWidget* widget) noexcept +{ + return GTK_SIZE_REQUEST_CONSTANT_SIZE; +} + +static gboolean +vte_terminal_query_tooltip(GtkWidget* widget, + int x, + int y, + gboolean keyboard, + GtkTooltip* tooltip) noexcept +try +{ + auto const parent_class = GTK_WIDGET_CLASS(vte_terminal_parent_class); + if (parent_class->query_tooltip(widget, x, y, keyboard, tooltip)) + return true; + + auto terminal = VTE_TERMINAL(widget); + return WIDGET(terminal)->query_tooltip(x, y, keyboard, tooltip); +} +catch (...) +{ + vte::log_exception(); + return false; +} + + +#if VTE_GTK == 3 + +static void +vte_terminal_size_allocate(GtkWidget* widget, + GtkAllocation* allocation) noexcept +try +{ + auto terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->size_allocate(allocation); +} +catch (...) +{ + vte::log_exception(); +} + +static gboolean +vte_terminal_draw(GtkWidget* widget, + cairo_t* cr) noexcept +try +{ + auto terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->draw(cr); + return FALSE; +} +catch (...) +{ + vte::log_exception(); + return false; +} + +static void +vte_terminal_screen_changed(GtkWidget* widget, + GdkScreen* previous_screen) noexcept +try +{ + auto const parent_class = GTK_WIDGET_CLASS(vte_terminal_parent_class); + if (parent_class->screen_changed) + parent_class->screen_changed(widget, previous_screen); + + auto terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->screen_changed(previous_screen); +} +catch (...) +{ + vte::log_exception(); +} + +static gboolean +vte_terminal_popup_menu(GtkWidget* widget) noexcept +try +{ + auto terminal = VTE_TERMINAL(widget); + if (WIDGET(terminal)->show_context_menu(vte::platform::EventContext{})) + return true; + + auto const parent_class = GTK_WIDGET_CLASS(vte_terminal_parent_class); + if (parent_class->popup_menu) + return parent_class->popup_menu(widget); + + return false; +} +catch (...) +{ + vte::log_exception(); + return false; +} + +#endif /* VTE_GTK == 3 */ + +#if VTE_GTK == 4 + +static void +vte_terminal_size_allocate(GtkWidget *widget, + int width, + int height, + int baseline) noexcept +try +{ + GTK_WIDGET_CLASS(vte_terminal_parent_class)->size_allocate(widget, width, height, baseline); + + auto terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->size_allocate(width, height, baseline); +} +catch (...) +{ + vte::log_exception(); +} + +static void +vte_terminal_root(GtkWidget *widget) noexcept +try +{ + GTK_WIDGET_CLASS(vte_terminal_parent_class)->root(widget); + + auto terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->root(); +} +catch (...) +{ + vte::log_exception(); +} + +static void +vte_terminal_unroot(GtkWidget *widget) noexcept +{ + _vte_debug_print(VTE_DEBUG_LIFECYCLE, "vte_terminal_unroot()\n"); + + auto terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->unroot(); + + GTK_WIDGET_CLASS(vte_terminal_parent_class)->unroot(widget); +} + +static void +vte_terminal_measure(GtkWidget* widget, + GtkOrientation orientation, + int for_size, + int* minimum, + int* natural, + int* minimum_baseline, + int* natural_baseline) noexcept +try +{ + auto terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->measure(orientation, for_size, + minimum, natural, + minimum_baseline, natural_baseline); +} +catch (...) +{ + vte::log_exception(); +} + +static void +vte_terminal_compute_expand(GtkWidget* widget, + gboolean* hexpand, + gboolean* vexpand) noexcept +try +{ + auto terminal = VTE_TERMINAL(widget); + auto [h, v] = WIDGET(terminal)->compute_expand(); + *hexpand = h; + *vexpand = v; +} +catch (...) +{ + vte::log_exception(); + *hexpand = *vexpand = false; +} + +static void +vte_terminal_css_changed(GtkWidget* widget, + GtkCssStyleChange* change) noexcept +try +{ + GTK_WIDGET_CLASS(vte_terminal_parent_class)->css_changed(widget, change); + auto terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->css_changed(change); +} +catch (...) +{ + vte::log_exception(); +} + +static void +vte_terminal_system_setting_changed(GtkWidget* widget, + GtkSystemSetting setting) noexcept +try +{ + GTK_WIDGET_CLASS(vte_terminal_parent_class)->system_setting_changed(widget, setting); + auto terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->system_setting_changed(setting); +} +catch (...) +{ + vte::log_exception(); +} + +static void +vte_terminal_snapshot(GtkWidget* widget, + GtkSnapshot* snapshot_object) noexcept +try +{ + GTK_WIDGET_CLASS(vte_terminal_parent_class)->snapshot(widget, snapshot_object); + auto terminal = VTE_TERMINAL(widget); + WIDGET(terminal)->snapshot(snapshot_object); +} +catch (...) +{ + vte::log_exception(); +} + +static gboolean +vte_terminal_contains(GtkWidget* widget, + double x, + double y) noexcept +try +{ + auto terminal = VTE_TERMINAL(widget); + if (WIDGET(terminal)->contains(x, y)) + return true; + + auto const parent_class = GTK_WIDGET_CLASS(vte_terminal_parent_class); + if (parent_class->contains && + parent_class->contains(widget, x, y)) + return true; + + return false; +} +catch (...) +{ + vte::log_exception(); + return false; +} + +#endif /* VTE_GTK == 4 */ + +static void +vte_terminal_constructed (GObject *object) noexcept +try { VteTerminal *terminal = VTE_TERMINAL (object); @@ -388,9 +878,14 @@ vte_terminal_constructed (GObject *object) WIDGET(terminal)->constructed(); } +catch (...) +{ + vte::log_exception(); +} static void vte_terminal_init(VteTerminal *terminal) +try { void *place; GtkStyleContext *context; @@ -400,37 +895,47 @@ vte_terminal_init(VteTerminal *terminal) context = gtk_widget_get_style_context(&terminal->widget); gtk_style_context_add_provider (context, VTE_TERMINAL_GET_CLASS (terminal)->priv->style_provider, - GTK_STYLE_PROVIDER_PRIORITY_FALLBACK); - gtk_style_context_add_provider (context, - VTE_TERMINAL_GET_CLASS (terminal)->priv->style_provider_padding, - GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); - - /* Initialize private data. NOTE: place is zeroed */ - place = vte_terminal_get_instance_private(terminal); - new (place) vte::platform::Widget(terminal); + VTE_TERMINAL_CSS_PRIORITY); +#if VTE_GTK == 3 gtk_widget_set_has_window(&terminal->widget, FALSE); +#endif + + place = vte_terminal_get_instance_private(terminal); + new (place) VteTerminalPrivate{terminal}; +} +catch (...) +{ + vte::log_exception(); + + // There's not really anything we can do after the + // construction of Widget failed... we'll crash soon anyway. + g_error("Widget::Widget threw\n"); } static void -vte_terminal_dispose(GObject *object) +vte_terminal_dispose(GObject *object) noexcept { _vte_debug_print(VTE_DEBUG_LIFECYCLE, "vte_terminal_dispose()\n"); - VteTerminal *terminal = VTE_TERMINAL (object); - WIDGET(terminal)->dispose(); + try { + VteTerminal *terminal = VTE_TERMINAL (object); + PRIVATE(terminal)->reset(); + } catch (...) { + vte::log_exception(); + } /* Call the inherited dispose() method. */ G_OBJECT_CLASS(vte_terminal_parent_class)->dispose(object); } static void -vte_terminal_finalize(GObject *object) +vte_terminal_finalize(GObject *object) noexcept { _vte_debug_print(VTE_DEBUG_LIFECYCLE, "vte_terminal_finalize()\n"); - VteTerminal *terminal = VTE_TERMINAL (object); - WIDGET(terminal)->~Widget(); + auto terminal = VTE_TERMINAL(object); + PRIVATE(terminal)->~VteTerminalPrivate(); /* Call the inherited finalize() method. */ G_OBJECT_CLASS(vte_terminal_parent_class)->finalize(object); @@ -440,7 +945,8 @@ static void vte_terminal_get_property (GObject *object, guint prop_id, GValue *value, - GParamSpec *pspec) + GParamSpec *pspec) noexcept +try { VteTerminal *terminal = VTE_TERMINAL (object); auto widget = WIDGET(terminal); @@ -484,6 +990,12 @@ vte_terminal_get_property (GObject *object, case PROP_CJK_AMBIGUOUS_WIDTH: g_value_set_int (value, vte_terminal_get_cjk_ambiguous_width (terminal)); break; + case PROP_CONTEXT_MENU_MODEL: + g_value_set_object(value, vte_terminal_get_context_menu_model(terminal)); + break; + case PROP_CONTEXT_MENU: + g_value_set_object(value, vte_terminal_get_context_menu(terminal)); + break; case PROP_CURSOR_BLINK_MODE: g_value_set_enum (value, vte_terminal_get_cursor_blink_mode (terminal)); break; @@ -502,15 +1014,24 @@ vte_terminal_get_property (GObject *object, case PROP_ENABLE_BIDI: g_value_set_boolean (value, vte_terminal_get_enable_bidi (terminal)); break; + case PROP_ENABLE_FALLBACK_SCROLLING: + g_value_set_boolean (value, vte_terminal_get_enable_fallback_scrolling(terminal)); + break; case PROP_ENABLE_SHAPING: g_value_set_boolean (value, vte_terminal_get_enable_shaping (terminal)); break; + case PROP_ENABLE_SIXEL: + g_value_set_boolean (value, vte_terminal_get_enable_sixel (terminal)); + break; case PROP_ENCODING: g_value_set_string (value, vte_terminal_get_encoding (terminal)); break; case PROP_FONT_DESC: g_value_set_boxed (value, vte_terminal_get_font (terminal)); break; + case PROP_FONT_OPTIONS: + g_value_set_boxed(value, vte_terminal_get_font_options(terminal)); + break; case PROP_FONT_SCALE: g_value_set_double (value, vte_terminal_get_font_scale (terminal)); break; @@ -535,12 +1056,18 @@ vte_terminal_get_property (GObject *object, case PROP_SCROLLBACK_LINES: g_value_set_uint (value, vte_terminal_get_scrollback_lines(terminal)); break; + case PROP_SCROLL_ON_INSERT: + g_value_set_boolean(value, vte_terminal_get_scroll_on_insert(terminal)); + break; case PROP_SCROLL_ON_KEYSTROKE: g_value_set_boolean (value, vte_terminal_get_scroll_on_keystroke(terminal)); break; case PROP_SCROLL_ON_OUTPUT: g_value_set_boolean (value, vte_terminal_get_scroll_on_output(terminal)); break; + case PROP_SCROLL_UNIT_IS_PIXELS: + g_value_set_boolean (value, vte_terminal_get_scroll_unit_is_pixels(terminal)); + break; case PROP_TEXT_BLINK_MODE: g_value_set_enum (value, vte_terminal_get_text_blink_mode (terminal)); break; @@ -551,17 +1078,38 @@ vte_terminal_get_property (GObject *object, g_value_set_string (value, vte_terminal_get_word_char_exceptions (terminal)); break; - default: + case PROP_XALIGN: + g_value_set_enum(value, vte_terminal_get_xalign(terminal)); + break; + + case PROP_YALIGN: + g_value_set_enum(value, vte_terminal_get_yalign(terminal)); + break; + + case PROP_XFILL: + g_value_set_boolean(value, vte_terminal_get_xfill(terminal)); + break; + + case PROP_YFILL: + g_value_set_boolean(value, vte_terminal_get_yfill(terminal)); + break; + + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); return; } } +catch (...) +{ + vte::log_exception(); +} static void vte_terminal_set_property (GObject *object, guint prop_id, const GValue *value, - GParamSpec *pspec) + GParamSpec *pspec) noexcept +try { VteTerminal *terminal = VTE_TERMINAL (object); @@ -603,6 +1151,12 @@ vte_terminal_set_property (GObject *object, case PROP_CJK_AMBIGUOUS_WIDTH: vte_terminal_set_cjk_ambiguous_width (terminal, g_value_get_int (value)); break; + case PROP_CONTEXT_MENU_MODEL: + vte_terminal_set_context_menu_model(terminal, reinterpret_cast(g_value_get_object(value))); + break; + case PROP_CONTEXT_MENU: + vte_terminal_set_context_menu(terminal, reinterpret_cast(g_value_get_object(value))); + break; case PROP_CURSOR_BLINK_MODE: vte_terminal_set_cursor_blink_mode (terminal, (VteCursorBlinkMode)g_value_get_enum (value)); break; @@ -615,15 +1169,25 @@ vte_terminal_set_property (GObject *object, case PROP_ENABLE_BIDI: vte_terminal_set_enable_bidi (terminal, g_value_get_boolean (value)); break; + case PROP_ENABLE_FALLBACK_SCROLLING: + vte_terminal_set_enable_fallback_scrolling (terminal, g_value_get_boolean (value)); + break; case PROP_ENABLE_SHAPING: vte_terminal_set_enable_shaping (terminal, g_value_get_boolean (value)); break; + case PROP_ENABLE_SIXEL: + vte_terminal_set_enable_sixel (terminal, g_value_get_boolean (value)); + break; case PROP_ENCODING: vte_terminal_set_encoding (terminal, g_value_get_string (value), NULL); break; case PROP_FONT_DESC: vte_terminal_set_font (terminal, (PangoFontDescription *)g_value_get_boxed (value)); break; + case PROP_FONT_OPTIONS: + vte_terminal_set_font_options(terminal, + reinterpret_cast(g_value_get_boxed(value))); + break; case PROP_FONT_SCALE: vte_terminal_set_font_scale (terminal, g_value_get_double (value)); break; @@ -642,12 +1206,18 @@ vte_terminal_set_property (GObject *object, case PROP_SCROLLBACK_LINES: vte_terminal_set_scrollback_lines (terminal, g_value_get_uint (value)); break; + case PROP_SCROLL_ON_INSERT: + vte_terminal_set_scroll_on_insert(terminal, g_value_get_boolean(value)); + break; case PROP_SCROLL_ON_KEYSTROKE: vte_terminal_set_scroll_on_keystroke(terminal, g_value_get_boolean (value)); break; case PROP_SCROLL_ON_OUTPUT: vte_terminal_set_scroll_on_output (terminal, g_value_get_boolean (value)); break; + case PROP_SCROLL_UNIT_IS_PIXELS: + vte_terminal_set_scroll_unit_is_pixels(terminal, g_value_get_boolean(value)); + break; case PROP_TEXT_BLINK_MODE: vte_terminal_set_text_blink_mode (terminal, (VteTextBlinkMode)g_value_get_enum (value)); break; @@ -655,6 +1225,22 @@ vte_terminal_set_property (GObject *object, vte_terminal_set_word_char_exceptions (terminal, g_value_get_string (value)); break; + case PROP_XALIGN: + vte_terminal_set_xalign(terminal, VteAlign(g_value_get_enum(value))); + break; + + case PROP_YALIGN: + vte_terminal_set_yalign(terminal, VteAlign(g_value_get_enum(value))); + break; + + case PROP_XFILL: + vte_terminal_set_xfill(terminal, g_value_get_boolean(value)); + break; + + case PROP_YFILL: + vte_terminal_set_yfill(terminal, g_value_get_boolean(value)); + break; + /* Not writable */ case PROP_CURRENT_DIRECTORY_URI: case PROP_CURRENT_FILE_URI: @@ -669,15 +1255,15 @@ vte_terminal_set_property (GObject *object, return; } } +catch (...) +{ + vte::log_exception(); +} static void vte_terminal_class_init(VteTerminalClass *klass) { - GObjectClass *gobject_class; - GtkWidgetClass *widget_class; - GtkBindingSet *binding_set; - -#ifdef VTE_DEBUG +#if VTE_DEBUG { _vte_debug_init(); _vte_debug_print(VTE_DEBUG_LIFECYCLE, @@ -700,13 +1286,15 @@ vte_terminal_class_init(VteTerminalClass *klass) } #endif +#if VTE_GTK == 3 _VTE_DEBUG_IF (VTE_DEBUG_UPDATES) gdk_window_set_debug_updates(TRUE); +#endif bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); - gobject_class = G_OBJECT_CLASS(klass); - widget_class = GTK_WIDGET_CLASS(klass); + auto gobject_class = G_OBJECT_CLASS(klass); + auto widget_class = GTK_WIDGET_CLASS(klass); /* Override some of the default handlers. */ gobject_class->constructed = vte_terminal_constructed; @@ -714,12 +1302,21 @@ vte_terminal_class_init(VteTerminalClass *klass) gobject_class->finalize = vte_terminal_finalize; gobject_class->get_property = vte_terminal_get_property; gobject_class->set_property = vte_terminal_set_property; + widget_class->realize = vte_terminal_realize; widget_class->unrealize = vte_terminal_unrealize; widget_class->map = vte_terminal_map; widget_class->unmap = vte_terminal_unmap; - widget_class->scroll_event = vte_terminal_scroll; + + widget_class->size_allocate = vte_terminal_size_allocate; + widget_class->state_flags_changed = vte_terminal_state_flags_changed; + widget_class->direction_changed = vte_terminal_direction_changed; + widget_class->get_request_mode = vte_terminal_get_request_mode; + widget_class->query_tooltip = vte_terminal_query_tooltip; + +#if VTE_GTK == 3 widget_class->draw = vte_terminal_draw; + widget_class->scroll_event = vte_terminal_scroll; widget_class->key_press_event = vte_terminal_key_press; widget_class->key_release_event = vte_terminal_key_release; widget_class->button_press_event = vte_terminal_button_press; @@ -732,8 +1329,20 @@ vte_terminal_class_init(VteTerminalClass *klass) widget_class->style_updated = vte_terminal_style_updated; widget_class->get_preferred_width = vte_terminal_get_preferred_width; widget_class->get_preferred_height = vte_terminal_get_preferred_height; - widget_class->size_allocate = vte_terminal_size_allocate; widget_class->screen_changed = vte_terminal_screen_changed; + widget_class->popup_menu = vte_terminal_popup_menu; +#endif + +#if VTE_GTK == 4 + widget_class->root = vte_terminal_root; + widget_class->unroot = vte_terminal_unroot; + widget_class->measure = vte_terminal_measure; + widget_class->compute_expand = vte_terminal_compute_expand; + widget_class->css_changed = vte_terminal_css_changed; + widget_class->system_setting_changed = vte_terminal_system_setting_changed; + widget_class->snapshot = vte_terminal_snapshot; + widget_class->contains = vte_terminal_contains; +#endif gtk_widget_class_set_css_name(widget_class, VTE_TERMINAL_CSS_NAME); @@ -762,10 +1371,12 @@ vte_terminal_class_init(VteTerminalClass *klass) klass->increase_font_size = NULL; klass->decrease_font_size = NULL; +#if VTE_GTK == 3 klass->text_modified = NULL; klass->text_inserted = NULL; klass->text_deleted = NULL; klass->text_scrolled = NULL; +#endif /* VTE_GTK == 3 */ klass->copy_clipboard = vte_terminal_real_copy_clipboard; klass->paste_clipboard = vte_terminal_real_paste_clipboard; @@ -827,7 +1438,7 @@ vte_terminal_class_init(VteTerminalClass *klass) * VteTerminal::window-title-changed: * @vteterminal: the object which received the signal * - * Emitted when the terminal's %window_title field is modified. + * Emitted when the #VteTerminal:window-title property is modified. */ signals[SIGNAL_WINDOW_TITLE_CHANGED] = g_signal_new(I_("window-title-changed"), @@ -1284,90 +1895,73 @@ vte_terminal_class_init(VteTerminalClass *klass) G_OBJECT_CLASS_TYPE(klass), g_cclosure_marshal_VOID__VOIDv); +#if VTE_GTK == 3 + /* These signals are deprecated and never emitted, + * but need to be kept for ABI compatibility on gtk3. + */ + /** * VteTerminal::text-modified: - * @vteterminal: the object which received the signal + * @vteterminal: * - * An internal signal used for communication between the terminal and - * its accessibility peer. May not be emitted under certain - * circumstances. + * Deprecated: 0.66: This signal is never emitted. */ - signals[SIGNAL_TEXT_MODIFIED] = - g_signal_new(I_("text-modified"), - G_OBJECT_CLASS_TYPE(klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(VteTerminalClass, text_modified), - NULL, - NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - g_signal_set_va_marshaller(signals[SIGNAL_TEXT_MODIFIED], - G_OBJECT_CLASS_TYPE(klass), - g_cclosure_marshal_VOID__VOIDv); + g_signal_new(I_("text-modified"), + G_OBJECT_CLASS_TYPE(klass), + GSignalFlags(G_SIGNAL_RUN_LAST | G_SIGNAL_DEPRECATED), + G_STRUCT_OFFSET(VteTerminalClass, text_modified), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); /** * VteTerminal::text-inserted: - * @vteterminal: the object which received the signal + * @vteterminal: * - * An internal signal used for communication between the terminal and - * its accessibility peer. May not be emitted under certain - * circumstances. + * Deprecated: 0.66: This signal is never emitted. */ - signals[SIGNAL_TEXT_INSERTED] = - g_signal_new(I_("text-inserted"), - G_OBJECT_CLASS_TYPE(klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(VteTerminalClass, text_inserted), - NULL, - NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - g_signal_set_va_marshaller(signals[SIGNAL_TEXT_INSERTED], - G_OBJECT_CLASS_TYPE(klass), - g_cclosure_marshal_VOID__VOIDv); + g_signal_new(I_("text-inserted"), + G_OBJECT_CLASS_TYPE(klass), + GSignalFlags(G_SIGNAL_RUN_LAST | G_SIGNAL_DEPRECATED), + G_STRUCT_OFFSET(VteTerminalClass, text_inserted), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); /** * VteTerminal::text-deleted: - * @vteterminal: the object which received the signal + * @vteterminal: * - * An internal signal used for communication between the terminal and - * its accessibility peer. May not be emitted under certain - * circumstances. + * Deprecated: 0.66: This signal is never emitted. */ - signals[SIGNAL_TEXT_DELETED] = - g_signal_new(I_("text-deleted"), - G_OBJECT_CLASS_TYPE(klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(VteTerminalClass, text_deleted), - NULL, - NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - g_signal_set_va_marshaller(signals[SIGNAL_TEXT_DELETED], - G_OBJECT_CLASS_TYPE(klass), - g_cclosure_marshal_VOID__VOIDv); + g_signal_new(I_("text-deleted"), + G_OBJECT_CLASS_TYPE(klass), + GSignalFlags(G_SIGNAL_RUN_LAST | G_SIGNAL_DEPRECATED), + G_STRUCT_OFFSET(VteTerminalClass, text_deleted), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); /** * VteTerminal::text-scrolled: - * @vteterminal: the object which received the signal - * @delta: the number of lines scrolled + * @vteterminal: + * @delta: * - * An internal signal used for communication between the terminal and - * its accessibility peer. May not be emitted under certain - * circumstances. + * Deprecated: 0.66: This signal is never emitted. */ - signals[SIGNAL_TEXT_SCROLLED] = - g_signal_new(I_("text-scrolled"), - G_OBJECT_CLASS_TYPE(klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(VteTerminalClass, text_scrolled), - NULL, - NULL, - g_cclosure_marshal_VOID__INT, - G_TYPE_NONE, 1, G_TYPE_INT); - g_signal_set_va_marshaller(signals[SIGNAL_TEXT_SCROLLED], - G_OBJECT_CLASS_TYPE(klass), - g_cclosure_marshal_VOID__INTv); + g_signal_new(I_("text-scrolled"), + G_OBJECT_CLASS_TYPE(klass), + GSignalFlags(G_SIGNAL_RUN_LAST | G_SIGNAL_DEPRECATED), + G_STRUCT_OFFSET(VteTerminalClass, text_scrolled), + NULL, + NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, 1, G_TYPE_INT); + +#endif /* VTE_GTK == 3 */ /** * VteTerminal::copy-clipboard: @@ -1427,6 +2021,38 @@ vte_terminal_class_init(VteTerminalClass *klass) G_OBJECT_CLASS_TYPE(klass), g_cclosure_marshal_VOID__VOIDv); + /** + * VteTerminal::setup-context-menu: + * @terminal: the object which received the signal + * @context: (nullable) (type Vte.EventContext): the context + * + * Emitted with non-%NULL context before @terminal shows a context menu. + * The handler may set either a menu model using + * vte_terminal_set_context_menu_model(), or a menu using + * vte_terminal_set_context_menu(), which will then be used as context + * menu. + * If neither a menu model nor a menu are set, a context menu + * will not be shown. + * + * Note that @context is only valid during the signal emission; you may + * not retain it to call methods on it afterwards. + * + * Also emitted with %NULL context after the context menu has been dismissed. + */ + signals[SIGNAL_SETUP_CONTEXT_MENU] = + g_signal_new(I_("setup-context-menu"), + G_OBJECT_CLASS_TYPE(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET(VteTerminalClass, setup_context_menu), + nullptr, nullptr, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, + 1, + VTE_TYPE_EVENT_CONTEXT); + g_signal_set_va_marshaller(signals[SIGNAL_SETUP_CONTEXT_MENU], + G_OBJECT_CLASS_TYPE(klass), + g_cclosure_marshal_VOID__POINTERv); + /** * VteTerminal:allow-bold: * @@ -1533,11 +2159,43 @@ vte_terminal_class_init(VteTerminalClass *klass) 1, 2, VTE_DEFAULT_UTF8_AMBIGUOUS_WIDTH, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + /** + * VteTerminal:context-menu-model: (attributes org.gtk.Property.get=vte_terminal_get_context_menu_model org.gtk.Property.set=vte_terminal_set_context_menu_model) + * + * The menu model used for context menus. If non-%NULL, the context menu is + * generated from this model, and overrides a context menu set with the + * #VteTerminal::context-menu property or vte_terminal_set_context_menu(). + * + * Since: 0.76 + */ + pspecs[PROP_CONTEXT_MENU_MODEL] = + g_param_spec_object("context-menu-model", nullptr, nullptr, + G_TYPE_MENU_MODEL, + GParamFlags(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + + /** + * VteTerminal:context-menu: (attributes org.gtk.Property.get=vte_terminal_get_context_menu org.gtk.Property.set=vte_terminal_set_context_menu) + * + * The menu used for context menus. Note that context menu model set with the + * #VteTerminal::context-menu-model property or vte_terminal_set_context_menu_model() + * takes precedence over this. + * + * Since: 0.76 + */ + pspecs[PROP_CONTEXT_MENU] = + g_param_spec_object("context-menu", nullptr, nullptr, +#if VTE_GTK == 3 + GTK_TYPE_MENU, +#elif VTE_GTK == 4 + GTK_TYPE_POPOVER, +#endif // VTE_GTK + GParamFlags(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + /** * VteTerminal:cursor-blink-mode: * * Sets whether or not the cursor will blink. Using %VTE_CURSOR_BLINK_SYSTEM - * will use the #GtkSettings::gtk-cursor-blink setting. + * will use the #GtkSettings:gtk-cursor-blink setting. */ pspecs[PROP_CURSOR_BLINK_MODE] = g_param_spec_enum ("cursor-blink-mode", NULL, NULL, @@ -1592,6 +2250,38 @@ vte_terminal_class_init(VteTerminalClass *klass) TRUE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + /** + * VteTerminal:enable-sixel: + * + * Controls whether SIXEL image support is enabled. + * + * Since: 0.62 + */ + pspecs[PROP_ENABLE_SIXEL] = + g_param_spec_boolean ("enable-sixel", nullptr, nullptr, + false, + (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + + + /** + * VteTerminal:font-options: + * + * The terminal's font options, or %NULL to use the default font options. + * + * Note that on GTK4, the terminal by default uses font options + * with %CAIRO_HINT_METRICS_ON set; to override that, use this + * function to set a #cairo_font_options_t that has + * %CAIRO_HINT_METRICS_OFF set. + * + * Since: 0.74 + */ + pspecs[PROP_FONT_OPTIONS] = + g_param_spec_boxed("font-options", nullptr, nullptr, + CAIRO_GOBJECT_TYPE_FONT_OPTIONS, + GParamFlags(G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS | + G_PARAM_EXPLICIT_NOTIFY)); + /** * VteTerminal:font-scale: * @@ -1707,6 +2397,22 @@ vte_terminal_class_init(VteTerminalClass *klass) VTE_SCROLLBACK_INIT, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + + /** + * VteTerminal:scroll-on-insert: + * + * Controls whether or not the terminal will forcibly scroll to the bottom of + * the viewable history when the text is inserted (e.g. by a paste). + * + * Since: 0.76 + */ + pspecs[PROP_SCROLL_ON_INSERT] = + g_param_spec_boolean("scroll-on-insert", nullptr, nullptr, + false, + GParamFlags(G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS | + G_PARAM_EXPLICIT_NOTIFY)); + /** * VteTerminal:scroll-on-keystroke: * @@ -1730,6 +2436,34 @@ vte_terminal_class_init(VteTerminalClass *klass) TRUE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + /** + * VteTerminal:handle-scroll: + * + * Controls whether or not the terminal manages its own scrolling. This can be + * disabled when the terminal is the child of a GtkScrolledWindow to take + * advantage of kinetic scrolling. + * + * Since: 0.64 + */ + pspecs[PROP_ENABLE_FALLBACK_SCROLLING] = + g_param_spec_boolean ("enable-fallback-scrolling", nullptr, nullptr, + true, + GParamFlags(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + + /** + * VteTerminal:scroll-unit-is-pixels: + * + * Controls whether the terminal's GtkAdjustment values unit is lines + * or pixels. This can be enabled when the terminal is the child of a + * GtkScrolledWindow to fix some bugs with its kinetic scrolling. + * + * Since: 0.66 + */ + pspecs[PROP_SCROLL_UNIT_IS_PIXELS] = + g_param_spec_boolean ("scroll-unit-is-pixels", nullptr, nullptr, + false, + GParamFlags(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + /** * VteTerminal:text-blink-mode: * @@ -1801,40 +2535,108 @@ vte_terminal_class_init(VteTerminalClass *klass) NULL, (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + /** + * VteTerminal:xalign: + * + * The horizontal alignment of @terminal within its allocation. + * + * Since: 0.76 + */ + pspecs[PROP_XALIGN] = + g_param_spec_enum("xalign", nullptr, nullptr, + VTE_TYPE_ALIGN, + VTE_ALIGN_START, + GParamFlags(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + + /** + * VteTerminal:yalign: + * + * The vertical alignment of @terminal within its allocation + * + * Since: 0.76 + */ + pspecs[PROP_YALIGN] = + g_param_spec_enum("yalign", nullptr, nullptr, + VTE_TYPE_ALIGN, + VTE_ALIGN_START, + GParamFlags(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + + /** + * VteTerminal:xfill: + * + * The horizontal fillment of @terminal within its allocation. + * + * Since: 0.76 + */ + pspecs[PROP_XFILL] = + g_param_spec_boolean("xfill", nullptr, nullptr, + TRUE, + GParamFlags(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + + /** + * VteTerminal:yfill: + * + * The vertical fillment of @terminal within its allocation. + * Note that #VteTerminal:yfill=%TRUE is only supported with + * #VteTerminal:yalign=%VTE_ALIGN_START, and is ignored for + * all other yalign values. + * + * Since: 0.76 + */ + pspecs[PROP_YFILL] = + g_param_spec_boolean("yfill", nullptr, nullptr, + TRUE, + GParamFlags(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); + g_object_class_install_properties(gobject_class, LAST_PROP, pspecs); +#if VTE_GTK == 3 /* Disable GtkWidget's keybindings except for Shift-F10 and MenuKey * which pop up the context menu. */ - binding_set = gtk_binding_set_by_class(vte_terminal_parent_class); + auto const binding_set = gtk_binding_set_by_class(vte_terminal_parent_class); gtk_binding_entry_skip(binding_set, GDK_KEY_F1, GDK_CONTROL_MASK); gtk_binding_entry_skip(binding_set, GDK_KEY_F1, GDK_SHIFT_MASK); gtk_binding_entry_skip(binding_set, GDK_KEY_KP_F1, GDK_CONTROL_MASK); gtk_binding_entry_skip(binding_set, GDK_KEY_KP_F1, GDK_SHIFT_MASK); +#endif /* VTE_GTK == 3 */ process_timer = g_timer_new(); klass->priv = G_TYPE_CLASS_GET_PRIVATE (klass, VTE_TYPE_TERMINAL, VteTerminalClassPrivate); klass->priv->style_provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ()); - klass->priv->style_provider_padding = GTK_STYLE_PROVIDER (gtk_css_provider_new ()); +#if VTE_GTK == 3 + auto err = vte::glib::Error{}; +#elif VTE_GTK == 4 + g_signal_connect(klass->priv->style_provider, "parsing-error", + G_CALLBACK(style_provider_parsing_error_cb), nullptr); +#endif gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (klass->priv->style_provider), "VteTerminal, " VTE_TERMINAL_CSS_NAME " {\n" "padding: 1px 1px 1px 1px;\n" +#if (VTE_GTK == 4) || ((VTE_GTK == 3) && GTK_CHECK_VERSION (3, 24, 22)) + "background-color: @text_view_bg;\n" +#else "background-color: @theme_base_color;\n" - "color: @theme_fg_color;\n" +#endif + "color: @theme_text_color;\n" "}\n", - -1, NULL); + -1 +#if VTE_GTK == 3 + , NULL +#endif + ); +#if VTE_GTK == 3 + err.assert_no_error(); +#endif - gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (klass->priv->style_provider_padding), - "VteTerminal, " VTE_TERMINAL_CSS_NAME " {\n" - "padding: 1px 1px 1px 1px;\n" - "}\n", - -1, NULL); -#ifdef WITH_A11Y +#if VTE_GTK == 3 +#if WITH_A11Y /* a11y */ gtk_widget_class_set_accessible_type(widget_class, VTE_TYPE_TERMINAL_ACCESSIBLE); #endif +#endif } /* public API */ @@ -1849,29 +2651,29 @@ vte_terminal_class_init(VteTerminalClass *klass) * Since: 0.40 */ const char * -vte_get_features (void) +vte_get_features (void) noexcept { return -#ifdef WITH_FRIBIDI +#if WITH_FRIBIDI "+BIDI" #else "-BIDI" #endif " " -#ifdef WITH_GNUTLS +#if WITH_GNUTLS "+GNUTLS" #else "-GNUTLS" #endif " " -#ifdef WITH_ICU +#if WITH_ICU "+ICU" #else "-ICU" #endif #ifdef __linux__ " " -#ifdef WITH_SYSTEMD +#if WITH_SYSTEMD "+SYSTEMD" #else "-SYSTEMD" @@ -1880,6 +2682,33 @@ vte_get_features (void) ; } +/** + * vte_get_feature_flags: + * + * Gets features VTE was compiled with. + * + * Returns: (transfer none): flags from #VteFeatureFlags + * + * Since: 0.62 + */ +VteFeatureFlags +vte_get_feature_flags(void) noexcept +{ + return VteFeatureFlags(0ULL | +#if WITH_FRIBIDI + VTE_FEATURE_FLAG_BIDI | +#endif +#if WITH_ICU + VTE_FEATURE_FLAG_ICU | +#endif +#ifdef __linux__ +#if WITH_SYSTEMD + VTE_FEATURE_FLAG_SYSTEMD | +#endif +#endif // __linux__ + 0ULL); +} + /** * vte_get_major_version: * @@ -1893,7 +2722,7 @@ vte_get_features (void) * Since: 0.40 */ guint -vte_get_major_version (void) +vte_get_major_version (void) noexcept { return VTE_MAJOR_VERSION; } @@ -1911,7 +2740,7 @@ vte_get_major_version (void) * Since: 0.40 */ guint -vte_get_minor_version (void) +vte_get_minor_version (void) noexcept { return VTE_MINOR_VERSION; } @@ -1929,7 +2758,7 @@ vte_get_minor_version (void) * Since: 0.40 */ guint -vte_get_micro_version (void) +vte_get_micro_version (void) noexcept { return VTE_MICRO_VERSION; } @@ -1944,7 +2773,7 @@ vte_get_micro_version (void) * user's shell, or %NULL */ char * -vte_get_user_shell (void) +vte_get_user_shell (void) noexcept { struct passwd *pwd; @@ -1956,7 +2785,7 @@ vte_get_user_shell (void) } /** - * vte_set_test_flags: (skip): + * vte_set_test_flags: (skip) * @flags: flags * * Sets test flags. This function is only useful for implementing @@ -1965,9 +2794,9 @@ vte_get_user_shell (void) * Since: 0.54 */ void -vte_set_test_flags(guint64 flags) +vte_set_test_flags(guint64 flags) noexcept { -#ifdef VTE_DEBUG +#if VTE_DEBUG g_test_flags = flags; #endif } @@ -1989,15 +2818,23 @@ vte_set_test_flags(guint64 flags) * Deprecated: 0.60 */ char ** -vte_get_encodings(gboolean include_aliases) +vte_get_encodings(gboolean include_aliases) noexcept +try { -#ifdef WITH_ICU +#if WITH_ICU return vte::base::get_icu_charsets(include_aliases != FALSE); #else char *empty[] = { nullptr }; return g_strdupv(empty); #endif } +catch (...) +{ + vte::log_exception(); + + char *empty[] = { nullptr }; + return g_strdupv(empty); +} /** * vte_get_encoding_supported: @@ -2016,16 +2853,22 @@ vte_get_encodings(gboolean include_aliases) * Deprecated: 0.60 */ gboolean -vte_get_encoding_supported(const char *encoding) +vte_get_encoding_supported(const char *encoding) noexcept +try { g_return_val_if_fail(encoding != nullptr, false); -#ifdef WITH_ICU +#if WITH_ICU return vte::base::get_icu_charset_supported(encoding); #else return false; #endif } +catch (...) +{ + vte::log_exception(); + return false; +} /* VteTerminal public API */ @@ -2037,7 +2880,7 @@ vte_get_encoding_supported(const char *encoding) * Returns: (transfer none) (type Vte.Terminal): a new #VteTerminal object */ GtkWidget * -vte_terminal_new(void) +vte_terminal_new(void) noexcept { return (GtkWidget *)g_object_new(VTE_TYPE_TERMINAL, nullptr); } @@ -2053,13 +2896,17 @@ vte_terminal_new(void) * instead. */ void -vte_terminal_copy_clipboard(VteTerminal *terminal) +vte_terminal_copy_clipboard(VteTerminal *terminal) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); IMPL(terminal)->emit_copy_clipboard(); } - +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_copy_clipboard_format: @@ -2080,12 +2927,18 @@ vte_terminal_copy_clipboard(VteTerminal *terminal) */ void vte_terminal_copy_clipboard_format(VteTerminal *terminal, - VteFormat format) + VteFormat format) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); - g_return_if_fail(format == VTE_FORMAT_TEXT || format == VTE_FORMAT_HTML); + g_return_if_fail(check_enum_value(format)); - WIDGET(terminal)->copy(VTE_SELECTION_CLIPBOARD, format); + WIDGET(terminal)->copy(vte::platform::ClipboardType::CLIPBOARD, + clipboard_format_from_vte(format)); +} +catch (...) +{ + vte::log_exception(); } /** @@ -2096,11 +2949,17 @@ vte_terminal_copy_clipboard_format(VteTerminal *terminal, * selection. */ void -vte_terminal_copy_primary(VteTerminal *terminal) +vte_terminal_copy_primary(VteTerminal *terminal) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); _vte_debug_print(VTE_DEBUG_SELECTION, "Copying to PRIMARY.\n"); - WIDGET(terminal)->copy(VTE_SELECTION_PRIMARY, VTE_FORMAT_TEXT); + WIDGET(terminal)->copy(vte::platform::ClipboardType::PRIMARY, + vte::platform::ClipboardFormat::TEXT); +} +catch (...) +{ + vte::log_exception(); } /** @@ -2112,12 +2971,43 @@ vte_terminal_copy_primary(VteTerminal *terminal) * user presses Shift+Insert. */ void -vte_terminal_paste_clipboard(VteTerminal *terminal) +vte_terminal_paste_clipboard(VteTerminal *terminal) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); IMPL(terminal)->emit_paste_clipboard(); } +catch (...) +{ + vte::log_exception(); +} + +/** + * vte_terminal_paste_text: + * @terminal: a #VteTerminal + * @text: a string to paste + * + * Sends @text to the terminal's child as if retrived from the clipboard, + * this differs from vte_terminal_feed_child() in that it may process + * @text before passing it to the child (e.g. apply bracketed mode) + * + * Since: 0.68 + */ +void +vte_terminal_paste_text(VteTerminal *terminal, + char const* text) noexcept +try +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); + g_return_if_fail(text != nullptr); + + WIDGET(terminal)->paste_text(text); +} +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_paste_primary: @@ -2129,12 +3019,19 @@ vte_terminal_paste_clipboard(VteTerminal *terminal) * mouse button. */ void -vte_terminal_paste_primary(VteTerminal *terminal) +vte_terminal_paste_primary(VteTerminal *terminal) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); _vte_debug_print(VTE_DEBUG_SELECTION, "Pasting PRIMARY.\n"); - WIDGET(terminal)->paste(GDK_SELECTION_PRIMARY); + WIDGET(terminal)->paste(vte::platform::ClipboardType::PRIMARY); } +catch (...) +{ + vte::log_exception(); +} + +#if VTE_GTK == 3 /** * vte_terminal_match_add_gregex: @@ -2146,16 +3043,18 @@ vte_terminal_paste_primary(VteTerminal *terminal) * * Returns: -1 * - * Deprecated: 0.46: Use vte_terminal_match_add_regex() or vte_terminal_match_add_regex_full() instead. + * Deprecated: 0.46: Use vte_terminal_match_add_regex() instead. */ int vte_terminal_match_add_gregex(VteTerminal *terminal, GRegex *gregex, - GRegexMatchFlags gflags) + GRegexMatchFlags gflags) noexcept { return -1; } +#endif /* VTE_GTK == 3 */ + /** * vte_terminal_match_add_regex: * @terminal: a #VteTerminal @@ -2166,6 +3065,9 @@ vte_terminal_match_add_gregex(VteTerminal *terminal, * user moves the mouse cursor over a section of displayed text which matches * this expression, the text will be highlighted. * + * Note that @regex should have been created using the PCRE2_MULTILINE + * flag. + * * Returns: an integer associated with this expression * * Since: 0.46 @@ -2173,7 +3075,8 @@ vte_terminal_match_add_gregex(VteTerminal *terminal, int vte_terminal_match_add_regex(VteTerminal *terminal, VteRegex *regex, - guint32 flags) + guint32 flags) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), -1); g_return_val_if_fail(regex != NULL, -1); @@ -2186,6 +3089,11 @@ vte_terminal_match_add_regex(VteTerminal *terminal, VTE_DEFAULT_CURSOR, impl->regex_match_next_tag()).tag(); } +catch (...) +{ + vte::log_exception(); + return -1; +} /** * vte_terminal_match_check: @@ -2212,12 +3120,19 @@ char * vte_terminal_match_check(VteTerminal *terminal, long column, long row, - int *tag) + int *tag) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL); - return IMPL(terminal)->regex_match_check(column, row, tag); + return WIDGET(terminal)->regex_match_check(column, row, tag); +} +catch (...) +{ + vte::log_exception(); + return nullptr; } +#if VTE_GTK == 3 /** * vte_terminal_match_check_event: @@ -2240,10 +3155,16 @@ vte_terminal_match_check(VteTerminal *terminal, char * vte_terminal_match_check_event(VteTerminal *terminal, GdkEvent *event, - int *tag) + int *tag) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); - return IMPL(terminal)->regex_match_check(event, tag); + return WIDGET(terminal)->regex_match_check(event, tag); +} +catch (...) +{ + vte::log_exception(); + return nullptr; } /** @@ -2265,25 +3186,88 @@ vte_terminal_match_check_event(VteTerminal *terminal, */ char * vte_terminal_hyperlink_check_event(VteTerminal *terminal, - GdkEvent *event) + GdkEvent *event) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); - return IMPL(terminal)->hyperlink_check(event); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr); + return WIDGET(terminal)->hyperlink_check(event); +} +catch (...) +{ + vte::log_exception(); + return nullptr; } /** - * vte_terminal_event_check_regex_simple: + * vte_terminal_event_check_regex_array: (rename-to vte_terminal_event_check_regex_simple) * @terminal: a #VteTerminal * @event: a #GdkEvent * @regexes: (array length=n_regexes): an array of #VteRegex * @n_regexes: number of items in @regexes * @match_flags: PCRE2 match flags, or 0 - * @matches: (out caller-allocates) (array length=n_regexes): a location to store the matches + * @n_matches: (out) (optional): number of items in @matches, which is always equal to @n_regexes + * + * Like vte_terminal_event_check_regex_simple(), but returns an array of strings, + * containing the matching text (or %NULL if no match) corresponding to each of the + * regexes in @regexes. + * + * You must free each string and the array; but note that this is *not* a %NULL-terminated + * string array, and so you must *not* use g_strfreev() on it. + * + * Returns: (nullable) (transfer full) (array length=n_matches): a newly allocated array of strings, + * or %NULL if none of the regexes matched + * + * Since: 0.62 + */ +char** +vte_terminal_event_check_regex_array(VteTerminal *terminal, + GdkEvent *event, + VteRegex **regexes, + gsize n_regexes, + guint32 match_flags, + gsize *n_matches) noexcept +try +{ + if (n_matches) + *n_matches = n_regexes; + + if (n_regexes == 0) + return nullptr; + + auto matches = vte::glib::take_free_ptr(g_new0(char*, n_regexes)); + if (!vte_terminal_event_check_regex_simple(terminal, + event, + regexes, + n_regexes, + match_flags, + matches.get())) + return nullptr; + + return matches.release(); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +/** + * vte_terminal_event_check_regex_simple: (skip) + * @terminal: a #VteTerminal + * @event: a #GdkEvent + * @regexes: (array length=n_regexes): an array of #VteRegex + * @n_regexes: number of items in @regexes + * @match_flags: PCRE2 match flags, or 0 + * @matches: (out caller-allocates) (array length=n_regexes) (transfer full): a location to store the matches * * Checks each regex in @regexes if the text in and around the position of * the event matches the regular expressions. If a match exists, the matched * text is stored in @matches at the position of the regex in @regexes; otherwise - * %NULL is stored there. + * %NULL is stored there. Each non-%NULL element of @matches should be freed with + * g_free(). + * + * Note that the regexes in @regexes should have been created using the + * PCRE2_MULTILINE flag. * * Returns: %TRUE iff any of the regexes produced a match * @@ -2295,7 +3279,8 @@ vte_terminal_event_check_regex_simple(VteTerminal *terminal, VteRegex **regexes, gsize n_regexes, guint32 match_flags, - char **matches) + char **matches) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); g_return_val_if_fail(event != NULL, FALSE); @@ -2306,12 +3291,200 @@ vte_terminal_event_check_regex_simple(VteTerminal *terminal, } g_return_val_if_fail(matches != NULL, FALSE); - return IMPL(terminal)->regex_match_check_extra(event, - regex_array_from_wrappers(regexes), - n_regexes, - match_flags, - matches); + return WIDGET(terminal)->regex_match_check_extra(event, + regex_array_from_wrappers(regexes), + n_regexes, + match_flags, + matches); } +catch (...) +{ + vte::log_exception(); + return false; +} + +#elif VTE_GTK == 4 + +/** + * vte_terminal_check_match_at: + * @terminal: a #VteTerminal + * @x: + * @y: + * @tag: (out) (allow-none): a location to store the tag, or %NULL + * + * Checks if the text in and around the position (x, y) matches any of the + * regular expressions previously set using vte_terminal_match_add(). If a + * match exists, the text string is returned and if @tag is not %NULL, the number + * associated with the matched regular expression will be stored in @tag. + * + * If more than one regular expression has been set with + * vte_terminal_match_add(), then expressions are checked in the order in + * which they were added. + * + * Returns: (transfer full) (nullable): a newly allocated string which matches one of the previously + * set regular expressions, or %NULL if there is no match + * + * Since: 0.70 + */ +char* +vte_terminal_check_match_at(VteTerminal* terminal, + double x, + double y, + int* tag) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + return WIDGET(terminal)->regex_match_check_at(x, y, tag); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +/** + * vte_terminal_check_hyperlink_at: + * @terminal: a #VteTerminal + * @x: + * @y: + * + * Returns a nonempty string: the target of the explicit hyperlink (printed using the OSC 8 + * escape sequence) at the position (x, y), or %NULL. + * + * Proper use of the escape sequence should result in URI-encoded URIs with a proper scheme + * like "http://", "https://", "file://", "mailto:" etc. This is, however, not enforced by VTE. + * The caller must tolerate the returned string potentially not being a valid URI. + * + * Returns: (transfer full) (nullable): a newly allocated string containing the target of the hyperlink, + * or %NULL + * + * Since: 0.70 + */ +char* +vte_terminal_check_hyperlink_at(VteTerminal* terminal, + double x, + double y) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr); + return WIDGET(terminal)->hyperlink_check_at(x, y); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +/** + * vte_terminal_check_regex_array_at: (rename-to vte_terminal_check_regex_simple_at) + * @terminal: a #VteTerminal + * @x: + * @y: + * @regexes: (array length=n_regexes): an array of #VteRegex + * @n_regexes: number of items in @regexes + * @match_flags: PCRE2 match flags, or 0 + * @n_matches: (out) (optional): number of items in @matches, which is always equal to @n_regexes + * + * Like vte_terminal_check_regex_simple_at(), but returns an array of strings, + * containing the matching text (or %NULL if no match) corresponding to each of the + * regexes in @regexes. + * + * You must free each string and the array; but note that this is *not* a %NULL-terminated + * string array, and so you must *not* use g_strfreev() on it. + * + * Returns: (nullable) (transfer full) (array length=n_matches): a newly allocated array of strings, + * or %NULL if none of the regexes matched + * + * Since: 0.70 + */ +char** +vte_terminal_check_regex_array_at(VteTerminal* terminal, + double x, + double y, + VteRegex** regexes, + gsize n_regexes, + guint32 match_flags, + gsize* n_matches) noexcept +try +{ + if (n_matches) + *n_matches = n_regexes; + + if (n_regexes == 0) + return nullptr; + + auto matches = vte::glib::take_free_ptr(g_new0(char*, n_regexes)); + if (!vte_terminal_check_regex_simple_at(terminal, + x, y, + regexes, + n_regexes, + match_flags, + matches.get())) + return nullptr; + + return matches.release(); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +/** + * vte_terminal_check_regex_simple_at: (skip) + * @terminal: a #VteTerminal + * @x: + * @y: + * @regexes: (array length=n_regexes): an array of #VteRegex + * @n_regexes: number of items in @regexes + * @match_flags: PCRE2 match flags, or 0 + * @matches: (out caller-allocates) (array length=n_regexes) (transfer full): a location to store the matches + * + * Checks each regex in @regexes if the text in and around the position (x, y) + * matches the regular expressions. If a match exists, the matched + * text is stored in @matches at the position of the regex in @regexes; otherwise + * %NULL is stored there. Each non-%NULL element of @matches should be freed with + * g_free(). + * + * Note that the regexes in @regexes should have been created using the %PCRE2_MULTILINE flag. + * + * Returns: %TRUE iff any of the regexes produced a match + * + * Since: 0.70 + */ +gboolean +vte_terminal_check_regex_simple_at(VteTerminal* terminal, + double x, + double y, + VteRegex** regexes, + gsize n_regexes, + guint32 match_flags, + char** matches) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(regexes != NULL || n_regexes == 0, FALSE); + for (gsize i = 0; i < n_regexes; i++) { + g_return_val_if_fail(_vte_regex_has_purpose(regexes[i], vte::base::Regex::Purpose::eMatch), -1); + g_warn_if_fail(_vte_regex_has_multiline_compile_flag(regexes[i])); + } + g_return_val_if_fail(matches != NULL, FALSE); + + return WIDGET(terminal)->regex_match_check_extra_at(x, y, + regex_array_from_wrappers(regexes), + n_regexes, + match_flags, + matches); +} +catch (...) +{ + vte::log_exception(); + return false; +} + +#endif /* VTE_GTK */ + +#if VTE_GTK == 3 /** * vte_terminal_event_check_gregex_simple: @@ -2335,11 +3508,13 @@ vte_terminal_event_check_gregex_simple(VteTerminal *terminal, GRegex **regexes, gsize n_regexes, GRegexMatchFlags match_flags, - char **matches) + char **matches) noexcept { return FALSE; } +#endif /* VTE_GTK == 3 */ + /** * vte_terminal_match_set_cursor: * @terminal: a #VteTerminal @@ -2355,13 +3530,20 @@ vte_terminal_event_check_gregex_simple(VteTerminal *terminal, void vte_terminal_match_set_cursor(VteTerminal *terminal, int tag, - GdkCursor *cursor) + GdkCursor *cursor) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(tag >= 0); if (auto rem = IMPL(terminal)->regex_match_get(tag)) rem->set_cursor(vte::glib::make_ref(cursor)); } +catch (...) +{ + vte::log_exception(); +} + +#if VTE_GTK == 3 /** * vte_terminal_match_set_cursor_type: @@ -2377,13 +3559,19 @@ vte_terminal_match_set_cursor(VteTerminal *terminal, void vte_terminal_match_set_cursor_type(VteTerminal *terminal, int tag, - GdkCursorType cursor_type) + GdkCursorType cursor_type) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(tag >= 0); if (auto rem = IMPL(terminal)->regex_match_get(tag)) rem->set_cursor(cursor_type); } +catch (...) +{ + vte::log_exception(); +} +#endif /* VTE_GTK == 3 */ /** * vte_terminal_match_set_cursor_name: @@ -2397,13 +3585,18 @@ vte_terminal_match_set_cursor_type(VteTerminal *terminal, void vte_terminal_match_set_cursor_name(VteTerminal *terminal, int tag, - const char *cursor_name) + const char *cursor_name) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(tag >= 0); if (auto rem = IMPL(terminal)->regex_match_get(tag)) rem->set_cursor(cursor_name); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_match_remove: @@ -2415,11 +3608,17 @@ vte_terminal_match_set_cursor_name(VteTerminal *terminal, * moves the mouse cursor over matching text. */ void -vte_terminal_match_remove(VteTerminal *terminal, int tag) +vte_terminal_match_remove(VteTerminal *terminal, + int tag) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); IMPL(terminal)->regex_match_remove(tag); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_match_remove_all: @@ -2429,11 +3628,16 @@ vte_terminal_match_remove(VteTerminal *terminal, int tag) * when the user moves the mouse cursor. */ void -vte_terminal_match_remove_all(VteTerminal *terminal) +vte_terminal_match_remove_all(VteTerminal *terminal) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); IMPL(terminal)->regex_match_remove_all(); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_search_find_previous: @@ -2445,11 +3649,17 @@ vte_terminal_match_remove_all(VteTerminal *terminal) * Returns: %TRUE if a match was found */ gboolean -vte_terminal_search_find_previous (VteTerminal *terminal) +vte_terminal_search_find_previous (VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return IMPL(terminal)->search_find(true); } +catch (...) +{ + vte::log_exception(); + return false; +} /** * vte_terminal_search_find_next: @@ -2461,11 +3671,17 @@ vte_terminal_search_find_previous (VteTerminal *terminal) * Returns: %TRUE if a match was found */ gboolean -vte_terminal_search_find_next (VteTerminal *terminal) +vte_terminal_search_find_next (VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return IMPL(terminal)->search_find(false); } +catch (...) +{ + vte::log_exception(); + return false; +} /** * vte_terminal_search_set_regex: @@ -2475,12 +3691,16 @@ vte_terminal_search_find_next (VteTerminal *terminal) * * Sets the regex to search for. Unsets the search regex when passed %NULL. * + * Note that @regex should have been created using the + * PCRE2_MULTILINE flag. + * * Since: 0.46 */ void vte_terminal_search_set_regex (VteTerminal *terminal, VteRegex *regex, - guint32 flags) + guint32 flags) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(regex == nullptr || _vte_regex_has_purpose(regex, vte::base::Regex::Purpose::eSearch)); @@ -2488,6 +3708,10 @@ vte_terminal_search_set_regex (VteTerminal *terminal, IMPL(terminal)->search_set_regex(vte::base::make_ref(regex_from_wrapper(regex)), flags); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_search_get_regex: @@ -2498,12 +3722,20 @@ vte_terminal_search_set_regex (VteTerminal *terminal, * Since: 0.46 */ VteRegex * -vte_terminal_search_get_regex(VteTerminal *terminal) +vte_terminal_search_get_regex(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr); return wrapper_from_regex(IMPL(terminal)->search_regex()); } +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +#if VTE_GTK == 3 /** * vte_terminal_search_set_gregex: @@ -2518,7 +3750,7 @@ vte_terminal_search_get_regex(VteTerminal *terminal) void vte_terminal_search_set_gregex (VteTerminal *terminal, GRegex *gregex, - GRegexMatchFlags gflags) + GRegexMatchFlags gflags) noexcept { } @@ -2531,13 +3763,15 @@ vte_terminal_search_set_gregex (VteTerminal *terminal, * Deprecated: 0.46: use vte_terminal_search_get_regex() instead. */ GRegex * -vte_terminal_search_get_gregex (VteTerminal *terminal) +vte_terminal_search_get_gregex (VteTerminal *terminal) noexcept { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr); - return NULL; + return nullptr; } +#endif /* VTE_GTK == 3 */ + /** * vte_terminal_search_set_wrap_around: * @terminal: a #VteTerminal @@ -2548,12 +3782,17 @@ vte_terminal_search_get_gregex (VteTerminal *terminal) */ void vte_terminal_search_set_wrap_around (VteTerminal *terminal, - gboolean wrap_around) + gboolean wrap_around) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); IMPL(terminal)->search_set_wrap_around(wrap_around != FALSE); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_search_get_wrap_around: @@ -2562,27 +3801,36 @@ vte_terminal_search_set_wrap_around (VteTerminal *terminal, * Returns: whether searching will wrap around */ gboolean -vte_terminal_search_get_wrap_around (VteTerminal *terminal) +vte_terminal_search_get_wrap_around (VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); - + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return IMPL(terminal)->m_search_wrap_around; } - +catch (...) +{ + vte::log_exception(); + return false; +} /** * vte_terminal_select_all: * @terminal: a #VteTerminal * - * Selects all text within the terminal (including the scrollback buffer). + * Selects all text within the terminal (not including the scrollback buffer). */ void -vte_terminal_select_all (VteTerminal *terminal) +vte_terminal_select_all (VteTerminal *terminal) noexcept +try { g_return_if_fail (VTE_IS_TERMINAL (terminal)); IMPL(terminal)->select_all(); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_unselect_all: @@ -2591,12 +3839,17 @@ vte_terminal_select_all (VteTerminal *terminal) * Clears the current selection. */ void -vte_terminal_unselect_all(VteTerminal *terminal) +vte_terminal_unselect_all(VteTerminal *terminal) noexcept +try { g_return_if_fail (VTE_IS_TERMINAL (terminal)); IMPL(terminal)->deselect_all(); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_cursor_position: @@ -2612,7 +3865,8 @@ vte_terminal_unselect_all(VteTerminal *terminal) void vte_terminal_get_cursor_position(VteTerminal *terminal, long *column, - long *row) + long *row) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); @@ -2624,6 +3878,10 @@ vte_terminal_get_cursor_position(VteTerminal *terminal, *row = impl->m_screen->cursor.row; } } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_pty_new_sync: @@ -2644,17 +3902,29 @@ VtePty * vte_terminal_pty_new_sync(VteTerminal *terminal, VtePtyFlags flags, GCancellable *cancellable, - GError **error) + GError **error) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL); - VtePty *pty = vte_pty_new_sync(flags, cancellable, error); - if (pty == NULL) - return NULL; + auto pty = vte::glib::take_ref(vte_pty_new_sync(flags, cancellable, error)); + if (!pty) + return nullptr; - vte_pty_set_size(pty, IMPL(terminal)->m_row_count, IMPL(terminal)->m_column_count, NULL); + auto impl = IMPL(terminal); + _vte_pty_set_size(pty.get(), + impl->m_row_count, + impl->m_column_count, + impl->m_cell_height_unscaled, + impl->m_cell_width_unscaled, + nullptr); - return pty; + return pty.release(); +} +catch (...) +{ + vte::glib::set_error_from_exception(error); + return nullptr; } /** @@ -2678,7 +3948,8 @@ vte_terminal_pty_new_sync(VteTerminal *terminal, */ void vte_terminal_watch_child (VteTerminal *terminal, - GPid child_pid) + GPid child_pid) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(child_pid != -1); @@ -2687,6 +3958,10 @@ vte_terminal_watch_child (VteTerminal *terminal, IMPL(terminal)->watch_child(child_pid); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_spawn_sync: @@ -2712,6 +3987,11 @@ vte_terminal_watch_child (VteTerminal *terminal, * * Note that %G_SPAWN_DO_NOT_REAP_CHILD will always be added to @spawn_flags. * + * Note also that %G_SPAWN_STDOUT_TO_DEV_NULL, %G_SPAWN_STDERR_TO_DEV_NULL, + * and %G_SPAWN_CHILD_INHERITS_STDIN are not supported in @spawn_flags, since + * stdin, stdout and stderr of the child process will always be connected to + * the PTY. + * * Note that all open file descriptors will be closed in the child. If you want * to keep some file descriptor open for use in the child process, you need to * use a child setup function that unsets the FD_CLOEXEC flag on that file @@ -2738,36 +4018,35 @@ vte_terminal_spawn_sync(VteTerminal *terminal, gpointer child_setup_data, GPid *child_pid /* out */, GCancellable *cancellable, - GError **error) + GError **error) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); g_return_val_if_fail(argv != NULL, FALSE); + g_return_val_if_fail(argv[0] != nullptr, FALSE); + g_return_val_if_fail(envv == nullptr ||_vte_pty_check_envv(envv), false); g_return_val_if_fail((spawn_flags & (VTE_SPAWN_NO_SYSTEMD_SCOPE | VTE_SPAWN_REQUIRE_SYSTEMD_SCOPE)) == 0, FALSE); g_return_val_if_fail(child_setup_data == NULL || child_setup, FALSE); g_return_val_if_fail(error == NULL || *error == NULL, FALSE); - auto new_pty = vte_terminal_pty_new_sync(terminal, pty_flags, cancellable, error); - if (new_pty == nullptr) + auto new_pty = vte::glib::take_ref(vte_terminal_pty_new_sync(terminal, pty_flags, cancellable, error)); + if (!new_pty) return false; GPid pid; - if (!_vte_pty_spawn(new_pty, - working_directory, - argv, - envv, - spawn_flags, - child_setup, child_setup_data, - &pid, - -1 /* no timeout */, - cancellable, - error)) { - g_object_unref(new_pty); + if (!_vte_pty_spawn_sync(new_pty.get(), + working_directory, + argv, + envv, + spawn_flags, + child_setup, child_setup_data, nullptr, + &pid, + -1 /* default timeout */, + cancellable, + error)) return false; - } - - vte_terminal_set_pty(terminal, new_pty); - g_object_unref (new_pty); + vte_terminal_set_pty(terminal, new_pty.get()); vte_terminal_watch_child(terminal, pid); if (child_pid) @@ -2775,6 +4054,10 @@ vte_terminal_spawn_sync(VteTerminal *terminal, return true; } +catch (...) +{ + return vte::glib::set_error_from_exception(error); +} typedef struct { GWeakRef wref; @@ -2784,8 +4067,8 @@ typedef struct { static gpointer spawn_async_callback_data_new(VteTerminal *terminal, - VteTerminalSpawnAsyncCallback callback, - gpointer user_data) + VteTerminalSpawnAsyncCallback callback, + gpointer user_data) noexcept { SpawnAsyncCallbackData *data = g_new0 (SpawnAsyncCallbackData, 1); @@ -2797,50 +4080,55 @@ spawn_async_callback_data_new(VteTerminal *terminal, } static void -spawn_async_callback_data_free (SpawnAsyncCallbackData *data) +spawn_async_callback_data_free(SpawnAsyncCallbackData* data) noexcept { g_weak_ref_clear(&data->wref); g_free(data); } static void -spawn_async_cb (GObject *source, - GAsyncResult *result, - gpointer user_data) +spawn_async_cb(GObject *source, + GAsyncResult *result, + gpointer user_data) noexcept { SpawnAsyncCallbackData *data = reinterpret_cast(user_data); VtePty *pty = VTE_PTY(source); - GPid pid = -1; + auto pid = pid_t{-1}; auto error = vte::glib::Error{}; - vte_pty_spawn_finish(pty, result, &pid, error); + if (source) { + vte_pty_spawn_finish(pty, result, &pid, error); + } else { + (void)g_task_propagate_int(G_TASK(result), error); + assert(error.error()); + } /* Now get a ref to the terminal */ - VteTerminal* terminal = (VteTerminal*)g_weak_ref_get(&data->wref); + auto terminal = vte::glib::acquire_ref(&data->wref); - /* Automatically watch the child */ - if (terminal != nullptr) { + if (terminal) { if (pid != -1) { - vte_terminal_set_pty(terminal, pty); - vte_terminal_watch_child(terminal, pid); + vte_terminal_set_pty(terminal.get(), pty); + vte_terminal_watch_child(terminal.get(), pid); } else { - vte_terminal_set_pty(terminal, nullptr); - } - } else { - if (pid != -1) { - vte_reaper_add_child(pid); + vte_terminal_set_pty(terminal.get(), nullptr); } } - if (data->callback) - data->callback(terminal, pid, error, data->user_data); + if (data->callback) { + try { + data->callback(terminal.get(), pid, error, data->user_data); + } catch (...) { + vte::log_exception(); + } + } - if (terminal == nullptr) { + if (!terminal) { /* If the terminal was destroyed, we need to abort the child process, if any */ if (pid != -1) { pid_t pgrp; pgrp = getpgid(pid); - if (pgrp != -1) { + if (pgrp != -1 && pgrp != getpgid(getpid())) { kill(-pgrp, SIGHUP); } @@ -2849,17 +4137,13 @@ spawn_async_cb (GObject *source, } spawn_async_callback_data_free(data); - - if (terminal != nullptr) - g_object_unref(terminal); } - /** * VteTerminalSpawnAsyncCallback: * @terminal: the #VteTerminal * @pid: a #GPid - * @error: a #GError, or %NULL + * @error: (nullable): a #GError, or %NULL * @user_data: user data that was passed to vte_terminal_spawn_async * * Callback for vte_terminal_spawn_async(). @@ -2872,7 +4156,7 @@ spawn_async_cb (GObject *source, */ /** - * vte_terminal_spawn_async: + * vte_terminal_spawn_with_fds_async: * @terminal: a #VteTerminal * @pty_flags: flags from #VtePtyFlags * @working_directory: (allow-none): the name of a directory the command should start @@ -2880,17 +4164,21 @@ spawn_async_cb (GObject *source, * @argv: (array zero-terminated=1) (element-type filename): child's argument vector * @envv: (allow-none) (array zero-terminated=1) (element-type filename): a list of environment * variables to be added to the environment before starting the process, or %NULL - * @spawn_flags_: flags from #GSpawnFlags + * @fds: (nullable) (array length=n_fds) (transfer none) (scope call): an array of file descriptors, or %NULL + * @n_fds: the number of file descriptors in @fds, or 0 if @fds is %NULL + * @map_fds: (nullable) (array length=n_map_fds) (transfer none) (scope call): an array of integers, or %NULL + * @n_map_fds: the number of elements in @map_fds, or 0 if @map_fds is %NULL + * @spawn_flags: flags from #GSpawnFlags * @child_setup: (allow-none) (scope async): an extra child setup function to run in the child just before exec(), or %NULL - * @child_setup_data: (closure child_setup): user data for @child_setup, or %NULL - * @child_setup_data_destroy: (destroy child_setup_data): a #GDestroyNotify for @child_setup_data, or %NULL - * @timeout: a timeout value in ms, or -1 to wait indefinitely + * @child_setup_data: (nullable) (closure child_setup): user data for @child_setup, or %NULL + * @child_setup_data_destroy: (nullable) (destroy child_setup_data): a #GDestroyNotify for @child_setup_data, or %NULL + * @timeout: a timeout value in ms, -1 for the default timeout, or G_MAXINT to wait indefinitely * @cancellable: (allow-none): a #GCancellable, or %NULL - * @callback: (scope async): a #VteTerminalSpawnAsyncCallback, or %NULL - * @user_data: (closure callback): user data for @callback, or %NULL + * @callback: (nullable) (scope async): a #VteTerminalSpawnAsyncCallback, or %NULL + * @user_data: (nullable) (closure callback): user data for @callback, or %NULL * * A convenience function that wraps creating the #VtePty and spawning - * the child process on it. See vte_pty_new_sync(), vte_pty_spawn_async(), + * the child process on it. See vte_pty_new_sync(), vte_pty_spawn_with_fds_async(), * and vte_pty_spawn_finish() for more information. * * When the operation is finished successfully, @callback will be called @@ -2900,6 +4188,21 @@ spawn_async_cb (GObject *source, * When the operation fails, @callback will be called with a -1 #GPid, * and a non-%NULL #GError containing the error information. * + * Note that %G_SPAWN_STDOUT_TO_DEV_NULL, %G_SPAWN_STDERR_TO_DEV_NULL, + * and %G_SPAWN_CHILD_INHERITS_STDIN are not supported in @spawn_flags, since + * stdin, stdout and stderr of the child process will always be connected to + * the PTY. + * + * If @fds is not %NULL, the child process will map the file descriptors from + * @fds according to @map_fds; @n_map_fds must be less or equal to @n_fds. + * This function will take ownership of the file descriptors in @fds; + * you must not use or close them after this call. + * + * Note that all open file descriptors apart from those mapped as above + * will be closed in the child. (If you want to keep some other file descriptor + * open for use in the child process, you need to use a child setup function + * that unsets the FD_CLOEXEC flag on that file descriptor manually.) + * * Beginning with 0.60, and on linux only, and unless %VTE_SPAWN_NO_SYSTEMD_SCOPE is * passed in @spawn_flags, the newly created child process will be moved to its own * systemd user scope; and if %VTE_SPAWN_REQUIRE_SYSTEMD_SCOPE is passed, and creation @@ -2919,6 +4222,82 @@ spawn_async_cb (GObject *source, * The caller should also make sure that symlinks were preserved while constructing the value of @working_directory, * e.g. by using vte_terminal_get_current_directory_uri(), g_get_current_dir() or get_current_dir_name(). * + * Since: 0.62 + */ +void +vte_terminal_spawn_with_fds_async(VteTerminal *terminal, + VtePtyFlags pty_flags, + const char *working_directory, + char const* const* argv, + char const* const* envv, + int const* fds, + int n_fds, + int const* fd_map_to, + int n_fd_map_to, + GSpawnFlags spawn_flags, + GSpawnChildSetupFunc child_setup, + gpointer child_setup_data, + GDestroyNotify child_setup_data_destroy, + int timeout, + GCancellable *cancellable, + VteTerminalSpawnAsyncCallback callback, + gpointer user_data) noexcept +try +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); + g_return_if_fail(cancellable == nullptr || G_IS_CANCELLABLE (cancellable)); + + auto error = vte::glib::Error{}; + auto pty = vte::glib::take_ref(vte_terminal_pty_new_sync(terminal, pty_flags, cancellable, error)); + if (!pty) { + auto task = vte::glib::take_ref(g_task_new(nullptr, + cancellable, + spawn_async_cb, + spawn_async_callback_data_new(terminal, callback, user_data))); + g_task_return_error(task.get(), error.release()); + return; + } + + vte_pty_spawn_with_fds_async(pty.get(), + working_directory, + argv, + envv, + fds, n_fds, fd_map_to, n_fd_map_to, + spawn_flags, + child_setup, child_setup_data, child_setup_data_destroy, + timeout, cancellable, + spawn_async_cb, + spawn_async_callback_data_new(terminal, callback, user_data)); +} +catch (...) +{ + vte::log_exception(); +} + +/** + * vte_terminal_spawn_async: + * @terminal: a #VteTerminal + * @pty_flags: flags from #VtePtyFlags + * @working_directory: (allow-none): the name of a directory the command should start + * in, or %NULL to use the current working directory + * @argv: (array zero-terminated=1) (element-type filename): child's argument vector + * @envv: (allow-none) (array zero-terminated=1) (element-type filename): a list of environment + * variables to be added to the environment before starting the process, or %NULL + * @spawn_flags: flags from #GSpawnFlags + * @child_setup: (allow-none) (scope async): an extra child setup function to run in the child just before exec(), or %NULL + * @child_setup_data: (nullable) (closure child_setup): user data for @child_setup, or %NULL + * @child_setup_data_destroy: (nullable) (destroy child_setup_data): a #GDestroyNotify for @child_setup_data, or %NULL + * @timeout: a timeout value in ms, -1 for the default timeout, or G_MAXINT to wait indefinitely + * @cancellable: (allow-none): a #GCancellable, or %NULL + * @callback: (nullable) (scope async): a #VteTerminalSpawnAsyncCallback, or %NULL + * @user_data: (nullable) (closure callback): user data for @callback, or %NULL + * + * A convenience function that wraps creating the #VtePty and spawning + * the child process on it. Like vte_terminal_spawn_with_fds_async(), + * except that this function does not allow passing file descriptors to + * the child process. See vte_terminal_spawn_with_fds_async() for more + * information. + * * Since: 0.48 */ void @@ -2927,50 +4306,21 @@ vte_terminal_spawn_async(VteTerminal *terminal, const char *working_directory, char **argv, char **envv, - GSpawnFlags spawn_flags_, + GSpawnFlags spawn_flags, GSpawnChildSetupFunc child_setup, gpointer child_setup_data, GDestroyNotify child_setup_data_destroy, int timeout, GCancellable *cancellable, VteTerminalSpawnAsyncCallback callback, - gpointer user_data) + gpointer user_data) noexcept { - g_return_if_fail(VTE_IS_TERMINAL(terminal)); - g_return_if_fail(argv != nullptr); - g_return_if_fail(!child_setup_data || child_setup); - g_return_if_fail(!child_setup_data_destroy || child_setup_data); - g_return_if_fail(cancellable == nullptr || G_IS_CANCELLABLE (cancellable)); - - auto error = vte::glib::Error{}; - auto pty = vte_terminal_pty_new_sync(terminal, pty_flags, cancellable, error); - if (pty == nullptr) { - if (child_setup_data_destroy) - child_setup_data_destroy(child_setup_data); - - callback(terminal, -1, error, user_data); - return; - } - - guint spawn_flags = (guint)spawn_flags_; - - /* We do NOT support this flag. If you want to have some FD open in the child - * process, simply use a child setup function that unsets the CLOEXEC flag - * on that FD. - */ - g_warn_if_fail((spawn_flags & G_SPAWN_LEAVE_DESCRIPTORS_OPEN) == 0); - spawn_flags &= ~G_SPAWN_LEAVE_DESCRIPTORS_OPEN; - - vte_pty_spawn_async(pty, - working_directory, - argv, - envv, - GSpawnFlags(spawn_flags), - child_setup, child_setup_data, child_setup_data_destroy, - timeout, cancellable, - spawn_async_cb, - spawn_async_callback_data_new(terminal, callback, user_data)); - g_object_unref(pty); + vte_terminal_spawn_with_fds_async(terminal, pty_flags, working_directory, argv, envv, + nullptr, 0, nullptr, 0, + spawn_flags, + child_setup, child_setup_data, child_setup_data_destroy, + timeout, cancellable, + callback, user_data); } /** @@ -2984,7 +4334,8 @@ vte_terminal_spawn_async(VteTerminal *terminal, void vte_terminal_feed(VteTerminal *terminal, const char *data, - gssize length) + gssize length) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(length == 0 || data != NULL); @@ -2995,6 +4346,10 @@ vte_terminal_feed(VteTerminal *terminal, auto const len = size_t{length == -1 ? strlen(data) : size_t(length)}; WIDGET(terminal)->feed({data, len}); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_feed_child: @@ -3008,7 +4363,8 @@ vte_terminal_feed(VteTerminal *terminal, void vte_terminal_feed_child(VteTerminal *terminal, const char *text, - gssize length) + gssize length) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(length == 0 || text != NULL); @@ -3019,6 +4375,10 @@ vte_terminal_feed_child(VteTerminal *terminal, auto const len = size_t{length == -1 ? strlen(text) : size_t(length)}; WIDGET(terminal)->feed_child({text, len}); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_feed_child_binary: @@ -3034,7 +4394,8 @@ vte_terminal_feed_child(VteTerminal *terminal, void vte_terminal_feed_child_binary(VteTerminal *terminal, const guint8 *data, - gsize length) + gsize length) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(length == 0 || data != NULL); @@ -3044,6 +4405,10 @@ vte_terminal_feed_child_binary(VteTerminal *terminal, WIDGET(terminal)->feed_child_binary({(char*)data, length}); } +catch (...) +{ + vte::log_exception(); +} /** * VteSelectionFunc: @@ -3056,81 +4421,147 @@ vte_terminal_feed_child_binary(VteTerminal *terminal, * a cell has to be selected or not. * * Returns: %TRUE if cell has to be selected; %FALSE if otherwise. + * + * Deprecated: 0.76 */ static void -warn_if_callback(VteSelectionFunc func) +warn_if_callback(VteSelectionFunc func, + char const* caller = __builtin_FUNCTION()) noexcept { if (!func) return; -#ifndef VTE_DEBUG +#if !VTE_DEBUG static gboolean warned = FALSE; if (warned) return; warned = TRUE; #endif - g_warning ("VteSelectionFunc callback ignored.\n"); + g_warning ("%s: VteSelectionFunc callback ignored.\n", caller); +} + +/** + * VteCharAttributes: + * + * Deprecated: 0.68 + */ + +static void +warn_if_attributes(void* array, + char const* caller = __builtin_FUNCTION()) noexcept +{ + if (!array) + return; + +#if !VTE_DEBUG + static gboolean warned = FALSE; + if (warned) + return; + warned = TRUE; +#endif + g_warning ("%s: Passing a GArray to retrieve attributes is deprecated. In a future version, passing non-NULL as attributes array will make the function return NULL.\n", caller); +} + +/** + * vte_terminal_get_text_format: + * @terminal: a #VteTerminal + * @format: the #VteFormat to use + * + * Returns text from the visible part of the terminal in the specified format. + * + * This method is unaware of BiDi. The columns returned in @attributes are + * logical columns. + * + * Returns: (transfer full) (nullable): a newly allocated text string, or %NULL. + * + * Since: 0.76 + */ +char* +vte_terminal_get_text_format(VteTerminal* terminal, + VteFormat format) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr); + g_return_val_if_fail(check_enum_value(format), nullptr); + + VteCharAttrList attributes; + vte_char_attr_list_init(&attributes); + + auto const impl = IMPL(terminal); + auto text = vte::take_freeable(g_string_new(nullptr)); + + impl->get_text_displayed(text.get(), format == VTE_FORMAT_HTML ? &attributes : nullptr); + + if (format == VTE_FORMAT_HTML) + text = vte::take_freeable(impl->attributes_to_html(text.get(), &attributes)); + + vte_char_attr_list_clear(&attributes); + + return vte::glib::release_to_string(std::move(text)); +} +catch (...) +{ + vte::log_exception(); + return nullptr; } /** * vte_terminal_get_text: * @terminal: a #VteTerminal - * @is_selected: (scope call) (allow-none): a #VteSelectionFunc callback - * @user_data: (closure): user data to be passed to the callback - * @attributes: (out caller-allocates) (transfer full) (array) (element-type Vte.CharAttributes): location for storing text attributes + * @is_selected: (scope call) (nullable) (closure user_data): a #VteSelectionFunc callback. Deprecated: 0.44: Always pass %NULL here. + * @user_data: user data to be passed to the callback + * @attributes: (nullable) (optional) (out caller-allocates) (transfer full) (array) (element-type Vte.CharAttributes): location for storing text attributes. Deprecated: 0.68: Always pass %NULL here. * - * Extracts a view of the visible part of the terminal. If @is_selected is not - * %NULL, characters will only be read if @is_selected returns %TRUE after being - * passed the column and row, respectively. A #VteCharAttributes structure - * is added to @attributes for each byte added to the returned string detailing - * the character's position, colors, and other characteristics. + * Extracts a view of the visible part of the terminal. * * This method is unaware of BiDi. The columns returned in @attributes are * logical columns. * - * Returns: (transfer full): a newly allocated text string, or %NULL. + * Note: since 0.68, passing a non-%NULL @attributes parameter is deprecated. Starting with + * 0.72, passing a non-%NULL @attributes parameter will make this function itself return %NULL. + * Since 0.72, passing a non-%NULL @is_selected parameter will make this function itself return %NULL. + * + * Returns: (transfer full) (nullable): a newly allocated text string, or %NULL. + + * Deprecated: 0.76: Use vte_terminal_get_text_format() instead */ char * vte_terminal_get_text(VteTerminal *terminal, VteSelectionFunc is_selected, gpointer user_data, - GArray *attributes) + GArray *attributes) noexcept { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL); + g_return_val_if_fail(attributes == nullptr, nullptr); warn_if_callback(is_selected); - auto text = IMPL(terminal)->get_text_displayed(true /* wrap */, - attributes); - if (text == nullptr) - return nullptr; - return (char*)g_string_free(text, FALSE); + return vte_terminal_get_text_format(terminal, VTE_FORMAT_TEXT); } /** * vte_terminal_get_text_include_trailing_spaces: * @terminal: a #VteTerminal - * @is_selected: (scope call) (allow-none): a #VteSelectionFunc callback - * @user_data: (closure): user data to be passed to the callback - * @attributes: (out caller-allocates) (transfer full) (array) (element-type Vte.CharAttributes): location for storing text attributes + * @is_selected: (scope call) (nullable) (closure user_data): a #VteSelectionFunc callback. Deprecated: 0.44: Always pass %NULL here. + * @user_data: user data to be passed to the callback + * @attributes: (nullable) (optional) (out caller-allocates) (transfer full) (array) (element-type Vte.CharAttributes): location for storing text attributes. Deprecated: 0.68: Always pass %NULL here. * - * Extracts a view of the visible part of the terminal. If @is_selected is not - * %NULL, characters will only be read if @is_selected returns %TRUE after being - * passed the column and row, respectively. A #VteCharAttributes structure - * is added to @attributes for each byte added to the returned string detailing - * the character's position, colors, and other characteristics. + * Extracts a view of the visible part of the terminal. * * This method is unaware of BiDi. The columns returned in @attributes are * logical columns. * + * Note: since 0.68, passing a non-%NULL @array parameter is deprecated. Starting with + * 0.72, passing a non-%NULL @array parameter will make this function itself return %NULL. + * Since 0.72, passing a non-%NULL @is_selected parameter will make this function itself return %NULL. + * * Returns: (transfer full): a newly allocated text string, or %NULL. * - * Deprecated: 0.56: Use vte_terminal_get_text() instead. + * Deprecated: 0.56: Use vte_terminal_get_text_format() instead. */ char * vte_terminal_get_text_include_trailing_spaces(VteTerminal *terminal, VteSelectionFunc is_selected, gpointer user_data, - GArray *attributes) + GArray *attributes) noexcept { return vte_terminal_get_text(terminal, is_selected, user_data, attributes); } @@ -3142,23 +4573,27 @@ vte_terminal_get_text_include_trailing_spaces(VteTerminal *terminal, * @start_col: first column to search for data * @end_row: last row to search for data * @end_col: last column to search for data - * @is_selected: (scope call) (allow-none): a #VteSelectionFunc callback - * @user_data: (closure): user data to be passed to the callback - * @attributes: (out caller-allocates) (transfer full) (array) (element-type Vte.CharAttributes): location for storing text attributes + * @is_selected: (scope call) (nullable) (closure user_data): a #VteSelectionFunc callback. Deprecated: 0.44: Always pass %NULL here + * @user_data: user data to be passed to the callback + * @attributes: (nullable) (optional) (out caller-allocates) (transfer full) (array) (element-type Vte.CharAttributes): location for storing text attributes. Deprecated: 0.68: Always pass %NULL here. * - * Extracts a view of the visible part of the terminal. If @is_selected is not - * %NULL, characters will only be read if @is_selected returns %TRUE after being - * passed the column and row, respectively. A #VteCharAttributes structure - * is added to @attributes for each byte added to the returned string detailing - * the character's position, colors, and other characteristics. The + * Extracts a view of the visible part of the terminal. The * entire scrollback buffer is scanned, so it is possible to read the entire * contents of the buffer using this function. * * This method is unaware of BiDi. The columns passed in @start_col and @end_row, * and returned in @attributes are logical columns. * - * Returns: (transfer full): a newly allocated text string, or %NULL. - */ + * Since 0.68, passing a non-%NULL @array parameter is deprecated. + * Since 0.72, passing a non-%NULL @array parameter will make this function + * itself return %NULL. + * Since 0.72, passing a non-%NULL @is_selected function will make this function + * itself return %NULL. + * + * Returns: (transfer full) (nullable): a newly allocated text string, or %NULL. + * + * Deprecated: 0.76: Use vte_terminal_get_text_range_format() instead +*/ char * vte_terminal_get_text_range(VteTerminal *terminal, long start_row, @@ -3167,18 +4602,120 @@ vte_terminal_get_text_range(VteTerminal *terminal, long end_col, VteSelectionFunc is_selected, gpointer user_data, - GArray *attributes) + GArray *attributes) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL); warn_if_callback(is_selected); - auto text = IMPL(terminal)->get_text(start_row, start_col, - end_row, end_col, - false /* block */, - true /* wrap */, - attributes); - if (text == nullptr) + warn_if_attributes(attributes); + if (is_selected || attributes) return nullptr; - return (char*)g_string_free(text, FALSE); + + return vte_terminal_get_text_range_format(terminal, + VTE_FORMAT_TEXT, + start_row, + start_col, + end_row, + end_col, + nullptr); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +/* + * _vte_terminal_get_text_range_format_full: + * @terminal: a #VteTerminal + * @format: the #VteFormat to use + * @start_row: the first row of the range + * @start_col: the first column of the range + * @end_row: the last row of the range + * @end_col: the last column of the range + * @block_mode: + * @length: (optional) (out): a pointer to a #gsize to store the string length + * + * Returns the specified range of text in the specified format. + * + * Returns: (transfer full) (nullable): a newly allocated string, or %NULL. + */ +static char* +_vte_terminal_get_text_range_format_full(VteTerminal *terminal, + VteFormat format, + long start_row, + long start_col, + long end_row, + long end_col, + bool block_mode, + gsize* length) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr); + g_return_val_if_fail(check_enum_value(format), nullptr); + + if (length) + *length = 0; + + VteCharAttrList attributes; + vte_char_attr_list_init(&attributes); + + auto const impl = IMPL(terminal); + auto text = vte::take_freeable(g_string_new(nullptr)); + impl->get_text(start_row, + start_col, + end_row, + end_col, + block_mode, + false /* preserve_empty */, + text.get(), + format == VTE_FORMAT_HTML ? &attributes : nullptr); + + if (format == VTE_FORMAT_HTML) + text = vte::take_freeable(impl->attributes_to_html(text.get(), &attributes)); + + vte_char_attr_list_clear(&attributes); + + return vte::glib::release_to_string(std::move(text), length); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +/** + * vte_terminal_get_text_range_format: + * @terminal: a #VteTerminal + * @format: the #VteFormat to use + * @start_row: the first row of the range + * @start_col: the first column of the range + * @end_row: the last row of the range + * @end_col: the last column of the range + * @length: (optional) (out): a pointer to a #gsize to store the string length + * + * Returns the specified range of text in the specified format. + * + * Returns: (transfer full) (nullable): a newly allocated string, or %NULL. + * + * Since: 0.72 + */ +char* +vte_terminal_get_text_range_format(VteTerminal *terminal, + VteFormat format, + long start_row, + long start_col, + long end_row, + long end_col, + gsize* length) noexcept +{ + return _vte_terminal_get_text_range_format_full(terminal, + format, + start_row, + start_col, + end_row, + end_col, + false, // block + length); } /** @@ -3196,11 +4733,16 @@ vte_terminal_get_text_range(VteTerminal *terminal, void vte_terminal_reset(VteTerminal *terminal, gboolean clear_tabstops, - gboolean clear_history) + gboolean clear_history) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); IMPL(terminal)->reset(clear_tabstops, clear_history, true); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_set_size: @@ -3214,12 +4756,17 @@ vte_terminal_reset(VteTerminal *terminal, void vte_terminal_set_size(VteTerminal *terminal, long columns, - long rows) + long rows) noexcept +try { g_return_if_fail(columns >= 1); g_return_if_fail(rows >= 1); - IMPL(terminal)->set_size(columns, rows); + IMPL(terminal)->set_size(columns, rows, false); +} +catch (...) +{ + vte::log_exception(); } /** @@ -3233,11 +4780,17 @@ vte_terminal_set_size(VteTerminal *terminal, * Since: 0.52 */ VteTextBlinkMode -vte_terminal_get_text_blink_mode(VteTerminal *terminal) +vte_terminal_get_text_blink_mode(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), VTE_TEXT_BLINK_ALWAYS); return WIDGET(terminal)->text_blink_mode(); } +catch (...) +{ + vte::log_exception(); + return VTE_TEXT_BLINK_ALWAYS; +} /** * vte_terminal_set_text_blink_mode: @@ -3250,13 +4803,18 @@ vte_terminal_get_text_blink_mode(VteTerminal *terminal) */ void vte_terminal_set_text_blink_mode(VteTerminal *terminal, - VteTextBlinkMode text_blink_mode) + VteTextBlinkMode text_blink_mode) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); if (WIDGET(terminal)->set_text_blink_mode(text_blink_mode)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_TEXT_BLINK_MODE]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_allow_bold: @@ -3270,11 +4828,17 @@ vte_terminal_set_text_blink_mode(VteTerminal *terminal, * Deprecated: 0.60: There's probably no reason for this feature to exist. */ gboolean -vte_terminal_get_allow_bold(VteTerminal *terminal) +vte_terminal_get_allow_bold(VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return IMPL(terminal)->m_allow_bold; } +catch (...) +{ + vte::log_exception(); + return false; +} /** * vte_terminal_set_allow_bold: @@ -3288,13 +4852,18 @@ vte_terminal_get_allow_bold(VteTerminal *terminal) */ void vte_terminal_set_allow_bold(VteTerminal *terminal, - gboolean allow_bold) + gboolean allow_bold) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); if (IMPL(terminal)->set_allow_bold(allow_bold != FALSE)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_ALLOW_BOLD]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_allow_hyperlink: @@ -3307,11 +4876,17 @@ vte_terminal_set_allow_bold(VteTerminal *terminal, * Since: 0.50 */ gboolean -vte_terminal_get_allow_hyperlink(VteTerminal *terminal) +vte_terminal_get_allow_hyperlink(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); return IMPL(terminal)->m_allow_hyperlink; } +catch (...) +{ + vte::log_exception(); + return false; +} /** * vte_terminal_set_allow_hyperlink: @@ -3324,13 +4899,18 @@ vte_terminal_get_allow_hyperlink(VteTerminal *terminal) */ void vte_terminal_set_allow_hyperlink(VteTerminal *terminal, - gboolean allow_hyperlink) + gboolean allow_hyperlink) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); if (IMPL(terminal)->set_allow_hyperlink(allow_hyperlink != FALSE)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_ALLOW_HYPERLINK]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_audible_bell: @@ -3342,11 +4922,17 @@ vte_terminal_set_allow_hyperlink(VteTerminal *terminal, * Returns: %TRUE if audible bell is enabled, %FALSE if not */ gboolean -vte_terminal_get_audible_bell(VteTerminal *terminal) +vte_terminal_get_audible_bell(VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return IMPL(terminal)->m_audible_bell; } +catch (...) +{ + vte::log_exception(); + return false; +} /** * vte_terminal_set_audible_bell: @@ -3358,13 +4944,18 @@ vte_terminal_get_audible_bell(VteTerminal *terminal) */ void vte_terminal_set_audible_bell(VteTerminal *terminal, - gboolean is_audible) + gboolean is_audible) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); if (IMPL(terminal)->set_audible_bell(is_audible != FALSE)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_AUDIBLE_BELL]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_set_backspace_binding: @@ -3377,7 +4968,8 @@ vte_terminal_set_audible_bell(VteTerminal *terminal, */ void vte_terminal_set_backspace_binding(VteTerminal *terminal, - VteEraseBinding binding) + VteEraseBinding binding) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(binding >= VTE_ERASE_AUTO && binding <= VTE_ERASE_TTY); @@ -3385,6 +4977,10 @@ vte_terminal_set_backspace_binding(VteTerminal *terminal, if (WIDGET(terminal)->set_backspace_binding(binding)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_BACKSPACE_BINDING]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_bold_is_bright: @@ -3399,11 +4995,18 @@ vte_terminal_set_backspace_binding(VteTerminal *terminal, * Since: 0.52 */ gboolean -vte_terminal_get_bold_is_bright(VteTerminal *terminal) +vte_terminal_get_bold_is_bright(VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return IMPL(terminal)->m_bold_is_bright; } +catch (...) +{ + vte::log_exception(); + return false; +} + /** * vte_terminal_set_bold_is_bright: * @terminal: a #VteTerminal @@ -3417,13 +5020,18 @@ vte_terminal_get_bold_is_bright(VteTerminal *terminal) */ void vte_terminal_set_bold_is_bright(VteTerminal *terminal, - gboolean bold_is_bright) + gboolean bold_is_bright) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); if (IMPL(terminal)->set_bold_is_bright(bold_is_bright != FALSE)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_BOLD_IS_BRIGHT]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_char_height: @@ -3435,11 +5043,17 @@ vte_terminal_set_bold_is_bright(VteTerminal *terminal, * because the return value takes cell-height-scale into account. */ glong -vte_terminal_get_char_height(VteTerminal *terminal) +vte_terminal_get_char_height(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), -1); return IMPL(terminal)->get_cell_height(); } +catch (...) +{ + vte::log_exception(); + return -1; +} /** * vte_terminal_get_char_width: @@ -3451,11 +5065,17 @@ vte_terminal_get_char_height(VteTerminal *terminal) * because the return value takes cell-width-scale into account. */ glong -vte_terminal_get_char_width(VteTerminal *terminal) +vte_terminal_get_char_width(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), -1); return IMPL(terminal)->get_cell_width(); } +catch (...) +{ + vte::log_exception(); + return -1; +} /** * vte_terminal_get_cjk_ambiguous_width: @@ -3469,11 +5089,17 @@ vte_terminal_get_char_width(VteTerminal *terminal) * Returns: 1 if ambiguous-width characters are narrow, or 2 if they are wide */ int -vte_terminal_get_cjk_ambiguous_width(VteTerminal *terminal) +vte_terminal_get_cjk_ambiguous_width(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), 1); return IMPL(terminal)->m_utf8_ambiguous_width; } +catch (...) +{ + vte::log_exception(); + return 1; +} /** * vte_terminal_set_cjk_ambiguous_width: @@ -3486,7 +5112,8 @@ vte_terminal_get_cjk_ambiguous_width(VteTerminal *terminal) * itself.) */ void -vte_terminal_set_cjk_ambiguous_width(VteTerminal *terminal, int width) +vte_terminal_set_cjk_ambiguous_width(VteTerminal *terminal, int width) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(width == 1 || width == 2); @@ -3494,6 +5121,10 @@ vte_terminal_set_cjk_ambiguous_width(VteTerminal *terminal, int width) if (IMPL(terminal)->set_cjk_ambiguous_width(width)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_CJK_AMBIGUOUS_WIDTH]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_set_color_background: @@ -3506,7 +5137,8 @@ vte_terminal_set_cjk_ambiguous_width(VteTerminal *terminal, int width) */ void vte_terminal_set_color_background(VteTerminal *terminal, - const GdkRGBA *background) + const GdkRGBA *background) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(background != NULL); @@ -3516,6 +5148,10 @@ vte_terminal_set_color_background(VteTerminal *terminal, impl->set_color_background(vte::color::rgb(background)); impl->set_background_alpha(background->alpha); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_set_color_bold: @@ -3527,7 +5163,8 @@ vte_terminal_set_color_background(VteTerminal *terminal, */ void vte_terminal_set_color_bold(VteTerminal *terminal, - const GdkRGBA *bold) + const GdkRGBA *bold) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(bold == nullptr || valid_color(bold)); @@ -3538,6 +5175,10 @@ vte_terminal_set_color_bold(VteTerminal *terminal, else impl->reset_color_bold(); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_set_color_cursor: @@ -3550,7 +5191,8 @@ vte_terminal_set_color_bold(VteTerminal *terminal, */ void vte_terminal_set_color_cursor(VteTerminal *terminal, - const GdkRGBA *cursor_background) + const GdkRGBA *cursor_background) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(cursor_background == nullptr || valid_color(cursor_background)); @@ -3561,6 +5203,10 @@ vte_terminal_set_color_cursor(VteTerminal *terminal, else impl->reset_color_cursor_background(); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_set_color_cursor_foreground: @@ -3575,7 +5221,8 @@ vte_terminal_set_color_cursor(VteTerminal *terminal, */ void vte_terminal_set_color_cursor_foreground(VteTerminal *terminal, - const GdkRGBA *cursor_foreground) + const GdkRGBA *cursor_foreground) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(cursor_foreground == nullptr || valid_color(cursor_foreground)); @@ -3586,6 +5233,10 @@ vte_terminal_set_color_cursor_foreground(VteTerminal *terminal, else impl->reset_color_cursor_foreground(); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_set_color_foreground: @@ -3596,7 +5247,8 @@ vte_terminal_set_color_cursor_foreground(VteTerminal *terminal, */ void vte_terminal_set_color_foreground(VteTerminal *terminal, - const GdkRGBA *foreground) + const GdkRGBA *foreground) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(foreground != nullptr); @@ -3604,6 +5256,10 @@ vte_terminal_set_color_foreground(VteTerminal *terminal, IMPL(terminal)->set_color_foreground(vte::color::rgb(foreground)); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_set_color_highlight: @@ -3617,7 +5273,8 @@ vte_terminal_set_color_foreground(VteTerminal *terminal, */ void vte_terminal_set_color_highlight(VteTerminal *terminal, - const GdkRGBA *highlight_background) + const GdkRGBA *highlight_background) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(highlight_background == nullptr || valid_color(highlight_background)); @@ -3628,6 +5285,10 @@ vte_terminal_set_color_highlight(VteTerminal *terminal, else impl->reset_color_highlight_background(); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_set_color_highlight_foreground: @@ -3641,7 +5302,8 @@ vte_terminal_set_color_highlight(VteTerminal *terminal, */ void vte_terminal_set_color_highlight_foreground(VteTerminal *terminal, - const GdkRGBA *highlight_foreground) + const GdkRGBA *highlight_foreground) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(highlight_foreground == nullptr || valid_color(highlight_foreground)); @@ -3652,6 +5314,10 @@ vte_terminal_set_color_highlight_foreground(VteTerminal *terminal, else impl->reset_color_highlight_foreground(); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_set_colors: @@ -3676,7 +5342,8 @@ vte_terminal_set_colors(VteTerminal *terminal, const GdkRGBA *foreground, const GdkRGBA *background, const GdkRGBA *palette, - gsize palette_size) + gsize palette_size) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail((palette_size == 0) || @@ -3710,6 +5377,10 @@ vte_terminal_set_colors(VteTerminal *terminal, impl->set_background_alpha(background ? background->alpha : 1.0); g_free(pal); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_set_default_colors: @@ -3718,11 +5389,16 @@ vte_terminal_set_colors(VteTerminal *terminal, * Reset the terminal palette to reasonable compiled-in default color. */ void -vte_terminal_set_default_colors(VteTerminal *terminal) +vte_terminal_set_default_colors(VteTerminal *terminal) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); IMPL(terminal)->set_colors_default(); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_column_count: @@ -3731,11 +5407,17 @@ vte_terminal_set_default_colors(VteTerminal *terminal) * Returns: the number of columns */ glong -vte_terminal_get_column_count(VteTerminal *terminal) +vte_terminal_get_column_count(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), -1); return IMPL(terminal)->m_column_count; } +catch (...) +{ + vte::log_exception(); + return -1; +} /** * vte_terminal_get_current_directory_uri: @@ -3745,12 +5427,18 @@ vte_terminal_get_column_count(VteTerminal *terminal) * process running in the terminal, or %NULL */ const char * -vte_terminal_get_current_directory_uri(VteTerminal *terminal) +vte_terminal_get_current_directory_uri(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL); auto impl = IMPL(terminal); return impl->m_current_directory_uri.size() ? impl->m_current_directory_uri.data() : nullptr; } +catch (...) +{ + vte::log_exception(); + return nullptr; +} /** * vte_terminal_get_current_file_uri: @@ -3761,12 +5449,18 @@ vte_terminal_get_current_directory_uri(VteTerminal *terminal) * not set */ const char * -vte_terminal_get_current_file_uri(VteTerminal *terminal) +vte_terminal_get_current_file_uri(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL); auto impl = IMPL(terminal); return impl->m_current_file_uri.size() ? impl->m_current_file_uri.data() : nullptr; } +catch (...) +{ + vte::log_exception(); + return nullptr; +} /** * vte_terminal_get_cursor_blink_mode: @@ -3777,12 +5471,18 @@ vte_terminal_get_current_file_uri(VteTerminal *terminal) * Return value: cursor blink mode. */ VteCursorBlinkMode -vte_terminal_get_cursor_blink_mode(VteTerminal *terminal) +vte_terminal_get_cursor_blink_mode(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), VTE_CURSOR_BLINK_SYSTEM); return WIDGET(terminal)->cursor_blink_mode(); } +catch (...) +{ + vte::log_exception(); + return VTE_CURSOR_BLINK_SYSTEM; +} /** * vte_terminal_set_cursor_blink_mode: @@ -3794,7 +5494,8 @@ vte_terminal_get_cursor_blink_mode(VteTerminal *terminal) */ void vte_terminal_set_cursor_blink_mode(VteTerminal *terminal, - VteCursorBlinkMode mode) + VteCursorBlinkMode mode) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(mode >= VTE_CURSOR_BLINK_SYSTEM && mode <= VTE_CURSOR_BLINK_OFF); @@ -3802,6 +5503,10 @@ vte_terminal_set_cursor_blink_mode(VteTerminal *terminal, if (WIDGET(terminal)->set_cursor_blink_mode(mode)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_CURSOR_BLINK_MODE]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_cursor_shape: @@ -3812,12 +5517,18 @@ vte_terminal_set_cursor_blink_mode(VteTerminal *terminal, * Return value: cursor shape. */ VteCursorShape -vte_terminal_get_cursor_shape(VteTerminal *terminal) +vte_terminal_get_cursor_shape(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), VTE_CURSOR_SHAPE_BLOCK); return WIDGET(terminal)->cursor_shape(); } +catch (...) +{ + vte::log_exception(); + return VTE_CURSOR_SHAPE_BLOCK; +} /** * vte_terminal_set_cursor_shape: @@ -3827,7 +5538,9 @@ vte_terminal_get_cursor_shape(VteTerminal *terminal) * Sets the shape of the cursor drawn. */ void -vte_terminal_set_cursor_shape(VteTerminal *terminal, VteCursorShape shape) +vte_terminal_set_cursor_shape(VteTerminal *terminal, + VteCursorShape shape) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(shape >= VTE_CURSOR_SHAPE_BLOCK && shape <= VTE_CURSOR_SHAPE_UNDERLINE); @@ -3835,6 +5548,10 @@ vte_terminal_set_cursor_shape(VteTerminal *terminal, VteCursorShape shape) if (WIDGET(terminal)->set_cursor_shape(shape)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_CURSOR_SHAPE]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_set_delete_binding: @@ -3847,7 +5564,8 @@ vte_terminal_set_cursor_shape(VteTerminal *terminal, VteCursorShape shape) */ void vte_terminal_set_delete_binding(VteTerminal *terminal, - VteEraseBinding binding) + VteEraseBinding binding) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(binding >= VTE_ERASE_AUTO && binding <= VTE_ERASE_TTY); @@ -3855,6 +5573,10 @@ vte_terminal_set_delete_binding(VteTerminal *terminal, if (WIDGET(terminal)->set_delete_binding(binding)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_DELETE_BINDING]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_enable_bidi: @@ -3867,11 +5589,17 @@ vte_terminal_set_delete_binding(VteTerminal *terminal, * Since: 0.58 */ gboolean -vte_terminal_get_enable_bidi(VteTerminal *terminal) +vte_terminal_get_enable_bidi(VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return IMPL(terminal)->m_enable_bidi; } +catch (...) +{ + vte::log_exception(); + return false; +} /** * vte_terminal_set_enable_bidi: @@ -3884,13 +5612,18 @@ vte_terminal_get_enable_bidi(VteTerminal *terminal) */ void vte_terminal_set_enable_bidi(VteTerminal *terminal, - gboolean enable_bidi) + gboolean enable_bidi) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); if (IMPL(terminal)->set_enable_bidi(enable_bidi != FALSE)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_ENABLE_BIDI]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_enable_shaping: @@ -3903,11 +5636,17 @@ vte_terminal_set_enable_bidi(VteTerminal *terminal, * Since: 0.58 */ gboolean -vte_terminal_get_enable_shaping(VteTerminal *terminal) +vte_terminal_get_enable_shaping(VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return IMPL(terminal)->m_enable_shaping; } +catch (...) +{ + vte::log_exception(); + return false; +} /** * vte_terminal_set_enable_shaping: @@ -3920,13 +5659,18 @@ vte_terminal_get_enable_shaping(VteTerminal *terminal) */ void vte_terminal_set_enable_shaping(VteTerminal *terminal, - gboolean enable_shaping) + gboolean enable_shaping) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); if (IMPL(terminal)->set_enable_shaping(enable_shaping != FALSE)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_ENABLE_SHAPING]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_encoding: @@ -3940,11 +5684,17 @@ vte_terminal_set_enable_shaping(VteTerminal *terminal, * Deprecated: 0.54: Support for non-UTF-8 is deprecated. */ const char * -vte_terminal_get_encoding(VteTerminal *terminal) +vte_terminal_get_encoding(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL); return WIDGET(terminal)->encoding(); } +catch (...) +{ + vte::log_exception(); + return nullptr; +} /** * vte_terminal_set_encoding: @@ -3968,21 +5718,26 @@ vte_terminal_get_encoding(VteTerminal *terminal) gboolean vte_terminal_set_encoding(VteTerminal *terminal, const char *codeset, - GError **error) + GError **error) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); g_return_val_if_fail(error == NULL || *error == NULL, FALSE); - GObject *object = G_OBJECT(terminal); - g_object_freeze_notify(object); + auto const freezer = vte::glib::FreezeObjectNotify{terminal}; auto const rv = IMPL(terminal)->set_encoding(codeset, error); - if (rv) - g_object_notify_by_pspec(object, pspecs[PROP_ENCODING]); + if (rv) { + g_signal_emit(freezer.get(), signals[SIGNAL_ENCODING_CHANGED], 0); + g_object_notify_by_pspec(freezer.get(), pspecs[PROP_ENCODING]); + } - g_object_thaw_notify(object); return rv; } +catch (...) +{ + return vte::glib::set_error_from_exception(error); +} /** * vte_terminal_get_font: @@ -3997,12 +5752,18 @@ vte_terminal_set_encoding(VteTerminal *terminal, * terminal uses to render text at the default font scale of 1.0. */ const PangoFontDescription * -vte_terminal_get_font(VteTerminal *terminal) +vte_terminal_get_font(VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr); return IMPL(terminal)->unscaled_font_description(); } +catch (...) +{ + vte::log_exception(); + return nullptr; +} /** * vte_terminal_set_font: @@ -4017,13 +5778,69 @@ vte_terminal_get_font(VteTerminal *terminal) */ void vte_terminal_set_font(VteTerminal *terminal, - const PangoFontDescription *font_desc) + const PangoFontDescription* font_desc) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); - if (IMPL(terminal)->set_font_desc(font_desc)) + if (IMPL(terminal)->set_font_desc(vte::take_freeable(pango_font_description_copy(font_desc)))) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_FONT_DESC]); } +catch (...) +{ + vte::log_exception(); +} + +/** + * vte_terminal_get_font_options: + * @terminal: a #VteTerminal + * + * Returns: (nullable): the terminal's font options, or %NULL + * + * Since: 0.74 + */ +cairo_font_options_t const* +vte_terminal_get_font_options(VteTerminal *terminal) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr); + + return IMPL(terminal)->get_font_options(); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +/** + * vte_terminal_set_font_options: + * @terminal: a #VteTerminal + * @font_options: (nullable): the font options, or %NULL + * + * Sets the terminal's font options to @options. + * + * Note that on GTK4, the terminal by default uses font options + * with %CAIRO_HINT_METRICS_ON set; to override that, use this + * function to set a #cairo_font_options_t that has + * %CAIRO_HINT_METRICS_OFF set. + * + * Since: 0.74 + */ +void +vte_terminal_set_font_options(VteTerminal *terminal, + cairo_font_options_t const* font_options) noexcept +try +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); + + if (IMPL(terminal)->set_font_options(vte::take_freeable(font_options ? cairo_font_options_copy(font_options) : nullptr))) + g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_FONT_OPTIONS]); +} +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_font_scale: @@ -4032,12 +5849,18 @@ vte_terminal_set_font(VteTerminal *terminal, * Returns: the terminal's font scale */ gdouble -vte_terminal_get_font_scale(VteTerminal *terminal) +vte_terminal_get_font_scale(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), 1.); return IMPL(terminal)->m_font_scale; } +catch (...) +{ + vte::log_exception(); + return 1.; +} /** * vte_terminal_set_font_scale: @@ -4048,7 +5871,8 @@ vte_terminal_get_font_scale(VteTerminal *terminal) */ void vte_terminal_set_font_scale(VteTerminal *terminal, - double scale) + double scale) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); @@ -4056,6 +5880,10 @@ vte_terminal_set_font_scale(VteTerminal *terminal, if (IMPL(terminal)->set_font_scale(scale)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_FONT_SCALE]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_cell_height_scale: @@ -4066,12 +5894,18 @@ vte_terminal_set_font_scale(VteTerminal *terminal, * Since: 0.52 */ double -vte_terminal_get_cell_height_scale(VteTerminal *terminal) +vte_terminal_get_cell_height_scale(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), 1.); return IMPL(terminal)->m_cell_height_scale; } +catch (...) +{ + vte::log_exception(); + return 1.; +} /** * vte_terminal_set_cell_height_scale: @@ -4087,7 +5921,8 @@ vte_terminal_get_cell_height_scale(VteTerminal *terminal) */ void vte_terminal_set_cell_height_scale(VteTerminal *terminal, - double scale) + double scale) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); @@ -4095,6 +5930,10 @@ vte_terminal_set_cell_height_scale(VteTerminal *terminal, if (IMPL(terminal)->set_cell_height_scale(scale)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_CELL_HEIGHT_SCALE]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_cell_width_scale: @@ -4105,12 +5944,18 @@ vte_terminal_set_cell_height_scale(VteTerminal *terminal, * Since: 0.52 */ double -vte_terminal_get_cell_width_scale(VteTerminal *terminal) +vte_terminal_get_cell_width_scale(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), 1.); return IMPL(terminal)->m_cell_width_scale; } +catch (...) +{ + vte::log_exception(); + return 1.; +} /** * vte_terminal_set_cell_width_scale: @@ -4126,7 +5971,8 @@ vte_terminal_get_cell_width_scale(VteTerminal *terminal) */ void vte_terminal_set_cell_width_scale(VteTerminal *terminal, - double scale) + double scale) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); @@ -4134,6 +5980,12 @@ vte_terminal_set_cell_width_scale(VteTerminal *terminal, if (IMPL(terminal)->set_cell_width_scale(scale)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_CELL_WIDTH_SCALE]); } +catch (...) +{ + vte::log_exception(); +} + +#if VTE_GTK == 3 /* Just some arbitrary minimum values */ #define MIN_COLUMNS (16) @@ -4160,7 +6012,7 @@ void vte_terminal_get_geometry_hints(VteTerminal *terminal, GdkGeometry *hints, int min_rows, - int min_columns) + int min_columns) noexcept { GtkWidget *widget; GtkBorder padding; @@ -4209,7 +6061,7 @@ vte_terminal_get_geometry_hints(VteTerminal *terminal, */ void vte_terminal_set_geometry_hints_for_window(VteTerminal *terminal, - GtkWindow *window) + GtkWindow *window) noexcept { GdkGeometry hints; @@ -4225,6 +6077,8 @@ vte_terminal_set_geometry_hints_for_window(VteTerminal *terminal, GDK_HINT_BASE_SIZE)); } +#endif /* VTE_GTK == 3 */ + /** * vte_terminal_get_has_selection: * @terminal: a #VteTerminal @@ -4236,11 +6090,84 @@ vte_terminal_set_geometry_hints_for_window(VteTerminal *terminal, * Returns: %TRUE if part of the text in the terminal is selected. */ gboolean -vte_terminal_get_has_selection(VteTerminal *terminal) +vte_terminal_get_has_selection(VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return !IMPL(terminal)->m_selection_resolved.empty(); } +catch (...) +{ + vte::log_exception(); + return false; +} + +/** + * vte_terminal_get_text_selected: + * @terminal: a #VteTerminal + * @format: the #VteFormat to use + * + * Gets the currently selected text in the format specified by @format. + * Since 0.72, this function also supports %VTE_FORMAT_HTML format. + * + * Returns: (transfer full) (nullable): a newly allocated string containing the selected text, or %NULL if there is no selection or the format is not supported + * + * Since: 0.70 + */ +char* +vte_terminal_get_text_selected(VteTerminal* terminal, + VteFormat format) noexcept +try +{ + return vte_terminal_get_text_selected_full(terminal, + format, + nullptr); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +/** + * vte_terminal_get_text_selected_full: + * @terminal: a #VteTerminal + * @format: the #VteFormat to use + * @length: (optional) (out): a pointer to a #gsize to store the string length + * + * Gets the currently selected text in the format specified by @format. + * + * Returns: (transfer full) (nullable): a newly allocated string containing the selected text, or %NULL if there is no selection or the format is not supported + * + * Since: 0.72 + */ +char* +vte_terminal_get_text_selected_full(VteTerminal* terminal, + VteFormat format, + gsize* length) noexcept +try +{ + if (length) + *length = 0; + + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr); + + auto const impl = IMPL(terminal); + auto const selection = impl->m_selection_resolved; + return _vte_terminal_get_text_range_format_full(terminal, + format, + selection.start_row(), + selection.start_column(), + selection.end_row(), + selection.end_column(), + impl->m_selection_block_mode, + length); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} /** * vte_terminal_get_icon_title: @@ -4251,7 +6178,7 @@ vte_terminal_get_has_selection(VteTerminal *terminal) * Deprecated: 0.54: */ const char * -vte_terminal_get_icon_title(VteTerminal *terminal) +vte_terminal_get_icon_title(VteTerminal *terminal) noexcept { return nullptr; } @@ -4263,12 +6190,18 @@ vte_terminal_get_icon_title(VteTerminal *terminal) * Returns whether the terminal allow user input. */ gboolean -vte_terminal_get_input_enabled (VteTerminal *terminal) +vte_terminal_get_input_enabled (VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return IMPL(terminal)->m_input_enabled; } +catch (...) +{ + vte::log_exception(); + return false; +} /** * vte_terminal_set_input_enabled: @@ -4281,13 +6214,18 @@ vte_terminal_get_input_enabled (VteTerminal *terminal) */ void vte_terminal_set_input_enabled (VteTerminal *terminal, - gboolean enabled) + gboolean enabled) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); if (IMPL(terminal)->set_input_enabled(enabled != FALSE)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_INPUT_ENABLED]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_mouse_autohide: @@ -4301,11 +6239,17 @@ vte_terminal_set_input_enabled (VteTerminal *terminal, * Returns: %TRUE if autohiding is enabled, %FALSE if not */ gboolean -vte_terminal_get_mouse_autohide(VteTerminal *terminal) +vte_terminal_get_mouse_autohide(VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return IMPL(terminal)->m_mouse_autohide; } +catch (...) +{ + vte::log_exception(); + return false; +} /** * vte_terminal_set_mouse_autohide: @@ -4318,13 +6262,19 @@ vte_terminal_get_mouse_autohide(VteTerminal *terminal) * vte_terminal_get_mouse_autohide(). */ void -vte_terminal_set_mouse_autohide(VteTerminal *terminal, gboolean setting) +vte_terminal_set_mouse_autohide(VteTerminal *terminal, + gboolean setting) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); if (IMPL(terminal)->set_mouse_autohide(setting != FALSE)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_MOUSE_POINTER_AUTOHIDE]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_set_pty: @@ -4336,18 +6286,20 @@ vte_terminal_set_mouse_autohide(VteTerminal *terminal, gboolean setting) */ void vte_terminal_set_pty(VteTerminal *terminal, - VtePty *pty) + VtePty *pty) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(pty == NULL || VTE_IS_PTY(pty)); - GObject *object = G_OBJECT(terminal); - g_object_freeze_notify(object); + auto const freezer = vte::glib::FreezeObjectNotify{terminal}; if (WIDGET(terminal)->set_pty(pty)) - g_object_notify_by_pspec(object, pspecs[PROP_PTY]); - - g_object_thaw_notify(object); + g_object_notify_by_pspec(freezer.get(), pspecs[PROP_PTY]); +} +catch (...) +{ + vte::log_exception(); } /** @@ -4359,12 +6311,17 @@ vte_terminal_set_pty(VteTerminal *terminal, * Returns: (transfer none): a #VtePty, or %NULL */ VtePty * -vte_terminal_get_pty(VteTerminal *terminal) +vte_terminal_get_pty(VteTerminal *terminal) noexcept +try { - g_return_val_if_fail (VTE_IS_TERMINAL (terminal), NULL); - + g_return_val_if_fail (VTE_IS_TERMINAL (terminal), nullptr); return WIDGET(terminal)->pty(); } +catch (...) +{ + vte::log_exception(); + return nullptr; +} /** * vte_terminal_get_rewrap_on_resize: @@ -4377,11 +6334,17 @@ vte_terminal_get_pty(VteTerminal *terminal) * Deprecated: 0.58 */ gboolean -vte_terminal_get_rewrap_on_resize(VteTerminal *terminal) +vte_terminal_get_rewrap_on_resize(VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return IMPL(terminal)->m_rewrap_on_resize; } +catch (...) +{ + vte::log_exception(); + return false; +} /** * vte_terminal_set_rewrap_on_resize: @@ -4395,13 +6358,18 @@ vte_terminal_get_rewrap_on_resize(VteTerminal *terminal) */ void vte_terminal_set_rewrap_on_resize(VteTerminal *terminal, - gboolean rewrap) + gboolean rewrap) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); if (IMPL(terminal)->set_rewrap_on_resize(rewrap != FALSE)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_REWRAP_ON_RESIZE]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_row_count: @@ -4411,11 +6379,17 @@ vte_terminal_set_rewrap_on_resize(VteTerminal *terminal, * Returns: the number of rows */ glong -vte_terminal_get_row_count(VteTerminal *terminal) +vte_terminal_get_row_count(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), -1); return IMPL(terminal)->m_row_count; } +catch (...) +{ + vte::log_exception(); + return -1; +} /** * vte_terminal_set_scrollback_lines: @@ -4429,22 +6403,28 @@ vte_terminal_get_row_count(VteTerminal *terminal) * * A negative value means "infinite scrollback". * + * Using a large scrollback buffer (roughly 1M+ lines) may lead to performance + * degradation or exhaustion of system resources, and is therefore not recommended. + * * Note that this setting only affects the normal screen buffer. * No scrollback is allowed on the alternate screen buffer. */ void -vte_terminal_set_scrollback_lines(VteTerminal *terminal, glong lines) +vte_terminal_set_scrollback_lines(VteTerminal *terminal, + glong lines) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(lines >= -1); - GObject *object = G_OBJECT(terminal); - g_object_freeze_notify(object); + auto const freezer = vte::glib::FreezeObjectNotify{terminal}; if (IMPL(terminal)->set_scrollback_lines(lines)) - g_object_notify_by_pspec(object, pspecs[PROP_SCROLLBACK_LINES]); - - g_object_thaw_notify(object); + g_object_notify_by_pspec(freezer.get(), pspecs[PROP_SCROLLBACK_LINES]); +} +catch (...) +{ + vte::log_exception(); } /** @@ -4457,11 +6437,65 @@ vte_terminal_set_scrollback_lines(VteTerminal *terminal, glong lines) * Since: 0.52 */ glong -vte_terminal_get_scrollback_lines(VteTerminal *terminal) +vte_terminal_get_scrollback_lines(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), 0); return IMPL(terminal)->m_scrollback_lines; } +catch (...) +{ + vte::log_exception(); + return 0; +} + +/** + * vte_terminal_set_scroll_on_insert: + * @terminal: a #VteTerminal + * @scroll: whether the terminal should scroll on insert + * + * Controls whether or not the terminal will forcibly scroll to the bottom of + * the viewable history when text is inserted, e.g. by a paste. + * + * Since: 0.76 + */ +void +vte_terminal_set_scroll_on_insert(VteTerminal *terminal, + gboolean scroll) noexcept +try +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); + + if (IMPL(terminal)->set_scroll_on_insert(scroll != false)) + g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_SCROLL_ON_INSERT]); +} +catch (...) +{ + vte::log_exception(); +} + +/** + * vte_terminal_get_scroll_on_insert: + * @terminal: a #VteTerminal + * + * Returns: whether or not the terminal will forcibly scroll to the bottom of + * the viewable history when the new data is received from the child. + * + * Since: 0.76 + */ +gboolean +vte_terminal_get_scroll_on_insert(VteTerminal *terminal) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); + return IMPL(terminal)->m_scroll_on_insert; +} +catch (...) +{ + vte::log_exception(); + return false; +} + /** * vte_terminal_set_scroll_on_keystroke: @@ -4471,15 +6505,22 @@ vte_terminal_get_scrollback_lines(VteTerminal *terminal) * Controls whether or not the terminal will forcibly scroll to the bottom of * the viewable history when the user presses a key. Modifier keys do not * trigger this behavior. + * + * Since: 0.52 */ void vte_terminal_set_scroll_on_keystroke(VteTerminal *terminal, - gboolean scroll) + gboolean scroll) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); if (IMPL(terminal)->set_scroll_on_keystroke(scroll != FALSE)) - g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_SCROLL_ON_OUTPUT]); + g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_SCROLL_ON_KEYSTROKE]); +} +catch (...) +{ + vte::log_exception(); } /** @@ -4493,11 +6534,17 @@ vte_terminal_set_scroll_on_keystroke(VteTerminal *terminal, * Since: 0.52 */ gboolean -vte_terminal_get_scroll_on_keystroke(VteTerminal *terminal) +vte_terminal_get_scroll_on_keystroke(VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return IMPL(terminal)->m_scroll_on_keystroke; } +catch (...) +{ + vte::log_exception(); + return false; +} /** * vte_terminal_set_scroll_on_output: @@ -4506,16 +6553,23 @@ vte_terminal_get_scroll_on_keystroke(VteTerminal *terminal) * * Controls whether or not the terminal will forcibly scroll to the bottom of * the viewable history when the new data is received from the child. + * + * Since: 0.52 */ void vte_terminal_set_scroll_on_output(VteTerminal *terminal, - gboolean scroll) + gboolean scroll) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); if (IMPL(terminal)->set_scroll_on_output(scroll != FALSE)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_SCROLL_ON_OUTPUT]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_scroll_on_output: @@ -4527,11 +6581,115 @@ vte_terminal_set_scroll_on_output(VteTerminal *terminal, * Since: 0.52 */ gboolean -vte_terminal_get_scroll_on_output(VteTerminal *terminal) +vte_terminal_get_scroll_on_output(VteTerminal *terminal) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); return IMPL(terminal)->m_scroll_on_output; } +catch (...) +{ + vte::log_exception(); + return false; +} + +/** + * vte_terminal_set_enable_fallback_scrolling: + * @terminal: a #VteTerminal + * @enable: whether to enable fallback scrolling + * + * Controls whether the terminal uses scroll events to scroll the history + * if the event was not otherwise consumed by it. + * + * This function is rarely useful, except when the terminal is added to a + * #GtkScrolledWindow, to perform kinetic scrolling (while vte itself does + * not, yet, implement kinetic scrolling by itself). + * + * Since: 0.64 + */ +void +vte_terminal_set_enable_fallback_scrolling(VteTerminal *terminal, + gboolean enable) noexcept +try +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); + + if (WIDGET(terminal)->set_fallback_scrolling(enable != false)) + g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_ENABLE_FALLBACK_SCROLLING]); +} +catch (...) +{ + vte::log_exception(); +} + +/** + * vte_terminal_get_enable_fallback_scrolling: + * @terminal: a #VteTerminal + * + * Returns: %TRUE if fallback scrolling is enabled + * + * Since: 0.64 + */ +gboolean +vte_terminal_get_enable_fallback_scrolling(VteTerminal *terminal) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); + return WIDGET(terminal)->fallback_scrolling(); +} +catch (...) +{ + vte::log_exception(); + return true; +} + +/** + * vte_terminal_set_scroll_unit_is_pixels: + * @terminal: a #VteTerminal + * @enable: whether to use pixels as scroll unit + * + * Controls whether the terminal's scroll unit is lines or pixels. + * + * This function is rarely useful, except when the terminal is added to a + * #GtkScrolledWindow. + * + * Since: 0.66 + */ +void +vte_terminal_set_scroll_unit_is_pixels(VteTerminal *terminal, + gboolean enable) noexcept +try +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); + + if (WIDGET(terminal)->set_scroll_unit_is_pixels(enable != false)) + g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_SCROLL_UNIT_IS_PIXELS]); +} +catch (...) +{ + vte::log_exception(); +} + +/** + * vte_terminal_get_scroll_unit_is_pixels: + * @terminal: a #VteTerminal + * + * Returns: %TRUE if the scroll unit is pixels; or %FALSE if the unit is lines + * + * Since: 0.66 + */ +gboolean +vte_terminal_get_scroll_unit_is_pixels(VteTerminal *terminal) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); + return WIDGET(terminal)->scroll_unit_is_pixels(); +} +catch (...) +{ + vte::log_exception(); + return false; +} /** * vte_terminal_get_window_title: @@ -4540,11 +6698,17 @@ vte_terminal_get_scroll_on_output(VteTerminal *terminal) * Returns: (nullable) (transfer none): the window title, or %NULL */ const char * -vte_terminal_get_window_title(VteTerminal *terminal) +vte_terminal_get_window_title(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr); return IMPL(terminal)->m_window_title.data(); } +catch (...) +{ + vte::log_exception(); + return nullptr; +} /** * vte_terminal_get_word_char_exceptions: @@ -4561,12 +6725,18 @@ vte_terminal_get_window_title(VteTerminal *terminal) * Since: 0.40 */ const char * -vte_terminal_get_word_char_exceptions(VteTerminal *terminal) +vte_terminal_get_word_char_exceptions(VteTerminal *terminal) noexcept +try { g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL); return WIDGET(terminal)->word_char_exceptions(); } +catch (...) +{ + vte::log_exception(); + return nullptr; +} /** * vte_terminal_set_word_char_exceptions: @@ -4588,7 +6758,8 @@ vte_terminal_get_word_char_exceptions(VteTerminal *terminal) */ void vte_terminal_set_word_char_exceptions(VteTerminal *terminal, - const char *exceptions) + const char *exceptions) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); @@ -4596,6 +6767,10 @@ vte_terminal_set_word_char_exceptions(VteTerminal *terminal, if (WIDGET(terminal)->set_word_char_exceptions(stropt)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_WORD_CHAR_EXCEPTIONS]); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_write_contents_sync: @@ -4623,18 +6798,23 @@ vte_terminal_write_contents_sync (VteTerminal *terminal, GOutputStream *stream, VteWriteFlags flags, GCancellable *cancellable, - GError **error) + GError **error) noexcept +try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), FALSE); - g_return_val_if_fail(G_IS_OUTPUT_STREAM(stream), FALSE); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), false); + g_return_val_if_fail(G_IS_OUTPUT_STREAM(stream), false); return IMPL(terminal)->write_contents_sync(stream, flags, cancellable, error); } +catch (...) +{ + return vte::glib::set_error_from_exception(error); +} /** * vte_terminal_set_clear_background: * @terminal: a #VteTerminal - * @setting: + * @setting: whether to clear the background * * Sets whether to paint the background with the background colour. * The default is %TRUE. @@ -4646,17 +6826,22 @@ vte_terminal_write_contents_sync (VteTerminal *terminal, */ void vte_terminal_set_clear_background(VteTerminal* terminal, - gboolean setting) + gboolean setting) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); IMPL(terminal)->set_clear_background(setting != FALSE); } +catch (...) +{ + vte::log_exception(); +} /** * vte_terminal_get_color_background_for_draw: * @terminal: a #VteTerminal - * @color: (out): a location to store a #GdbRGBA color + * @color: (out): a location to store a #GdkRGBA color * * Returns the background colour, as used by @terminal when * drawing the background, which may be different from @@ -4673,7 +6858,8 @@ vte_terminal_set_clear_background(VteTerminal* terminal, */ void vte_terminal_get_color_background_for_draw(VteTerminal* terminal, - GdkRGBA* color) + GdkRGBA* color) noexcept +try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); g_return_if_fail(color != nullptr); @@ -4685,3 +6871,433 @@ vte_terminal_get_color_background_for_draw(VteTerminal* terminal, color->blue = c->blue / 65535.; color->alpha = impl->m_background_alpha; } +catch (...) +{ + vte::log_exception(); + *color = {0., 0., 0., 1.}; +} + +/** + * vte_terminal_set_enable_sixel: + * @terminal: a #VteTerminal + * @enabled: whether to enable SIXEL images + * + * Set whether to enable SIXEL images. + * + * Since: 0.62 + */ +void +vte_terminal_set_enable_sixel(VteTerminal *terminal, + gboolean enabled) noexcept +try +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); +} +catch (...) +{ + vte::log_exception(); +} + +/** + * vte_terminal_get_enable_sixel: + * @terminal: a #VteTerminal + * + * Returns: %FALSE + * + * Since: 0.62 + */ +gboolean +vte_terminal_get_enable_sixel(VteTerminal *terminal) noexcept +try +{ + return false; +} +catch (...) +{ + vte::log_exception(); + return false; +} + +template<> +constexpr bool check_enum_value(VteAlign value) noexcept +{ + switch (value) { + case VTE_ALIGN_START: + case VTE_ALIGN_CENTER: + case VTE_ALIGN_END: + return true; + default: + return false; + } +} + +/** + * vte_terminal_set_xalign: + * @terminal: a #VteTerminal + * @align: alignment value from #VteAlign + * + * Sets the horizontal alignment of @terminal within its allocation. + * + * Note: %VTE_ALIGN_START_FILL is not supported, and will be treated + * like %VTE_ALIGN_START. + * + * Since: 0.76 + */ +void +vte_terminal_set_xalign(VteTerminal* terminal, + VteAlign align) noexcept +try +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); + g_return_if_fail(check_enum_value(align)); + + if (WIDGET(terminal)->set_xalign(align)) + g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_XALIGN]); +} +catch (...) +{ + vte::log_exception(); +} + +/** + * vte_terminal_get_xalign: + * @terminal: a #VteTerminal + * + * Returns: the horizontal alignment of @terminal within its allocation + * + * Since: 0.76 + */ +VteAlign +vte_terminal_get_xalign(VteTerminal* terminal) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), VTE_ALIGN_START); + + return WIDGET(terminal)->xalign(); +} +catch (...) +{ + vte::log_exception(); + return VTE_ALIGN_START; +} + +/** + * vte_terminal_set_yalign: + * @terminal: a #VteTerminal + * @align: alignment value from #VteAlign + * + * Sets the vertical alignment of @terminal within its allocation. + * + * Since: 0.76 + */ +void +vte_terminal_set_yalign(VteTerminal* terminal, + VteAlign align) noexcept +try +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); + g_return_if_fail(check_enum_value(align)); + + if (WIDGET(terminal)->set_yalign(align)) + g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_YALIGN]); +} +catch (...) +{ + vte::log_exception(); +} + +/** + * vte_terminal_get_yalign: + * @terminal: a #VteTerminal + * + * Returns: the vertical alignment of @terminal within its allocation + * + * Since: 0.76 + */ +VteAlign +vte_terminal_get_yalign(VteTerminal* terminal) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), VTE_ALIGN_START); + + return WIDGET(terminal)->yalign(); +} +catch (...) +{ + vte::log_exception(); + return VTE_ALIGN_START; +} + +/** + * vte_terminal_set_xfill: + * @terminal: a #VteTerminal + * @fill: fillment value from #VteFill + * + * Sets the horizontal fillment of @terminal within its allocation. + * + * Note: %VTE_FILL_START_FILL is not supported, and will be treated + * like %VTE_FILL_START. + * + * Since: 0.76 + */ +void +vte_terminal_set_xfill(VteTerminal* terminal, + gboolean fill) noexcept +try +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); + + if (WIDGET(terminal)->set_xfill(fill != false)) + g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_XFILL]); +} +catch (...) +{ + vte::log_exception(); +} + +/** + * vte_terminal_get_xfill: + * @terminal: a #VteTerminal + * + * Returns: the horizontal fillment of @terminal within its allocation + * + * Since: 0.76 + */ +gboolean +vte_terminal_get_xfill(VteTerminal* terminal) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), true); + + return WIDGET(terminal)->xfill(); +} +catch (...) +{ + vte::log_exception(); + return true; +} + +/** + * vte_terminal_set_yfill: + * @terminal: a #VteTerminal + * @fill: fillment value from #VteFill + * + * Sets the vertical fillment of @terminal within its allocation. + * Note that yfill is only supported with yalign set to + * %VTE_ALIGN_START, and is ignored for all other yalign values. + * + * Since: 0.76 + */ +void +vte_terminal_set_yfill(VteTerminal* terminal, + gboolean fill) noexcept +try +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); + + if (WIDGET(terminal)->set_yfill(fill != false)) + g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_YFILL]); +} +catch (...) +{ + vte::log_exception(); +} + +/** + * vte_terminal_get_yfill: + * @terminal: a #VteTerminal + * + * Returns: the vertical fillment of @terminal within its allocation + * + * Since: 0.76 + */ +gboolean +vte_terminal_get_yfill(VteTerminal* terminal) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), true); + + return WIDGET(terminal)->yfill(); +} +catch (...) +{ + vte::log_exception(); + return true; +} + +/** + * vte_terminal_set_context_menu_model: (attributes org.gtk.Method.set_property=context-menu-model) + * @terminal: a #VteTerminal + * @model: (nullable): a #GMenuModel + * + * Sets @model as the context menu model in @terminal. + * Use %NULL to unset the current menu model. + * + * Since: 0.76 + */ +void +vte_terminal_set_context_menu_model(VteTerminal* terminal, + GMenuModel* model) noexcept +try +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); + g_return_if_fail(model == nullptr || G_IS_MENU_MODEL(model)); + + if (WIDGET(terminal)->set_context_menu_model(vte::glib::make_ref(model))) + g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_CONTEXT_MENU_MODEL]); +} +catch (...) +{ + vte::log_exception(); +} + +/** + * vte_terminal_get_context_menu_model: (attributes org.gtk.Method.get_property=context-menu-model) + * @terminal: a #VteTerminal + * + * Returns: (nullable) (transfer none): the context menu model, or %NULL + * + * Since: 0.76 + */ +GMenuModel* +vte_terminal_get_context_menu_model(VteTerminal* terminal) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr); + + return WIDGET(terminal)->get_context_menu_model(); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +/** + * vte_terminal_set_context_menu: (attributes org.gtk.Method.set_property=context-menu) + * @terminal: a #VteTerminal + * @menu: (nullable): a menu + * + * Sets @menu as the context menu in @terminal. + * Use %NULL to unset the current menu. + * + * Note that a menu model set with vte_terminal_set_context_menu_model() + * takes precedence over a menu set using this function. + * + * Since: 0.76 + */ +void +vte_terminal_set_context_menu(VteTerminal* terminal, + GtkWidget* menu) noexcept +try +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); +#if VTE_GTK == 3 + g_return_if_fail(menu == nullptr || GTK_IS_MENU(menu)); +#elif VTE_GTK == 4 + g_return_if_fail(menu == nullptr || GTK_IS_POPOVER(menu)); +#endif // VTE_GTK + + if (WIDGET(terminal)->set_context_menu(vte::glib::make_ref_sink(menu))) + g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_CONTEXT_MENU]); +} +catch (...) +{ + vte::log_exception(); +} + +/** + * vte_terminal_get_context_menu: (attributes org.gtk.Method.get_property=context-menu) + * @terminal: a #VteTerminal + * + * Returns: (nullable) (transfer none): the context menu, or %NULL + * + * Since: 0.76 + */ +GtkWidget* +vte_terminal_get_context_menu(VteTerminal* terminal) noexcept +try +{ + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr); + + return WIDGET(terminal)->get_context_menu(); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +/** + * VteEventContext: + * + * Provides context information for a context menu event. + * + * Since: 0.76 + */ + +G_DEFINE_POINTER_TYPE(VteEventContext, vte_event_context); + +static auto get_event_context(VteEventContext const* context) +{ + return reinterpret_cast(context); +} + +#define EVENT_CONTEXT_IMPL(context) (get_event_context(context)) + +#if VTE_GTK == 3 + +/** + * vte_event_context_get_event: + * @context: the #VteEventContext + * + * Returns: (transfer none): the #GdkEvent that triggered the event, or %NULL if it was not + * triggered by an event + * + * Since: 0.76 + */ +GdkEvent* +vte_event_context_get_event(VteEventContext const* context) noexcept +try +{ + g_return_val_if_fail(context, nullptr); + + return EVENT_CONTEXT_IMPL(context)->platform_event(); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} + +#elif VTE_GTK == 4 + +/** + * vte_event_context_get_coordinates: + * @context: the #VteEventContext + * @x: (nullable): location to store the X coordinate + * @y: (nullable): location to store the Y coordinate + * + * Returns: %TRUE if the event has coordinates attached + * that are within the terminal, with @x and @y filled in; + * %FALSE otherwise + * + * Since: 0.76 + */ +gboolean +vte_event_context_get_coordinates(VteEventContext const* context, + double* x, + double* y) noexcept +try +{ + g_return_val_if_fail(context, false); + + return EVENT_CONTEXT_IMPL(context)->get_coords(x, y); +} +catch (...) +{ + vte::log_exception(); + return false; +} + +#endif /* VTE_GTK */ diff --git a/src/vtegtk.hh b/src/vtegtk.hh index ae9fb08..1d1383a 100644 --- a/src/vtegtk.hh +++ b/src/vtegtk.hh @@ -2,18 +2,18 @@ * Copyright (C) 2001-2004,2009,2010 Red Hat, Inc. * Copyright © 2008, 2009, 2010, 2015 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ /** @@ -52,10 +52,7 @@ enum { SIGNAL_RESIZE_WINDOW, SIGNAL_RESTORE_WINDOW, SIGNAL_SELECTION_CHANGED, - SIGNAL_TEXT_DELETED, - SIGNAL_TEXT_INSERTED, - SIGNAL_TEXT_MODIFIED, - SIGNAL_TEXT_SCROLLED, + SIGNAL_SETUP_CONTEXT_MENU, SIGNAL_WINDOW_TITLE_CHANGED, LAST_SIGNAL }; @@ -71,15 +68,20 @@ enum { PROP_CELL_HEIGHT_SCALE, PROP_CELL_WIDTH_SCALE, PROP_CJK_AMBIGUOUS_WIDTH, + PROP_CONTEXT_MENU_MODEL, + PROP_CONTEXT_MENU, PROP_CURSOR_BLINK_MODE, PROP_CURSOR_SHAPE, PROP_CURRENT_DIRECTORY_URI, PROP_CURRENT_FILE_URI, PROP_DELETE_BINDING, PROP_ENABLE_BIDI, + PROP_ENABLE_FALLBACK_SCROLLING, PROP_ENABLE_SHAPING, + PROP_ENABLE_SIXEL, PROP_ENCODING, PROP_FONT_DESC, + PROP_FONT_OPTIONS, PROP_FONT_SCALE, PROP_HYPERLINK_HOVER_URI, PROP_ICON_TITLE, @@ -88,11 +90,17 @@ enum { PROP_PTY, PROP_REWRAP_ON_RESIZE, PROP_SCROLLBACK_LINES, + PROP_SCROLL_ON_INSERT, PROP_SCROLL_ON_KEYSTROKE, PROP_SCROLL_ON_OUTPUT, + PROP_SCROLL_UNIT_IS_PIXELS, PROP_TEXT_BLINK_MODE, PROP_WINDOW_TITLE, PROP_WORD_CHAR_EXCEPTIONS, + PROP_XALIGN, + PROP_YALIGN, + PROP_XFILL, + PROP_YFILL, LAST_PROP, /* override properties */ diff --git a/src/vteinternal.hh b/src/vteinternal.hh index 93e9052..ed57ad1 100644 --- a/src/vteinternal.hh +++ b/src/vteinternal.hh @@ -1,46 +1,47 @@ /* * Copyright (C) 2001-2004 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once /* BEGIN sanity checks */ -/* Some distributions pass -fexceptions in a way that overrides vte's - * own -fno-exceptions. This is a hard error; fail the build. - * See https://gitlab.gnome.org/GNOME/gnome-build-meta/issues/207 - */ -#ifdef __EXCEPTIONS -#error You MUST NOT use -fexceptions to build vte! Fix your build; and DO NOT file a bug upstream! +#ifndef __EXCEPTIONS +#error You MUST NOT use -fno-exceptions to build vte! Fix your build; and DO NOT file a bug upstream! #endif -/* While we're at it, check -fno-rtti too */ -#ifdef __GXX_RTTI -#error You MUST NOT use -frtti to build vte! Fix your build system; and DO NOT file a bug upstream! +#ifndef __GXX_RTTI +#error You MUST NOT use -fno-rtti to build vte! Fix your build system; and DO NOT file a bug upstream! #endif /* END sanity checks */ #include #include "glib-glue.hh" +#include "pango-glue.hh" +#include "debug.h" +#include "clipboard-gtk.hh" +#if VTE_GTK == 3 +# include "drawing-cairo.hh" +#elif VTE_GTK == 4 +# include "drawing-gsk.hh" +#endif #include "vtedefines.hh" #include "vtetypes.hh" -#include "vtedraw.hh" #include "reaper.hh" #include "ring.hh" #include "ringview.hh" @@ -50,8 +51,9 @@ #include "modes.hh" #include "tabstops.hh" #include "refptr.hh" +#include "fwd.hh" -#include "vtepcre2.h" +#include "pcre2-glue.hh" #include "vteregexinternal.hh" #include "chunk.hh" @@ -65,7 +67,22 @@ #include #include -#ifdef WITH_ICU +#define GDK_ARRAY_NAME vte_char_attr_list +#define GDK_ARRAY_TYPE_NAME VteCharAttrList +#define GDK_ARRAY_ELEMENT_TYPE VteCharAttributes +#define GDK_ARRAY_BY_VALUE 1 +#define GDK_ARRAY_PREALLOC 32 +#define GDK_ARRAY_NO_MEMSET +#include "gdkarrayimpl.c" + +#if WITH_A11Y +#if VTE_GTK == 3 +#include "vteaccess.h" +#else +#endif +#endif + +#if WITH_ICU #include "icu-converter.hh" #endif @@ -78,6 +95,7 @@ enum { }; namespace vte { + namespace platform { /* @@ -86,9 +104,14 @@ namespace platform { * Holds a platform cursor. This is either a named cursor (string), * a reference to a GdkCursor*, or a cursor type. */ +#if VTE_GTK == 3 using Cursor = std::variant, GdkCursorType>; +#elif VTE_GTK == 4 +using Cursor = std::variant>; +#endif } // namespace platform } // namespace vte @@ -116,15 +139,19 @@ public: } vte::base::Ring m_ring; /* buffer contents */ - VteRing* row_data; + vte::base::Ring *row_data; VteVisualPosition cursor; /* absolute value, from the beginning of the terminal history */ + /* Whether the last relevant input was an explicit cursor movement or a graphic character. + * Needed to decide if the next character will wrap at the right margin, if that differs from + * the right edge of the terminal. See https://gitlab.gnome.org/GNOME/vte/-/issues/2677. */ + bool cursor_advanced_by_graphic_character{false}; double scroll_delta{0.0}; /* scroll offset */ long insert_delta{0}; /* insertion offset */ /* Stuff saved along with the cursor */ struct { VteVisualPosition cursor; /* onscreen coordinate, that is, relative to insert_delta */ - uint8_t modes_ecma; + bool cursor_advanced_by_graphic_character; bool reverse_mode; bool origin_mode; VteCell defaults; @@ -134,123 +161,50 @@ public: } saved; }; -/* Until the selection can be generated on demand, let's not enable this on stable */ -#include "vte/vteversion.h" -#if (VTE_MINOR_VERSION % 2) == 0 -#undef HTML_SELECTION -#else -#define HTML_SELECTION -#endif - -/* For unified handling of PRIMARY and CLIPBOARD selection */ -typedef enum { - VTE_SELECTION_PRIMARY, - VTE_SELECTION_CLIPBOARD, - LAST_VTE_SELECTION -} VteSelection; - -/* Used in the GtkClipboard API, to distinguish requests for HTML and TEXT - * contents of a clipboard */ -typedef enum { - VTE_TARGET_TEXT, - VTE_TARGET_HTML, - LAST_VTE_TARGET -} VteSelectionTarget; - -struct vte_scrolling_region { - int start, end; -}; - -template -class ClipboardTextRequestGtk { -public: - typedef void (T::* Callback)(char const*); - - ClipboardTextRequestGtk() : m_request(nullptr) { } - ~ClipboardTextRequestGtk() { cancel(); } - - void request_text(GtkClipboard *clipboard, - Callback callback, - T* that) - { - cancel(); - new Request(clipboard, callback, that, &m_request); - } - -private: - - class Request { - public: - Request(GtkClipboard *clipboard, - Callback callback, - T* that, - Request** location) : - m_callback(callback), - m_that(that), - m_location(location) - { - /* We need to store this here instead of doing it after the |new| above, - * since gtk_clipboard_request_text may dispatch the callback - * immediately or only later, with no way to know this beforehand. - */ - *m_location = this; - gtk_clipboard_request_text(clipboard, text_received, this); - } - - ~Request() - { - invalidate(); - } - - void cancel() - { - invalidate(); - m_that = nullptr; - m_location = nullptr; - } - - private: - Callback m_callback; - T *m_that; - Request** m_location; - - void invalidate() - { - if (m_that && m_location) - *m_location = nullptr; - } - - void dispatch(char const *text) - { - if (m_that) { - g_assert(m_location == nullptr || *m_location == this); - - (m_that->*m_callback)(text); - } - } - - static void text_received(GtkClipboard *clipboard, char const* text, gpointer data) { - Request* request = reinterpret_cast(data); - request->dispatch(text); - delete request; - } - }; - -private: - void cancel() - { - if (m_request) - m_request->cancel(); - g_assert(m_request == nullptr); - } - - Request *m_request; -}; - namespace vte { +/* Tracks the DECSTBM / DECSLRM scrolling region, a.k.a. margins. + * For effective operation, it stores in a single boolean if at its default state. */ +struct scrolling_region { +private: + int m_width{1}; + int m_height{1}; + /* The following are 0-based, inclusive */ + int m_top{0}; + int m_bottom{0}; + int m_left{0}; + int m_right{0}; + bool m_is_restricted{false}; + + constexpr void update_is_restricted() noexcept + { + m_is_restricted = (m_top != 0) || (m_bottom != m_height - 1) || + (m_left != 0) || (m_right != m_width - 1); + } + +public: + constexpr scrolling_region() noexcept = default; + + inline constexpr auto top() const noexcept { return m_top; } + inline constexpr auto bottom() const noexcept { return m_bottom; } + inline constexpr auto left() const noexcept { return m_left; } + inline constexpr auto right() const noexcept { return m_right; } + inline constexpr auto is_restricted() const noexcept { return m_is_restricted; } + inline constexpr bool contains_row_col(int row, int col) const noexcept { + return row >= m_top && row <= m_bottom && col >= m_left && col <= m_right; + } + + void set_vertical(int t, int b) noexcept { m_top = t; m_bottom = b; update_is_restricted(); } + void reset_vertical() noexcept { set_vertical(0, m_height - 1); } + void set_horizontal(int l, int r) noexcept { m_left = l; m_right = r; update_is_restricted(); } + void reset_horizontal() noexcept { set_horizontal(0, m_width - 1); } + void reset() noexcept { reset_vertical(); reset_horizontal(); } + void reset_with_size(int w, int h) noexcept { m_width = w; m_height = h; reset(); } +}; // class scrolling_region + namespace platform { class Widget; +enum class ClipboardType; } namespace terminal { @@ -259,6 +213,8 @@ class Terminal { friend class vte::platform::Widget; private: + class ProcessingContext; + /* These correspond to the parameters for DECSCUSR (Set cursor style). */ enum class CursorStyle { /* We treat 0 and 1 differently, assuming that the VT510 does so too. @@ -299,6 +255,12 @@ private: eLINE, }; + enum class Alignment : uint8_t { + START = 0u, + CENTRE = 1u, + END = 2u, + }; + protected: /* NOTE: This needs to be kept in sync with the public VteCursorBlinkMode enum */ @@ -349,10 +311,18 @@ public: void unset_widget() noexcept; +#if WITH_A11Y && VTE_GTK == 3 + /* Accessible */ + vte::glib::RefPtr m_accessible{}; +#endif + /* Metric and sizing data: dimensions of the window */ vte::grid::row_t m_row_count{VTE_ROWS}; vte::grid::column_t m_column_count{VTE_COLUMNS}; + inline constexpr auto row_count() const noexcept -> long { return m_row_count; } + inline constexpr auto column_count() const noexcept -> long { return m_column_count; } + vte::terminal::Tabstops m_tabstops{}; vte::parser::Parser m_parser; /* control sequence state machine */ @@ -373,11 +343,6 @@ public: pid_t m_pty_pid{-1}; /* pid of child process */ int m_child_exit_status{-1}; /* pid's exit status, or -1 */ bool m_eos_pending{false}; - bool m_child_exited_after_eos_pending{false}; - bool child_exited_eos_wait_callback() noexcept; - vte::glib::Timer m_child_exited_eos_wait_timer{std::bind(&Terminal::child_exited_eos_wait_callback, - this), - "child-exited-eos-wait-timer"}; VteReaper *m_reaper; /* Queue of chunks of data read from the PTY. @@ -388,28 +353,48 @@ public: vte::base::UTF8Decoder m_utf8_decoder; enum class DataSyntax { - eECMA48_UTF8, - #ifdef WITH_ICU - eECMA48_PCTERM, + /* The primary data syntax is always one of the following: */ + ECMA48_UTF8, + #if WITH_ICU + ECMA48_PCTERM, #endif - /* eECMA48_ECMA35, not supported */ + /* ECMA48_ECMA35, not supported */ + + /* The following can never be primary data syntax: */ }; - DataSyntax m_data_syntax{DataSyntax::eECMA48_UTF8}; + DataSyntax m_primary_data_syntax{DataSyntax::ECMA48_UTF8}; + DataSyntax m_current_data_syntax{DataSyntax::ECMA48_UTF8}; - auto data_syntax() const noexcept { return m_data_syntax; } + auto primary_data_syntax() const noexcept { return m_primary_data_syntax; } + auto current_data_syntax() const noexcept { return m_current_data_syntax; } + + void push_data_syntax(DataSyntax syntax) noexcept + { + _vte_debug_print(VTE_DEBUG_IO, "Pushing data syntax %d -> %d\n", + int(m_current_data_syntax), int(syntax)); + m_current_data_syntax = syntax; + } + + void pop_data_syntax() noexcept + { + _vte_debug_print(VTE_DEBUG_IO, "Popping data syntax %d -> %d\n", + int(m_current_data_syntax), int(m_primary_data_syntax)); + m_current_data_syntax = m_primary_data_syntax; + } + + void reset_data_syntax(); int m_utf8_ambiguous_width{VTE_DEFAULT_UTF8_AMBIGUOUS_WIDTH}; gunichar m_last_graphic_character{0}; /* for REP */ /* Array of dirty rectangles in view coordinates; need to * add allocation origin and padding when passing to gtk. */ +#if VTE_GTK == 3 GArray *m_update_rects; +#endif bool m_invalidated_all{false}; /* pending refresh of entire terminal */ - /* If non-nullptr, contains the GList element for @this in g_active_terminals - * and means that this terminal is processing data. - */ - GList *m_active_terminals_link; + bool m_is_processing{false}; // FIXMEchpe should these two be g[s]size ? size_t m_input_bytes; long m_max_input_bytes{VTE_MAX_INPUT_READ}; @@ -417,17 +402,17 @@ public: /* Output data queue. */ VteByteArray *m_outgoing; /* pending input characters */ -#ifdef WITH_ICU +#if WITH_ICU /* Legacy charset support */ std::unique_ptr m_converter; #endif /* WITH_ICU */ char const* encoding() const noexcept { - switch (m_data_syntax) { - case DataSyntax::eECMA48_UTF8: return "UTF-8"; - #ifdef WITH_ICU - case DataSyntax::eECMA48_PCTERM: return m_converter->charset().c_str(); + switch (primary_data_syntax()) { + case DataSyntax::ECMA48_UTF8: return "UTF-8"; + #if WITH_ICU + case DataSyntax::ECMA48_PCTERM: return m_converter->charset().c_str(); #endif default: g_assert_not_reached(); return nullptr; } @@ -465,13 +450,10 @@ public: vte::grid::span m_selection_resolved; /* Clipboard data information. */ - bool m_selection_owned[LAST_VTE_SELECTION]; - VteFormat m_selection_format[LAST_VTE_SELECTION]; - bool m_changing_selection; - GString *m_selection[LAST_VTE_SELECTION]; // FIXMEegmont rename this so that m_selection_resolved can become m_selection? - GtkClipboard *m_clipboard[LAST_VTE_SELECTION]; - - ClipboardTextRequestGtk m_paste_request; + bool m_selection_owned[2]{false, false}; + bool m_changing_selection{false}; + vte::platform::ClipboardFormat m_selection_format[2]; + GString *m_selection[2]; // FIXMEegmont rename this so that m_selection_resolved can become m_selection? /* Miscellaneous options. */ EraseMode m_backspace_binding{EraseMode::eAUTO}; @@ -485,39 +467,58 @@ public: gboolean m_text_deleted_flag; /* Scrolling options. */ + bool m_fallback_scrolling{true}; + bool m_scroll_on_insert{false}; bool m_scroll_on_output{false}; bool m_scroll_on_keystroke{true}; vte::grid::row_t m_scrollback_lines{0}; + inline auto scroll_limit_lower() const noexcept + { + return m_screen->row_data->delta(); + } + + inline constexpr auto scroll_limit_upper() const noexcept + { + return m_screen->insert_delta + m_row_count; + } + + inline constexpr auto scroll_position() const noexcept + { + return m_screen->scroll_delta; + } + /* Restricted scrolling */ - struct vte_scrolling_region m_scrolling_region; /* the region we scroll in */ - gboolean m_scrolling_restricted; + scrolling_region m_scrolling_region; /* the region we scroll in */ + inline void reset_scrolling_region() { m_scrolling_region.reset_with_size(m_column_count, m_row_count); } /* Cursor shape, as set via API */ CursorShape m_cursor_shape{CursorShape::eBLOCK}; double m_cursor_aspect_ratio{0.04}; /* Cursor blinking */ + bool cursor_blink_timer_callback(); vte::glib::Timer m_cursor_blink_timer{std::bind(&Terminal::cursor_blink_timer_callback, this), "cursor-blink-timer"}; CursorBlinkMode m_cursor_blink_mode{CursorBlinkMode::eSYSTEM}; - bool m_cursor_blink_state{false}; - bool m_cursor_blinks{false}; /* whether the cursor is actually blinking */ - gint m_cursor_blink_cycle; /* gtk-cursor-blink-time / 2 */ - int m_cursor_blink_timeout{500}; /* gtk-cursor-blink-timeout */ - gint64 m_cursor_blink_time; /* how long the cursor has been blinking yet */ - gboolean m_has_focus; /* is the terminal window focused */ + bool m_cursor_blink_state{true}; + bool m_cursor_blinks{false}; /* whether the cursor is actually blinking */ + bool m_cursor_blinks_system{true}; /* gtk-cursor-blink */ + int m_cursor_blink_cycle_ms{1000}; /* gtk-cursor-blink-time / 2 */ + int m_cursor_blink_timeout_ms{500}; /* gtk-cursor-blink-timeout */ + int64_t m_cursor_blink_time_ms; /* how long the cursor has been blinking yet */ + bool m_has_focus{false}; /* is the widget focused */ /* Contents blinking */ - bool text_blink_timer_callback() noexcept; + bool text_blink_timer_callback(); vte::glib::Timer m_text_blink_timer{std::bind(&Terminal::text_blink_timer_callback, this), "text-blink-timer"}; bool m_text_blink_state{false}; /* whether blinking text should be visible at this very moment */ bool m_text_to_blink{false}; /* drawing signals here if it encounters any cell with blink attribute */ TextBlinkMode m_text_blink_mode{TextBlinkMode::eALWAYS}; - gint m_text_blink_cycle; /* gtk-cursor-blink-time / 2 */ + int m_text_blink_cycle_ms; /* gtk-cursor-blink-time / 2 */ /* DECSCUSR cursor style (shape and blinking possibly overridden * via escape sequence) */ @@ -537,7 +538,7 @@ public: */ vte::view::coords m_mouse_last_position{-1, -1}; double m_mouse_smooth_scroll_delta{0.0}; - bool mouse_autoscroll_timer_callback() noexcept; + bool mouse_autoscroll_timer_callback(); vte::glib::Timer m_mouse_autoscroll_timer{std::bind(&Terminal::mouse_autoscroll_timer_callback, this), "mouse-autoscroll-timer"}; @@ -615,8 +616,8 @@ public: return match_regexes_writable().emplace_back(std::forward(args)...); } - char* m_match_contents; - GArray* m_match_attributes; + GString* m_match_contents; + VteCharAttrList m_match_attributes; char* m_match; /* If m_match non-null, then m_match_span contains the region of the match. * If m_match is null, and m_match_span is not .empty(), then it contains @@ -629,13 +630,14 @@ public: vte::base::RefPtr m_search_regex{}; uint32_t m_search_regex_match_flags{0}; gboolean m_search_wrap_around; - GArray* m_search_attrs; /* Cache attrs */ + VteCharAttrList m_search_attrs; /* Cache attrs */ /* Data used when rendering the text which does not require server * resources and which can be kept after unrealizing. */ - using pango_font_description_unique_type = std::unique_ptr; - pango_font_description_unique_type m_unscaled_font_desc{nullptr, &pango_font_description_free}; - pango_font_description_unique_type m_fontdesc{nullptr, &pango_font_description_free}; + vte::Freeable m_font_options{}; + vte::Freeable m_api_font_desc{}; + vte::Freeable m_unscaled_font_desc{}; + vte::Freeable m_fontdesc{}; double m_font_scale{1.}; auto unscaled_font_description() const noexcept { return m_unscaled_font_desc.get(); } @@ -643,7 +645,7 @@ public: /* First, the dimensions of ASCII characters are measured. The result * could probably be called char_{width,height} or font_{width,height} * but these aren't stored directly here, not to accidentally be confused - * with m_cell_{width_height}. The values are stored in vtedraw's font_info. + * with m_cell_{width_height}. The values are stored in FontInfo. * * Then in case of nondefault m_cell_{width,height}_scale an additional * m_char_padding is added, resulting in m_cell_{width,height} which are @@ -662,6 +664,8 @@ public: GtkBorder m_char_padding{0, 0, 0, 0}; long m_cell_width{0}; long m_cell_height{0}; + long m_cell_width_unscaled{0}; + long m_cell_height_unscaled{0}; /* We allow the cell's text to draw a bit outside the cell at the top * and bottom. The following two functions return how much is the @@ -679,10 +683,12 @@ public: return int(m_overline_position + m_overline_thickness); } - /* Data used when rendering the text which reflects server resources - * and data, which should be dropped when unrealizing and (re)created - * when realizing. */ - struct _vte_draw *m_draw; + /* Data used when rendering */ +#if VTE_GTK == 3 + vte::view::DrawingCairo m_draw{}; +#elif VTE_GTK == 4 + vte::view::DrawingGsk m_draw{}; +#endif bool m_clear_background{true}; VtePaletteColor m_palette[VTE_PALETTE_SIZE]; @@ -695,17 +701,12 @@ public: /* Input method support. */ bool m_im_preedit_active; std::string m_im_preedit; - using pango_attr_list_unique_type = std::unique_ptr; - pango_attr_list_unique_type m_im_preedit_attrs{nullptr, &pango_attr_list_unref}; + vte::Freeable m_im_preedit_attrs{}; int m_im_preedit_cursor; - #ifdef WITH_A11Y - gboolean m_accessible_emit; - #endif - /* Adjustment updates pending. */ - gboolean m_adjustment_changed_pending; - gboolean m_adjustment_value_changed_pending; + bool m_adjustment_changed_pending; + bool m_adjustment_value_changed_pending; gboolean m_cursor_moved_pending; gboolean m_contents_changed_pending; @@ -715,12 +716,16 @@ public: std::string m_window_title_pending{}; std::string m_current_directory_uri_pending{}; std::string m_current_file_uri_pending{}; - bool m_window_title_changed{false}; - bool m_current_directory_uri_changed{false}; - bool m_current_file_uri_changed{false}; std::vector m_window_title_stack{}; + enum class PendingChanges { + TITLE = 1u << 0, + CWD = 1u << 1, + CWF = 1u << 2, + }; + unsigned m_pending_changes{0}; + /* Background */ double m_background_alpha{1.}; @@ -749,10 +754,21 @@ public: double m_undercurl_thickness{VTE_LINE_WIDTH}; /* Style stuff */ - GtkBorder m_padding{1, 1, 1, 1}; - - vte::glib::RefPtr m_vadjustment{}; - auto vadjustment() noexcept { return m_vadjustment.get(); } + /* On gtk3, the style border (comprising padding, margins and border) + * is part of the widget's allocation; on gtk4, it's outside of it. + */ + GtkBorder m_style_border{ +#if VTE_GTK == 3 + 1, 1, 1, 1 +#elif VTE_GTK == 4 + 0, 0, 0, 0 +#endif + }; + /* The total padding. On gtk3, this comprises the style border as above, + * plus the inner border due to [xy]align and [xy]fill properties; on gtk4, + * it comprises only the latter. + */ + GtkBorder m_border{m_style_border}; /* Hyperlinks */ bool m_allow_hyperlink{false}; @@ -765,16 +781,14 @@ public: bool m_enable_bidi{true}; bool m_enable_shaping{true}; + /* FrameClock driven updates */ + gpointer m_scheduler; + /* BiDi parameters outside of ECMA and DEC private modes */ guint m_bidi_rtl : 1; public: - // FIXMEchpe inline! - /* inline */ VteRowData* ring_insert(vte::grid::row_t position, - bool fill); - /* inline */ VteRowData* ring_append(bool fill); - /* inline */ void ring_remove(vte::grid::row_t position); inline VteRowData const* find_row_data(vte::grid::row_t row) const; inline VteRowData* find_row_data_writable(vte::grid::row_t row) const; inline VteCell const* find_charcell(vte::grid::column_t col, @@ -791,26 +805,98 @@ public: inline vte::grid::row_t last_displayed_row() const; inline bool cursor_is_onscreen() const noexcept; - inline VteRowData *insert_rows (guint cnt); - VteRowData *ensure_row(); VteRowData *ensure_cursor(); void update_insert_delta(); + // FIXMEchpe replace this with a method on VteRing + inline VteRowData* ring_insert(vte::grid::row_t position, bool fill) { + VteRowData *row; + auto ring = m_screen->row_data; + bool const not_default_bg = (m_color_defaults.attr.back() != VTE_DEFAULT_BG); + + while G_UNLIKELY (long(ring->next()) < position) { + row = ring->append(get_bidi_flags()); + if (not_default_bg) + _vte_row_data_fill (row, &m_color_defaults, m_column_count); + } + row = ring->insert(position, get_bidi_flags()); + if (fill && not_default_bg) + _vte_row_data_fill (row, &m_color_defaults, m_column_count); + return row; + } + + inline VteRowData* ring_append(bool fill) { + return ring_insert(m_screen->row_data->next(), fill); + } + + // FIXMEchpe replace this with a method on Ring + inline void ring_remove(vte::grid::row_t position) { + m_screen->row_data->remove(position); + } + + // FIXMEchpe replace this with a method on Ring + inline VteRowData* insert_rows (guint cnt) { + VteRowData* row; + do { + row = ring_append(false); + } while(--cnt); + return row; + } + + // Make sure we have enough rows and columns to hold data at the current + // cursor position. + inline VteRowData *ensure_row() { + VteRowData *row; + + // Figure out how many rows we need to add. + auto const delta = m_screen->cursor.row - long(m_screen->row_data->next()) + 1; + if G_UNLIKELY (delta > 0) { + row = insert_rows(delta); + adjust_adjustments(); + } else { + // Find the row the cursor is in. + row = m_screen->row_data->index_writable(m_screen->cursor.row); + } + g_assert(row != NULL); + + return row; + } + + void set_hard_wrapped(vte::grid::row_t row); void set_soft_wrapped(vte::grid::row_t row); - void cleanup_fragments(long start, + inline void cleanup_fragments(long start, + long end) { + ensure_row(); + cleanup_fragments(m_screen->cursor.row, start, end); + } + void cleanup_fragments(long rownum, + long start, long end); - void cursor_down(bool explicit_sequence); + void scroll_text_up(scrolling_region const& scrolling_region, + vte::grid::row_t amount, bool fill); + void scroll_text_down(scrolling_region const& scrolling_region, + vte::grid::row_t amount, bool fill); + void scroll_text_left(scrolling_region const& scrolling_region, + vte::grid::row_t amount, bool fill); + void scroll_text_right(scrolling_region const& scrolling_region, + vte::grid::row_t amount, bool fill); + void cursor_down_with_scrolling(bool fill); + void cursor_up_with_scrolling(bool fill); + void cursor_right_with_scrolling(bool fill); + void cursor_left_with_scrolling(bool fill); + void drop_scrollback(); void restore_cursor(VteScreen *screen__); void save_cursor(VteScreen *screen__); void insert_char(gunichar c, - bool insert, bool invalidate_now); + void insert_single_width_chars(gunichar const *p, + int len); void invalidate_row(vte::grid::row_t row); void invalidate_rows(vte::grid::row_t row_start, @@ -831,19 +917,20 @@ public: bool invalidate_dirty_rects_and_process_updates(); void time_process_incoming(); void process_incoming(); - void process_incoming_utf8(); - #ifdef WITH_ICU - void process_incoming_pcterm(); + void process_incoming_utf8(ProcessingContext& context, + vte::base::Chunk& chunk); + #if WITH_ICU + void process_incoming_pcterm(ProcessingContext& context, + vte::base::Chunk& chunk); #endif - bool process(bool emit_adj_changed); - inline bool is_processing() const { return m_active_terminals_link != nullptr; } + bool process(); + inline bool is_processing() const { return m_is_processing; }; void start_processing(); gssize get_preedit_width(bool left_only); gssize get_preedit_length(bool left_only); void invalidate_cursor_once(bool periodic = false); - bool cursor_blink_timer_callback() noexcept; void check_cursor_blink(); void add_cursor_timeout(); void remove_cursor_timeout(); @@ -853,6 +940,9 @@ public: /* The allocation of the widget */ cairo_rectangle_int_t m_allocated_rect; + + constexpr auto const* allocated_rect() const noexcept { return &m_allocated_rect; } + /* The usable view area. This is the allocation, minus the padding, but * including additional right/bottom area if the allocation is not grid aligned. */ @@ -861,8 +951,8 @@ public: void set_allocated_rect(cairo_rectangle_int_t const& r) { m_allocated_rect = r; update_view_extents(); } void update_view_extents() { m_view_usable_extents = - vte::view::extents(m_allocated_rect.width - m_padding.left - m_padding.right, - m_allocated_rect.height - m_padding.top - m_padding.bottom); + vte::view::extents(m_allocated_rect.width - m_border.left - m_border.right, + m_allocated_rect.height - m_border.top - m_border.bottom); } bool widget_realized() const noexcept; @@ -870,8 +960,8 @@ public: inline vte::view::coord_t get_allocated_width() const { return m_allocated_rect.width; } inline vte::view::coord_t get_allocated_height() const { return m_allocated_rect.height; } - vte::view::coords view_coords_from_event(GdkEvent const* event) const; - vte::grid::coords grid_coords_from_event(GdkEvent const* event) const; + vte::view::coords view_coords_from_event(vte::platform::MouseEvent const& event) const; + vte::grid::coords grid_coords_from_event(vte::platform::MouseEvent const& event) const; vte::view::coords view_coords_from_grid_coords(vte::grid::coords const& rowcol) const; vte::grid::coords grid_coords_from_view_coords(vte::view::coords const& pos) const; @@ -884,52 +974,80 @@ public: vte::grid::row_t confine_grid_row(vte::grid::row_t const& row) const; vte::grid::coords confine_grid_coords(vte::grid::coords const& rowcol) const; - vte::grid::coords confined_grid_coords_from_event(GdkEvent const* event) const; + vte::grid::coords confined_grid_coords_from_event(vte::platform::MouseEvent const&) const; vte::grid::coords confined_grid_coords_from_view_coords(vte::view::coords const& pos) const; void confine_coordinates(long *xp, long *yp); - void widget_paste(GdkAtom board); - void widget_copy(VteSelection sel, - VteFormat format); - void widget_paste_received(char const* text); - void widget_clipboard_cleared(GtkClipboard *clipboard); - void widget_clipboard_requested(GtkClipboard *target_clipboard, - GtkSelectionData *data, - guint info); + bool set_style_border(GtkBorder const& border) noexcept; + void set_cursor_aspect(float aspect); - void widget_set_vadjustment(vte::glib::RefPtr&& adjustment); + void widget_copy(vte::platform::ClipboardType selection, + vte::platform::ClipboardFormat format); + + void widget_paste(std::string_view const& text); + + std::optional widget_clipboard_data_get(vte::platform::Clipboard const& clipboard, + vte::platform::ClipboardFormat format); + void widget_clipboard_data_clear(vte::platform::Clipboard const& clipboard); - void widget_constructed(); void widget_realize(); void widget_unrealize(); void widget_unmap(); void widget_style_updated(); - void widget_focus_in(GdkEventFocus *event); - void widget_focus_out(GdkEventFocus *event); - bool widget_key_press(GdkEventKey *event); - bool widget_key_release(GdkEventKey *event); - bool widget_button_press(GdkEventButton *event); - bool widget_button_release(GdkEventButton *event); - void widget_enter(GdkEventCrossing *event); - void widget_leave(GdkEventCrossing *event); - void widget_scroll(GdkEventScroll *event); - bool widget_motion_notify(GdkEventMotion *event); - void widget_draw(cairo_t *cr); - void widget_get_preferred_width(int *minimum_width, - int *natural_width); - void widget_get_preferred_height(int *minimum_height, - int *natural_height); - void widget_size_allocate(GtkAllocation *allocation); + void widget_focus_in(); + void widget_focus_out(); + bool widget_key_press(vte::platform::KeyEvent const& event); + bool widget_key_release(vte::platform::KeyEvent const& event); + bool widget_mouse_motion(vte::platform::MouseEvent const& event); + bool widget_mouse_press(vte::platform::MouseEvent const& event); + bool widget_mouse_release(vte::platform::MouseEvent const& event); + void widget_mouse_enter(vte::platform::MouseEvent const& event); + void widget_mouse_leave(vte::platform::MouseEvent const& event); + bool widget_mouse_scroll(vte::platform::ScrollEvent const& event); +#if VTE_GTK == 4 + bool widget_key_modifiers(unsigned modifiers); +#endif /* VTE_GTK == 4 */ +#if VTE_GTK == 3 + void widget_draw(cairo_t *cr) noexcept; +#elif VTE_GTK == 4 + void widget_snapshot(GtkSnapshot* snapshot_object) noexcept; +#endif /* VTE_GTK == 3 */ + void widget_measure_width(int *minimum_width, + int *natural_width) noexcept; + void widget_measure_height(int *minimum_height, + int *natural_height) noexcept; + +#if VTE_GTK == 3 + void widget_size_allocate(int x, + int y, + int width, + int height, + int baseline, + Alignment xalign, + Alignment yalign, + bool xfill, + bool yfill) noexcept; +#elif VTE_GTK == 4 + void widget_size_allocate(int width, + int height, + int baseline, + Alignment xalign, + Alignment yalign, + bool xfill, + bool yfill) noexcept; +#endif /* VTE_GTK */ void set_blink_settings(bool blink, - int blink_time, - int blink_timeout) noexcept; + int blink_time_ms, + int blink_timeout_ms) noexcept; + void draw(cairo_region_t const* region) noexcept; + vte::view::Rectangle cursor_rect(); void paint_cursor(); void paint_im_preedit_string(); - void draw_cells(struct _vte_draw_text_request *items, + void draw_cells(vte::view::DrawingContext::TextRequest* items, gssize n, uint32_t fore, uint32_t back, @@ -950,7 +1068,7 @@ public: void translate_pango_cells(PangoAttrList *attrs, VteCell *cells, gsize n_cells); - void draw_cells_with_attributes(struct _vte_draw_text_request *items, + void draw_cells_with_attributes(vte::view::DrawingContext::TextRequest* items, gssize n, PangoAttrList *attrs, bool draw_default_bg, @@ -978,7 +1096,8 @@ public: void pty_channel_eof(); bool pty_io_read(int const fd, - GIOCondition const condition); + GIOCondition const condition, + int amount = -1); bool pty_io_write(int const fd, GIOCondition const condition); @@ -995,7 +1114,7 @@ public: void im_preedit_reset() noexcept; void im_preedit_changed(std::string_view const& str, int cursorpos, - pango_attr_list_unique_type&& attrs) noexcept; + vte::Freeable attrs) noexcept; bool im_retrieve_surrounding(); bool im_delete_surrounding(int offset, int n_chars); @@ -1020,21 +1139,23 @@ public: vte::grid::column_t bcol, vte::grid::row_t brow) const; - GString* get_text(vte::grid::row_t start_row, - vte::grid::column_t start_col, - vte::grid::row_t end_row, - vte::grid::column_t end_col, - bool block, - bool wrap, - GArray* attributes = nullptr); + void get_text(vte::grid::row_t start_row, + vte::grid::column_t start_col, + vte::grid::row_t end_row, + vte::grid::column_t end_col, + bool block, + bool preserve_empty, + GString* string, + VteCharAttrList* attributes = nullptr); - GString* get_text_displayed(bool wrap, - GArray* attributes = nullptr); + void get_text_displayed(GString* string, + VteCharAttrList* attributes = nullptr); - GString* get_text_displayed_a11y(bool wrap, - GArray* attributes = nullptr); + void get_text_displayed_a11y(GString* string, + VteCharAttrList* attributes = nullptr); - GString* get_selected_text(GArray* attributes = nullptr); + void get_selected_text(GString *string, + VteCharAttrList* attributes = nullptr); template inline void rgb_from_index(guint index, @@ -1056,12 +1177,18 @@ public: guint *pback, guint *pdeco) const; + void resolve_normal_colors(VteCell const* cell, + unsigned* pfore, + unsigned* pback, + vte::color::rgb& fg, + vte::color::rgb& bg); + char *cellattr_to_html(VteCellAttr const* attr, char const* text) const; VteCellAttr const* char_to_cell_attr(VteCharAttributes const* attr) const; GString* attributes_to_html(GString* text_string, - GArray* attrs); + VteCharAttrList* attrs); void start_selection(vte::view::coords const& pos, SelectionType type); @@ -1074,16 +1201,34 @@ public: void resolve_selection(); void selection_maybe_swap_endpoints(vte::view::coords const& pos); void modify_selection(vte::view::coords const& pos); - bool cell_is_selected_log(vte::grid::column_t lcol, - vte::grid::row_t) const; + bool _cell_is_selected_log(vte::grid::column_t lcol, + vte::grid::row_t) const; bool cell_is_selected_vis(vte::grid::column_t vcol, vte::grid::row_t) const; - void reset_default_attributes(bool reset_hyperlink); + inline bool cell_is_selected_log(vte::grid::column_t lcol, + vte::grid::row_t row) const { + // Callers need to update the ringview. However, don't assert, just + // return out-of-view coords. FIXME: may want to throw instead + if (!m_ringview.is_updated()) + [[unlikely]] return false; + + // In normal modes, resolve_selection() made sure to generate + // such boundaries for m_selection_resolved. + if (!m_selection_block_mode) + [[likely]] return m_selection_resolved.contains ({row, lcol}); + + return _cell_is_selected_log(lcol, row); + } + + + void reset_default_attributes(bool reset_osc); void ensure_font(); void update_font(); - void apply_font_metrics(int cell_width, + void apply_font_metrics(int cell_width_unscaled, + int cell_height_unscaled, + int cell_width, int cell_height, int char_ascent, int char_descent, @@ -1095,16 +1240,14 @@ public: long old_rows, bool do_rewrap); - void vadjustment_value_changed(); - - void read_modifiers(GdkEvent *event); - guint translate_ctrlkey(GdkEventKey *event); + unsigned translate_ctrlkey(vte::platform::KeyEvent const& event) const noexcept; void apply_mouse_cursor(); void set_pointer_autohidden(bool autohidden); void beep(); + void set_scroll_value(double value); void emit_adjustment_changed(); void emit_commit(std::string_view const& str); void emit_eof(); @@ -1117,21 +1260,62 @@ public: void scroll_lines(long lines); void scroll_pages(long pages) { scroll_lines(pages * m_row_count); } - void maybe_scroll_to_top(); - void maybe_scroll_to_bottom(); + void scroll_to_top(); + void scroll_to_bottom(); + void scroll_to_previous_prompt(); + void scroll_to_next_prompt(); void queue_cursor_moved(); void queue_contents_changed(); void queue_child_exited(); void queue_eof(); - void emit_text_deleted(); - void emit_text_inserted(); - void emit_text_modified(); - void emit_text_scrolled(long delta); +#if WITH_A11Y && VTE_GTK == 3 + + void set_accessible(VteTerminalAccessible* accessible) noexcept + { + /* Note: The accessible only keeps a weak ref on the widget, + * while GtkWidget holds a ref to the accessible already; + * so this does not lead to a ref cycle. + */ + m_accessible = vte::glib::make_ref(accessible); + } + + void emit_text_deleted() noexcept + { + if (m_accessible) + _vte_terminal_accessible_text_deleted(m_accessible.get()); + } + + void emit_text_inserted() + { + if (m_accessible) + _vte_terminal_accessible_text_inserted(m_accessible.get()); + } + + void emit_text_modified() + + { + if (m_accessible) + _vte_terminal_accessible_text_modified(m_accessible.get()); + } + + void emit_text_scrolled(long delta) + { + if (m_accessible) + _vte_terminal_accessible_text_scrolled(m_accessible.get(), delta); + } + +#else + + inline constexpr void emit_text_deleted() const noexcept { } + inline constexpr void emit_text_inserted() const noexcept { } + inline constexpr void emit_text_modified() const noexcept { } + inline constexpr void emit_text_scrolled(long delta) const noexcept { } + +#endif /* WITH_A11Y && VTE_GTK == 3*/ + void emit_pending_signals(); - void emit_char_size_changed(int width, - int height); void emit_increase_font_size(); void emit_decrease_font_size(); void emit_bell(); @@ -1152,13 +1336,27 @@ public: void match_hilite_clear(); void match_hilite_update(); - bool rowcol_from_event(GdkEvent *event, + bool rowcol_from_event(vte::platform::MouseEvent const& event, long *column, long *row); +#if VTE_GTK == 4 + bool rowcol_at(double x, + double y, + long* column, + long* row); +#endif - char *hyperlink_check(GdkEvent *event); + char *hyperlink_check(vte::platform::MouseEvent const& event); + char *hyperlink_check(vte::grid::column_t column, + vte::grid::row_t row); - bool regex_match_check_extra(GdkEvent* event, + bool regex_match_check_extra(vte::platform::MouseEvent const& event, + vte::base::Regex const** regexes, + size_t n_regexes, + uint32_t match_flags, + char** matches); + bool regex_match_check_extra(vte::grid::column_t column, + vte::grid::row_t row, vte::base::Regex const** regexes, size_t n_regexes, uint32_t match_flags, @@ -1167,14 +1365,31 @@ public: char *regex_match_check(vte::grid::column_t column, vte::grid::row_t row, int *tag); - char *regex_match_check(GdkEvent *event, + char *regex_match_check(vte::platform::MouseEvent const& event, int *tag); + +#if VTE_GTK == 4 + char *hyperlink_check_at(double x, + double y); + bool regex_match_check_extra_at(double x, + double y, + vte::base::Regex const** regexes, + size_t n_regexes, + uint32_t match_flags, + char** matches); + char *regex_match_check_at(double x, + double y, + int *tag); +#endif /* VTE_GTK == 4 */ + void regex_match_remove(int tag) noexcept; void regex_match_remove_all() noexcept; void regex_match_set_cursor(int tag, GdkCursor *gdk_cursor); + #if VTE_GTK == 3 void regex_match_set_cursor(int tag, GdkCursorType cursor_type); + #endif void regex_match_set_cursor(int tag, char const* cursor_name); bool match_rowcol_to_offset(vte::grid::column_t column, @@ -1183,7 +1398,7 @@ public: gsize *sattr_ptr, gsize *eattr_ptr); - pcre2_match_context_8 *create_match_context(); + vte::Freeable create_match_context(); bool match_check_pcre(pcre2_match_data_8 *match_data, pcre2_match_context_8 *match_context, vte::base::Regex const* regex, @@ -1213,10 +1428,9 @@ public: bool is_drag, bool is_release); bool maybe_send_mouse_button(vte::grid::coords const& rowcol, - GdkEventType event_type, - int event_button); + vte::platform::MouseEvent const& event); bool maybe_send_mouse_drag(vte::grid::coords const& rowcol, - GdkEventType event_type); + vte::platform::MouseEvent const& event); void feed_focus_event(bool in); void feed_focus_event_initial(); @@ -1240,7 +1454,8 @@ public: bool search_set_wrap_around(bool wrap); void set_size(long columns, - long rows); + long rows, + bool allocating); std::optional> process_word_char_exceptions(std::string_view str) const noexcept; @@ -1294,14 +1509,21 @@ public: bool set_enable_shaping(bool setting); bool set_encoding(char const* codeset, GError** error); - bool set_font_desc(PangoFontDescription const* desc); + bool set_font_desc(vte::Freeable desc); + bool update_font_desc(); + bool set_font_options(vte::Freeable font_options); + cairo_font_options_t const* get_font_options() const noexcept { return m_font_options.get(); } bool set_font_scale(double scale); bool set_input_enabled(bool enabled); bool set_mouse_autohide(bool autohide); bool set_rewrap_on_resize(bool rewrap); bool set_scrollback_lines(long lines); + bool set_fallback_scrolling(bool set); + auto fallback_scrolling() const noexcept { return m_fallback_scrolling; } + bool set_scroll_on_insert(bool scroll); bool set_scroll_on_keystroke(bool scroll); bool set_scroll_on_output(bool scroll); + bool set_images_enabled(bool enabled); bool set_word_char_exceptions(std::optional stropt); void set_clear_background(bool setting); @@ -1310,7 +1532,7 @@ public: GCancellable *cancellable, GError **error); - inline void ensure_cursor_is_onscreen(); + inline void maybe_retreat_cursor(); inline void home_cursor(); inline void clear_screen(); inline void clear_current_line(); @@ -1338,47 +1560,53 @@ public: inline void clear_to_bol(); inline void clear_below_current(); inline void clear_to_eol(); - inline void delete_character(); inline void set_cursor_column(vte::grid::column_t col); inline void set_cursor_column1(vte::grid::column_t col); /* 1-based */ - inline int get_cursor_column() const noexcept { return CLAMP(m_screen->cursor.col, 0, m_column_count - 1); } - inline int get_cursor_column1() const noexcept { return get_cursor_column() + 1; } + /* Return the xterm-like cursor column, 0-based, decremented by 1 if about to wrap. + * See maybe_retreat_cursor() for further details. */ + inline int get_xterm_cursor_column() const noexcept { + if (m_screen->cursor.col >= m_column_count) [[unlikely]] { + return m_column_count - 1; + } else if (m_screen->cursor.col == m_scrolling_region.right() + 1 && + m_screen->cursor_advanced_by_graphic_character) [[unlikely]] { + return m_screen->cursor.col - 1; + } else { + return m_screen->cursor.col; + } + } inline void set_cursor_row(vte::grid::row_t row /* relative to scrolling region */); inline void set_cursor_row1(vte::grid::row_t row /* relative to scrolling region */); /* 1-based */ - inline int get_cursor_row() const noexcept { return CLAMP(m_screen->cursor.row, 0, m_row_count - 1); } - inline int get_cursor_row1() const noexcept { return get_cursor_row() + 1; } + inline int get_xterm_cursor_row() const noexcept { return m_screen->cursor.row - m_screen->insert_delta; } inline void set_cursor_coords(vte::grid::row_t row /* relative to scrolling region */, vte::grid::column_t column); inline void set_cursor_coords1(vte::grid::row_t row /* relative to scrolling region */, vte::grid::column_t column); /* 1-based */ - inline vte::grid::row_t get_cursor_row_unclamped() const; - inline vte::grid::column_t get_cursor_column_unclamped() const; - inline void move_cursor_up(vte::grid::row_t rows); - inline void move_cursor_down(vte::grid::row_t rows); - inline void erase_characters(long count); - inline void insert_blank_character(); + inline void erase_characters(long count, + bool use_basic = false); template inline bool seq_parse_sgr_color(vte::parser::Sequence const& seq, unsigned int& idx, uint32_t& color) const noexcept; + inline void move_cursor_up(vte::grid::row_t rows); + inline void move_cursor_down(vte::grid::row_t rows); inline void move_cursor_backward(vte::grid::column_t columns); inline void move_cursor_forward(vte::grid::column_t columns); inline void move_cursor_tab_backward(int count = 1); inline void move_cursor_tab_forward(int count = 1); + + inline void carriage_return(); inline void line_feed(); + inline void erase_in_display(vte::parser::Sequence const& seq); inline void erase_in_line(vte::parser::Sequence const& seq); - inline void insert_lines(vte::grid::row_t param); - inline void delete_lines(vte::grid::row_t param); unsigned int checksum_area(vte::grid::row_t start_row, vte::grid::column_t start_col, vte::grid::row_t end_row, vte::grid::column_t end_col); - void subscribe_accessible_events(); void select_text(vte::grid::column_t start_col, vte::grid::row_t start_row, vte::grid::column_t end_col, @@ -1449,18 +1677,24 @@ public: void set_current_hyperlink(vte::parser::Sequence const& seq, vte::parser::StringTokeniser::const_iterator& token, vte::parser::StringTokeniser::const_iterator const& endtoken) noexcept; + void set_current_shell_integration_mode(vte::parser::Sequence const& seq, + vte::parser::StringTokeniser::const_iterator& token, + vte::parser::StringTokeniser::const_iterator const& endtoken) noexcept; void ringview_update(); /* Sequence handlers */ - bool m_line_wrapped; // signals line wrapped from character insertion // Note: inlining the handlers seems to worsen the performance, so we don't do that -#define _VTE_CMD(cmd) \ +#define _VTE_CMD_HANDLER(cmd) \ /* inline */ void cmd (vte::parser::Sequence const& seq); -#define _VTE_NOP(cmd) G_GNUC_UNUSED _VTE_CMD(cmd) -#include "parser-cmd.hh" -#undef _VTE_CMD -#undef _VTE_NOP +#define _VTE_CMD_HANDLER_NOP(cmd) \ + /* inline */ void cmd (vte::parser::Sequence const& seq); +#define _VTE_CMD_HANDLER_R(cmd) \ + /* inline */ bool cmd (vte::parser::Sequence const& seq); +#include "parser-cmd-handlers.hh" +#undef _VTE_CMD_HANDLER +#undef _VTE_CMD_HANDLER_NOP +#undef _VTE_CMD_HANDLER_R }; } // namespace terminal diff --git a/src/vtepcre2.h b/src/vtepcre2.h deleted file mode 100644 index 1094edf..0000000 --- a/src/vtepcre2.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright © 2015 Christian Persch - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define PCRE2_CODE_UNIT_WIDTH 0 -#include -#include - -/* Assert compatibility of PCRE2 and GLib types */ -static_assert(sizeof(PCRE2_UCHAR8) == sizeof (uint8_t), "PCRE2_UCHAR2 has wrong size"); -static_assert(sizeof(PCRE2_SIZE) == sizeof (size_t), "PCRE2_SIZE has wrong size"); -static_assert(PCRE2_UNSET == (size_t)-1, "PCRE2_UNSET has wrong value"); -static_assert(PCRE2_ZERO_TERMINATED == (size_t)-1, "PCRE2_ZERO_TERMINATED has wrong value"); diff --git a/src/vtepty.cc b/src/vtepty.cc index 5dfba03..2da2675 100644 --- a/src/vtepty.cc +++ b/src/vtepty.cc @@ -2,19 +2,18 @@ * Copyright (C) 2001,2002 Red Hat, Inc. * Copyright © 2009, 2010, 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ /** @@ -26,11 +25,11 @@ * pseudo-terminals and to resize pseudo-terminals. */ -#include +#include "config.h" + +#include #include -#include "vtetypes.hh" -#include "vtespawn.hh" #include #include @@ -39,7 +38,12 @@ #include +#include "cxx-utils.hh" +#include "libc-glue.hh" #include "pty.hh" +#include "refptr.hh" +#include "spawn.hh" + #include "vteptyinternal.hh" #if !GLIB_CHECK_VERSION(2, 42, 0) @@ -123,11 +127,10 @@ _vte_pty_get_impl(VtePty* pty) /** * vte_pty_child_setup: * @pty: a #VtePty - * - * FIXMEchpe */ void -vte_pty_child_setup (VtePty *pty) +vte_pty_child_setup (VtePty *pty) noexcept +try { g_return_if_fail(pty != nullptr); auto impl = IMPL(pty); @@ -135,66 +138,9 @@ vte_pty_child_setup (VtePty *pty) impl->child_setup(); } - -/* - * __vte_pty_spawn: - * @pty: a #VtePty - * @directory: the name of a directory the command should start in, or %NULL - * to use the cwd - * @argv: child's argument vector - * @envv: a list of environment variables to be added to the environment before - * starting the process, or %NULL - * @spawn_flags: flags from #GSpawnFlags - * @child_setup: function to run in the child just before exec() - * @child_setup_data: user data for @child_setup - * @child_pid: a location to store the child PID, or %NULL - * @timeout: a timeout value in ms, or %NULL - * @cancellable: a #GCancellable, or %NULL - * @error: return location for a #GError, or %NULL - * - * Uses g_spawn_async() to spawn the command in @argv. The child's environment will - * be the parent environment with the variables in @envv set afterwards. - * - * Enforces the vte_terminal_watch_child() requirements by adding - * %G_SPAWN_DO_NOT_REAP_CHILD to @spawn_flags. - * - * Note that the %G_SPAWN_LEAVE_DESCRIPTORS_OPEN flag is not supported; - * it will be cleared! - * - * If spawning the command in @working_directory fails because the child - * is unable to chdir() to it, falls back trying to spawn the command - * in the parent's working directory. - * - * Returns: %TRUE on success, or %FALSE on failure with @error filled in - */ -gboolean -_vte_pty_spawn(VtePty *pty, - const char *directory, - char **argv, - char **envv, - GSpawnFlags spawn_flags_, - GSpawnChildSetupFunc child_setup, - gpointer child_setup_data, - GPid *child_pid /* out */, - int timeout, - GCancellable *cancellable, - GError **error) +catch (...) { - g_return_val_if_fail(VTE_IS_PTY(pty), FALSE); - - auto impl = IMPL(pty); - g_return_val_if_fail(impl != nullptr, FALSE); - - return impl->spawn(directory, - argv, - envv, - spawn_flags_, - child_setup, - child_setup_data, - child_pid, - timeout, - cancellable, - error); + vte::log_exception(); } /** @@ -205,7 +151,7 @@ _vte_pty_spawn(VtePty *pty, * @error: (allow-none): return location to store a #GError, or %NULL * * Attempts to resize the pseudo terminal's window size. If successful, the - * OS kernel will send #SIGWINCH to the child process group. + * OS kernel will send SIGWINCH to the child process group. * * If setting the window size failed, @error will be set to a #GIOError. * @@ -215,16 +161,31 @@ gboolean vte_pty_set_size(VtePty *pty, int rows, int columns, - GError **error) + GError **error) noexcept +{ + /* No way to determine the pixel size; set it to (0, 0), meaning + * "undefined". + */ + return _vte_pty_set_size(pty, rows, columns, 0, 0, error); +} + +bool +_vte_pty_set_size(VtePty *pty, + int rows, + int columns, + int cell_height_px, + int cell_width_px, + GError **error) noexcept +try { g_return_val_if_fail(VTE_IS_PTY(pty), FALSE); auto impl = IMPL(pty); g_return_val_if_fail(impl != nullptr, FALSE); - if (impl->set_size(rows, columns)) + if (impl->set_size(rows, columns, cell_height_px, cell_width_px)) return true; - vte::util::restore_errno errsv; + auto errsv = vte::libc::ErrnoSaver{}; g_set_error(error, G_IO_ERROR, g_io_error_from_errno(errsv), "Failed to set window size: %s", @@ -232,6 +193,11 @@ vte_pty_set_size(VtePty *pty, return false; } +catch (...) +{ + return vte::glib::set_error_from_exception(error); +} + /** * vte_pty_get_size: @@ -250,7 +216,8 @@ gboolean vte_pty_get_size(VtePty *pty, int *rows, int *columns, - GError **error) + GError **error) noexcept +try { g_return_val_if_fail(VTE_IS_PTY(pty), FALSE); auto impl = IMPL(pty); @@ -259,13 +226,17 @@ vte_pty_get_size(VtePty *pty, if (impl->get_size(rows, columns)) return true; - vte::util::restore_errno errsv; + auto errsv = vte::libc::ErrnoSaver{}; g_set_error(error, G_IO_ERROR, g_io_error_from_errno(errsv), "Failed to get window size: %s", g_strerror(errsv)); return false; } +catch (...) +{ + return vte::glib::set_error_from_exception(error); +} /** * vte_pty_set_utf8: @@ -282,7 +253,8 @@ vte_pty_get_size(VtePty *pty, gboolean vte_pty_set_utf8(VtePty *pty, gboolean utf8, - GError **error) + GError **error) noexcept +try { g_return_val_if_fail(VTE_IS_PTY(pty), FALSE); auto impl = IMPL(pty); @@ -291,11 +263,15 @@ vte_pty_set_utf8(VtePty *pty, if (impl->set_utf8(utf8)) return true; - vte::util::restore_errno errsv; + auto errsv = vte::libc::ErrnoSaver{}; g_set_error(error, G_IO_ERROR, g_io_error_from_errno(errsv), "%s failed: %s", "tc[sg]etattr", g_strerror(errsv)); return false; } +catch (...) +{ + return vte::glib::set_error_from_exception(error); +} /** * vte_pty_close: @@ -306,7 +282,7 @@ vte_pty_set_utf8(VtePty *pty, * Deprecated: 0.42 */ void -vte_pty_close (VtePty *pty) +vte_pty_close (VtePty *pty) noexcept { /* impl->close(); */ } @@ -324,17 +300,12 @@ enum { static gboolean vte_pty_initable_init (GInitable *initable, GCancellable *cancellable, - GError **error) + GError **error) noexcept +try { VtePty *pty = VTE_PTY (initable); VtePtyPrivate *priv = pty->priv; - if (cancellable != NULL) { - g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, - "Cancellable initialisation not supported"); - return FALSE; - } - if (priv->foreign_fd != -1) { priv->pty = vte::base::Pty::create_foreign(priv->foreign_fd, priv->flags); priv->foreign_fd = -1; @@ -343,13 +314,17 @@ vte_pty_initable_init (GInitable *initable, } if (priv->pty == nullptr) { - vte::util::restore_errno errsv; + auto errsv = vte::libc::ErrnoSaver{}; g_set_error(error, G_IO_ERROR, g_io_error_from_errno(errsv), "Failed to open PTY: %s", g_strerror(errsv)); return FALSE; } - return TRUE; + return !g_cancellable_set_error_if_cancelled(cancellable, error); +} +catch (...) +{ + return vte::glib::set_error_from_exception(error); } static void @@ -377,16 +352,20 @@ vte_pty_init (VtePty *pty) } static void -vte_pty_finalize (GObject *object) +vte_pty_finalize (GObject *object) noexcept +try { VtePty *pty = VTE_PTY (object); VtePtyPrivate *priv = pty->priv; - if (priv->pty != nullptr) - priv->pty->unref(); + auto implptr = vte::base::RefPtr{priv->pty}; // moved G_OBJECT_CLASS (vte_pty_parent_class)->finalize (object); } +catch (...) +{ + vte::log_exception(); +} static void vte_pty_get_property (GObject *object, @@ -484,7 +463,7 @@ vte_pty_class_init (VtePtyClass *klass) * Returns: the error domain for VTE PTY errors */ GQuark -vte_pty_error_quark(void) +vte_pty_error_quark(void) noexcept { static GQuark quark = 0; @@ -517,18 +496,23 @@ vte_pty_error_quark(void) * * Also, you MUST pass the %G_SPAWN_DO_NOT_REAP_CHILD flag. * + * Note also that %G_SPAWN_STDOUT_TO_DEV_NULL, %G_SPAWN_STDERR_TO_DEV_NULL, + * and %G_SPAWN_CHILD_INHERITS_STDIN are not supported, since stdin, stdout + * and stderr of the child process will always be connected to the PTY. + * * Note that you should set the PTY's size using vte_pty_set_size() before * spawning the child process, so that the child process has the correct * size from the start instead of starting with a default size and then - * shortly afterwards receiving a SIGWINCH signal. You should prefer - * using vte_terminal_pty_new_sync() which does this automatically. + * shortly afterwards receiving a SIGWINCH signal. You + * should prefer using vte_terminal_pty_new_sync() which does this + * automatically. * * Returns: (transfer full): a new #VtePty, or %NULL on error with @error filled in */ VtePty * vte_pty_new_sync (VtePtyFlags flags, GCancellable *cancellable, - GError **error) + GError **error) noexcept { return (VtePty *) g_initable_new (VTE_TYPE_PTY, cancellable, @@ -555,7 +539,7 @@ vte_pty_new_sync (VtePtyFlags flags, VtePty * vte_pty_new_foreign_sync (int fd, GCancellable *cancellable, - GError **error) + GError **error) noexcept { g_return_val_if_fail(fd != -1, nullptr); @@ -575,91 +559,285 @@ vte_pty_new_foreign_sync (int fd, * its flags changed */ int -vte_pty_get_fd (VtePty *pty) +vte_pty_get_fd (VtePty *pty) noexcept +try { g_return_val_if_fail(VTE_IS_PTY(pty), FALSE); - auto impl = IMPL(pty); - g_return_val_if_fail(impl != nullptr, FALSE); - - return impl->fd(); + return IMPL(pty)->fd(); +} +catch (...) +{ + vte::log_exception(); + return -1; } -typedef struct { - VtePty* m_pty; - char* m_working_directory; - char** m_argv; - char** m_envv; - GSpawnFlags m_spawn_flags; - GSpawnChildSetupFunc m_child_setup; - gpointer m_child_setup_data; - GDestroyNotify m_child_setup_data_destroy; - int m_timeout; -} AsyncSpawnData; - -static AsyncSpawnData* -async_spawn_data_new (VtePty* pty, - char const* working_directory, - char** argv, - char** envv, - GSpawnFlags spawn_flags, - GSpawnChildSetupFunc child_setup, - gpointer child_setup_data, - GDestroyNotify child_setup_data_destroy, - int timeout) +static constexpr inline auto +all_spawn_flags() noexcept { - auto data = g_new(AsyncSpawnData, 1); - - data->m_pty = (VtePty*)g_object_ref(pty); - data->m_working_directory = g_strdup(working_directory); - data->m_argv = g_strdupv(argv); - data->m_envv = envv ? g_strdupv(envv) : nullptr; - data->m_spawn_flags = spawn_flags; - data->m_child_setup = child_setup; - data->m_child_setup_data = child_setup_data; - data->m_child_setup_data_destroy = child_setup_data_destroy; - data->m_timeout = timeout; - - return data; + return (G_SPAWN_LEAVE_DESCRIPTORS_OPEN | + G_SPAWN_DO_NOT_REAP_CHILD | + G_SPAWN_SEARCH_PATH | + G_SPAWN_STDOUT_TO_DEV_NULL | + G_SPAWN_STDERR_TO_DEV_NULL | + G_SPAWN_CHILD_INHERITS_STDIN | + G_SPAWN_FILE_AND_ARGV_ZERO | + G_SPAWN_SEARCH_PATH_FROM_ENVP | + G_SPAWN_CLOEXEC_PIPES | + VTE_SPAWN_NO_PARENT_ENVV | + VTE_SPAWN_NO_SYSTEMD_SCOPE | + VTE_SPAWN_REQUIRE_SYSTEMD_SCOPE); } -static void -async_spawn_data_free(gpointer data_) +static constexpr inline auto +forbidden_spawn_flags() noexcept { - AsyncSpawnData *data = reinterpret_cast(data_); - - g_free(data->m_working_directory); - g_strfreev(data->m_argv); - g_strfreev(data->m_envv); - if (data->m_child_setup_data && data->m_child_setup_data_destroy) - data->m_child_setup_data_destroy(data->m_child_setup_data); - g_object_unref(data->m_pty); - - g_free(data); + return GSpawnFlags(G_SPAWN_LEAVE_DESCRIPTORS_OPEN | + G_SPAWN_STDOUT_TO_DEV_NULL | + G_SPAWN_STDERR_TO_DEV_NULL | + G_SPAWN_CHILD_INHERITS_STDIN); } -static void -async_spawn_run_in_thread(GTask *task, - gpointer object, - gpointer data_, - GCancellable *cancellable) +static constexpr inline auto +ignored_spawn_flags() noexcept { - AsyncSpawnData *data = reinterpret_cast(data_); + return GSpawnFlags(G_SPAWN_CLOEXEC_PIPES | + G_SPAWN_DO_NOT_REAP_CHILD); +} - GPid pid; - GError *error = NULL; - if (_vte_pty_spawn(data->m_pty, - data->m_working_directory, - data->m_argv, - data->m_envv, - (GSpawnFlags)data->m_spawn_flags, - data->m_child_setup, data->m_child_setup_data, - &pid, - data->m_timeout, - cancellable, - &error)) - g_task_return_pointer(task, g_memdup(&pid, sizeof(pid)), g_free); +static vte::base::SpawnContext +spawn_context_from_args(VtePty* pty, + char const* working_directory, + char const* const* argv, + char const* const* envv, + int const* fds, + int n_fds, + int const* fd_map_to, + int n_fd_map_to, + GSpawnFlags spawn_flags, + GSpawnChildSetupFunc child_setup, + void* child_setup_data, + GDestroyNotify child_setup_data_destroy) +{ + auto context = vte::base::SpawnContext{}; + context.set_pty(vte::glib::make_ref(pty)); + context.set_cwd(working_directory); + context.set_fallback_cwd(g_get_home_dir()); + context.set_child_setup(child_setup, child_setup_data, child_setup_data_destroy); + + if ((spawn_flags & G_SPAWN_SEARCH_PATH_FROM_ENVP) || + (spawn_flags & G_SPAWN_SEARCH_PATH)) + context.set_search_path(); + + if (spawn_flags & G_SPAWN_FILE_AND_ARGV_ZERO) + context.set_argv(argv[0], argv + 1); else - g_task_return_error(task, error); + context.set_argv(argv[0], argv); + + context.set_environ(envv); + if (spawn_flags & VTE_SPAWN_NO_PARENT_ENVV) + context.set_no_inherit_environ(); + + if (spawn_flags & VTE_SPAWN_NO_SYSTEMD_SCOPE) + context.set_no_systemd_scope(); + if (spawn_flags & VTE_SPAWN_REQUIRE_SYSTEMD_SCOPE) + context.set_require_systemd_scope(); + + context.add_fds(fds, n_fds); + context.add_map_fds(fds, n_fds, fd_map_to, n_fd_map_to); + + return context; +} + +bool +_vte_pty_spawn_sync(VtePty* pty, + char const* working_directory, + char const* const* argv, + char const* const* envv, + GSpawnFlags spawn_flags, + GSpawnChildSetupFunc child_setup, + gpointer child_setup_data, + GDestroyNotify child_setup_data_destroy, + GPid* child_pid /* out */, + int timeout, + GCancellable* cancellable, + GError** error) noexcept +try +{ + /* These are ignored or need not be passed since the behaviour is the default */ + g_warn_if_fail((spawn_flags & ignored_spawn_flags()) == 0); + + /* This may be upgraded to a g_return_if_fail in the future */ + g_warn_if_fail((spawn_flags & forbidden_spawn_flags()) == 0); + spawn_flags = GSpawnFlags(spawn_flags & ~forbidden_spawn_flags()); + + auto op = vte::base::SpawnOperation{spawn_context_from_args(pty, + working_directory, + argv, + envv, + nullptr, 0, + nullptr, 0, + spawn_flags, + child_setup, + child_setup_data, + child_setup_data_destroy), + timeout, + cancellable}; + + auto err = vte::glib::Error{}; + auto rv = vte::base::SpawnOperation::run_sync(op, child_pid, err); + if (!rv) + err.propagate(error); + + return rv; +} +catch (...) +{ + return vte::glib::set_error_from_exception(error); +} + +/* + * _vte_pty_check_envv: + * @strv: + * + * Validates that each element is of the form 'KEY=VALUE'. + */ +bool +_vte_pty_check_envv(char const* const* strv) noexcept +{ + if (!strv) + return true; + + for (int i = 0; strv[i]; ++i) { + const char *str = strv[i]; + const char *equal = strchr(str, '='); + if (equal == nullptr || equal == str) + return false; + } + + return true; +} + +/** + * vte_pty_spawn_with_fds_async: + * @pty: a #VtePty + * @working_directory: (allow-none): the name of a directory the command should start + * in, or %NULL to use the current working directory + * @argv: (array zero-terminated=1) (element-type filename): child's argument vector + * @envv: (allow-none) (array zero-terminated=1) (element-type filename): a list of environment + * variables to be added to the environment before starting the process, or %NULL + * @fds: (nullable) (array length=n_fds) (transfer none) (scope call): an array of file descriptors, or %NULL + * @n_fds: the number of file descriptors in @fds, or 0 if @fds is %NULL + * @map_fds: (nullable) (array length=n_map_fds) (transfer none) (scope call): an array of integers, or %NULL + * @n_map_fds: the number of elements in @map_fds, or 0 if @map_fds is %NULL + * @spawn_flags: flags from #GSpawnFlags + * @child_setup: (allow-none) (scope async): an extra child setup function to run in the child just before exec(), or %NULL + * @child_setup_data: (nullable) (closure child_setup): user data for @child_setup, or %NULL + * @child_setup_data_destroy: (nullable) (destroy child_setup_data): a #GDestroyNotify for @child_setup_data, or %NULL + * @timeout: a timeout value in ms, -1 for the default timeout, or G_MAXINT to wait indefinitely + * @cancellable: (allow-none): a #GCancellable, or %NULL + * @callback: (nullable) (scope async): a #GAsyncReadyCallback, or %NULL + * @user_data: (nullable) (closure callback): user data for @callback + * + * Starts the specified command under the pseudo-terminal @pty. + * The @argv and @envv lists should be %NULL-terminated. + * The "TERM" environment variable is automatically set to a default value, + * but can be overridden from @envv. + * @pty_flags controls logging the session to the specified system log files. + * + * Note also that %G_SPAWN_STDOUT_TO_DEV_NULL, %G_SPAWN_STDERR_TO_DEV_NULL, + * and %G_SPAWN_CHILD_INHERITS_STDIN are not supported in @spawn_flags, since + * stdin, stdout and stderr of the child process will always be connected to + * the PTY. Also %G_SPAWN_LEAVE_DESCRIPTORS_OPEN is not supported; and + * %G_SPAWN_DO_NOT_REAP_CHILD will always be added to @spawn_flags. + * + * If @fds is not %NULL, the child process will map the file descriptors from + * @fds according to @map_fds; @n_map_fds must be less or equal to @n_fds. + * This function will take ownership of the file descriptors in @fds; + * you must not use or close them after this call. All file descriptors in @fds + * must have the FD_CLOEXEC flag set on them; it will be unset in the child process + * before calling man:execve(2). Note also that no file descriptor may be mapped + * to stdin, stdout, or stderr (file descriptors 0, 1, or 2), since these will be + * assigned to the PTY. All open file descriptors apart from those mapped as above + * will be closed when execve() is called. + * + * Beginning with 0.60, and on linux only, and unless %VTE_SPAWN_NO_SYSTEMD_SCOPE is + * passed in @spawn_flags, the newly created child process will be moved to its own + * systemd user scope; and if %VTE_SPAWN_REQUIRE_SYSTEMD_SCOPE is passed, and creation + * of the systemd user scope fails, the whole spawn will fail. + * You can override the options used for the systemd user scope by + * providing a systemd override file for 'vte-spawn-.scope' unit. See man:systemd.unit(5) + * for further information. + * + * See vte_pty_new(), and vte_terminal_watch_child() for more information. + * + * Since: 0.62 + */ +void +vte_pty_spawn_with_fds_async(VtePty *pty, + char const* working_directory, + char const* const* argv, + char const* const* envv, + int const* fds, + int n_fds, + int const* fd_map_to, + int n_fd_map_to, + GSpawnFlags spawn_flags, + GSpawnChildSetupFunc child_setup, + gpointer child_setup_data, + GDestroyNotify child_setup_data_destroy, + int timeout, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) noexcept +try +{ + g_return_if_fail(argv != nullptr); + g_return_if_fail(argv[0] != nullptr); + g_return_if_fail(envv == nullptr || _vte_pty_check_envv(envv)); + g_return_if_fail(n_fds == 0 || fds != nullptr); + for (auto i = 0; i < n_fds; ++i) + g_return_if_fail(vte::libc::fd_get_cloexec(fds[i])); + g_return_if_fail(n_fd_map_to == 0 || fd_map_to != nullptr); + for (auto i = 0; i < n_fd_map_to; ++i) /* Invalid and stdin/out/err not allowed */ + g_return_if_fail(fd_map_to[i] < -1 || fd_map_to[i] > 2); + g_return_if_fail((spawn_flags & ~all_spawn_flags()) == 0); + g_return_if_fail(!child_setup_data || child_setup); + g_return_if_fail(!child_setup_data_destroy || child_setup_data); + g_return_if_fail(timeout >= -1); + g_return_if_fail(cancellable == nullptr || G_IS_CANCELLABLE (cancellable)); + + /* These are ignored or need not be passed since the behaviour is the default */ + g_warn_if_fail((spawn_flags & ignored_spawn_flags()) == 0); + + /* This may be upgraded to a g_return_if_fail in the future */ + g_warn_if_fail((spawn_flags & forbidden_spawn_flags()) == 0); + spawn_flags = GSpawnFlags(spawn_flags & ~forbidden_spawn_flags()); + + auto op = std::make_unique + (spawn_context_from_args(pty, + working_directory, + argv, + envv, + fds, n_fds, + fd_map_to, n_fd_map_to, + spawn_flags, + child_setup, + child_setup_data, + child_setup_data_destroy), + timeout, + cancellable); + + vte::base::SpawnOperation::run_async(std::move(op), + (void*)vte_pty_spawn_async, /* tag */ + callback, + user_data); +} +catch (...) +{ + // FIXME: make the function above exception safe. It needs to guarantee + // that the callback will be invoked regardless of when the throw occurred. + + vte::log_exception(); } /** @@ -672,33 +850,16 @@ async_spawn_run_in_thread(GTask *task, * variables to be added to the environment before starting the process, or %NULL * @spawn_flags: flags from #GSpawnFlags * @child_setup: (allow-none) (scope async): an extra child setup function to run in the child just before exec(), or %NULL - * @child_setup_data: (closure child_setup): user data for @child_setup, or %NULL - * @child_setup_data_destroy: (destroy child_setup_data): a #GDestroyNotify for @child_setup_data, or %NULL - * @timeout: a timeout value in ms, or -1 to wait indefinitely + * @child_setup_data: (nullable) (closure child_setup): user data for @child_setup, or %NULL + * @child_setup_data_destroy: (nullable) (destroy child_setup_data): a #GDestroyNotify for @child_setup_data, or %NULL + * @timeout: a timeout value in ms, -1 for the default timeout, or G_MAXINT to wait indefinitely * @cancellable: (allow-none): a #GCancellable, or %NULL + * @callback: (nullable) (scope async): a #GAsyncReadyCallback, or %NULL + * @user_data: (nullable) (closure callback): user data for @callback * - * Starts the specified command under the pseudo-terminal @pty. - * The @argv and @envv lists should be %NULL-terminated. - * The "TERM" environment variable is automatically set to a default value, - * but can be overridden from @envv. - * @pty_flags controls logging the session to the specified system log files. - * - * Note that %G_SPAWN_DO_NOT_REAP_CHILD will always be added to @spawn_flags. - * - * Note that all open file descriptors will be closed in the child. If you want - * to keep some file descriptor open for use in the child process, you need to - * use a child setup function that unsets the FD_CLOEXEC flag on that file - * descriptor. - * - * Beginning with 0.60, and on linux only, and unless %VTE_SPAWN_NO_SYSTEMD_SCOPE is - * passed in @spawn_flags, the newly created child process will be moved to its own - * systemd user scope; and if %VTE_SPAWN_REQUIRE_SYSTEMD_SCOPE is passed, and creation - * of the systemd user scope fails, the whole spawn will fail. - * You can override the options used for the systemd user scope by - * providing a systemd override file for 'vte-spawn-.scope' unit. See man:systemd.unit(5) - * for further information. - * - * See vte_pty_new(), g_spawn_async() and vte_terminal_watch_child() for more information. + * Like vte_pty_spawn_with_fds_async(), except that this function does not + * allow passing file descriptors to the child process. See vte_pty_spawn_with_fds_async() + * for more information. * * Since: 0.48 */ @@ -714,25 +875,14 @@ vte_pty_spawn_async(VtePty *pty, int timeout, GCancellable *cancellable, GAsyncReadyCallback callback, - gpointer user_data) + gpointer user_data) noexcept { - g_return_if_fail(argv != nullptr); - g_return_if_fail(!child_setup_data || child_setup); - g_return_if_fail(!child_setup_data_destroy || child_setup_data); - g_return_if_fail(cancellable == nullptr || G_IS_CANCELLABLE (cancellable)); - g_return_if_fail(callback); - - auto data = async_spawn_data_new(pty, - working_directory, argv, envv, - spawn_flags, - child_setup, child_setup_data, child_setup_data_destroy, - timeout); - - auto task = g_task_new(pty, cancellable, callback, user_data); - g_task_set_source_tag(task, (void*)vte_pty_spawn_async); - g_task_set_task_data(task, data, async_spawn_data_free); - g_task_run_in_thread(task, async_spawn_run_in_thread); - g_object_unref(task); + vte_pty_spawn_with_fds_async(pty, working_directory, argv, envv, + nullptr, 0, nullptr, 0, + spawn_flags, + child_setup, child_setup_data, child_setup_data_destroy, + timeout, cancellable, + callback, user_data); } /** @@ -747,27 +897,19 @@ vte_pty_spawn_async(VtePty *pty, * Since: 0.48 */ gboolean -vte_pty_spawn_finish(VtePty *pty, - GAsyncResult *result, - GPid *child_pid /* out */, - GError **error) +vte_pty_spawn_finish(VtePty* pty, + GAsyncResult* result, + GPid* child_pid /* out */, + GError** error) noexcept { - g_return_val_if_fail (VTE_IS_PTY (pty), FALSE); - g_return_val_if_fail (G_IS_TASK (result), FALSE); - g_return_val_if_fail(error == nullptr || *error == nullptr, FALSE); - - gpointer pidptr = g_task_propagate_pointer(G_TASK(result), error); - if (pidptr == nullptr) { - if (child_pid) - *child_pid = -1; - return FALSE; - } + g_return_val_if_fail (VTE_IS_PTY(pty), false); + g_return_val_if_fail (G_IS_TASK(result), false); + g_return_val_if_fail (g_task_get_source_tag(G_TASK (result)) == vte_pty_spawn_async, false); + g_return_val_if_fail(error == nullptr || *error == nullptr, false); + auto pid = g_task_propagate_int(G_TASK(result), error); if (child_pid) - *child_pid = *(GPid*)pidptr; - if (error) - *error = nullptr; + *child_pid = pid; - g_free(pidptr); - return TRUE; + return pid != -1; } diff --git a/src/vteptyinternal.hh b/src/vteptyinternal.hh index 12dcf38..7b3c9ed 100644 --- a/src/vteptyinternal.hh +++ b/src/vteptyinternal.hh @@ -1,18 +1,18 @@ /* * Copyright © 2019 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -22,14 +22,24 @@ vte::base::Pty* _vte_pty_get_impl(VtePty* pty); -gboolean _vte_pty_spawn(VtePty *pty, - const char *working_directory, - char **argv, - char **envv, - GSpawnFlags spawn_flags, - GSpawnChildSetupFunc child_setup, - gpointer child_setup_data, - GPid *child_pid /* out */, - int timeout, - GCancellable *cancellable, - GError **error); +bool _vte_pty_spawn_sync(VtePty* pty, + char const* working_directory, + char const* const* argv, + char const* const* envv, + GSpawnFlags spawn_flags, + GSpawnChildSetupFunc child_setup, + gpointer child_setup_data, + GDestroyNotify child_setup_data_destroy, + GPid* child_pid /* out */, + int timeout, + GCancellable* cancellable, + GError** error) noexcept; + +bool _vte_pty_check_envv(char const* const* envv) noexcept; + +bool _vte_pty_set_size(VtePty *pty, + int rows, + int columns, + int cell_height_px, + int cell_width_px, + GError **error) noexcept; diff --git a/src/vteregex.cc b/src/vteregex.cc index 26a55b4..3e60a9a 100644 --- a/src/vteregex.cc +++ b/src/vteregex.cc @@ -1,18 +1,18 @@ /* * Copyright © 2015 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ /** @@ -24,11 +24,14 @@ #include "config.h" +#include + #include "vtemacros.h" #include "vteenums.h" #include "vteregex.h" -#include "vtepcre2.h" +#include "glib-glue.hh" +#include "pcre2-glue.hh" #include "regex.hh" #include "vteregexinternal.hh" @@ -55,7 +58,7 @@ G_DEFINE_QUARK(vte-regex-error, vte_regex_error) * Returns: @regex */ VteRegex * -vte_regex_ref(VteRegex *regex) +vte_regex_ref(VteRegex *regex) noexcept { g_return_val_if_fail(regex != nullptr, nullptr); @@ -72,7 +75,7 @@ vte_regex_ref(VteRegex *regex) * Returns: %NULL */ VteRegex * -vte_regex_unref(VteRegex* regex) +vte_regex_unref(VteRegex* regex) noexcept { g_return_val_if_fail(regex != nullptr, nullptr); @@ -84,9 +87,73 @@ static VteRegex* vte_regex_new(vte::base::Regex::Purpose purpose, std::string_view const& pattern, uint32_t flags, - GError** error) + uint32_t extra_flags, + gsize* error_offset, + GError** error) noexcept +try { - return wrapper_from_regex(vte::base::Regex::compile(purpose, pattern, flags, error)); + return wrapper_from_regex(vte::base::Regex::compile(purpose, + pattern, + flags, + extra_flags, + error_offset, + error)); +} +catch (...) +{ + vte::glib::set_error_from_exception(error); + return nullptr; +} + +/** + * vte_regex_new_for_match_full: + * @pattern: a regex pattern string + * @pattern_length: the length of @pattern in bytes, or -1 if the + * string is NUL-terminated and the length is unknown + * @flags: PCRE2 compile flags + * @extra_flags: PCRE2 extra compile flags + * @error_offset: (out) (optional): return location to store the error offset + * @error: (nullable): return location for a #GError + * + * Compiles @pattern into a regex for use as a match regex + * with vte_terminal_match_add_regex() or + * vte_terminal_event_check_regex_simple(). + * + * See man:pcre2pattern(3) for information + * about the supported regex language, and man:pcre2api(3) for + * information about the supported @flags and @extra_flags. + * + * The regex will be compiled using PCRE2_UTF and + * possibly other flags, in addition to the flags supplied in @flags. + * + * If regex compilation fails, @error will be set and @error_offset point + * to error as an offset into @pattern. + * + * Returns: (transfer full): a newly created #VteRegex, or %NULL + * + * Since: 0.76 + */ +VteRegex * +vte_regex_new_for_match_full(char const* pattern, + gssize pattern_length, + uint32_t flags, + uint32_t extra_flags, + gsize* error_offset, + GError** error) noexcept +try +{ + auto const len = size_t{pattern_length == -1 ? strlen(pattern) : size_t(pattern_length)}; + return vte_regex_new(vte::base::Regex::Purpose::eMatch, + {pattern, len}, + flags, + extra_flags, + error_offset, + error); +} +catch (...) +{ + vte::glib::set_error_from_exception(error); + return nullptr; } /** @@ -102,10 +169,11 @@ vte_regex_new(vte::base::Regex::Purpose purpose, * vte_terminal_event_check_regex_simple(). * * See man:pcre2pattern(3) for information - * about the supported regex language. + * about the supported regex language, and man:pcre2api(3) for + * information about the supported @flags. * - * The regex will be compiled using %PCRE2_UTF and possibly other flags, in - * addition to the flags supplied in @flags. + * The regex will be compiled using PCRE2_UTF and + * possibly other flags, in addition to the flags supplied in @flags. * * Returns: (transfer full): a newly created #VteRegex, or %NULL with @error filled in */ @@ -113,14 +181,59 @@ VteRegex * vte_regex_new_for_match(const char *pattern, gssize pattern_length, guint32 flags, - GError **error) + GError **error) noexcept +{ + return vte_regex_new_for_match_full(pattern, pattern_length, flags, 0, nullptr, error); +} + +/** + * vte_regex_new_for_search_full: + * @pattern: a regex pattern string + * @pattern_length: the length of @pattern in bytes, or -1 if the + * string is NUL-terminated and the length is unknown + * @flags: PCRE2 compile flags + * @error_offset: (out) (optional): return location to store the error offset + * @error: (nullable): return location for a #GError + * + * Compiles @pattern into a regex for use as a search regex + * with vte_terminal_search_set_regex(). + * + * See man:pcre2pattern(3) for information + * about the supported regex language, and man:pcre2api(3) for + * information about the supported @flags and @extra_flags. + * + * The regex will be compiled using PCRE2_UTF and + * possibly other flags, in addition to the flags supplied in @flags. + * + * If regex compilation fails, @error will be set and @error_offset point + * to error as an offset into @pattern. + * + * Returns: (transfer full): a newly created #VteRegex, or %NULL + * + * Since: 0.76 + */ +VteRegex* +vte_regex_new_for_search_full(char const* pattern, + gssize pattern_length, + uint32_t flags, + uint32_t extra_flags, + gsize* error_offset, + GError** error) noexcept +try { auto const len = size_t{pattern_length == -1 ? strlen(pattern) : size_t(pattern_length)}; - return vte_regex_new(vte::base::Regex::Purpose::eMatch, + return vte_regex_new(vte::base::Regex::Purpose::eSearch, {pattern, len}, flags, + extra_flags, + error_offset, error); } +catch (...) +{ + vte::glib::set_error_from_exception(error); + return nullptr; +} /** * vte_regex_new_for_search: @@ -134,10 +247,11 @@ vte_regex_new_for_match(const char *pattern, * with vte_terminal_search_set_regex(). * * See man:pcre2pattern(3) for information - * about the supported regex language. + * about the supported regex language, and man:pcre2api(3) for + * information about the supported @flags. * - * The regex will be compiled using %PCRE2_UTF and possibly other flags, in - * addition to the flags supplied in @flags. + * The regex will be compiled using PCRE2_UTF and + * possibly other flags, in addition to the flags supplied in @flags. * * Returns: (transfer full): a newly created #VteRegex, or %NULL with @error filled in */ @@ -145,18 +259,16 @@ VteRegex * vte_regex_new_for_search(const char *pattern, gssize pattern_length, guint32 flags, - GError **error) + GError **error) noexcept { - auto const len = size_t{pattern_length == -1 ? strlen(pattern) : size_t(pattern_length)}; - return vte_regex_new(vte::base::Regex::Purpose::eSearch, - {pattern, len}, - flags, - error); + return vte_regex_new_for_search_full(pattern, pattern_length, flags, 0, nullptr, error); } /** * vte_regex_jit: * @regex: a #VteRegex + * @flags: PCRE2 JIT flags, or 0 + * @error: (nullable): return location for a #GError, or %NULL * * If the platform supports JITing, JIT compiles @regex. * @@ -166,12 +278,17 @@ vte_regex_new_for_search(const char *pattern, gboolean vte_regex_jit(VteRegex *regex, guint flags, - GError **error) + GError **error) noexcept +try { g_return_val_if_fail(regex != nullptr, false); return IMPL(regex)->jit(flags, error); } +catch (...) +{ + return vte::glib::set_error_from_exception(error); +} bool _vte_regex_has_purpose(VteRegex *regex, @@ -198,7 +315,7 @@ _vte_regex_has_multiline_compile_flag(VteRegex *regex) * @flags: PCRE2 match flags * @error: (nullable): return location for a #GError, or %NULL * - * See man:pcre2api(3) on pcre2_substitute() for more information. + * See man:pcre2api(3) and man:pcre2_substitute(3) for more information. * * Returns: (transfer full): the substituted string, or %NULL * if an error occurred @@ -210,7 +327,8 @@ vte_regex_substitute(VteRegex *regex, const char *subject, const char *replacement, guint32 flags, - GError **error) + GError **error) noexcept +try { g_return_val_if_fail(regex != nullptr, nullptr); g_return_val_if_fail(subject != nullptr, nullptr); @@ -220,3 +338,8 @@ vte_regex_substitute(VteRegex *regex, auto const r = IMPL(regex)->substitute(subject, replacement, flags, error); return r ? g_strndup(r->c_str(), r->size()) : nullptr; } +catch (...) +{ + vte::glib::set_error_from_exception(error); + return nullptr; +} diff --git a/src/vteregexinternal.hh b/src/vteregexinternal.hh index 8bc3952..da73e5d 100644 --- a/src/vteregexinternal.hh +++ b/src/vteregexinternal.hh @@ -1,18 +1,18 @@ /* * Copyright © 2015 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once diff --git a/src/vterowdata.cc b/src/vterowdata.cc index 7f9f6b4..cc1379b 100644 --- a/src/vterowdata.cc +++ b/src/vterowdata.cc @@ -1,19 +1,18 @@ /* * Copyright (C) 2002,2009 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . * * Red Hat Author(s): Nalin Dahyabhai, Behdad Esfahbod */ @@ -25,6 +24,8 @@ #include +#include +#include #include /* This will be true now that VteCell is POD, but make sure it'll be true @@ -52,7 +53,7 @@ _vte_cells_for_cell_array (VteCell *cells) if (G_UNLIKELY (!cells)) return NULL; - return (VteCells *) (((guchar *) cells) - G_STRUCT_OFFSET (VteCells, cells)); + return reinterpret_cast(((guchar *) cells) - G_STRUCT_OFFSET (VteCells, cells)); } static VteCells * @@ -154,13 +155,21 @@ void _vte_row_data_remove (VteRowData *row, gulong col) void _vte_row_data_fill (VteRowData *row, const VteCell *cell, gulong len) { if (row->len < len) { - gulong i; - if (G_UNLIKELY (!_vte_row_data_ensure (row, len))) return; - for (i = row->len; i < len; i++) - row->cells[i] = *cell; + std::fill_n(&row->cells[row->len], len - row->len, *cell); + row->len = len; + } +} + +/* This leaves the new cells uninitialized, potentially containing random data. + * It's the caller's responsibility to initialize them. */ +void _vte_row_data_expand (VteRowData *row, gulong len) +{ + if (row->len < len) { + if (G_UNLIKELY (!_vte_row_data_ensure (row, len))) + return; row->len = len; } diff --git a/src/vterowdata.hh b/src/vterowdata.hh index 10b76b6..199ebec 100644 --- a/src/vterowdata.hh +++ b/src/vterowdata.hh @@ -1,19 +1,18 @@ /* * Copyright (C) 2002 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ /* The interfaces in this file are subject to change at any time. */ @@ -79,6 +78,7 @@ void _vte_row_data_insert (VteRowData *row, gulong col, const VteCell *cell); void _vte_row_data_append (VteRowData *row, const VteCell *cell); void _vte_row_data_remove (VteRowData *row, gulong col); void _vte_row_data_fill (VteRowData *row, const VteCell *cell, gulong len); +void _vte_row_data_expand (VteRowData *row, gulong len); void _vte_row_data_shrink (VteRowData *row, gulong max_len); void _vte_row_data_copy (const VteRowData *src, VteRowData *dst); guint16 _vte_row_data_nonempty_length (const VteRowData *row); diff --git a/src/vteseq.cc b/src/vteseq.cc index 2d00cee..904837e 100644 --- a/src/vteseq.cc +++ b/src/vteseq.cc @@ -3,19 +3,18 @@ * Copyright © 2015 David Herrmann * Copyright © 2008-2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -24,7 +23,7 @@ #include #include #include -#ifdef HAVE_SYS_SYSLIMITS_H +#if __has_include() #include #endif @@ -70,10 +69,15 @@ enum { VTE_SGR_COLOR_SPEC_LEGACY = 5 }; +inline consteval int firmware_version() noexcept +{ + return (VTE_MAJOR_VERSION * 100 + VTE_MINOR_VERSION) * 100 + VTE_MICRO_VERSION; +} + void vte::parser::Sequence::print() const noexcept { -#ifdef VTE_DEBUG +#if VTE_DEBUG auto c = m_seq != nullptr ? terminator() : 0; char c_buf[7]; g_snprintf(c_buf, sizeof(c_buf), "%lc", c); @@ -88,7 +92,7 @@ vte::parser::Sequence::print() const noexcept } g_printerr(" ]"); } - if (m_seq->type == VTE_SEQ_OSC) { + if (m_seq->type == VTE_SEQ_OSC || m_seq->type == VTE_SEQ_DCS) { char* str = string_param(); g_printerr(" \"%s\"", str); g_free(str); @@ -230,13 +234,20 @@ Terminal::emit_resize_window(guint columns, * In VTE, a different technical approach is used. The cursor is advanced to * the invisible column on the right, but it's set back to the visible * rightmost column whenever necessary (that is, before handling any of the - * sequences that disable the special cased mode in xterm). (Bug 731155.) + * sequences that disable the special cased mode in xterm). + * + * Similarly, if a right margin is set up and the cursor moved just beyond + * that margin due to a graphic character (as opposed to a cursor moving + * escape sequence) then set back the cursor by one column. + * + * See https://gitlab.gnome.org/GNOME/vte/-/issues/2108 + * and https://gitlab.gnome.org/GNOME/vte/-/issues/2677 */ void -Terminal::ensure_cursor_is_onscreen() +Terminal::maybe_retreat_cursor() { - if (G_UNLIKELY (m_screen->cursor.col >= m_column_count)) - m_screen->cursor.col = m_column_count - 1; + m_screen->cursor.col = get_xterm_cursor_column(); + m_screen->cursor_advanced_by_graphic_character = false; } void @@ -248,8 +259,10 @@ Terminal::home_cursor() void Terminal::clear_screen() { - auto row = m_screen->cursor.row - m_screen->insert_delta; - auto initial = _vte_ring_next(m_screen->row_data); + maybe_retreat_cursor(); + + auto row = get_xterm_cursor_row(); + auto initial = m_screen->row_data->next(); /* Add a new screen's worth of rows. */ for (auto i = 0; i < m_row_count; i++) ring_append(true); @@ -257,6 +270,7 @@ Terminal::clear_screen() * newly-cleared area and scroll if need be. */ m_screen->insert_delta = initial; m_screen->cursor.row = row + m_screen->insert_delta; + m_screen->cursor_advanced_by_graphic_character = false; adjust_adjustments(); /* Redraw everything. */ invalidate_all(); @@ -270,11 +284,13 @@ Terminal::clear_current_line() { VteRowData *rowdata; - /* If the cursor is actually on the screen, clear data in the row + maybe_retreat_cursor(); + + /* If the cursor's row is covered by the ring, clear data in the row * which corresponds to the cursor. */ - if (_vte_ring_next(m_screen->row_data) > m_screen->cursor.row) { + if (long(m_screen->row_data->next()) > m_screen->cursor.row) { /* Get the data for the row which the cursor points to. */ - rowdata = _vte_ring_index_writable(m_screen->row_data, m_screen->cursor.row); + rowdata = m_screen->row_data->index_writable(m_screen->cursor.row); g_assert(rowdata != NULL); /* Remove it. */ _vte_row_data_shrink (rowdata, 0); @@ -295,14 +311,14 @@ void Terminal::clear_above_current() { /* Make the line just above the writable area hard wrapped. */ - if (m_screen->insert_delta > _vte_ring_delta(m_screen->row_data)) { + if (m_screen->insert_delta > long(m_screen->row_data->delta())) { set_hard_wrapped(m_screen->insert_delta - 1); } /* Clear data in all the writable rows above (excluding) the cursor's. */ for (auto i = m_screen->insert_delta; i < m_screen->cursor.row; i++) { - if (_vte_ring_next(m_screen->row_data) > i) { + if (long(m_screen->row_data->next()) > i) { /* Get the data for the row we're erasing. */ - auto rowdata = _vte_ring_index_writable(m_screen->row_data, i); + auto rowdata = m_screen->row_data->index_writable(i); g_assert(rowdata != NULL); /* Remove it. */ _vte_row_data_shrink (rowdata, 0); @@ -319,61 +335,10 @@ Terminal::clear_above_current() m_text_deleted_flag = TRUE; } -/* Scroll the text, but don't move the cursor. Negative = up, positive = down. */ -void -Terminal::scroll_text(vte::grid::row_t scroll_amount) -{ - vte::grid::row_t start, end; - if (m_scrolling_restricted) { - start = m_screen->insert_delta + m_scrolling_region.start; - end = m_screen->insert_delta + m_scrolling_region.end; - } else { - start = m_screen->insert_delta; - end = start + m_row_count - 1; - } - - while (_vte_ring_next(m_screen->row_data) <= end) - ring_append(false); - - if (scroll_amount > 0) { - /* Scroll down. */ - for (auto i = 0; i < scroll_amount; i++) { - ring_remove(end); - ring_insert(start, true); - } - /* Set the boundaries to hard wrapped where we tore apart the contents. - * Need to do it after scrolling down, for the end row to be the desired one. */ - set_hard_wrapped(start - 1); - set_hard_wrapped(end); - } else { - /* Set the boundaries to hard wrapped where we're about to tear apart the contents. - * Need to do it before scrolling up, for the end row to be the desired one. */ - set_hard_wrapped(start - 1); - set_hard_wrapped(end); - /* Scroll up. */ - for (auto i = 0; i < -scroll_amount; i++) { - ring_remove(start); - ring_insert(end, true); - } - } - - /* Repaint the affected lines. No need to extend, set_hard_wrapped() took care of - * invalidating the context lines if necessary. */ - invalidate_rows(start, end); - - /* Adjust the scrollbars if necessary. */ - adjust_adjustments(); - - /* We've modified the display. Make a note of it. */ - m_text_inserted_flag = TRUE; - m_text_deleted_flag = TRUE; -} - void Terminal::restore_cursor() { restore_cursor(m_screen); - ensure_cursor_is_onscreen(); } void @@ -398,19 +363,21 @@ Terminal::switch_screen(VteScreen *new_screen) * wouldn't make sense and could lead to crashes. * Ideally we'd carry the target URI itself, but I'm just lazy. * Also, run a GC before we switch away from that screen. */ - m_hyperlink_hover_idx = _vte_ring_get_hyperlink_at_position(m_screen->row_data, -1, -1, true, NULL); + m_hyperlink_hover_idx = m_screen->row_data->get_hyperlink_at_position(-1, -1, true, NULL); g_assert (m_hyperlink_hover_idx == 0); m_hyperlink_hover_uri = NULL; emit_hyperlink_hover_uri_changed(NULL); /* FIXME only emit if really changed */ - m_defaults.attr.hyperlink_idx = _vte_ring_get_hyperlink_idx(m_screen->row_data, NULL); + m_defaults.attr.hyperlink_idx = m_screen->row_data->get_hyperlink_idx(NULL); g_assert (m_defaults.attr.hyperlink_idx == 0); /* cursor.row includes insert_delta, adjust accordingly */ auto cr = m_screen->cursor.row - m_screen->insert_delta; auto cc = m_screen->cursor.col; + auto cadv = m_screen->cursor_advanced_by_graphic_character; m_screen = new_screen; m_screen->cursor.row = cr + m_screen->insert_delta; m_screen->cursor.col = cc; + m_screen->cursor_advanced_by_graphic_character = cadv; /* Make sure the ring is large enough */ ensure_row(); @@ -478,7 +445,7 @@ Terminal::update_mouse_protocol() noexcept void Terminal::set_mode_private(int mode, - bool set) noexcept + bool set) noexcept { /* Pre actions */ switch (mode) { @@ -500,6 +467,7 @@ Terminal::set_mode_private(int mode, */ if (m_modes_private.XTERM_DECCOLM()) { emit_resize_window(set ? 132 : 80, m_row_count); + m_scrolling_region.reset(); clear_screen(); home_cursor(); } @@ -520,6 +488,12 @@ Terminal::set_mode_private(int mode, */ break; + case vte::terminal::modes::Private::eDECLRMM: + if (!set) { + m_scrolling_region.reset_horizontal(); + } + break; + case vte::terminal::modes::Private::eXTERM_ALTBUF: [[fallthrough]]; case vte::terminal::modes::Private::eXTERM_OPT_ALTBUF: @@ -546,8 +520,7 @@ Terminal::set_mode_private(int mode, } /* Reset scrollbars and repaint everything. */ - gtk_adjustment_set_value(m_vadjustment.get(), - m_screen->scroll_delta); + queue_adjustment_value_changed(m_screen->scroll_delta); set_scrollback_lines(m_scrollback_lines); queue_contents_changed(); invalidate_all(); @@ -662,7 +635,7 @@ Terminal::set_character_replacement(unsigned slot) void Terminal::clear_to_bol() { - ensure_cursor_is_onscreen(); + maybe_retreat_cursor(); /* Get the data for the row which the cursor points to. */ auto rowdata = ensure_row(); @@ -693,15 +666,15 @@ Terminal::clear_to_bol() void Terminal::clear_below_current() { - ensure_cursor_is_onscreen(); + maybe_retreat_cursor(); /* If the cursor is actually on the screen, clear the rest of the * row the cursor is on and all of the rows below the cursor. */ VteRowData *rowdata; auto i = m_screen->cursor.row; - if (i < _vte_ring_next(m_screen->row_data)) { + if (i < long(m_screen->row_data->next())) { /* Get the data for the row we're clipping. */ - rowdata = _vte_ring_index_writable(m_screen->row_data, i); + rowdata = m_screen->row_data->index_writable(i); /* Clean up Tab/CJK fragments. */ if ((glong) _vte_row_data_length(rowdata) > m_screen->cursor.col) cleanup_fragments(m_screen->cursor.col, _vte_row_data_length(rowdata)); @@ -711,10 +684,10 @@ Terminal::clear_below_current() } /* Now for the rest of the lines. */ for (i = m_screen->cursor.row + 1; - i < _vte_ring_next(m_screen->row_data); + i < long(m_screen->row_data->next()); i++) { /* Get the data for the row we're removing. */ - rowdata = _vte_ring_index_writable(m_screen->row_data, i); + rowdata = m_screen->row_data->index_writable(i); /* Remove it. */ if (rowdata) _vte_row_data_shrink (rowdata, 0); @@ -726,8 +699,8 @@ Terminal::clear_below_current() i < m_screen->insert_delta + m_row_count; i++) { /* Retrieve the row's data, creating it if necessary. */ - if (_vte_ring_contains(m_screen->row_data, i)) { - rowdata = _vte_ring_index_writable (m_screen->row_data, i); + if (m_screen->row_data->contains(i)) { + rowdata = m_screen->row_data->index_writable(i); g_assert(rowdata != NULL); } else { rowdata = ring_append(false); @@ -757,10 +730,10 @@ Terminal::clear_to_eol() * influence the text flow, and serves as a perfect workaround against a new line * getting painted with the active background color (except for a possible flicker). */ - /* ensure_cursor_is_onscreen(); */ + /* maybe_retreat_cursor(); */ /* Get the data for the row which the cursor points to. */ - auto rowdata = ensure_row(); + auto rowdata = ensure_cursor(); g_assert(rowdata != NULL); if ((glong) _vte_row_data_length(rowdata) > m_screen->cursor.col) { /* Clean up Tab/CJK fragments. */ @@ -786,14 +759,29 @@ Terminal::clear_to_eol() * Terminal::set_cursor_column: * @col: the column. 0-based from 0 to m_column_count - 1 * - * Sets the cursor column to @col, clamped to the range 0..m_column_count-1. + * Sets the cursor column to @col. + * + * @col is relative relative to the DECSLRM scrolling region iff origin mode (DECOM) is enabled. */ void Terminal::set_cursor_column(vte::grid::column_t col) { _vte_debug_print(VTE_DEBUG_PARSER, "Moving cursor to column %ld.\n", col); - m_screen->cursor.col = CLAMP(col, 0, m_column_count - 1); + + vte::grid::column_t left_col, right_col; + if (m_modes_private.DEC_ORIGIN()) { + left_col = m_scrolling_region.left(); + right_col = m_scrolling_region.right(); + } else { + left_col = 0; + right_col = m_column_count - 1; + } + col += left_col; + col = CLAMP(col, left_col, right_col); + + m_screen->cursor.col = col; + m_screen->cursor_advanced_by_graphic_character = false; } void @@ -804,27 +792,31 @@ Terminal::set_cursor_column1(vte::grid::column_t col) /* * Terminal::set_cursor_row: - * @row: the row. 0-based and relative to the scrolling region + * @row: the row. 0-based * - * Sets the cursor row to @row. @row is relative to the scrolling region - * (0 if restricted scrolling is off). + * Sets the cursor row to @row. + * + * @row is relative to the scrolling DECSTBM scrolling region iff origin mode (DECOM) is enabled. */ void Terminal::set_cursor_row(vte::grid::row_t row) { - vte::grid::row_t start_row, end_row; - if (m_modes_private.DEC_ORIGIN() && - m_scrolling_restricted) { - start_row = m_scrolling_region.start; - end_row = m_scrolling_region.end; + _vte_debug_print(VTE_DEBUG_PARSER, + "Moving cursor to row %ld.\n", row); + + vte::grid::row_t top_row, bottom_row; + if (m_modes_private.DEC_ORIGIN()) { + top_row = m_scrolling_region.top(); + bottom_row = m_scrolling_region.bottom(); } else { - start_row = 0; - end_row = m_row_count - 1; + top_row = 0; + bottom_row = m_row_count - 1; } - row += start_row; - row = CLAMP(row, start_row, end_row); + row += top_row; + row = CLAMP(row, top_row, bottom_row); m_screen->cursor.row = row + m_screen->insert_delta; + m_screen->cursor_advanced_by_graphic_character = false; } void @@ -833,38 +825,17 @@ Terminal::set_cursor_row1(vte::grid::row_t row) set_cursor_row(row - 1); } -/* - * Terminal::get_cursor_row: - * - * Returns: the relative cursor row, 0-based and relative to the scrolling region - * if set (regardless of origin mode). - */ -vte::grid::row_t -Terminal::get_cursor_row_unclamped() const -{ - auto row = m_screen->cursor.row - m_screen->insert_delta; - /* Note that we do NOT check DEC_ORIGIN mode here! */ - if (m_scrolling_restricted) { - row -= m_scrolling_region.start; - } - return row; -} - -vte::grid::column_t -Terminal::get_cursor_column_unclamped() const -{ - return m_screen->cursor.col; -} - /* * Terminal::set_cursor_coords: - * @row: the row. 0-based and relative to the scrolling region + * @row: the row. 0-based * @col: the column. 0-based from 0 to m_column_count - 1 * - * Sets the cursor row to @row. @row is relative to the scrolling region - * (0 if restricted scrolling is off). + * Sets the cursor row to @row. * * Sets the cursor column to @col, clamped to the range 0..m_column_count-1. + * + * @row and @col are relative to the scrolling DECSTBM / DECSLRM scrolling region + * iff origin mode (DECOM) is enabled. */ void Terminal::set_cursor_coords(vte::grid::row_t row, @@ -882,79 +853,20 @@ Terminal::set_cursor_coords1(vte::grid::row_t row, set_cursor_row1(row); } -/* Delete a character at the current cursor position. */ void -Terminal::delete_character() -{ - VteRowData *rowdata; - long col; - - ensure_cursor_is_onscreen(); - - if (_vte_ring_next(m_screen->row_data) > m_screen->cursor.row) { - long len; - /* Get the data for the row which the cursor points to. */ - rowdata = _vte_ring_index_writable(m_screen->row_data, m_screen->cursor.row); - g_assert(rowdata != NULL); - col = m_screen->cursor.col; - len = _vte_row_data_length (rowdata); - - bool const not_default_bg = (m_color_defaults.attr.back() != VTE_DEFAULT_BG); - if (not_default_bg) { - _vte_row_data_fill(rowdata, &basic_cell, m_column_count); - len = m_column_count; - } - - /* Remove the column. */ - if (col < len) { - /* Clean up Tab/CJK fragments. */ - cleanup_fragments(col, col + 1); - _vte_row_data_remove (rowdata, col); - - if (not_default_bg) { - _vte_row_data_fill(rowdata, &m_color_defaults, m_column_count); - len = m_column_count; - } - set_hard_wrapped(m_screen->cursor.row); - /* Repaint this row's paragraph. */ - invalidate_row_and_context(m_screen->cursor.row); - } - } - - /* We've modified the display. Make a note of it. */ - m_text_deleted_flag = TRUE; -} - -void -Terminal::move_cursor_down(vte::grid::row_t rows) -{ - rows = CLAMP(rows, 1, m_row_count); - - // FIXMEchpe why not do this afterwards? - ensure_cursor_is_onscreen(); - - vte::grid::row_t end; - // FIXMEchpe why not check DEC_ORIGIN here? - if (m_scrolling_restricted && m_screen->cursor.row <= m_screen->insert_delta + m_scrolling_region.end) { - end = m_screen->insert_delta + m_scrolling_region.end; - } else { - end = m_screen->insert_delta + m_row_count - 1; - } - - m_screen->cursor.row = MIN(m_screen->cursor.row + rows, end); -} - -void -Terminal::erase_characters(long count) +Terminal::erase_characters(long count, + bool use_basic) { VteCell *cell; long col, i; - ensure_cursor_is_onscreen(); + maybe_retreat_cursor(); + + count = CLAMP(count, 1, m_column_count - m_screen->cursor.col); /* Clear out the given number of characters. */ auto rowdata = ensure_row(); - if (_vte_ring_next(m_screen->row_data) > m_screen->cursor.row) { + if (long(m_screen->row_data->next()) > m_screen->cursor.row) { g_assert(rowdata != NULL); /* Clean up Tab/CJK fragments. */ cleanup_fragments(m_screen->cursor.col, m_screen->cursor.col + count); @@ -968,10 +880,10 @@ Terminal::erase_characters(long count) /* Replace this cell with the current * defaults. */ cell = _vte_row_data_get_writable (rowdata, col); - *cell = m_color_defaults; + *cell = use_basic ? basic_cell : m_color_defaults; } else { /* Add new cells until we have one here. */ - _vte_row_data_fill (rowdata, &m_color_defaults, col + 1); + _vte_row_data_fill (rowdata, use_basic ? &basic_cell : &m_color_defaults, col + 1); } } } @@ -983,48 +895,111 @@ Terminal::erase_characters(long count) m_text_deleted_flag = TRUE; } -/* Insert a blank character. */ +/* Terminal::move_cursor_up: + * Cursor up by n rows (respecting the DECSTBM / DECSLRM scrolling region). + * + * See the "CUU, CUD, CUB, CUF" picture in ../doc/scrolling-region.txt. + * + * DEC STD 070 says not to move further if the cursor hits the margin outside of the scrolling area. + * Xterm follows this, and so do we. Reportedly (#2526) DEC terminals move the cursor despite their doc. + */ void -Terminal::insert_blank_character() +Terminal::move_cursor_up(vte::grid::row_t rows) { - ensure_cursor_is_onscreen(); + // FIXMEchpe allow 0 as no-op? + rows = CLAMP(rows, 1, m_row_count); - auto save = m_screen->cursor; - insert_char(' ', true, true); - m_screen->cursor = save; + //FIXMEchpe why not do this afterward? + maybe_retreat_cursor(); + + vte::grid::row_t top; + if (m_screen->cursor.row >= m_screen->insert_delta + m_scrolling_region.top()) { + top = m_screen->insert_delta + m_scrolling_region.top(); + } else { + top = m_screen->insert_delta; + } + + m_screen->cursor.row = MAX(m_screen->cursor.row - rows, top); + m_screen->cursor_advanced_by_graphic_character = false; } +/* Terminal::move_cursor_down: + * Cursor down by n rows (respecting the DECSTBM / DECSLRM scrolling region). + * + * See the "CUU, CUD, CUB, CUF" picture in ../doc/scrolling-region.txt. + * + * DEC STD 070 says not to move further if the cursor hits the margin outside of the scrolling area. + * Xterm follows this, and so do we. Reportedly (#2526) DEC terminals move the cursor despite their doc. + */ +void +Terminal::move_cursor_down(vte::grid::row_t rows) +{ + rows = CLAMP(rows, 1, m_row_count); + + // FIXMEchpe why not do this afterwards? + maybe_retreat_cursor(); + + vte::grid::row_t bottom; + if (m_screen->cursor.row <= m_screen->insert_delta + m_scrolling_region.bottom()) { + bottom = m_screen->insert_delta + m_scrolling_region.bottom(); + } else { + bottom = m_screen->insert_delta + m_row_count - 1; + } + + m_screen->cursor.row = MIN(m_screen->cursor.row + rows, bottom); + m_screen->cursor_advanced_by_graphic_character = false; +} + +/* Terminal::move_cursor_backward: + * Cursor left by n columns (respecting the DECSTBM / DECSLRM scrolling region). + * + * See the "CUU, CUD, CUB, CUF" picture in ../doc/scrolling-region.txt. + * + * DEC STD 070 says not to move further if the cursor hits the margin outside of the scrolling area. + * Xterm follows this, and so do we. Reportedly (#2526) DEC terminals move the cursor despite their doc. + */ void Terminal::move_cursor_backward(vte::grid::column_t columns) { - ensure_cursor_is_onscreen(); + columns = CLAMP(columns, 1, m_column_count); - auto col = get_cursor_column_unclamped(); - columns = CLAMP(columns, 1, col); - set_cursor_column(col - columns); + maybe_retreat_cursor(); + + vte::grid::column_t left; + if (m_screen->cursor.col >= m_scrolling_region.left()) { + left = m_scrolling_region.left(); + } else { + left = 0; + } + + m_screen->cursor.col = MAX(m_screen->cursor.col - columns, left); + m_screen->cursor_advanced_by_graphic_character = false; } +/* Terminal::move_cursor_forward: + * Cursor right by n columns (respecting the DECSTBM / DECSLRM scrolling region). + * + * See the "CUU, CUD, CUB, CUF" picture in ../doc/scrolling-region.txt. + * + * DEC STD 070 says not to move further if the cursor hits the margin outside of the scrolling area. + * Xterm follows this, and so do we. Reportedly (#2526) DEC terminals move the cursor despite their doc. + */ void Terminal::move_cursor_forward(vte::grid::column_t columns) { columns = CLAMP(columns, 1, m_column_count); - ensure_cursor_is_onscreen(); + maybe_retreat_cursor(); - /* The cursor can be further to the right, don't move in that case. */ - auto col = get_cursor_column_unclamped(); - if (col < m_column_count) { - /* There's room to move right. */ - set_cursor_column(col + columns); - } -} + vte::grid::column_t right; + if (m_screen->cursor.col <= m_scrolling_region.right()) { + right = m_scrolling_region.right(); + } else { + right = m_column_count - 1; + } -void -Terminal::line_feed() -{ - ensure_cursor_is_onscreen(); - cursor_down(true); - maybe_apply_bidi_attributes(VTE_BIDI_FLAG_ALL); + m_screen->cursor.col = MIN(m_screen->cursor.col + columns, right); + m_screen->cursor_advanced_by_graphic_character = false; } void @@ -1033,8 +1008,16 @@ Terminal::move_cursor_tab_backward(int count) if (count == 0) return; - auto const newcol = m_tabstops.get_previous(get_cursor_column(), count, 0); - set_cursor_column(newcol); + auto const col = get_xterm_cursor_column(); + + /* Find the count'th previous tabstop, but don't cross the left margin. + * The exact desired behavior is debated, though. + * See https://gitlab.gnome.org/GNOME/vte/-/issues/2526#note_1879956 */ + auto const stop = col >= m_scrolling_region.left() ? m_scrolling_region.left() : 0; + auto const newcol = m_tabstops.get_previous(col, count, stop); + + m_screen->cursor.col = newcol; + m_screen->cursor_advanced_by_graphic_character = false; } void @@ -1043,14 +1026,23 @@ Terminal::move_cursor_tab_forward(int count) if (count == 0) return; - auto const col = get_cursor_column(); + auto const col = get_xterm_cursor_column(); - /* Find the next tabstop, but don't go beyond the end of the line */ - int const newcol = m_tabstops.get_next(col, count, m_column_count - 1); + /* If a printable character would wrap then a TAB does nothing; + * most importantly, does not snap back the cursor. + * https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/3461 */ + if (col < m_screen->cursor.col) + return; - /* Make sure we don't move cursor back (see bug #340631) */ - // FIXMEchpe how could this happen!? - if (col >= newcol) + /* Find the count'th next tabstop, but don't cross the right margin. + * The exact desired behavior is debated, though. + * See https://gitlab.gnome.org/GNOME/vte/-/issues/2526#note_1879956 */ + auto const stop = col <= m_scrolling_region.right() ? m_scrolling_region.right() : m_column_count - 1; + auto const newcol = m_tabstops.get_next(col, count, stop); + + /* If the cursor didn't advance then nothing left to do. */ + vte_assert_cmpint((int)newcol, >=, col); + if ((int)newcol == col) return; /* Smart tab handling: bug 353610 @@ -1077,11 +1069,8 @@ Terminal::move_cursor_tab_forward(int count) if (col >= old_len && (newcol - col) <= VTE_TAB_WIDTH_MAX) { glong i; VteCell *cell = _vte_row_data_get_writable (rowdata, col); - VteCell tab = *cell; - tab.attr.set_columns(newcol - col); - tab.c = '\t'; - /* Save tab char */ - *cell = tab; + cell->c = '\t'; + cell->attr.set_columns(newcol - col); /* And adjust the fragments */ for (i = col + 1; i < newcol; i++) { cell = _vte_row_data_get_writable (rowdata, i); @@ -1094,26 +1083,32 @@ Terminal::move_cursor_tab_forward(int count) /* Repaint the cursor. */ invalidate_row(m_screen->cursor.row); m_screen->cursor.col = newcol; + m_screen->cursor_advanced_by_graphic_character = false; } void -Terminal::move_cursor_up(vte::grid::row_t rows) +Terminal::carriage_return() { - // FIXMEchpe allow 0 as no-op? - rows = CLAMP(rows, 1, m_row_count); + /* Xterm and DEC STD 070 p5-58 agree that if the cursor is to the left + * of the left margin then move it to the first column. + * They disagree whether to stop at the left margin if the cursor is to + * the right of the left margin, but outside of the top/bottom margins. + * Follow Xterm's behavior for now, subject to change if needed, as per + * the discussions at https://gitlab.gnome.org/GNOME/vte/-/issues/2526 */ + if (m_screen->cursor.col >= m_scrolling_region.left()) { + m_screen->cursor.col = m_scrolling_region.left(); + } else { + m_screen->cursor.col = 0; + } + m_screen->cursor_advanced_by_graphic_character = false; +} - //FIXMEchpe why not do this afterward? - ensure_cursor_is_onscreen(); - - vte::grid::row_t start; - //FIXMEchpe why not check DEC_ORIGIN mode here? - if (m_scrolling_restricted && m_screen->cursor.row >= m_screen->insert_delta + m_scrolling_region.start) { - start = m_screen->insert_delta + m_scrolling_region.start; - } else { - start = m_screen->insert_delta; - } - - m_screen->cursor.row = MAX(m_screen->cursor.row - rows, start); +void +Terminal::line_feed() +{ + maybe_retreat_cursor(); + cursor_down_with_scrolling(true); + maybe_apply_bidi_attributes(VTE_BIDI_FLAG_ALL); } /* @@ -1281,102 +1276,6 @@ Terminal::erase_in_line(vte::parser::Sequence const& seq) m_text_deleted_flag = TRUE; } -void -Terminal::insert_lines(vte::grid::row_t param) -{ - vte::grid::row_t start, end, i; - - /* Find the region we're messing with. */ - auto row = m_screen->cursor.row; - if (m_scrolling_restricted) { - start = m_screen->insert_delta + m_scrolling_region.start; - end = m_screen->insert_delta + m_scrolling_region.end; - } else { - start = m_screen->insert_delta; - end = m_screen->insert_delta + m_row_count - 1; - } - - /* Don't do anything if the cursor is outside of the scrolling region: DEC STD 070 & bug #199. */ - if (m_screen->cursor.row < start || m_screen->cursor.row > end) - return; - - /* Only allow to insert as many lines as there are between this row - * and the end of the scrolling region. See bug #676090. - */ - auto limit = end - row + 1; - param = MIN (param, limit); - - for (i = 0; i < param; i++) { - /* Clear a line off the end of the region and add one to the - * top of the region. */ - ring_remove(end); - ring_insert(row, true); - } - - /* Set the boundaries to hard wrapped where we tore apart the contents. - * Need to do it after scrolling down, for the end row to be the desired one. */ - set_hard_wrapped(row - 1); - set_hard_wrapped(end); - - m_screen->cursor.col = 0; - - /* Repaint the affected lines. No need to extend, set_hard_wrapped() took care of - * invalidating the context lines if necessary. */ - invalidate_rows(row, end); - /* Adjust the scrollbars if necessary. */ - adjust_adjustments(); - /* We've modified the display. Make a note of it. */ - m_text_inserted_flag = TRUE; -} - -void -Terminal::delete_lines(vte::grid::row_t param) -{ - vte::grid::row_t start, end, i; - - /* Find the region we're messing with. */ - auto row = m_screen->cursor.row; - if (m_scrolling_restricted) { - start = m_screen->insert_delta + m_scrolling_region.start; - end = m_screen->insert_delta + m_scrolling_region.end; - } else { - start = m_screen->insert_delta; - end = m_screen->insert_delta + m_row_count - 1; - } - - /* Don't do anything if the cursor is outside of the scrolling region: DEC STD 070 & bug #199. */ - if (m_screen->cursor.row < start || m_screen->cursor.row > end) - return; - - /* Set the boundaries to hard wrapped where we're about to tear apart the contents. - * Need to do it before scrolling up, for the end row to be the desired one. */ - set_hard_wrapped(row - 1); - set_hard_wrapped(end); - - /* Only allow to delete as many lines as there are between this row - * and the end of the scrolling region. See bug #676090. - */ - auto limit = end - row + 1; - param = MIN (param, limit); - - /* Clear them from below the current cursor. */ - for (i = 0; i < param; i++) { - /* Insert a line at the end of the region and remove one from - * the top of the region. */ - ring_remove(row); - ring_insert(end, true); - } - m_screen->cursor.col = 0; - - /* Repaint the affected lines. No need to extend, set_hard_wrapped() took care of - * invalidating the context lines if necessary. */ - invalidate_rows(row, end); - /* Adjust the scrollbars if necessary. */ - adjust_adjustments(); - /* We've modified the display. Make a note of it. */ - m_text_deleted_flag = TRUE; -} - bool Terminal::get_osc_color_index(int osc, int value, @@ -1510,8 +1409,10 @@ Terminal::reset_color(vte::parser::Sequence const& seq, while (token != endtoken) { int value; - if (!token.number(value)) + if (!token.number(value)) { + ++token; continue; + } int index; if (get_osc_color_index(osc, value, index) && @@ -1542,7 +1443,7 @@ Terminal::set_current_directory_uri(vte::parser::Sequence const& seq, } m_current_directory_uri_pending.swap(uri); - m_current_directory_uri_changed = true; + m_pending_changes |= vte::to_integral(PendingChanges::CWD); } void @@ -1565,7 +1466,7 @@ Terminal::set_current_file_uri(vte::parser::Sequence const& seq, } m_current_file_uri_pending.swap(uri); - m_current_file_uri_changed = true; + m_pending_changes |= vte::to_integral(PendingChanges::CWF); } void @@ -1629,18 +1530,49 @@ Terminal::set_current_hyperlink(vte::parser::Sequence const& seq, _vte_debug_print (VTE_DEBUG_HYPERLINK, "OSC 8: id;uri=\"%s\"\n", hyperlink.data()); - idx = _vte_ring_get_hyperlink_idx(m_screen->row_data, hyperlink.data()); + idx = m_screen->row_data->get_hyperlink_idx(hyperlink.data()); } else { if (G_UNLIKELY(len > VTE_HYPERLINK_URI_LENGTH_MAX)) _vte_debug_print (VTE_DEBUG_HYPERLINK, "Overlong URI ignored (len %" G_GSIZE_FORMAT ")\n", len); /* idx = 0; also remove the previous current_idx so that it can be GC'd now. */ - idx = _vte_ring_get_hyperlink_idx(m_screen->row_data, nullptr); + idx = m_screen->row_data->get_hyperlink_idx(nullptr); } m_defaults.attr.hyperlink_idx = idx; } +void +Terminal::set_current_shell_integration_mode(vte::parser::Sequence const& seq, + vte::parser::StringTokeniser::const_iterator& token, + vte::parser::StringTokeniser::const_iterator const& endtoken) noexcept +{ + if (token != endtoken && token.size_remaining() > 0) { + std::string mode = *token; + if (mode == "A") { + m_defaults.attr.set_shellintegration(ShellIntegrationMode::ePROMPT); + } else if (mode == "B") { + m_defaults.attr.set_shellintegration(ShellIntegrationMode::eCOMMAND); + } else if (mode == "C") { + m_defaults.attr.set_shellintegration(ShellIntegrationMode::eNORMAL); + } else if (mode == "D") { + /* This deliberately doesn't start a different mode. Ignore for now. */ + } else if (mode == "L") { + /* Maybe insert some CR LFs, with the purpose of making sure that the + * shell prompt starts on its own paragraph (i.e. just after a hard wrap). + * See https://gitlab.gnome.org/GNOME/vte/-/issues/2681#note_1911689. + * + * (This doesn't start a new mode, so the method name is not quite accurate. Nevermind.) */ + while (m_screen->cursor.col > 0 || + m_screen->row_data->is_soft_wrapped(m_screen->cursor.row - 1)) { + set_cursor_column(0); + cursor_down_with_scrolling(true); + } + maybe_apply_bidi_attributes(VTE_BIDI_FLAG_ALL); + } + } +} + /* * Command Handlers * This is the unofficial documentation of all the VTE_CMD_* definitions. @@ -1688,7 +1620,7 @@ Terminal::GRAPHIC(vte::parser::Sequence const& seq) return 0; #endif - insert_char(seq.terminator(), false, false); + insert_char(seq.terminator(), false); } void @@ -1848,12 +1780,7 @@ Terminal::BS(vte::parser::Sequence const& seq) screen_cursor_left(screen, 1); #endif - ensure_cursor_is_onscreen(); - - if (m_screen->cursor.col > 0) { - /* There's room to move left, so do so. */ - m_screen->cursor.col--; - } + move_cursor_backward(1); } void @@ -1863,8 +1790,8 @@ Terminal::CBT(vte::parser::Sequence const& seq) * CBT - cursor-backward-tabulation * Move the cursor @args[0] tabs backwards (to the left). The * current cursor cell, in case it's a tab, is not counted. - * Furthermore, the cursor cannot be moved beyond position 0 and - * it will stop there. + * Furthermore, the cursor cannot be moved beyond the left margin + * and it will stop there. * * Defaults: * args[0]: 1 @@ -1934,7 +1861,7 @@ Terminal::CHT(vte::parser::Sequence const& seq) * CHT - cursor-horizontal-forward-tabulation * Move the cursor @args[0] tabs forward (to the right) (presentation). * The current cursor cell, in case it's a tab, is not counted. - * Furthermore, the cursor cannot be moved beyond the rightmost cell + * Furthermore, the cursor cannot be moved beyond the right margin * and will stop there. * * Arguments: @@ -1970,9 +1897,8 @@ Terminal::CNL(vte::parser::Sequence const& seq) { /* * CNL - cursor-next-line - * Move the cursor @args[0] lines down. - * - * TODO: Does this stop at the bottom or cause a scroll-up? + * Move the cursor @args[0] lines down, without scrolling, stopping at the bottom margin. + * Also moves the cursor all the way to the left, stopping at the left margin. * * Arguments: * args[0]: number of lines @@ -1992,7 +1918,7 @@ Terminal::CNL(vte::parser::Sequence const& seq) screen_cursor_down(screen, num, false); #endif - set_cursor_column1(1); + carriage_return(); auto value = seq.collect1(0, 1); move_cursor_down(value); @@ -2003,7 +1929,8 @@ Terminal::CPL(vte::parser::Sequence const& seq) { /* * CPL - cursor-preceding-line - * Move the cursor @args[0] lines up, without scrolling. + * Move the cursor @args[0] lines up, without scrolling, stoppng at the top margin. + * Also moves the cursor all the way to the left, stopping at the left margin. * * Arguments: * args[0]: number of lines @@ -2023,7 +1950,7 @@ Terminal::CPL(vte::parser::Sequence const& seq) screen_cursor_up(screen, num, false); #endif - set_cursor_column(0); + carriage_return(); auto const value = seq.collect1(0, 1); move_cursor_up(value); @@ -2034,7 +1961,7 @@ Terminal::CR(vte::parser::Sequence const& seq) { /* * CR - carriage-return - * Move the cursor to the left margin on the current line. + * Move the cursor to the left margin or to the left edge on the current line. * * References: ECMA-48 § 8.3.15 */ @@ -2043,7 +1970,7 @@ Terminal::CR(vte::parser::Sequence const& seq) screen_cursor_set(screen, 0, screen->state.cursor_y); #endif - set_cursor_column(0); + carriage_return(); } void @@ -2062,7 +1989,7 @@ Terminal::CTC(vte::parser::Sequence const& seq) case -1: case 0: /* Set tabstop at the current cursor position */ - m_tabstops.set(get_cursor_column()); + m_tabstops.set(get_xterm_cursor_column()); break; case 1: @@ -2071,7 +1998,7 @@ Terminal::CTC(vte::parser::Sequence const& seq) case 2: /* Clear tabstop at the current cursor position */ - m_tabstops.unset(get_cursor_column()); + m_tabstops.unset(get_xterm_cursor_column()); break; case 3: @@ -2376,7 +2303,18 @@ Terminal::DA1(vte::parser::Sequence const& seq) if (seq.collect1(0, 0) != 0) return; - reply(seq, VTE_REPLY_DECDA1R, {65, 1, 9}); + // When testing, use level 5 (VT525); otherwise be more honest and + // use level 1 (VT100-ish) since we don't implement some/many of the + // things the higher level mandates. + // See https://gitlab.gnome.org/GNOME/vte/-/issues/2724 + auto const level = g_test_flags ? 65 : 61; + + reply(seq, VTE_REPLY_DECDA1R, + {level, + 1, // 132-column mode + 21, // horizontal scrolling + 22 // colour text + }); } void @@ -2389,24 +2327,31 @@ Terminal::DA2(vte::parser::Sequence const& seq) * informational-only and should not be used by the host to detect * terminal features. * - * Reply: DECDA2R (CSI > 65 ; FIRMWARE ; KEYBOARD c) + * Reply: DECDA2R (CSI > 65 ; FIRMWARE ; KEYBOARD [; OPTION…]* c) * where 65 is fixed for VT525 color terminals, the last terminal-line that * increased this number (64 for VT520). FIRMWARE is the firmware * version encoded as major/minor (20 == 2.0) and KEYBOARD is 0 for STD - * keyboard and 1 for PC keyboards. + * keyboard and 1 for PC keyboards. None or more OPTION values may + * be present, indicating which options are installed in the device. * * We replace the firmware-version with the VTE version so clients * can decode it again. * * References: VT525 + * DECSTD 070 p4–24 */ /* Param != 0 means this is a reply, not a request */ if (seq.collect1(0, 0) != 0) return; - int const version = (VTE_MAJOR_VERSION * 100 + VTE_MINOR_VERSION) * 100 + VTE_MICRO_VERSION; - reply(seq, VTE_REPLY_DECDA2R, {65, version, 1}); + // When testing, use level 5 (VT525); otherwise be more honest and + // use level 1 (VT100-ish) since we don't implement some/many of the + // things the higher level mandates. + // See https://gitlab.gnome.org/GNOME/vte/-/issues/2724 + auto const level = g_test_flags ? 65 : 61; + + reply(seq, VTE_REPLY_DECDA2R, {level, firmware_version(), 1}); } void @@ -2524,12 +2469,23 @@ Terminal::DCH(vte::parser::Sequence const& seq) screen->age); #endif - auto const value = seq.collect1(0, 1, 1, int(m_column_count - m_screen->cursor.col)); + auto cursor_row = get_xterm_cursor_row(); + auto cursor_col = get_xterm_cursor_column(); - // FIXMEchpe pass count to delete_character() and simplify - // to only cleanup fragments once - for (auto i = 0; i < value; i++) - delete_character(); + /* If the cursor (xterm-like interpretation when about to wrap) is horizontally outside + * the DECSLRM margins then do nothing. */ + if (cursor_col < m_scrolling_region.left() || cursor_col > m_scrolling_region.right()) { + return; + } + + maybe_retreat_cursor(); + + auto const count = seq.collect1(0, 1); + /* Scroll left in a custom region: only the cursor's row, from the cursor to the DECSLRM right margin. */ + auto scrolling_region{m_scrolling_region}; + scrolling_region.set_vertical(cursor_row, cursor_row); + scrolling_region.set_horizontal(cursor_col, scrolling_region.right()); + scroll_text_left(scrolling_region, count, true /* fill */); } void @@ -2562,16 +2518,18 @@ Terminal::DECALN(vte::parser::Sequence const& seq) * References: VT525 */ - // FIXMEchpe! reset margins and home cursor + m_scrolling_region.reset(); + m_modes_private.set_DEC_ORIGIN(false); + home_cursor(); for (auto row = m_screen->insert_delta; row < m_screen->insert_delta + m_row_count; row++) { /* Find this row. */ - while (_vte_ring_next(m_screen->row_data) <= row) + while (long(m_screen->row_data->next()) <= row) ring_append(false); adjust_adjustments(); - auto rowdata = _vte_ring_index_writable (m_screen->row_data, row); + auto rowdata = m_screen->row_data->index_writable(row); g_assert(rowdata != NULL); /* Clear this row. */ _vte_row_data_shrink (rowdata, 0); @@ -2662,9 +2620,10 @@ Terminal::DECBI(vte::parser::Sequence const& seq) * DECBI adds a new column at the left margin with no visual attributes. * DECBI does not affect the margins. If the cursor is beyond the * left-margin at the left border, then the terminal ignores DECBI. - * - * Probably not worth implementing. */ + + maybe_retreat_cursor(); + cursor_left_with_scrolling(true); } void @@ -2781,10 +2740,28 @@ Terminal::DECDC(vte::parser::Sequence const& seq) /* * DECDC - delete-column * - * References: VT525 + * Defaults: + * args[0]: 1 * - * Probably not worth implementing. + * References: VT525 */ + + auto cursor_row = get_xterm_cursor_row(); + auto cursor_col = get_xterm_cursor_column(); + + /* If the cursor (xterm-like interpretation when about to wrap) is outside + * the DECSTBM / DECSLRM scrolling region then do nothing. */ + if (!m_scrolling_region.contains_row_col(cursor_row, cursor_col)) { + return; + } + + /* As per xterm, do not clear the "about to wrap" state, so no maybe_retreat_cursor() here. */ + + auto const count = seq.collect1(0, 1); + /* Scroll left in a custom region: the left is at the cursor, the rest is according to DECSTBM / DECSLRM. */ + auto scrolling_region{m_scrolling_region}; + scrolling_region.set_horizontal(cursor_col, scrolling_region.right()); + scroll_text_left(scrolling_region, count, true /* fill */); } void @@ -2986,8 +2963,26 @@ Terminal::DECFI(vte::parser::Sequence const& seq) * receives DECFI, then the terminal ignores DECFI. * * References: VT525 + */ + + /* Unlike the DECBI, IND, RI counterparts, this one usually doesn't clear the + * "about to wrap" state in xterm. However, it clears it if the cursor is at + * the right edge of the terminal, beyond the right margin. */ + if (m_screen->cursor.col == m_column_count && + m_scrolling_region.right() < m_column_count - 1) { + maybe_retreat_cursor(); + } + cursor_right_with_scrolling(true); +} + +void +Terminal::DECFNK(vte::parser::Sequence const& seq) +{ + /* + * DECFNK - function key (or XTERM bracketed paste) * - * Probably not worth implementing. + * References: VT525 + * XTERM */ } @@ -3019,7 +3014,7 @@ Terminal::DECFRA(vte::parser::Sequence const& seq) * and cursor position are unchanged. * * Note: DECSACE selects whether this function operates on the - * rectangular area or the data stream between the star and end + * rectangular area or the data stream between the start and end * positions. * * References: VT525 @@ -3031,6 +3026,7 @@ Terminal::DECFRA(vte::parser::Sequence const& seq) * either each UTF-8 byte in a subparam of its own, or just split * the unicode plane off into the leading subparam (plane:remaining 16 bits). * Or by using the last graphic character for it, like REP. + * See also the changes wrt. UTF-8 handling here in XTERM 357. */ } @@ -3044,9 +3040,24 @@ Terminal::DECIC(vte::parser::Sequence const& seq) * args[0]: 1 * * References: VT525 - * - * Probably not worth implementing. */ + + auto cursor_row = get_xterm_cursor_row(); + auto cursor_col = get_xterm_cursor_column(); + + /* If the cursor (xterm-like interpretation when about to wrap) is outside + * the DECSTBM / DECSLRM scrolling region then do nothing. */ + if (!m_scrolling_region.contains_row_col(cursor_row, cursor_col)) { + return; + } + + /* As per xterm, do not clear the "about to wrap" state, so no maybe_retreat_cursor() here. */ + + auto const count = seq.collect1(0, 1); + /* Scroll right in a custom region: the left is at the cursor, the rest is according to DECSTBM / DECSLRM. */ + auto scrolling_region{m_scrolling_region}; + scrolling_region.set_horizontal(cursor_col, scrolling_region.right()); + scroll_text_right(scrolling_region, count, true /* fill */); } void @@ -3285,15 +3296,21 @@ Terminal::DECPS(vte::parser::Sequence const& seq) * Plays a note. Arguments: * @args[0]: the volume. 0 = off, 1…3 = low, 4…7 = high * @args[1]: the duration, in multiples of 1s/32 - * @args[2]: the note; from 1 = C5, 2 = C♯5 … to 25 = C7 + * @args[2..]: the note(s); from 1 = C5, 2 = C♯5 … to 25 = C7 * * Defaults: * @args[0]: no default * @args[1]: no default - * @args[2]: no default + * @args[2..]: no default * * Note that a VT525 is specified to store only 16 notes at a time. * + * Note that while the VT520/525 programming manual documents the + * DECPS sequence on page 5-89 with only one note, in the Setup + * section on page 2-60 it shows the sequence taking multiple notes + * (likely up to the maximum number or parameters the VT525 + * supports in CSI sequences, which is at least 16 as per DEC STD 070). + * * References: VT525 * * Probably not worth implementing. @@ -3409,12 +3426,6 @@ Terminal::DECREQTPARM(vte::parser::Sequence const& seq) * args[0]: 0 * * References: VT100 - * - * Alternatively: - * - * WYCDIR - set current character color and attributes - * - * References: WY370 */ switch (seq.collect1(0)) { @@ -3441,6 +3452,25 @@ Terminal::DECREQTPARM(vte::parser::Sequence const& seq) } } +void +Terminal::DECREQTPARM_OR_WYCDIR(vte::parser::Sequence const& seq) +{ + /* + * There's a conflict between DECREQTPERM and WYCDIR. + * A DECTPARM request (_not_ response!) only has at most one + * parameter, while WYCDIR takes three. Although both + * commands admit default values to all parameters, using + * the number of parameters to disambiguate should be good + * enough here. + */ + if (seq.size_final() <= 1) + DECREQTPARM(seq); +#ifdef PARSER_INCLUDE_NOP + else + WYCDIR(seq); +#endif +} + void Terminal::DECRQCRA(vte::parser::Sequence const& seq) { @@ -3480,7 +3510,7 @@ Terminal::DECRQCRA(vte::parser::Sequence const& seq) unsigned int idx = 0; int id = seq.collect1(idx); -#ifndef VTE_DEBUG +#if !VTE_DEBUG /* Send a dummy reply */ return reply(seq, VTE_REPLY_DECCKSR, {id}, "0000"); #else @@ -3503,13 +3533,13 @@ Terminal::DECRQCRA(vte::parser::Sequence const& seq) idx = seq.next(idx); int right = seq.collect1(idx, m_column_count, 1, m_column_count); - if (m_modes_private.DEC_ORIGIN() && - m_scrolling_restricted) { - top += m_scrolling_region.start; - - bottom += m_scrolling_region.start; - bottom = std::min(bottom, m_scrolling_region.end); - + if (m_modes_private.DEC_ORIGIN()) { + top += m_scrolling_region.top(); + bottom += m_scrolling_region.top(); + bottom = std::min(bottom, m_scrolling_region.bottom()); + left += m_scrolling_region.left(); + right += m_scrolling_region.left(); + right = std::min(right, m_scrolling_region.right()); } unsigned int checksum; @@ -3519,7 +3549,7 @@ Terminal::DECRQCRA(vte::parser::Sequence const& seq) checksum = checksum_area(top -1 + m_screen->insert_delta, left - 1, bottom - 1 + m_screen->insert_delta, - right - 1); + right); reply(seq, VTE_REPLY_DECCKSR, {id}, "%04X", checksum); #endif /* VTE_DEBUG */ @@ -3616,9 +3646,9 @@ Terminal::DECRQM_DEC(vte::parser::Sequence const& seq) int value; switch (mode) { - case vte::terminal::modes::ECMA::eUNKNOWN: value = 0; break; - case vte::terminal::modes::ECMA::eALWAYS_SET: value = 3; break; - case vte::terminal::modes::ECMA::eALWAYS_RESET: value = 4; break; + case vte::terminal::modes::Private::eUNKNOWN: value = 0; break; + case vte::terminal::modes::Private::eALWAYS_SET: value = 3; break; + case vte::terminal::modes::Private::eALWAYS_RESET: value = 4; break; default: assert(mode >= 0); value = m_modes_private.get(mode) ? 1 : 2; break; } @@ -3651,12 +3681,14 @@ Terminal::DECRQPSR(vte::parser::Sequence const& seq) * be restored with DECRSPS. * * References: VT525 + * DEC STD 070 p5–197ff */ switch (seq.collect1(0)) { case -1: case 0: - /* Error; ignore request */ + default: + /* Ignore request and send no report */ break; case 1: @@ -3667,19 +3699,24 @@ Terminal::DECRQPSR(vte::parser::Sequence const& seq) * - the character sets designated to the G0, G1, G2, and G3 sets. * * Reply: DECCIR - * DATA: the report in a unspecified format - * See WY370 for a possible format to use. + * DATA: report in the format specified in DEC STD 070 p5–200ff */ + // For now, send an error report + reply(seq, VTE_REPLY_DECPSR, {0}); break; case 2: - /* Tabstop report. + /* Cursor information report. This contains: + * - the cursor position, including character attributes and + * character protection attribute, + * - origin mode (DECOM), + * - the character sets designated to the G0, G1, G2, and G3 sets. * * Reply: DECTABSR + * DATA: report in the format specified in DEC STD 070 p5–204 */ - break; - - default: + // For now, send an error report + reply(seq, VTE_REPLY_DECPSR, {0}); break; } } @@ -3740,13 +3777,15 @@ Terminal::DECRQSS(vte::parser::Sequence const& seq) return reply(seq, VTE_REPLY_DECRPSS, {1}, {VTE_REPLY_DECSCUSR, {int(m_cursor_style)}}); case VTE_CMD_DECSTBM: - if (m_scrolling_restricted) - return reply(seq, VTE_REPLY_DECRPSS, {1}, - {VTE_REPLY_DECSTBM, - {m_scrolling_region.start + 1, - m_scrolling_region.end + 1}}); - else - return reply(seq, VTE_REPLY_DECRPSS, {1}, {VTE_REPLY_DECSTBM, {}}); + return reply(seq, VTE_REPLY_DECRPSS, {1}, + {VTE_REPLY_DECSTBM, {m_scrolling_region.top() + 1, + m_scrolling_region.bottom() + 1}}); + + case VTE_CMD_DECSLRM: + case VTE_CMD_DECSLRM_OR_SCOSC: + return reply(seq, VTE_REPLY_DECRPSS, {1}, + {VTE_REPLY_DECSLRM, {m_scrolling_region.left() + 1, + m_scrolling_region.right() + 1}}); case VTE_CMD_DECAC: case VTE_CMD_DECARR: @@ -3764,10 +3803,10 @@ Terminal::DECRQSS(vte::parser::Sequence const& seq) case VTE_CMD_DECSDPT: case VTE_CMD_DECSEST: case VTE_CMD_DECSFC: + case VTE_CMD_DECSGR: case VTE_CMD_DECSKCV: case VTE_CMD_DECSLCK: case VTE_CMD_DECSLPP: - case VTE_CMD_DECSLRM: case VTE_CMD_DECSMBV: case VTE_CMD_DECSNLS: case VTE_CMD_DECSPMA: @@ -3783,6 +3822,7 @@ Terminal::DECRQSS(vte::parser::Sequence const& seq) case VTE_CMD_DECSZS: case VTE_CMD_DECTME: case VTE_CMD_SGR: + case VTE_CMD_XTERM_MODKEYS: default: return reply(seq, VTE_REPLY_DECRPSS, {0}); } @@ -3797,25 +3837,27 @@ Terminal::DECRQTSR(vte::parser::Sequence const& seq) * be restored by DECRSTS. * * References: VT525 + * DEC STD 070 p5–206ff */ switch (seq.collect1(0)) { case -1: case 0: - /* Ignore */ + default: + /* Ignore, send no report*/ break; case 1: - /* Terminal state report. + /* DECTSR – Terminal state request * * Reply: DECTSR - * DATA: the report in an unspecified format + * DATA: report in an unspecified format */ - /* return reply(seq, VTE_REPLY_DECTSR, {1}, "FIXME"); */ - break; + // For now, send an error report + return reply(seq, VTE_REPLY_DECTSR, {0}); case 2: - /* Color table report. + /* DECCTR – Color table request * * Arguments: * args[1]: color coordinate system @@ -3823,14 +3865,11 @@ Terminal::DECRQTSR(vte::parser::Sequence const& seq) * 1: HLS (0…360, 0…100, 0…100) * 2: RGB (0…100, 0…100, 0…100) (yes, really!) * - * Reply: DECTSR - * DATA: the report + * Reply: DECCTR + * DATA: report in an unspecified format */ - /* return reply(seq, VTE_REPLY_DECTSR, {2}, "FIXME"); */ - break; - - default: - break; + // For now, send an error report + return reply(seq, VTE_REPLY_DECTSR, {0}); } } @@ -3859,11 +3898,13 @@ Terminal::DECRSPS(vte::parser::Sequence const& seq) * Restores terminal state from a DECRQPSR response. * * References: VT525 + * DEC STD 070 p5–197ff */ switch (seq.collect1(0)) { case -1: case 0: + default: /* Error; ignore */ break; @@ -3874,9 +3915,6 @@ Terminal::DECRSPS(vte::parser::Sequence const& seq) case 2: /* Tabstop report */ break; - - default: - break; } } @@ -3888,6 +3926,7 @@ Terminal::DECRSTS(vte::parser::Sequence const& seq) * Restore terminal state from a DECRQTSR response. * * References: VT525 + * DEC STD 070 p5–206ff */ switch (seq.collect1(0)) { @@ -4043,6 +4082,10 @@ Terminal::DECSCL(vte::parser::Sequence const& seq) * args[0]: 64 * args[1]: 0 * + * When not using private colour registers, this + * must also clear (assign to black) all SIXEL + * colour registers. (DEC PPLV2 § 5.8) + * * References: VT525 */ #if 0 @@ -4319,8 +4362,28 @@ Terminal::DECSIXEL(vte::parser::Sequence const& seq) { /* * DECSIXEL - SIXEL graphics + * Image data in DECSIXEL format. + * + * Arguments: + * args[0]: macro parameter (should always use 0 and use DECGRA instead) + * See DEC PPLV Table 5–2 in § 5.4.1.1 for more information. + * args[1]: background + * 0: device default (same as 2) + * 1: pixels with colour 0 retain the colour + * 2: pixels with colour 0 are set to the current background + * 5: OR mode (nonstandard NetBSD/x68k extension, see + * [https://qiita.com/arakiken/items/26f6c67da5a9f9f907ac]) + * args[2]: horizontal grid size in the unit set by SSU + * args[3]: image ID (range 0..1024) (nonstandard RLogin extension) + * + * Defaults: + * args[0]: 0 + * args[1]: 2 (1 for printers) + * args[2]: no default + * args[3]: no default * * References: VT330 + * DEC PPLV2 § 5.4 */ } @@ -4406,6 +4469,20 @@ Terminal::DECSLPP(vte::parser::Sequence const& seq) emit_resize_window(m_column_count, param); } +void +Terminal::DECSLPP_OR_XTERM_WM(vte::parser::Sequence const& seq) +{ + /* + * DECSLPP and XTERM_WM use the same sequence, but we can + * distinguish between them by the parameter value. + */ + auto const param = seq.collect1(0); + if (param > 0 && param < 24) + XTERM_WM(seq); + else + DECSLPP(seq); +} + void Terminal::DECSLRM(vte::parser::Sequence const& seq) { @@ -4423,16 +4500,31 @@ Terminal::DECSLRM(vte::parser::Sequence const& seq) * args[0]: 1 * args[2]: page width * - * If left > right, the command is ignored. - * The maximum of right is the page size (set with DECSCPP); - * the minimum size of the scrolling region is 2 columns. + * If the values aren't in the right order, or after clamping don't + * define a region of at least 2 columns, the command is ignored. * + * The maximum of right is the page size (set with DECSCPP). * Homes to cursor to (1,1) of the page (scrolling region?). * * References: VT525 - * - * FIXMEchpe: Consider implementing this. */ + + auto const left = seq.collect1(0, 1, 1, m_column_count); + auto const right = seq.collect1(seq.next(0), m_column_count, 1, m_column_count); + + /* Ignore if not at least 2 columns */ + if (right <= left) + return; + + /* Set the right values. */ + m_scrolling_region.set_horizontal(left - 1, right - 1); + if (m_scrolling_region.is_restricted()) { + /* Maybe extend the ring: https://gitlab.gnome.org/GNOME/vte/-/issues/2036 */ + while (long(m_screen->row_data->next()) < m_screen->insert_delta + m_row_count) + m_screen->row_data->insert(m_screen->row_data->next(), get_bidi_flags()); + } + + home_cursor(); } void @@ -4455,11 +4547,9 @@ Terminal::DECSLRM_OR_SCOSC(vte::parser::Sequence const& seq) * See issue #48. */ -#ifdef PARSER_INCLUDE_NOP if (m_modes_private.DECLRMM()) DECSLRM(seq); else -#endif SCOSC(seq); } @@ -4704,7 +4794,9 @@ Terminal::DECSTBM(vte::parser::Sequence const& seq) * args[0]: 1 * args[1]: number of lines * - * If top > bottom, the command is ignored. + * If the values aren't in the right order, or after clamping don't + * define a region of at least 2 lines, the command is ignored. + * * The maximum size of the scrolling region is the whole page. * Homes the cursor to position (1,1) (of the scrolling region?). * @@ -4738,37 +4830,19 @@ Terminal::DECSTBM(vte::parser::Sequence const& seq) screen_cursor_set(screen, 0, 0); #endif - int start, end; - seq.collect(0, {&start, &end}); + auto const top = seq.collect1(0, 1, 1, m_row_count); + auto const bottom = seq.collect1(seq.next(0), m_row_count, 1, m_row_count); - /* Defaults */ - if (start <= 0) - start = 1; - if (end == -1) - end = m_row_count; - - if (start > m_row_count || - end <= start) { - m_scrolling_restricted = FALSE; - home_cursor(); + /* Ignore if not at least 2 lines */ + if (bottom <= top) return; - } - - if (end > m_row_count) - end = m_row_count; /* Set the right values. */ - m_scrolling_region.start = start - 1; - m_scrolling_region.end = end - 1; - m_scrolling_restricted = TRUE; - if (m_scrolling_region.start == 0 && - m_scrolling_region.end == m_row_count - 1) { - /* Special case -- run wild, run free. */ - m_scrolling_restricted = FALSE; - } else { - /* Maybe extend the ring -- bug 710483 */ - while (_vte_ring_next(m_screen->row_data) < m_screen->insert_delta + m_row_count) - _vte_ring_insert(m_screen->row_data, _vte_ring_next(m_screen->row_data), get_bidi_flags()); + m_scrolling_region.set_vertical(top - 1, bottom - 1); + if (m_scrolling_region.is_restricted()) { + /* Maybe extend the ring: https://gitlab.gnome.org/GNOME/vte/-/issues/2036 */ + while (long(m_screen->row_data->next()) < m_screen->insert_delta + m_row_count) + m_screen->row_data->insert(m_screen->row_data->next(), get_bidi_flags()); } home_cursor(); @@ -4810,6 +4884,10 @@ Terminal::DECSTR(vte::parser::Sequence const& seq) * Perform a soft reset to the default values. * [list of default values] * + * When not using private colour registers, this + * must also clear (assign to black) all SIXEL + * colour registers. (DEC PPLV2 § 5.8) + * * References: VT525 */ @@ -5006,8 +5084,22 @@ Terminal::DL(vte::parser::Sequence const& seq) screen->age); #endif + auto const cursor_row = get_xterm_cursor_row(); + auto const cursor_col = get_xterm_cursor_column(); + + /* If the cursor (xterm-like interpretation when about to wrap) is outside + * the DECSTBM / DECSLRM scrolling region then do nothing. */ + if (!m_scrolling_region.contains_row_col(cursor_row, cursor_col)) { + return; + } + + carriage_return(); + auto const count = seq.collect1(0, 1); - delete_lines(count); + /* Scroll up in a custom region: the top is at the cursor, the rest is according to DECSTBM / DECSLRM. */ + auto scrolling_region{m_scrolling_region}; + scrolling_region.set_vertical(cursor_row, scrolling_region.bottom()); + scroll_text_up(scrolling_region, count, true /* fill */); } void @@ -5093,21 +5185,24 @@ Terminal::DSR_ECMA(vte::parser::Sequence const& seq) * @arg[0]: line * @arg[1]: column */ - vte::grid::row_t rowval, origin, rowmax; - if (m_modes_private.DEC_ORIGIN() && - m_scrolling_restricted) { - origin = m_scrolling_region.start; - rowmax = m_scrolling_region.end; - } else { - origin = 0; - rowmax = m_row_count - 1; - } - // FIXMEchpe this looks wrong. shouldn't this first clamp to origin,rowmax and *then* subtract origin? - rowval = m_screen->cursor.row - m_screen->insert_delta - origin; - rowval = CLAMP(rowval, 0, rowmax); + vte::grid::row_t top, bottom, rowval; + vte::grid::column_t left, right, colval; - reply(seq, VTE_REPLY_CPR, - {int(rowval + 1), int(CLAMP(m_screen->cursor.col + 1, 1, m_column_count))}); + if (m_modes_private.DEC_ORIGIN()) { + top = m_scrolling_region.top(); + bottom = m_scrolling_region.bottom(); + left = m_scrolling_region.left(); + right = m_scrolling_region.right(); + } else { + top = 0; + bottom = m_row_count - 1; + left = 0; + right = m_column_count - 1; + } + rowval = CLAMP(get_xterm_cursor_row(), top, bottom) - top; + colval = CLAMP(get_xterm_cursor_column(), left, right) - left; + + reply(seq, VTE_REPLY_CPR, {int(rowval + 1), int(colval + 1)}); break; default: @@ -5140,21 +5235,24 @@ Terminal::DSR_DEC(vte::parser::Sequence const& seq) * @arg[2]: page * Always report page 1 here (per XTERM source code). */ - vte::grid::row_t rowval, origin, rowmax; - if (m_modes_private.DEC_ORIGIN() && - m_scrolling_restricted) { - origin = m_scrolling_region.start; - rowmax = m_scrolling_region.end; - } else { - origin = 0; - rowmax = m_row_count - 1; - } - // FIXMEchpe this looks wrong. shouldn't this first clamp to origin,rowmax and *then* subtract origin? - rowval = m_screen->cursor.row - m_screen->insert_delta - origin; - rowval = CLAMP(rowval, 0, rowmax); + vte::grid::row_t top, bottom, rowval; + vte::grid::column_t left, right, colval; - reply(seq, VTE_REPLY_DECXCPR, - {int(rowval + 1), int(CLAMP(m_screen->cursor.col + 1, 1, m_column_count)), 1}); + if (m_modes_private.DEC_ORIGIN()) { + top = m_scrolling_region.top(); + bottom = m_scrolling_region.bottom(); + left = m_scrolling_region.left(); + right = m_scrolling_region.right(); + } else { + top = 0; + bottom = m_row_count - 1; + left = 0; + right = m_column_count - 1; + } + rowval = CLAMP(get_xterm_cursor_row(), top, bottom) - top; + colval = CLAMP(get_xterm_cursor_column(), left, right) - left; + + reply(seq, VTE_REPLY_DECXCPR, {int(rowval + 1), int(colval + 1), 1}); break; case 15: @@ -5203,9 +5301,6 @@ Terminal::DSR_DEC(vte::parser::Sequence const& seq) reply(seq, VTE_REPLY_DECDSR, {27, 0, 0, 5}); break; - case 53: - /* XTERM alias for 55 */ - [[fallthrough]]; case 55: /* Request locator status report * Reply: DECDSR @@ -5372,10 +5467,8 @@ Terminal::ECH(vte::parser::Sequence const& seq) /* Erase characters starting at the cursor position (overwriting N with * spaces, but not moving the cursor). */ - - // FIXMEchpe limit to column_count - cursor.x ? - auto const count = seq.collect1(0, 1, 1, int(65535)); - erase_characters(count); + auto const count = seq.collect1(0, 1); + erase_characters(count, false); } void @@ -5874,7 +5967,7 @@ Terminal::HTS(vte::parser::Sequence const& seq) * VT525 */ - m_tabstops.set(get_cursor_column()); + m_tabstops.set(get_xterm_cursor_column()); } void @@ -5939,11 +6032,23 @@ Terminal::ICH(vte::parser::Sequence const& seq) screen->age); #endif - auto const count = seq.collect1(0, 1, 1, int(m_column_count - m_screen->cursor.col)); + auto cursor_row = get_xterm_cursor_row(); + auto cursor_col = get_xterm_cursor_column(); - /* TODOegmont: Insert them in a single run, so that we call cleanup_fragments only once. */ - for (auto i = 0; i < count; i++) - insert_blank_character(); + /* If the cursor (xterm-like interpretation when about to wrap) is horizontally outside + * the DECSLRM margins then do nothing. */ + if (cursor_col < m_scrolling_region.left() || cursor_col > m_scrolling_region.right()) { + return; + } + + maybe_retreat_cursor(); + + auto const count = seq.collect1(0, 1); + /* Scroll right in a custom region: only the cursor's row, from the cursor to the DECSLRM right margin. */ + auto scrolling_region{m_scrolling_region}; + scrolling_region.set_vertical(cursor_row, cursor_row); + scrolling_region.set_horizontal(cursor_col, scrolling_region.right()); + scroll_text_right(scrolling_region, count, true /* fill */); } void @@ -6023,8 +6128,22 @@ Terminal::IL(vte::parser::Sequence const& seq) screen->age); #endif + auto const cursor_row = get_xterm_cursor_row(); + auto const cursor_col = get_xterm_cursor_column(); + + /* If the cursor (xterm-like interpretation when about to wrap) is outside + * the DECSTBM / DECSLRM scrolling region then do nothing. */ + if (!m_scrolling_region.contains_row_col(cursor_row, cursor_col)) { + return; + } + + carriage_return(); + auto const count = seq.collect1(0, 1); - insert_lines(count); + /* Scroll down in a custom region: the top is at the cursor, the rest is according to DECSTBM / DECSLRM. */ + auto scrolling_region{m_scrolling_region}; + scrolling_region.set_vertical(cursor_row, scrolling_region.bottom()); + scroll_text_down(scrolling_region, count, true /* fill */); } void @@ -6055,6 +6174,10 @@ Terminal::IRR(vte::parser::Sequence const& seq) /* * IRR - identify-revised-registration * + * Note that the IRR comes _before_ the GnDm/GnDMm/CnD, see e.g. + * IR#124 whose C1 designation sequence is ESC 2/6 4/0 ESC 2/2 4/2, + * i.e. IRR '@', C1D 'B'. + * * References: ECMA-35 § 14.5 * * Probably not worth implementing. @@ -6326,8 +6449,13 @@ Terminal::NEL(vte::parser::Sequence const& seq) screen_cursor_set(screen, 0, screen->state.cursor_y); #endif - set_cursor_column(0); - cursor_down(true); + /* If the cursor is on the bottom margin but to the right of the right margin then + * Xterm doesn't scroll. esctest also checks for this behavior. In order to achieve + * this, move the cursor down (with scrolling) first, and then return the carriage. + * DEC STD 070 p5-64 disagrees, it says we should return the carriage first. + * See https://gitlab.gnome.org/GNOME/vte/-/issues/2526#note_1910803 */ + cursor_down_with_scrolling(true); + carriage_return(); } void @@ -6401,6 +6529,10 @@ Terminal::OSC(vte::parser::Sequence const& seq) set_current_hyperlink(seq, it, cend); break; + case VTE_OSC_ITERM2_SHELL_INTEGRATION: + set_current_shell_integration_mode(seq, it, cend); + break; + case -1: /* default */ case VTE_OSC_XTERM_SET_WINDOW_AND_ICON_TITLE: case VTE_OSC_XTERM_SET_WINDOW_TITLE: { @@ -6410,7 +6542,7 @@ Terminal::OSC(vte::parser::Sequence const& seq) it.size_remaining() < VTE_WINDOW_TITLE_MAX_LENGTH) title = it.string_remaining(); m_window_title_pending.swap(title); - m_window_title_changed = true; + m_pending_changes |= vte::to_integral(PendingChanges::TITLE); break; } @@ -6471,6 +6603,7 @@ Terminal::OSC(vte::parser::Sequence const& seq) case VTE_OSC_XTERM_SET_COLOR_TEK_FG: case VTE_OSC_XTERM_SET_COLOR_TEK_BG: case VTE_OSC_XTERM_SET_COLOR_TEK_CURSOR: + case VTE_OSC_XTERM_SET_CURSOR_NAME: case VTE_OSC_XTERM_LOGFILE: case VTE_OSC_XTERM_SET_FONT: case VTE_OSC_XTERM_SET_XSELECTION: @@ -6481,7 +6614,6 @@ Terminal::OSC(vte::parser::Sequence const& seq) case VTE_OSC_XTERM_RESET_COLOR_TEK_BG: case VTE_OSC_XTERM_RESET_COLOR_TEK_CURSOR: case VTE_OSC_EMACS_51: - case VTE_OSC_ITERM2_133: case VTE_OSC_ITERM2_1337: case VTE_OSC_ITERM2_GROWL: case VTE_OSC_KONSOLE_30: @@ -6729,7 +6861,7 @@ Terminal::REP(vte::parser::Sequence const& seq) // FIXMEchpe insert in one run so we only clean up fragments once for (auto i = 0; i < count; i++) - insert_char(m_last_graphic_character, false, true); + insert_char(m_last_graphic_character, true); } void @@ -6746,39 +6878,8 @@ Terminal::RI(vte::parser::Sequence const& seq) screen_cursor_up(screen, 1, true); #endif - ensure_cursor_is_onscreen(); - - vte::grid::row_t start, end; - if (m_scrolling_restricted) { - start = m_scrolling_region.start + m_screen->insert_delta; - end = m_scrolling_region.end + m_screen->insert_delta; - } else { - start = m_screen->insert_delta; - end = start + m_row_count - 1; - } - - if (m_screen->cursor.row == start) { - /* If we're at the top of the scrolling region, add a - * line at the top to scroll the bottom off. */ - ring_remove(end); - ring_insert(start, true); - - /* Set the boundaries to hard wrapped where we tore apart the contents. - * Need to do it after scrolling down, for the end row to be the desired one. */ - set_hard_wrapped(start - 1); - set_hard_wrapped(end); - - /* Repaint the affected lines. No need to extend, set_hard_wrapped() took care of - * invalidating the context lines if necessary. */ - invalidate_rows(start, end); - } else { - /* Otherwise, just move the cursor up. */ - m_screen->cursor.row--; - } - /* Adjust the scrollbars if necessary. */ - adjust_adjustments(); - /* We modified the display, so make a note of it. */ - m_text_modified_flag = TRUE; + maybe_retreat_cursor(); + cursor_up_with_scrolling(true); } void @@ -6789,6 +6890,10 @@ Terminal::RIS(vte::parser::Sequence const& seq) * Reset to initial state. * [list of things reset] * + * When not using private colour registers, this + * must also clear (assign to black) all SIXEL + * colour registers. (DEC PPLV2 § 5.8) + * * References: ECMA-48 § 8.3.105 */ @@ -6800,6 +6905,16 @@ Terminal::RLOGIN_MML(vte::parser::Sequence const& seq) { /* * RLOGIN_MML - RLogin music markup language + * Music macro language and Midi file support. + * + * The music macro language appears to be (a variant of, + * or based on) the Microsoft and/or Tandy BASIC MML, see + * [http://www.vgmpf.com/Wiki/index.php?title=Microsoft_BASIC_MML] + * and + * [http://www.vgmpf.com/Wiki/index.php?title=Tandy_BASIC_MML]. + * for more information on them, and the RLogin source code; as + * well as [http://nanno.dip.jp/softlib/man/rlogin/ctrlcode.html#DCS] + * for this escape sequence's parameters. * * Probably not worth implementing. * @@ -6836,6 +6951,23 @@ Terminal::RM_DEC(vte::parser::Sequence const& seq) set_mode_private(seq, false); } + +void +Terminal::RM_HP(vte::parser::Sequence const& seq) +{ + /* + * RM_HP - set mode hp + * This is the same as RM_ECMA but for HP private modes. + * + * See SM_HP for information about known modes. + * + * Defaults: none + * + * References: HP 2397A + */ + + /* Not worth implementing */ +} void Terminal::SCORC(vte::parser::Sequence const& seq) { @@ -6849,9 +6981,6 @@ Terminal::SCORC(vte::parser::Sequence const& seq) * References: VT525 */ - if (m_modes_private.DECLRMM()) - return; - restore_cursor(); } @@ -7023,9 +7152,9 @@ Terminal::SD(vte::parser::Sequence const& seq) NULL); #endif - /* Scroll the text down N lines, but don't move the cursor. */ + /* Scroll the text down N lines in the scrolling region, but don't move the cursor. */ auto value = std::max(seq.collect1(0, 1), int(1)); - scroll_text(value); + scroll_text_down(m_scrolling_region, value, true /* fill */); } void @@ -7147,10 +7276,15 @@ Terminal::SGR(vte::parser::Sequence const& seq) m_defaults.attr.set_italic(true); break; case VTE_SGR_SET_UNDERLINE: { - unsigned int v = 1; - /* If we have a subparameter, get it */ + auto v = 1; + // If we have a subparameter, get it if (seq.param_nonfinal(i)) { - v = seq.param(i + 1, 1, 0, 3); + v = seq.param_range(i + 1, 1, 0, 5, -2); + // Skip the subparam sequence if the subparam + // is outside the supported range. See issue + // https://gitlab.gnome.org/GNOME/vte/-/issues/2640 + if (v == -2) + break; } m_defaults.attr.set_underline(v); break; @@ -7298,9 +7432,22 @@ Terminal::SL(vte::parser::Sequence const& seq) * args[0]: 1 * * References: ECMA-48 § 8.3.121 - * - * Probably not worth implementing. */ + + auto cursor_row = get_xterm_cursor_row(); + auto cursor_col = get_xterm_cursor_column(); + + /* If the cursor (xterm-like interpretation when about to wrap) is outside + * the DECSTBM / DECSLRM scrolling region then do nothing. */ + if (!m_scrolling_region.contains_row_col(cursor_row, cursor_col)) { + return; + } + + /* As per xterm, do not clear the "about to wrap" state, so no maybe_retreat_cursor() here. */ + + /* Scroll the text to the left by N lines in the scrolling region, but don't move the cursor. */ + auto value = std::max(seq.collect1(0, 1), int(1)); + scroll_text_left(m_scrolling_region, value, true /* fill */); } void @@ -7390,6 +7537,28 @@ Terminal::SM_DEC(vte::parser::Sequence const& seq) set_mode_private(seq, true); } +void +Terminal::SM_HP(vte::parser::Sequence const& seq) +{ + /* + * SM_HP - set mode hp + * This is the same as SM_ECMA but for HP private modes. + * + * Known modes: + * 1: multipage mode + * If reset, the terminal only has one page of 24 lines of display memory + * Default: reset + * 2: memory lock + * Default: reset + * + * Defaults: none + * + * References: HP 2397A + */ + + /* Not worth implementing */ +} + void Terminal::SOH(vte::parser::Sequence const& seq) { @@ -7556,9 +7725,22 @@ Terminal::SR(vte::parser::Sequence const& seq) * args[0]: 1 * * References: ECMA-48 § 8.3.135 - * - * Probably not worth implementing. */ + + auto cursor_row = get_xterm_cursor_row(); + auto cursor_col = get_xterm_cursor_column(); + + /* If the cursor (xterm-like interpretation when about to wrap) is outside + * the DECSTBM / DECSLRM scrolling region then do nothing. */ + if (!m_scrolling_region.contains_row_col(cursor_row, cursor_col)) { + return; + } + + /* As per xterm, do not clear the "about to wrap" state, so no maybe_retreat_cursor() here. */ + + /* Scroll the text to the right by N lines in the scrolling region, but don't move the cursor. */ + auto value = std::max(seq.collect1(0, 1), int(1)); + scroll_text_right(m_scrolling_region, value, true /* fill */); } void @@ -7762,8 +7944,9 @@ Terminal::SU(vte::parser::Sequence const& seq) screen->history); #endif + /* Scroll the text up N lines in the scrolling region, but don't move the cursor. */ auto value = std::max(seq.collect1(0, 1), int(1)); - scroll_text(-value); + scroll_text_up(m_scrolling_region, value, true /* fill */); } void @@ -7778,7 +7961,7 @@ Terminal::SUB(vte::parser::Sequence const& seq) * References: ECMA-48 § 8.3.148 */ - insert_char(0xfffdu, false, true); + insert_char(0xfffdu, true); } void @@ -7873,7 +8056,7 @@ Terminal::TBC(vte::parser::Sequence const& seq) case -1: case 0: /* Clear character tabstop at the current presentation position */ - m_tabstops.unset(get_cursor_column()); + m_tabstops.unset(get_xterm_cursor_column()); break; case 1: /* Clear line tabstop at the current line */ @@ -7978,8 +8161,8 @@ Terminal::VPA(vte::parser::Sequence const& seq) screen_cursor_set_rel(screen, screen->state.cursor_x, pos - 1); #endif - // FIXMEchpe shouldn't we ensure_cursor_is_onscreen AFTER setting the new cursor row? - ensure_cursor_is_onscreen(); + // FIXMEchpe shouldn't we maybe_retreat_cursor AFTER setting the new cursor row? + maybe_retreat_cursor(); auto value = seq.collect1(0, 1, 1, m_row_count); set_cursor_row1(value); @@ -8228,6 +8411,29 @@ Terminal::WYCAA(vte::parser::Sequence const& seq) } } +void +Terminal::WYCDIR(vte::parser::Sequence const& seq) +{ + /* + * WYCDIR - set current character color and attributes + * Sets the foreground and background colours used for SGR attributes. + * + * Arguments: + * args[0]: foreground colour (0…64) + * args[1]: background colour (0…64) + * args[2]: SGR attribute (0…15) + * + * Defaults: + * args[0]: default foreground colour + * args[1]: default background colour + * args[2]: default attribute (0) + * + * Probably not worth implementing. + * + * References: WY370 + */ +} + void Terminal::WYDHL_BH(vte::parser::Sequence const& seq) { @@ -8322,12 +8528,24 @@ Terminal::XTERM_CHECKSUM_MODE(vte::parser::Sequence const& seq) * Defaults: * args[0]: 0, matching the output from VTxxx terminals * - * References: XTERM (since 335) + * References: XTERM 335 * * Probably not worth implementing. */ } +void +Terminal::XTERM_GETXRES(vte::parser::Sequence const& seq) +{ + /* + * XTERM_GETXRES - xterm get X resource + * + * References: XTERM 350 + * + * Won't implement. + */ +} + void Terminal::XTERM_IHMT(vte::parser::Sequence const& seq) { @@ -8344,7 +8562,12 @@ Terminal::XTERM_MLHP(vte::parser::Sequence const& seq) /* * XTERM_MLHP - xterm-memory-lock-hp-bugfix * - * Probably not worth implementing. + * This seems bogus; SM_HP 2 is the way to set the memory lock on + * HP terminal. + * + * References: XTERM + * + * Not worth implementing. */ } @@ -8354,10 +8577,162 @@ Terminal::XTERM_MUHP(vte::parser::Sequence const& seq) /* * XTERM_MUHP - xterm-memory-unlock-hp-bugfix * + * This seems bogus; RM_HP 2 is the way to unset the memory lock on + * HP terminal. + * + * References: XTERM + * + * Not worth implementing. + */ +} + +void +Terminal::XTERM_MODKEYS(vte::parser::Sequence const& seq) +{ + /* + * XTERM_MODKEYS - xterm set key modifier options + * * Probably not worth implementing. */ } +void +Terminal::XTERM_POPCOLORS(vte::parser::Sequence const& seq) +{ + /* + * XTERM_POPCOLORS: pop color palette stack + * Restore color palette attributes previously pushed to the stack + * with XTERM_PUSHCOLORS. If there is nothing on the + * stack, does nothing. + * + * Arguments: none + * + * References: XTERM 357 + * + * See issue vte#23. + */ +} + +void +Terminal::XTERM_POPSGR(vte::parser::Sequence const& seq) +{ + /* + * XTERM_POPSGR: pop SGR stack + * Restore SGR attributes previously pushed to the stack + * with XTERM_PUSHSGR. If there is nothing on the + * stack, does nothing. + * + * Arguments: none + * + * References: XTERM 334 + * + * Note: The {PUSH,POP,REPORT}SGR protocol is poorly thought-out, and has + * no real use case. See the discussion at issue vte#23. + * Probably won't implement. + */ +} + +void +Terminal::XTERM_PUSHCOLORS(vte::parser::Sequence const& seq) +{ + /* + * XTERM_PUSHSGR: push color palette stack + * Push current color palette to the stack. + * If the stack is full, drops the bottommost item before + * pushing on the stack. + * + * If there are any arguments, they are interpreted as in SGR + * to denote which attributes to save; if there are no arguments, + * all attributes are saved. + * + * Arguments: + * args[0:]: the attributes + * 0 = save all attributes + * + * Defaults: + * args[0]: 0 (save all attributes) + * + * References: XTERM 357 + * + * See issue vte#23. + */ +} + +void +Terminal::XTERM_PUSHSGR(vte::parser::Sequence const& seq) +{ + /* + * XTERM_PUSHSGR: push SGR stack + * Push current SGR attributes to the stack. + * If the stack is full, drops the bottommost item before + * pushing on the stack. + * + * If there are any arguments, they are interpreted as in SGR + * to denote which attributes to save; if there are no arguments, + * all attributes are saved. + * + * Arguments: + * args[0:]: the attributes + * 0 = save all attributes + * + * Defaults: + * args[0]: 0 (save all attributes) + * + * References: XTERM 334 + * + * Note: The {PUSH,POP,REPORT}SGR protocol is poorly thought-out, and has + * no real use case. See the discussion at issue vte#23. + * Probably won't implement. + */ +} + +void +Terminal::XTERM_REPORTCOLORS(vte::parser::Sequence const& seq) +{ + /* + * XTERM_REPORTCOLORS: report color palette on stack + * + * References: XTERM 357 + * + * See issue vte#23. + */ +} + +void +Terminal::XTERM_REPORTSGR(vte::parser::Sequence const& seq) +{ + /* + * XTERM_REPORTSGR: report SGR attributes in rectangular area + * Report common character attributes in the specified rectangle. + * + * Arguments; + * args[0..3]: top, left, bottom, right of the rectangle (1-based) + * + * Defaults: + * args[0]: 1 + * args[1]: 1 + * args[2]: height of current page + * args[3]: width of current page + * + * Reply: SGR + * + * If the top > bottom or left > right, the command is ignored. + * + * These coordinates are interpreted according to origin mode (DECOM), + * but unaffected by the page margins (DECSLRM?). + * + * Note: DECSACE selects whether this function operates on the + * rectangular area or the data stream between the star and end + * positions. + * + * References: XTERM 334 + * + * Note: The {PUSH,POP,REPORT}SGR protocol is poorly thought-out, and has + * no real use case. See the discussion at issue vte#23. + * Probably won't implement. + */ +} + void Terminal::XTERM_RPM(vte::parser::Sequence const& seq) { @@ -8403,86 +8778,74 @@ Terminal::XTERM_RTM(vte::parser::Sequence const& seq) } void -Terminal::XTERM_SGFX(vte::parser::Sequence const& seq) +Terminal::XTERM_SHIFTESCAPE(vte::parser::Sequence const& seq) { /* - * XTERM_SGFX - xterm-sixel-graphics - * - * Probably not worth implementing. - */ -} - -void -Terminal::XTERM_SGR_REPORT(vte::parser::Sequence const& seq) -{ - /* - * XTERM_SGR_REPORT: report SGR attributes in rectangular area - * Report common character attributes in the specified rectangle. - * - * Arguments; - * args[0..3]: top, left, bottom, right of the rectangle (1-based) - * - * Defaults: - * args[0]: 1 - * args[1]: 1 - * args[2]: height of current page - * args[3]: width of current page - * - * Reply: SGR - * - * If the top > bottom or left > right, the command is ignored. - * - * These coordinates are interpreted according to origin mode (DECOM), - * but unaffected by the page margins (DECSLRM?). - * - * Note: DECSACE selects whether this function operates on the - * rectangular area or the data stream between the star and end - * positions. - * - * References: XTERM 334 - */ - /* TODO: Implement this */ -} - -void -Terminal::XTERM_SGR_STACK_POP(vte::parser::Sequence const& seq) -{ - /* - * XTERM_SGR_STACK_POP: pop SGR stack - * Restore SGR attributes previously pushed to the stack - * with XTERM_SGR_STACK_PUSH. If there is nothing on the - * stack, does nothing. - * - * Arguments: none - * - * References: XTERM 334 - */ - /* TODO: Implement this: https://gitlab.gnome.org/GNOME/vte/issues/23 */ -} - -void -Terminal::XTERM_SGR_STACK_PUSH(vte::parser::Sequence const& seq) -{ - /* - * XTERM_SGR_STACK_PUSH: push SGR stack - * Push current SGR attributes to the stack. - * If the stack is full, drops the bottommost item before - * pushing on the stack. - * - * If there are any arguments, they are interpreted as in SGR - * to denote which attributes to save; if there are no arguments, - * all attributes are saved. + * XTERM_SHIFTESCAPE - xterm set/reset shift escape + * Selects whether the SHIFT key acts as a modifier in the mouse + * protocol, or overrides the mouse protocol. * * Arguments: - * args[0:]: the attributes - * 0 = save all attributes + * args[0]: + * 0: overrides mouse protocol + * 1: conditionally acts as modifier + * 2: always acts as modifier + * 3: never acts as modifier * * Defaults: - * args[0]: 0 (save all attributes) + * args[0]: 0 * - * References: XTERM 334 + * Note that args[0] values 2 and 3 are not actually executed + * from an escape sequence, they correspond to the value of the + * xterm resource controlling this setting. + * + * References: XTERM 362 */ - /* TODO: Implement this: https://gitlab.gnome.org/GNOME/vte/issues/23 */ + /* Not worth implementing this */ +} + + +void +Terminal::XTERM_SMGRAPHICS(vte::parser::Sequence const& seq) +{ + /* + * XTERM_SMGRAPHICS - xterm set or request graphics attributes + * Set or request graphics attributes for SIXEL and REGIS. + * + * Reply: XTERM_SMGRAPHICS_REPORT + * + * Arguments: + * args[0]: select function + * 0: number of colour registers + * 1: SIXEL geometry + * 2: REGIS geometry + * args[1]: select subfunction + * 1: read attribute + * 2: reset attribute + * 3: set attribute + * 4: read maximum value of attribute + * args[2:]: values, used only for subfuncion 3 + * + * Defaults: + * args[0]: no default + * args[1]: no default + * args[2:]: no default + * + * The reply is XTERM_SMGRAPHICS_REPORT, with arguments: + * args[0]: function + * args[1]: status + * 0: success + * 1: error in function parameter + * 2: error in subfunction parameter + * 3: failure + * + * References: XTERM + */ + + auto const attr = seq.collect1(0); + auto status = 1, rv0 = -2, rv1 = -2; + + reply(seq, VTE_REPLY_XTERM_SMGRAPHICS_REPORT, {attr, status, rv0, rv1}); } void @@ -8513,16 +8876,6 @@ Terminal::XTERM_PTRMODE(vte::parser::Sequence const& seq) */ } -void -Terminal::XTERM_SRV(vte::parser::Sequence const& seq) -{ - /* - * XTERM_SRV - xterm-set-resource-value - * - * Probably not worth implementing. - */ -} - void Terminal::XTERM_STM(vte::parser::Sequence const& seq) { @@ -8543,6 +8896,30 @@ Terminal::XTERM_STCAP(vte::parser::Sequence const& seq) */ } +void +Terminal::XTERM_VERSION(vte::parser::Sequence const& seq) +{ + /* + * XTERM_VERSION - xterm request version report + * + * Returns the xterm name and version as XTERM_DSR. + * + * Arguments: + * args[0]: select function + * 0: report xterm name and version + * + * Defaults: + * args[0]: 0 (as per xterm code, no default as per xterm docs) + * + * References: XTERM + */ + + if (seq.collect1(0, 0) != 0) + return; + + reply(seq, VTE_REPLY_XTERM_DSR, {}, "VTE(%d)", firmware_version()); +} + void Terminal::XTERM_WM(vte::parser::Sequence const& seq) { @@ -8651,8 +9028,8 @@ Terminal::XTERM_WM(vte::parser::Sequence const& seq) break; case VTE_XTERM_WM_GET_WINDOW_SIZE_PIXELS: { - int width = m_row_count * m_cell_height; - int height = m_column_count * m_cell_width; + auto const height = int(m_row_count * m_cell_height_unscaled); + auto const width = int(m_column_count * m_cell_width_unscaled); reply(seq, VTE_REPLY_XTERM_WM, {4, height, width}); break; } @@ -8666,12 +9043,17 @@ Terminal::XTERM_WM(vte::parser::Sequence const& seq) /* FIMXE: this should really report the monitor's workarea, * or even just a fixed value. */ +#if VTE_GTK == 3 auto gdkscreen = gtk_widget_get_screen(m_widget); int height = gdk_screen_get_height(gdkscreen); int width = gdk_screen_get_width(gdkscreen); _vte_debug_print(VTE_DEBUG_EMULATION, "Reporting screen size as %dx%d cells.\n", height / int(m_cell_height), width / int(m_cell_width)); +#elif VTE_GTK == 4 + auto height = int(m_row_count * m_cell_height); + auto width = int(m_column_count * m_cell_width); +#endif reply(seq, VTE_REPLY_XTERM_WM, {9, height / int(m_cell_height), width / int(m_cell_width)}); @@ -8714,14 +9096,14 @@ Terminal::XTERM_WM(vte::parser::Sequence const& seq) m_window_title_stack.erase(m_window_title_stack.cbegin()); } - if (m_window_title_changed) + if (m_pending_changes & vte::to_integral(PendingChanges::TITLE)) m_window_title_stack.emplace(m_window_title_stack.cend(), m_window_title_pending); else m_window_title_stack.emplace(m_window_title_stack.cend(), m_window_title); - g_assert_cmpuint(m_window_title_stack.size(), <=, VTE_WINDOW_TITLE_STACK_MAX_DEPTH); + vte_assert_cmpuint(m_window_title_stack.size(), <=, VTE_WINDOW_TITLE_STACK_MAX_DEPTH); break; case VTE_OSC_XTERM_SET_ICON_TITLE: @@ -8738,7 +9120,7 @@ Terminal::XTERM_WM(vte::parser::Sequence const& seq) if (m_window_title_stack.empty()) break; - m_window_title_changed = true; + m_pending_changes |= vte::to_integral(PendingChanges::TITLE); m_window_title_pending.swap(m_window_title_stack.back()); m_window_title_stack.pop_back(); break; @@ -8750,7 +9132,7 @@ Terminal::XTERM_WM(vte::parser::Sequence const& seq) break; default: - DECSLPP(seq); + /* DECSLPP, handled elsewhere */ break; } } diff --git a/src/vtespawn.cc b/src/vtespawn.cc index df7ff7f..f5dfe23 100644 --- a/src/vtespawn.cc +++ b/src/vtespawn.cc @@ -1,23 +1,20 @@ -/* gspawn.c - Process launching - * +/* * Copyright 2000 Red Hat, Inc. * g_execvpe implementation based on GNU libc execvp: * Copyright 1991, 92, 95, 96, 97, 98, 99 Free Software Foundation, Inc. * - * GLib is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * - * GLib is distributed in the hope that it will be useful, + * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, write - * to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -29,333 +26,30 @@ #include #include #include -#include /* for fdwalk */ +#include #include -#ifdef HAVE_SYS_RESOURCE_H -#include -#endif /* HAVE_SYS_RESOURCE_H */ - #include - -#if defined(__linux__) || defined(__DragonFly__) -#include /* for syscall and SYS_getdents64 */ -#endif +#include #include "vtespawn.hh" -#include "vteutils.h" /* for strchrnul on non-GNU systems */ #include "reaper.hh" -#define VTE_SPAWN_ERROR_TIMED_OUT (G_SPAWN_ERROR_FAILED + 1000) -#define VTE_SPAWN_ERROR_CANCELLED (G_SPAWN_ERROR_FAILED + 1001) +#include "missing.hh" -#define _(s) g_dgettext("glib20", s) - -/* - * SECTION:spawn - * @Short_description: process launching - * @Title: Spawning Processes - * - * GLib supports spawning of processes with an API that is more - * convenient than the bare UNIX fork() and exec(). - * - * The vte_spawn family of functions has synchronous (vte_spawn_sync()) - * and asynchronous variants (vte_spawn_async(), vte_spawn_async_with_pipes(), - * vte_spawn_async_cancellable(), vte_spawn_async_with_pipes_cancellable), - * as well as convenience variants that take a complete shell-like - * commandline (vte_spawn_command_line_sync(), vte_spawn_command_line_async()). - * - * See #GSubprocess in GIO for a higher-level API that provides - * stream interfaces for communication with child processes. +/* This function is called between fork and execve/_exit and so must be + * async-signal-safe; see man:signal-safety(7). */ - -static gint g_execute (const gchar *file, - gchar **argv, - gchar **envp, - gboolean search_path, - gboolean search_path_from_envp); - -static gboolean fork_exec_with_pipes (gboolean intermediate_child, - const gchar *working_directory, - gchar **argv, - gchar **envp, - gboolean close_descriptors, - gboolean search_path, - gboolean search_path_from_envp, - gboolean stdout_to_null, - gboolean stderr_to_null, - gboolean child_inherits_stdin, - gboolean file_and_argv_zero, - gboolean cloexec_pipes, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - GPid *child_pid, - gint *standard_input, - gint *standard_output, - gint *standard_error, - gint timeout, - GPollFD *pollfd, - GError **error); - -/* - * vte_spawn_async_cancellable: - * @working_directory: (type filename) (allow-none): child's current working directory, or %NULL to inherit parent's - * @argv: (array zero-terminated=1): child's argument vector - * @envp: (array zero-terminated=1) (allow-none): child's environment, or %NULL to inherit parent's - * @flags: flags from #GSpawnFlags - * @child_setup: (scope async) (allow-none): function to run in the child just before exec() - * @user_data: (closure): user data for @child_setup - * @child_pid: (out) (allow-none): return location for child process reference, or %NULL - * @timeout: a timeout value in ms, or -1 to wait indefinitely - * @pollfd: (allow-none): a #GPollFD, or %NULL - * @error: return location for error - * - * See vte_spawn_async_with_pipes_cancellable() for a full description; this function - * simply calls the vte_spawn_async_with_pipes_cancellable() without any pipes. - * - * You should call vte_spawn_close_pid() on the returned child process - * reference when you don't need it any more. - * - * Note that the returned @child_pid on Windows is a handle to the child - * process and not its identifier. Process handles and process identifiers - * are different concepts on Windows. - * - * Returns: %TRUE on success, %FALSE if error is set - * - * Since: 2.52 - **/ -gboolean -vte_spawn_async_cancellable (const gchar *working_directory, - gchar **argv, - gchar **envp, - GSpawnFlags flags, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - GPid *child_pid, - gint timeout, - GPollFD *pollfd, - GError **error) +static ssize_t +write_all (int fd, + void const* vbuf, + size_t to_write) noexcept { - return vte_spawn_async_with_pipes_cancellable (working_directory, - argv, envp, - flags, - child_setup, - user_data, - child_pid, - NULL, NULL, NULL, - timeout, pollfd, - error); -} + char *buf = (char *) vbuf; -/* Avoids a danger in threaded situations (calling close() - * on a file descriptor twice, and another thread has - * re-opened it since the first close) - */ -static void -close_and_invalidate (gint *fd) -{ - if (*fd < 0) - return; - else - { - (void)close(*fd); - *fd = -1; - } -} - -/* - * vte_spawn_async_with_pipes_cancellable: - * @working_directory: (type filename) (allow-none): child's current working directory, or %NULL to inherit parent's, in the GLib file name encoding - * @argv: (array zero-terminated=1): child's argument vector, in the GLib file name encoding - * @envp: (array zero-terminated=1) (allow-none): child's environment, or %NULL to inherit parent's, in the GLib file name encoding - * @flags: flags from #GSpawnFlags - * @child_setup: (scope async) (allow-none): function to run in the child just before exec() - * @user_data: (closure): user data for @child_setup - * @child_pid: (out) (allow-none): return location for child process ID, or %NULL - * @standard_input: (out) (allow-none): return location for file descriptor to write to child's stdin, or %NULL - * @standard_output: (out) (allow-none): return location for file descriptor to read child's stdout, or %NULL - * @standard_error: (out) (allow-none): return location for file descriptor to read child's stderr, or %NULL - * @timeout: a timeout value in ms, or -1 to wait indefinitely - * @pollfd: (allow-none): a #GPollFD, or %NULL - * @error: return location for error - * - * Like vte_spawn_async_with_pipes(), but allows the spawning to be - * aborted. - * - * If @timeout is not -1, then the spawning will be aborted if - * the timeout is exceeded before spawning has completed. - * - * If @pollfd is not %NULL, then the spawning will be aborted if - * the @pollfd.fd becomes readable. Usually, you want to create - * this parameter with g_cancellable_make_pollfd(). - * - * Returns: %TRUE on success, %FALSE if an error occurred or the - * spawning was aborted - * - * Since: 2.52 - */ -gboolean -vte_spawn_async_with_pipes_cancellable (const gchar *working_directory, - gchar **argv, - gchar **envp, - GSpawnFlags flags, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - GPid *child_pid, - gint *standard_input, - gint *standard_output, - gint *standard_error, - gint timeout, - GPollFD *pollfd, - GError **error) -{ - g_return_val_if_fail (argv != NULL, FALSE); - g_return_val_if_fail (standard_output == NULL || - !(flags & G_SPAWN_STDOUT_TO_DEV_NULL), FALSE); - g_return_val_if_fail (standard_error == NULL || - !(flags & G_SPAWN_STDERR_TO_DEV_NULL), FALSE); - /* can't inherit stdin if we have an input pipe. */ - g_return_val_if_fail (standard_input == NULL || - !(flags & G_SPAWN_CHILD_INHERITS_STDIN), FALSE); - - return fork_exec_with_pipes (!(flags & G_SPAWN_DO_NOT_REAP_CHILD), - working_directory, - argv, - envp, - !(flags & G_SPAWN_LEAVE_DESCRIPTORS_OPEN), - (flags & G_SPAWN_SEARCH_PATH) != 0, - (flags & G_SPAWN_SEARCH_PATH_FROM_ENVP) != 0, - (flags & G_SPAWN_STDOUT_TO_DEV_NULL) != 0, - (flags & G_SPAWN_STDERR_TO_DEV_NULL) != 0, - (flags & G_SPAWN_CHILD_INHERITS_STDIN) != 0, - (flags & G_SPAWN_FILE_AND_ARGV_ZERO) != 0, - (flags & G_SPAWN_CLOEXEC_PIPES) != 0, - child_setup, - user_data, - child_pid, - standard_input, - standard_output, - standard_error, - timeout, - pollfd, - error); -} - -static gint -exec_err_to_g_error (gint en) -{ - switch (en) - { -#ifdef EACCES - case EACCES: - return G_SPAWN_ERROR_ACCES; - break; -#endif - -#ifdef EPERM - case EPERM: - return G_SPAWN_ERROR_PERM; - break; -#endif - -#ifdef E2BIG - case E2BIG: - return G_SPAWN_ERROR_TOO_BIG; - break; -#endif - -#ifdef ENOEXEC - case ENOEXEC: - return G_SPAWN_ERROR_NOEXEC; - break; -#endif - -#ifdef ENAMETOOLONG - case ENAMETOOLONG: - return G_SPAWN_ERROR_NAMETOOLONG; - break; -#endif - -#ifdef ENOENT - case ENOENT: - return G_SPAWN_ERROR_NOENT; - break; -#endif - -#ifdef ENOMEM - case ENOMEM: - return G_SPAWN_ERROR_NOMEM; - break; -#endif - -#ifdef ENOTDIR - case ENOTDIR: - return G_SPAWN_ERROR_NOTDIR; - break; -#endif - -#ifdef ELOOP - case ELOOP: - return G_SPAWN_ERROR_LOOP; - break; -#endif - -#ifdef ETXTBUSY - case ETXTBUSY: - return G_SPAWN_ERROR_TXTBUSY; - break; -#endif - -#ifdef EIO - case EIO: - return G_SPAWN_ERROR_IO; - break; -#endif - -#ifdef ENFILE - case ENFILE: - return G_SPAWN_ERROR_NFILE; - break; -#endif - -#ifdef EMFILE - case EMFILE: - return G_SPAWN_ERROR_MFILE; - break; -#endif - -#ifdef EINVAL - case EINVAL: - return G_SPAWN_ERROR_INVAL; - break; -#endif - -#ifdef EISDIR - case EISDIR: - return G_SPAWN_ERROR_ISDIR; - break; -#endif - -#ifdef ELIBBAD - case ELIBBAD: - return G_SPAWN_ERROR_LIBBAD; - break; -#endif - - default: - return G_SPAWN_ERROR_FAILED; - break; - } -} - -static gssize -write_all (gint fd, gconstpointer vbuf, gsize to_write) -{ - gchar *buf = (gchar *) vbuf; - while (to_write > 0) { - gssize count = write (fd, buf, to_write); + auto count = write(fd, buf, to_write); if (count < 0) { if (errno != EINTR) @@ -367,736 +61,75 @@ write_all (gint fd, gconstpointer vbuf, gsize to_write) buf += count; } } - - return TRUE; -} - -G_GNUC_NORETURN -static void -write_err_and_exit (gint fd, gint msg) -{ - gint en = errno; - - write_all (fd, &msg, sizeof(msg)); - write_all (fd, &en, sizeof(en)); - - _exit (1); -} - -static int -fd_set_cloexec(int fd) -{ - int flags = fcntl(fd, F_GETFD, 0); - if (flags < 0) - return flags; - - return fcntl(fd, F_SETFD, flags | FD_CLOEXEC); -} - -static int -fd_set_nonblocking(int fd) -{ - int flags = fcntl(fd, F_GETFL, 0); - if (flags < 0) - return -1; - if ((flags & O_NONBLOCK) != 0) - return 0; - return fcntl(fd, F_SETFL, flags | O_NONBLOCK); -} - -static int -set_cloexec (void *data, gint fd) -{ - if (fd >= GPOINTER_TO_INT (data)) - fd_set_cloexec (fd); - - return 0; -} - -G_GNUC_UNUSED static int -close_func (void *data, int fd) -{ - if (fd >= GPOINTER_TO_INT (data)) - (void) close (fd); - - return 0; -} - -#ifdef __linux__ -struct linux_dirent64 -{ - guint64 d_ino; /* 64-bit inode number */ - guint64 d_off; /* 64-bit offset to next structure */ - unsigned short d_reclen; /* Size of this dirent */ - unsigned char d_type; /* File type */ - char d_name[]; /* Filename (null-terminated) */ -}; - -static gint -filename_to_fd (const char *p) -{ - char c; - int fd = 0; - const int cutoff = G_MAXINT / 10; - const int cutlim = G_MAXINT % 10; - - if (*p == '\0') - return -1; - - while ((c = *p++) != '\0') - { - if (!g_ascii_isdigit (c)) - return -1; - c -= '0'; - - /* Check for overflow. */ - if (fd > cutoff || (fd == cutoff && c > cutlim)) - return -1; - - fd = fd * 10 + c; - } - - return fd; -} -#endif - -#ifndef HAVE_FDWALK -static int -fdwalk (int (*cb)(void *data, int fd), void *data) -{ - /* Fallback implementation of fdwalk. It should be async-signal safe, but it - * may be slow on non-Linux operating systems, especially on systems allowing - * very high number of open file descriptors. - */ - gint open_max; - gint fd; - gint res = 0; - -#ifdef HAVE_SYS_RESOURCE_H - struct rlimit rl; -#endif - -#ifdef __linux__ - /* Avoid use of opendir/closedir since these are not async-signal-safe. */ - int dir_fd = open ("/proc/self/fd", O_RDONLY | O_DIRECTORY); - if (dir_fd >= 0) - { - char buf[4096]; - int pos, nread; - struct linux_dirent64 *de; - - while ((nread = syscall (SYS_getdents64, dir_fd, buf, sizeof(buf))) > 0) - { - for (pos = 0; pos < nread; pos += de->d_reclen) - { - de = (struct linux_dirent64 *)(buf + pos); - - fd = filename_to_fd (de->d_name); - if (fd < 0 || fd == dir_fd) - continue; - - if ((res = cb (data, fd)) != 0) - break; - } - } - - close (dir_fd); - return res; - } - - /* If /proc is not mounted or not accessible we fall back to the old - * rlimit trick */ - -#endif - -#ifdef HAVE_SYS_RESOURCE_H - - if (getrlimit(RLIMIT_NOFILE, &rl) == 0 && rl.rlim_max != RLIM_INFINITY) - open_max = rl.rlim_max; - else -#endif - open_max = sysconf (_SC_OPEN_MAX); - - for (fd = 0; fd < open_max; fd++) - if ((res = cb (data, fd)) != 0) - break; - - return res; -} -#endif /* HAVE_FDWALK */ - -static void -safe_closefrom (int lowfd) -{ -#if defined(__FreeBSD__) || defined(__OpenBSD__) - /* Use closefrom function provided by the system if it is known to be - * async-signal safe. - * - * FreeBSD: closefrom is included in the list of async-signal safe functions - * found in https://man.freebsd.org/sigaction(2). - * - * OpenBSD: closefrom is not included in the list, but a direct system call - * should be safe to use. - */ - (void) closefrom (lowfd); -#elif defined(__DragonFly__) - /* It is unclear whether closefrom function included in DragonFlyBSD libc_r - * is safe to use because it calls a lot of library functions. It is also - * unclear whether libc_r itself is still being used. Therefore, we do a - * direct system call here ourselves to avoid possible issues. - */ - (void) syscall (SYS_closefrom, lowfd); -#elif defined(F_CLOSEM) - /* NetBSD and AIX have a special fcntl command which does the same thing as - * closefrom. NetBSD also includes closefrom function, which seems to be a - * simple wrapper of the fcntl command. - */ - (void) fcntl (lowfd, F_CLOSEM); -#else - (void) fdwalk (close_func, GINT_TO_POINTER (lowfd)); -#endif -} - -static gint -sane_dup2 (gint fd1, gint fd2) -{ - gint ret; - - do - ret = dup2 (fd1, fd2); - while (ret < 0 && (errno == EINTR || errno == EBUSY)); - - return ret; -} - -static gint -sane_open (const char *path, gint mode) -{ - gint ret; - - do - ret = open (path, mode); - while (ret < 0 && errno == EINTR); - - return ret; -} - -enum -{ - CHILD_CHDIR_FAILED, - CHILD_EXEC_FAILED, - CHILD_DUP2_FAILED, - CHILD_FORK_FAILED -}; - -static G_GNUC_NORETURN void -do_exec (gint child_err_report_fd, - gint stdin_fd, - gint stdout_fd, - gint stderr_fd, - const gchar *working_directory, - gchar **argv, - gchar **envp, - gboolean close_descriptors, - gboolean search_path, - gboolean search_path_from_envp, - gboolean stdout_to_null, - gboolean stderr_to_null, - gboolean child_inherits_stdin, - gboolean file_and_argv_zero, - GSpawnChildSetupFunc child_setup, - gpointer user_data) -{ - if (working_directory && chdir (working_directory) < 0) - write_err_and_exit (child_err_report_fd, - CHILD_CHDIR_FAILED); - - /* Redirect pipes as required */ - - if (stdin_fd >= 0) - { - /* dup2 can't actually fail here I don't think */ - - if (sane_dup2 (stdin_fd, 0) < 0) - write_err_and_exit (child_err_report_fd, - CHILD_DUP2_FAILED); - - /* ignore this if it doesn't work */ - close_and_invalidate (&stdin_fd); - } - else if (!child_inherits_stdin) - { - /* Keep process from blocking on a read of stdin */ - gint read_null = open ("/dev/null", O_RDONLY); - g_assert (read_null != -1); - sane_dup2 (read_null, 0); - close_and_invalidate (&read_null); - } - - if (stdout_fd >= 0) - { - /* dup2 can't actually fail here I don't think */ - - if (sane_dup2 (stdout_fd, 1) < 0) - write_err_and_exit (child_err_report_fd, - CHILD_DUP2_FAILED); - - /* ignore this if it doesn't work */ - close_and_invalidate (&stdout_fd); - } - else if (stdout_to_null) - { - gint write_null = sane_open ("/dev/null", O_WRONLY); - g_assert (write_null != -1); - sane_dup2 (write_null, 1); - close_and_invalidate (&write_null); - } - - if (stderr_fd >= 0) - { - /* dup2 can't actually fail here I don't think */ - - if (sane_dup2 (stderr_fd, 2) < 0) - write_err_and_exit (child_err_report_fd, - CHILD_DUP2_FAILED); - - /* ignore this if it doesn't work */ - close_and_invalidate (&stderr_fd); - } - else if (stderr_to_null) - { - gint write_null = sane_open ("/dev/null", O_WRONLY); - sane_dup2 (write_null, 2); - close_and_invalidate (&write_null); - } - - /* Close all file descriptors but stdin, stdout and stderr - * before we exec. Note that this includes - * child_err_report_fd, which keeps the parent from blocking - * forever on the other end of that pipe. - */ - if (close_descriptors) - { - if (child_setup == NULL) - { - sane_dup2 (child_err_report_fd, 3); - set_cloexec (GINT_TO_POINTER (0), 3); - safe_closefrom (4); - child_err_report_fd = 3; - } - else - { - fdwalk (set_cloexec, GINT_TO_POINTER (3)); - } - } - else - { - /* We need to do child_err_report_fd anyway */ - set_cloexec (GINT_TO_POINTER (0), child_err_report_fd); - } - - /* Call user function just before we exec */ - if (child_setup) - { - (* child_setup) (user_data); - } - - g_execute (argv[0], - file_and_argv_zero ? argv + 1 : argv, - envp, search_path, search_path_from_envp); - - /* Exec failed */ - write_err_and_exit (child_err_report_fd, - CHILD_EXEC_FAILED); -} - -static gboolean -read_ints (int fd, - gint* buf, - gint n_ints_in_buf, - gint *n_ints_read, - gint timeout, - GPollFD *cancellable_pollfd, - GError **error) -{ - gsize bytes = 0; - GPollFD pollfds[2]; - guint n_pollfds; - gint64 start_time = 0; - - if (timeout >= 0 || cancellable_pollfd != NULL) - { - if (fd_set_nonblocking(fd) < 0) - { - int errsv = errno; - g_set_error (error, G_SPAWN_ERROR, G_SPAWN_ERROR_FAILED, - _("Failed to set pipe nonblocking: %s"), g_strerror (errsv)); - return FALSE; - } - - pollfds[0].fd = fd; - pollfds[0].events = G_IO_IN | G_IO_HUP | G_IO_ERR; - n_pollfds = 1; - - if (cancellable_pollfd != NULL) - { - pollfds[1] = *cancellable_pollfd; - n_pollfds = 2; - } - } - else - n_pollfds = 0; - - if (timeout >= 0) - start_time = g_get_monotonic_time (); - - while (TRUE) - { - gssize chunk; - - if (bytes >= sizeof(gint)*2) - break; /* give up, who knows what happened, should not be - * possible. - */ - - again: - if (n_pollfds != 0) - { - int r; - - pollfds[0].revents = pollfds[1].revents = 0; - - r = g_poll (pollfds, n_pollfds, timeout); - - /* Update timeout */ - if (timeout >= 0) - { - timeout -= (g_get_monotonic_time () - start_time) / 1000; - if (timeout < 0) - timeout = 0; - } - - if (r < 0 && errno == EINTR) - goto again; - if (r < 0) - { - int errsv = errno; - g_set_error (error, G_SPAWN_ERROR, G_SPAWN_ERROR_FAILED, - _("poll error: %s"), g_strerror (errsv)); - return FALSE; - } - if (r == 0) - { - g_set_error_literal (error, G_SPAWN_ERROR, VTE_SPAWN_ERROR_TIMED_OUT, - _("Operation timed out")); - return FALSE; - } - - /* If the passed-in poll FD becomes readable, that's the signal - * to cancel the operation. We do NOT actually read from its FD! - */ - if (n_pollfds == 2 && pollfds[1].revents) - { - g_set_error_literal (error, G_SPAWN_ERROR, VTE_SPAWN_ERROR_CANCELLED, - _("Operation was cancelled")); - return FALSE; - } - - /* Now we know we can try to read from the child */ - } - - chunk = read (fd, - ((gchar*)buf) + bytes, - sizeof(gint) * n_ints_in_buf - bytes); - if (chunk < 0 && errno == EINTR) - goto again; - - if (chunk < 0) - { - int errsv = errno; - - /* Some weird shit happened, bail out */ - g_set_error (error, - G_SPAWN_ERROR, - G_SPAWN_ERROR_FAILED, - _("Failed to read from child pipe (%s)"), - g_strerror (errsv)); - - return FALSE; - } - else if (chunk == 0) - break; /* EOF */ - else /* chunk > 0 */ - bytes += chunk; - } - - *n_ints_read = (gint)(bytes / sizeof(gint)); return TRUE; } -static gboolean -fork_exec_with_pipes (gboolean intermediate_child, - const gchar *working_directory, - gchar **argv, - gchar **envp, - gboolean close_descriptors, - gboolean search_path, - gboolean search_path_from_envp, - gboolean stdout_to_null, - gboolean stderr_to_null, - gboolean child_inherits_stdin, - gboolean file_and_argv_zero, - gboolean cloexec_pipes, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - GPid *child_pid, - gint *standard_input, - gint *standard_output, - gint *standard_error, - gint timeout, - GPollFD *pollfd, - GError **error) +/* This function is called between fork and execve/_exit and so must be + * async-signal-safe; see man:signal-safety(7). + */ +void +_vte_write_err (int fd, + int msg) noexcept { - GPid pid = -1; - gint stdin_pipe[2] = { -1, -1 }; - gint stdout_pipe[2] = { -1, -1 }; - gint stderr_pipe[2] = { -1, -1 }; - gint child_err_report_pipe[2] = { -1, -1 }; - gint child_pid_report_pipe[2] = { -1, -1 }; - guint pipe_flags = cloexec_pipes ? FD_CLOEXEC : 0; + int data[2] = {msg, errno}; - g_assert(!intermediate_child); - - if (!g_unix_open_pipe (child_err_report_pipe, pipe_flags, error)) - return FALSE; - - if (standard_input && !g_unix_open_pipe (stdin_pipe, pipe_flags, error)) - goto cleanup_and_fail; - - if (standard_output && !g_unix_open_pipe (stdout_pipe, pipe_flags, error)) - goto cleanup_and_fail; - - if (standard_error && !g_unix_open_pipe (stderr_pipe, FD_CLOEXEC, error)) - goto cleanup_and_fail; - - pid = fork (); - - if (pid < 0) - { - int errsv = errno; - - g_set_error (error, - G_SPAWN_ERROR, - G_SPAWN_ERROR_FORK, - _("Failed to fork (%s)"), - g_strerror (errsv)); - - goto cleanup_and_fail; - } - else if (pid == 0) - { - /* Immediate child. This may or may not be the child that - * actually execs the new process. - */ - - /* Reset some signal handlers that we may use */ - signal (SIGCHLD, SIG_DFL); - signal (SIGINT, SIG_DFL); - signal (SIGTERM, SIG_DFL); - signal (SIGHUP, SIG_DFL); - - /* Be sure we crash if the parent exits - * and we write to the err_report_pipe - */ - signal (SIGPIPE, SIG_DFL); - - /* Close the parent's end of the pipes; - * not needed in the close_descriptors case, - * though - */ - close_and_invalidate (&child_err_report_pipe[0]); - close_and_invalidate (&child_pid_report_pipe[0]); - close_and_invalidate (&stdin_pipe[1]); - close_and_invalidate (&stdout_pipe[0]); - close_and_invalidate (&stderr_pipe[0]); - - do_exec (child_err_report_pipe[1], - stdin_pipe[0], - stdout_pipe[1], - stderr_pipe[1], - working_directory, - argv, - envp, - close_descriptors, - search_path, - search_path_from_envp, - stdout_to_null, - stderr_to_null, - child_inherits_stdin, - file_and_argv_zero, - child_setup, - user_data); - } - else - { - /* Parent */ - - gint buf[2]; - gint n_ints = 0; - - /* Close the uncared-about ends of the pipes */ - close_and_invalidate (&child_err_report_pipe[1]); - close_and_invalidate (&child_pid_report_pipe[1]); - close_and_invalidate (&stdin_pipe[0]); - close_and_invalidate (&stdout_pipe[1]); - close_and_invalidate (&stderr_pipe[1]); - - if (!read_ints (child_err_report_pipe[0], - buf, 2, &n_ints, - timeout, pollfd, - error)) - goto cleanup_and_fail; - - if (n_ints >= 2) - { - /* Error from the child. */ - - switch (buf[0]) - { - case CHILD_CHDIR_FAILED: - g_set_error (error, - G_SPAWN_ERROR, - G_SPAWN_ERROR_CHDIR, - _("Failed to change to directory “%s” (%s)"), - working_directory, - g_strerror (buf[1])); - - break; - - case CHILD_EXEC_FAILED: - g_set_error (error, - G_SPAWN_ERROR, - exec_err_to_g_error (buf[1]), - _("Failed to execute child process “%s” (%s)"), - argv[0], - g_strerror (buf[1])); - - break; - - case CHILD_DUP2_FAILED: - g_set_error (error, - G_SPAWN_ERROR, - G_SPAWN_ERROR_FAILED, - _("Failed to redirect output or input of child process (%s)"), - g_strerror (buf[1])); - - break; - - case CHILD_FORK_FAILED: - g_set_error (error, - G_SPAWN_ERROR, - G_SPAWN_ERROR_FORK, - _("Failed to fork child process (%s)"), - g_strerror (buf[1])); - break; - - default: - g_set_error (error, - G_SPAWN_ERROR, - G_SPAWN_ERROR_FAILED, - _("Unknown error executing child process “%s”"), - argv[0]); - break; - } - - goto cleanup_and_fail; - } - - /* Success against all odds! return the information */ - close_and_invalidate (&child_err_report_pipe[0]); - close_and_invalidate (&child_pid_report_pipe[0]); - - if (child_pid) - *child_pid = pid; - - if (standard_input) - *standard_input = stdin_pipe[1]; - if (standard_output) - *standard_output = stdout_pipe[0]; - if (standard_error) - *standard_error = stderr_pipe[0]; - - return TRUE; - } - - cleanup_and_fail: - - /* There was an error from the Child, reap the child to avoid it being - a zombie. - */ - - if (pid > 0) - { - vte_reaper_add_child(pid); - } - - close_and_invalidate (&child_err_report_pipe[0]); - close_and_invalidate (&child_err_report_pipe[1]); - close_and_invalidate (&child_pid_report_pipe[0]); - close_and_invalidate (&child_pid_report_pipe[1]); - close_and_invalidate (&stdin_pipe[0]); - close_and_invalidate (&stdin_pipe[1]); - close_and_invalidate (&stdout_pipe[0]); - close_and_invalidate (&stdout_pipe[1]); - close_and_invalidate (&stderr_pipe[0]); - close_and_invalidate (&stderr_pipe[1]); - - return FALSE; + write_all(fd, data, sizeof(data)); } /* Based on execvp from GNU C Library */ -static void -script_execute (const gchar *file, - gchar **argv, - gchar **envp) +/* This function is called between fork and execve/_exit and so must be + * async-signal-safe; see man:signal-safety(7). + */ +/* Returns false if failing before execv(e), or true if failing after it. */ +static bool +script_execute (char const* file, + char** argv, + char** envp, + void* workbuf, + size_t workbufsize) noexcept { /* Count the arguments. */ int argc = 0; while (argv[argc]) ++argc; - - /* Construct an argument list for the shell. */ - { - gchar **new_argv; - new_argv = g_new0 (gchar*, argc + 2); /* /bin/sh and NULL */ - - new_argv[0] = (char *) "/bin/sh"; - new_argv[1] = (char *) file; - while (argc > 0) - { - new_argv[argc + 1] = argv[argc]; - --argc; - } - - /* Execute the shell. */ - if (envp) - execve (new_argv[0], new_argv, envp); - else - execv (new_argv[0], new_argv); - - g_free (new_argv); + auto argv_buffer = reinterpret_cast(workbuf); + auto argv_buffer_len = workbufsize / sizeof(char*); + /* Construct an argument list for the shell. */ + if (size_t(argc + 2) > argv_buffer_len) { + errno = ENOMEM; + return false; } + + argv_buffer[0] = (char *) "/bin/sh"; + argv_buffer[1] = (char *) file; + while (argc > 0) + { + argv_buffer[argc + 1] = argv[argc]; + --argc; + } + + /* Execute the shell. */ + if (envp) + execve (argv_buffer[0], argv_buffer, envp); + else + execv (argv_buffer[0], argv_buffer); + + return true; } -static gint -g_execute (const gchar *file, - gchar **argv, - gchar **envp, - gboolean search_path, - gboolean search_path_from_envp) +/* This function is called between fork and execve/_exit and so must be + * async-signal-safe; see man:signal-safety(7). + */ +int +_vte_execute (const char *file, + char **argv, + char **envp, + char const* search_path, + void* workbuf, + size_t workbufsize) noexcept { if (*file == '\0') { @@ -1105,50 +138,33 @@ g_execute (const gchar *file, return -1; } - if (!(search_path || search_path_from_envp) || strchr (file, '/') != NULL) + if (!search_path || strchr (file, '/') != nullptr) { /* Don't search when it contains a slash. */ if (envp) execve (file, argv, envp); else execv (file, argv); - + if (errno == ENOEXEC) - script_execute (file, argv, envp); + script_execute(file, argv, envp, workbuf, workbufsize); } else { - gboolean got_eacces = 0; - const gchar *path, *p; - gchar *name, *freeme; - gsize len; - gsize pathlen; + auto got_eacces = false; + char const* path = search_path; + char const* p; + char* name = reinterpret_cast(workbuf); - path = NULL; - if (search_path_from_envp) - path = g_environ_getenv (envp, "PATH"); - if (search_path && path == NULL) - path = g_getenv ("PATH"); + auto const len = strlen(file) + 1; + auto const pathlen = strlen(path); - if (path == NULL) - { - /* There is no 'PATH' in the environment. The default - * search path in libc is the current directory followed by - * the path 'confstr' returns for '_CS_PATH'. - */ + if (workbufsize < pathlen + len + 1) + { + errno = ENOMEM; + return -1; + } - /* In GLib we put . last, for security, and don't use the - * unportable confstr(); UNIX98 does not actually specify - * what to search if PATH is unset. POSIX may, dunno. - */ - - path = "/bin:/usr/bin:."; - } - - len = strlen (file) + 1; - pathlen = strlen (path); - freeme = name = (char*)g_malloc (pathlen + len + 1); - /* Copy the file name at the top, including '\0' */ memcpy (name + pathlen + 1, file, len); name = name + pathlen; @@ -1169,16 +185,17 @@ g_execute (const gchar *file, */ startp = name + 1; else - startp = (char*)memcpy (name - (p - path), path, p - path); + startp = reinterpret_cast(memcpy (name - (p - path), path, p - path)); /* Try to execute this name. If it works, execv will not return. */ if (envp) execve (startp, argv, envp); else execv (startp, argv); - - if (errno == ENOEXEC) - script_execute (startp, argv, envp); + + if (errno == ENOEXEC && + !script_execute(startp, argv, envp, workbuf, workbufsize)) + return -1; switch (errno) { @@ -1189,8 +206,7 @@ g_execute (const gchar *file, */ got_eacces = TRUE; - /* FALL THRU */ - + [[fallthrough]]; case ENOENT: #ifdef ESTALE case ESTALE: @@ -1217,7 +233,6 @@ g_execute (const gchar *file, * something went wrong executing it; return the error to our * caller. */ - g_free (freeme); return -1; } } @@ -1229,8 +244,6 @@ g_execute (const gchar *file, * error. */ errno = EACCES; - - g_free (freeme); } /* Return the error from the last attempt (probably ENOENT). */ diff --git a/src/vtespawn.hh b/src/vtespawn.hh index 6b75e3e..f7644e4 100644 --- a/src/vtespawn.hh +++ b/src/vtespawn.hh @@ -2,47 +2,30 @@ * * Copyright 2000 Red Hat, Inc. * - * GLib is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * - * GLib is distributed in the hope that it will be useful, + * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with GLib; see the file COPYING.LIB. If not, write - * to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once #include -gboolean vte_spawn_async_cancellable (const gchar *working_directory, - gchar **argv, - gchar **envp, - GSpawnFlags flags, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - GPid *child_pid, - gint timeout, - GPollFD *pollfd, - GError **error); +int _vte_execute(char const* file, + char** argv, + char** envp, + char const* path_env, + void* workbuf, + size_t workbufsize) noexcept; -gboolean vte_spawn_async_with_pipes_cancellable (const gchar *working_directory, - gchar **argv, - gchar **envp, - GSpawnFlags flags, - GSpawnChildSetupFunc child_setup, - gpointer user_data, - GPid *child_pid, - gint *standard_input, - gint *standard_output, - gint *standard_error, - gint timeout, - GPollFD *pollfd, - GError **error); +void _vte_write_err (int fd, + int msg) noexcept; diff --git a/src/vtestream-base.h b/src/vtestream-base.h index 4767d11..51b4514 100644 --- a/src/vtestream-base.h +++ b/src/vtestream-base.h @@ -1,19 +1,18 @@ /* * Copyright (C) 2009,2010 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . * * Red Hat Author(s): Behdad Esfahbod */ diff --git a/src/vtestream-file.h b/src/vtestream-file.h index a21a67c..05bb0fe 100644 --- a/src/vtestream-file.h +++ b/src/vtestream-file.h @@ -2,19 +2,18 @@ * Copyright (C) 2009,2010 Red Hat, Inc. * Copyright (C) 2013 Google, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . * * Red Hat Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod @@ -82,18 +81,20 @@ #include #include #include -#include - -#ifdef WITH_GNUTLS -# include -# include -#endif +#include #include "vteutils.h" +#if WITH_GNUTLS +# include +# include +#else +#undef WITH_GNUTLS +#endif + G_BEGIN_DECLS -#ifdef WITH_GNUTLS +#if WITH_GNUTLS /* Currently the code requires that a stream cipher (e.g. GCM) is used * which can encrypt any amount of data without need for padding. */ # define VTE_CIPHER_ALGORITHM GNUTLS_CIPHER_AES_256_GCM @@ -127,11 +128,11 @@ typedef guint8 _vte_overwrite_counter_t; /******************************************************************************************/ -#ifndef HAVE_EXPLICIT_BZERO +#if !HAVE_EXPLICIT_BZERO #define explicit_bzero(s, n) memset((s), 0, (n)) #endif -#ifndef HAVE_PREAD +#if !HAVE_PREAD #define pread _pread static inline gsize pread (int fd, char *data, gsize len, gsize offset) @@ -142,7 +143,7 @@ pread (int fd, char *data, gsize len, gsize offset) } #endif -#ifndef HAVE_PWRITE +#if !HAVE_PWRITE #define pwrite _pwrite static inline gsize pwrite (int fd, char *data, gsize len, gsize offset) @@ -367,11 +368,41 @@ static GType _vte_snake_get_type (void); G_DEFINE_TYPE (VteSnake, _vte_snake, G_TYPE_OBJECT) +static void +_vte_snake_verify (VteSnake *snake) +{ +#ifdef VTE_DEBUG + int i; + + g_assert_cmpuint (snake->tail, <=, snake->head); + + g_assert_cmpuint (snake->tail, ==, snake->segment[0].st_tail); + for (i = 1; i < VTE_SNAKE_SEGMENTS(snake); i++) { + g_assert_cmpuint (snake->segment[i].st_tail, ==, snake->segment[i - 1].st_head); + } + g_assert_cmpuint (snake->head, ==, snake->segment[VTE_SNAKE_SEGMENTS(snake) - 1].st_head); + + if (snake->tail == snake->head) { + g_assert_cmpuint (snake->state, ==, 1); + } else { + for (i = 0; i < VTE_SNAKE_SEGMENTS(snake); i++) { + g_assert_cmpuint (snake->segment[i].st_tail, <, snake->segment[i].st_head); + } + } + + for (i = 0; i < VTE_SNAKE_SEGMENTS(snake); i++) { + g_assert_cmpuint (snake->segment[i].st_head - snake->segment[i].st_tail, ==, snake->segment[i].fd_head - snake->segment[i].fd_tail); + } +#endif +} + static void _vte_snake_init (VteSnake *snake) { snake->fd = -1; snake->state = 1; + + _vte_snake_verify(snake); } static void @@ -411,6 +442,8 @@ _vte_snake_reset (VteSnake *snake, gsize offset) /* Never retreat the head: bug 748484. */ _vte_snake_advance_tail (snake, offset); } + + _vte_snake_verify(snake); } /* @@ -508,6 +541,8 @@ _vte_snake_write (VteSnake *snake, gsize offset, const char *data, gsize len) _file_try_punch_hole (snake->fd, fd_offset, VTE_SNAKE_BLOCKSIZE); } _file_write (snake->fd, data, len, fd_offset); + + _vte_snake_verify(snake); } /* @@ -533,7 +568,7 @@ _vte_snake_advance_tail (VteSnake *snake, gsize offset) _file_try_punch_hole (snake->fd, snake->segment[0].fd_tail, offset - snake->tail); snake->segment[0].fd_tail += offset - snake->tail; snake->segment[0].st_tail = snake->tail = offset; - return; + break; } else { /* Drop the entire first segment. */ switch (snake->state) { @@ -561,9 +596,11 @@ _vte_snake_advance_tail (VteSnake *snake, gsize offset) break; } } + snake->tail = snake->segment[0].st_tail; } - g_assert_cmpuint (snake->segment[0].st_tail, ==, offset); - snake->tail = offset; + + g_assert_cmpuint (snake->tail, ==, offset); + _vte_snake_verify(snake); } static gsize @@ -738,7 +775,7 @@ static int _vte_boa_compressBound (unsigned int len) { #ifndef VTESTREAM_MAIN - return compressBound(len); + return LZ4_compressBound(len); #else return 2 * len; #endif @@ -749,12 +786,9 @@ static unsigned int _vte_boa_compress (char *dst, unsigned int dstlen, const char *src, unsigned int srclen) { #ifndef VTESTREAM_MAIN - uLongf dstlen_ulongf = dstlen; - unsigned int z_ret; - - z_ret = compress2 ((Bytef *) dst, &dstlen_ulongf, (const Bytef *) src, srclen, 1); - g_assert_cmpuint (z_ret, ==, Z_OK); - return dstlen_ulongf; + int len = LZ4_compress_default (src, dst, srclen, dstlen); + g_assert_cmpuint (len, >=, 0); + return len; #else /* Fake compression for unit testing: * Each char gets prefixed by a repetition count. This prefix is omitted if it would be the @@ -787,12 +821,9 @@ static unsigned int _vte_boa_uncompress (char *dst, unsigned int dstlen, const char *src, unsigned int srclen) { #ifndef VTESTREAM_MAIN - uLongf dstlen_ulongf = dstlen; - unsigned int z_ret; - - z_ret = uncompress ((Bytef *) dst, &dstlen_ulongf, (const Bytef *) src, srclen); - g_assert_cmpuint (z_ret, ==, Z_OK); - return dstlen_ulongf; + int len = LZ4_decompress_safe (src, dst, srclen, dstlen); + g_assert_cmpint (len, >=, 0); + return len; #else /* Fake decompression for unit testing; see above. */ unsigned int len = 0, repeat = 0; @@ -1446,6 +1477,16 @@ test_snake (void) assert_file (snake->fd, "Giraffe.......................Ferret...."); assert_snake (snake, 2, 50, 70, "Ferret....Giraffe..."); + /* Stay in state 2 */ + snake_write (snake, 70, "Horse"); + assert_file (snake->fd, "Giraffe...Horse...............Ferret...."); + assert_snake (snake, 2, 50, 80, "Ferret....Giraffe...Horse....."); + + /* State 2 -> 1. Advance tail across state change, bug 2699 */ + _vte_snake_advance_tail (snake, 70); + assert_file (snake->fd, "..........Horse....."); + assert_snake (snake, 1, 70, 80, "Horse....."); + /* Reset, back to state 1 */ _vte_snake_reset (snake, 250); assert_snake (snake, 1, 250, 250, ""); diff --git a/src/vtestream.cc b/src/vtestream.cc index 4fc5ef7..85a539c 100644 --- a/src/vtestream.cc +++ b/src/vtestream.cc @@ -1,19 +1,18 @@ /* * Copyright (C) 2009,2010 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . * * Red Hat Author(s): Behdad Esfahbod */ diff --git a/src/vtestream.h b/src/vtestream.h index 916332f..1d36ecc 100644 --- a/src/vtestream.h +++ b/src/vtestream.h @@ -1,19 +1,18 @@ /* * Copyright (C) 2009,2010 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . * * Red Hat Author(s): Behdad Esfahbod */ diff --git a/src/vtetypebuiltins.cc.template b/src/vtetypebuiltins.cc.template index dade41d..3a50d40 100644 --- a/src/vtetypebuiltins.cc.template +++ b/src/vtetypebuiltins.cc.template @@ -11,9 +11,9 @@ GType @enum_name@_get_type (void) { - static volatile gsize g_define_type_id__volatile = 0; + static gsize g_define_type_id = 0; - if (g_once_init_enter (&g_define_type_id__volatile)) { + if (g_once_init_enter (&g_define_type_id)) { static const G@Type@Value values[] = { /*** END value-header ***/ @@ -24,13 +24,13 @@ GType /*** BEGIN value-tail ***/ { 0, NULL, NULL } }; - GType g_define_type_id = \ + GType type_id = \ g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); - g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + g_once_init_leave (&g_define_type_id, type_id); } - return g_define_type_id__volatile; + return g_define_type_id; } /*** END value-tail ***/ diff --git a/src/vtetypebuiltins.h.template b/src/vtetypebuiltins.h.template index 3f7b9dc..8f868b3 100644 --- a/src/vtetypebuiltins.h.template +++ b/src/vtetypebuiltins.h.template @@ -1,11 +1,10 @@ /*** BEGIN file-header ***/ +#pragma once + #if !defined (__VTE_VTE_H_INSIDE__) && !defined (VTE_COMPILATION) #error "Only can be included directly." #endif -#ifndef __VTE_VTE_TYPE_BUILTINS_H__ -#define __VTE_VTE_TYPE_BUILTINS_H__ - #include #include "vtemacros.h" @@ -26,6 +25,4 @@ GType @enum_name@_get_type (void); /*** BEGIN file-tail ***/ G_END_DECLS - -#endif /* __VTE_VTE_TYPE_BUILTINS_H__ */ /*** END file-tail ***/ diff --git a/src/vtetypes.cc b/src/vtetypes.cc index c657cc2..eb5c3c7 100644 --- a/src/vtetypes.cc +++ b/src/vtetypes.cc @@ -1,18 +1,18 @@ /* * Copyright © 2015 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -20,6 +20,7 @@ #include #include "vtetypes.hh" +#include "libc-glue.hh" #include @@ -27,13 +28,13 @@ static_assert(sizeof(vte::grid::coords) == 2 * sizeof(long), "vte::grid::coords static_assert(sizeof(vte::grid::span) == 4 * sizeof(long), "vte::grid::span size wrong"); -static_assert(std::is_pod::value, "vte::view::coords not POD"); +static_assert(std::is_standard_layout_v && std::is_trivial_v, "vte::view::coords not POD"); static_assert(sizeof(vte::view::coords) == 2 * sizeof(vte::view::coord_t), "vte::view::coords size wrong"); -static_assert(std::is_pod::value, "vte::color::rgb not POD"); +static_assert(std::is_standard_layout_v && std::is_trivial_v, "vte::color::rgb not POD"); static_assert(sizeof(vte::color::rgb) == sizeof(PangoColor), "vte::color::rgb size wrong"); -static_assert(sizeof(vte::util::smart_fd) == sizeof(int), "vte::util::smart_fd size wrong"); +static_assert(sizeof(vte::libc::FD) == sizeof(int), "vte::libc::FD size wrong"); vte::color::rgb::rgb(GdkRGBA const* rgba) { g_assert(rgba); @@ -75,7 +76,7 @@ vte::color::rgb::parse(char const* spec) return retval; } -#ifdef VTE_DEBUG +#if VTE_DEBUG #define DEBUG_STRING_SIZE (256) #define DEBUG_STRING_SLICES (64) @@ -203,7 +204,7 @@ test_grid_coords (void) g_assert_false(coords(42, 42) >= coords(43, 160)); g_assert_false(coords(42, 42) > coords(43, 160)); -#ifdef VTE_DEBUG +#if VTE_DEBUG /* to_string() */ g_assert_cmpstr(vte::grid::coords(17, 42).to_string(), ==, "grid[17,42]"); #endif @@ -256,7 +257,7 @@ test_grid_halfcoords (void) g_assert_false(d > e); g_assert_false(d >= e); -#ifdef VTE_DEBUG +#if VTE_DEBUG /* to_string() */ g_assert_cmpstr(halfcoords(16, 32, 0).to_string(), ==, "halfgrid[16,32L]"); g_assert_cmpstr(halfcoords(16, 32, 1).to_string(), ==, "halfgrid[16,32R]"); @@ -362,7 +363,7 @@ test_grid_span (void) span s10(16, 16, 32, 1); g_assert_cmpint(s10.last_row(), ==, 32); -#ifdef VTE_DEBUG +#if VTE_DEBUG /* to_string() */ g_assert_cmpstr(vte::grid::span(17, 42, 18, 3).to_string(), ==, "grid[(17,42), (18,3))"); #endif @@ -394,7 +395,7 @@ test_view_coords (void) g_assert_true(p3 == p4); g_assert_true(p5 == p2); -#ifdef VTE_DEBUG +#if VTE_DEBUG /* to_string() */ g_assert_cmpstr(vte::view::coords(256, 512).to_string(), ==, "view[256,512]"); #endif @@ -411,33 +412,12 @@ test_util_restore_errno(void) { errno = -42; { - vte::util::restore_errno errsv; + vte::libc::ErrnoSaver errsv; errno = 36; } g_assert_cmpint(errno, ==, -42); } -static void -test_util_smart_fd(void) -{ - vte::util::smart_fd fd2; - g_assert_true(fd2 == -1); - - fd2 = 42; - g_assert_true(fd2 == 42); - - vte::util::smart_fd fd3(STDERR_FILENO); - g_assert_true(fd3 != -1); - g_assert_true(fd3 == STDERR_FILENO); - - g_assert_cmpint(fd3.steal(), ==, STDERR_FILENO); - g_assert_true(fd3 == -1); - - int *v = fd3; - *v = 42; - g_assert_true(fd3 == 42); -} - int main(int argc, char *argv[]) { @@ -449,7 +429,6 @@ main(int argc, char *argv[]) g_test_add_func("/vte/c++/color/rgb", test_color_rgb); g_test_add_func("/vte/c++/view/coords", test_view_coords); g_test_add_func("/vte/c++/util/restore-errno", test_util_restore_errno); - g_test_add_func("/vte/c++/util/smart-fd", test_util_smart_fd); return g_test_run(); } diff --git a/src/vtetypes.hh b/src/vtetypes.hh index 51dc424..db5abb7 100644 --- a/src/vtetypes.hh +++ b/src/vtetypes.hh @@ -1,18 +1,18 @@ /* * Copyright © 2015 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -25,7 +25,7 @@ #include #include -#ifdef VTE_DEBUG +#if VTE_DEBUG #define IFDEF_DEBUG(str) str #else #define IFDEF_DEBUG(str) @@ -194,45 +194,13 @@ namespace color { return red == rhs.red && green == rhs.green && blue == rhs.blue; } + inline GdkRGBA rgba(double alpha = 1.0) const { + return GdkRGBA{red/65535.f, green/65535.f, blue/65535.f, (float)alpha}; + } + IFDEF_DEBUG(char const* to_string() const); }; } /* namespace color */ -namespace util { - - class restore_errno { - public: - restore_errno() { m_errsv = errno; } - ~restore_errno() { errno = m_errsv; } - operator int () const { return m_errsv; } - private: - int m_errsv; - }; - - class smart_fd { - public: - constexpr smart_fd() noexcept = default; - explicit constexpr smart_fd(int fd) noexcept : m_fd{fd} { } - ~smart_fd() noexcept { if (m_fd != -1) { restore_errno errsv; close(m_fd); } } - - inline smart_fd& operator = (int rhs) noexcept { if (m_fd != -1) { restore_errno errsv; close(m_fd); } m_fd = rhs; return *this; } - inline smart_fd& operator = (smart_fd& rhs) noexcept { if (&rhs != this) { if (m_fd != -1) { restore_errno errsv; close(m_fd); } m_fd = rhs.m_fd; rhs.m_fd = -1; } return *this; } - inline constexpr operator int () const noexcept { return m_fd; } - inline constexpr operator int* () noexcept { assert(m_fd == -1); return &m_fd; } - - int steal() noexcept { auto d = m_fd; m_fd = -1; return d; } - - /* Prevent accidents */ - smart_fd(smart_fd const&) = delete; - smart_fd(smart_fd&&) = delete; - smart_fd& operator = (smart_fd const&) = delete; - smart_fd& operator = (smart_fd&&) = delete; - - private: - int m_fd{-1}; - }; - -} /* namespace util */ - } /* namespace vte */ diff --git a/src/vteunistr.cc b/src/vteunistr.cc index 319bd6b..59c4d91 100644 --- a/src/vteunistr.cc +++ b/src/vteunistr.cc @@ -1,19 +1,18 @@ /* * Copyright (C) 2008 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . * * Author(s): * Behdad Esfahbod @@ -21,6 +20,8 @@ #include +#include "debug.h" + #include "vteunistr.h" #include @@ -76,8 +77,6 @@ * encoded vteunistr value. */ -#define VTE_UNISTR_START 0x80000000 - static vteunistr unistr_next = VTE_UNISTR_START + 1; struct VteUnistrDecomp { @@ -163,7 +162,7 @@ _vte_unistr_get_base (vteunistr s) } void -_vte_unistr_append_to_gunichars (vteunistr s, GArray *a) +_vte_unistr_append_to_gunichars (vteunistr s, VteBidiChars *a) { if (G_UNLIKELY (s >= VTE_UNISTR_START)) { struct VteUnistrDecomp *decomp; @@ -172,7 +171,7 @@ _vte_unistr_append_to_gunichars (vteunistr s, GArray *a) s = decomp->suffix; } gunichar val = (gunichar) s; - g_array_append_val (a, val); + vte_bidi_chars_append(a, &val); } vteunistr @@ -183,23 +182,25 @@ _vte_unistr_replace_base (vteunistr s, gunichar c) if (G_LIKELY (_vte_unistr_get_base(s) == c)) return s; - GArray *a = g_array_new (FALSE, FALSE, sizeof (gunichar)); - _vte_unistr_append_to_gunichars (s, a); - g_assert_cmpint(a->len, >=, 1); + VteBidiChars a; + vte_bidi_chars_init(&a); + _vte_unistr_append_to_gunichars (s, &a); + vte_assert_cmpint(vte_bidi_chars_get_size(&a), >=, 1); s = c; - for (glong i = 1; i < a->len; i++) - s = _vte_unistr_append_unichar (s, g_array_index (a, gunichar, i)); + for (gsize i = 1; i < vte_bidi_chars_get_size(&a); i++) + s = _vte_unistr_append_unichar (s, *vte_bidi_chars_get (&a, i)); + + vte_bidi_chars_clear (&a); - g_array_free (a, TRUE); return s; } void -_vte_unistr_append_to_string (vteunistr s, GString *gs) +(_vte_unistr_append_to_string) (vteunistr s, GString *gs) { g_return_if_fail (s < unistr_next); - if (G_UNLIKELY (s >= VTE_UNISTR_START)) { + if (s >= VTE_UNISTR_START) { struct VteUnistrDecomp *decomp; decomp = &DECOMP_FROM_UNISTR (s); _vte_unistr_append_to_string (decomp->prefix, gs); @@ -209,11 +210,11 @@ _vte_unistr_append_to_string (vteunistr s, GString *gs) } int -_vte_unistr_strlen (vteunistr s) +(_vte_unistr_strlen) (vteunistr s) { int len = 1; g_return_val_if_fail (s < unistr_next, len); - while (G_UNLIKELY (s >= VTE_UNISTR_START)) { + while (s >= VTE_UNISTR_START) { s = DECOMP_FROM_UNISTR (s).prefix; len++; } diff --git a/src/vteunistr.h b/src/vteunistr.h index 84cb056..cfbfb98 100644 --- a/src/vteunistr.h +++ b/src/vteunistr.h @@ -1,19 +1,18 @@ /* * Copyright (C) 2008 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . * * Author(s): * Behdad Esfahbod @@ -24,8 +23,12 @@ #include +#include "bidiarrays.hh" + G_BEGIN_DECLS +#define VTE_UNISTR_START 0x80000000 + /** * vteunistr: * @@ -74,7 +77,7 @@ gunichar _vte_unistr_get_base (vteunistr s); /** - * _vte_unistr_append_to_string: + * _vte_unistr_replace_base: * @s: a #vteunistr * @c: Unicode character to replace the base character of @s. * @@ -86,6 +89,47 @@ _vte_unistr_get_base (vteunistr s); vteunistr _vte_unistr_replace_base (vteunistr s, gunichar c); +static inline int +_vte_g_string_append_unichar (GString *s, gunichar c) +{ + char outbuf[8]; + guint len = 0; + int first; + int i; + + if (c < 0x80) { + first = 0; + len = 1; + } + else if (c < 0x800) { + first = 0xc0; + len = 2; + } + else if (c < 0x10000) { + first = 0xe0; + len = 3; + } + else if (c < 0x200000) { + first = 0xf0; + len = 4; + } + else { + g_assert_not_reached (); + } + + for (i = len - 1; i > 0; --i) { + outbuf[i] = (c & 0x3f) | 0x80; + c >>= 6; + } + + outbuf[0] = c | first; + + // GLib can do an inlined append() + g_string_append_len (s, outbuf, len); + + return len; +} + /** * _vte_unistr_append_to_string: * @s: a #vteunistr @@ -96,16 +140,23 @@ _vte_unistr_replace_base (vteunistr s, gunichar c); **/ void _vte_unistr_append_to_string (vteunistr s, GString *gs); +#define _vte_unistr_append_to_string(s,gs) \ + G_STMT_START { \ + if G_LIKELY (s < VTE_UNISTR_START) \ + _vte_g_string_append_unichar (gs, (gunichar)s); \ + else \ + (_vte_unistr_append_to_string) (s, gs); \ + } G_STMT_END /** * _vte_unistr_append_to_gunichars: * @s: a #vteunistr - * @a: a #GArray of #gunichar items to append @s to + * @a: a #VteBidiChars of #gunichar items to append @s to * * Appends @s to @a. **/ void -_vte_unistr_append_to_gunichars (vteunistr s, GArray *a); +_vte_unistr_append_to_gunichars (vteunistr s, VteBidiChars *a); /** * _vte_unistr_strlen: @@ -117,6 +168,8 @@ _vte_unistr_append_to_gunichars (vteunistr s, GArray *a); **/ int _vte_unistr_strlen (vteunistr s); +#define _vte_unistr_strlen(s) \ + ((s) < VTE_UNISTR_START ? 1 : (_vte_unistr_strlen)(s)) G_END_DECLS diff --git a/src/vteutils.cc b/src/vteutils.cc index 154b854..95c79b8 100644 --- a/src/vteutils.cc +++ b/src/vteutils.cc @@ -1,19 +1,18 @@ /* * Copyright © 2013 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -32,15 +31,10 @@ #include #include -#ifndef O_TMPFILE -#ifndef __O_TMPFILE -#define __O_TMPFILE 020000000 -#endif -#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY) -#endif - #endif /* __linux__ */ +#include "missing.hh" + int _vte_mkstemp (void) { @@ -92,16 +86,3 @@ _vte_mkstemp (void) return fd; } - -#ifndef HAVE_STRCHRNUL -/* Copied from glib */ -char * -strchrnul (const char *s, int c) -{ - char *p = (char *) s; - while (*p && (*p != c)) - ++p; - - return p; -} -#endif /* !HAVE_STRCHRNUL */ diff --git a/src/vteutils.h b/src/vteutils.h index 0cc98eb..c32ac35 100644 --- a/src/vteutils.h +++ b/src/vteutils.h @@ -1,33 +1,22 @@ /* * Copyright © 2013 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ -#ifndef __VTE_UTILS_H__ -#define __VTE_UTILS_H__ +#pragma once #include -G_BEGIN_DECLS - int _vte_mkstemp (void); -#ifndef HAVE_STRCHRNUL -char *strchrnul (const char *s, int c); -#endif - -G_END_DECLS - -#endif /* __VTE_UTILS_H__ */ diff --git a/src/widget.cc b/src/widget.cc index a8bd6c3..b8daa5c 100644 --- a/src/widget.cc +++ b/src/widget.cc @@ -1,19 +1,19 @@ /* - * Copyright © 2008, 2009, 2010, 2018 Christian Persch + * Copyright © 2008, 2009, 2010, 2018, 2019, 2020, 2021 Christian Persch * Copyright © 2001-2004,2009,2010 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include "config.h" @@ -22,12 +22,21 @@ #include // for W_EXITCODE +#include #include +#include #include #include "vtegtk.hh" #include "vteptyinternal.hh" #include "debug.h" +#include "gobject-glue.hh" + +#if VTE_GTK == 3 +#define VTE_STYLE_CLASS_MONOSPACE GTK_STYLE_CLASS_MONOSPACE +#elif VTE_GTK == 4 +#define VTE_STYLE_CLASS_MONOSPACE "monospace" +#endif using namespace std::literals; @@ -35,79 +44,553 @@ namespace vte { namespace platform { +static void vadjustment_value_changed_cb(vte::platform::Widget* that) noexcept; + static void im_commit_cb(GtkIMContext* im_context, char const* text, - Widget* that) + Widget* that) noexcept +try { if (text == nullptr) return; that->terminal()->im_commit(text); } +catch (...) +{ + vte::log_exception(); +} static void im_preedit_start_cb(GtkIMContext* im_context, - Widget* that) + Widget* that) noexcept +try { _vte_debug_print(VTE_DEBUG_EVENTS, "Input method pre-edit started.\n"); that->terminal()->im_preedit_set_active(true); } +catch (...) +{ + vte::log_exception(); +} static void im_preedit_end_cb(GtkIMContext* im_context, - Widget* that) + Widget* that) noexcept +try { _vte_debug_print(VTE_DEBUG_EVENTS, "Input method pre-edit ended.\n"); that->terminal()->im_preedit_set_active(false); } +catch (...) +{ + vte::log_exception(); +} static void im_preedit_changed_cb(GtkIMContext* im_context, - Widget* that) + Widget* that) noexcept +try { that->im_preedit_changed(); } +catch (...) +{ + vte::log_exception(); +} static gboolean im_retrieve_surrounding_cb(GtkIMContext* im_context, - Widget* that) + Widget* that) noexcept +try { _vte_debug_print(VTE_DEBUG_EVENTS, "Input method retrieve-surrounding.\n"); return that->terminal()->im_retrieve_surrounding(); } +catch (...) +{ + vte::log_exception(); + return false; +} static gboolean im_delete_surrounding_cb(GtkIMContext* im_context, int offset, int n_chars, - Widget* that) + Widget* that) noexcept +try { _vte_debug_print(VTE_DEBUG_EVENTS, "Input method delete-surrounding offset %d n-chars %d.\n", offset, n_chars); return that->terminal()->im_delete_surrounding(offset, n_chars); } +catch (...) +{ + vte::log_exception(); + return false; +} static void settings_notify_cb(GtkSettings* settings, GParamSpec* pspec, - vte::platform::Widget* that) + vte::platform::Widget* that) noexcept +try { that->settings_changed(); } - -Widget::Widget(VteTerminal* t) noexcept : - m_widget{&t->widget}, - m_hscroll_policy{GTK_SCROLL_NATURAL}, - m_vscroll_policy{GTK_SCROLL_NATURAL} - +catch (...) { - gtk_widget_set_can_focus(gtk(), true); + vte::log_exception(); +} +// Callbacks for context menu setup + +void +Widget::unset_context_menu(GtkWidget* widget, + bool deactivate, + bool notify) +{ + if (!widget || widget != m_menu_showing.get()) + return; + +#if VTE_GTK == 4 + // Cancel idle + if (m_context_menu_unset_on_idle_source != 0) { + g_source_remove(m_context_menu_unset_on_idle_source); + m_context_menu_unset_on_idle_source = 0; + } +#endif // VTE_GTK == 4 + + // Take ownership of the menu + auto menu = std::move(m_menu_showing); + + // Disconnect all signal handlers + g_signal_handlers_disconnect_matched(menu.get(), + G_SIGNAL_MATCH_DATA, + 0, 0, + nullptr, + nullptr, + this); + +#if VTE_GTK == 3 + if (gtk_menu_get_attach_widget(GTK_MENU(menu.get())) || deactivate) { + gtk_menu_shell_deactivate(GTK_MENU_SHELL(menu.get())); + } + if (gtk_menu_get_attach_widget(GTK_MENU(menu.get()))) { + // This will remove the ref from the attach widget, + // and (potentially) destroy the menu + gtk_menu_detach(GTK_MENU(menu.get())); + menu.reset(); + } + +#elif VTE_GTK == 4 + gtk_widget_unparent(menu.get()); + + if (gtk_widget_get_visible(menu.get())) { + gtk_popover_popdown(GTK_POPOVER(menu.get())); + menu.reset(); + } + +#endif // VTE_GTK + + if (notify) + emit_setup_context_menu(nullptr); +} + +#if VTE_GTK == 3 + +static void +context_menu_selection_done_cb(GtkWidget *menu, + vte::platform::Widget* that) noexcept +try +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Context menu selection done\n"); + that->unset_context_menu(menu, false); +} +catch (...) +{ + vte::log_exception(); +} + +static void +context_menu_detach_cb(GtkWidget* attach_widget, + GtkWidget* menu) noexcept +try +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Context menu detached\n"); + + auto const that = Widget::from_terminal(VTE_TERMINAL(attach_widget)); + that->unset_context_menu(menu, true); +} +catch (...) +{ + vte::log_exception(); +} + +#elif VTE_GTK == 4 + +static void +context_menu_unset_on_idle_cb(vte::platform::Widget* that) noexcept +try +{ + that->unset_context_menu_on_idle(); +} +catch (...) +{ + vte::log_exception(); +} + +static void +context_menu_closed_cb(GtkWidget* menu, + vte::platform::Widget* that) noexcept +try +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Context menu closed\n"); + that->context_menu_closed(menu); +} +catch (...) +{ + vte::log_exception(); +} + +#endif // VTE_GTK + +#if VTE_GTK == 4 + +/* Callbacks for event controllers */ + +static gboolean +key_pressed_cb(GtkEventControllerKey* controller, + unsigned key, + unsigned keycode, + unsigned modifiers, + Widget* that) noexcept +try +{ + return that->event_key_pressed(controller, key, keycode, modifiers); +} +catch (...) +{ + vte::log_exception(); + return false; +} + +static void +key_released_cb(GtkEventControllerKey* controller, + unsigned key, + unsigned keycode, + unsigned modifiers, + Widget* that) noexcept +try +{ + that->event_key_released(controller, key, keycode, modifiers); +} +catch (...) +{ + vte::log_exception(); +} + +static gboolean +key_modifiers_cb(GtkEventControllerKey* controller, + unsigned modifiers, + Widget* that) noexcept +try +{ + return that->event_key_modifiers(controller, modifiers); +} +catch (...) +{ + vte::log_exception(); + return false; +} + +static void +long_press_pressed_cb(GtkGestureLongPress* gesture, + double x, + double y, + Widget* that) noexcept +try +{ + that->gesture_long_press_pressed(gesture, x, y); +} +catch (...) +{ + vte::log_exception(); +} + +static void +long_press_cancelled_cb(GtkGestureLongPress* gesture, + Widget* that) noexcept +try +{ + that->gesture_long_press_cancelled(gesture); +} +catch (...) +{ + vte::log_exception(); +} + +static void +focus_enter_cb(GtkEventControllerFocus* controller, + Widget* that) noexcept +try +{ + that->event_focus_enter(controller); +} +catch (...) +{ + vte::log_exception(); +} + +static void +focus_leave_cb(GtkEventControllerFocus* controller, + Widget* that) noexcept +try +{ + that->event_focus_leave(controller); +} +catch (...) +{ + vte::log_exception(); +} + +static void +motion_enter_cb(GtkEventControllerMotion* controller, + double x, + double y, + Widget* that) noexcept +try +{ + that->event_motion_enter(controller, x, y); +} +catch (...) +{ + vte::log_exception(); +} + +static void +motion_leave_cb(GtkEventControllerMotion* controller, + Widget* that) noexcept +try +{ + that->event_motion_leave(controller); +} +catch (...) +{ + vte::log_exception(); +} + +static void +motion_motion_cb(GtkEventControllerMotion* controller, + double x, + double y, + Widget* that) noexcept +try +{ + that->event_motion(controller, x, y); +} +catch (...) +{ + vte::log_exception(); +} + +static void +motion_notify_is_pointer_cb(GtkEventControllerMotion* controller, + GParamSpec* pspec, + Widget* that) noexcept +try +{ + that->event_motion_notify_is_pointer(controller); +} +catch (...) +{ + vte::log_exception(); +} + +static void +motion_notify_contains_pointer_cb(GtkEventControllerMotion* controller, + GParamSpec* pspec, + Widget* that) noexcept +try +{ + that->event_motion_notify_contains_pointer(controller); +} +catch (...) +{ + vte::log_exception(); +} + +static void +scroll_begin_cb(GtkEventControllerScroll* controller, + Widget* that) noexcept +try +{ + that->event_scroll_begin(controller); +} +catch (...) +{ + vte::log_exception(); +} + +static gboolean +scroll_scroll_cb(GtkEventControllerScroll* controller, + double dx, + double dy, + Widget* that) noexcept +try +{ + return that->event_scroll(controller, dx, dy); +} +catch (...) +{ + vte::log_exception(); + return false; +} + +static void +scroll_end_cb(GtkEventControllerScroll* controller, + Widget* that) noexcept +try +{ + that->event_scroll_end(controller); +} +catch (...) +{ + vte::log_exception(); +} + +static void +scroll_decelerate_cb(GtkEventControllerScroll* controller, + double vx, + double vy, + Widget* that) noexcept +try +{ + that->event_scroll_decelerate(controller, vx, vy); +} +catch (...) +{ + vte::log_exception(); +} + +static void +click_pressed_cb(GtkGestureClick* gesture, + int press_count, + double x, + double y, + Widget* that) noexcept +try +{ + that->gesture_click_pressed(gesture, press_count, x, y); +} +catch (...) +{ + vte::log_exception(); +} + +static void +click_released_cb(GtkGestureClick* gesture, + int press_count, + double x, + double y, + Widget* that) noexcept +try +{ + that->gesture_click_released(gesture, press_count, x, y); +} +catch (...) +{ + vte::log_exception(); +} + +static void +click_stopped_cb(GtkGestureClick* gesture, + Widget* that) noexcept +try +{ + that->gesture_click_stopped(gesture); +} +catch (...) +{ + vte::log_exception(); +} + +static void +click_unpaired_release_cb(GtkGestureClick* gesture, + double x, + double y, + unsigned button, + GdkEventSequence* sequence, + Widget* that) noexcept +try +{ + that->gesture_click_unpaired_release(gesture, x, y, button, sequence); +} +catch (...) +{ + vte::log_exception(); +} + +static void +root_realize_cb(GtkRoot* r, + vte::platform::Widget* that) noexcept +try +{ + that->root_realize(); +} +catch (...) +{ + vte::log_exception(); +} + +static void +root_unrealize_cb(GtkRoot* r, + vte::platform::Widget* that) noexcept +try +{ + that->root_unrealize(); +} +catch (...) +{ + vte::log_exception(); +} + +static void +root_surface_state_notify_cb(GdkToplevel* toplevel, + GParamSpec* pspec, + Widget* that) noexcept +try +{ + that->root_surface_state_notify(); +} +catch (...) +{ + vte::log_exception(); +} + +#endif /* VTE_GTK == 4 */ + +Widget::Widget(VteTerminal* t) + : m_widget{&t->widget} +{ + // Create a default adjustment + set_vadjustment({}); + +#if VTE_GTK == 3 + gtk_widget_set_can_focus(gtk(), true); +#endif + +#if VTE_GTK == 4 + gtk_widget_set_focusable(gtk(), true); +#endif + +#if VTE_GTK == 3 /* We do our own redrawing. */ // FIXMEchpe is this still necessary? gtk_widget_set_redraw_on_allocate(gtk(), false); +#endif /* Until Terminal init is completely fixed, use zero'd memory */ auto place = g_malloc0(sizeof(vte::terminal::Terminal)); @@ -115,35 +598,69 @@ Widget::Widget(VteTerminal* t) noexcept : } Widget::~Widget() noexcept +try { - g_signal_handlers_disconnect_matched(gtk_widget_get_settings(m_widget), + g_signal_handlers_disconnect_matched(m_settings.get(), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, this); + if (m_vadjustment) { + g_signal_handlers_disconnect_by_func(m_vadjustment.get(), + (void*)vadjustment_value_changed_cb, + this); + } + + if (m_menu_showing) { + unset_context_menu(m_menu_showing.get(), true, false); + } + m_widget = nullptr; m_terminal->~Terminal(); g_free(m_terminal); } +catch (...) +{ + vte::log_exception(); +} void Widget::beep() noexcept { if (realized()) - gdk_window_beep(gtk_widget_get_window(m_widget)); + gtk_widget_error_bell(gtk()); } -vte::glib::RefPtr -Widget::create_cursor(GdkCursorType cursor_type) const noexcept +#if VTE_GTK == 4 + +bool +Widget::contains(double x, + double y) { - return vte::glib::take_ref(gdk_cursor_new_for_display(gtk_widget_get_display(m_widget), cursor_type)); + return false; +} + +#endif /* VTE_GTK == 4 */ + +vte::glib::RefPtr +Widget::create_cursor(std::string const& name) const noexcept +{ +#if VTE_GTK == 3 + return vte::glib::take_ref(gdk_cursor_new_from_name(gtk_widget_get_display(m_widget), name.c_str())); +#elif VTE_GTK == 4 + return vte::glib::take_ref(gdk_cursor_new_from_name(name.c_str(), nullptr /* fallback */)); +#endif } void Widget::set_cursor(GdkCursor* cursor) noexcept { +#if VTE_GTK == 3 gdk_window_set_cursor(m_event_window, cursor); +#elif VTE_GTK == 4 + gtk_widget_set_cursor(gtk(), cursor); +#endif } void @@ -152,24 +669,36 @@ Widget::set_cursor(Cursor const& cursor) noexcept if (!realized()) return; - auto display = gtk_widget_get_display(m_widget); GdkCursor* gdk_cursor{nullptr}; switch (cursor.index()) { case 0: - gdk_cursor = gdk_cursor_new_from_name(display, std::get<0>(cursor).c_str()); +#if VTE_GTK == 3 + gdk_cursor = gdk_cursor_new_from_name(gtk_widget_get_display(gtk()), + std::get<0>(cursor).c_str()); +#elif VTE_GTK == 4 + gdk_cursor = gdk_cursor_new_from_name(std::get<0>(cursor).c_str(), + nullptr /* fallback */); +#endif /* VTE_GTK */ break; + case 1: gdk_cursor = std::get<1>(cursor).get(); - if (gdk_cursor != nullptr && - gdk_cursor_get_display(gdk_cursor) == display) { + if (gdk_cursor != nullptr +#if VTE_GTK == 3 + && gdk_cursor_get_display(gdk_cursor) == gtk_widget_get_display(gtk()) +#endif + ) { g_object_ref(gdk_cursor); } else { gdk_cursor = nullptr; } break; + +#if VTE_GTK == 3 case 2: - gdk_cursor = gdk_cursor_new_for_display(display, std::get<2>(cursor)); + gdk_cursor = gdk_cursor_new_for_display(gtk_widget_get_display(gtk()), std::get<2>(cursor)); break; +#endif } set_cursor(gdk_cursor); @@ -177,9 +706,222 @@ Widget::set_cursor(Cursor const& cursor) noexcept g_object_unref(gdk_cursor); } +Clipboard& +Widget::clipboard_get(ClipboardType type) const +{ + switch (type) { + case ClipboardType::CLIPBOARD: return *m_clipboard; + case ClipboardType::PRIMARY: return *m_primary_clipboard; + default: g_assert_not_reached(); throw std::runtime_error{""}; break; + } +} + +std::optional +Widget::clipboard_data_get_cb(Clipboard const& clipboard, + ClipboardFormat format) +{ + return terminal()->widget_clipboard_data_get(clipboard, format); +} + +void +Widget::clipboard_data_clear_cb(Clipboard const& clipboard) +{ + terminal()->widget_clipboard_data_clear(clipboard); +} + +void +Widget::clipboard_request_received_cb(Clipboard const& clipboard, + std::string_view const& text) +{ + terminal()->widget_paste(text); +} + +void +Widget::clipboard_request_failed_cb(Clipboard const& clipboard) +{ + gtk_widget_error_bell(gtk()); +} + +void +Widget::clipboard_offer_data(ClipboardType type, + ClipboardFormat format) noexcept +{ + try { + clipboard_get(type).offer_data(format, + &Widget::clipboard_data_get_cb, + &Widget::clipboard_data_clear_cb); + } catch (...) { + /* Let the caller know the request failed */ + terminal()->widget_clipboard_data_clear(clipboard_get(type)); + } +} + +void +Widget::clipboard_request_text(ClipboardType type) noexcept +{ + try { + clipboard_get(type).request_text(&Widget::clipboard_request_received_cb, + &Widget::clipboard_request_failed_cb); + } catch (...) { + /* Let the caller know the request failed */ + clipboard_request_failed_cb(clipboard_get(type)); + } +} + +void +Widget::clipboard_set_text(ClipboardType type, + char const* str, + size_t size) noexcept +{ + clipboard_get(type).set_text(str, size); +} + +#if VTE_GTK == 4 + +std::pair +Widget::compute_expand() +{ + return {true, true}; +} + +#endif /* VTE_GTK == 4 */ + +void +Widget::constructed() noexcept +{ +#if VTE_GTK == 3 + auto context = gtk_widget_get_style_context(m_widget); + gtk_style_context_add_class (context, VTE_STYLE_CLASS_MONOSPACE); +#elif VTE_GTK == 4 + gtk_widget_add_css_class(gtk(), VTE_STYLE_CLASS_MONOSPACE); +#endif /* VTE_GTK */ + +#if VTE_GTK == 4 + + connect_settings(); + + /* Add event controllers */ + auto controller = vte::glib::take_ref(gtk_event_controller_key_new()); + g_signal_connect(controller.get(), "key-pressed", + G_CALLBACK(key_pressed_cb), this); + g_signal_connect(controller.get(), "key-released", + G_CALLBACK(key_released_cb), this); + g_signal_connect(controller.get(), "modifiers", + G_CALLBACK(key_modifiers_cb), this); + gtk_event_controller_set_name(controller.get(), "vte-key-controller"); + gtk_widget_add_controller(m_widget, controller.release()); + + controller = vte::glib::take_ref(gtk_event_controller_focus_new()); + g_signal_connect(controller.get(), "enter", + G_CALLBACK(focus_enter_cb), this); + g_signal_connect(controller.get(), "leave", + G_CALLBACK(focus_leave_cb), this); + gtk_event_controller_set_name(controller.get(), "vte-focus-controller"); + gtk_widget_add_controller(m_widget, controller.release()); + + controller = vte::glib::take_ref(gtk_event_controller_motion_new()); + g_signal_connect(controller.get(), "enter", + G_CALLBACK(motion_enter_cb), this); + g_signal_connect(controller.get(), "leave", + G_CALLBACK(motion_leave_cb), this); + g_signal_connect(controller.get(), "motion", + G_CALLBACK(motion_motion_cb), this); + g_signal_connect(controller.get(), "notify::is-pointer", + G_CALLBACK(motion_notify_is_pointer_cb), this); + g_signal_connect(controller.get(), "notify::contains-pointer", + G_CALLBACK(motion_notify_contains_pointer_cb), this); + gtk_event_controller_set_name(controller.get(), "vte-motion-controller"); + gtk_widget_add_controller(m_widget, controller.release()); + + auto const scroll_flags = GtkEventControllerScrollFlags(GTK_EVENT_CONTROLLER_SCROLL_VERTICAL); + controller = vte::glib::take_ref(gtk_event_controller_scroll_new(scroll_flags)); + g_signal_connect(controller.get(), "scroll-begin", + G_CALLBACK(scroll_begin_cb), this); + g_signal_connect(controller.get(), "scroll-end", + G_CALLBACK(scroll_end_cb), this); + g_signal_connect(controller.get(), "scroll", + G_CALLBACK(scroll_scroll_cb), this); + g_signal_connect(controller.get(), "decelerate", + G_CALLBACK(scroll_decelerate_cb), this); + gtk_event_controller_set_name(controller.get(), "vte-scroll-controller"); + gtk_widget_add_controller(m_widget, controller.release()); + + auto gesture = vte::glib::take_ref(gtk_gesture_click_new()); + gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture.get()), 0 /* any button */); + gtk_gesture_single_set_exclusive(GTK_GESTURE_SINGLE(gesture.get()), true); + g_signal_connect(gesture.get(), "pressed", + G_CALLBACK(click_pressed_cb), this); + g_signal_connect(gesture.get(), "released", + G_CALLBACK(click_released_cb), this); + g_signal_connect(gesture.get(), "stopped", + G_CALLBACK(click_stopped_cb), this); + g_signal_connect(gesture.get(), "unpaired-release", + G_CALLBACK(click_unpaired_release_cb), this); + gtk_event_controller_set_name(GTK_EVENT_CONTROLLER(gesture.get()), "vte-click-gesture"); + gtk_widget_add_controller(m_widget, GTK_EVENT_CONTROLLER(gesture.release())); + + gesture = vte::glib::take_ref(gtk_gesture_long_press_new()); + gtk_gesture_single_set_touch_only(GTK_GESTURE_SINGLE(gesture.get()), true); + + g_signal_connect(gesture.get(), "pressed", + G_CALLBACK(long_press_pressed_cb), this); + g_signal_connect(gesture.get(), "cancelled", + G_CALLBACK(long_press_cancelled_cb), this); + gtk_event_controller_set_name(GTK_EVENT_CONTROLLER(gesture.get()), "vte-long-press-gesture"); + gtk_widget_add_controller(m_widget, GTK_EVENT_CONTROLLER(gesture.release())); + +#endif /* VTE_GTK == 4 */ + +#if VTE_GTK == 3 + /* Set the style as early as possible, before GTK+ starts + * invoking various callbacks. This is needed in order to + * compute the initial geometry correctly in presence of + * non-default padding, see bug 787710. + */ + style_updated(); +#elif VTE_GTK == 4 + padding_changed(); +#endif /* VTE_GTK */ +} + +#if VTE_GTK == 4 + +void +Widget::css_changed(GtkCssStyleChange* change) +{ + /* This function is inefficient, since there's no public API + * for GtkCssStyleChange to see what exactly changed, and if + * we do need to queue the resize for it or not. + */ + + auto need_resize = padding_changed(); + + m_terminal->widget_style_updated(); + + if (need_resize) + gtk_widget_queue_resize(gtk()); +} + +#endif /* VTE_GTK == 4 */ + +void +Widget::direction_changed(GtkTextDirection old_direction) noexcept +{ + // FIXME: does this need to feed to BiDi somehow? +} + void Widget::dispose() noexcept { +#if WITH_A11Y && VTE_GTK == 3 + m_terminal->set_accessible(nullptr); +#endif + + // Dismiss a showing context menu + if (m_menu_showing) { + unset_context_menu(m_menu_showing.get(), true, false); + } + if (m_terminal->terminate_child()) { int status = W_EXITCODE(0, SIGKILL); emit_child_exited(status); @@ -201,13 +943,428 @@ Widget::emit_eof() noexcept } bool -Widget::im_filter_keypress(GdkEventKey* event) noexcept +Widget::im_filter_keypress(KeyEvent const& event) noexcept { // FIXMEchpe this can only be called when realized, so the m_im_context check is redundant return m_im_context && - gtk_im_context_filter_keypress(m_im_context.get(), event); + gtk_im_context_filter_keypress(m_im_context.get(), +#if VTE_GTK == 3 + reinterpret_cast(event.platform_event()) +#elif VTE_GTK == 4 + event.platform_event() +#endif + ); } +#if VTE_GTK == 3 + +void +Widget::event_focus_in(GdkEventFocus *event) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Focus In"); + +#if VTE_GTK == 4 + if (!root_focused()) + return; +#endif + + m_terminal->widget_focus_in(); +} + +void +Widget::event_focus_out(GdkEventFocus *event) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Focus Out"); + +#if VTE_GTK == 4 + if (!root_focused()) + return; +#endif + + m_terminal->widget_focus_out(); +} + +bool +Widget::event_key_press(GdkEventKey *event) +{ + auto key_event = key_event_from_gdk(reinterpret_cast(event)); + + _vte_debug_print(VTE_DEBUG_EVENTS, "Key press key=%x keycode=%x modifiers=%x\n", + key_event.keyval(), key_event.keycode(), key_event.modifiers()); + + return m_terminal->widget_key_press(key_event); +} + +bool +Widget::event_key_release(GdkEventKey *event) +{ + auto key_event = key_event_from_gdk(reinterpret_cast(event)); + + _vte_debug_print(VTE_DEBUG_EVENTS, "Key release key=%x keycode=%x modifiers=%x\n", + key_event.keyval(), key_event.keycode(), key_event.modifiers()); + + return m_terminal->widget_key_release(key_event); +} + +bool +Widget::event_button_press(GdkEventButton *event) +{ + auto mouse_event = mouse_event_from_gdk(reinterpret_cast(event)); + + _vte_debug_print(VTE_DEBUG_EVENTS, "Click press button=%d press_count=%d x=%.3f y=%.3f\n", + mouse_event.button_value(), mouse_event.press_count(), + mouse_event.x(), mouse_event.y()); + + return m_terminal->widget_mouse_press(mouse_event); +} + +bool +Widget::event_button_release(GdkEventButton *event) +{ + auto mouse_event = mouse_event_from_gdk(reinterpret_cast(event)); + + _vte_debug_print(VTE_DEBUG_EVENTS, "Click release button=%d x=%.3f y=%.3f\n", + mouse_event.button_value(), mouse_event.x(), mouse_event.y()); + + return m_terminal->widget_mouse_release(mouse_event); +} + +void +Widget::event_enter(GdkEventCrossing *event) +{ + auto mouse_event = mouse_event_from_gdk(reinterpret_cast(event)); + + _vte_debug_print(VTE_DEBUG_EVENTS, "Motion enter x=%.3f y=%.3f\n", + mouse_event.x(), mouse_event.y()); + + m_terminal->widget_mouse_enter(mouse_event); +} + +void +Widget::event_leave(GdkEventCrossing *event) +{ + auto mouse_event = mouse_event_from_gdk(reinterpret_cast(event)); + + _vte_debug_print(VTE_DEBUG_EVENTS, "Motion leave x=%.3f y=%.3f\n", + mouse_event.x(), mouse_event.y()); + + m_terminal->widget_mouse_leave(mouse_event); +} + +bool +Widget::event_scroll(GdkEventScroll *event) +{ + if (auto const scroll_event = scroll_event_from_gdk(reinterpret_cast(event))) { + _vte_debug_print(VTE_DEBUG_EVENTS, "Scroll delta_x=%.3f delta_y=%.3f\n", + scroll_event->dx(), scroll_event->dy()); + + return m_terminal->widget_mouse_scroll(*scroll_event); + } + + return false; +} + +bool +Widget::event_motion_notify(GdkEventMotion *event) +{ + auto mouse_event = mouse_event_from_gdk(reinterpret_cast(event)); + + _vte_debug_print(VTE_DEBUG_EVENTS, "Motion x=%.3f y=%.3f\n", + mouse_event.x(), mouse_event.y()); + + return m_terminal->widget_mouse_motion(mouse_event); +} + +#endif /* VTE_GTK == 3 */ + +#if VTE_GTK == 4 + +bool +Widget::event_key_pressed(GtkEventControllerKey* controller, + unsigned key, + unsigned keycode, + unsigned modifiers) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Key press key=%x keycode=%x modifiers=%x\n", + key, keycode, modifiers); + + auto event = gtk_event_controller_get_current_event(GTK_EVENT_CONTROLLER(controller)); + if (!event) + return false; + + return terminal()->widget_key_press(key_event_from_gdk(event)); +} + +void +Widget::event_key_released(GtkEventControllerKey* controller, + unsigned key, + unsigned keycode, + unsigned modifiers) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Key release key=%x keycode=%x modifiers=%x\n", + key, keycode, modifiers); + + auto event = gtk_event_controller_get_current_event(GTK_EVENT_CONTROLLER(controller)); + if (!event) + return; + + terminal()->widget_key_release(key_event_from_gdk(event)); +} + +bool +Widget::event_key_modifiers(GtkEventControllerKey* controller, + unsigned modifiers) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Key modifiers=%x\n", modifiers); + + return terminal()->widget_key_modifiers(modifiers); +} + +void +Widget::gesture_long_press_pressed(GtkGestureLongPress* gesture, + double x, + double y) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Long Press gesture pressed x=%.3f y=%.3f\n", x, y); + + // FIXMEgtk4: could let Terminal have the event first + + if (show_context_menu(EventContext{x, y, true})) { + gtk_gesture_set_state(GTK_GESTURE(gesture), GTK_EVENT_SEQUENCE_CLAIMED); + } +} + +void +Widget::gesture_long_press_cancelled(GtkGestureLongPress* gesture) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Long Press gesture cancelled"); +} + +void +Widget::event_focus_enter(GtkEventControllerFocus* controller) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Focus In"); + + terminal()->widget_focus_in(); +} + +void +Widget::event_focus_leave(GtkEventControllerFocus* controller) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Focus Out"); + + terminal()->widget_focus_out(); +} + +void +Widget::event_motion_enter(GtkEventControllerMotion* controller, + double x, + double y) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Motion enter x=%.3f y=%.3f\n", x, y); + +#if 0 + // FIXMEgtk4 this always returns nullptr, so how do we get the modifiers? + auto event = gtk_event_controller_get_current_event(GTK_EVENT_CONTROLLER(controller)); + if (!event) + return; +#endif + + terminal()->widget_mouse_enter({nullptr, // event + EventBase::Type::eMOUSE_MOTION, + 1, // press count, + 0, // gdk_event_get_modifier_state(event), + MouseEvent::Button::eNONE, + x, y}); +} + +void +Widget::event_motion_leave(GtkEventControllerMotion* controller) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Motion leave\n"); + +#if 0 + // FIXMEgtk4 this always returns nullptr, so how do we get the modifiers? + auto event = gtk_event_controller_get_current_event(GTK_EVENT_CONTROLLER(controller)); + if (!event) + return; +#endif + + // FIXMEgtk4 how to get the coordinates here? GtkEventControllerMotion::update_pointer_focus + // has them, but the signal doesn't carry them. File a gtk bug? + terminal()->widget_mouse_leave({nullptr, // event + EventBase::Type::eMOUSE_MOTION, + 1, // press count, + 0, // gdk_event_get_modifier_state(event), + MouseEvent::Button::eNONE, + -1, -1 /* FIXMEgtk4 bogus!!! */}); +} + +void +Widget::event_motion(GtkEventControllerMotion* controller, + double x, + double y) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Motion x=%.3f y=%.3f\n", x, y); + + auto event = gtk_event_controller_get_current_event(GTK_EVENT_CONTROLLER(controller)); + if (!event) + return; + + // FIXMEgtk4 could this also be a touch event?? + terminal()->widget_mouse_motion({nullptr, // event + EventBase::Type::eMOUSE_MOTION, + 1, // press count + gdk_event_get_modifier_state(event), + MouseEvent::Button::eNONE, + x, y}); +} + +void +Widget::event_motion_notify_is_pointer(GtkEventControllerMotion* controller) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Motion is-pointer now %s\n", + _vte_debug_tf(gtk_event_controller_motion_is_pointer(controller))); + + // FIXMEgtk4 +} + +void +Widget::event_motion_notify_contains_pointer(GtkEventControllerMotion* controller) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Motion contains-pointer now %s\n", + _vte_debug_tf(gtk_event_controller_motion_contains_pointer(controller))); + // FIXMEgtk4 +} + +void +Widget::event_scroll_begin(GtkEventControllerScroll* controller) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Scroll begin\n"); + + // FIXMEgtk4 +} + +bool +Widget::event_scroll(GtkEventControllerScroll* controller, + double dx, + double dy) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Scroll delta_x=%.3f delta_y=%.3f\n", dx, dy); + + auto event = gtk_event_controller_get_current_event(GTK_EVENT_CONTROLLER(controller)); + if (!event) + return false; + + return terminal()->widget_mouse_scroll({gdk_event_get_modifier_state(event), + dx, dy}); +} + +void +Widget::event_scroll_end(GtkEventControllerScroll* controller) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Scroll end\n"); + + // FIXMEgtk4 +} + +void +Widget::event_scroll_decelerate(GtkEventControllerScroll* controller, + double vx, + double vy) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Scroll decelerate v_x=%.3f v_y=%.3f\n", vx, vy); + + // FIXMEgtk4 +} + +void +Widget::gesture_click_pressed(GtkGestureClick* gesture, + int press_count, + double x, + double y) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Click gesture pressed press_count=%d x=%.3f y=%.3f\n", + press_count, x, y); + + // FIXMEgtk4 why does gtk4 not do that automatically? + gtk_widget_grab_focus(gtk()); + + auto const event = mouse_event_from_gesture_click(EventBase::Type::eMOUSE_PRESS, + gesture, + press_count, + x, y); + if (terminal()->widget_mouse_press(event)) + gtk_gesture_set_state(GTK_GESTURE(gesture), GTK_EVENT_SEQUENCE_CLAIMED); + // Note that we don't deny the sequence here in the |else| case, see issue #2630 + + // FIXMEgtk4 GtkLabel does + // if (press_count >= 3) + // gtk_event_controller_reset(GTK_EVENT_CONTROLLER(gesture)); + // but this makes triple-click 'sticky' +} + +void +Widget::gesture_click_released(GtkGestureClick* gesture, + int press_count, + double x, + double y) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Click gesture released press_count=%d x=%.3f y=%.3f\n", + press_count, x, y); + + // FIXMEgtk4 why does gtk4 not do that automatically? + gtk_widget_grab_focus(gtk()); + + auto const sequence = gtk_gesture_single_get_current_sequence(GTK_GESTURE_SINGLE(gesture)); + if (!gtk_gesture_handles_sequence(GTK_GESTURE(gesture), sequence)) // FIXMEgtk4 why!? + return; + + auto const event = mouse_event_from_gesture_click(EventBase::Type::eMOUSE_RELEASE, + gesture, + press_count, + x, y); + if (terminal()->widget_mouse_release(event)) + gtk_gesture_set_state(GTK_GESTURE(gesture), GTK_EVENT_SEQUENCE_CLAIMED); +} + +void +Widget::gesture_click_stopped(GtkGestureClick* gesture) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Click gesture stopped\n"); + + // FIXMEgtk4 what's the right thing to do here??? + // Should probably stop selection expansion mode, reset stored buttons, ...? +} + +void +Widget::gesture_click_unpaired_release(GtkGestureClick* gesture, + double x, + double y, + unsigned button, + GdkEventSequence* sequence) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Click gesture unpaired release button=%d x=%.3f y=%.3f\n", + button, x, y); + + // FIXMEgtk4 what's the right thing to do here??? + + // FIXMEgtk4 why does gtk4 not do that automatically? + gtk_widget_grab_focus(gtk()); + + if (!gtk_gesture_handles_sequence(GTK_GESTURE(gesture), sequence)) // why!? + return; + + auto const event = mouse_event_from_gesture_click(EventBase::Type::eMOUSE_RELEASE, + gesture, + 1, // press_count + x, y); + if (terminal()->widget_mouse_release(event)) + gtk_gesture_set_state(GTK_GESTURE(gesture), GTK_EVENT_SEQUENCE_CLAIMED); +} + +#endif /* VTE_GTK == 4 */ + void Widget::im_focus_in() noexcept { @@ -223,20 +1380,18 @@ Widget::im_focus_out() noexcept void Widget::im_preedit_changed() noexcept { - char* str = nullptr; - PangoAttrList* attrs = nullptr; - int cursorpos = 0; - - gtk_im_context_get_preedit_string(m_im_context.get(), &str, &attrs, &cursorpos); + auto str = vte::glib::StringPtr{}; + auto attrs = vte::Freeable{}; + auto cursorpos = 0; + gtk_im_context_get_preedit_string(m_im_context.get(), + vte::glib::StringGetter{str}, + vte::get_freeable(attrs), + &cursorpos); _vte_debug_print(VTE_DEBUG_EVENTS, "Input method pre-edit changed (%s,%d).\n", - str, cursorpos); + str.get(), cursorpos); - if (str != nullptr) - m_terminal->im_preedit_changed(str, cursorpos, {attrs, &pango_attr_list_unref}); - else - pango_attr_list_unref(attrs); - - g_free(str); + if (str) + m_terminal->im_preedit_changed(str.get(), cursorpos, std::move(attrs)); } void @@ -245,11 +1400,466 @@ Widget::im_set_cursor_location(cairo_rectangle_int_t const* rect) noexcept gtk_im_context_set_cursor_location(m_im_context.get(), rect); } +void +Widget::im_activate_osk() noexcept +{ +#if VTE_GTK == 4 + gtk_im_context_activate_osk(m_im_context.get(), nullptr); +#endif +} + +#if VTE_GTK == 3 + +unsigned +Widget::read_modifiers_from_gdk(GdkEvent* event) const noexcept +{ + /* Read the modifiers. See bug #663779 for more information on why we do this. */ + auto mods = GdkModifierType{}; + if (!gdk_event_get_state(event, &mods)) + return 0; + + /* HACK! Treat META as ALT; see bug #663779. */ + if (mods & GDK_META_MASK) + mods = GdkModifierType(mods | GDK_MOD1_MASK); + + /* Map non-virtual modifiers to virtual modifiers (Super, Hyper, Meta) */ + auto display = gdk_window_get_display(gdk_event_get_window(event)); + auto keymap = gdk_keymap_get_for_display(display); + gdk_keymap_add_virtual_modifiers(keymap, &mods); + + return unsigned(mods); +} + +#endif /* VTE_GTK == 3 */ + +unsigned +Widget::key_event_translate_ctrlkey(KeyEvent const& event) const noexcept +{ + if (event.keyval() < 128) + return event.keyval(); + +#if VTE_GTK == 3 + auto display = gdk_window_get_display(gdk_event_get_window(event.platform_event())); + auto keymap = gdk_keymap_get_for_display(display); + auto keyval = unsigned{event.keyval()}; + + /* Try groups in order to find one mapping the key to ASCII */ + for (auto i = unsigned{0}; i < 4; i++) { + auto consumed_modifiers = GdkModifierType{}; + gdk_keymap_translate_keyboard_state (keymap, + event.keycode(), + GdkModifierType(event.modifiers()), + i, + &keyval, NULL, NULL, &consumed_modifiers); + if (keyval < 128) { + _vte_debug_print (VTE_DEBUG_EVENTS, + "ctrl+Key, group=%d de-grouped into keyval=0x%x\n", + event.group(), keyval); + break; + } + } + + return keyval; + +#elif VTE_GTK == 4 + auto const display = gdk_event_get_display(event.platform_event()); + + /* Try groups in order to find one mapping the key to ASCII */ + for (auto i = unsigned{0}; i < 4; i++) { + auto keyval = guint{}; + auto consumed_modifiers = GdkModifierType{}; + if (!gdk_display_translate_key(display, + event.keycode(), + GdkModifierType(event.modifiers()), + i, + &keyval, + nullptr, + nullptr, + &consumed_modifiers)) + continue; + + if (keyval >= 128) + continue; + + _vte_debug_print (VTE_DEBUG_EVENTS, + "ctrl+Key, group=%d de-grouped into keyval=0x%x\n", + event.group(), keyval); + return keyval; + } + + return event.keyval(); +#endif /* VTE_GTK */ +} + +KeyEvent +Widget::key_event_from_gdk(GdkEvent* event) const +{ + auto type = EventBase::Type{}; + switch (gdk_event_get_event_type(event)) { + case GDK_KEY_PRESS: type = KeyEvent::Type::eKEY_PRESS; break; + case GDK_KEY_RELEASE: type = KeyEvent::Type::eKEY_RELEASE; break; + default: g_assert_not_reached(); return {}; + } + +#if VTE_GTK == 3 + auto keyval = unsigned{}; + gdk_event_get_keyval(event, &keyval); + auto const scancode = unsigned(reinterpret_cast(event)->hardware_keycode); + auto const group = reinterpret_cast(event)->group; + auto const is_modifier = reinterpret_cast(event)->is_modifier != 0; +#elif VTE_GTK == 4 + auto keyval = gdk_key_event_get_keyval(event); + auto scancode = gdk_key_event_get_keycode(event); + auto const group = gdk_key_event_get_level(event); + auto const is_modifier = gdk_key_event_is_modifier(event) != false; +#endif /* VTE_GTK */ + + return {event, + type, +#if VTE_GTK == 3 + read_modifiers_from_gdk(event), +#elif VTE_GTK == 4 + gdk_event_get_modifier_state(event), +#endif + keyval, + scancode, + group, + is_modifier}; +} + +#if VTE_GTK == 3 + +MouseEvent +Widget::mouse_event_from_gdk(GdkEvent* event) const /* throws */ +{ + auto type = EventBase::Type{}; + auto press_count = 0; + switch (gdk_event_get_event_type(event)) { + case GDK_2BUTTON_PRESS: + type = MouseEvent::Type::eMOUSE_PRESS; + press_count = 2; + break; + case GDK_3BUTTON_PRESS: + type = MouseEvent::Type::eMOUSE_PRESS; + press_count = 3; + break; + case GDK_BUTTON_PRESS: + type = MouseEvent::Type::eMOUSE_PRESS; + press_count = 1; + break; + case GDK_BUTTON_RELEASE: + type = MouseEvent::Type::eMOUSE_RELEASE; + press_count = 1; + break; + case GDK_ENTER_NOTIFY: type = MouseEvent::Type::eMOUSE_ENTER; break; + case GDK_LEAVE_NOTIFY: type = MouseEvent::Type::eMOUSE_LEAVE; break; + case GDK_MOTION_NOTIFY: type = MouseEvent::Type::eMOUSE_MOTION; break; + case GDK_SCROLL: + type = MouseEvent::Type::eMOUSE_SCROLL; + press_count = 1; + break; + default: + throw std::runtime_error{"Unexpected event type"}; + } + + auto x = double{}; + auto y = double{}; + if (gdk_event_get_window(event) != m_event_window || + !gdk_event_get_coords(event, &x, &y)) + x = y = -1.; // FIXMEchpe or throw? + + auto button = 0u; + (void)gdk_event_get_button(event, &button); + + return {event, + type, + press_count, + read_modifiers_from_gdk(event), + MouseEvent::Button(button), + x, + y}; +} + +#endif /* VTE_GTK == 3 */ + +void +Widget::notify_char_size_changed(int width, + int height) +{ + + if (scroll_unit_is_pixels()) [[unlikely]] { + /* When using pixels as adjustment values, changing the + * char size means we need to adjust the scroll bounds + * and value to keep the actual scroll position constant. + */ + notify_scroll_bounds_changed(true); + } + + _vte_debug_print(VTE_DEBUG_SIGNALS, + "Emitting `char-size-changed'.\n"); + /* FIXME on next API break, change the signature */ + g_signal_emit(gtk(), signals[SIGNAL_CHAR_SIZE_CHANGED], 0, + guint(width), guint(height)); +} + +void +Widget::notify_scroll_bounds_changed(bool value_changed) +{ + _vte_debug_print(VTE_DEBUG_ADJ, + "Updating scroll adjustment\n"); + + auto const freezer = vte::glib::FreezeObjectNotify{m_vadjustment.get()}; + auto changed = false; + + auto const lower = terminal()->scroll_limit_lower(); + auto const upper = terminal()->scroll_limit_upper(); + auto dlower = 0.; + auto dupper = double(upper - lower); + auto dline = 1.; + auto row_count = terminal()->row_count(); + if (scroll_unit_is_pixels()) [[unlikely]] { + auto const factor = m_terminal->get_cell_height(); + dupper *= factor; + dline *= factor; + row_count *= factor; + } + + auto current = gtk_adjustment_get_lower(m_vadjustment.get()); + if (!_vte_double_equal(current, dlower)) { + _vte_debug_print(VTE_DEBUG_ADJ, + "Changing lower bound from %.0f to %f\n", + current, dlower); + gtk_adjustment_set_lower(m_vadjustment.get(), dlower); + changed = true; + } + + current = gtk_adjustment_get_upper(m_vadjustment.get()); + if (!_vte_double_equal(current, dupper)) { + _vte_debug_print(VTE_DEBUG_ADJ, + "Changing upper bound from %.0f to %f\n", + current, dupper); + gtk_adjustment_set_upper(m_vadjustment.get(), dupper); + changed = true; + } + + /* The step increment should always be one. */ + current = gtk_adjustment_get_step_increment(m_vadjustment.get()); + if (!_vte_double_equal(current, dline)) { + _vte_debug_print(VTE_DEBUG_ADJ, + "Changing step increment from %.0lf to 1.0\n", + current); + gtk_adjustment_set_step_increment(m_vadjustment.get(), dline); + changed = true; + } + + current = gtk_adjustment_get_page_size(m_vadjustment.get()); + if (!_vte_double_equal(current, row_count)) { + _vte_debug_print(VTE_DEBUG_ADJ, + "Changing page size from %.0f to %ld\n", + current, row_count); + gtk_adjustment_set_page_size(m_vadjustment.get(), row_count); + changed = true; + } + + /* Clicking in the empty area should scroll exactly one screen, + * so set the page size to the number of visible rows. + */ + current = gtk_adjustment_get_page_increment(m_vadjustment.get()); + if (!_vte_double_equal(current, row_count)) { + _vte_debug_print(VTE_DEBUG_ADJ, + "Changing page increment from " + "%.0f to %ld\n", + current, row_count); + gtk_adjustment_set_page_increment(m_vadjustment.get(), row_count); + changed = true; + } + + if (value_changed) + notify_scroll_value_changed(); + + if (changed) + _vte_debug_print(VTE_DEBUG_SIGNALS, + "Adjustment changed.\n"); +} + +void +Widget::notify_scroll_value_changed() +{ + _vte_debug_print(VTE_DEBUG_ADJ, + "Updating scroll adjustment value\n"); + + auto const lower = terminal()->scroll_limit_lower(); + auto value = terminal()->scroll_position() - lower; + if (scroll_unit_is_pixels()) [[unlikely]] { + auto const factor = m_terminal->get_cell_height(); + value *= factor; + } + + auto const v = gtk_adjustment_get_value(m_vadjustment.get()); + if (_vte_double_equal(v, value)) + return; + +#if VTE_GTK == 4 + auto kinetic = false; + GtkWidget* sw = nullptr; + if (m_inside_scrolled_window) { + // If a kinetic scroll is in progress in the containing + // GtkScrolledWindow, it will continue even when we set + // the new value. GtkScrolledWindow lacks direct API to + // stop kinetic scrolling, but it does stop when changing + // the kinetic-scrolling property to false. So we unset + // and then re-set kinetic-scrolling. + + sw = gtk_widget_get_ancestor(gtk(), GTK_TYPE_SCROLLED_WINDOW); + kinetic = gtk_scrolled_window_get_kinetic_scrolling(GTK_SCROLLED_WINDOW(sw)); + if (kinetic) + gtk_scrolled_window_set_kinetic_scrolling(GTK_SCROLLED_WINDOW(sw), false); + } +#endif // VTE_GTK == 4 + + m_changing_scroll_position = true; + gtk_adjustment_set_value(m_vadjustment.get(), value); + m_changing_scroll_position = false; + +#if VTE_GTK == 4 + if (kinetic) + gtk_scrolled_window_set_kinetic_scrolling(GTK_SCROLLED_WINDOW(sw), true); +#endif // VTE_GTK == 4 +} + +#if VTE_GTK == 3 + +std::optional +Widget::scroll_event_from_gdk(GdkEvent* event) const +{ + /* Ignore emulated scroll events, see + * https://gitlab.gnome.org/GNOME/vte/-/issues/2561 + */ + if (gdk_event_get_pointer_emulated(event)) + return std::nullopt; + + auto dx = double{}, dy = double{}; + if (!gdk_event_get_scroll_deltas(event, &dx, &dy)) { + auto dir = GdkScrollDirection{}; + if (!gdk_event_get_scroll_direction(event, &dir)) + __builtin_unreachable(); + + switch (dir) { + case GDK_SCROLL_UP: dx = 0.; dy = -1.; break; + case GDK_SCROLL_DOWN: dx = 0.; dy = 1.; break; + case GDK_SCROLL_LEFT: dx = -1.; dy = 0.; break; + case GDK_SCROLL_RIGHT: dx = 1.; dy = 0.; break; + case GDK_SCROLL_SMOOTH: + default: __builtin_unreachable(); + } + } + + + return ScrollEvent{read_modifiers_from_gdk(event), dx, dy}; +} + +#endif /* VTE_GTK == 3 */ + +#if VTE_GTK == 4 + +MouseEvent +Widget::mouse_event_from_gesture_click(EventBase::Type type, + GtkGestureClick* gesture, + int press_count, + double x, + double y) const /* throws */ +{ + auto const gesture_single = GTK_GESTURE_SINGLE(gesture); + + auto const button = gtk_gesture_single_get_current_button(gesture_single); + auto const sequence = gtk_gesture_single_get_current_sequence(gesture_single); + auto const event = gtk_gesture_get_last_event(GTK_GESTURE(gesture), sequence); + if (!event) + throw std::runtime_error{"No last event!?"}; + + return {event, + type, + press_count, + gdk_event_get_modifier_state(event), + MouseEvent::Button(button), + x, + y}; +} + +#endif /* VTE_GTK == 4 */ + void Widget::map() noexcept { +#if VTE_GTK == 3 if (m_event_window) gdk_window_show_unraised(m_event_window); +#endif +} + +#if VTE_GTK == 4 + +void +Widget::measure(GtkOrientation orientation, + int for_size, + int* minimum, + int* natural, + int* minimum_baseline, + int* natural_baseline) noexcept +{ + _vte_debug_print(VTE_DEBUG_WIDGET_SIZE, "Widget measure for_size=%d orientation=%s\n", + for_size, + orientation == GTK_ORIENTATION_HORIZONTAL ? "horizontal" : "vertical"); + + switch (orientation) { + case GTK_ORIENTATION_HORIZONTAL: + terminal()->widget_measure_width(minimum, natural); + break; + case GTK_ORIENTATION_VERTICAL: + *minimum_baseline = *natural_baseline = -1; + terminal()->widget_measure_height(minimum, natural); + break; + } +} + +#endif /* VTE_GTK == 4 */ + +bool +Widget::padding_changed() noexcept +{ + auto padding = GtkBorder{}; + auto const context = gtk_widget_get_style_context(gtk()); + gtk_style_context_get_padding(context, +#if VTE_GTK == 3 + gtk_style_context_get_state(context), +#endif + &padding); + + /* FIXMEchpe: do we need to add the border from + * gtk_style_context_get_border() to the padding? + */ + + return terminal()->set_style_border(padding); +} + +bool +Widget::primary_paste_enabled() const noexcept +{ + auto primary_paste = gboolean{}; + g_object_get(m_settings.get(), + "gtk-enable-primary-paste", &primary_paste, + nullptr); + + return primary_paste != false; +} + +bool +Widget::query_tooltip(int x, + int y, + bool keyboard, + GtkTooltip* tooltip) noexcept +{ + return false; } void @@ -259,7 +1869,7 @@ Widget::realize() noexcept /* Create stock cursors */ m_default_cursor = create_cursor(VTE_DEFAULT_CURSOR); - m_invisible_cursor = create_cursor(GDK_BLANK_CURSOR); + m_invisible_cursor = create_cursor("none"s); m_mousing_cursor = create_cursor(VTE_MOUSING_CURSOR); if (_vte_debug_on(VTE_DEBUG_HYPERLINK)) /* Differ from the standard regex match cursor in debug mode. */ @@ -267,6 +1877,7 @@ Widget::realize() noexcept else m_hyperlink_cursor = create_cursor(VTE_HYPERLINK_CURSOR); +#if VTE_GTK == 3 /* Create an input window for the widget. */ auto allocation = m_terminal->get_allocated_rect(); GdkWindowAttr attributes; @@ -301,15 +1912,21 @@ Widget::realize() noexcept m_event_window = gdk_window_new(gtk_widget_get_parent_window (m_widget), &attributes, attributes_mask); gtk_widget_register_window(m_widget, m_event_window); +#endif /* VTE_GTK == 3 */ assert(!m_im_context); - m_im_context = gtk_im_multicontext_new(); -#if GTK_CHECK_VERSION (3, 24, 14) + m_im_context = vte::glib::take_ref(gtk_im_multicontext_new()); +#if (VTE_GTK == 3 && GTK_CHECK_VERSION (3, 24, 14)) || VTE_GTK == 4 g_object_set(m_im_context.get(), "input-purpose", GTK_INPUT_PURPOSE_TERMINAL, nullptr); #endif + +#if VTE_GTK == 3 gtk_im_context_set_client_window(m_im_context.get(), m_event_window); +#elif VTE_GTK == 4 + gtk_im_context_set_client_widget(m_im_context.get(), gtk()); +#endif g_signal_connect(m_im_context.get(), "commit", G_CALLBACK(im_commit_cb), this); g_signal_connect(m_im_context.get(), "preedit-start", @@ -324,53 +1941,169 @@ Widget::realize() noexcept G_CALLBACK(im_delete_surrounding_cb), this); gtk_im_context_set_use_preedit(m_im_context.get(), true); + m_clipboard = std::make_shared(*this, ClipboardType::CLIPBOARD); + m_primary_clipboard = std::make_shared(*this, ClipboardType::PRIMARY); + m_terminal->widget_realize(); } +#if VTE_GTK == 4 + +void +Widget::root_surface_state_notify() +{ + auto const r = gtk_widget_get_root(gtk()); + auto const toplevel = GDK_TOPLEVEL(gtk_native_get_surface(GTK_NATIVE(r))); + auto const new_state = toplevel ? gdk_toplevel_get_state(toplevel) : GdkToplevelState(0); + auto const changed_mask = new_state ^ m_root_surface_state; + + m_root_surface_state = new_state; + + // If the widget is the focus widget in the toplevel, notify + // the widget that it now has gained/lost the global focus + if ((changed_mask & GDK_TOPLEVEL_STATE_FOCUSED) && + gtk_root_get_focus(r) == gtk()) { + + if (root_focused()) + terminal()->widget_focus_in(); + else + terminal()->widget_focus_out(); + } +} + +void +Widget::root_realize() +{ + if (m_root_surface_state_notify_id != 0) + return; + + auto const r = gtk_widget_get_root(gtk()); + auto const toplevel = GDK_TOPLEVEL(gtk_native_get_surface(GTK_NATIVE(r))); + m_root_surface_state_notify_id = g_signal_connect(toplevel, + "notify::state", + G_CALLBACK(root_surface_state_notify_cb), + this); + + root_surface_state_notify(); +} + +void +Widget::root_unrealize() +{ + root_surface_state_notify(); + m_root_surface_state = GdkToplevelState(0); + + if (m_root_surface_state_notify_id == 0) + return; + + auto const r = gtk_widget_get_root(gtk()); + auto const toplevel = GDK_TOPLEVEL(gtk_native_get_surface(GTK_NATIVE(r))); + g_signal_handler_disconnect(toplevel, m_root_surface_state_notify_id); + m_root_surface_state_notify_id = 0; +} + +void +Widget::root() +{ + auto const r = gtk_widget_get_root(gtk()); + m_root_realize_id = g_signal_connect(r, + "realize", + G_CALLBACK(root_realize_cb), + this); + m_root_unrealize_id = g_signal_connect(r, + "unrealize", + G_CALLBACK(root_unrealize_cb), + this); + + // Find out if we're inside a GtkScrolledWindow + auto const sw = gtk_widget_get_ancestor(gtk(), GTK_TYPE_SCROLLED_WINDOW); + m_inside_scrolled_window = bool(sw); + + // Already realised? + if (gtk_widget_get_realized(GTK_WIDGET(r))) + root_realize(); +} + +#endif /* VTE_GTK == 4 */ + +#if VTE_GTK == 3 + void Widget::screen_changed(GdkScreen *previous_screen) noexcept { auto gdk_screen = gtk_widget_get_screen(m_widget); - if (previous_screen != nullptr && - (gdk_screen != previous_screen || gdk_screen == nullptr)) { - auto settings = gtk_settings_get_for_screen(previous_screen); - g_signal_handlers_disconnect_matched(settings, G_SIGNAL_MATCH_DATA, - 0, 0, nullptr, nullptr, - this); - } - if (gdk_screen == previous_screen || gdk_screen == nullptr) return; + connect_settings(); +} + +#elif VTE_GTK == 4 + +void +Widget::display_changed() noexcept +{ + /* There appears to be no way to retrieve the previous display */ + connect_settings(); +} + +#endif /* VTE_GTK */ + +void +Widget::connect_settings() +{ + auto settings = vte::glib::make_ref(gtk_widget_get_settings(m_widget)); + if (settings == m_settings) + return; + + if (m_settings) + g_signal_handlers_disconnect_matched(m_settings.get(), G_SIGNAL_MATCH_DATA, + 0, 0, nullptr, nullptr, + this); + + m_settings = std::move(settings); + settings_changed(); - auto settings = gtk_widget_get_settings(m_widget); - g_signal_connect (settings, "notify::gtk-cursor-blink", - G_CALLBACK(settings_notify_cb), this); - g_signal_connect (settings, "notify::gtk-cursor-blink-time", - G_CALLBACK(settings_notify_cb), this); - g_signal_connect (settings, "notify::gtk-cursor-blink-timeout", - G_CALLBACK(settings_notify_cb), this); + g_signal_connect(m_settings.get(), "notify::gtk-cursor-blink", + G_CALLBACK(settings_notify_cb), this); + g_signal_connect(m_settings.get(), "notify::gtk-cursor-blink-time", + G_CALLBACK(settings_notify_cb), this); + g_signal_connect(m_settings.get(), "notify::gtk-cursor-blink-timeout", + G_CALLBACK(settings_notify_cb), this); +#if VTE_GTK == 4 + g_signal_connect(m_settings.get(), "notify::gtk-cursor-aspect-ratio", + G_CALLBACK(settings_notify_cb), this); +#endif } void -Widget::settings_changed() noexcept +Widget::settings_changed() { - gboolean blink; - int blink_time; - int blink_timeout; - - g_object_get(gtk_widget_get_settings(m_widget), + auto blink = gboolean{}; + auto blink_time_ms = int{}; + auto blink_timeout_s = int{}; +#if VTE_GTK == 4 + auto aspect = double{}; +#endif + g_object_get(m_settings.get(), "gtk-cursor-blink", &blink, - "gtk-cursor-blink-time", &blink_time, - "gtk-cursor-blink-timeout", &blink_timeout, + "gtk-cursor-blink-time", &blink_time_ms, + "gtk-cursor-blink-timeout", &blink_timeout_s, +#if VTE_GTK == 4 + "gtk-cursor-aspect-ratio", &aspect, +#endif nullptr); _vte_debug_print(VTE_DEBUG_MISC, "Cursor blinking settings: blink=%d time=%d timeout=%d\n", - blink, blink_time, blink_timeout); + blink, blink_time_ms, blink_timeout_s * 1000); - m_terminal->set_blink_settings(blink, blink_time, blink_timeout); + m_terminal->set_blink_settings(blink, blink_time_ms, blink_timeout_s * 1000); + +#if VTE_GTK == 4 + m_terminal->set_cursor_aspect(aspect); +#endif } void @@ -384,6 +2117,30 @@ Widget::set_cursor(CursorType type) noexcept } } +void +Widget::set_hscroll_policy(GtkScrollablePolicy policy) +{ + m_hscroll_policy = policy; + +#if VTE_GTK == 3 + gtk_widget_queue_resize_no_redraw(gtk()); +#elif VTE_GTK == 4 + gtk_widget_queue_resize(gtk()); +#endif +} + +void +Widget::set_vscroll_policy(GtkScrollablePolicy policy) +{ + m_vscroll_policy = policy; + +#if VTE_GTK == 3 + gtk_widget_queue_resize_no_redraw(gtk()); +#elif VTE_GTK == 4 + gtk_widget_queue_resize(gtk()); +#endif +} + bool Widget::set_pty(VtePty* pty_obj) noexcept { @@ -396,6 +2153,44 @@ Widget::set_pty(VtePty* pty_obj) noexcept return true; } + +static void +vadjustment_value_changed_cb(vte::platform::Widget* that) noexcept +try +{ + that->vadjustment_value_changed(); +} +catch (...) +{ + vte::log_exception(); +} + +void +Widget::set_vadjustment(vte::glib::RefPtr adjustment) +{ + if (adjustment && adjustment == m_vadjustment) + return; + if (!adjustment && m_vadjustment) + return; + + if (m_vadjustment) { + g_signal_handlers_disconnect_by_func(m_vadjustment.get(), + (void*)vadjustment_value_changed_cb, + this); + } + + if (adjustment) + m_vadjustment = std::move(adjustment); + else + m_vadjustment = vte::glib::make_ref_sink(GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 0, 0, 0, 0))); + + /* We care about the offset only, not the top or bottom. */ + g_signal_connect_swapped(m_vadjustment.get(), + "value-changed", + G_CALLBACK(vadjustment_value_changed_cb), + this); +} + bool Widget::set_word_char_exceptions(std::optional stropt) { @@ -424,10 +2219,22 @@ Widget::unset_pty() noexcept g_object_notify_by_pspec(object(), pspecs[PROP_PTY]); } +#if VTE_GTK == 3 + void -Widget::size_allocate(GtkAllocation* allocation) noexcept +Widget::size_allocate(GtkAllocation* allocation) { - m_terminal->widget_size_allocate(allocation); + _vte_debug_print(VTE_DEBUG_WIDGET_SIZE, "Widget size allocate width=%d height=%d x=%d y=%d\n", + allocation->width, allocation->height, allocation->x, allocation->y); + + m_terminal->widget_size_allocate(allocation->x, allocation->y, + allocation->width, allocation->height, + -1, + vte::terminal::Terminal::Alignment(m_xalign), + vte::terminal::Terminal::Alignment(m_yalign), + m_xfill, m_yfill); + + gtk_widget_set_allocation(gtk(), allocation); if (realized()) gdk_window_move_resize(m_event_window, @@ -437,6 +2244,28 @@ Widget::size_allocate(GtkAllocation* allocation) noexcept allocation->height); } +#elif VTE_GTK == 4 + +void +Widget::size_allocate(int width, + int height, + int baseline) +{ + _vte_debug_print(VTE_DEBUG_WIDGET_SIZE, "Widget size allocate width=%d height=%d baseline=%d\n", + width, height, baseline); + + terminal()->widget_size_allocate(width, height, baseline, + vte::terminal::Terminal::Alignment(m_xalign), + vte::terminal::Terminal::Alignment(m_yalign), + m_xfill, m_yfill); + + // Need to size allocate the popup too + if (m_menu_showing) + gtk_popover_present(GTK_POPOVER(m_menu_showing.get())); +} + +#endif /* VTE_GTK */ + bool Widget::should_emit_signal(int id) noexcept { @@ -446,13 +2275,74 @@ Widget::should_emit_signal(int id) noexcept false /* not interested in blocked handlers */) != FALSE; } +void +Widget::state_flags_changed(GtkStateFlags old_flags) +{ + _vte_debug_print(VTE_DEBUG_STYLE, "Widget state flags changed\n"); +} + +#if VTE_GTK == 3 + +void +Widget::style_updated() noexcept +{ + _vte_debug_print(VTE_DEBUG_STYLE, "Widget style changed\n"); + + auto need_resize = padding_changed(); + + auto aspect = float{}; + gtk_widget_style_get(gtk(), "cursor-aspect-ratio", &aspect, nullptr); + m_terminal->set_cursor_aspect(aspect); + + m_terminal->widget_style_updated(); + + if (need_resize) + gtk_widget_queue_resize(m_widget); + +} + +#endif /* VTE_GTK == 3 */ + +#if VTE_GTK == 4 + +void +Widget::system_setting_changed(GtkSystemSetting setting) +{ + _vte_debug_print(VTE_DEBUG_STYLE, "Widget system settings %d changed\n", int(setting)); + + switch (setting) { + case GTK_SYSTEM_SETTING_DISPLAY: + display_changed(); + break; + + case GTK_SYSTEM_SETTING_DPI: + break; + + case GTK_SYSTEM_SETTING_FONT_CONFIG: + break; + + case GTK_SYSTEM_SETTING_FONT_NAME: + break; + + case GTK_SYSTEM_SETTING_ICON_THEME: + break; + + default: + break; + } +} + +#endif /* VTE_GTK == 4 */ + void Widget::unmap() noexcept { m_terminal->widget_unmap(); +#if VTE_GTK == 3 if (m_event_window) gdk_window_hide(m_event_window); +#endif } void @@ -460,6 +2350,18 @@ Widget::unrealize() noexcept { m_terminal->widget_unrealize(); + // FIXMEgtk4 only withdraw content from clipboard, not unselect? + if (m_clipboard) { + terminal()->widget_clipboard_data_clear(*m_clipboard); + m_clipboard->disown(); + m_clipboard.reset(); + } + if (m_primary_clipboard) { + terminal()->widget_clipboard_data_clear(*m_primary_clipboard); + m_primary_clipboard->disown(); + m_primary_clipboard.reset(); + } + m_default_cursor.reset(); m_invisible_cursor.reset(); m_mousing_cursor.reset(); @@ -472,13 +2374,227 @@ Widget::unrealize() noexcept 0, 0, NULL, NULL, this); m_terminal->im_preedit_reset(); +#if VTE_GTK == 3 gtk_im_context_set_client_window(m_im_context.get(), nullptr); +#elif VTE_GTK == 4 + gtk_im_context_set_client_widget(m_im_context.get(), nullptr); +#endif m_im_context.reset(); +#if VTE_GTK == 3 /* Destroy input window */ gtk_widget_unregister_window(m_widget, m_event_window); gdk_window_destroy(m_event_window); m_event_window = nullptr; +#endif /* VTE_GTK == 3 */ +} + +#if VTE_GTK == 4 + +void +Widget::unroot() +{ + root_unrealize(); + + auto const r = gtk_widget_get_root(gtk()); + g_signal_handler_disconnect(r, m_root_realize_id); + m_root_realize_id = 0; + g_signal_handler_disconnect(r, m_root_unrealize_id); + m_root_unrealize_id = 0; + +#if VTE_GTK == 4 + m_inside_scrolled_window = false; +#endif +} + +void +Widget::context_menu_closed(GtkWidget* widget) +{ + if (!widget || m_menu_showing.get() != widget) + return; + + // There is a design flaw in the gtk popover handling here + // in that we cannot directly unset the context menu now, + // because the selected action is resolved *after* this + // function has run, and unsetting the parent will make + // resolving the action fail. + // So instead, we need to delay this to idle. + // See https://gitlab.gnome.org/GNOME/vte/-/issues/2716 + + if (m_context_menu_unset_on_idle_source != 0) + return; // already scheduled + + m_context_menu_unset_on_idle_source = + g_idle_add_once(GSourceOnceFunc(context_menu_unset_on_idle_cb), + this); +} + +void +Widget::unset_context_menu_on_idle() +{ + m_context_menu_unset_on_idle_source = 0; + + // We can assume that the menu-to-unset is m_menu_showing, + // since otherwise unset_context_menu() would have been called + // directly, and that cancels the idle. + unset_context_menu(m_menu_showing.get(), false, true); +} + +#endif /* VTE_GTK == 4 */ + +void +Widget::vadjustment_value_changed() +{ + if (!m_terminal) + return; + + if (m_changing_scroll_position) + return; + + auto adj = gtk_adjustment_get_value(m_vadjustment.get()); + if (scroll_unit_is_pixels()) [[unlikely]] { + auto const factor = m_terminal->get_cell_height(); + adj /= factor; + } + + /* Add offset */ + auto const lower = terminal()->scroll_limit_lower(); + adj += lower; + + m_terminal->set_scroll_value(adj); +} + +bool +Widget::set_context_menu(vte::glib::RefPtr menu) +{ + if (menu == m_context_menu) + return false; + + if (m_context_menu) { + g_signal_handlers_disconnect_matched(menu.get(), + G_SIGNAL_MATCH_DATA, + 0, 0, + nullptr, + nullptr, + this); + } + + m_context_menu = std::move(menu); + return true; +} + +void +Widget::emit_setup_context_menu(EventContext const* context) +{ + _vte_debug_print(VTE_DEBUG_EVENTS, "Emitting setup-context-menu\n"); + g_signal_emit(object(), signals[SIGNAL_SETUP_CONTEXT_MENU], 0, + reinterpret_cast(context)); +} + +bool +Widget::show_context_menu(EventContext const& context) +{ + unset_context_menu(m_menu_showing.get(), true, false); + + // Let the embedder update or provide the menu model or menu + emit_setup_context_menu(&context); + + // Create or get the menu +#if VTE_GTK == 3 + if (m_context_menu_model) + m_menu_showing = vte::glib::make_ref_sink + (GTK_WIDGET(gtk_menu_new_from_model(m_context_menu_model.get()))); +#elif VTE_GTK == 4 + if (m_context_menu_model) + m_menu_showing = vte::glib::make_ref_sink + (GTK_WIDGET(gtk_popover_menu_new_from_model(G_MENU_MODEL(m_context_menu_model.get())))); +#endif // VTE_GTK + else if (m_context_menu) { + m_menu_showing = vte::glib::ref(m_context_menu); + } + + _vte_debug_print(VTE_DEBUG_EVENTS, "Context menu is %p\n", (void*)m_menu_showing.get()); + + if (!m_menu_showing) + return false; + + gtk_style_context_add_class(gtk_widget_get_style_context(m_menu_showing.get()), + "context-menu"); + + auto const button = context.button(); + +#if VTE_GTK == 3 + + g_object_set(G_OBJECT(m_menu_showing.get()), + "anchor-hints", GdkAnchorHints(GDK_ANCHOR_FLIP_Y), + "menu-type-hint", GdkWindowTypeHint(GDK_WINDOW_TYPE_HINT_POPUP_MENU), + nullptr); + + gtk_menu_attach_to_widget(GTK_MENU(m_menu_showing.get()), gtk(), + GtkMenuDetachFunc(context_menu_detach_cb)); + + g_signal_connect(m_menu_showing.get(), "selection-done", + G_CALLBACK(context_menu_selection_done_cb), this); + + if (button == -1) { // Keyboard + + auto const rect = terminal()->cursor_rect(); + gtk_menu_popup_at_rect(GTK_MENU(m_menu_showing.get()), + event_window(), + rect.cairo(), + GDK_GRAVITY_SOUTH_WEST, + GDK_GRAVITY_NORTH_WEST, + context.platform_event()); + + // Select first menu item + gtk_menu_shell_select_first(GTK_MENU_SHELL(m_menu_showing.get()), true); + + } else { // Mouse + gtk_menu_popup_at_pointer(GTK_MENU(m_menu_showing.get()), + context.platform_event()); + } + +#elif VTE_GTK == 4 + + gtk_widget_set_parent(m_menu_showing.get(), gtk()); + + auto const is_touch = context.is_long_press(); + + if (is_touch) + gtk_widget_set_halign(m_menu_showing.get(), GTK_ALIGN_FILL); + else if (gtk_widget_get_direction(gtk()) == GTK_TEXT_DIR_RTL) + gtk_widget_set_halign(m_menu_showing.get(), GTK_ALIGN_END); + else + gtk_widget_set_halign(m_menu_showing.get(), GTK_ALIGN_START); + + auto const popover = GTK_POPOVER(m_menu_showing.get()); + gtk_popover_set_autohide(popover, true); + gtk_popover_set_cascade_popdown(popover, true); + gtk_popover_set_has_arrow(popover, is_touch); + gtk_popover_set_mnemonics_visible(popover, false); + gtk_popover_set_position(popover, is_touch ? GTK_POS_TOP : GTK_POS_BOTTOM); + + if (button == -1) { + // Keyboard, point to the cursor rectangle + auto const rect = terminal()->cursor_rect().cairo(); + gtk_popover_set_pointing_to(popover, &rect); + + // Gtk apparently automatically selects the first sensitive + // menu item in the popover. + } else if (double x, y; + context.get_coords(&x, &y)) { + auto rect = GdkRectangle{int(x), int(y), 0, 0}; + gtk_popover_set_pointing_to(popover, &rect); + } + + g_signal_connect(m_menu_showing.get(), "closed", + G_CALLBACK(context_menu_closed_cb), + this); + + gtk_popover_popup(popover); +#endif // VTE_GTK + + return true; } } // namespace platform diff --git a/src/widget.hh b/src/widget.hh index d904fe3..8e0eaba 100644 --- a/src/widget.hh +++ b/src/widget.hh @@ -1,18 +1,18 @@ /* * Copyright © 2018 Christian Persch * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #pragma once @@ -20,6 +20,8 @@ #include #include #include +#include +#include #include #include "vteterminal.h" @@ -28,6 +30,9 @@ #include "vteinternal.hh" #include "fwd.hh" + +#include "clipboard-gtk.hh" +#include "regex.hh" #include "refptr.hh" namespace vte { @@ -40,11 +45,312 @@ class Terminal; namespace platform { -class Widget { +class EventBase { + friend class vte::platform::Widget; + friend class Terminal; + friend class EventContext; + +public: + enum class Type { + eKEY_PRESS, + eKEY_RELEASE, + eMOUSE_ENTER, + eMOUSE_LEAVE, + eMOUSE_MOTION, + eMOUSE_PRESS, + eMOUSE_RELEASE, + eMOUSE_SCROLL, + }; + +protected: + + EventBase() noexcept = default; + + constexpr EventBase(Type type) noexcept + : m_type{type} + { + } + +public: + ~EventBase() noexcept = default; + + EventBase(EventBase const&) = default; + EventBase(EventBase&&) = default; + EventBase& operator=(EventBase const&) = delete; + EventBase& operator=(EventBase&&) = delete; + + constexpr auto type() const noexcept { return m_type; } + +private: + Type m_type; +}; // class EventBase + +class KeyEvent : public EventBase { + friend class vte::platform::Widget; + friend class Terminal; + friend class EventContext; + +protected: + + KeyEvent() noexcept = default; + + constexpr KeyEvent(GdkEvent* gdk_event, + Type type, + unsigned modifiers, + unsigned keyval, + unsigned keycode, + unsigned group, + bool is_modifier) noexcept + : EventBase{type}, + m_platform_event{gdk_event}, + m_modifiers{modifiers}, + m_keyval{keyval}, + m_keycode{keycode}, + m_group{group}, + m_is_modifier{is_modifier} + { + } + + constexpr auto platform_event() const noexcept { return m_platform_event; } + +public: + ~KeyEvent() noexcept = default; + + KeyEvent(KeyEvent const&) = delete; + KeyEvent(KeyEvent&&) = delete; + KeyEvent& operator=(KeyEvent const&) = delete; + KeyEvent& operator=(KeyEvent&&) = delete; + + constexpr auto group() const noexcept { return m_group; } + constexpr auto is_modifier() const noexcept { return m_is_modifier; } + constexpr auto keycode() const noexcept { return m_keycode; } + constexpr auto keyval() const noexcept { return m_keyval; } + constexpr auto modifiers() const noexcept { return m_modifiers; } + + constexpr auto is_key_press() const noexcept { return type() == Type::eKEY_PRESS; } + constexpr auto is_key_release() const noexcept { return type() == Type::eKEY_RELEASE; } + + bool matches(unsigned key, + unsigned mods) const noexcept + { +#if VTE_GTK == 3 + return keyval() == key && + (modifiers() & gtk_accelerator_get_default_mod_mask()) == mods; +#elif VTE_GTK == 4 + return gdk_key_event_matches(platform_event(), + key, GdkModifierType(mods)) == GDK_KEY_MATCH_EXACT; +#endif + } + +private: + GdkEvent* m_platform_event; + unsigned m_modifiers; + unsigned m_keyval; + unsigned m_keycode; + unsigned m_group; + bool m_is_modifier; +}; // class KeyEvent + +class MouseEvent : public EventBase { + friend class vte::platform::Widget; + friend class Terminal; + friend class EventContext; + +public: + enum class Button { + eNONE = 0, + eLEFT = 1, + eMIDDLE = 2, + eRIGHT = 3, + eFOURTH = 4, + eFIFTH = 5, + }; + +protected: + + MouseEvent() noexcept = default; + + constexpr MouseEvent(GdkEvent* gdk_event, + Type type, + int press_count, + unsigned modifiers, + Button button, + double x, + double y) noexcept + : EventBase{type}, + m_platform_event{gdk_event}, + m_press_count{press_count}, + m_modifiers{modifiers}, + m_button{button}, + m_x{x}, + m_y{y} + { + } + + constexpr auto platform_event() const noexcept { return m_platform_event; } + +public: + ~MouseEvent() noexcept = default; + + MouseEvent(MouseEvent const&) = default; + MouseEvent(MouseEvent&&) = default; + MouseEvent& operator=(MouseEvent const&) = delete; + MouseEvent& operator=(MouseEvent&&) = delete; + + constexpr auto button() const noexcept { return m_button; } + constexpr auto button_value() const noexcept { return unsigned(m_button); } + constexpr auto press_count() const noexcept { return m_press_count; } + constexpr auto modifiers() const noexcept { return m_modifiers; } + constexpr auto x() const noexcept { return m_x; } + constexpr auto y() const noexcept { return m_y; } + + constexpr auto is_mouse_enter() const noexcept { return type() == Type::eMOUSE_ENTER; } + constexpr auto is_mouse_leave() const noexcept { return type() == Type::eMOUSE_LEAVE; } + constexpr auto is_mouse_motion() const noexcept { return type() == Type::eMOUSE_MOTION; } + constexpr auto is_mouse_press() const noexcept { return type() == Type::eMOUSE_PRESS; } + constexpr auto is_mouse_release() const noexcept { return type() == Type::eMOUSE_RELEASE; } + +private: + GdkEvent* m_platform_event; + int m_press_count; + unsigned m_modifiers; + Button m_button; + double m_x; + double m_y; +}; // class MouseEvent + +class ScrollEvent : public EventBase { + friend class vte::platform::Widget; + friend class Terminal; + friend class EventContext; + +protected: + + ScrollEvent() noexcept = default; + + constexpr ScrollEvent(unsigned modifiers, + double dx, + double dy) noexcept + : EventBase{EventBase::Type::eMOUSE_SCROLL}, + m_modifiers{modifiers}, + m_dx{dx}, + m_dy{dy} + { + } + +public: + ~ScrollEvent() noexcept = default; + + ScrollEvent(ScrollEvent const&) = default; + ScrollEvent(ScrollEvent&&) = default; + ScrollEvent& operator=(ScrollEvent const&) = delete; + ScrollEvent& operator=(ScrollEvent&&) = delete; + + constexpr auto modifiers() const noexcept { return m_modifiers; } + constexpr auto dx() const noexcept { return m_dx; } + constexpr auto dy() const noexcept { return m_dy; } + +private: + unsigned m_modifiers; + double m_dx; + double m_dy; +}; // class ScrollEvent + +class EventContext { +private: + int m_button{-1}; +#if VTE_GTK == 3 + GdkEvent* m_platform_event{nullptr}; // unowned +#elif VTE_GTK == 4 + bool m_xy_set{false}; + double m_x{0}; + double m_y{0}; + bool m_is_long_press{false}; +#endif // VTE_GTK + +public: + ~EventContext() = default; + + EventContext(EventContext const&) = delete; + EventContext(EventContext&&) = delete; + + EventContext& operator=(EventContext const&) = delete; + EventContext& operator=(EventContext&&) = delete; + +#if VTE_GTK == 3 + EventContext() noexcept : + m_button{-1}, + m_platform_event{gtk_get_current_event()} + { + } +#elif VTE_GTK == 4 + constexpr EventContext() noexcept = default; +#endif + +#if VTE_GTK == 4 + constexpr EventContext(double x, + double y, + bool is_long_press) : + m_xy_set{true}, + m_x{x}, + m_y{y}, + m_is_long_press{is_long_press} + { + } +#endif // VTE_GTK == 4 + + explicit constexpr EventContext(MouseEvent const& event) noexcept : + m_button{int(event.button())}, +#if VTE_GTK == 3 + m_platform_event{event.platform_event()} +#elif VTE_GTK == 4 + m_xy_set{true}, + m_x{event.x()}, + m_y{event.y()} +#endif + { + } + + explicit constexpr EventContext(KeyEvent const& event) noexcept : + m_button{-1}, +#if VTE_GTK == 3 + m_platform_event{event.platform_event()} +#elif VTE_GTK == 4 + m_xy_set{false} +#endif + { + } + + constexpr auto button() const noexcept { return m_button; } +#if VTE_GTK == 3 + constexpr auto platform_event() const noexcept { return m_platform_event; } +#elif VTE_GTK == 4 + constexpr auto xy_set() const noexcept { return m_xy_set; } + constexpr auto x() const noexcept { return m_x; } + constexpr auto y() const noexcept { return m_y; } + constexpr auto get_coords(double* _x, + double* _y) const noexcept + { + if (!xy_set()) + return false; + if (_x) + *_x = x(); + if (_y) + *_y = y(); + return true; + } + constexpr auto is_long_press() const noexcept { return m_is_long_press; } +#endif // VTE_GTK + +}; // class EventContext + +class Widget : public std::enable_shared_from_this { public: friend class vte::terminal::Terminal; - Widget(VteTerminal* t) noexcept; + static Widget* from_terminal(VteTerminal*); + + Widget(VteTerminal* t); ~Widget() noexcept; Widget(Widget const&) = delete; @@ -58,54 +364,159 @@ public: inline constexpr vte::terminal::Terminal* terminal() const noexcept { return m_terminal; } - void constructed() noexcept { m_terminal->widget_constructed(); } + inline int scale_factor() const noexcept { return gtk_widget_get_scale_factor(gtk()); } + + void constructed() noexcept; void dispose() noexcept; void realize() noexcept; void unrealize() noexcept; void map() noexcept; void unmap() noexcept; - void style_updated() noexcept { m_terminal->widget_style_updated(); } + void state_flags_changed(GtkStateFlags old_flags); + void direction_changed(GtkTextDirection old_direction) noexcept; + bool query_tooltip(int x, + int y, + bool keyboard, + GtkTooltip* tooltip) noexcept; + + void connect_settings(); + bool padding_changed() noexcept; + void settings_changed(); + +#if VTE_GTK == 3 + void style_updated() noexcept; void draw(cairo_t *cr) noexcept { m_terminal->widget_draw(cr); } void get_preferred_width(int *minimum_width, - int *natural_width) const noexcept { m_terminal->widget_get_preferred_width(minimum_width, natural_width); } + int *natural_width) const noexcept { m_terminal->widget_measure_width(minimum_width, natural_width); } void get_preferred_height(int *minimum_height, - int *natural_height) const noexcept { m_terminal->widget_get_preferred_height(minimum_height, natural_height); } - void size_allocate(GtkAllocation *allocation) noexcept; + int *natural_height) const noexcept { m_terminal->widget_measure_height(minimum_height, natural_height); } + void size_allocate(GtkAllocation *allocation); - void focus_in(GdkEventFocus *event) noexcept { m_terminal->widget_focus_in(event); } - void focus_out(GdkEventFocus *event) noexcept { m_terminal->widget_focus_out(event); } - bool key_press(GdkEventKey *event) noexcept { return m_terminal->widget_key_press(event); } - bool key_release(GdkEventKey *event) noexcept { return m_terminal->widget_key_release(event); } - bool button_press(GdkEventButton *event) noexcept { return m_terminal->widget_button_press(event); } - bool button_release(GdkEventButton *event) noexcept { return m_terminal->widget_button_release(event); } - void enter(GdkEventCrossing *event) noexcept { m_terminal->widget_enter(event); } - void leave(GdkEventCrossing *event) noexcept { m_terminal->widget_leave(event); } - void scroll(GdkEventScroll *event) noexcept { m_terminal->widget_scroll(event); } - bool motion_notify(GdkEventMotion *event) noexcept { return m_terminal->widget_motion_notify(event); } - - void paste(GdkAtom board) noexcept { m_terminal->widget_paste(board); } - void copy(VteSelection sel, - VteFormat format) noexcept { m_terminal->widget_copy(sel, format); } - void paste_received(char const* text) noexcept { m_terminal->widget_paste_received(text); } - void clipboard_cleared(GtkClipboard *clipboard) noexcept { m_terminal->widget_clipboard_cleared(clipboard); } - void clipboard_requested(GtkClipboard *target_clipboard, - GtkSelectionData *data, - guint info) noexcept { m_terminal->widget_clipboard_requested(target_clipboard, data, info); } + void event_focus_in(GdkEventFocus *event); + void event_focus_out(GdkEventFocus *event); + bool event_key_press(GdkEventKey *event); + bool event_key_release(GdkEventKey *event); + bool event_button_press(GdkEventButton *event); + bool event_button_release(GdkEventButton *event); + void event_enter(GdkEventCrossing *event); + void event_leave(GdkEventCrossing *event); + bool event_scroll(GdkEventScroll *event); + bool event_motion_notify(GdkEventMotion *event); void screen_changed (GdkScreen *previous_screen) noexcept; - void settings_changed() noexcept; +#endif /* VTE_GTK == 3 */ + +#if VTE_GTK == 4 + void size_allocate(int width, + int height, + int baseline); + void root(); + void unroot(); + void measure(GtkOrientation orientation, + int for_size, + int* minimum, + int* natural, + int* minimum_baseline, + int* natural_baseline) noexcept; + std::pair compute_expand(); + void css_changed(GtkCssStyleChange* change); + void root_realize(); + void root_unrealize(); + void root_surface_state_notify(); + void root_surface_focused_changed(); + auto root_focused() const noexcept { return (m_root_surface_state & GDK_TOPLEVEL_STATE_FOCUSED) != 0; } + void system_setting_changed(GtkSystemSetting setting); + void snapshot(GtkSnapshot* snapshot) noexcept { terminal()->widget_snapshot(snapshot); } + bool contains(double x, + double y); + void display_changed() noexcept; + + bool event_key_pressed(GtkEventControllerKey* controller, + unsigned key, + unsigned keycode, + unsigned modifiers); + void event_key_released(GtkEventControllerKey* controller, + unsigned key, + unsigned keycode, + unsigned modifiers); + bool event_key_modifiers(GtkEventControllerKey* controller, + unsigned modifiers); + void event_focus_enter(GtkEventControllerFocus* controller); + void event_focus_leave(GtkEventControllerFocus* controller); + void event_motion_enter(GtkEventControllerMotion* controller, + double x, + double y); + void event_motion_leave(GtkEventControllerMotion* controller); + void event_motion(GtkEventControllerMotion* controller, + double x, + double y); + void event_motion_notify_is_pointer(GtkEventControllerMotion* controller); + void event_motion_notify_contains_pointer(GtkEventControllerMotion* controller); + void event_scroll_begin(GtkEventControllerScroll* controller); + bool event_scroll(GtkEventControllerScroll* controller, + double dx, + double dy); + void event_scroll_end(GtkEventControllerScroll* controller); + void event_scroll_decelerate(GtkEventControllerScroll* controller, + double vx, + double vy); + void gesture_click_pressed(GtkGestureClick* gesture, + int press_count, + double x, + double y); + void gesture_click_released(GtkGestureClick* gesture, + int press_count, + double x, + double y); + void gesture_click_stopped(GtkGestureClick* gesture); + void gesture_click_unpaired_release(GtkGestureClick* gesture, + double x, + double y, + unsigned button, + GdkEventSequence* sequence); + void gesture_long_press_pressed(GtkGestureLongPress* gesture, + double x, + double y); + void gesture_long_press_cancelled(GtkGestureLongPress* gesture); +#endif /* VTE_GTK == 4 */ + + void grab_focus() noexcept { gtk_widget_grab_focus(gtk()); } + + bool primary_paste_enabled() const noexcept; + + Clipboard& clipboard_get(ClipboardType type) const; + void clipboard_offer_data(ClipboardType type, + ClipboardFormat format) noexcept; + void clipboard_request_text(ClipboardType type) noexcept; + void clipboard_set_text(ClipboardType type, + char const* str, + size_t size) noexcept; + + void paste_text(std::string_view const& text) { m_terminal->widget_paste(text); } + void paste(vte::platform::ClipboardType type) { clipboard_request_text(type); } + void copy(vte::platform::ClipboardType type, + vte::platform::ClipboardFormat format) noexcept { m_terminal->widget_copy(type, format); } void beep() noexcept; - void set_hadjustment(vte::glib::RefPtr&& adjustment) noexcept { m_hadjustment = std::move(adjustment); } - void set_vadjustment(vte::glib::RefPtr&& adjustment) { terminal()->widget_set_vadjustment(std::move(adjustment)); } + void set_hadjustment(vte::glib::RefPtr adjustment) noexcept { m_hadjustment = std::move(adjustment); } + void set_vadjustment(vte::glib::RefPtr adjustment); auto hadjustment() noexcept { return m_hadjustment.get(); } - auto vadjustment() noexcept { return terminal()->vadjustment(); } - void set_hscroll_policy(GtkScrollablePolicy policy) noexcept { m_hscroll_policy = policy; } - void set_vscroll_policy(GtkScrollablePolicy policy) noexcept { m_vscroll_policy = policy; } + auto vadjustment() noexcept { return m_vadjustment.get(); } + void set_hscroll_policy(GtkScrollablePolicy policy); + void set_vscroll_policy(GtkScrollablePolicy policy); auto hscroll_policy() const noexcept { return m_hscroll_policy; } auto vscroll_policy() const noexcept { return m_vscroll_policy; } + constexpr bool set_scroll_unit_is_pixels(bool enable) noexcept + { + auto const rv = m_scroll_unit_is_pixels != enable; + m_scroll_unit_is_pixels = enable; + return rv; + } + + constexpr auto scroll_unit_is_pixels() const noexcept { return m_scroll_unit_is_pixels; } + bool set_cursor_blink_mode(VteCursorBlinkMode mode) { return terminal()->set_cursor_blink_mode(vte::terminal::Terminal::CursorBlinkMode(mode)); } auto cursor_blink_mode() const noexcept { return VteCursorBlinkMode(terminal()->cursor_blink_mode()); } @@ -124,6 +535,9 @@ public: bool set_word_char_exceptions(std::optional stropt); auto word_char_exceptions() const noexcept { return m_word_char_exceptions ? m_word_char_exceptions.value().c_str() : nullptr; } + bool set_fallback_scrolling(bool set) { return terminal()->set_fallback_scrolling(set); } + bool fallback_scrolling() const noexcept { return terminal()->fallback_scrolling(); } + char const* encoding() const noexcept { return m_terminal->encoding(); } void emit_child_exited(int status) noexcept; @@ -136,8 +550,147 @@ public: void feed_child(std::string_view const& str) { terminal()->feed_child(str); } void feed_child_binary(std::string_view const& str) { terminal()->feed_child_binary(str); } + char *regex_match_check(vte::grid::column_t column, + vte::grid::row_t row, + int* tag) + { + return terminal()->regex_match_check(column, row, tag); + } + +#if VTE_GTK == 3 + + char* regex_match_check(GdkEvent* event, + int* tag) + { + return terminal()->regex_match_check(mouse_event_from_gdk(event), tag); + } + + + bool regex_match_check_extra(GdkEvent* event, + vte::base::Regex const** regexes, + size_t n_regexes, + uint32_t match_flags, + char** matches) + { + return terminal()->regex_match_check_extra(mouse_event_from_gdk(event), + regexes, n_regexes, match_flags, matches); + } + + char* hyperlink_check(GdkEvent* event) + { + return terminal()->hyperlink_check(mouse_event_from_gdk(event)); + } + +#elif VTE_GTK == 4 + + char* regex_match_check_at(double x, + double y, + int* tag) + { + return terminal()->regex_match_check_at(x, y, tag); + } + + bool regex_match_check_extra_at(double x, + double y, + vte::base::Regex const** regexes, + size_t n_regexes, + uint32_t match_flags, + char** matches) + { + return terminal()->regex_match_check_extra_at(x, y, + regexes, n_regexes, + match_flags, matches); + } + + char* hyperlink_check_at(double x, + double y) + { + return terminal()->hyperlink_check_at(x, y); + } + +#endif /* VTE_GTK */ + bool should_emit_signal(int id) noexcept; + constexpr auto xalign() const noexcept { return m_xalign; } + constexpr auto yalign() const noexcept { return m_yalign; } + constexpr auto xfill() const noexcept { return m_xfill; } + constexpr auto yfill() const noexcept { return m_yfill; } + + bool set_xalign(VteAlign align) noexcept + { + if (align == m_xalign) + return false; + + m_xalign = VteAlign(align); + gtk_widget_queue_allocate(gtk()); + return true; + } + + bool set_yalign(VteAlign align) noexcept + { + if (align == m_yalign) + return false; + + m_yalign = align; + gtk_widget_queue_allocate(gtk()); + return true; + } + + bool set_xfill(bool fill) noexcept + { + if (fill == m_xfill) + return false; + + m_xfill = fill; + gtk_widget_queue_allocate(gtk()); + return true; + } + + bool set_yfill(bool fill) noexcept + { + if (fill == m_yfill) + return false; + + m_yfill = fill; + gtk_widget_queue_allocate(gtk()); + return true; + } + + bool set_context_menu_model(vte::glib::RefPtr model) + { + if (model == m_context_menu_model) + return false; + + m_context_menu_model = std::move(model); + return true; + } + + GMenuModel* get_context_menu_model() const noexcept + { + return m_context_menu_model.get(); + } + + bool set_context_menu(vte::glib::RefPtr menu); + + void unset_context_menu(GtkWidget* widget, + bool deactivate, + bool notify = true); + +#if VTE_GTK == 4 + void unset_context_menu_on_idle(); + void context_menu_closed(GtkWidget* widget); +#endif + + GtkWidget* get_context_menu() const noexcept + { + return m_context_menu.get(); + } + + bool show_context_menu(EventContext const& context); + + void emit_setup_context_menu(EventContext const* context); + protected: enum class CursorType { @@ -147,23 +700,26 @@ protected: eHyperlink }; +#if VTE_GTK == 3 GdkWindow* event_window() const noexcept { return m_event_window; } +#endif bool realized() const noexcept { return gtk_widget_get_realized(m_widget); } - vte::glib::RefPtr create_cursor(GdkCursorType cursor_type) const noexcept; + vte::glib::RefPtr create_cursor(std::string const& name) const noexcept; void set_cursor(CursorType type) noexcept; void set_cursor(GdkCursor* cursor) noexcept; void set_cursor(Cursor const& cursor) noexcept; - bool im_filter_keypress(GdkEventKey* event) noexcept; + bool im_filter_keypress(KeyEvent const& event) noexcept; void im_focus_in() noexcept; void im_focus_out() noexcept; + void im_activate_osk() noexcept; void im_reset() noexcept { @@ -175,16 +731,49 @@ protected: void unset_pty() noexcept; + unsigned key_event_translate_ctrlkey(KeyEvent const& event) const noexcept; + + void notify_scroll_bounds_changed(bool value_changed = false); + void notify_scroll_value_changed(); + void notify_char_size_changed(int width, + int height); + public: // FIXMEchpe void im_preedit_changed() noexcept; + void vadjustment_value_changed(); private: + KeyEvent key_event_from_gdk(GdkEvent* event) const; +#if VTE_GTK == 3 + unsigned read_modifiers_from_gdk(GdkEvent* event) const noexcept; + MouseEvent mouse_event_from_gdk(GdkEvent* event) const /* throws */; + std::optional scroll_event_from_gdk(GdkEvent* event) const; +#elif VTE_GTK == 4 + MouseEvent mouse_event_from_gesture_click(EventBase::Type type, + GtkGestureClick* gesture, + int press_count, + double x, + double y) const /* throws */; +#endif + + void clipboard_request_received_cb(Clipboard const& clipboard, + std::string_view const& text); + void clipboard_request_failed_cb(Clipboard const& clipboard); + + std::optional clipboard_data_get_cb(Clipboard const& clipboard, + ClipboardFormat format); + void clipboard_data_clear_cb(Clipboard const& clipboard); + GtkWidget* m_widget; vte::terminal::Terminal* m_terminal; +#if VTE_GTK == 3 /* Event window */ GdkWindow *m_event_window; +#endif + + vte::glib::RefPtr m_settings{nullptr}; /* Cursors */ vte::glib::RefPtr m_default_cursor; @@ -198,12 +787,40 @@ private: /* PTY */ vte::glib::RefPtr m_pty; + /* Clipboard */ + std::shared_ptr m_clipboard; + std::shared_ptr m_primary_clipboard; + /* Misc */ std::optional m_word_char_exceptions{}; + vte::glib::RefPtr m_vadjustment{}; vte::glib::RefPtr m_hadjustment{}; - uint32_t m_hscroll_policy : 1; - uint32_t m_vscroll_policy : 1; + + unsigned m_hscroll_policy:1{GTK_SCROLL_NATURAL}; + unsigned m_vscroll_policy:1{GTK_SCROLL_NATURAL}; + unsigned m_scroll_unit_is_pixels:1{false}; + unsigned m_changing_scroll_position:1{false}; + + VteAlign m_xalign{VTE_ALIGN_START}; + VteAlign m_yalign{VTE_ALIGN_START}; + bool m_xfill{true}; + bool m_yfill{true}; + +#if VTE_GTK == 4 + GdkToplevelState m_root_surface_state{GdkToplevelState(0)}; + long m_root_realize_id{0}; + long m_root_unrealize_id{0}; + long m_root_surface_state_notify_id{0}; + bool m_inside_scrolled_window{false}; +#endif /* VTE_GTK == 4 */ + + vte::glib::RefPtr m_context_menu_model; + vte::glib::RefPtr m_context_menu; + vte::glib::RefPtr m_menu_showing; +#if VTE_GTK == 4 + unsigned m_context_menu_unset_on_idle_source{0}; +#endif }; } // namespace platform diff --git a/src/xticker.c b/src/xticker.c index 6c2c805..710c06d 100644 --- a/src/xticker.c +++ b/src/xticker.c @@ -1,19 +1,18 @@ /* * Copyright (C) 2003 Red Hat, Inc. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . */ #include diff --git a/vte.doap b/vte.doap index 3858c2e..f246b2d 100644 --- a/vte.doap +++ b/vte.doap @@ -8,10 +8,10 @@ vte terminal widget Terminal emulation library - + + rdf:resource="https://download.gnome.org/sources/vte"/>