1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-23 15:22:26 +01:00

Highlight invalid syntax (sort-of) in javascript completion.

This commit is contained in:
Kris Maglione
2008-10-15 19:40:37 +00:00
parent 07d8bbc159
commit d7872c54f2
2 changed files with 30 additions and 22 deletions

View File

@@ -217,9 +217,13 @@ function Completion() //{{{
let pop = function pop(arg) let pop = function pop(arg)
{ {
if (top[CHAR] != arg) if (top[CHAR] != arg)
{
commandline.highlight(top[OFFSET] + 1, i + 1, "SPELLCHECK");
commandline.highlight(top[OFFSET], top[OFFSET] + 1, "FIND");
throw new Error("Invalid JS"); throw new Error("Invalid JS");
}
if (i == str.length - 1) if (i == str.length - 1)
completion.parenMatch = top[OFFSET]; commandline.highlight(top[OFFSET], top[OFFSET] + 1, "FIND");
// The closing character of this stack frame will have pushed a new // The closing character of this stack frame will have pushed a new
// statement, leaving us with an empty statement. This doesn't matter, // statement, leaving us with an empty statement. This doesn't matter,
// now, as we simply throw away the frame when we pop it, but it may later. // now, as we simply throw away the frame when we pop it, but it may later.
@@ -324,6 +328,9 @@ function Completion() //{{{
this.complete = function complete(string) this.complete = function complete(string)
{ {
commandline.highlight(0, 0, "SPELLCHECK");
commandline.highlight(0, 0, "FIND");
let self = this; let self = this;
try try
{ {

View File

@@ -1164,33 +1164,34 @@ function CommandLine() //{{{
} }
}, },
highlight: function (start, end, type)
{
// FIXME: Kludge.
try // Firefox <3.1 doesn't have repaintSelection
{
const selType = Components.interfaces.nsISelectionController["SELECTION_" + type];
let editor = document.getElementById("liberator-commandline-command")
.inputField.QueryInterface(Components.interfaces.nsIDOMNSEditableElement).editor;
let sel = editor.selectionController.getSelection(selType);
sel.removeAllRanges();
let range = editor.selection.getRangeAt(0).cloneRange();
let n = this.getCommand().indexOf(" ") + 1;
let node = range.startContainer;
range.setStart(node, start + n);
range.setEnd(node, end + n);
sel.addRange(range);
editor.selectionController.repaintSelection(selType);
}
catch (e) {}
},
// to allow asynchronous adding of completions // to allow asynchronous adding of completions
setCompletions: function (compl, start) setCompletions: function (compl, start)
{ {
if (liberator.mode != modes.COMMAND_LINE) if (liberator.mode != modes.COMMAND_LINE)
return; return;
// FIXME: Kludge.
try // Firefox <3.1 doesn't have repaintSelection
{
const SEL_TYPE = Components.interfaces.nsISelectionController.SELECTION_FIND;
let editor = document.getElementById("liberator-commandline-command")
.inputField.QueryInterface(Components.interfaces.nsIDOMNSEditableElement).editor;
let sel = editor.selectionController.getSelection(SEL_TYPE);
sel.removeAllRanges();
if (completion.parenMatch != null)
{
let range = editor.selection.getRangeAt(0).cloneRange();
let paren = completion.parenMatch + this.getCommand().indexOf(" ") + 1;
let node = range.startContainer;
range.setStart(node, paren);
range.setEnd(node, paren + 1);
sel.addRange(range);
editor.selectionController.repaintSelection(SEL_TYPE);
}
}
catch (e) {}
/* Only hide if not pending. /* Only hide if not pending.
if (compl.length == 0) if (compl.length == 0)
return completionList.hide(); return completionList.hide();