You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.8 KiB
72 lines
1.8 KiB
var isWindows = process.platform === 'win32' |
|
var path = require('path') |
|
var exec = require('child_process').exec |
|
var osTmpdir = require('os-tmpdir') |
|
var osHomedir = require('os-homedir') |
|
|
|
// looking up envs is a bit costly. |
|
// Also, sometimes we want to have a fallback |
|
// Pass in a callback to wait for the fallback on failures |
|
// After the first lookup, always returns the same thing. |
|
function memo (key, lookup, fallback) { |
|
var fell = false |
|
var falling = false |
|
exports[key] = function (cb) { |
|
var val = lookup() |
|
if (!val && !fell && !falling && fallback) { |
|
fell = true |
|
falling = true |
|
exec(fallback, function (er, output, stderr) { |
|
falling = false |
|
if (er) return // oh well, we tried |
|
val = output.trim() |
|
}) |
|
} |
|
exports[key] = function (cb) { |
|
if (cb) process.nextTick(cb.bind(null, null, val)) |
|
return val |
|
} |
|
if (cb && !falling) process.nextTick(cb.bind(null, null, val)) |
|
return val |
|
} |
|
} |
|
|
|
memo('user', function () { |
|
return ( isWindows |
|
? process.env.USERDOMAIN + '\\' + process.env.USERNAME |
|
: process.env.USER |
|
) |
|
}, 'whoami') |
|
|
|
memo('prompt', function () { |
|
return isWindows ? process.env.PROMPT : process.env.PS1 |
|
}) |
|
|
|
memo('hostname', function () { |
|
return isWindows ? process.env.COMPUTERNAME : process.env.HOSTNAME |
|
}, 'hostname') |
|
|
|
memo('tmpdir', function () { |
|
return osTmpdir() |
|
}) |
|
|
|
memo('home', function () { |
|
return osHomedir() |
|
}) |
|
|
|
memo('path', function () { |
|
return (process.env.PATH || |
|
process.env.Path || |
|
process.env.path).split(isWindows ? ';' : ':') |
|
}) |
|
|
|
memo('editor', function () { |
|
return process.env.EDITOR || |
|
process.env.VISUAL || |
|
(isWindows ? 'notepad.exe' : 'vi') |
|
}) |
|
|
|
memo('shell', function () { |
|
return isWindows ? process.env.ComSpec || 'cmd' |
|
: process.env.SHELL || 'bash' |
|
})
|
|
|