About deprecating exo-string fucntions in favor of glib functions or moving it to libxfce4util
I investigated on exo-string.{c,h} to weed out unnecessary functions and to move useful ones to libxfce4util/ui. These are the list of the functions/macros:
**Unused**
* ~~`exo_str_elide_underscores()`:~~
~~Simplified copy of [`strip_ulines()`](https://gitlab.gnome.org/GNOME/gtk/-/blob/main/gtk/gtklabel.c#L3283) from GTK. Since the original is a static function this function cannot be replaced.~~
* ~~`exo_strndupv()`:~~
~~It is a `n` version of `g_strdupv()` and has no actual counterpart in glib.~~
**Deprecated in favor of glib functions**
* ~~`exo_strdup_strftime ()`: Used in `thunar`~~
~~Can be replaced with more feature-rich function [`g_date_time_format()`](https://gitlab.gnome.org/GNOME/glib/-/blob/2.66.0/glib/gdatetime.c#L3432). Might need a converting effort though.~~
* `exo_str_is_equal()`: Used in ~~`thunar`~~, ~~`thunar-media-tags-plugin`~~, `xfce4-places-plugin`(panel-plugins/xfce4-places-plugin!8), ~~`exo-die`~~
Easily replaced with [`g_strcmp0()`](https://gitlab.gnome.org/GNOME/glib/-/blob/main/glib/gtestutils.c#L3411).
* ~~`exo_str_looks_like_an_uri()`: Used in `thunar`, `exo-open`~~
~~This function is a bit flawed: it only checks the scheme (ex: http, ftp, ...) part of the string. `g_uri_is_valid ()` (Available since Glib 2.66 but Xfce 4.18 will depend on 2.66 anyways) does it properly but its correct behavior may cause some problem if we are very unlucky.~~
* ~~`exo_str_is_flag()`: Used in `xfce4-settings`~~
~~== `g_str_has_prefix (str, "-");`~~
**Migrated to libxfce4util** (libxfce4util!24)
~~* `exo_str_replace ()`: Used in `thunar`, `xfce4-settings`~~
~~The closest function is `g_string_replace ()` which is added since Glib 2.68 so this function will survive for a moment.~~
* (Macro)`exo_str_is_empty ()`: Used in ~~`xfce4-panel`~~, ~~`xfce4-mailwatch-plugin`~~, ~~`thunar`~~, ~~`xfce4-settings`~~, ~~`xfce4-whiskermenu-plugin`~~(fallback), ~~`exo-icon-chooser-dialog.c`, `exo-die`~~
`#define exo_str_is_empty(string) ((string) == NULL || *(string) == '\0')`
* ~~(Macro)`I_()`: `xfdesktop` (redefines the same macro), `thunar`, `libxfce4ui`, `xfconf` (redefines the same macro), `mousepad` (redefines the same macro), `xfce4-settings`, `xfce4-terminal` (redefines the same macro), `exo`~~
~~`#define I_(string) (g_intern_static_string ((string)))`~~
issue