diff --git a/packages/devtools-kit/src/_types/options.ts b/packages/devtools-kit/src/_types/options.ts
index 63b5899cde..8f461e1eb0 100644
--- a/packages/devtools-kit/src/_types/options.ts
+++ b/packages/devtools-kit/src/_types/options.ts
@@ -184,6 +184,7 @@ export interface VSCodeTunnelOptions {
export interface NuxtDevToolsOptions {
behavior: {
telemetry: boolean | null
+ openInEditor: string | undefined
}
ui: {
componentsGraphShowGlobalComponents: boolean
diff --git a/packages/devtools/client/pages/settings.vue b/packages/devtools/client/pages/settings.vue
index 0d4ae06f92..0c05b1a80f 100644
--- a/packages/devtools/client/pages/settings.vue
+++ b/packages/devtools/client/pages/settings.vue
@@ -24,8 +24,23 @@ const {
sidebarScrollable,
} = useDevToolsOptions('ui')
+const {
+ openInEditor,
+} = useDevToolsOptions('behavior')
+
const client = useClient()
+const editorOptions = [
+ ['Auto', undefined],
+ ['VS Code', 'vscode'],
+ ['VS Code Insider', 'vscode-insider'],
+ ['Cursor', 'cursor'],
+ ['Zed', 'zed'],
+ ['WebStorm', 'webstorm'],
+ ['Sublime Text', 'sublime'],
+ ['Atom', 'atom'],
+]
+
const scaleOptions = [
['Tiny', 12 / 15],
['Small', 14 / 15],
@@ -227,6 +242,15 @@ watchEffect(() => {
{{ i[0] }}
+
+
+
+ Open In Editor
+
+
+
diff --git a/packages/devtools/src/constant.ts b/packages/devtools/src/constant.ts
index 04b2ae8ce9..f510e167cc 100644
--- a/packages/devtools/src/constant.ts
+++ b/packages/devtools/src/constant.ts
@@ -21,6 +21,7 @@ export const defaultOptions: ModuleOptions = {
export const defaultTabOptions: NuxtDevToolsOptions = {
behavior: {
telemetry: null,
+ openInEditor: undefined,
},
ui: {
componentsView: 'list',
diff --git a/packages/devtools/src/server-rpc/general.ts b/packages/devtools/src/server-rpc/general.ts
index 0e35993787..7c320e2fe7 100644
--- a/packages/devtools/src/server-rpc/general.ts
+++ b/packages/devtools/src/server-rpc/general.ts
@@ -7,11 +7,12 @@ import { logger } from '@nuxt/kit'
import { colors } from 'consola/utils'
import destr from 'destr'
import { resolve } from 'pathe'
-
import { snakeCase } from 'scule'
+
import { resolveBuiltinPresets } from 'unimport'
import { getDevAuthToken } from '../dev-auth'
import { setupHooksDebug } from '../runtime/shared/hooks'
+import { getOptions } from './options'
export function setupGeneralRPC({
nuxt,
@@ -181,8 +182,11 @@ export function setupGeneralRPC({
if (result)
return true
}
+ let editor = getOptions()?.behavior.openInEditor ?? undefined
+ if (editor === 'auto')
+ editor = undefined
// @ts-expect-error missin types
- await import('launch-editor').then(r => (r.default || r)(path + suffix))
+ await import('launch-editor').then(r => (r.default || r)(path + suffix, editor))
return true
}
catch (e) {