- this.addMode("?", "Show information for hint", function (elem) buffer.showElementInfo(elem));
- this.addMode("s", "Save hint", function (elem) buffer.saveLink(elem, false));
- this.addMode("f", "Focus frame", function (elem) dactyl.focus(elem.ownerDocument.defaultView));
- this.addMode("F", "Focus frame or pseudo-frame", buffer.closure.focusElement, null, isScrollable);
- this.addMode("o", "Follow hint", function (elem) buffer.followLink(elem, dactyl.CURRENT_TAB));
- this.addMode("t", "Follow hint in a new tab", function (elem) buffer.followLink(elem, dactyl.NEW_TAB));
- this.addMode("b", "Follow hint in a background tab", function (elem) buffer.followLink(elem, dactyl.NEW_BACKGROUND_TAB));
- this.addMode("w", "Follow hint in a new window", function (elem) buffer.followLink(elem, dactyl.NEW_WINDOW));
- this.addMode("O", "Generate an ‘:open URL’ prompt", function (elem, loc) CommandExMode().open("open " + loc));
- this.addMode("T", "Generate a ‘:tabopen URL’ prompt", function (elem, loc) CommandExMode().open("tabopen " + loc));
- this.addMode("W", "Generate a ‘:winopen URL’ prompt", function (elem, loc) CommandExMode().open("winopen " + loc));
- this.addMode("a", "Add a bookmark", function (elem) bookmarks.addSearchKeyword(elem));
- this.addMode("S", "Add a search keyword", function (elem) bookmarks.addSearchKeyword(elem));
- this.addMode("v", "View hint source", function (elem, loc) buffer.viewSource(loc, false));
- this.addMode("V", "View hint source in external editor", function (elem, loc) buffer.viewSource(loc, true));
- this.addMode("y", "Yank hint location", function (elem, loc) dactyl.clipboardWrite(loc, true));
- this.addMode("Y", "Yank hint description", function (elem) dactyl.clipboardWrite(elem.textContent || "", true));
- this.addMode("c", "Open context menu", function (elem) buffer.openContextMenu(elem));
- this.addMode("i", "Show image", function (elem) dactyl.open(elem.src));
- this.addMode("I", "Show image in a new tab", function (elem) dactyl.open(elem.src, dactyl.NEW_TAB));
-
- function isScrollable(elem) isinstance(elem, [HTMLFrameElement, HTMLIFrameElement]) ||
+ this.addMode("?", "Show information for hint", elem => buffer.showElementInfo(elem));
+ // TODO: allow for ! override to overwrite existing paths -- where? --djk
+ this.addMode("s", "Save hint", elem => buffer.saveLink(elem, false));
+ this.addMode("f", "Focus frame", elem => dactyl.focus(elem.ownerDocument.defaultView));
+ this.addMode("F", "Focus frame or pseudo-frame", buffer.closure.focusElement, isScrollable);
+ this.addMode("o", "Follow hint", elem => buffer.followLink(elem, dactyl.CURRENT_TAB));
+ this.addMode("t", "Follow hint in a new tab", elem => buffer.followLink(elem, dactyl.NEW_TAB));
+ this.addMode("b", "Follow hint in a background tab", elem => buffer.followLink(elem, dactyl.NEW_BACKGROUND_TAB));
+ this.addMode("w", "Follow hint in a new window", elem => buffer.followLink(elem, dactyl.NEW_WINDOW));
+ this.addMode("O", "Generate an ‘:open URL’ prompt", (elem, loc) => CommandExMode().open("open " + loc));
+ this.addMode("T", "Generate a ‘:tabopen URL’ prompt", (elem, loc) => CommandExMode().open("tabopen " + loc));
+ this.addMode("W", "Generate a ‘:winopen URL’ prompt", (elem, loc) => CommandExMode().open("winopen " + loc));
+ this.addMode("a", "Add a bookmark", elem => bookmarks.addSearchKeyword(elem));
+ this.addMode("S", "Add a search keyword", elem => bookmarks.addSearchKeyword(elem));
+ this.addMode("v", "View hint source", (elem, loc) => buffer.viewSource(loc, false));
+ this.addMode("V", "View hint source in external editor", (elem, loc) => buffer.viewSource(loc, true));
+ this.addMode("y", "Yank hint location", (elem, loc) => editor.setRegister(null, loc, true));
+ this.addMode("Y", "Yank hint description", elem => editor.setRegister(null, elem.textContent || "", true));
+ this.addMode("A", "Yank hint anchor url", function (elem) {
+ let uri = elem.ownerDocument.documentURIObject.clone();
+ uri.ref = elem.id || elem.name;
+ dactyl.clipboardWrite(uri.spec, true);
+ });
+ this.addMode("c", "Open context menu", elem => DOM(elem).contextmenu());
+ this.addMode("i", "Show image", elem => dactyl.open(elem.src));
+ this.addMode("I", "Show image in a new tab", elem => dactyl.open(elem.src, dactyl.NEW_TAB));
+
+ function isScrollable(elem) isinstance(elem, [Ci.nsIDOMHTMLFrameElement,
+ Ci.nsIDOMHTMLIFrameElement]) ||