Shortcuts.svelte 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <script>
  2. import { writable } from "svelte/store";
  3. import {
  4. register as registerShortcut,
  5. unregister as unregisterShortcut,
  6. unregisterAll as unregisterAllShortcuts,
  7. } from "@tauri-apps/api/globalShortcut";
  8. export let onMessage;
  9. const shortcuts = writable([]);
  10. let shortcut = "CmdOrControl+X";
  11. function register() {
  12. const shortcut_ = shortcut;
  13. registerShortcut(shortcut_, () => {
  14. onMessage(`Shortcut ${shortcut_} triggered`);
  15. })
  16. .then(() => {
  17. shortcuts.update((shortcuts_) => [...shortcuts_, shortcut_]);
  18. onMessage(`Shortcut ${shortcut_} registered successfully`);
  19. })
  20. .catch(onMessage);
  21. }
  22. function unregister(shortcut) {
  23. const shortcut_ = shortcut;
  24. unregisterShortcut(shortcut_)
  25. .then(() => {
  26. shortcuts.update((shortcuts_) =>
  27. shortcuts_.filter((s) => s !== shortcut_)
  28. );
  29. onMessage(`Shortcut ${shortcut_} unregistered`);
  30. })
  31. .catch(onMessage);
  32. }
  33. function unregisterAll() {
  34. unregisterAllShortcuts()
  35. .then(() => {
  36. shortcuts.update(() => []);
  37. onMessage(`Unregistered all shortcuts`);
  38. })
  39. .catch(onMessage);
  40. }
  41. </script>
  42. <div>
  43. <div>
  44. <input
  45. placeholder="Type a shortcut with '+' as separator..."
  46. bind:value={shortcut}
  47. />
  48. <button type="button" on:click={register}>Register</button>
  49. </div>
  50. <div>
  51. {#each $shortcuts as savedShortcut}
  52. <div>
  53. {savedShortcut}
  54. <button type="button" on:click={() => unregister(savedShortcut)}
  55. >Unregister</button
  56. >
  57. </div>
  58. {/each}
  59. {#if $shortcuts.length}
  60. <button type="button" on:click={unregisterAll}>Unregister all</button>
  61. {/if}
  62. </div>
  63. </div>