diff --git a/NEWS b/NEWS index b8a425fc..9a1306fc 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,8 @@
 2007-XX-XX:
 	* version 0.5.2
+	* added "s" and "a" mappings to extended hints mode for saving hint
+	  targets
 	* new :redraw and Ctrl-L commands for forced redrawing of the screen
 	* added new 'laststatus' option and removed "s" value from 'guioptions'
 	* Tab-completion improvements for :javascript and :open
diff --git a/content/hints.js b/content/hints.js
index e1835fdf..6d68e4d8 100644
--- a/content/hints.js
+++ b/content/hints.js
@@ -467,6 +467,8 @@ function Hints() //{{{
     };
 
 
+    // TODO: move these functions somewhere more general
+
     // this function 'click' an element, which also works
     // for javascript links
     this.openHints = function(new_tab, new_window)
@@ -561,6 +563,28 @@ function Hints() //{{{
         vimperator.echo("Yanked " + loc);
     };
 
+    this.saveHints = function(skip_prompt)
+    {
+        var elems = this.hintedElements();
+
+        for (var i = 0; i < elems.length; i++)
+        {
+            var doc  = elems[i].ownerDocument;
+            var url = makeURLAbsolute(elems[i].refElem.baseURI, elems[i].refElem.href);
+            var text = elems[i].refElem.textContent;
+
+            try
+            {
+                urlSecurityCheck(url, doc.location.href);
+                saveURL(url, text, null, true, skip_prompt, makeURI(url, doc.characterSet));
+            }
+            catch (e)
+            {
+                vimperator.echoerr(e);
+            }
+        }
+    }
+
     function setMouseOverElement(elem)
     {
         var doc = window.document;
diff --git a/content/mappings.js b/content/mappings.js
index fc5d7ca5..598828a7 100644
--- a/content/mappings.js
+++ b/content/mappings.js
@@ -936,7 +936,8 @@ function Mappings() //{{{
                   "
  • t to open its location in a new tab
  • " + "
  • O to open its location in an :open query (not implemented yet)
  • " + "
  • T to open its location in an :tabopen query (not implemented yet)
  • " + - "
  • s to save its destination (not implemented yet)
  • " + + "
  • s to save its destination
  • " + + "
  • a to save its destination (prompting for save location)
  • " + "
  • <C-w> to open its destination in a new window
  • " + "" + "Multiple hints can be separated by commas where it makes sense. ;ab,ac,adt opens AB, AC and AD in a new tab.
    " + @@ -1013,7 +1014,14 @@ function Mappings() //{{{ } )); addDefaultMap(new Map(vimperator.modes.HINTS, ["s"], - function() { vimperator.echoerr('Saving of links not yet implemented'); }, + function() { vimperator.hints.saveHints(true); }, + { + cancel_mode: true, + always_active: false + } + )); + addDefaultMap(new Map([vimperator.modes.HINTS], ["a"], + function() { vimperator.hints.saveHints(false); }, { cancel_mode: true, always_active: false