diff --git a/osenv.js b/osenv.js index 7836faf..f2a4844 100644 --- a/osenv.js +++ b/osenv.js @@ -3,6 +3,11 @@ var path = require('path') var exec = require('child_process').exec var os = require('os') +var customEditor = '' +exports.setCustomEditorVariable = function(val) { + customEditor = val +} + // 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 @@ -62,7 +67,8 @@ memo('path', function () { }) memo('editor', function () { - return process.env.EDITOR || + return process.env[customEditor] || + process.env.EDITOR || process.env.VISUAL || (isWindows ? 'notepad.exe' : 'vi') }) diff --git a/test/unix.js b/test/unix.js index f87cbfb..2a2f781 100644 --- a/test/unix.js +++ b/test/unix.js @@ -19,6 +19,7 @@ process.env.TMP = '/tmp' process.env.TEMP = '/temp' process.env.PATH = '/opt/local/bin:/usr/local/bin:/usr/bin/:bin' process.env.PS1 = '(o_o) $ ' +process.env.CUSTOM_EDITOR = 'custom_edit' process.env.EDITOR = 'edit' process.env.VISUAL = 'visualedit' process.env.SHELL = 'zsh' @@ -51,6 +52,18 @@ tap.test('basic unix sanity test', function (t) { t.equal(osenv.tmpdir(), '/tmp') t.equal(osenv.editor(), 'edit') + + delete require.cache[require.resolve('../osenv.js')] + var osenv = require('../osenv.js') + osenv.setCustomEditorVariable('CUSTOM_EDITOR') + t.equal(osenv.editor(), 'custom_edit') + + process.env.CUSTOM_EDITOR = '' + delete require.cache[require.resolve('../osenv.js')] + var osenv = require('../osenv.js') + osenv.setCustomEditorVariable('CUSTOM_EDITOR') + t.equal(osenv.editor(), 'edit') + process.env.EDITOR = '' delete require.cache[require.resolve('../osenv.js')] var osenv = require('../osenv.js') diff --git a/test/windows.js b/test/windows.js index 63ca453..9738970 100644 --- a/test/windows.js +++ b/test/windows.js @@ -55,6 +55,18 @@ tap.test('basic windows sanity test', function (t) { t.equal(osenv.tmpdir(), 'c:\\windows\\temp') t.equal(osenv.editor(), 'edit') + + delete require.cache[require.resolve('../osenv.js')] + var osenv = require('../osenv.js') + osenv.setCustomEditorVariable('CUSTOM_EDITOR') + t.equal(osenv.editor(), 'custom_edit') + + process.env.CUSTOM_EDITOR = '' + delete require.cache[require.resolve('../osenv.js')] + var osenv = require('../osenv.js') + osenv.setCustomEditorVariable('CUSTOM_EDITOR') + t.equal(osenv.editor(), 'edit') + process.env.EDITOR = '' delete require.cache[require.resolve('../osenv.js')] var osenv = require('../osenv.js')