mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-10 04:27:45 -05:00
Merge branch 'bad-locale'
This commit is contained in:
commit
69ec74a605
2 changed files with 54 additions and 3 deletions
|
|
@ -47,6 +47,7 @@
|
|||
* [SGR-Pixels (1016) mouse extended coordinates](https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-Extended-coordinates) is now supported
|
||||
(https://codeberg.org/dnkl/foot/issues/762).
|
||||
|
||||
|
||||
### Changed
|
||||
|
||||
* PaperColorDark and PaperColorLight themes renamed to
|
||||
|
|
@ -58,6 +59,10 @@
|
|||
* The width of the block cursor’s outline in an unfocused window is
|
||||
now scaled by the output scaling factor (“desktop
|
||||
scaling”). Previously, it was always 1px.
|
||||
* Foot will now try to change the locale to either “C.UTF-8” or
|
||||
“en_US.UTF-8” if started with a non-UTF8 locale. If this fails, foot
|
||||
will start, but only to display a window with an error (user’s shell
|
||||
is not executed).
|
||||
|
||||
|
||||
### Deprecated
|
||||
|
|
|
|||
52
main.c
52
main.c
|
|
@ -424,10 +424,48 @@ main(int argc, char *const *argv)
|
|||
LOG_ERR("setlocale() failed");
|
||||
return ret;
|
||||
}
|
||||
|
||||
LOG_INFO("locale: %s", locale);
|
||||
if (!locale_is_utf8()) {
|
||||
LOG_ERR("locale is not UTF-8");
|
||||
return ret;
|
||||
|
||||
bool bad_locale = !locale_is_utf8();
|
||||
if (bad_locale) {
|
||||
static const char fallback_locales[][12] = {
|
||||
"C.UTF-8",
|
||||
"en_US.UTF-8",
|
||||
};
|
||||
|
||||
/*
|
||||
* Try to force an UTF-8 locale. If we succeed, launch the
|
||||
* user’s shell as usual, but add a user-notification saying
|
||||
* the locale has been changed.
|
||||
*/
|
||||
for (size_t i = 0; i < ALEN(fallback_locales); i++) {
|
||||
const char *const fallback_locale = fallback_locales[i];
|
||||
|
||||
if (setlocale(LC_CTYPE, fallback_locale) != NULL) {
|
||||
LOG_WARN("locale '%s' is not UTF-8, using '%s' instead",
|
||||
locale, fallback_locale);
|
||||
|
||||
user_notification_add_fmt(
|
||||
&user_notifications, USER_NOTIFICATION_WARNING,
|
||||
"locale '%s' is not UTF-8, using '%s' instead",
|
||||
locale, fallback_locale);
|
||||
|
||||
bad_locale = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (bad_locale) {
|
||||
LOG_ERR("locale '%s' is not UTF-8, "
|
||||
"and failed to enable a fallback locale", locale);
|
||||
|
||||
user_notification_add_fmt(
|
||||
&user_notifications, USER_NOTIFICATION_ERROR,
|
||||
"locale '%s' is not UTF-8, "
|
||||
"and failed to enable a fallback locale",
|
||||
locale);
|
||||
}
|
||||
}
|
||||
|
||||
struct config conf = {NULL};
|
||||
|
|
@ -502,6 +540,14 @@ main(int argc, char *const *argv)
|
|||
conf.fonts[0].arr[0].pattern, &conf.notifications);
|
||||
}
|
||||
|
||||
|
||||
if (bad_locale) {
|
||||
static char *const bad_locale_fake_argv[] = {"/bin/sh", "-c", "", NULL};
|
||||
argc = 1;
|
||||
argv = bad_locale_fake_argv;
|
||||
conf.hold_at_exit = true;
|
||||
}
|
||||
|
||||
struct fdm *fdm = NULL;
|
||||
struct reaper *reaper = NULL;
|
||||
struct wayland *wayl = NULL;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue