diff --git a/app/components/CopySelectedNode.tsx b/app/components/CopySelectedNode.tsx
index 2b2af8e41..91957e904 100644
--- a/app/components/CopySelectedNode.tsx
+++ b/app/components/CopySelectedNode.tsx
@@ -1,5 +1,7 @@
import { useHotkeys } from "react-hotkeys-hook";
import { useSelectedInfo } from "../hooks/useSelectedInfo";
+import { useJsonColumnViewState } from "../hooks/useJsonColumnView";
+import { formatPath } from "../utilities/pathFormatter";
export function CopySelectedNodeShortcut() {
const selectedInfo = useSelectedInfo();
@@ -18,3 +20,21 @@ export function CopySelectedNodeShortcut() {
return <>>;
}
+
+export function CopySelectedNodePathShortcut() {
+ const { selectedNodeId } = useJsonColumnViewState();
+
+ useHotkeys(
+ 'shift+p,shift+P',
+ (e) => {
+ if (!selectedNodeId) {
+ return;
+ }
+ e.preventDefault();
+ navigator.clipboard.writeText(formatPath(selectedNodeId, "jsonpath"));
+ },
+ [selectedNodeId]
+ );
+
+ return <>>;
+}
diff --git a/app/components/JsonColumnView.tsx b/app/components/JsonColumnView.tsx
index 6e7bfd9d3..105a91013 100644
--- a/app/components/JsonColumnView.tsx
+++ b/app/components/JsonColumnView.tsx
@@ -4,7 +4,7 @@ import {
} from "../hooks/useJsonColumnView";
import { useHotkeys } from "react-hotkeys-hook";
import { Columns } from "./Columns";
-import { CopySelectedNodeShortcut } from "./CopySelectedNode";
+import { CopySelectedNodeShortcut, CopySelectedNodePathShortcut } from "./CopySelectedNode";
export function JsonColumnView() {
const { getColumnViewProps, columns } = useJsonColumnViewState();
@@ -70,5 +70,6 @@ function KeyboardShortcuts() {
return <>
+
>;
}
diff --git a/app/components/JsonTreeView.tsx b/app/components/JsonTreeView.tsx
index f549b2662..f434996b5 100644
--- a/app/components/JsonTreeView.tsx
+++ b/app/components/JsonTreeView.tsx
@@ -7,7 +7,7 @@ import {
import { useJsonDoc } from "~/hooks/useJsonDoc";
import { JsonTreeViewNode, useJsonTreeViewContext } from "~/hooks/useJsonTree";
import { VirtualNode } from "~/hooks/useVirtualTree";
-import { CopySelectedNodeShortcut } from "./CopySelectedNode";
+import { CopySelectedNodeShortcut, CopySelectedNodePathShortcut } from "./CopySelectedNode";
import { Body } from "./Primitives/Body";
import { Mono } from "./Primitives/Mono";
@@ -84,6 +84,7 @@ export function JsonTreeView() {
return (
<>
+
);
})}
+