name = "list"; | |
group = "files"; | |
shortDescription = "List lines of a script"; | |
longDescription = "list <file>:<line> : Lists lines around the given location."; | |
longDescription += "\nlist <line> : Lists lines in the current file."; | |
argumentTypes = [ "script-filename" ]; | |
listLineNumber = 1; | |
listScriptId = -1; | |
lastSessionId = -1; | |
lastFrameIndex = -1; | |
function execute() { | |
state = 0; | |
if (arguments.length > 0) { | |
var arg = arguments[0]; | |
var colonIndex = arg.lastIndexOf(':'); | |
var fileName; | |
var lineNumber; | |
if (colonIndex == -1) { | |
lineNumber = parseInt(arg); | |
if (isNaN(lineNumber)) { | |
fileName = arg; | |
lineNumber = 1; | |
} | |
} else if (colonIndex == 0) { | |
fileName = arg; | |
lineNumber = 1; | |
} else { | |
fileName = arg.slice(0, colonIndex); | |
lineNumber = parseInt(arg.slice(colonIndex+1)); | |
} | |
listLineNumber = Math.max(lineNumber, 1); | |
if (fileName != undefined) { | |
scheduleResolveScript(fileName); | |
state = 1; | |
} else { | |
setCurrentLineNumber(listLineNumber); | |
execute(); | |
} | |
} else { | |
if ((getSessionId() != lastSessionId) | |
|| (getCurrentFrameIndex() != lastFrameIndex) | |
|| (listScriptId == -1)) { | |
listScriptId = getCurrentScriptId(); | |
listLineNumber = getCurrentLineNumber(); | |
lastSessionId = getSessionId(); | |
lastFrameIndex = getCurrentFrameIndex(); | |
} | |
scheduleGetScriptData(listScriptId); | |
state = 2; | |
} | |
}; | |
function handleResponse(resp) { | |
if (state == 1) { | |
var id = resp.result; | |
if (id == -1) { | |
message("That script isn't loaded."); | |
state = 0; | |
return; | |
} | |
listScriptId = id; | |
scheduleGetScriptData(listScriptId); | |
state = 2; | |
} else if (state == 2) { | |
var data = resp.result; | |
if (data == undefined) { | |
message("No script."); | |
state = 0; | |
return; | |
} | |
var base = data.baseLineNumber; | |
var lines = data.contents.split('\n'); | |
var start = Math.max(listLineNumber - 5, base); | |
for (var i = start; i < start + 10; ++i) { | |
var ln = lines[i - base]; | |
var msg = String(i); | |
if (ln != undefined) | |
msg += "\t" + ln; | |
message(msg); | |
} | |
listLineNumber += 10; | |
state = 0; | |
} | |
} |