feat: show messages under the menu instead of waiting for a key

This commit is contained in:
Felitendo committed 2026-09-22 23:07:51 +02:00
1 parent 51d29d84a6
commit dc0f680652
4 files changed
+107 -99

No files matched your search

-3
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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