mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-03-16 00:03:38 +01:00
fix broken io#run on Windows
This commit is contained in:
@@ -96,6 +96,21 @@ function IO() //{{{
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isAbsolutePath(path)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Components.classes["@mozilla.org/file/local;1"]
|
||||||
|
.createInstance(Components.interfaces.nsILocalFile)
|
||||||
|
.initWithPath(path);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var downloadListener = {
|
var downloadListener = {
|
||||||
onDownloadStateChange: function (state, download)
|
onDownloadStateChange: function (state, download)
|
||||||
{
|
{
|
||||||
@@ -174,9 +189,9 @@ function IO() //{{{
|
|||||||
|
|
||||||
// go directly to an absolute path or look for a relative path
|
// go directly to an absolute path or look for a relative path
|
||||||
// match in 'cdpath'
|
// match in 'cdpath'
|
||||||
if (/^(~|\/|[a-z]:|\.\/|\.\.\/)/i.test(args))
|
// TODO: handle ../ and ./ paths
|
||||||
|
if (isAbsolutePath(args))
|
||||||
{
|
{
|
||||||
// TODO: apparently we don't handle ../ or ./ paths yet
|
|
||||||
if (io.setCurrentDirectory(args))
|
if (io.setCurrentDirectory(args))
|
||||||
liberator.echo(io.getCurrentDirectory().path);
|
liberator.echo(io.getCurrentDirectory().path);
|
||||||
}
|
}
|
||||||
@@ -207,7 +222,7 @@ function IO() //{{{
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
argCount: "?",
|
argCount: "+", // FIXME: "?"
|
||||||
completer: function (context) completion.file(context, true),
|
completer: function (context) completion.file(context, true),
|
||||||
literal: true
|
literal: true
|
||||||
});
|
});
|
||||||
@@ -483,7 +498,7 @@ function IO() //{{{
|
|||||||
{
|
{
|
||||||
let expandedPath = ioManager.expandPath(path);
|
let expandedPath = ioManager.expandPath(path);
|
||||||
|
|
||||||
if (!/^([a-zA-Z]:|\/)/.test(expandedPath) && !noCheckPWD) // doesn't start with /, C:
|
if (!isAbsolutePath(expandedPath) && !noCheckPWD)
|
||||||
file = joinPaths(ioManager.getCurrentDirectory().path, expandedPath);
|
file = joinPaths(ioManager.getCurrentDirectory().path, expandedPath);
|
||||||
else
|
else
|
||||||
file.initWithPath(expandedPath);
|
file.initWithPath(expandedPath);
|
||||||
@@ -614,19 +629,22 @@ function IO() //{{{
|
|||||||
|
|
||||||
run: function (program, args, blocking)
|
run: function (program, args, blocking)
|
||||||
{
|
{
|
||||||
if (!args)
|
args = args || [];
|
||||||
args = [];
|
blocking = !!blocking;
|
||||||
|
|
||||||
if (typeof blocking != "boolean")
|
let file;
|
||||||
blocking = false;
|
|
||||||
|
|
||||||
try
|
if (isAbsolutePath(program))
|
||||||
{
|
{
|
||||||
var file = ioManager.getFile(program, !WINDOWS);
|
file = ioManager.getFile(program, true);
|
||||||
}
|
}
|
||||||
catch (e)
|
else
|
||||||
{
|
{
|
||||||
var dirs = environmentService.get("PATH").split(WINDOWS ? ";" : ":");
|
let dirs = environmentService.get("PATH").split(WINDOWS ? ";" : ":");
|
||||||
|
// Windows tries the cwd first TODO: desirable?
|
||||||
|
if (WINDOWS)
|
||||||
|
dirs = [io.getCurrentDirectory().path].concat(dirs);
|
||||||
|
|
||||||
lookup:
|
lookup:
|
||||||
for (let [,dir] in Iterator(dirs))
|
for (let [,dir] in Iterator(dirs))
|
||||||
{
|
{
|
||||||
@@ -641,7 +659,7 @@ lookup:
|
|||||||
if (WINDOWS)
|
if (WINDOWS)
|
||||||
{
|
{
|
||||||
let extensions = environmentService.get("PATHEXT").split(";");
|
let extensions = environmentService.get("PATHEXT").split(";");
|
||||||
for (let [,extension] in Iterator(extension))
|
for (let [,extension] in Iterator(extensions))
|
||||||
{
|
{
|
||||||
file = joinPaths(dir, program + extension);
|
file = joinPaths(dir, program + extension);
|
||||||
if (file.exists())
|
if (file.exists())
|
||||||
@@ -653,13 +671,13 @@ lookup:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!file.exists())
|
if (!file || !file.exists())
|
||||||
{
|
{
|
||||||
liberator.echoerr("Command not found: " + program);
|
liberator.echoerr("Command not found: " + program);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
var process = Components.classes["@mozilla.org/process/util;1"]
|
let process = Components.classes["@mozilla.org/process/util;1"]
|
||||||
.createInstance(Components.interfaces.nsIProcess);
|
.createInstance(Components.interfaces.nsIProcess);
|
||||||
|
|
||||||
process.init(file);
|
process.init(file);
|
||||||
|
|||||||
Reference in New Issue
Block a user