diff --git a/common/content/editor.js b/common/content/editor.js index 2b4aaafc..a0a4383b 100644 --- a/common/content/editor.js +++ b/common/content/editor.js @@ -479,33 +479,26 @@ var Editor = Module("editor", { type: "operator" }; - function caretExecute(arg, again) { - function fixSelection() { - sel.removeAllRanges(); - sel.addRange(RangeFind.endpoint( - RangeFind.nodeRange(buffer.focusedFrame.document.documentElement), - true)); - } - - let controller = util.selectionController(document.commandDispatcher.focusedWindow); + function caretExecute(arg) { + let win = document.commandDispatcher.focusedWindow; + let controller = util.selectionController(win); let sel = controller.getSelection(controller.SELECTION_NORMAL); - if (!sel.rangeCount) // Hack. - fixSelection(); - try { + let buffer = Buffer(win); + if (!sel.rangeCount) // Hack. + buffer.resetCaret(); + + if (caretModeMethod == "pageMove") { // Grr. + buffer.scrollVertical("pages", caretModeArg ? 1 : -1); + buffer.resetCaret(); + } + else controller[caretModeMethod](caretModeArg, arg); - } - catch (e) { - dactyl.assert(again && e.result === Cr.NS_ERROR_FAILURE); - fixSelection(); - caretExecute(arg, false); - } } mappings.add([modes.VISUAL], keys, description, function ({ count }) { - if (!count) - count = 1; + count = count || 1; let caret = !dactyl.focusedElement; let editor_ = Editor.getEditor(null); @@ -525,14 +518,13 @@ var Editor = Module("editor", { mappings.add([modes.CARET, modes.TEXT_EDIT, modes.OPERATOR], keys, description, function ({ count }) { - if (!count) - count = 1; + count = count || 1; if (Editor.getEditor(null)) editor.executeCommand(textEditCommand, count); else { while (count--) - caretExecute(false, true); + caretExecute(false); } }, extraInfo); diff --git a/common/modules/buffer.jsm b/common/modules/buffer.jsm index 2af2c102..e4e140f8 100644 --- a/common/modules/buffer.jsm +++ b/common/modules/buffer.jsm @@ -505,9 +505,7 @@ var Buffer = Module("Buffer", { if (sel.rangeCount) { var range = sel.getRangeAt(0); - - let vis = visible(range); - if (vis.width > 0 && vis.height > 0) + if (visible(range).height > 0) return; var { rect } = DOM(range);