mirror of
https://github.com/quine-global/hyper.git
synced 2026-01-15 05:08:41 -09:00
Improve Windows default editor detection (#2631)
This commit is contained in:
parent
f4e32eee49
commit
16fcb2cb70
1 changed files with 30 additions and 39 deletions
|
|
@ -3,61 +3,52 @@ const {cfgPath} = require('./paths');
|
||||||
|
|
||||||
module.exports = () => Promise.resolve(shell.openItem(cfgPath));
|
module.exports = () => Promise.resolve(shell.openItem(cfgPath));
|
||||||
|
|
||||||
|
// Windows opens .js files with WScript.exe by default
|
||||||
|
// If the user hasn't set up an editor for .js files, we fallback to notepad.
|
||||||
if (process.platform === 'win32') {
|
if (process.platform === 'win32') {
|
||||||
const Registry = require('winreg');
|
const Registry = require('winreg');
|
||||||
const {exec} = require('child_process');
|
const {exec} = require('child_process');
|
||||||
|
|
||||||
// Windows opens .js files with WScript.exe by default
|
const getUserChoiceKey = async () => {
|
||||||
// If the user hasn't set up an editor for .js files, we fallback to notepad.
|
// Load FileExts keys for .js files
|
||||||
const getFileExtKeys = () =>
|
const keys = await new Promise((resolve, reject) => {
|
||||||
new Promise((resolve, reject) => {
|
new Registry({
|
||||||
Registry({
|
|
||||||
hive: Registry.HKCU,
|
hive: Registry.HKCU,
|
||||||
key: '\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.js'
|
key: '\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.js'
|
||||||
}).keys((error, keys) => {
|
}).keys((error, items) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
reject(error);
|
reject(error);
|
||||||
} else {
|
} else {
|
||||||
resolve(keys || []);
|
resolve(items || []);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const hasDefaultSet = async () => {
|
// Find UserChoice key
|
||||||
const keys = await getFileExtKeys();
|
const userChoice = keys.filter(k => k.key.endsWith('UserChoice'));
|
||||||
|
return userChoice[0];
|
||||||
|
};
|
||||||
|
|
||||||
const valueGroups = await Promise.all(
|
const hasDefaultSet = async () => {
|
||||||
keys.map(
|
let userChoice = await getUserChoiceKey();
|
||||||
key =>
|
if (!userChoice) return false;
|
||||||
new Promise((resolve, reject) => {
|
|
||||||
key.values((error, items) => {
|
// Load key values
|
||||||
if (error) {
|
let values = await new Promise((resolve, reject) => {
|
||||||
reject(error);
|
userChoice.values((error, items) => {
|
||||||
}
|
if (error) {
|
||||||
resolve(items.map(item => item.value || '') || []);
|
reject(error);
|
||||||
});
|
}
|
||||||
})
|
resolve(items.map(item => item.value || '') || []);
|
||||||
)
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Look for default program
|
||||||
|
const hasDefaultProgramConfigured = values.some(
|
||||||
|
value => value && typeof value === 'string' && value.endsWith('.exe') && !value.includes('WScript.exe')
|
||||||
);
|
);
|
||||||
|
|
||||||
const values = valueGroups
|
return hasDefaultProgramConfigured;
|
||||||
.reduce((allValues, groupValues) => [...allValues, ...groupValues], [])
|
|
||||||
.filter(value => value && typeof value === 'string');
|
|
||||||
|
|
||||||
// No default app set
|
|
||||||
if (values.length === 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// WScript is in default apps list
|
|
||||||
if (values.some(value => value.includes('WScript.exe'))) {
|
|
||||||
const userDefaults = values.filter(value => value.endsWith('.exe') && !value.includes('WScript.exe'));
|
|
||||||
|
|
||||||
// WScript.exe is overidden
|
|
||||||
return userDefaults.length > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// This mimics shell.openItem, true if it worked, false if not.
|
// This mimics shell.openItem, true if it worked, false if not.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue