Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package vte for openSUSE:Factory checked in at 2023-03-24 15:17:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/vte (Old) and /work/SRC/openSUSE:Factory/.vte.new.31432 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "vte" Fri Mar 24 15:17:30 2023 rev:144 rq:1073209 version:0.72.0 Changes: -------- --- /work/SRC/openSUSE:Factory/vte/vte.changes 2023-02-15 13:39:57.322599662 +0100 +++ /work/SRC/openSUSE:Factory/.vte.new.31432/vte.changes 2023-03-24 15:17:42.098035795 +0100 @@ -1,0 +2,65 @@ +Mon Mar 20 09:12:45 UTC 2023 - bjorn....@gmail.com + +- Update to version 0.72.0: + + fonts: + - Keep the PangoLayout unchanged + - Keep layout text available for cairo + +------------------------------------------------------------------- +Mon Mar 06 17:01:33 UTC 2023 - bjorn....@gmail.com + +- Update to version 0.71.99: + + pty: Do not typecast to GSpawnFlags + + fonts: Remove unnecessary context change call + + widget: + - Fix a deprecation warning + - gtk4: Hint and quantize font metrics + - Fix introspection API + - Don't consume right clicks on gtk4 + +------------------------------------------------------------------- +Sun Feb 26 15:13:34 UTC 2023 - bjorn....@gmail.com + +- Update to version 0.71.92: + + all: Remove SIXEL support from stable branch + + app: + - Disconnect signal handlers on dispose + - Filter unwanted environment variables + + build: + - Add define for darwin + - Add define for openbsd + - Fix netbsd define + - Print warning on unstable release + - Update meson req version + + lib: + - Add gresources to vte/gtk4 + - Fix spawning on netbsd + + missing: Add better fdwalk implementation for darawin + + parser: + - Add more OSC codes + - modes: Mark modes that should not be reset by DECSTR + - Update list of known OSC codes + + pty: + - netbsd fix + - Remove useless setenv calls + + widget: + - Add API to get text as HTML + - clipboard: Add missing else + - Clipboard fixes for gtk4 + - Defer alignment API to next cycle + - Ensure the ringview is updated before converting coordinates + - Fix value type check + - Fix Widget::regex_match_check_at() + - gtk4: + . Don't grab the focus on focus-in + . Only notify terminal when focused + . Translate control+key events when using multiple layouts + - Implement clipboard for gtk4 + - Modernise HTML output + - Offer text/html also in UTF-8 format + - Use correct end row for getting the selected text + - Use correct view coordinates + + Updated translations. +- Rebase vte-enable-build-flag-pie.patch with quilt. + +------------------------------------------------------------------- Old: ---- vte-0.70.3.obscpio New: ---- vte-0.72.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ vte.spec ++++++ --- /var/tmp/diff_new_pack.nK2xWJ/_old 2023-03-24 15:17:43.838045083 +0100 +++ /var/tmp/diff_new_pack.nK2xWJ/_new 2023-03-24 15:17:43.842045105 +0100 @@ -27,7 +27,7 @@ %bcond_with glade_support Name: vte -Version: 0.70.3 +Version: 0.72.0 Release: 0 Summary: Terminal Emulator Library License: CC-BY-4.0 AND LGPL-3.0-or-later AND GPL-3.0-or-later AND MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.nK2xWJ/_old 2023-03-24 15:17:43.866045232 +0100 +++ /var/tmp/diff_new_pack.nK2xWJ/_new 2023-03-24 15:17:43.870045254 +0100 @@ -5,7 +5,7 @@ <param name="scm">git</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">enable</param> - <param name="revision">refs/tags/0.70.3</param> + <param name="revision">refs/tags/0.72.0</param> <param name="exclude">doc/vttest.*</param> </service> <service name="tar" mode="buildtime" /> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.nK2xWJ/_old 2023-03-24 15:17:43.890045361 +0100 +++ /var/tmp/diff_new_pack.nK2xWJ/_new 2023-03-24 15:17:43.890045361 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://gitlab.gnome.org/GNOME/vte.git</param> - <param name="changesrevision">177c96f2b7e58ba90a7b5738089e8a97094c84d5</param></service></servicedata> + <param name="changesrevision">164c0f1eb5165786e0addfe5317cf6de3061ddf9</param></service></servicedata> (No newline at EOF) ++++++ vte-0.70.3.obscpio -> vte-0.72.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/meson.build new/vte-0.72.0/meson.build --- old/vte-0.70.3/meson.build 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/meson.build 2023-03-11 11:19:11.000000000 +0100 @@ -17,14 +17,14 @@ project( 'vte', ['c', 'cpp'], - version: '0.70.3', + version: '0.72.0', license: ['LGPL-3.0-or-later', 'GPL-3.0-or-later'], default_options: [ 'buildtype=release', 'warning_level=0', 'b_ndebug=false', ], - meson_version: '>= 0.51.0', + meson_version: '>= 0.60.0', ) # Compiler requirements @@ -49,7 +49,7 @@ gio_req_version = '2.52.0' glib_req_version = '2.52.0' glib_min_req_version = '2.52' -glib_max_allowed_version = '2.52' +glib_max_allowed_version = '2.60' gnutls_req_version = '3.2.7' icu_uc_req_version = '4.8' pango_req_version = '1.22.0' @@ -683,13 +683,9 @@ # Dist -# Meson bug https://github.com/mesonbuild/meson/issues/8440 breaks using vte -# as subproject; see vte#345. -if meson.version().version_compare('>= 0.58.0') or not meson.is_subproject() - meson.add_dist_script( - find_program('meson_changelog.sh'), - ) -endif +meson.add_dist_script( + find_program('meson_changelog.sh'), +) # Simple compat Makefile @@ -743,7 +739,15 @@ # Check stable/unstable status if (vte_minor_version % 2) != 0 - warning('This is an unstable development release!\n') + 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/po/be.po new/vte-0.72.0/po/be.po --- old/vte-0.70.3/po/be.po 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/po/be.po 2023-03-11 11:19:11.000000000 +0100 @@ -6,8 +6,8 @@ msgstr "" "Project-Id-Version: vte.master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2022-10-21 16:29+0000\n" -"PO-Revision-Date: 2022-10-23 21:12+0300\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 <i18n-bel-googlegroups.com>\n" "Language: be\n" @@ -16,43 +16,43 @@ "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.0\n" -#: src/vte.cc:7628 +#: src/vte.cc:7763 msgid "WARNING" msgstr "ÐÐÐЯРÐÐÐÐÐÐÐ" -#: src/vte.cc:7630 +#: src/vte.cc:7765 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS не ÑклÑÑанÑ; данÑÑ Ð±ÑдÑÑÑ Ð·Ð°Ð¿ÑÑÐ°Ð½Ñ Ð½Ð° дÑÑк незаÑÑÑÑаванÑмÑ!" -#: src/spawn.cc:124 +#: src/spawn.cc:111 #, c-format msgid "Failed to set pipe nonblocking: %s" msgstr "Ðе ÑдалоÑÑ Ð½Ð°Ð»Ð°Ð´Ð·ÑÑÑ ÐºÐ°Ð½Ð°Ð» без блакÑÑаваннÑ: %s" -#: src/spawn.cc:169 +#: src/spawn.cc:155 #, c-format msgid "poll error: %s" msgstr "памÑлка апÑÑаннÑ: %s" -#: src/spawn.cc:176 +#: src/spawn.cc:161 msgid "Operation timed out" msgstr "СконÑÑÑÑÑ ÑÑÑмÑн ÑÐ°ÐºÐ°Ð½Ð½Ñ Ð°Ð¿ÐµÑаÑÑÑ" -#: src/spawn.cc:186 +#: src/spawn.cc:171 msgid "Operation was cancelled" msgstr "ÐпеÑаÑÑÑ ÑкаÑавана" -#: src/spawn.cc:204 +#: src/spawn.cc:189 #, c-format msgid "Failed to read from child pipe (%s)" -msgstr "Ðе ÑдалоÑÑ Ð¿ÑаÑÑÑаÑÑ Ð´Ð°Ð½ÑÑ Ð· канала-наÑÑадка (%s)" +msgstr "Ðе ÑдалоÑÑ Ð¿ÑаÑÑÑаÑÑ Ð´Ð°Ð½ÑÑ Ð· канала наÑÑадка (%s)" -#: src/spawn.cc:639 +#: src/spawn.cc:576 #, c-format msgid "Failed to change to directory â%sâ: %s" msgstr "Ðе ÑдалоÑÑ Ð·Ð¼ÑнÑÑÑ Ð½Ð° каÑалог «%s»: %s" -#: src/spawn.cc:708 +#: src/spawn.cc:645 #, c-format msgid "Failed to execute child process â%sâ: " msgstr "Ðе ÑдалоÑÑ Ð²ÑканаÑÑ Ð¿ÑаÑÑÑ-наÑÑадак «%s»: " diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/po/tr.po new/vte-0.72.0/po/tr.po --- old/vte-0.70.3/po/tr.po 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/po/tr.po 2023-03-11 11:19:11.000000000 +0100 @@ -14,7 +14,7 @@ msgstr "" "Project-Id-Version: vte master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/vte/issues\n" -"POT-Creation-Date: 2022-08-06 12:19+0000\n" +"POT-Creation-Date: 2022-07-13 19:14+0000\n" "PO-Revision-Date: 2020-04-28 15:36+0300\n" "Last-Translator: Emin Tufan Ãetin <etce...@gmail.com>\n" "Language-Team: Türkçe <gnome-t...@gnome.org>\n" @@ -25,11 +25,11 @@ "X-Generator: Poedit 2.3\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: src/vte.cc:7643 +#: src/vte.cc:7688 msgid "WARNING" msgstr "UYARI" -#: src/vte.cc:7645 +#: src/vte.cc:7690 msgid "GnuTLS not enabled; data will be written to disk unencrypted!" msgstr "GnuTLS etkin deÄil; veriler diske ÅifrelenmemiÅ olarak yazılacak!" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/src/cairo-glue.hh new/vte-0.72.0/src/cairo-glue.hh --- old/vte-0.70.3/src/cairo-glue.hh 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/src/cairo-glue.hh 2023-03-11 11:19:11.000000000 +0100 @@ -23,6 +23,7 @@ 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); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/src/clipboard-gtk.cc new/vte-0.72.0/src/clipboard-gtk.cc --- old/vte-0.70.3/src/clipboard-gtk.cc 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/src/clipboard-gtk.cc 2023-03-11 11:19:11.000000000 +0100 @@ -28,6 +28,7 @@ #include <utility> #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 { @@ -112,16 +113,23 @@ break; case ClipboardFormat::HTML: { - auto [html, len] = text_to_utf16_mozilla(*str); + auto const type = gtk_selection_data_get_data_type(data); - // This makes yet another copy of the data... :( - if (html) { - gtk_selection_data_set(data, - gtk_selection_data_get_target(data), - // or gdk_atom_intern_static_string("text/html"), - 16, - reinterpret_cast<guchar const*>(html.get()), - len); + if (type == gdk_atom_intern_static_string(MIME_TYPE_TEXT_HTML_UTF8)) { + // This makes yet another copy of the data... :( + gtk_selection_data_set_text(data, str->data(), str->size()); + } else if (type == 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, + gtk_selection_data_get_target(data), + // or gdk_atom_intern_static_string("text/html"), + 16, + reinterpret_cast<guchar const*>(html.get()), + len); + } } break; } @@ -195,7 +203,11 @@ gtk_target_list_add_text_targets(list.get(), vte::to_integral(ClipboardFormat::TEXT)); gtk_target_list_add(list.get(), - gdk_atom_intern_static_string("text/html"), + 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)); @@ -301,7 +313,9 @@ 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) @@ -324,15 +338,21 @@ } case ClipboardFormat::HTML: { - auto [html, len] = m_offer->text_to_utf16_mozilla(*str); - - // This makes yet another copy of the data... :( - 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"); + 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; @@ -411,6 +431,8 @@ 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: @@ -426,7 +448,8 @@ { if (mime_type == MIME_TYPE_TEXT_PLAIN_UTF8) return ClipboardFormat::TEXT; - else if (mime_type == MIME_TYPE_TEXT_HTML_UTF16) + else if (mime_type == MIME_TYPE_TEXT_HTML_UTF8 || + mime_type == MIME_TYPE_TEXT_HTML_UTF16) return ClipboardFormat::HTML; else return ClipboardFormat::INVALID; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/src/fonts-pangocairo.cc new/vte-0.72.0/src/fonts-pangocairo.cc --- old/vte-0.70.3/src/fonts-pangocairo.cc 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/src/fonts-pangocairo.cc 2023-03-11 11:19:11.000000000 +0100 @@ -20,6 +20,7 @@ #include "fonts-pangocairo.hh" +#include "cairo-glue.hh" #include "debug.h" #include "vtedefines.hh" @@ -365,15 +366,36 @@ 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. - */ - if (!pango_cairo_context_get_font_options(context.get())) { - cairo_font_options_t *font_options; - - font_options = cairo_font_options_create (); - pango_cairo_context_set_font_options(context.get(), font_options); - cairo_font_options_destroy (font_options); + // 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. + { + auto font_options = vte::take_freeable(cairo_font_options_create()); +#if VTE_GTK == 4 + cairo_font_options_set_hint_metrics(font_options.get(), + CAIRO_HINT_METRICS_ON); +#endif /* VTE_GTK == 4 */ + + 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.get()); + pango_cairo_context_set_font_options(context.get(), + merged_font_options.get()); + } else { + // Make sure our contexts have a font_options set. We use + // this invariant in our context hash and equal functions. + pango_cairo_context_set_font_options(context.get(), + font_options.get()); + } + +#if VTE_GTK == 4 + pango_context_set_round_glyph_positions (context.get(), true); +#endif /* VTE_GTK == 4 */ } if (G_UNLIKELY(s_font_info_for_context == nullptr)) @@ -452,11 +474,20 @@ { 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); - /* we hold a manual reference on layout. pango currently - * doesn't work if line->layout is NULL. ugh! */ - pango_layout_set_text(m_layout.get(), "", -1); /* make layout disassociate from the line */ - ufi->using_pango_layout_line.line->layout = (PangoLayout *)g_object_ref(m_layout.get()); + + 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; @@ -489,8 +520,7 @@ } } - /* release internal layout resources */ - pango_layout_set_text(m_layout.get(), "", -1); + // Don't reset m_layout here; it'll get reset anyway when we next use it. #ifdef VTE_DEBUG m_coverage_count[0]++; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/src/glib-glue.hh new/vte-0.72.0/src/glib-glue.hh --- old/vte-0.70.3/src/glib-glue.hh 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/src/glib-glue.hh 2023-03-11 11:19:11.000000000 +0100 @@ -278,8 +278,24 @@ namespace vte { +VTE_DECLARE_FREEABLE(GArray, g_array_unref); VTE_DECLARE_FREEABLE(GBytes, g_bytes_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<GString> str, + gsize* length = nullptr) noexcept +{ + if (length) + *length = str.get()->len; + + return g_string_free(str.release(), false); +} + +} // namespace vte::glib diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/src/meson.build new/vte-0.72.0/src/meson.build --- old/vte-0.70.3/src/meson.build 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/src/meson.build 2023-03-11 11:19:11.000000000 +0100 @@ -325,7 +325,18 @@ endif if get_option('gtk4') - libvte_gtk4_sources = libvte_common_sources + libvte_gtk4_public_headers + libvte_gtk4_enum_sources + graphene_glue_sources + + 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_cppflags = libvte_common_cppflags + gtk4_version_cppflags + ['-DVTE_GTK=4',] libvte_gtk4_deps = libvte_common_deps + [gtk4_dep,] libvte_gtk4_public_deps = libvte_common_public_deps + [gtk4_dep,] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/src/modes.py new/vte-0.72.0/src/modes.py --- old/vte-0.70.3/src/modes.py 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/src/modes.py 2023-03-11 11:19:11.000000000 +0100 @@ -92,6 +92,7 @@ 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 @@ -226,7 +227,7 @@ # References: ECMA-48 § F.5.2 Removed! # VT525 # - mode_ECMA('LNM', 20, default=False), + mode_ECMA('LNM', 20, default=False, preserve_decstr=True), mode_ECMA('GRCM', 21, default=True), @@ -369,14 +370,14 @@ # 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 + # 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, flags=Flags.WRITABLE), + 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. @@ -407,7 +408,7 @@ # # References: VT525 # - mode_WHAT('DEC_REVERSE_IMAGE', 5, default=False, flags=Flags.WRITABLE), + 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. @@ -442,7 +443,7 @@ # # Probably not worth implementing. # - mode_WHAT('DECARM', 8, default=True), + 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), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/src/parser-osc.hh new/vte-0.72.0/src/parser-osc.hh --- old/vte-0.70.3/src/parser-osc.hh 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/src/parser-osc.hh 2023-03-11 11:19:11.000000000 +0100 @@ -23,6 +23,8 @@ _VTE_OSC(EMACS_51, 51) +_VTE_OSC(FOOT_FLASH, 555) + _VTE_OSC(ITERM2_GROWL, 9) _VTE_OSC(ITERM2_133, 133) _VTE_OSC(ITERM2_1337, 1337) @@ -84,6 +86,9 @@ _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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/src/pty.cc new/vte-0.72.0/src/pty.cc --- old/vte-0.70.3/src/pty.cc 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/src/pty.cc 2023-03-11 11:19:11.000000000 +0100 @@ -253,15 +253,6 @@ peer_fd != STDERR_FILENO) { close(peer_fd); } - - /* 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); } /* @@ -422,6 +413,15 @@ #ifndef __linux__ /* Other kernels may not support CLOEXEC or NONBLOCK above, so try to fall back */ bool need_cloexec = false, need_nonblocking = false; + +#ifdef __NetBSD__ + // NetBSD is a special case: 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 always need to manually apply these flags there. See issue #2575. + need_cloexec = need_nonblocking = true; +#else + if (!fd && errno == EINVAL) { /* Try without NONBLOCK and apply the flag afterward */ need_nonblocking = true; @@ -432,6 +432,7 @@ fd = posix_openpt(O_RDWR | O_NOCTTY); } } +#endif /* __NetBSD__ */ #endif /* !linux */ if (!fd) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/src/vte/vteterminal.h new/vte-0.72.0/src/vte/vteterminal.h --- old/vte-0.70.3/src/vte/vteterminal.h 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/src/vte/vteterminal.h 2023-03-11 11:19:11.000000000 +0100 @@ -360,7 +360,12 @@ _VTE_PUBLIC char* vte_terminal_get_text_selected(VteTerminal* terminal, - VteFormat format) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + 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 @@ -414,6 +419,16 @@ VteSelectionFunc is_selected, gpointer user_data, GArray *attributes) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1) G_GNUC_MALLOC; + +_VTE_PUBLIC +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, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/src/vte-gtk4.gresource.xml new/vte-0.72.0/src/vte-gtk4.gresource.xml --- old/vte-0.70.3/src/vte-gtk4.gresource.xml 1970-01-01 01:00:00.000000000 +0100 +++ new/vte-0.72.0/src/vte-gtk4.gresource.xml 2023-03-11 11:19:11.000000000 +0100 @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright © 2022 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 <https://www.gnu.org/licenses/>. +--> +<gresources> + <gresource prefix="/org/gnome/vte"> + </gresource> +</gresources> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/src/vte.cc new/vte-0.72.0/src/vte.cc --- old/vte-0.70.3/src/vte.cc 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/src/vte.cc 2023-03-11 11:19:11.000000000 +0100 @@ -6827,6 +6827,16 @@ break; } +#if VTE_GTK == 4 + if (!handled && + ((event.button() == vte::platform::MouseEvent::Button::eRIGHT) || + !(event.modifiers() & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK)))) { + _vte_debug_print(VTE_DEBUG_EVENTS, "Showing context menu\n"); + // FIXMEgtk4 context menu + handled = true; + } +#endif /* VTE_GTK == 4 */ + /* Save the pointer state for later use. */ if (event.button_value() >= 1 && event.button_value() <= 3) m_mouse_pressed_buttons |= (1 << (event.button_value() - 1)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/src/vtegtk.cc new/vte-0.72.0/src/vtegtk.cc --- old/vte-0.70.3/src/vtegtk.cc 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/src/vtegtk.cc 2023-03-11 11:19:11.000000000 +0100 @@ -95,6 +95,18 @@ GtkStyleProvider *style_provider; }; +template<> +constexpr bool check_enum_value<VteFormat>(VteFormat value) noexcept +{ + switch (value) { + case VTE_FORMAT_TEXT: + case VTE_FORMAT_HTML: + return true; + default: + return false; + } +} + #if VTE_GTK == 4 static void @@ -2679,7 +2691,7 @@ 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::platform::ClipboardType::CLIPBOARD, clipboard_format_from_vte(format)); @@ -4306,8 +4318,9 @@ * This method is unaware of BiDi. The columns passed in @start_col and @end_row, * and 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.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. * * Returns: (transfer full) (nullable): a newly allocated text string, or %NULL. */ @@ -4322,17 +4335,79 @@ GArray *attributes) noexcept try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL); warn_if_callback(is_selected); warn_if_attributes(attributes); - auto text = IMPL(terminal)->get_text(start_row, start_col, - end_row, end_col, - false /* block */, - true /* wrap */, - attributes); - if (text == nullptr) + 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: + * @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) (default 0) (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 +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; + + auto attributes = vte::Freeable<GArray>{}; + if (format == VTE_FORMAT_HTML) + attributes = vte::take_freeable(g_array_new(false, + true, + sizeof(struct _VteCharAttributes))); + + auto const impl = IMPL(terminal); + auto text = vte::take_freeable(impl->get_text(start_row, + start_col, + end_row, + end_col, + false, + true, + attributes.get())); + if (!text) + return nullptr; + + if (format == VTE_FORMAT_HTML) + text = vte::take_freeable(impl->attributes_to_html(text.get(), + attributes.get())); + + return vte::glib::release_to_string(std::move(text), length); } catch (...) { @@ -5679,7 +5754,7 @@ * @format: the #VteFormat to use * * Gets the currently selected text in the format specified by @format. - * Note that currently, only %VTE_FORMAT_TEXT is supported. + * Since 0.72, this function also supports %VTE_FORMAT_HTML format.xg * * 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 * @@ -5690,20 +5765,47 @@ VteFormat format) noexcept try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr); + return vte_terminal_get_text_selected_full(terminal, + format, + nullptr); +} +catch (...) +{ + vte::log_exception(); + return nullptr; +} - if (format != VTE_FORMAT_TEXT) - return nullptr; +/** + * vte_terminal_get_text_selected_full: + * @terminal: a #VteTerminal + * @format: the #VteFormat to use + * @length: (optional) (default 0) (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 selection = IMPL(terminal)->m_selection_resolved; - return vte_terminal_get_text_range(terminal, - selection.start_row(), - selection.start_column(), - selection.end_row(), - selection.end_column(), - nullptr, - nullptr, - nullptr); + return vte_terminal_get_text_range_format(terminal, + format, + selection.start_row(), + selection.start_column(), + selection.end_row(), + selection.end_column(), + length); } catch (...) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vte-0.70.3/src/vtepty.cc new/vte-0.72.0/src/vtepty.cc --- old/vte-0.70.3/src/vtepty.cc 2023-02-11 19:20:05.000000000 +0100 +++ new/vte-0.72.0/src/vtepty.cc 2023-03-11 11:19:11.000000000 +0100 @@ -574,18 +574,18 @@ static constexpr inline auto all_spawn_flags() noexcept { - return GSpawnFlags(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); + 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 constexpr inline auto ++++++ vte-enable-build-flag-pie.patch ++++++ --- /var/tmp/diff_new_pack.nK2xWJ/_old 2023-03-24 15:17:44.130046641 +0100 +++ /var/tmp/diff_new_pack.nK2xWJ/_new 2023-03-24 15:17:44.134046663 +0100 @@ -1,13 +1,13 @@ -Index: vte-0.69.92/meson.build +Index: vte-0.71.92/meson.build =================================================================== ---- vte-0.69.92.orig/meson.build -+++ vte-0.69.92/meson.build +--- vte-0.71.92.orig/meson.build ++++ vte-0.71.92/meson.build @@ -23,6 +23,7 @@ project( 'buildtype=release', 'warning_level=0', 'b_ndebug=false', + 'b_pie=true', ], - meson_version: '>= 0.51.0', + meson_version: '>= 0.60.0', ) ++++++ vte.obsinfo ++++++ --- /var/tmp/diff_new_pack.nK2xWJ/_old 2023-03-24 15:17:44.158046791 +0100 +++ /var/tmp/diff_new_pack.nK2xWJ/_new 2023-03-24 15:17:44.162046813 +0100 @@ -1,5 +1,5 @@ name: vte -version: 0.70.3 -mtime: 1676139605 -commit: 177c96f2b7e58ba90a7b5738089e8a97094c84d5 +version: 0.72.0 +mtime: 1678529951 +commit: 164c0f1eb5165786e0addfe5317cf6de3061ddf9