Skip to content

Commit ebed480

Browse files
committed
refactor(app): 按文件运行输入记忆抽离为 useRunConfig composable
run-configs 的加载/保存/切档与防抖持久化(含两处 watch)移入独立 composable; App 仅传入 currentFilePath 与三个输入 ref。零行为变化。
1 parent e16a85d commit ebed480

2 files changed

Lines changed: 56 additions & 38 deletions

File tree

src/App.vue

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,7 @@ import {useWorkspaceRoots} from './composables/useWorkspaceRoots'
539539
import {useGitStatus} from './composables/useGitStatus'
540540
import {useSessionTabs} from './composables/useSessionTabs'
541541
import {useEditorContextMenu} from './composables/useEditorContextMenu'
542+
import {useRunConfig} from './composables/useRunConfig'
542543
import EditorTabs from './components/EditorTabs.vue'
543544
import IndentControl from './components/IndentControl.vue'
544545
import Sidebar from './components/Sidebar.vue'
@@ -1779,44 +1780,8 @@ const handleSave = async () => {
17791780
}
17801781
17811782
// ===== 按文件记忆运行配置(args/stdin/env)=====
1782-
const RUN_CONFIGS_KEY = 'run-configs'
1783-
type RunConfig = { args: string, stdin: string, env: string }
1784-
const loadRunConfigs = (): Record<string, RunConfig> =>
1785-
kvGetJSON<Record<string, RunConfig>>(RUN_CONFIGS_KEY, {})
1786-
// 把当前输入写入指定文件的配置(全空则删除该条)
1787-
const saveRunConfig = (path: string) => {
1788-
const map = loadRunConfigs()
1789-
if (!runArgs.value && !runStdin.value && !runEnv.value) {
1790-
delete map[path]
1791-
}
1792-
else {
1793-
map[path] = {args: runArgs.value, stdin: runStdin.value, env: runEnv.value}
1794-
}
1795-
kvSetJSON(RUN_CONFIGS_KEY, map)
1796-
}
1797-
// 载入指定文件的配置(无则清空)
1798-
const loadRunConfig = (path: string | null) => {
1799-
const cfg = path ? loadRunConfigs()[path] : null
1800-
runArgs.value = cfg?.args || ''
1801-
runStdin.value = cfg?.stdin || ''
1802-
runEnv.value = cfg?.env || ''
1803-
}
1804-
1805-
// 切换文件时:保存旧文件输入、载入新文件输入
1806-
watch(currentFilePath, (np, op) => {
1807-
if (op) {
1808-
saveRunConfig(op)
1809-
}
1810-
loadRunConfig(np)
1811-
})
1812-
1813-
// 编辑输入时防抖保存到当前文件
1814-
const persistRunConfig = debounce(() => {
1815-
if (currentFilePath.value) {
1816-
saveRunConfig(currentFilePath.value)
1817-
}
1818-
}, 400)
1819-
watch([runArgs, runStdin, runEnv], () => persistRunConfig())
1783+
// 按文件记忆运行输入(参数/stdin/环境变量)—— 抽离到 useRunConfig
1784+
useRunConfig(currentFilePath, runArgs, runStdin, runEnv)
18201785
18211786
// 解析环境变量文本(KEY=值,按换行或分号分隔)
18221787
const parseEnv = (text: string): Record<string, string> => {

src/composables/useRunConfig.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// 按文件记忆运行输入(参数/stdin/环境变量):切换文件时保存旧、载入新,编辑时防抖保存。
2+
import {watch, type Ref} from 'vue'
3+
import {debounce} from 'lodash-es'
4+
import {kvGetJSON, kvSetJSON} from './useKvStore'
5+
6+
const RUN_CONFIGS_KEY = 'run-configs'
7+
type RunConfig = { args: string, stdin: string, env: string }
8+
9+
export function useRunConfig(
10+
currentFilePath: Ref<string | null>,
11+
runArgs: Ref<string>,
12+
runStdin: Ref<string>,
13+
runEnv: Ref<string>
14+
) {
15+
const loadRunConfigs = (): Record<string, RunConfig> =>
16+
kvGetJSON<Record<string, RunConfig>>(RUN_CONFIGS_KEY, {})
17+
18+
// 把当前输入写入指定文件的配置(全空则删除该条)
19+
const saveRunConfig = (path: string) => {
20+
const map = loadRunConfigs()
21+
if (!runArgs.value && !runStdin.value && !runEnv.value) {
22+
delete map[path]
23+
}
24+
else {
25+
map[path] = {args: runArgs.value, stdin: runStdin.value, env: runEnv.value}
26+
}
27+
kvSetJSON(RUN_CONFIGS_KEY, map)
28+
}
29+
30+
// 载入指定文件的配置(无则清空)
31+
const loadRunConfig = (path: string | null) => {
32+
const cfg = path ? loadRunConfigs()[path] : null
33+
runArgs.value = cfg?.args || ''
34+
runStdin.value = cfg?.stdin || ''
35+
runEnv.value = cfg?.env || ''
36+
}
37+
38+
// 切换文件时:保存旧文件输入、载入新文件输入
39+
watch(currentFilePath, (np, op) => {
40+
if (op) {
41+
saveRunConfig(op)
42+
}
43+
loadRunConfig(np)
44+
})
45+
46+
// 编辑输入时防抖保存到当前文件
47+
const persistRunConfig = debounce(() => {
48+
if (currentFilePath.value) {
49+
saveRunConfig(currentFilePath.value)
50+
}
51+
}, 400)
52+
watch([runArgs, runStdin, runEnv], () => persistRunConfig())
53+
}

0 commit comments

Comments
 (0)