]> git.eshelyaron.com Git - emacs.git/commitdiff
ffap: Don't switch window unless needed
authorPhilipp Stephani <phst@google.com>
Sun, 8 Jan 2017 18:44:22 +0000 (19:44 +0100)
committerPhilipp Stephani <phst@google.com>
Sat, 22 Apr 2017 16:33:38 +0000 (18:33 +0200)
When using ffap-other-window, don't change the window configuration
unless a new buffer has actually been created (Bug#25352).

* lisp/ffap.el (ffap-other-frame): Don't change the window
configuration if no new buffer has been created.
* test/lisp/ffap-tests.el (ffap-other-window--bug-25352): Add unit
test.

lisp/ffap.el
test/lisp/ffap-tests.el

index 1ea32b75f12f9f6dcbc3e5a09f1d05bb8a081d64..87531110b8684a35d52bea39eeec91bfdd5208fc 100644 (file)
@@ -1768,14 +1768,9 @@ Return value:
   "Like `ffap', but put buffer in another window.
 Only intended for interactive use."
   (interactive)
-  (let (value)
-    (switch-to-buffer-other-window
-     (save-window-excursion
-       (setq value (call-interactively 'ffap))
-       (unless (or (bufferp value) (bufferp (car-safe value)))
-        (setq value (current-buffer)))
-       (current-buffer)))
-    value))
+  (pcase (save-window-excursion (call-interactively 'ffap))
+    ((or (and (pred bufferp) b) `(,(and (pred bufferp) b) . ,_))
+     (switch-to-buffer-other-window b))))
 
 (defun ffap-other-frame ()
   "Like `ffap', but put buffer in another frame.
index 827d751be699041a22e6e33e7e24b86b10397410..1862c6c3277412301b6979ab69c9cfd46b5ae37d 100644 (file)
@@ -23,6 +23,7 @@
 
 ;;; Code:
 
+(require 'cl-lib)
 (require 'ert)
 (require 'ffap)
 
@@ -66,6 +67,18 @@ Host = example.com\n")
     (let ((ffap-gopher-regexp nil))
       (should-not (ffap-gopher-at-point)))))
 
+(ert-deftest ffap-other-window--bug-25352 ()
+  "Test for Bug#25352.  Checks that the window configuration is
+left alone when opening a URL in an external browser."
+  (cl-letf* ((old (current-window-configuration))
+             ((symbol-function 'ffap-prompter)
+              (lambda () "http://www.gnu.org"))
+             (urls nil)
+             (ffap-url-fetcher (lambda (url) (push url urls) nil)))
+    (should-not (ffap-other-window))
+    (should (equal (current-window-configuration) old))
+    (should (equal urls '("http://www.gnu.org")))))
+
 (provide 'ffap-tests)
 
 ;;; ffap-tests.el ends here