Skip to content

Commit f27275c

Browse files
committed
♻️ skip userDataDir when no custom settings, keep workspace trust disabled
1 parent 699fb6a commit f27275c

2 files changed

Lines changed: 15 additions & 12 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ addons:
4646
<Editor session="demo" />
4747
```
4848

49-
That's it. When you navigate to the slide, a VS Code instance starts automatically and loads inside the slide. Each session starts with workspace trust disabled and git repository detection turned off so no setup popups.
49+
That's it. When you navigate to the slide, a VS Code instance starts automatically and loads inside the slide. The IDE can use your local VS Code configuration for user settings.
5050

5151
## 📂 Open a specific workspace
5252

plugin/sessionManager.ts

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ type SessionEntry = {
1717
close: () => Promise<void>
1818
port: number
1919
url: string
20-
userDataDir: string
20+
userDataDir?: string
2121
}
2222

2323
type SendEvent = (session: string, url: string, state: 'running' | 'error', error?: string) => void
@@ -55,26 +55,29 @@ export class SessionManager {
5555
const absoluteFolder = defaultFolder ? resolve(root, defaultFolder) : root
5656
const resolvedFolder = existsSync(absoluteFolder) ? absoluteFolder : root
5757

58-
const settings: Record<string, unknown> = {
59-
'git.openRepositoryInParentFolders': 'never',
60-
'security.workspace.trust.enabled': false,
61-
}
58+
const settings: Record<string, unknown> = {}
6259
if (colorScheme) settings['workbench.colorTheme'] = COLOR_THEMES[colorScheme]
6360
if (fontSize) settings['editor.fontSize'] = fontSize
6461
if (hideMinimap) settings['editor.minimap.enabled'] = false
6562
if (hideActivityBar) settings['workbench.activityBar.location'] = 'hidden'
6663
if (hideStatusBar) settings['workbench.statusBar.visible'] = false
6764

68-
const userDataDir = mkdtempSync(join(tmpdir(), 'livecode-'))
69-
mkdirSync(join(userDataDir, 'User'), { recursive: true })
70-
writeFileSync(join(userDataDir, 'User', 'settings.json'), JSON.stringify(settings))
65+
let userDataDir: string | undefined
66+
if (Object.keys(settings).length > 0) {
67+
userDataDir = mkdtempSync(join(tmpdir(), 'livecode-'))
68+
mkdirSync(join(userDataDir, 'User'), { recursive: true })
69+
writeFileSync(join(userDataDir, 'User', 'settings.json'), JSON.stringify(settings))
70+
}
7171

7272
const handle = await Promise.race([
7373
startCodeServer({
7474
defaultFolder: resolvedFolder,
7575
host: '127.0.0.1',
7676
port,
77-
...(userDataDir ? { vscode: { 'user-data-dir': userDataDir } } : {}),
77+
vscode: {
78+
'disable-workspace-trust': true,
79+
...(userDataDir ? { 'user-data-dir': userDataDir } : {}),
80+
},
7881
}),
7982
new Promise<never>((_, reject) =>
8083
setTimeout(() => reject(new Error(`timeout after ${startTimeout}ms`)), startTimeout),
@@ -101,7 +104,7 @@ export class SessionManager {
101104
const entry = this.sessions.get(session)
102105
if (!entry) return
103106
entry.close().catch(() => {})
104-
rmSync(entry.userDataDir, { recursive: true, force: true })
107+
if (entry.userDataDir) rmSync(entry.userDataDir, { recursive: true, force: true })
105108
this.sessions.delete(session)
106109
this.usedPorts.delete(entry.port)
107110
console.log(`[livecode] Session "${session}" stopped`)
@@ -110,7 +113,7 @@ export class SessionManager {
110113
cleanup(): void {
111114
for (const [, entry] of this.sessions) {
112115
entry.close().catch(() => {})
113-
rmSync(entry.userDataDir, { recursive: true, force: true })
116+
if (entry.userDataDir) rmSync(entry.userDataDir, { recursive: true, force: true })
114117
}
115118
this.sessions.clear()
116119
this.usedPorts.clear()

0 commit comments

Comments
 (0)