]> git.eshelyaron.com Git - emacs.git/commitdiff
Add eww-open-in-new-buffer to EWW
authorMark Oteiza <mvoteiza@udel.edu>
Wed, 2 Nov 2016 19:58:28 +0000 (15:58 -0400)
committerMark Oteiza <mvoteiza@udel.edu>
Wed, 2 Nov 2016 19:58:28 +0000 (15:58 -0400)
* doc/misc/eww.texi (Basic): Document new command and key.
* etc/NEWS: Mention new key and its purpose.
* lisp/net/eww.el (eww-suggest-uris): Remove eww-current-url.
(eww): Append (eww-current-url) to the prompt defaults.
(eww-open-in-new-buffer): New command.
(eww-mode-map): Bind it and add a menu item.

doc/misc/eww.texi
etc/NEWS
lisp/net/eww.el

index 81f97a9db850d0fee8470c75a163070d51dd924a..ea258634301b1bb14d61d581685a3ca35f18be5e 100644 (file)
@@ -97,6 +97,12 @@ and the web page is rendered in it.  You can leave EWW by pressing
 web page hit @kbd{g} (@code{eww-reload}).  Pressing @kbd{w}
 (@code{eww-copy-page-url}) will copy the current URL to the kill ring.
 
+@findex eww-open-in-new-buffer
+@kindex M-RET
+  The @kbd{M-RET} command (@code{eww-open-in-new-buffer}) opens the
+URL at point in a new EWW buffer, akin to opening a link in a new
+``tab'' in other browsers.
+
 @findex eww-readable
 @kindex R
   The @kbd{R} command (@code{eww-readable}) will attempt to determine
index e29dfe23028f85f1d4c05a3b6dce8ca73b4eaa8d..9a671f2ae53d8f18f0d1203332f389a85241cb5d 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -329,6 +329,9 @@ with blank space to eshell history.
 
 ** eww
 
++++
+*** New 'M-RET' command for opening a link at point in a new eww buffer.
+
 +++
 *** A new 's' command for switching to another eww buffer via the minibuffer.
 
index 6a8400320c215247b3f9b45dd8fa1f06a47b8370..5310a81465599b416fc8e8fa51555a5f2a26bded 100644 (file)
 ;;;###autoload
 (defcustom eww-suggest-uris
   '(eww-links-at-point
-    url-get-url-at-point
-    eww-current-url)
+    url-get-url-at-point)
   "List of functions called to form the list of default URIs for `eww'.
 Each of the elements is a function returning either a string or a list
 of strings.  The results will be joined into a single list with
 duplicate entries (if any) removed."
-  :version "25.1"
+  :version "26.1"
   :group 'eww
   :type 'hook
   :options '(eww-links-at-point
-            url-get-url-at-point
-            eww-current-url))
+            url-get-url-at-point))
 
 (defcustom eww-bookmarks-directory user-emacs-directory
   "Directory where bookmark files will be stored."
@@ -246,7 +244,7 @@ This list can be customized via `eww-suggest-uris'."
 If the input doesn't look like an URL or a domain name, the
 word(s) will be searched for via `eww-search-prefix'."
   (interactive
-   (let* ((uris (eww-suggested-uris))
+   (let* ((uris (append (eww-suggested-uris) (list (eww-current-url))))
          (prompt (concat "Enter URL or keywords"
                          (if uris (format " (default %s)" (car uris)) "")
                          ": ")))
@@ -314,6 +312,18 @@ See the `eww-search-prefix' variable for the search engine used."
   (interactive "r")
   (eww (buffer-substring beg end)))
 
+(defun eww-open-in-new-buffer ()
+  "Fetch link at point in a new EWW buffer."
+  (interactive)
+  (let ((url (eww-suggested-uris)))
+    (if (null url) (user-error "No link at point")
+      ;; clone useful to keep history, but
+      ;; should not clone from non-eww buffer
+      (with-current-buffer
+          (if (eq major-mode 'eww-mode) (clone-buffer)
+            (generate-new-buffer "*eww*"))
+        (eww (if (consp url) (car url) url))))))
+
 (defun eww-html-p (content-type)
   "Return non-nil if CONTENT-TYPE designates an HTML content type.
 Currently this means either text/html or application/xhtml+xml."
@@ -697,6 +707,7 @@ the like."
   (let ((map (make-sparse-keymap)))
     (define-key map "g" 'eww-reload) ;FIXME: revert-buffer-function instead!
     (define-key map "G" 'eww)
+    (define-key map [?\M-\r] 'eww-open-in-new-buffer)
     (define-key map [?\t] 'shr-next-link)
     (define-key map [?\M-\t] 'shr-previous-link)
     (define-key map [backtab] 'shr-previous-link)
@@ -731,6 +742,7 @@ the like."
        ["Exit" quit-window t]
        ["Close browser" quit-window t]
        ["Reload" eww-reload t]
+       ["Follow URL in new buffer" eww-open-in-new-buffer]
        ["Back to previous page" eww-back-url
         :active (not (zerop (length eww-history)))]
        ["Forward to next page" eww-forward-url