bench, docs: let the client detect readiness; say what Enter commits
bench.sh copied ipcpath() and the IBus address-file discovery into shell, although the benchmark client only speaks IPC; retrying the client itself is the readiness test. It also forwarded arguments to a daemon that takes exactly one. README claimed Enter confirms the selection, but Enter and Tab commit the reading unless a candidate was moved to.
This commit is contained in:
@@ -18,10 +18,10 @@ Vietnamese Telex is also available as a compatibility mode.
|
|||||||
|
|
||||||
Use `Up`/`Down` to move through candidates and `PageUp`/`PageDown` to move by
|
Use `Up`/`Down` to move through candidates and `PageUp`/`PageDown` to move by
|
||||||
nine without wrapping. An unmodified `1`-`9` selects that row on the current
|
nine without wrapping. An unmodified `1`-`9` selects that row on the current
|
||||||
page. `Enter` confirms the selection, and `0` commits the current reading
|
page. `Enter` and `Tab` commit a candidate you have moved to; otherwise they
|
||||||
without conversion. `Tab` confirms an ordinary candidate; in a temporary
|
commit the reading, as `0` always does. In a temporary Emoji or Hanja search,
|
||||||
Emoji or Hanja search, `Tab` and `Shift-Tab` wrap through the results. `Esc`
|
`Enter` commits the highlighted result and `Tab`/`Shift-Tab` wrap through
|
||||||
cancels composition.
|
the results. `Esc` cancels composition.
|
||||||
|
|
||||||
Hiragana mode composes a complete reading before offering Kanji candidates.
|
Hiragana mode composes a complete reading before offering Kanji candidates.
|
||||||
Katakana mode does not perform Kanji conversion. Emoji and Hanja searches
|
Katakana mode does not perform Kanji conversion. Emoji and Hanja searches
|
||||||
|
|||||||
66
bench.sh
66
bench.sh
@@ -4,18 +4,8 @@ set -eu
|
|||||||
|
|
||||||
cd "$(dirname "$0")" || exit 1
|
cd "$(dirname "$0")" || exit 1
|
||||||
|
|
||||||
case ${XDG_RUNTIME_DIR-} in
|
if test "$#" -ne 0; then
|
||||||
/) ipc=/strans.sock ;;
|
echo "usage: bench.sh" >&2
|
||||||
/*/) ipc=${XDG_RUNTIME_DIR}strans.sock ;;
|
|
||||||
/*) ipc=${XDG_RUNTIME_DIR}/strans.sock ;;
|
|
||||||
*) ipc=/tmp/strans.$(id -u) ;;
|
|
||||||
esac
|
|
||||||
if test -n "${XDG_CONFIG_HOME-}"; then
|
|
||||||
busdir=$XDG_CONFIG_HOME/ibus/bus
|
|
||||||
elif test "${HOME+x}" = x; then
|
|
||||||
busdir=$HOME/.config/ibus/bus
|
|
||||||
else
|
|
||||||
echo "bench.sh: HOME or XDG_CONFIG_HOME is required for IBus discovery" >&2
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -29,70 +19,36 @@ cleanup()
|
|||||||
if test -n "$perf_pid"; then
|
if test -n "$perf_pid"; then
|
||||||
kill -INT "$perf_pid" 2>/dev/null || :
|
kill -INT "$perf_pid" 2>/dev/null || :
|
||||||
wait "$perf_pid" 2>/dev/null || :
|
wait "$perf_pid" 2>/dev/null || :
|
||||||
perf_pid=
|
|
||||||
fi
|
fi
|
||||||
if test -n "$strans_pid"; then
|
if test -n "$strans_pid"; then
|
||||||
kill "$strans_pid" 2>/dev/null || :
|
kill "$strans_pid" 2>/dev/null || :
|
||||||
wait "$strans_pid" 2>/dev/null || :
|
wait "$strans_pid" 2>/dev/null || :
|
||||||
strans_pid=
|
|
||||||
fi
|
fi
|
||||||
exit "$status"
|
exit "$status"
|
||||||
}
|
}
|
||||||
|
|
||||||
ibusready()
|
|
||||||
{
|
|
||||||
for address in "$busdir"/*; do
|
|
||||||
test -f "$address" || continue
|
|
||||||
foundpid=
|
|
||||||
foundaddress=
|
|
||||||
while IFS= read -r line; do
|
|
||||||
case $line in
|
|
||||||
IBUS_DAEMON_PID="$strans_pid") foundpid=1 ;;
|
|
||||||
IBUS_ADDRESS=unix:abstract=strans-"$strans_pid",*) foundaddress=1 ;;
|
|
||||||
esac
|
|
||||||
done <"$address"
|
|
||||||
if test -n "$foundpid" && test -n "$foundaddress"; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
trap cleanup 0
|
trap cleanup 0
|
||||||
trap 'exit 129' 1
|
trap 'exit 129' 1
|
||||||
trap 'exit 130' 2
|
trap 'exit 130' 2
|
||||||
trap 'exit 143' 15
|
trap 'exit 143' 15
|
||||||
|
|
||||||
./strans map "$@" &
|
./strans map &
|
||||||
strans_pid=$!
|
strans_pid=$!
|
||||||
|
|
||||||
|
# The daemon is ready once the benchmark client can complete a round.
|
||||||
attempt=0
|
attempt=0
|
||||||
while test "$attempt" -lt 10; do
|
until ./bench/bench bench/bench.keys 1 >/dev/null 2>&1; do
|
||||||
if test -S "$ipc" && ibusready; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
if ! kill -0 "$strans_pid" 2>/dev/null; then
|
if ! kill -0 "$strans_pid" 2>/dev/null; then
|
||||||
if wait "$strans_pid"; then
|
echo "bench.sh: daemon exited before accepting IPC clients" >&2
|
||||||
status=0
|
exit 1
|
||||||
else
|
|
||||||
status=$?
|
|
||||||
fi
|
|
||||||
strans_pid=
|
|
||||||
if test "$status" -eq 0; then
|
|
||||||
status=1
|
|
||||||
fi
|
|
||||||
echo "bench.sh: daemon exited before publishing IPC and IBus endpoints" >&2
|
|
||||||
exit "$status"
|
|
||||||
fi
|
fi
|
||||||
attempt=$((attempt + 1))
|
attempt=$((attempt + 1))
|
||||||
if test "$attempt" -lt 10; then
|
if test "$attempt" -ge 50; then
|
||||||
sleep 1
|
echo "bench.sh: daemon did not accept IPC clients within 10 seconds" >&2
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
sleep 0.2
|
||||||
done
|
done
|
||||||
if test "$attempt" -eq 10; then
|
|
||||||
echo "bench.sh: daemon did not publish IPC and IBus endpoints within 10 seconds" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# warm up the renderer
|
# warm up the renderer
|
||||||
./bench/bench bench/bench.keys 100
|
./bench/bench bench/bench.keys 100
|
||||||
|
|||||||
Reference in New Issue
Block a user