feat: show messages under the menu instead of waiting for a key
This commit is contained in:
1 parent
51d29d84a6
commit
dc0f680652
4 files changed
+107
-99
No files matched your search
@@ -317,9 +317,6 @@ msgid ""
|
||||
"password."
|
||||
msgstr "Das waren zu viele Versuche. Die Gesichtsentsperrung ist pausiert, bis du mit deinem Passwort entsperrst."
|
||||
|
||||
#: src/lib/menu.sh:122
|
||||
msgid "Press any key to continue..."
|
||||
msgstr "Beliebige Taste drücken …"
|
||||
|
||||
#: src/lib/menu.sh:130
|
||||
msgid "[y/N]"
|
||||
|
||||
+65
-68
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: plasma-face-unlock 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/plasma-face-unlock/"
|
||||
"issues\n"
|
||||
"POT-Creation-Date: 2026-09-22 18:45+0200\n"
|
||||
"POT-Creation-Date: 2026-09-22 23:06+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -55,7 +55,8 @@ msgstr ""
|
||||
msgid "First, set up your face."
|
||||
msgstr ""
|
||||
|
||||
#: src/plasma-face-unlock:100 src/plasma-face-unlock:120 src/lib/menu.sh:338
|
||||
#: src/plasma-face-unlock:100 src/plasma-face-unlock:120 src/lib/menu.sh:348
|
||||
#: src/lib/menu.sh:352 src/lib/menu.sh:358 src/lib/menu.sh:360
|
||||
msgid "Could not save the setting."
|
||||
msgstr ""
|
||||
|
||||
@@ -83,16 +84,16 @@ msgstr ""
|
||||
msgid "No face is set up yet."
|
||||
msgstr ""
|
||||
|
||||
#: src/plasma-face-unlock:148 src/lib/menu.sh:157 src/lib/menu.sh:460
|
||||
#: src/plasma-face-unlock:148 src/lib/menu.sh:167 src/lib/menu.sh:472
|
||||
msgid "on"
|
||||
msgstr ""
|
||||
|
||||
#: src/plasma-face-unlock:148 src/lib/menu.sh:159 src/lib/menu.sh:169
|
||||
#: src/lib/menu.sh:461
|
||||
#: src/plasma-face-unlock:148 src/lib/menu.sh:169 src/lib/menu.sh:179
|
||||
#: src/lib/menu.sh:473
|
||||
msgid "off"
|
||||
msgstr ""
|
||||
|
||||
#: src/plasma-face-unlock:150 src/lib/menu.sh:478
|
||||
#: src/plasma-face-unlock:150 src/lib/menu.sh:490
|
||||
#, sh-printf-format
|
||||
msgid "%s samples, %s learned"
|
||||
msgstr ""
|
||||
@@ -122,7 +123,7 @@ msgstr ""
|
||||
msgid "Turn it off (faces are kept)"
|
||||
msgstr ""
|
||||
|
||||
#: src/plasma-face-unlock:176 src/lib/menu.sh:540
|
||||
#: src/plasma-face-unlock:176 src/lib/menu.sh:555
|
||||
msgid "Add a face"
|
||||
msgstr ""
|
||||
|
||||
@@ -221,7 +222,7 @@ msgstr ""
|
||||
msgid "The camera could not be used."
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/daemon.sh:111 src/lib/menu.sh:233
|
||||
#: src/lib/daemon.sh:111 src/lib/menu.sh:243
|
||||
msgid "The recognition models are missing. Reinstall the package."
|
||||
msgstr ""
|
||||
|
||||
@@ -318,176 +319,172 @@ msgid ""
|
||||
"password."
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:122
|
||||
msgid "Press any key to continue..."
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:130
|
||||
#: src/lib/menu.sh:140
|
||||
msgid "[y/N]"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:149 src/lib/menu.sh:382
|
||||
#: src/lib/menu.sh:159 src/lib/menu.sh:392
|
||||
msgid "ON"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:151 src/lib/menu.sh:383
|
||||
#: src/lib/menu.sh:161 src/lib/menu.sh:393
|
||||
msgid "OFF"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:167
|
||||
#: src/lib/menu.sh:177
|
||||
msgid "strict (blink or turn your head)"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:168
|
||||
#: src/lib/menu.sh:178
|
||||
msgid "basic (screens and phone edges)"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:170
|
||||
#: src/lib/menu.sh:180
|
||||
msgid "normal"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:171
|
||||
#: src/lib/menu.sh:181
|
||||
msgid "strict"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:172
|
||||
#: src/lib/menu.sh:182
|
||||
msgid "relaxed"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:173
|
||||
#: src/lib/menu.sh:183
|
||||
msgid "island with the face"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:174
|
||||
#: src/lib/menu.sh:184
|
||||
msgid "small pill with a lock"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:175
|
||||
#: src/lib/menu.sh:185
|
||||
#, sh-printf-format
|
||||
msgid "%s seconds"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:176 src/lib/menu.sh:313
|
||||
#: src/lib/menu.sh:186 src/lib/menu.sh:323
|
||||
msgid "automatic"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:193
|
||||
#: src/lib/menu.sh:203
|
||||
msgid "Face unlock"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:197
|
||||
#: src/lib/menu.sh:207
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:197
|
||||
#: src/lib/menu.sh:207
|
||||
msgid "not running"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:199
|
||||
#: src/lib/menu.sh:209
|
||||
msgid "Turning face unlock on again starts it."
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:210 src/lib/menu.sh:212 src/lib/menu.sh:457
|
||||
#: src/lib/menu.sh:541
|
||||
#: src/lib/menu.sh:220 src/lib/menu.sh:222 src/lib/menu.sh:469
|
||||
#: src/lib/menu.sh:556
|
||||
msgid "Faces"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:210
|
||||
#: src/lib/menu.sh:220
|
||||
msgid "none set up yet"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:212
|
||||
#: src/lib/menu.sh:222
|
||||
msgid "all turned off"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:218
|
||||
#: src/lib/menu.sh:228
|
||||
msgid "none found"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:220 /tmp/tmp.q9gMIu3Tjj/settings.sh:9
|
||||
#: src/lib/menu.sh:230 /tmp/tmp.FOzKaHKE4a/settings.sh:9
|
||||
msgid "Camera"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:222
|
||||
#: src/lib/menu.sh:232
|
||||
msgid "Lock screen"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:223
|
||||
#: src/lib/menu.sh:233
|
||||
msgid "sudo"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:224
|
||||
#: src/lib/menu.sh:234
|
||||
msgid "Admin prompts"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:225 /tmp/tmp.q9gMIu3Tjj/settings.sh:6
|
||||
#: src/lib/menu.sh:235 /tmp/tmp.FOzKaHKE4a/settings.sh:6
|
||||
msgid "Photo check"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:228
|
||||
#: src/lib/menu.sh:238
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:228
|
||||
#: src/lib/menu.sh:238
|
||||
#, sh-printf-format
|
||||
msgid "for %d more minutes, or until the password is used"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:230
|
||||
#: src/lib/menu.sh:240
|
||||
msgid "Last unlock"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:309
|
||||
#: src/lib/menu.sh:319
|
||||
#, sh-printf-format
|
||||
msgid "automatic (%s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:319
|
||||
#: src/lib/menu.sh:329
|
||||
msgid "(infrared)"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:323
|
||||
#: src/lib/menu.sh:333
|
||||
msgid "(not connected)"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:379 src/lib/menu.sh:542
|
||||
#: src/lib/menu.sh:389 src/lib/menu.sh:557
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:380
|
||||
#: src/lib/menu.sh:390
|
||||
msgid "Up/Down: select, Space or Right: change, q: back"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:381
|
||||
#: src/lib/menu.sh:391
|
||||
msgid "Settings marked * are for the whole computer and ask for your password."
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:458
|
||||
#: src/lib/menu.sh:470
|
||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:459
|
||||
#: src/lib/menu.sh:471
|
||||
msgid "No face is set up yet. Press a to add one."
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:502
|
||||
#: src/lib/menu.sh:516
|
||||
msgid "New name:"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:509
|
||||
#: src/lib/menu.sh:523
|
||||
#, sh-printf-format
|
||||
msgid "Delete \"%s\"?"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:539
|
||||
#: src/lib/menu.sh:554
|
||||
msgid "Turn face unlock on or off"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:543
|
||||
#: src/lib/menu.sh:558
|
||||
msgid "Try it"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/menu.sh:544
|
||||
#: src/lib/menu.sh:559
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
@@ -571,35 +568,35 @@ msgstr ""
|
||||
msgid "Bubble for sudo and admin prompts too"
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/bubblecontroller.cpp:91
|
||||
#: src/agent/bubblecontroller.cpp:92
|
||||
msgid "Blink once"
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/bubblecontroller.cpp:93
|
||||
#: src/agent/bubblecontroller.cpp:94
|
||||
msgid "Look at the screen"
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/bubblecontroller.cpp:95
|
||||
#: src/agent/bubblecontroller.cpp:96
|
||||
msgid "Move closer"
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/bubblecontroller.cpp:97
|
||||
#: src/agent/bubblecontroller.cpp:98
|
||||
msgid "Too dark"
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/bubblecontroller.cpp:117
|
||||
#: src/agent/bubblecontroller.cpp:118
|
||||
msgid "Use your password"
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/bubblecontroller.cpp:123
|
||||
#: src/agent/bubblecontroller.cpp:124
|
||||
msgid "Not recognized"
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/bubblecontroller.cpp:125
|
||||
#: src/agent/bubblecontroller.cpp:126
|
||||
msgid "Try again and blink"
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/bubblecontroller.cpp:127
|
||||
#: src/agent/bubblecontroller.cpp:128
|
||||
msgid "Camera unavailable"
|
||||
msgstr ""
|
||||
|
||||
@@ -743,26 +740,26 @@ msgid ""
|
||||
"with glasses for example, from the menu."
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/qml/Enroll.qml:156
|
||||
#: src/agent/qml/Enroll.qml:157
|
||||
msgid "Name (optional)"
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/qml/Enroll.qml:171
|
||||
#: src/agent/qml/Enroll.qml:172
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/qml/Enroll.qml:177
|
||||
#: src/agent/qml/Enroll.qml:178
|
||||
msgid "Finish now"
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/qml/Enroll.qml:182
|
||||
#: src/agent/qml/Enroll.qml:183
|
||||
msgid "Try again"
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/qml/Enroll.qml:182
|
||||
#: src/agent/qml/Enroll.qml:183
|
||||
msgid "Get started"
|
||||
msgstr ""
|
||||
|
||||
#: src/agent/qml/Enroll.qml:187
|
||||
#: src/agent/qml/Enroll.qml:188
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
+7
-7
@@ -135,16 +135,16 @@ else
|
||||
PFU_C_GREEN='' PFU_C_YELLOW='' PFU_C_RED=''
|
||||
fi
|
||||
|
||||
# Set by pfu_bad and pfu_note. The menu redraws straight after an action, which
|
||||
# would wipe the screen; this marks that something was printed the user still
|
||||
# has to read.
|
||||
PFU_UI_NEEDS_ACK=''
|
||||
# What pfu_ok, pfu_bad and pfu_note printed. The menu redraws straight after an
|
||||
# action, which wipes the screen, so it shows these again under the new frame
|
||||
# rather than holding everything up for a key press.
|
||||
PFU_UI_NOTICES=()
|
||||
|
||||
pfu_say() { printf '%s\n' "$*"; }
|
||||
pfu_head() { printf '\n%s%s%s\n\n' "$PFU_C_BOLD$PFU_C_BLUE" "$*" "$PFU_C_RESET"; }
|
||||
pfu_ok() { printf '%s✔%s %s\n' "$PFU_C_GREEN" "$PFU_C_RESET" "$*"; }
|
||||
pfu_bad() { PFU_UI_NEEDS_ACK=1; printf '%s✘%s %s\n' "$PFU_C_RED" "$PFU_C_RESET" "$*" >&2; }
|
||||
pfu_note() { PFU_UI_NEEDS_ACK=1; printf '%s•%s %s\n' "$PFU_C_DIM" "$PFU_C_RESET" "$*"; }
|
||||
pfu_ok() { PFU_UI_NOTICES+=("$PFU_C_GREEN✔$PFU_C_RESET $*"); printf '%s✔%s %s\n' "$PFU_C_GREEN" "$PFU_C_RESET" "$*"; }
|
||||
pfu_bad() { PFU_UI_NOTICES+=("$PFU_C_RED✘$PFU_C_RESET $*"); printf '%s✘%s %s\n' "$PFU_C_RED" "$PFU_C_RESET" "$*" >&2; }
|
||||
pfu_note() { PFU_UI_NOTICES+=("$PFU_C_DIM•$PFU_C_RESET $*"); printf '%s•%s %s\n' "$PFU_C_DIM" "$PFU_C_RESET" "$*"; }
|
||||
|
||||
pfu_have() { command -v "$1" > /dev/null 2>&1; }
|
||||
|
||||
|
||||
+35
-21
@@ -118,10 +118,20 @@ pfu_ui_read_line() {
|
||||
done
|
||||
}
|
||||
|
||||
pfu_pause() {
|
||||
printf '\n %s' "$(pfu_msg "Press any key to continue...")"
|
||||
read -rsn1 _ || true
|
||||
printf '\n'
|
||||
# _pfu_ui_take_notices
|
||||
# The messages the last action left, as lines for under a frame, in
|
||||
# PFU_UI_NOTICE_TEXT. Each is shown once.
|
||||
PFU_UI_NOTICE_TEXT=''
|
||||
|
||||
_pfu_ui_take_notices() {
|
||||
local n
|
||||
PFU_UI_NOTICE_TEXT=''
|
||||
(( ${#PFU_UI_NOTICES[@]} )) || return 0
|
||||
PFU_UI_NOTICE_TEXT=$'\n'
|
||||
for n in "${PFU_UI_NOTICES[@]}"; do
|
||||
PFU_UI_NOTICE_TEXT+=" $n"$'\n'
|
||||
done
|
||||
PFU_UI_NOTICES=()
|
||||
}
|
||||
|
||||
# pfu_ui_confirm <question>
|
||||
@@ -335,19 +345,19 @@ _pfu_setting_change() {
|
||||
|
||||
case "$scope" in
|
||||
user)
|
||||
pfu_config_set "$key" "$next" || { pfu_bad "$(pfu_msg "Could not save the setting.")"; pfu_pause; }
|
||||
pfu_config_set "$key" "$next" || pfu_bad "$(pfu_msg "Could not save the setting.")"
|
||||
;;
|
||||
sys)
|
||||
printf '\n'
|
||||
pfu_ui_cooked pfu_root set "$key" "$next" || pfu_pause
|
||||
pfu_ui_cooked pfu_root set "$key" "$next" || pfu_bad "$(pfu_msg "Could not save the setting.")"
|
||||
PFU_KV_CACHE=()
|
||||
;;
|
||||
pam)
|
||||
printf '\n'
|
||||
if [[ $next == yes ]]; then
|
||||
pfu_ui_cooked pfu_root pam-enable "$key" || pfu_pause
|
||||
pfu_ui_cooked pfu_root pam-enable "$key" || pfu_bad "$(pfu_msg "Could not save the setting.")"
|
||||
else
|
||||
pfu_ui_cooked pfu_root pam-disable "$key" || pfu_pause
|
||||
pfu_ui_cooked pfu_root pam-disable "$key" || pfu_bad "$(pfu_msg "Could not save the setting.")"
|
||||
fi
|
||||
# Remembered, so that turning face unlock off and on again brings
|
||||
# it back.
|
||||
@@ -428,6 +438,8 @@ pfu_ui_settings() {
|
||||
|
||||
frame+=$'\n'" ${PFU_C_DIM}${legend}${PFU_C_RESET}"$'\n'
|
||||
frame+=" ${PFU_C_DIM}${hint}${PFU_C_RESET}"$'\n'
|
||||
_pfu_ui_take_notices
|
||||
frame+="$PFU_UI_NOTICE_TEXT"
|
||||
printf '%s' "$frame"
|
||||
|
||||
key="$(pfu_read_key)" || return 0
|
||||
@@ -483,6 +495,8 @@ pfu_ui_faces() {
|
||||
frame+="$row"$'\n'
|
||||
done
|
||||
frame+=$'\n'" ${PFU_C_DIM}${hint}${PFU_C_RESET}"$'\n'
|
||||
_pfu_ui_take_notices
|
||||
frame+="$PFU_UI_NOTICE_TEXT"
|
||||
printf '%s' "$frame"
|
||||
|
||||
key="$(pfu_read_key)" || return 0
|
||||
@@ -510,11 +524,7 @@ pfu_ui_faces() {
|
||||
pfu_ctl remove "${PFU_FACE_IDS[cursor]}" > /dev/null
|
||||
fi
|
||||
;;
|
||||
a|A)
|
||||
pfu_ui_cooked pfu_do_setup
|
||||
[[ -n $PFU_UI_NEEDS_ACK ]] && pfu_pause
|
||||
PFU_UI_NEEDS_ACK=''
|
||||
;;
|
||||
a|A) pfu_ui_cooked pfu_do_setup ;;
|
||||
q|Q|escape) return 0 ;;
|
||||
*) ;;
|
||||
esac
|
||||
@@ -526,13 +536,18 @@ pfu_ui_faces() {
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
pfu_ui_menu() {
|
||||
local choice
|
||||
local choice keep=0
|
||||
|
||||
pfu_ui_term_raw
|
||||
trap 'pfu_ui_term_restore' EXIT INT TERM
|
||||
|
||||
while true; do
|
||||
# After a test the menu goes under what the camera saw instead.
|
||||
if (( keep )); then
|
||||
keep=0
|
||||
else
|
||||
clear 2>/dev/null || true
|
||||
fi
|
||||
pfu_head " $PFU_PRETTY"
|
||||
pfu_ui_status
|
||||
printf '\n'
|
||||
@@ -542,6 +557,8 @@ pfu_ui_menu() {
|
||||
printf ' [4] %s\n' "$(pfu_msg "Settings")"
|
||||
printf ' [5] %s\n' "$(pfu_msg "Try it")"
|
||||
printf ' [q] %s\n' "$(pfu_msg "Quit")"
|
||||
_pfu_ui_take_notices
|
||||
printf '%s' "$PFU_UI_NOTICE_TEXT"
|
||||
printf '\n > '
|
||||
|
||||
choice="$(pfu_read_key)" || {
|
||||
@@ -552,7 +569,6 @@ pfu_ui_menu() {
|
||||
esac
|
||||
printf '%s\n' "$choice"
|
||||
|
||||
PFU_UI_NEEDS_ACK=''
|
||||
case "$choice" in
|
||||
1)
|
||||
pfu_config_load
|
||||
@@ -561,18 +577,16 @@ pfu_ui_menu() {
|
||||
else
|
||||
pfu_ui_cooked pfu_do_enable
|
||||
fi
|
||||
[[ -n $PFU_UI_NEEDS_ACK ]] && pfu_pause
|
||||
;;
|
||||
2)
|
||||
pfu_ui_cooked pfu_do_setup
|
||||
[[ -n $PFU_UI_NEEDS_ACK ]] && pfu_pause
|
||||
;;
|
||||
2) pfu_ui_cooked pfu_do_setup ;;
|
||||
3) pfu_ui_faces ;;
|
||||
4) pfu_ui_settings ;;
|
||||
5)
|
||||
printf '\n'
|
||||
pfu_ui_cooked pfu_test
|
||||
pfu_pause
|
||||
# Already on screen, with the rest of the test.
|
||||
PFU_UI_NOTICES=()
|
||||
keep=1
|
||||
;;
|
||||
q|Q) pfu_ui_term_restore; trap - EXIT INT TERM; return 0 ;;
|
||||
# Anything else (Enter, arrow keys, stray characters) just
|
||||
|
||||
Reference in new issue
Block a user