]> code.delx.au - gnu-emacs-elpa/blobdiff - packages/swiper/swiper.el
Add *.info and dir to debbugs
[gnu-emacs-elpa] / packages / swiper / swiper.el
index 1be86763baf55515d12e5c2ee6d91656aa71785a..b3b1940061e7ed1ce1380cb6449395aae5aaf426 100644 (file)
@@ -4,8 +4,8 @@
 
 ;; Author: Oleh Krehel <ohwoeowho@gmail.com>
 ;; URL: https://github.com/abo-abo/swiper
-;; Version: 0.1.0
-;; Package-Requires: ((emacs "24.1") (ivy "0.1.0"))
+;; Version: 0.2.0
+;; Package-Requires: ((emacs "24.1"))
 ;; Keywords: matching
 
 ;; This file is part of GNU Emacs.
   "Only highlight matches for regexps at least this long."
   :type 'integer)
 
+(defvar swiper-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "M-q") 'swiper-query-replace)
+    map)
+  "Keymap for swiper.")
+
+(defun swiper-query-replace ()
+  "Start `query-replace' with string to replace from last search string."
+  (interactive)
+  (if (null (window-minibuffer-p))
+      (user-error "Should only be called in the minibuffer through `swiper-map'")
+    (let* ((from (ivy--regex ivy-text))
+           (to (query-replace-read-to from "Query replace" t)))
+      (delete-minibuffer-contents)
+      (setq ivy--action
+            (lambda ()
+              (perform-replace from to
+                               t t t)))
+      (swiper--cleanup)
+      (exit-minibuffer))))
+
 (defvar swiper--window nil
   "Store the current window.")
 
 (defun swiper-font-lock-ensure ()
   "Ensure the entired buffer is highlighted."
   (unless (or (derived-mode-p 'magit-mode)
-              (memq major-mode '(package-menu-mode emms-playlist-mode)))
+              (memq major-mode '(package-menu-mode
+                                 gnus-summary-mode
+                                 gnus-article-mode
+                                 gnus-group-mode
+                                 emms-playlist-mode erc-mode)))
     (if (fboundp 'font-lock-ensure)
         (font-lock-ensure)
       (font-lock-fontify-buffer))))
@@ -146,8 +171,9 @@ When non-nil, INITIAL-INPUT is the initial search pattern."
                      "%s" "pattern: " swiper--format-spec)
                     candidates
                     initial-input
-                    #'swiper--update-input-ivy
-                    preselect))
+                    swiper-map
+                    preselect
+                    #'swiper--update-input-ivy))
       (ido-mode 1)
       (swiper--cleanup)
       (if (null ivy-exit)