From 919afa3c922110d524cfe05090af76b66882ba38 Mon Sep 17 00:00:00 2001 From: Prozilla Date: Fri, 4 Aug 2023 13:37:52 +0200 Subject: [PATCH] Added right click pasting for terminal --- .../applications/terminal/Terminal.jsx | 24 ++++++++++++-- src/hooks/utils/keyboard.js | 4 ++- src/hooks/utils/mouse.js | 32 +++++++++++++++++++ 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 src/hooks/utils/mouse.js diff --git a/src/components/applications/terminal/Terminal.jsx b/src/components/applications/terminal/Terminal.jsx index cea3619..337c2d6 100644 --- a/src/components/applications/terminal/Terminal.jsx +++ b/src/components/applications/terminal/Terminal.jsx @@ -140,10 +140,30 @@ export function Terminal() { return visibleHistory.slice(startIndex).map(({ text }, index) => { return }); - } + }; + + const onMouseDown = (event) => { + if (event.button === 2) { + event.preventDefault(); + + navigator.clipboard.readText().then((text) => { + setInputValue(inputValue + text); + }).catch((error) => { + console.error(error); + }); + } + }; + + const onContextMenu = (event) => { + event.preventDefault(); + }; return ( -
+
{displayHistory()} { diff --git a/src/hooks/utils/mouse.js b/src/hooks/utils/mouse.js new file mode 100644 index 0000000..d26e91d --- /dev/null +++ b/src/hooks/utils/mouse.js @@ -0,0 +1,32 @@ +import { useEffect } from "react"; + +/** + * @param {Object} params + * @param {Function} params.onMouseDown + * @param {Function} params.onMouseUp + * @param {Function} params.onClick + * @param {Function} params.onContextMenu + */ +export function useMouseListener({ onMouseDown, onMouseUp, onClick, onContextMenu }) { + useEffect(() => { + if (onMouseDown) + document.addEventListener("mousedown", onMouseDown); + if (onMouseUp) + document.addEventListener("mouseup", onMouseUp); + if (onClick) + document.addEventListener("click", onClick); + if (onContextMenu) + document.addEventListener("contextmenu", onContextMenu); + + return () => { + if (onMouseDown) + document.removeEventListener("mousedown", onMouseDown); + if (onMouseUp) + document.removeEventListener("mouseup", onMouseUp); + if (onClick) + document.removeEventListener("click", onClick); + if (onContextMenu) + document.removeEventListener("contextmenu", onContextMenu); + }; + }, [onMouseDown, onMouseUp, onClick, onContextMenu]); +} \ No newline at end of file