mirror of
https://github.com/systemd/systemd
synced 2024-10-15 04:24:19 +00:00
locale-util: add logic to output smiley emojis at various happiness levels
This commit is contained in:
parent
b2ac2b01c8
commit
5f1b0cc6d0
|
@ -46,9 +46,14 @@ All tools:
|
|||
are understood, too (us, ms, s, min, h, d, w, month, y). If it is not set or set
|
||||
to 0, then the built-in default is used.
|
||||
|
||||
* `$SYSTEMD_MEMPOOL=0` — if set the internal memory caching logic employed by
|
||||
* `$SYSTEMD_MEMPOOL=0` — if set, the internal memory caching logic employed by
|
||||
hash tables is turned off, and libc malloc() is used for all allocations.
|
||||
|
||||
* `$SYSTEMD_EMOJI=0` — if set, tools such as "systemd-analyze security" will
|
||||
not output graphical smiley emojis, but ASCII alternatives instead. Note that
|
||||
this only controls use of Unicode emoji glyphs, and has no effect on other
|
||||
Unicode glyphs.
|
||||
|
||||
systemctl:
|
||||
|
||||
* `$SYSTEMCTL_FORCE_BUS=1` — if set, do not connect to PID1's private D-Bus
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "def.h"
|
||||
#include "dirent-util.h"
|
||||
#include "env-util.h"
|
||||
#include "fd-util.h"
|
||||
#include "hashmap.h"
|
||||
#include "locale-util.h"
|
||||
|
@ -347,6 +348,24 @@ bool keymap_is_valid(const char *name) {
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool emoji_enabled(void) {
|
||||
static int cached_emoji_enabled = -1;
|
||||
|
||||
if (cached_emoji_enabled < 0) {
|
||||
int val;
|
||||
|
||||
val = getenv_bool("SYSTEMD_EMOJI");
|
||||
if (val < 0)
|
||||
cached_emoji_enabled =
|
||||
is_locale_utf8() &&
|
||||
!STRPTR_IN_SET(getenv("TERM"), "dumb", "linux");
|
||||
else
|
||||
cached_emoji_enabled = val;
|
||||
}
|
||||
|
||||
return cached_emoji_enabled;
|
||||
}
|
||||
|
||||
const char *special_glyph(SpecialGlyph code) {
|
||||
|
||||
/* A list of a number of interesting unicode glyphs we can use to decorate our output. It's probably wise to be
|
||||
|
@ -372,6 +391,13 @@ const char *special_glyph(SpecialGlyph code) {
|
|||
[MU] = "u",
|
||||
[CHECK_MARK] = "+",
|
||||
[CROSS_MARK] = "-",
|
||||
[ECSTATIC_SMILEY] = ":-]",
|
||||
[HAPPY_SMILEY] = ":-}",
|
||||
[SLIGHTLY_HAPPY_SMILEY] = ":-)",
|
||||
[NEUTRAL_SMILEY] = ":-|",
|
||||
[SLIGHTLY_UNHAPPY_SMILEY] = ":-(",
|
||||
[UNHAPPY_SMILEY] = ":-{️",
|
||||
[DEPRESSED_SMILEY] = ":-[",
|
||||
},
|
||||
|
||||
/* UTF-8 */
|
||||
|
@ -389,10 +415,19 @@ const char *special_glyph(SpecialGlyph code) {
|
|||
[MU] = "\316\274", /* μ */
|
||||
[CHECK_MARK] = "\342\234\223", /* ✓ */
|
||||
[CROSS_MARK] = "\342\234\227", /* ✗ */
|
||||
[ECSTATIC_SMILEY] = "\360\237\230\207", /* 😇 */
|
||||
[HAPPY_SMILEY] = "\360\237\230\200", /* 😀 */
|
||||
[SLIGHTLY_HAPPY_SMILEY] = "\360\237\231\202", /* 🙂 */
|
||||
[NEUTRAL_SMILEY] = "\360\237\230\220", /* 😐 */
|
||||
[SLIGHTLY_UNHAPPY_SMILEY] = "\360\237\231\201", /* 🙁 */
|
||||
[UNHAPPY_SMILEY] = "\360\237\230\250", /* 😨️️ */
|
||||
[DEPRESSED_SMILEY] = "\360\237\244\242", /* 🤢 */
|
||||
},
|
||||
};
|
||||
|
||||
return draw_table[is_locale_utf8()][code];
|
||||
assert(code < _SPECIAL_GLYPH_MAX);
|
||||
|
||||
return draw_table[code >= _SPECIAL_GLYPH_FIRST_SMILEY ? emoji_enabled() : is_locale_utf8()][code];
|
||||
}
|
||||
|
||||
void locale_variables_free(char*l[_VARIABLE_LC_MAX]) {
|
||||
|
|
|
@ -52,6 +52,14 @@ typedef enum {
|
|||
MU,
|
||||
CHECK_MARK,
|
||||
CROSS_MARK,
|
||||
_SPECIAL_GLYPH_FIRST_SMILEY,
|
||||
ECSTATIC_SMILEY = _SPECIAL_GLYPH_FIRST_SMILEY,
|
||||
HAPPY_SMILEY,
|
||||
SLIGHTLY_HAPPY_SMILEY,
|
||||
NEUTRAL_SMILEY,
|
||||
SLIGHTLY_UNHAPPY_SMILEY,
|
||||
UNHAPPY_SMILEY,
|
||||
DEPRESSED_SMILEY,
|
||||
_SPECIAL_GLYPH_MAX
|
||||
} SpecialGlyph;
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ static void test_keymaps(void) {
|
|||
|
||||
#define dump_glyph(x) log_info(STRINGIFY(x) ": %s", special_glyph(x))
|
||||
static void dump_special_glyphs(void) {
|
||||
assert_cc(CROSS_MARK + 1 == _SPECIAL_GLYPH_MAX);
|
||||
assert_cc(DEPRESSED_SMILEY + 1 == _SPECIAL_GLYPH_MAX);
|
||||
|
||||
log_info("/* %s */", __func__);
|
||||
|
||||
|
@ -84,6 +84,13 @@ static void dump_special_glyphs(void) {
|
|||
dump_glyph(MU);
|
||||
dump_glyph(CHECK_MARK);
|
||||
dump_glyph(CROSS_MARK);
|
||||
dump_glyph(ECSTATIC_SMILEY);
|
||||
dump_glyph(HAPPY_SMILEY);
|
||||
dump_glyph(SLIGHTLY_HAPPY_SMILEY);
|
||||
dump_glyph(NEUTRAL_SMILEY);
|
||||
dump_glyph(SLIGHTLY_UNHAPPY_SMILEY);
|
||||
dump_glyph(UNHAPPY_SMILEY);
|
||||
dump_glyph(DEPRESSED_SMILEY);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
|
Loading…
Reference in a new issue