doRun method
Implementation
@override
Future<int> doRun() async {
final config = CustomCommandsConfig.instance;
final configPath = config.getOrCreateConfigPath();
// Create config file if it doesn't exist
final configFile = File(configPath);
if (!configFile.existsSync()) {
printInfo('Creating new config file: $configPath');
config.save();
}
// Determine editor to use
final editorArg = argResults!['editor'] as String?;
final rawEditor = editorArg ??
Platform.environment['EDITOR'] ??
Platform.environment['VISUAL'] ??
(Platform.isMacOS || Platform.isLinux ? 'vim' : 'notepad');
// SECURITY: Validate editor against whitelist
String editor;
try {
editor = _validateEditor(rawEditor);
} catch (e) {
printError(e.toString());
return 1;
}
printInfo('Opening config file in $editor: $configPath');
try {
final result = await Process.run(
editor,
[configPath],
);
if (result.exitCode == 0) {
printInfo('');
printInfo('Reloading configuration...');
// Reload configuration
try {
CustomCommandsConfig.reload();
printInfo('Configuration reloaded successfully');
return 0;
} catch (e) {
printError('Failed to reload configuration: $e');
printError('Please check the config file for errors');
return 1;
}
} else {
printError('Editor exited with code: ${result.exitCode}');
return result.exitCode;
}
} catch (e) {
printError('Failed to open editor: $e');
printInfo('');
printInfo('You can edit the file manually at: $configPath');
return 1;
}
}