From ef28f15ee8aa44778139a48114a9c76be4447d73 Mon Sep 17 00:00:00 2001 From: Shea Date: Mon, 22 Jun 2026 22:45:54 +0300 Subject: [PATCH] add shortcut for opening sticker pack Signed-off-by: Shea --- .changeset/feat_add_sticker_shortcut.md | 5 +++++ src/app/components/emoji-board/EmojiBoard.tsx | 4 ++-- src/app/features/room/RoomInput.tsx | 9 ++++++++- .../settings/keyboard-shortcuts/KeyboardShortcuts.tsx | 1 + 4 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 .changeset/feat_add_sticker_shortcut.md diff --git a/.changeset/feat_add_sticker_shortcut.md b/.changeset/feat_add_sticker_shortcut.md new file mode 100644 index 000000000..98badabc7 --- /dev/null +++ b/.changeset/feat_add_sticker_shortcut.md @@ -0,0 +1,5 @@ +--- +default: minor +--- + +Add CTRL+E shortcut to editor to bring sticker menu up diff --git a/src/app/components/emoji-board/EmojiBoard.tsx b/src/app/components/emoji-board/EmojiBoard.tsx index b9a625b04..3041b0ab9 100644 --- a/src/app/components/emoji-board/EmojiBoard.tsx +++ b/src/app/components/emoji-board/EmojiBoard.tsx @@ -16,7 +16,7 @@ import { atom, useAtom, useSetAtom } from 'jotai'; import { useVirtualizer } from '@tanstack/react-virtual'; import type { IEmoji } from '$plugins/emoji'; import { emojiGroups, emojis } from '$plugins/emoji'; -import { preventScrollWithArrowKey, stopPropagation } from '$utils/keyboard'; +import { preventScrollWithArrowKey } from '$utils/keyboard'; import { useRelevantImagePacks } from '$hooks/useImagePacks'; import { useMatrixClient } from '$hooks/useMatrixClient'; import { useRecentEmoji } from '$hooks/useRecentEmoji'; @@ -545,7 +545,7 @@ export function EmojiBoard({ !editableActiveElement() && isKeyHotkey(['arrowdown', 'arrowright'], evt), isKeyBackward: (evt: KeyboardEvent) => !editableActiveElement() && isKeyHotkey(['arrowup', 'arrowleft'], evt), - escapeDeactivates: stopPropagation, + escapeDeactivates: true, }} > ( const setServerMaxDelayMs = useSetAtom(serverMaxDelayMsAtom); const [sendError, setSendError] = useState(); const isEncrypted = room.hasEncryptionStateEvent(); + const [emojiBoardTab, setEmojiBoardTab] = useState(undefined); useElementSizeObserver( useCallback(() => fileDropContainerRef.current, [fileDropContainerRef]), @@ -1179,6 +1180,11 @@ export const RoomInput = forwardRef( } setReplyDraft(undefined); } + + if (isKeyHotkey('control+e', evt)) { + evt.preventDefault(); + setEmojiBoardTab(EmojiBoardTab.Sticker); + } }, [ submit, @@ -1190,6 +1196,7 @@ export const RoomInput = forwardRef( showAudioRecorder, editor, onEditLastMessage, + setEmojiBoardTab, ] ); @@ -1671,7 +1678,7 @@ export const RoomInput = forwardRef( - {(emojiBoardTab: EmojiBoardTab | undefined, setEmojiBoardTab) => ( + {() => (