UNPKG

@shutootaki/gwm

Version:
87 lines 3.67 kB
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime"; import { useState } from 'react'; import { Text, Box } from 'ink'; import { execSync, spawnSync } from 'child_process'; import { WorktreeSelector } from './WorktreeSelector.js'; import { formatErrorForDisplay } from '../utils/index.js'; import { escapeShellArg } from '../utils/shell.js'; export const WorktreeGo = ({ query, openCode = false, openCursor = false, }) => { const [error, setError] = useState(null); const [success, setSuccess] = useState(null); const handleSelect = (worktree) => { if (openCode) { try { // codeコマンドが存在するかチェック execSync('which code', { stdio: 'ignore' }); // VS Codeでディレクトリを開く(適切にエスケープ) execSync(`code ${escapeShellArg(worktree.path)}`, { stdio: 'inherit' }); setSuccess(`Opened ${worktree.branch} in Editor`); setTimeout(() => process.exit(0), 1000); } catch (err) { if (err instanceof Error && err.message.includes('which code')) { setError('Editor command "code" not found. Please install Editor and add it to your PATH.'); } else { setError(formatErrorForDisplay(err)); } } } else if (openCursor) { try { // cursor コマンドが存在するかチェック execSync('which cursor', { stdio: 'ignore' }); execSync(`cursor ${escapeShellArg(worktree.path)}`, { stdio: 'inherit', }); setSuccess(`Opened ${worktree.branch} in Cursor`); setTimeout(() => process.exit(0), 1000); } catch (err) { if (err instanceof Error && err.message.includes('which cursor')) { setError('Cursor command "cursor" not found. Please install Cursor and add it to your PATH.'); } else { setError(formatErrorForDisplay(err)); } } } else { // サブシェルを起動して選択したディレクトリへ移動 try { const userShell = process.env.SHELL || (process.platform === 'win32' ? process.env.COMSPEC || 'cmd.exe' : '/bin/bash'); spawnSync(userShell, { cwd: worktree.path, stdio: 'inherit', env: process.env, }); } catch (err) { setError(formatErrorForDisplay(err)); } finally { process.exit(0); } } }; const handleCancel = () => { // Exit without output process.exit(0); }; const placeholderText = openCode ? 'Select a worktree to open in VS Code:' : openCursor ? 'Select a worktree to open in Cursor:' : 'Select a worktree to go to:'; if (success) { return (_jsx(Box, { children: _jsxs(Text, { color: "green", children: ["\u2713 ", success] }) })); } if (error) { return (_jsx(Box, { children: _jsxs(Text, { color: "red", children: ["\u2717 Error: ", error] }) })); } return (_jsx(WorktreeSelector, { onSelect: handleSelect, onCancel: handleCancel, initialQuery: query, placeholder: placeholderText })); }; //# sourceMappingURL=WorktreeGo.js.map