detectRunningIDEs method
Detects running IDEs by process inspection.
Implementation
Future<List<IdeType>> detectRunningIDEs() async {
final runningIDEs = <IdeType>[];
try {
if (Platform.isMacOS) {
final result = await Process.run('bash', [
'-c',
'ps aux | grep -E "Visual Studio Code|Code Helper|Cursor Helper|Windsurf Helper|IntelliJ IDEA|PyCharm|WebStorm|PhpStorm|RubyMine|CLion|GoLand|Rider|DataGrip|AppCode|DataSpell|Android Studio" | grep -v grep',
]);
final stdout = result.stdout as String? ?? '';
for (final entry in supportedIdeConfigs.entries) {
for (final keyword in entry.value.processKeywordsMac) {
if (stdout.contains(keyword)) {
runningIDEs.add(entry.key);
break;
}
}
}
} else if (Platform.isLinux) {
final result = await Process.run('bash', [
'-c',
'ps aux | grep -E "code|cursor|windsurf|idea|pycharm|webstorm|phpstorm|rubymine|clion|goland|rider|datagrip|dataspell|android-studio" | grep -v grep',
]);
final stdout = (result.stdout as String? ?? '').toLowerCase();
for (final entry in supportedIdeConfigs.entries) {
for (final keyword in entry.value.processKeywordsLinux) {
if (stdout.contains(keyword)) {
if (entry.key != IdeType.vscode) {
runningIDEs.add(entry.key);
break;
} else if (!stdout.contains('cursor') &&
!stdout.contains('appcode')) {
runningIDEs.add(entry.key);
break;
}
}
}
}
}
} catch (e) {
_logError(e);
}
cachedRunningIDEs.value = runningIDEs;
hasCachedResults.value = true;
return runningIDEs;
}