From 800516acbac8c9365e8594bb9cdd1070e91468ca Mon Sep 17 00:00:00 2001 From: Martin Stubenschrott Date: Sat, 23 Feb 2008 23:00:43 +0000 Subject: [PATCH] more refactoring --- content/buffer.js | 4 + content/events.js | 48 ++++++ content/mappings.js | 330 +++++++++++++------------------------- content/vim.js | 119 ++++++-------- content/vimperator.js | 38 ++++- locale/en-US/starting.txt | 4 +- 6 files changed, 255 insertions(+), 288 deletions(-) diff --git a/content/buffer.js b/content/buffer.js index 1585640f..4e73c028 100644 --- a/content/buffer.js +++ b/content/buffer.js @@ -194,6 +194,10 @@ vimperator.Buffer = function (browserModes) //{{{ vimperator.options.setPref("accessibility.browsewithcaret", true); }); + vimperator.mappings.add(modes, [""], + "Stop loading", + function() { BrowserStop(); }); + // scrolling vimperator.mappings.add(modes, ["j", "", ""], "Scroll document down", diff --git a/content/events.js b/content/events.js index 731ea644..e8a8a1b0 100644 --- a/content/events.js +++ b/content/events.js @@ -464,7 +464,55 @@ vimperator.Events = function () //{{{ } }, 100); + /////////////////////////////////////////////////////////////////////////////}}} + ////////////////////// MAPPINGS //////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////{{{ + vimperator.mappings.add(vimperator.modes.all, + ["", ""], "Focus content", + function () { vimperator.events.onEscape(); }); + + // add the ":" mapping in all but insert mode mappings + vimperator.mappings.add([vimperator.modes.NORMAL, vimperator.modes.VISUAL, vimperator.modes.HINTS, vimperator.modes.MESSAGE, vimperator.modes.CARET, vimperator.modes.TEXTAREA], + [":"], "Enter command line mode", + function () { vimperator.commandline.open(":", "", vimperator.modes.EX); }); + + // focus events + vimperator.mappings.add([vimperator.modes.NORMAL, vimperator.modes.VISUAL, vimperator.modes.CARET], + [""], "Advance keyboard focus", + function () { document.commandDispatcher.advanceFocus(); }); + + vimperator.mappings.add([vimperator.modes.NORMAL, vimperator.modes.VISUAL, vimperator.modes.CARET, vimperator.modes.INSERT, vimperator.modes.TEXTAREA], + [""], "Rewind keyboard focus", + function () { document.commandDispatcher.rewindFocus(); }); + + vimperator.mappings.add(vimperator.modes.all, + [""], "Temporarily quit Vimperator mode", + function () { vimperator.modes.passAllKeys = true; }); + + vimperator.mappings.add(vimperator.modes.all, + [""], "Pass through next key", + function () { vimperator.modes.passNextKey = true; }); + + vimperator.mappings.add(vimperator.modes.all, + [""], "Do nothing", + function () { return; }); + + // macros + vimperator.mappings.add([vimperator.modes.NORMAL, vimperator.modes.MESSAGE], + ["q"], "Record a key sequence into a macro", + function (arg) { vimperator.events.startRecording(arg); }, + { flags: vimperator.Mappings.flags.ARGUMENT }); + + vimperator.mappings.add([vimperator.modes.NORMAL, vimperator.modes.MESSAGE], + ["@"], "Play a macro", + function (count, arg) + { + if (count < 1) count = 1; + while (count--) + vimperator.events.playMacro(arg); + }, + { flags: vimperator.Mappings.flags.ARGUMENT | vimperator.Mappings.flags.COUNT }); /////////////////////////////////////////////////////////////////////////////}}} ////////////////////// PUBLIC SECTION ////////////////////////////////////////// diff --git a/content/mappings.js b/content/mappings.js index 8e29c13d..2a46075f 100644 --- a/content/mappings.js +++ b/content/mappings.js @@ -355,47 +355,8 @@ vimperator.Mappings = function () //{{{ // NORMAL mode // {{{ - // vimperator management - addDefaultMap(new vimperator.Map(vimperator.modes.all, [""], - function () { vimperator.commands.help(); }, - { shortHelp: "Open help window" } - )); - addDefaultMap(new vimperator.Map(vimperator.modes.all, ["", ""], - function () { vimperator.events.onEscape() }, - { shortHelp: "Focus content" } - )); - // add the ":" mapping in all but insert mode mappings - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL, vimperator.modes.VISUAL, vimperator.modes.HINTS, vimperator.modes.MESSAGE, vimperator.modes.CARET, vimperator.modes.TEXTAREA], [":"], - function () { vimperator.commandline.open(":", "", vimperator.modes.EX); }, - { shortHelp: "Start command line mode" } - )); - - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL, vimperator.modes.VISUAL, vimperator.modes.CARET], [""], - function () { document.commandDispatcher.advanceFocus(); }, - { shortHelp: "Advance keyboard focus" } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL, vimperator.modes.VISUAL, vimperator.modes.CARET, vimperator.modes.INSERT, vimperator.modes.TEXTAREA], [""], - function () { document.commandDispatcher.rewindFocus(); }, - { shortHelp: "Rewind keyboard focus" } - )); - - addDefaultMap(new vimperator.Map(vimperator.modes.all, [""], - function () { vimperator.modes.passAllKeys = true; }, - { shortHelp: "Temporarily quit Vimperator mode" } - )); - addDefaultMap(new vimperator.Map(vimperator.modes.all, [""], - function () { vimperator.modes.passNextKey = true; }, - { shortHelp: "Pass through next key" } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], [""], - function() { BrowserStop(); }, - { shortHelp: "Stop loading" } - )); - addDefaultMap(new vimperator.Map(vimperator.modes.all, [""], - function () { return; }, - { shortHelp: "Do nothing" } - )); + // move to bookmarks.js: addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["a"], function () { @@ -410,6 +371,8 @@ vimperator.Mappings = function () //{{{ function () { vimperator.bookmarks.toggle(vimperator.buffer.URL); }, { shortHelp: "Toggle bookmarked state of current URL" } )); + + // move to vimperator.js: addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["~"], function () { vimperator.open("~"); }, { shortHelp: "Open home directory" } @@ -427,171 +390,6 @@ vimperator.Mappings = function () //{{{ }, { shortHelp: "Go home in a new tab" } )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["go"], - function (arg) { vimperator.quickmarks.jumpTo(arg, vimperator.CURRENT_TAB); }, - { - shortHelp: "Jump to a QuickMark in the current tab", - flags: vimperator.Mappings.flags.ARGUMENT - } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["gn"], - function (arg) - { - vimperator.quickmarks.jumpTo(arg, - /\bquickmark\b/.test(vimperator.options["activate"]) ? - vimperator.NEW_TAB : vimperator.NEW_BACKGROUND_TAB); - }, - { - shortHelp: "Jump to a QuickMark in a new tab", - flags: vimperator.Mappings.flags.ARGUMENT - } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["m"], - function (arg) - { - if (/[^a-zA-Z]/.test(arg)) - { - vimperator.beep(); - return; - } - - vimperator.marks.add(arg); - }, - { - shortHelp: "Set mark at the cursor position", - flags: vimperator.Mappings.flags.ARGUMENT - } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["M"], - function (arg) - { - if (/[^a-zA-Z0-9]/.test(arg)) - { - vimperator.beep(); - return; - } - - vimperator.quickmarks.add(arg, vimperator.buffer.URL); - }, - { - shortHelp: "Add new QuickMark for current URL", - flags: vimperator.Mappings.flags.ARGUMENT - } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["o"], - function () { vimperator.commandline.open(":", "open ", vimperator.modes.EX); }, - { shortHelp: "Open one or more URLs in the current tab" } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["O"], - function () { vimperator.commandline.open(":", "open " + vimperator.buffer.URL, vimperator.modes.EX); }, - { shortHelp: "Open one or more URLs in the current tab, based on current location" } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], [""], - function () { vimperator.commands.redraw(); }, - { - shortHelp: "Redraw the screen" - } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["t"], - function () { vimperator.commandline.open(":", "tabopen ", vimperator.modes.EX); }, - { shortHelp: "Open one or more URLs in a new tab" } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["T"], - function () { vimperator.commandline.open(":", "tabopen " + vimperator.buffer.URL, vimperator.modes.EX); }, - { shortHelp: "Open one or more URLs in a new tab, based on current location" } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["y"], - function () { vimperator.copyToClipboard(vimperator.buffer.URL, true); }, - { shortHelp: "Yank current location to the clipboard" } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL, vimperator.modes.VISUAL], ["Y"], - function () - { - var sel = window.content.document.getSelection(); - if (sel) - vimperator.copyToClipboard(sel, true); - else - vimperator.beep(); - }, - { shortHelp: "Copy selected text" } - )); - - - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["ZQ"], - function () { vimperator.quit(false); }, - { shortHelp: "Quit and don't save the session" } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["ZZ"], - function () { vimperator.quit(true); }, - { shortHelp: "Quit and save the session" } - )); - function incrementURL(count) - { - var url = vimperator.buffer.URL; - var regex = /(.*?)(-?\d+)(\D*)$/; - - var matches = url.match(regex); - if (!matches || !matches[2]) // no number to increment - { - vimperator.beep(); - return; - } - - var newNum = parseInt(matches[2], 10) + count + ""; // "" to make sure its a string - var nums = newNum.match(/^(-?)(\d+)$/); - var oldLength = matches[2].replace(/-/, "").length, newLength = nums[2].length; - newNum = nums[1] || ""; - for (let i = 0; i < oldLength - newLength; i++) - newNum += "0"; // keep leading zeros - newNum += nums[2]; - - vimperator.open(matches[1] + newNum + matches[3]); - } - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], [""], - function (count) { incrementURL(-(count > 1 ? count : 1)); }, - { - shortHelp: "Decrement last number in URL", - flags: vimperator.Mappings.flags.COUNT - } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], [""], - function (count) { incrementURL(count > 1 ? count : 1); }, - { - shortHelp: "Increment last number in URL", - flags: vimperator.Mappings.flags.COUNT - } - )); - - // history manipulation and jumplist, move to bookmarks.js? - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], [""], - function (count) { vimperator.history.stepTo(-(count > 1 ? count : 1)); }, - { - shortHelp: "Go to an older position in the jump list", - flags: vimperator.Mappings.flags.COUNT - } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], [""], - function (count) { vimperator.history.stepTo(count > 1 ? count : 1); }, - { - shortHelp: "Go to a newer position in the jump list", - flags: vimperator.Mappings.flags.COUNT - } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["H", "", ""], - function (count) { vimperator.history.stepTo(-(count > 1 ? count : 1)); }, - { - shortHelp: "Go back in the browser history", - flags: vimperator.Mappings.flags.COUNT - } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["L", "", ""], - function (count) { vimperator.history.stepTo(count > 1 ? count : 1); }, - { - shortHelp: "Go forward in the browser history", - flags: vimperator.Mappings.flags.COUNT - } - )); - // move to vimperator.js? addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["gu"], function (count) { @@ -651,24 +449,124 @@ vimperator.Mappings = function () //{{{ )); - // macros, move to events.js - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["q"], - function (arg) { vimperator.events.startRecording(arg); }, + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["o"], + function () { vimperator.commandline.open(":", "open ", vimperator.modes.EX); }, + { shortHelp: "Open one or more URLs in the current tab" } + )); + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["O"], + function () { vimperator.commandline.open(":", "open " + vimperator.buffer.URL, vimperator.modes.EX); }, + { shortHelp: "Open one or more URLs in the current tab, based on current location" } + )); + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], [""], + function () { vimperator.commands.redraw(); }, + { shortHelp: "Redraw the screen" } + )); + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["t"], + function () { vimperator.commandline.open(":", "tabopen ", vimperator.modes.EX); }, + { shortHelp: "Open one or more URLs in a new tab" } + )); + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["T"], + function () { vimperator.commandline.open(":", "tabopen " + vimperator.buffer.URL, vimperator.modes.EX); }, + { shortHelp: "Open one or more URLs in a new tab, based on current location" } + )); + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["y"], + function () { vimperator.copyToClipboard(vimperator.buffer.URL, true); }, + { shortHelp: "Yank current location to the clipboard" } + )); + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL, vimperator.modes.VISUAL], ["Y"], + function () { - shortHelp: "Record a keysequence into a macro", + var sel = window.content.document.getSelection(); + if (sel) + vimperator.copyToClipboard(sel, true); + else + vimperator.beep(); + }, + { shortHelp: "Copy selected text" } + )); + + // move to quickmarks: + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["go"], + function (arg) { vimperator.quickmarks.jumpTo(arg, vimperator.CURRENT_TAB); }, + { + shortHelp: "Jump to a QuickMark in the current tab", flags: vimperator.Mappings.flags.ARGUMENT } )); - addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["@"], - function (count, arg) + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["gn"], + function (arg) { - if (count < 1) count = 1; - while (count--) - vimperator.events.playMacro(arg); + vimperator.quickmarks.jumpTo(arg, + /\bquickmark\b/.test(vimperator.options["activate"]) ? + vimperator.NEW_TAB : vimperator.NEW_BACKGROUND_TAB); }, { - shortHelp: "Play a macro", - flags: vimperator.Mappings.flags.ARGUMENT | vimperator.Mappings.flags.COUNT + shortHelp: "Jump to a QuickMark in a new tab", + flags: vimperator.Mappings.flags.ARGUMENT + } + )); + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["M"], + function (arg) + { + if (/[^a-zA-Z0-9]/.test(arg)) + { + vimperator.beep(); + return; + } + + vimperator.quickmarks.add(arg, vimperator.buffer.URL); + }, + { + shortHelp: "Add new QuickMark for current URL", + flags: vimperator.Mappings.flags.ARGUMENT + } + )); + + // move to v.Marks: + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["m"], + function (arg) + { + if (/[^a-zA-Z]/.test(arg)) + { + vimperator.beep(); + return; + } + + vimperator.marks.add(arg); + }, + { + shortHelp: "Set mark at the cursor position", + flags: vimperator.Mappings.flags.ARGUMENT + } + )); + + // history manipulation and jumplist, move to bookmarks.js + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], [""], + function (count) { vimperator.history.stepTo(-(count > 1 ? count : 1)); }, + { + shortHelp: "Go to an older position in the jump list", + flags: vimperator.Mappings.flags.COUNT + } + )); + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], [""], + function (count) { vimperator.history.stepTo(count > 1 ? count : 1); }, + { + shortHelp: "Go to a newer position in the jump list", + flags: vimperator.Mappings.flags.COUNT + } + )); + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["H", "", ""], + function (count) { vimperator.history.stepTo(-(count > 1 ? count : 1)); }, + { + shortHelp: "Go back in the browser history", + flags: vimperator.Mappings.flags.COUNT + } + )); + addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["L", "", ""], + function (count) { vimperator.history.stepTo(count > 1 ? count : 1); }, + { + shortHelp: "Go forward in the browser history", + flags: vimperator.Mappings.flags.COUNT } )); diff --git a/content/vim.js b/content/vim.js index d9f21440..52294f77 100644 --- a/content/vim.js +++ b/content/vim.js @@ -33,7 +33,7 @@ const vimperator = (function () //{{{ /////////////////////////////////////////////////////////////////////////////{{{ var callbacks = []; - // Only general options are added here, + // Only general options are added here, which are valid for all vimperator like extensions function addOptions() { vimperator.options.add(["guioptions", "go"], @@ -99,6 +99,21 @@ const vimperator = (function () //{{{ }); } + function addMappings() + { + vimperator.mappings.add(vimperator.modes.all, [""], + "Open help window", + function () { vimperator.commands.help(); }); + + vimperator.mappings.add([vimperator.modes.NORMAL], ["ZQ"], + "Quit and don't save the session", + function () { vimperator.quit(false); }); + + vimperator.mappings.add([vimperator.modes.NORMAL], ["ZZ"], + "Quit and save the session", + function () { vimperator.quit(true); }); + } + // initially hide all GUI, it is later restored unless the user has :set go= or something // similar in his config function hideGUI() @@ -461,77 +476,45 @@ const vimperator = (function () //{{{ .quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit); }, + // this function is called, when the chrome is ready startup: function () { - window.dump("Vimperator startup\n"); - vimperator.log("Initializing vimperator object...", 1); + function log(module) { vimperator.log("Loading module " + module + "...", 3); }; + + vimperator.log("Initializing vimperator object...", 1); + log("options"); vimperator.options = vimperator.Options(); addOptions(); + log("commands"); vimperator.commands = vimperator.Commands(); + log("mappings"); vimperator.mappings = vimperator.Mappings(); addMappings(); + log("events"); vimperator.events = vimperator.Events(); + log("commandline"); vimperator.commandline = vimperator.CommandLine(); + log("search"); vimperator.search = vimperator.Search(); + log("preview window"); vimperator.previewwindow = vimperator.InformationList("vimperator-previewwindow", { incrementalFill: false, maxItems: 10 }); + log("buffer window"); vimperator.bufferwindow = vimperator.InformationList("vimperator-bufferwindow", { incrementalFill: false, maxItems: 10 }); + log("statusline"); vimperator.statusline = vimperator.StatusLine(); + log("buffer"); vimperator.buffer = vimperator.Buffer(vimperator.config.browserModes || [vimperator.modes.NORMAL]); + log("editor"); vimperator.editor = vimperator.Editor(); + log("autocommands"); vimperator.autocommands = vimperator.AutoCommands(); + log("io"); vimperator.io = vimperator.IO(); + log("completion"); vimperator.completion = vimperator.Completion(); + + // optional modules + if (vimperator.has("bookmarks")) { log("bookmarks"); vimperator.bookmarks = vimperator.Bookmarks(); } + if (vimperator.has("history")) { log("history"); vimperator.history = vimperator.History(); } + if (vimperator.has("mail")) { log("mail"); vimperator.mail = vimperator.Mail(vimperator.config.mailModes || [vimperator.modes.NORMAL]); } + if (vimperator.has("tabs")) { log("tabs"); vimperator.tabs = vimperator.Tabs(); } + if (vimperator.has("marks")) { log("marks"); vimperator.marks = vimperator.Marks(); } + if (vimperator.has("quickmarks")) { log("quickmarks"); vimperator.quickmarks = vimperator.QuickMarks(); } + if (vimperator.has("hints")) { log("hints"); vimperator.hints = vimperator.Hints(); } - // these objects are created here only after the chrome is ready - vimperator.log("Loading module options...", 3); - vimperator.options = vimperator.Options(); addOptions(); - vimperator.log("Loading module commands...", 3); - vimperator.commands = vimperator.Commands(); - vimperator.log("Loading module mappings...", 3); - vimperator.mappings = vimperator.Mappings(); - vimperator.log("Loading module events...", 3); - vimperator.events = vimperator.Events(); - if (vimperator.has("bookmarks")) - { - vimperator.log("Loading module bookmarks...", 3); - vimperator.bookmarks = vimperator.Bookmarks(); - } - if (vimperator.has("history")) - { - vimperator.log("Loading module history...", 3); - vimperator.history = vimperator.History(); - } - vimperator.log("Loading module commandline...", 3); - vimperator.commandline = vimperator.CommandLine(); - vimperator.log("Loading module search...", 3); - vimperator.search = vimperator.Search(); - vimperator.log("Loading module preview window...", 3); - vimperator.previewwindow = vimperator.InformationList("vimperator-previewwindow", { incrementalFill: false, maxItems: 10 }); - vimperator.log("Loading module buffer window...", 3); - vimperator.bufferwindow = vimperator.InformationList("vimperator-bufferwindow", { incrementalFill: false, maxItems: 10 }); - vimperator.log("Loading module statusline...", 3); - vimperator.statusline = vimperator.StatusLine(); - vimperator.log("Loading module buffer...", 3); - vimperator.buffer = vimperator.Buffer(vimperator.config.browserModes || [vimperator.modes.NORMAL]); - vimperator.log("Loading module editor...", 3); - vimperator.editor = vimperator.Editor(); - if (vimperator.has("mail")) - { - vimperator.log("Loading module mail...", 3); - vimperator.mail = vimperator.Mail(vimperator.config.mailModes || [vimperator.modes.NORMAL]); - } - if (vimperator.has("tabs")) - { - vimperator.log("Loading module tabs...", 3); - vimperator.tabs = vimperator.Tabs(); - } - if (vimperator.has("marks")) - { - vimperator.log("Loading module marks...", 3); - vimperator.marks = vimperator.Marks(); - } - if (vimperator.has("quickmarks")) - { - vimperator.log("Loading module quickmarks...", 3); - vimperator.quickmarks = vimperator.QuickMarks(); - } - if (vimperator.has("hints")) - { - vimperator.log("Loading module hints...", 3); - vimperator.hints = vimperator.Hints(); - } - vimperator.log("Loading module autocommands...", 3); - vimperator.autocommands = vimperator.AutoCommands(); - vimperator.log("Loading module io...", 3); - vimperator.io = vimperator.IO(); - vimperator.log("Loading module completion...", 3); - vimperator.completion = vimperator.Completion(); vimperator.log("All modules loaded", 3); + // This adds options/mappings/commands which are only valid in this particular extension + if (vimperator.config.init) + { + vimperator.config.init(); + // vimperator.log("Loaded additional mappings, etc. for " + vimperator.config.name, 3); + } + // we define some shortcuts to functions which are used often vimperator.echo = function (str, flags) { vimperator.commandline.echo(str, vimperator.commandline.HL_NORMAL, flags); }; vimperator.echoerr = function (str, flags) { vimperator.commandline.echo(str, vimperator.commandline.HL_ERRORMSG, flags); }; @@ -613,8 +596,6 @@ const vimperator = (function () //{{{ shutdown: function () { - window.dump("Vimperator shutdown\n"); - // save our preferences vimperator.commandline.destroy(); vimperator.quickmarks.destroy(); diff --git a/content/vimperator.js b/content/vimperator.js index 7b094c46..6c01a424 100644 --- a/content/vimperator.js +++ b/content/vimperator.js @@ -34,7 +34,43 @@ vimperator.config = { /*** optional options, there are checked for existance and a fallback provided ***/ features: ["bookmarks", "history", "marks", "quickmarks", "hints", "tabs"], dialogs: [], - guioptions: { m: ["toolbar-menubar"], T: ["nav-bar"], b: ["PersonalToolbar"] } + guioptions: { m: ["toolbar-menubar"], T: ["nav-bar"], b: ["PersonalToolbar"] }, + + init: function() + { + function incrementURL(count) + { + var url = vimperator.buffer.URL; + var regex = /(.*?)(-?\d+)(\D*)$/; + + var matches = url.match(regex); + if (!matches || !matches[2]) // no number to increment + { + vimperator.beep(); + return; + } + + var newNum = parseInt(matches[2], 10) + count + ""; // "" to make sure its a string + var nums = newNum.match(/^(-?)(\d+)$/); + var oldLength = matches[2].replace(/-/, "").length, newLength = nums[2].length; + newNum = nums[1] || ""; + for (let i = 0; i < oldLength - newLength; i++) + newNum += "0"; // keep leading zeros + newNum += nums[2]; + + vimperator.open(matches[1] + newNum + matches[3]); + } + + vimperator.mappings.add([vimperator.modes.NORMAL], + [""], "Increment last number in URL", + function (count) { incrementURL(count > 1 ? count : 1); }, + { flags: vimperator.Mappings.flags.COUNT }); + + vimperator.mappings.add([vimperator.modes.NORMAL], + [""], "Decrement last number in URL", + function (count) { incrementURL(-(count > 1 ? count : 1)); }, + { flags: vimperator.Mappings.flags.COUNT }); + } } // vim: set fdm=marker sw=4 ts=4 et: diff --git a/locale/en-US/starting.txt b/locale/en-US/starting.txt index f6f3425b..83dfb8b9 100644 --- a/locale/en-US/starting.txt +++ b/locale/en-US/starting.txt @@ -20,8 +20,8 @@ The plugin directory is named: The user's '$HOME'(~) directory is determined as follows: * Unix and Mac - _$HOME_ is used. -* Windows - if _$HOME_ is set then this is used, otherwise _$USERPROFILE_ or finally -_$HOMEDRIVE$HOMEPATH_. +* Windows - if _%HOME%_ is set then this is used, otherwise _%USERPROFILE%_ or finally +_%HOMEDRIVE%%HOMEPATH%_. _$VIMPERATOR_HOME_ can be used to override the calculated _$HOME_ directory.