diff --git a/common/content/quickmarks.js b/common/content/quickmarks.js index 5754b6df..9b33b12e 100644 --- a/common/content/quickmarks.js +++ b/common/content/quickmarks.js @@ -14,6 +14,9 @@ const QuickMarks = Module("quickmarks", { init: function () { this._qmarks = storage.newMap("quickmarks", { store: true }); + storage.addObserver("quickmarks", function () { + statusline.updateUrl(); + }, window); }, /** @@ -29,6 +32,20 @@ const QuickMarks = Module("quickmarks", { dactyl.echomsg({ domains: [util.getHost(location)], message: "Added Quick Mark '" + qmark + "': " + location }, 1); }, + /** + * Returns a list of QuickMarks associates with the given URL. + * + * @param {string} url The url to find QuickMarks for. + * @return {[string]} + */ + find: function find(url) { + let res = []; + for (let [k, v] in this._qmarks) + if (dactyl.stringToURLArray(v).some(function (u) String.replace(u, /#.*/, "") == url)) + res.push(k); + return res; + }, + /** * Deletes the specified quickmarks. The filter is a list of * quickmarks and ranges are supported. Eg. "ab c d e-k". @@ -120,15 +137,21 @@ const QuickMarks = Module("quickmarks", { commands.add(["qma[rk]"], "Mark a URL with a letter for quick access", function (args) { - let matches = args.string.match(/^([a-zA-Z0-9])(?:\s+(.+))?$/); - if (!matches) + if (!/^[a-zA-Z0-9]$/.test(args[0])) dactyl.echoerr("E488: Trailing characters"); - else if (!matches[2]) - quickmarks.add(matches[1], buffer.URL); + else if (!args[1]) + quickmarks.add(args[0], buffer.URL); else - quickmarks.add(matches[1], matches[2]); + quickmarks.add(args[0], args[1]); }, - { argCount: "+" }); + { + argCount: "+", + completer: function (context, args) { + if (args.length == 2) + return completion.url(context); + }, + literal: 1 + }); commands.add(["qmarks"], "Show all QuickMarks", diff --git a/common/content/statusline.js b/common/content/statusline.js index e7985887..4cd9933a 100644 --- a/common/content/statusline.js +++ b/common/content/statusline.js @@ -90,19 +90,9 @@ const StatusLine = Module("statusline", { return url; }; + // TODO: this probably needs a more general solution. if (url == null) - // TODO: this probably needs a more general solution. - url = losslessDecodeURI(buffer.URL); - - // make it even more Vim-like - if (url == "about:blank") { - if (!buffer.title) - url = "[No Name]"; - } - else { - url = url.replace(RegExp("^dactyl://help/(\\S+)#(.*)"), function (m, n1, n2) n1 + " " + decodeURIComponent(n2) + " [Help]") - .replace(RegExp("^dactyl://help/(\\S+)"), "$1 [Help]"); - } + url = buffer.URL; // when session information is available, add [+] when we can go // backwards, [-] when we can go forwards @@ -119,6 +109,20 @@ const StatusLine = Module("statusline", { modified += UTF8("❤"); //modified += UTF8("♥"); } + if (modules.quickmarks) + modified += quickmarks.find(url.replace(/#.*/, "")).join(""); + + url = losslessDecodeURI(url); + + // make it even more Vim-like + if (url == "about:blank") { + if (!buffer.title) + url = "[No Name]"; + } + else { + url = url.replace(RegExp("^dactyl://help/(\\S+)#(.*)"), function (m, n1, n2) n1 + " " + decodeURIComponent(n2) + " [Help]") + .replace(RegExp("^dactyl://help/(\\S+)"), "$1 [Help]"); + } if (modified) url += " [" + modified + "]"; diff --git a/common/locale/en-US/gui.xml b/common/locale/en-US/gui.xml index 887140e5..ca5fca6e 100644 --- a/common/locale/en-US/gui.xml +++ b/common/locale/en-US/gui.xml @@ -199,10 +199,12 @@ progress messages are also output to this field.
  • - History and bookmark status ([+-❤]): The position of the current page in - the tab's session history; + and - indicate that it is possible to move - backwards and forwards through the history respectively. ❤ indicates that - the current page is bookmarked. + History and bookmark status ([+-❤⋯]): The position + of the current page in the tab's session history; + and + - indicate that it is possible to move backwards and forwards + through the history respectively. ❤ indicates that the current page is + bookmarked. Any other character indicates a QuickMark matching the + current page.
  • Tab index ([N/M]): N is the index of the currently selected tab and M is