Keep the first emoji result selected whenever results exist, including after search filtering, so Enter inserts immediately. Route emoji insertion through a hidden helper that serves a transient sensitive clipboard entry long enough for Shift+Insert, then stops that clipboard owner. Mark transient emoji inserts so clipboard history skips only that event while continuing to record normal terminal copies.
92 lines
2.7 KiB
Bash
92 lines
2.7 KiB
Bash
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
|
|
|
|
run_node_test <<'JS'
|
|
const fs = require('fs')
|
|
const emojis = requireFromRoot('shell/plugins/emojis/EmojiSearch.js')
|
|
|
|
const raw = fs.readFileSync(path.join(root, 'shell/plugins/emojis/emojis.json'), 'utf8')
|
|
const data = emojis.parseEmojis(raw)
|
|
|
|
assert(data.length > 1000, 'emoji dataset parses')
|
|
assertDeepEqual(emojis.parseEmojis('{'), [], 'invalid emoji JSON parses as empty list')
|
|
assertDeepEqual(emojis.parseEmojis('{"e":"nope"}'), [], 'non-array emoji JSON parses as empty list')
|
|
|
|
const fixture = [
|
|
{ e: 'a', k: 'grinning face smile happy' },
|
|
{ e: 'b', k: 'face with tears of joy joy tears' },
|
|
{ e: 'c', k: 'flag: united states us america' }
|
|
]
|
|
|
|
assertDeepEqual(
|
|
emojis.filterEmojis(fixture, ' JOY ').map(item => item.e),
|
|
['b'],
|
|
'emoji filtering trims and lowercases query'
|
|
)
|
|
|
|
assertDeepEqual(
|
|
emojis.filterEmojis(fixture, '', 2).map(item => item.e),
|
|
['a', 'b'],
|
|
'emoji filtering honors result limit'
|
|
)
|
|
|
|
assertDeepEqual(
|
|
emojis.filterEmojis(fixture, '', 0),
|
|
[],
|
|
'emoji filtering supports zero result limit'
|
|
)
|
|
|
|
assertEqual(
|
|
emojis.filterEmojis(data, 'face with tears')[0].e,
|
|
'\u{1F602}',
|
|
'emoji filtering finds face with tears of joy'
|
|
)
|
|
JS
|
|
|
|
TMPDIR=$(mktemp -d)
|
|
trap 'rm -rf "$TMPDIR"' EXIT
|
|
|
|
mkdir -p "$TMPDIR/bin" "$TMPDIR/runtime"
|
|
|
|
cat >"$TMPDIR/bin/wl-copy" <<'SH'
|
|
#!/bin/bash
|
|
args="$*"
|
|
target="$WL_COPY_OUT"
|
|
if [[ $args == "--type text/plain --sensitive --foreground" ]]; then
|
|
target="$WL_COPY_EMOJI_OUT"
|
|
fi
|
|
|
|
printf '%s\n' "$args" >"$target.args"
|
|
cat >"$target"
|
|
SH
|
|
|
|
cat >"$TMPDIR/bin/wtype" <<'SH'
|
|
#!/bin/bash
|
|
printf '%s\n' "$*" >"$WTYPE_OUT"
|
|
SH
|
|
|
|
cat >"$TMPDIR/bin/sleep" <<'SH'
|
|
#!/bin/bash
|
|
exit 0
|
|
SH
|
|
|
|
chmod +x "$TMPDIR/bin/wl-copy" "$TMPDIR/bin/wtype" "$TMPDIR/bin/sleep"
|
|
|
|
WL_COPY_OUT="$TMPDIR/copy" WL_COPY_EMOJI_OUT="$TMPDIR/emoji" WTYPE_OUT="$TMPDIR/wtype" PATH="$TMPDIR/bin:$PATH" \
|
|
XDG_RUNTIME_DIR="$TMPDIR/runtime" "$ROOT/bin/omarchy-menu-emoji-insert" "😀"
|
|
|
|
[[ $(<"$TMPDIR/emoji") == "😀" ]] || fail "emoji insert helper copies emoji transiently"
|
|
pass "emoji insert helper copies emoji transiently"
|
|
|
|
[[ $(<"$TMPDIR/runtime/omarchy-emoji-insert-ignore") == "😀" ]] || fail "emoji insert helper marks transient emoji for history ignore"
|
|
pass "emoji insert helper marks transient emoji for history ignore"
|
|
|
|
[[ $(<"$TMPDIR/emoji.args") == "--type text/plain --sensitive --foreground" ]] || fail "emoji insert helper serves transient clipboard in foreground"
|
|
pass "emoji insert helper serves transient clipboard in foreground"
|
|
|
|
[[ $(<"$TMPDIR/wtype") == "-M shift -k Insert -m shift" ]] || fail "emoji insert helper pastes with shift insert"
|
|
pass "emoji insert helper pastes with shift insert"
|