summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Stephani <phst@google.com>2017-01-08 19:44:22 +0100
committerPhilipp Stephani <phst@google.com>2017-04-22 18:33:38 +0200
commitace38bafa6ae0d40bf3fac9f998c8ecbe36d5f41 (patch)
tree606bda0d44d6206a1ac1b00272632b2c5ee544f4
parentd354fc38286cba05b3ba2fefb9d9cd6d30deac3d (diff)
downloademacs-ace38bafa6ae0d40bf3fac9f998c8ecbe36d5f41.tar.gz
ffap: Don't switch window unless needed
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.
-rw-r--r--lisp/ffap.el11
-rw-r--r--test/lisp/ffap-tests.el13
2 files changed, 16 insertions, 8 deletions
diff --git a/lisp/ffap.el b/lisp/ffap.el
index 1ea32b75f12..87531110b86 100644
--- a/lisp/ffap.el
+++ b/lisp/ffap.el
@@ -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.
diff --git a/test/lisp/ffap-tests.el b/test/lisp/ffap-tests.el
index 827d751be69..1862c6c3277 100644
--- a/test/lisp/ffap-tests.el
+++ b/test/lisp/ffap-tests.el
@@ -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