]> git.bundesbrandschatzamt.de Git - emacsconfig.git/commitdiff
update helm-swoop
authorAndreas Gerler <baronNOSPAMbundesbrandschatzamt.de>
Fri, 31 Jan 2020 16:49:12 +0000 (17:49 +0100)
committerAndreas Gerler <baronNOSPAMbundesbrandschatzamt.de>
Fri, 31 Jan 2020 17:13:06 +0000 (18:13 +0100)
elpa/helm-swoop-20191028.1402/helm-swoop-autoloads.el [deleted file]
elpa/helm-swoop-20191028.1402/helm-swoop-pkg.el [deleted file]
elpa/helm-swoop-20191028.1402/helm-swoop.el [deleted file]
elpa/helm-swoop-20200121.1859/helm-swoop-autoloads.el [new file with mode: 0644]
elpa/helm-swoop-20200121.1859/helm-swoop-pkg.el [new file with mode: 0644]
elpa/helm-swoop-20200121.1859/helm-swoop.el [new file with mode: 0644]
elpa/helm-swoop-readme.txt [new file with mode: 0644]

diff --git a/elpa/helm-swoop-20191028.1402/helm-swoop-autoloads.el b/elpa/helm-swoop-20191028.1402/helm-swoop-autoloads.el
deleted file mode 100644 (file)
index 3ada954..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-;;; helm-swoop-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path))))
-\f
-;;;### (autoloads nil "helm-swoop" "helm-swoop.el" (23994 46466 115498
-;;;;;;  456000))
-;;; Generated autoloads from helm-swoop.el
-
-(autoload 'helm-swoop-back-to-last-point "helm-swoop" "\
-Go back to last position where `helm-swoop' was called
-
-\(fn &optional $CANCEL)" t nil)
-
-(autoload 'helm-swoop "helm-swoop" "\
-List the all lines to another buffer, which is able to squeeze by
- any words you input. At the same time, the original buffer's cursor
- is jumping line to line according to moving up and down the list.
-
-\(fn &key $QUERY $SOURCE ($MULTILINE current-prefix-arg))" t nil)
-
-(autoload 'helm-swoop-from-isearch "helm-swoop" "\
-Invoke `helm-swoop' from isearch.
-
-\(fn)" t nil)
-
-(autoload 'helm-multi-swoop "helm-swoop" "\
-Usage:
-M-x helm-multi-swoop
-1. Select any buffers by [C-SPC] or [M-SPC]
-2. Press [RET] to start helm-multi-swoop
-
-C-u M-x helm-multi-swoop
-If you have done helm-multi-swoop before, you can skip select buffers step.
-Last selected buffers will be applied to helm-multi-swoop.
-
-\(fn &optional $QUERY $BUFLIST)" t nil)
-
-(autoload 'helm-multi-swoop-all "helm-swoop" "\
-Apply all buffers to helm-multi-swoop
-
-\(fn &optional $QUERY)" t nil)
-
-(autoload 'helm-multi-swoop-org "helm-swoop" "\
-Applies all org-mode buffers to helm-multi-swoop
-
-\(fn &optional $QUERY)" t nil)
-
-(autoload 'helm-multi-swoop-current-mode "helm-swoop" "\
-Applies all buffers of the same mode as the current buffer to helm-multi-swoop
-
-\(fn &optional $QUERY)" t nil)
-
-(autoload 'helm-multi-swoop-projectile "helm-swoop" "\
-Apply all opened buffers of the current project to helm-multi-swoop
-
-\(fn &optional $QUERY)" t nil)
-
-(autoload 'helm-swoop-without-pre-input "helm-swoop" "\
-Start helm-swoop without pre input query.
-
-\(fn)" t nil)
-
-(autoload 'helm-swoop-symble-pre-input "helm-swoop" "\
-Start helm-swoop without pre input query.
-
-\(fn)" t nil)
-
-(autoload 'helm-multi-swoop-edit "helm-swoop" "\
-
-
-\(fn)" t nil)
-
-;;;***
-\f
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; End:
-;;; helm-swoop-autoloads.el ends here
diff --git a/elpa/helm-swoop-20191028.1402/helm-swoop-pkg.el b/elpa/helm-swoop-20191028.1402/helm-swoop-pkg.el
deleted file mode 100644 (file)
index c736e77..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; -*- no-byte-compile: t -*-
-(define-package "helm-swoop" "20191028.1402" "Efficiently hopping squeezed lines powered by helm interface" '((helm "3.2") (emacs "24.4")) :commit "bfb5128712cbceec78cf6bb8eea4459d7de06323" :keywords '("convenience" "helm" "swoop" "inner" "buffer" "search") :authors '(("Shingo Fukuyama - http://fukuyama.co")) :maintainer '("Shingo Fukuyama - http://fukuyama.co") :url "https://github.com/emacsorphanage/helm-swoop")
diff --git a/elpa/helm-swoop-20191028.1402/helm-swoop.el b/elpa/helm-swoop-20191028.1402/helm-swoop.el
deleted file mode 100644 (file)
index 7361f06..0000000
+++ /dev/null
@@ -1,1693 +0,0 @@
-;;; helm-swoop.el --- Efficiently hopping squeezed lines powered by helm interface -*- lexical-binding: t -*-
-
-;; Copyright (C) 2019  Emacsorphanage Community
-;; Copyright (C) 2013-2018  Shingo Fukuyama
-
-;; Version: 2.0.0
-;; Package-Version: 20191028.1402
-;; Author: Shingo Fukuyama - http://fukuyama.co
-;; URL: https://github.com/emacsorphanage/helm-swoop
-;; Created: Oct 24 2013
-;; Keywords: convenience, helm, swoop, inner, buffer, search
-;; Package-Requires: ((helm "3.2") (emacs "24.4"))
-
-;; This program is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-;; See the GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; List the all lines to another buffer, which is able to squeeze
-;; by any words you input. At the same time, the original buffer's
-;; cursor is jumping line to line according to moving up and down
-;; the list.
-
-;; Example config
-;; ----------------------------------------------------------------
-;; ;; helm from https://github.com/emacs-helm/helm
-;; (require 'helm)
-
-;; ;; Locate the helm-swoop folder to your path
-;; ;; This line is unnecessary if you get this program from MELPA
-;; (add-to-list 'load-path "~/.emacs.d/elisp/helm-swoop")
-
-;; (require 'helm-swoop)
-
-;; ;; Change keybinds to whatever you like :)
-;; (global-set-key (kbd "M-i") 'helm-swoop)
-;; (global-set-key (kbd "M-I") 'helm-swoop-back-to-last-point)
-;; (global-set-key (kbd "C-c M-i") 'helm-multi-swoop)
-;; (global-set-key (kbd "C-x M-i") 'helm-multi-swoop-all)
-
-;; ;; When doing isearch, hand the word over to helm-swoop
-;; (define-key isearch-mode-map (kbd "M-i") 'helm-swoop-from-isearch)
-;; (define-key helm-swoop-map (kbd "M-i") 'helm-multi-swoop-all-from-helm-swoop)
-
-;; ;; Save buffer when helm-multi-swoop-edit complete
-;; (setq helm-multi-swoop-edit-save t)
-
-;; ;; If this value is t, split window inside the current window
-;; (setq helm-swoop-split-with-multiple-windows nil)
-
-;; ;; Split direction. 'split-window-vertically or 'split-window-horizontally
-;; (setq helm-swoop-split-direction 'split-window-vertically)
-
-;; ;; If nil, you can slightly boost invoke speed in exchange for text color
-;; (setq helm-swoop-speed-or-color nil)
-
-;; ;; Go to the opposite side of line from the end or beginning of line
-;; (setq helm-swoop-move-to-line-cycle t)
-
-;; ;; Optional face for line numbers
-;; ;; Face name is `helm-swoop-line-number-face`
-;; (setq helm-swoop-use-line-number-face t)
-
-;; ----------------------------------------------------------------
-
-;; * `M-x helm-swoop` when region active
-;; * `M-x helm-swoop` when the cursor is at any symbol
-;; * `M-x helm-swoop` when the cursor is not at any symbol
-;; * `M-3 M-x helm-swoop` or `C-u 5 M-x helm-swoop` multi separated line culling
-;; * `M-x helm-multi-swoop` multi-occur like feature
-;; * `M-x helm-multi-swoop-all` apply all buffers
-;; * `C-u M-x helm-multi-swoop` apply last selected buffers from the second time
-;; * `M-x helm-swoop-same-face-at-point` list lines have the same face at the cursor is on
-;; * During isearch `M-i` to hand the word over to helm-swoop
-;; * During helm-swoop `M-i` to hand the word over to helm-multi-swoop-all
-;; * While doing `helm-swoop` press `C-c C-e` to edit mode, apply changes to original buffer by `C-x C-s`
-
-;; Helm Swoop Edit
-;; While doing helm-swoop, press keybind [C-c C-e] to move to edit buffer.
-;; Edit the list and apply by [C-x C-s]. If you'd like to cancel, [C-c C-g]
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'helm)
-(require 'helm-utils)
-(require 'helm-grep)
-
-(declare-function migemo-search-pattern-get "migemo")
-(declare-function migemo-forward "migemo")
-(declare-function projectile-buffers-with-file-or-process "projectile")
-(declare-function projectile-project-buffers "projectile")
-(defvar projectile-buffers-filter-function)
-
-;;; @ helm-swoop ----------------------------------------------
-
-(defgroup helm-swoop nil
-  "Open helm-swoop."
-  :prefix "helm-swoop-" :group 'helm)
-
-(defface helm-swoop-target-line-face
-  '((t (:background "#e3e300" :foreground "#222222")))
-  "Face for helm-swoop target line"
-  :group 'helm-swoop)
-(defface helm-swoop-target-line-block-face
-  '((t (:background "#cccc00" :foreground "#222222")))
-  "Face for target line"
-  :group 'helm-swoop)
-(defface helm-swoop-target-word-face
-  '((t (:background "#7700ff" :foreground "#ffffff")))
-  "Face for target word"
-  :group 'helm-swoop)
-(defface helm-swoop-line-number-face
-  '((t (:foreground "#999999")))
-  "Face for line numbers"
-  :group 'helm-swoop)
-
-(defcustom helm-swoop-speed-or-color nil
-  "If nil, you can slightly boost invoke speed in exchange for text color"
-  :group 'helm-swoop :type 'boolean)
-(defcustom helm-swoop-use-line-number-face nil
-  "Use face to line numbers on helm-swoop buffer"
-  :group 'helm-swoop :type 'boolean)
-(defcustom helm-swoop-split-with-multiple-windows nil
-  "Split window when having multiple windows open"
-  :group 'helm-swoop :type 'boolean)
-(defcustom helm-swoop-move-to-line-cycle t
-  "Return to the opposite side of line"
-  :group 'helm-swoop :type 'boolean)
-(defcustom helm-swoop-split-direction 'split-window-vertically
-  "Split direction"
-  :type '(choice (const :tag "vertically"   split-window-vertically)
-                 (const :tag "horizontally" split-window-horizontally))
-  :group 'helm-swoop)
-(defcustom helm-swoop-use-fuzzy-match nil
-  "If t, use fuzzy matching functions as well as exact matches."
-  :group 'helm-swoop :type 'boolean)
-(defcustom helm-swoop-min-overlay-length 2
-  "Minimum pattern length before applying the overlay on the matched word."
-  :group 'helm-swoop :type 'integer)
-
-(defvar helm-swoop-split-window-function
-  (lambda ($buf &rest _$args)
-    (if helm-swoop-split-with-multiple-windows
-        (funcall helm-swoop-split-direction)
-      (when (one-window-p)
-        (funcall helm-swoop-split-direction)))
-    (other-window 1)
-    (switch-to-buffer $buf))
-  "Change the way to split window only when `helm-swoop' is calling")
-
-(defcustom helm-swoop-after-goto-line-action-hook nil
-  "hooks run after `helm-swoop--goto-line"
-  :group 'helm-swoop
-  :type 'hook)
-(defcustom helm-swoop-before-goto-line-action-hook nil
-  "hooks run before `helm-swoop--goto-line"
-  :group 'helm-swoop
-  :type 'hook)
-
-(defcustom helm-swoop-flash-region-function 'helm-swoop-flash-word
-  "The function used to flash the result when a search done."
-  :group 'helm-swoop
-  :type '(choice
-          (const :tag "Default highlight function" helm-swoop-flash-word)
-          (const :tag "Pulse highlight function" pulse-momentary-highlight-region)
-          function))
-
-(defcustom helm-swoop-fontify-buffer-size-limit 100000
-  "If buffer size smaller than value, do fontify to make buffer highlighted.
-
-If value is symbol `always', always do fontify."
-  :group 'helm-swoop
-  :type '(choice
-          integer
-          (const :tag "Always Fontify" always)))
-
-(defvar helm-swoop-candidate-number-limit 19999)
-(defvar helm-swoop-buffer "*Helm Swoop*")
-(defvar helm-swoop-prompt "Swoop: ")
-(defvar helm-swoop-last-point nil)
-(defvar helm-swoop-invisible-targets nil)
-(defvar helm-swoop-last-line-info nil)
-
-;; Buffer local variables
-(defvar helm-swoop-list-cache)
-(defvar helm-swoop-pattern nil)            ; Keep helm-pattern value
-(defvar helm-swoop-last-query nil)         ; Last search query for resume
-(defvar-local helm-swoop-last-prefix-number 1) ; For multiline highlight
-
-;; Global variables
-(defvar helm-swoop-synchronizing-window nil
-  "Window object where `helm-swoop' called from")
-(defvar helm-swoop-target-buffer nil
-  "Buffer object where `helm-swoop' called from")
-(defvar helm-swoop-line-overlay nil
-  "Overlay object to indicate other window's line")
-
-(defvar helm-swoop--basic-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map helm-map)
-    (dolist (action '(next-line previous-line next-page previous-page
-                                beginning-of-buffer end-of-buffer toggle-visible-mark))
-      (let ((orig-fn (intern (format "helm-%s" action)))
-            (new-fn (intern (format "helm-swoop-%s" action))))
-        (defalias new-fn `(lambda (&optional arg)
-                            (interactive "p")
-                            (call-interactively ',orig-fn)
-                            (helm-swoop--move-line-action))
-          (format "Replacement of `%s' action for `helm-swoop'.
-
-\(fn ARG)" orig-fn))
-        (define-key map `[remap ,orig-fn] new-fn)))
-    map))
-
-(defvar helm-swoop-map
-  (let (($map (make-sparse-keymap)))
-    (set-keymap-parent $map helm-swoop--basic-map)
-    (define-key $map (kbd "C-c C-e") 'helm-swoop-edit)
-    (define-key $map (kbd "M-i") 'helm-multi-swoop-all-from-helm-swoop)
-    (define-key $map (kbd "C-w") 'helm-swoop-yank-thing-at-point)
-    (define-key $map (kbd "^") 'helm-swoop-caret-match)
-    $map)
-  "Keymap for helm-swoop")
-
-(defvar helm-multi-swoop--basic-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map helm-map)
-    (dolist (action '(next-line previous-line next-page previous-page
-                                beginning-of-buffer end-of-buffer toggle-visible-mark))
-      (let ((orig-fn (intern (format "helm-%s" action)))
-            (new-fn (intern (format "helm-multi-swoop-%s" action))))
-        (defalias new-fn `(lambda (&optional arg)
-                            (interactive "p")
-                            (call-interactively ',orig-fn)
-                            (helm-multi-swoop--move-line-action))
-          (format "Replacement of `%s' action for `helm-multi-swoop'.
-
-\(fn ARG)" orig-fn))
-        (define-key map `[remap ,orig-fn] new-fn)))
-    map))
-
-(defvar helm-multi-swoop-map
-  (let (($map (make-sparse-keymap)))
-    (set-keymap-parent $map helm-multi-swoop--basic-map)
-    (define-key $map (kbd "C-c C-e") 'helm-multi-swoop-edit)
-    $map))
-
-(defvar helm-c-source-swoop-match-functions
-  '(helm-mm-exact-match
-    helm-mm-match
-    helm-mm-3-migemo-match))
-
-(defvar helm-c-source-swoop-search-functions
-  '(helm-mm-exact-search
-    helm-mm-search
-    helm-candidates-in-buffer-search-default-fn
-    helm-mm-3-migemo-search))
-
-(defvar helm-swoop-font-lock-exclude
-  '(Man-mode
-    adoc-mode
-    bbdb-mode
-    bongo-library-mode
-    bongo-mode
-    bongo-playlist-mode
-    bookmark-bmenu-mode
-    circe-channel-mode
-    circe-query-mode
-    circe-server-mode
-    deadgrep-mode
-    debbugs-gnu-mode
-    dired-mode
-    elfeed-search-mode
-    elfeed-show-mode
-    emms-playlist-mode
-    emms-stream-mode
-    erc-mode
-    eshell-mode
-    eww-mode
-    forth-block-mode
-    forth-mode
-    fundamental-mode
-    gnus-article-mode
-    gnus-group-mode
-    gnus-summary-mode
-    help-mode
-    helpful-mode
-    jabber-chat-mode
-    magit-popup-mode
-    matrix-client-mode
-    matrix-client-room-list-mode
-    mu4e-headers-mode
-    mu4e-view-mode
-    nix-mode
-    notmuch-search-mode
-    notmuch-tree-mode
-    occur-edit-mode
-    occur-mode
-    org-agenda-mode
-    package-menu-mode
-    rcirc-mode
-    sauron-mode
-    treemacs-mode
-    twittering-mode
-    vc-dir-mode
-    w3m-mode
-    woman-mode
-    xref--xref-buffer-mode)
-  "List of major-modes that are incompatible with `font-lock-ensure'.")
-
-(defun helm-swoop-match-functions ()
-  (if helm-swoop-use-fuzzy-match
-      (append helm-c-source-swoop-match-functions '(helm-fuzzy-match))
-    helm-c-source-swoop-match-functions))
-
-(defun helm-swoop-search-functions ()
-  (if helm-swoop-use-fuzzy-match
-      (append helm-c-source-swoop-search-functions '(helm-fuzzy-search))
-    helm-c-source-swoop-search-functions))
-
-(defcustom helm-swoop-pre-input-function
-  (lambda () (thing-at-point 'symbol))
-  "This function can pre-input keywords when helm-swoop invoked"
-  :group 'helm-swoop :type 'function)
-
-(defun helm-swoop-pre-input-optimize ($query)
-  (when $query (regexp-quote $query)))
-
-(defsubst helm-swoop--goto-line ($line)
-  (goto-char (point-min))
-  (forward-line (1- $line)))
-
-(defsubst helm-swoop--recenter ()
-  (recenter (/ (window-height) 2)))
-
-(defsubst helm-swoop--delete-overlay ($identity &optional $beg $end)
-  (overlay-recenter (or $end (point-max)))
-  (mapc (lambda ($o)
-          (if (overlay-get $o $identity)
-              (delete-overlay $o)))
-        (overlays-in (or $beg (point-min)) (or $end (point-max)))))
-
-(defsubst helm-swoop--get-string-at-line ()
-  (buffer-substring-no-properties (point-at-bol) (point-at-eol)))
-
-(defun helm-swoop--buffer-substring ($point-min $point-max)
-  (if helm-swoop-speed-or-color
-      (let (($content (buffer-substring $point-min $point-max)))
-        (propertize $content 'read-only nil))
-    (buffer-substring-no-properties $point-min $point-max)))
-
-;;;###autoload
-(defun helm-swoop-back-to-last-point (&optional $cancel)
-  "Go back to last position where `helm-swoop' was called"
-  (interactive)
-  (if helm-swoop-last-point
-      (let (($po (point)))
-        (switch-to-buffer (cdr helm-swoop-last-point))
-        (goto-char (car helm-swoop-last-point))
-        (unless $cancel
-          (setq helm-swoop-last-point
-                (cons $po (buffer-name (current-buffer))))))))
-
-(defun helm-swoop--split-lines-by ($string $regexp $step)
-  "split-string by $step for multiline"
-  (or $step (setq $step 1))
-  (let (($from1 0) ;; last match point
-        ($from2 0) ;; last substring point
-        $list
-        ($i 1)) ;; from line 1
-    (while (string-match $regexp $string $from1)
-      (setq $i (1+ $i))
-      (if (eq 0 (% $i $step))
-          (progn
-            (setq $list (cons (substring $string $from2 (match-beginning 0))
-                              $list))
-            (setq $from2 (match-end 0))
-            (setq $from1 (match-end 0)))
-        (setq $from1 (match-end 0))))
-    (setq $list (cons (substring $string $from2) $list))
-    (nreverse $list)))
-
-(defun helm-swoop--target-line-overlay-move (&optional $buf)
-  "Add color to the target line"
-  (move-overlay
-   helm-swoop-line-overlay
-   (progn
-     (search-backward
-      "\n" nil t (% (line-number-at-pos) helm-swoop-last-prefix-number))
-     (goto-char (point-at-bol)))
-   ;; For multiline highlight
-   (save-excursion
-     (goto-char (point-at-bol))
-     (or (re-search-forward "\n" nil t helm-swoop-last-prefix-number)
-         ;; For the end of buffer error
-         (point-max)))
-   $buf)
-  (helm-swoop--unveil-invisible-overlay))
-
-(defun helm-swoop--validate-regexp (regexp)
-  (condition-case _err
-      (progn
-        (string-match-p regexp "")
-        t)
-    (invalid-regexp nil)))
-
-(defun helm-swoop--target-word-overlay ($identity &optional $threshold)
-  (interactive)
-  (save-excursion
-    (let (($pat (split-string helm-pattern " "))
-          ($threshold (or $threshold 2))
-          $o)
-      (mapc (lambda ($wd)
-              (when (and (helm-swoop--validate-regexp $wd) (< $threshold (length $wd)))
-                (goto-char (point-min))
-                ;; Optional require migemo.el
-                (if (and (featurep 'migemo) helm-migemo-mode)
-                    (setq $wd (migemo-search-pattern-get $wd)))
-                ;; For caret begging match
-                (if (string-match "^\\^\\[0\\-9\\]\\+\\.\\(.+\\)" $wd)
-                    (setq $wd (concat "^" (match-string 1 $wd))))
-                (overlay-recenter (point-max))
-                (while (and (not (eobp)) (re-search-forward $wd nil t))
-                  (if (= (match-beginning 0) (match-end 0))
-                      (forward-char 1)
-                    (setq $o (make-overlay (match-beginning 0) (match-end 0)))
-                    (overlay-put $o 'face 'helm-swoop-target-word-face)
-                    (overlay-put $o $identity t)))))
-            $pat))))
-
-(defun helm-swoop--restore-unveiled-overlay ()
-  (when helm-swoop-invisible-targets
-    (mapc (lambda ($ov) (overlay-put (car $ov) 'invisible (cdr $ov)))
-          helm-swoop-invisible-targets)
-    (setq helm-swoop-invisible-targets nil)))
-
-(defun helm-swoop--unveil-invisible-overlay ()
-  "Show hidden text temporarily to view it during helm-swoop.
-This function needs to call after latest helm-swoop-line-overlay set."
-  (helm-swoop--restore-unveiled-overlay)
-  (mapc (lambda ($ov)
-          (let (($type (overlay-get $ov 'invisible)))
-            (when $type
-              (overlay-put $ov 'invisible nil)
-              (setq helm-swoop-invisible-targets
-                    (cons (cons $ov $type) helm-swoop-invisible-targets)))))
-        (overlays-in (overlay-start helm-swoop-line-overlay)
-                     (overlay-end helm-swoop-line-overlay))))
-
-;; helm action ------------------------------------------------
-
-(defun helm-swoop--move-line-action ()
-  (with-helm-window
-    (let* (($key (helm-swoop--get-string-at-line))
-           ($num (when (string-match "^[0-9]+" $key)
-                   (string-to-number (match-string 0 $key)))))
-      ;; Synchronizing line position
-      (when (and $key $num)
-        (with-selected-window helm-swoop-synchronizing-window
-          (helm-swoop--goto-line $num)
-          (with-current-buffer helm-swoop-target-buffer
-            (delete-overlay helm-swoop-line-overlay)
-            (helm-swoop--target-line-overlay-move))
-          (helm-swoop--recenter))
-        (setq helm-swoop-last-line-info
-              (cons helm-swoop-target-buffer $num))))))
-
-(defun helm-swoop--nearest-line ($target $list)
-  "Return the nearest number of $target out of $list."
-  (when (and $target $list)
-    (let ($result)
-      (cl-labels ((filter ($fn $elem $list)
-                          (let ($r)
-                            (mapc (lambda ($e)
-                                    (if (funcall $fn $elem $e)
-                                        (setq $r (cons $e $r))))
-                                  $list) $r)))
-        (if (eq 1 (length $list))
-            (setq $result (car $list))
-          (let* (($lts (filter '> $target $list))
-                 ($gts (filter '< $target $list))
-                 ($lt (if $lts (apply 'max $lts)))
-                 ($gt (if $gts (apply 'min $gts)))
-                 ($ltg (if $lt (- $target $lt)))
-                 ($gtg (if $gt (- $gt $target))))
-            (setq $result
-                  (cond ((memq $target $list) $target)
-                        ((and (not $lt) (not $gt)) nil)
-                        ((not $gtg) $lt)
-                        ((not $ltg) $gt)
-                        ((eq $ltg $gtg) $gt)
-                        ((< $ltg $gtg) $lt)
-                        ((> $ltg $gtg) $gt)
-                        (t 1))))))
-      $result)))
-
-(defun helm-swoop--keep-nearest-position ()
-  (with-helm-window
-    (let (($p (point-min)) $list $bound
-          $nearest-line $target-point
-          ($buf (rx-to-string (buffer-name (car helm-swoop-last-line-info)) t)))
-      (save-excursion
-        (goto-char $p)
-        (while (if $p (setq $p (re-search-forward (concat "^" $buf "$") nil t)))
-          (when (get-text-property (point-at-bol) 'helm-header)
-            (forward-char 1)
-            (setq $bound (next-single-property-change (point) 'helm-header))
-            (while (re-search-forward "^[0-9]+" $bound t)
-              (setq $list (cons
-                           (string-to-number (match-string 0))
-                           $list)))
-            (setq $nearest-line (helm-swoop--nearest-line
-                                 (cdr helm-swoop-last-line-info)
-                                 $list))
-            (goto-char $p)
-            (re-search-forward (concat "^"
-                                       (number-to-string $nearest-line)
-                                       "\\s-") $bound t)
-            (setq $target-point (point))
-            (setq $p nil))))
-      (when $target-point
-        (goto-char $target-point)
-        (helm-mark-current-line)
-        (if (equal helm-swoop-buffer (buffer-name (current-buffer)))
-            (helm-swoop--move-line-action)
-          (helm-multi-swoop--move-line-action))))))
-
-(defun helm-swoop--pattern-match ()
-  "Overlay target words"
-  (with-helm-window
-    (setq helm-swoop-pattern helm-pattern)
-    (when (< helm-swoop-min-overlay-length (length helm-pattern))
-      (helm-swoop--delete-overlay 'target-buffer)
-      (helm-swoop--target-word-overlay 'target-buffer helm-swoop-min-overlay-length)
-      (with-selected-window helm-swoop-synchronizing-window
-        (helm-swoop--delete-overlay 'target-buffer)
-        (helm-swoop--target-word-overlay 'target-buffer helm-swoop-min-overlay-length)))))
-
-(defun helm-swoop-flash-word ($match-beg $match-end)
-  (interactive)
-  (unwind-protect
-      (let (($o (make-overlay $match-beg $match-end)))
-        (when $o
-          (overlay-put $o 'face 'helm-swoop-target-word-face)
-          (overlay-put $o 'helm-swoop-overlay-word-frash t)))
-    (run-with-idle-timer
-     0.6 nil (lambda () (helm-swoop--delete-overlay 'helm-swoop-overlay-word-frash)))))
-
-;; core ------------------------------------------------
-
-(defun helm-swoop--maybe-fontify! ()
-  "Ensure the entired buffer is highlighted."
-  (let ((fontify-safe?
-         (not (or (derived-mode-p 'magit-mode)
-                  (bound-and-true-p magit-blame-mode)
-                  (memq major-mode helm-swoop-font-lock-exclude)
-                  (not (derived-mode-p 'prog-mode))))))
-    (when (and helm-swoop-speed-or-color
-               font-lock-mode
-               fontify-safe?
-               (or (eq 'always helm-swoop-fontify-buffer-size-limit)
-                   (< (buffer-size) helm-swoop-fontify-buffer-size-limit)))
-      (if (fboundp 'font-lock-ensure)
-          (font-lock-ensure)
-        (with-no-warnings (font-lock-fontify-buffer))))))
-
-(defun helm-swoop--get-content ($buffer &optional $linum)
-  "Get the whole content in buffer and add line number at the head.
-If $linum is number, lines are separated by $linum"
-  (let (($buf (get-buffer $buffer)))
-    (when $buf
-      (with-current-buffer $buf
-        (helm-swoop--maybe-fontify!)
-        (let (($bufstr (helm-swoop--buffer-substring (point-min) (point-max))))
-          (with-temp-buffer
-            (insert $bufstr)
-            (goto-char (point-min))
-            (let (($i 1))
-              (insert (format "%s " $i))
-              (while (re-search-forward "\n" nil t)
-                (setq $i (1+ $i))
-                (if helm-swoop-use-line-number-face
-                    (insert (propertize (format "%s" $i) 'font-lock-face 'helm-swoop-line-number-face) " ")
-                  (insert (format "%s " $i))))
-              ;; Delete empty lines
-              (unless $linum
-                (goto-char (point-min))
-                (while (re-search-forward "^[0-9]+\\s-*$" nil t)
-                  (replace-match ""))))
-            (helm-swoop--buffer-substring (point-min) (point-max))))))))
-
-(defun helm-swoop--goto-line-action ($line)
-  (run-hooks 'helm-swoop-before-goto-line-action-hook)
-  (helm-swoop--goto-line
-   (when (string-match "^[0-9]+" $line)
-     (string-to-number (match-string 0 $line))))
-  (let (($regex
-         (mapconcat 'identity
-                    (split-string helm-pattern " ")
-                    "\\|")))
-    (when (or (and (featurep 'migemo) helm-migemo-mode (migemo-forward $regex nil t))
-              (re-search-forward $regex nil t))
-      (funcall helm-swoop-flash-region-function
-               (match-beginning 0) (match-end 0))
-      (goto-char (match-beginning 0))
-      (run-hooks 'helm-swoop-after-goto-line-action-hook)))
-  (helm-swoop--recenter))
-
-(defun helm-c-source-swoop ()
-  `((name . ,(buffer-name helm-swoop-target-buffer))
-    (candidates . ,(if helm-swoop-list-cache
-                       (progn
-                         (helm-swoop--split-lines-by
-                          helm-swoop-list-cache "\n" helm-swoop-last-prefix-number))
-                     (helm-swoop--split-lines-by
-                      (setq helm-swoop-list-cache
-                            (helm-swoop--get-content helm-swoop-target-buffer t))
-                      "\n" helm-swoop-last-prefix-number)))
-    (get-line . ,#'helm-swoop--buffer-substring)
-    (keymap . ,helm-swoop-map)
-    (header-line . ,(substitute-command-keys
-                     "[\\<helm-swoop-map>\\[helm-swoop-edit]] Edit mode, \
-[\\<helm-swoop-map>\\[helm-multi-swoop-all-from-helm-swoop]] apply all buffers"))
-    (action . (("Go to Line" . helm-swoop--goto-line-action)
-               ("Edit" . helm-swoop--edit)))
-    ,(if (and helm-swoop-last-prefix-number
-              (> helm-swoop-last-prefix-number 1))
-         '(multiline))
-    (match . ,(helm-swoop-match-functions))
-    (search . ,(helm-swoop-search-functions))))
-
-(defun helm-c-source-multi-swoop ($buf $func $action $multiline)
-  `((name . ,$buf)
-    (candidates . ,(funcall $func))
-    (action . ,$action)
-    (header-line . ,(concat $buf
-                            (substitute-command-keys
-                             "    [\\<helm-multi-swoop-map>\\[helm-multi-swoop-edit]] Edit mode")))
-    (keymap . ,helm-multi-swoop-map)
-    (requires-pattern . 2)
-    ,(if (and $multiline
-              (> $multiline 1))
-         '(multiline))
-    (match . ,(helm-swoop-match-functions))
-    (search . ,(helm-swoop-search-functions))))
-
-(defun helm-swoop--set-prefix ($multiline)
-  ;; Enable scrolling margin
-  (setq helm-swoop-last-prefix-number
-        (or $multiline 1))) ;; $multiline is for resume
-
-;; Delete cache when buffer is saved or file changes on disk
-(defun helm-swoop--clear-cache ()
-  (if (boundp 'helm-swoop-list-cache) (setq helm-swoop-list-cache nil)))
-(add-hook 'after-save-hook 'helm-swoop--clear-cache)
-(add-hook 'after-revert-hook 'helm-swoop--clear-cache)
-
-(defadvice narrow-to-region (around helm-swoop-advice-narrow-to-region activate)
-  (helm-swoop--clear-cache)
-  ad-do-it)
-(defadvice narrow-to-defun (around helm-swoop-advice-narrow-to-defun activate)
-  (helm-swoop--clear-cache)
-  ad-do-it)
-(defadvice narrow-to-page (around helm-swoop-advice-narrow-to-page activate)
-  (helm-swoop--clear-cache)
-  ad-do-it)
-(defadvice widen (around helm-swoop-advice-widen activate)
-  (helm-swoop--clear-cache)
-  ad-do-it)
-
-(defun helm-swoop--restore ()
-  (when (= 1 helm-exit-status)
-    (helm-swoop-back-to-last-point t)
-    (helm-swoop--restore-unveiled-overlay))
-  (setq helm-swoop-invisible-targets nil)
-  (remove-hook 'helm-after-update-hook 'helm-swoop--pattern-match)
-  (remove-hook 'helm-after-update-hook 'helm-swoop--keep-nearest-position)
-  (setq helm-swoop-last-query helm-swoop-pattern)
-  (mapc (lambda ($ov)
-          (when (or (eq 'helm-swoop-target-line-face (overlay-get $ov 'face))
-                    (eq 'helm-swoop-target-line-block-face
-                        (overlay-get $ov 'face)))
-            (delete-overlay $ov)))
-        (overlays-in (point-min) (point-max)))
-  (helm-swoop--delete-overlay 'target-buffer)
-  (deactivate-mark t))
-
-;;;###autoload
-(cl-defun helm-swoop (&key $query $source ($multiline current-prefix-arg))
-  "List the all lines to another buffer, which is able to squeeze by
- any words you input. At the same time, the original buffer's cursor
- is jumping line to line according to moving up and down the list."
-  (interactive)
-  (setq helm-swoop-synchronizing-window (selected-window))
-  (setq helm-swoop-last-point (cons (point) (buffer-name (current-buffer))))
-  (setq helm-swoop-last-line-info
-        (cons (current-buffer) (line-number-at-pos)))
-  (unless (boundp 'helm-swoop-last-query)
-    (set (make-local-variable 'helm-swoop-last-query) ""))
-  (setq helm-swoop-target-buffer (current-buffer))
-  (helm-swoop--set-prefix (prefix-numeric-value $multiline))
-  ;; Overlay
-  (setq helm-swoop-line-overlay (make-overlay (point) (point)))
-  (overlay-put helm-swoop-line-overlay
-               'face (if (< 1 helm-swoop-last-prefix-number)
-                         'helm-swoop-target-line-block-face
-                       'helm-swoop-target-line-face))
-  ;; Cache
-  (cond ((not (boundp 'helm-swoop-list-cache))
-         (set (make-local-variable 'helm-swoop-list-cache) nil))
-        ((buffer-modified-p)
-         (setq helm-swoop-list-cache nil)))
-  (unwind-protect
-      (progn
-        ;; For synchronizing line position
-        (add-hook 'helm-after-update-hook 'helm-swoop--pattern-match)
-        (add-hook 'helm-after-update-hook 'helm-swoop--keep-nearest-position t)
-        (cond ($query
-               (if (string-match
-                    "\\(\\^\\[0\\-9\\]\\+\\.\\)\\(.*\\)" $query)
-                   $query ;; NEED FIX #1 to appear as a "^"
-                 $query))
-              (mark-active
-               (let (($st (buffer-substring-no-properties
-                           (region-beginning) (region-end))))
-                 (if (string-match "\n" $st)
-                     (message "Multi line region is not allowed")
-                   (setq $query (helm-swoop-pre-input-optimize $st)))))
-              ((setq $query (helm-swoop-pre-input-optimize
-                             (funcall helm-swoop-pre-input-function))))
-              (t (setq $query "")))
-        ;; First behavior
-        (helm-swoop--recenter)
-        (move-beginning-of-line 1)
-        (helm-swoop--target-line-overlay-move)
-        ;; Execute helm
-        (let ((helm-display-function helm-swoop-split-window-function)
-              (helm-display-source-at-screen-top nil)
-              (helm-completion-window-scroll-margin 5))
-          (helm :sources
-                (or $source
-                    (helm-c-source-swoop))
-                :buffer helm-swoop-buffer
-                :input $query
-                :prompt helm-swoop-prompt
-                :preselect
-                ;; Get current line has content or else near one
-                (if (string-match "^[\t\n\s]*$" (helm-swoop--get-string-at-line))
-                    (save-excursion
-                      (if (re-search-forward "[^\t\n\s]" nil t)
-                          (format "^%s\s" (line-number-at-pos))
-                        (re-search-backward "[^\t\n\s]" nil t)
-                        (format "^%s\s" (line-number-at-pos))))
-                  (format "^%s\s" (line-number-at-pos)))
-                :candidate-number-limit helm-swoop-candidate-number-limit)))
-    ;; Restore helm's hook and window function etc
-    (helm-swoop--restore)))
-
-;; Receive word from isearch ---------------
-;;;###autoload
-(defun helm-swoop-from-isearch ()
-  "Invoke `helm-swoop' from isearch."
-  (interactive)
-  (let (($query (if isearch-regexp
-                    isearch-string
-                  (regexp-quote isearch-string))))
-    (let (search-nonincremental-instead)
-      (isearch-exit))
-    (helm-swoop :$query $query)))
-;; When doing isearch, hand the word over to helm-swoop
-(define-key isearch-mode-map (kbd "M-i") 'helm-swoop-from-isearch)
-
-;; Receive word from evil search ---------------
-(defun helm-swoop-from-evil-search ()
-  "Invoke `helm-swoop' from evil isearch"
-  (interactive)
-  (if (string-match "\\(isearch-\\|evil.*search\\)" (symbol-name real-last-command))
-      (helm-swoop :$query (if isearch-regexp
-                              isearch-string
-                            (regexp-quote isearch-string)))
-    (helm-swoop)))
-;; When doing evil-search, hand the word over to helm-swoop
-;; (define-key evil-motion-state-map (kbd "M-i") 'helm-swoop-from-evil-search)
-
-;; Receive word from evil search ---------------
-(defun helm-swoop-yank-thing-at-point ()
-  "Insert string at which the point helm-swoop started."
-  (interactive)
-  (let ($amend $buf)
-    (with-selected-window helm-swoop-synchronizing-window
-      (setq $buf (get-buffer (cdr helm-swoop-last-point)))
-      (when $buf
-        (with-current-buffer $buf
-          (save-excursion
-            (goto-char (car helm-swoop-last-point))
-            (setq $amend (thing-at-point 'symbol))))))
-    (when $amend
-      (with-selected-window (minibuffer-window)
-        (insert $amend)))))
-
-;; For helm-resume ------------------------
-(defadvice helm-resume-select-buffer
-    (around helm-swoop-if-selected-as-resume activate)
-  "Resume if *Helm Swoop* buffer selected as a resume
- when helm-resume with prefix"
-  (if (boundp 'helm-swoop-last-query)
-      ad-do-it
-    ;; If the buffer hasn't called helm-swoop, just hide from options
-    (let ((helm-buffers (delete helm-swoop-buffer helm-buffers)))
-      ad-do-it))
-  (when (and (equal ad-return-value helm-swoop-buffer)
-             (boundp 'helm-swoop-last-query))
-    (helm-swoop :$query helm-swoop-last-query
-                :$multiline helm-swoop-last-prefix-number)
-    (setq ad-return-value nil)))
-
-(defadvice helm-resume (around helm-swoop-resume activate)
-  "Resume if the last used helm buffer is helm-swoop-buffer"
-  (if (equal helm-last-buffer helm-swoop-buffer)
-      (if (boundp 'helm-swoop-last-query)
-          (if (not (ad-get-arg 0))
-              (helm-swoop :$query helm-swoop-last-query
-                          :$multiline helm-swoop-last-prefix-number))
-        ;; Temporary apply second last buffer
-        (let ((helm-last-buffer (cadr helm-buffers))) ad-do-it))
-    ad-do-it))
-
-;; For caret beginning-match -----------------------------
-(defun helm-swoop--caret-match-delete ($o $aft $beg $end &optional $len)
-  (if $aft
-      (- $end $beg $len) ;; Unused argument? To avoid byte compile error
-    (delete-region (overlay-start $o) (1- (overlay-end $o)))))
-
-(defun helm-swoop-caret-match (&optional _$resume)
-  (interactive)
-  (let* (($prompt helm-swoop-prompt) ;; Accept change of the variable
-         ($line-number-regexp "^[0-9]+.")
-         ($prompt-regexp
-          (funcall `(lambda ()
-                      (rx bol ,$prompt))))
-         ($prompt-regexp-with-line-number
-          (funcall `(lambda ()
-                      (rx bol ,$prompt (group ,$line-number-regexp)))))
-         ($disguise-caret
-          (lambda ()
-            (save-excursion
-              (re-search-backward $prompt-regexp-with-line-number nil t)
-              (let (($o (make-overlay (match-beginning 1) (match-end 1))))
-                (overlay-put $o 'face 'helm-swoop-target-word-face)
-                (overlay-put $o 'modification-hooks '(helm-swoop--caret-match-delete))
-                (overlay-put $o 'display "^")
-                (overlay-put $o 'evaporate t))))))
-    (if (and (minibufferp)
-             (string-match $prompt-regexp
-                           (buffer-substring-no-properties
-                            (point-min) (point-max)))
-             (eq (point) (+ 1 (length helm-swoop-prompt))))
-        (progn
-          (insert $line-number-regexp)
-          (funcall $disguise-caret))
-      (insert "^"))))
-
-;;; @ helm-swoop-edit -----------------------------------------
-
-(defvar helm-swoop-edit-target-buffer)
-(defvar helm-swoop-edit-buffer "*Helm Swoop Edit*")
-(defvar helm-swoop-edit-map
-  (let (($map (make-sparse-keymap)))
-    (define-key $map (kbd "C-x C-s") 'helm-swoop--edit-complete)
-    (define-key $map (kbd "C-c C-g") 'helm-swoop--edit-cancel)
-    (define-key $map (kbd "C-c C-q C-k") 'helm-swoop--edit-delete-all-lines)
-    $map))
-
-(defun helm-swoop--clear-edit-buffer ($prop)
-  (let ((inhibit-read-only t))
-    (mapc (lambda ($ov)
-            (when (overlay-get $ov $prop)
-              (delete-overlay $ov)))
-          (overlays-in (point-min) (point-max)))
-    (set-text-properties (point-min) (point-max) nil)
-    (goto-char (point-min))
-    (erase-buffer)))
-
-(defun helm-swoop--collect-edited-lines ()
-  "Create a list of edited lines with each its own line number"
-  (interactive)
-  (let ($list)
-    (goto-char (point-min))
-    (while (re-search-forward "^\\([0-9]+\\)\s" nil t)
-      (setq $list
-            (cons (cons (string-to-number (match-string 1))
-                        (buffer-substring-no-properties
-                         (point)
-                         (save-excursion
-                           (if (re-search-forward
-                                "^\\([0-9]+\\)\s\\|^\\(\\-+\\)" nil t)
-                               (1- (match-beginning 0))
-                             (goto-char (point-max))
-                             (re-search-backward "\n" nil t)))))
-                  $list)))
-    $list))
-
-(defun helm-swoop--edit ($candidate)
-  "This function will only be called from `helm-swoop-edit'"
-  (interactive)
-  (setq helm-swoop-edit-target-buffer helm-swoop-target-buffer)
-  (delete-overlay helm-swoop-line-overlay)
-  (helm-swoop--delete-overlay 'target-buffer)
-  (with-current-buffer (get-buffer-create helm-swoop-edit-buffer)
-
-    (helm-swoop--clear-edit-buffer 'helm-swoop-edit)
-    (let (($bufstr ""))
-      ;; Get target line number to edit
-      (with-current-buffer helm-swoop-buffer
-        ;; Use selected line by [C-SPC] or [M-SPC]
-        (mapc (lambda ($ov)
-                (when (eq 'helm-visible-mark (overlay-get $ov 'face))
-                  (setq $bufstr (concat (buffer-substring-no-properties
-                                         (overlay-start $ov) (overlay-end $ov))
-                                        $bufstr))))
-              (overlays-in (point-min) (point-max)))
-        (if (equal "" $bufstr)
-            ;; Not found selected line
-            (setq $bufstr (buffer-substring-no-properties
-                           (point-min) (point-max)))
-          ;; Attach title
-          (setq $bufstr (concat "Helm Swoop\n" $bufstr))))
-
-      ;; Set for edit buffer
-      (insert $bufstr)
-      (add-text-properties (point-min) (point-max)
-                           '(read-only t rear-nonsticky t front-sticky t))
-
-      ;; Set for editable context
-      (let ((inhibit-read-only t))
-        ;; Title and explanation
-        (goto-char (point-min))
-        (let (($o (make-overlay (point) (point-at-eol))))
-          (overlay-put $o 'helm-swoop-edit t)
-          (overlay-put $o 'face 'font-lock-function-name-face)
-          (overlay-put $o 'after-string
-                       (propertize
-                        (substitute-command-keys
-                         (concat
-                          " [\\<helm-swoop-edit-map>\\[helm-swoop--edit-complete]] Complete"
-                          ", [\\<helm-swoop-edit-map>\\[helm-swoop--edit-cancel]] Cancel"
-                          ", [\\<helm-swoop-edit-map>\\[helm-swoop--edit-delete-all-lines]] Delete All"
-                          ))
-                        'face 'helm-bookmark-addressbook)))
-        ;; Line number and editable area
-        (while (re-search-forward "^\\([0-9]+\s\\)\\(.*\\)$" nil t)
-          (let* (($bol1 (match-beginning 1))
-                 ($eol1 (match-end 1))
-                 ($bol2 (match-beginning 2))
-                 ($eol2 (match-end 2)))
-            ;; Line number
-            (add-text-properties $bol1 $eol1
-                                 '(face font-lock-function-name-face
-                                        intangible t))
-            ;; Editable area
-            (remove-text-properties $bol2 $eol2 '(read-only t))
-            ;; For line tail
-            (set-text-properties $eol2 (or (1+ $eol2) (point-max))
-                                 '(read-only t rear-nonsticky t))))
-        (helm-swoop--target-word-overlay 'edit-buffer 0))))
-
-  (other-window 1)
-  (switch-to-buffer helm-swoop-edit-buffer)
-  (goto-char (point-min))
-  (if (string-match "^[0-9]+" $candidate)
-      (re-search-forward
-       (concat "^" (match-string 0 $candidate)) nil t))
-  (use-local-map helm-swoop-edit-map))
-
-(defun helm-swoop--edit-complete ()
-  "Apply changes and kill temporary edit buffer"
-  (interactive)
-  (let (($list (helm-swoop--collect-edited-lines)))
-    (with-current-buffer helm-swoop-edit-target-buffer
-      ;; Replace from the end of buffer
-      (save-excursion
-        (mapc (lambda ($cell)
-                (let (($k (car $cell))
-                      ($v (cdr $cell)))
-                  (goto-char (point-min))
-                  (delete-region (point-at-bol $k) (point-at-eol $k))
-                  (goto-char (point-at-bol $k))
-                  (insert $v)))
-              $list)))
-    (select-window helm-swoop-synchronizing-window)
-    (kill-buffer (get-buffer helm-swoop-edit-buffer)))
-  (message "Successfully helm-swoop-edit applied to original buffer"))
-
-(defun helm-swoop--edit-delete-all-lines ()
-  "Apply changes and kill temporary edit buffer"
-  (interactive)
-  (let (($list (helm-swoop--collect-edited-lines)))
-    (with-current-buffer helm-swoop-edit-target-buffer
-      ;; Replace from the end of buffer
-      (save-excursion
-        (mapc (lambda ($cell)
-                (let (($k (car $cell)))
-                  (goto-char (point-min))
-                  (delete-region (point-at-bol $k)
-                                 (if (eq (point-at-eol $k) (point-max))
-                                     (point-at-eol $k)
-                                   (1+ (point-at-eol $k))))))
-              $list)))
-    (select-window helm-swoop-synchronizing-window)
-    (kill-buffer (get-buffer helm-swoop-edit-buffer)))
-  (message "Successfully helm-swoop-edit applied to original buffer"))
-
-(defun helm-swoop--edit-cancel ()
-  "Cancel edit and kill temporary buffer"
-  (interactive)
-  (select-window helm-swoop-synchronizing-window)
-  (kill-buffer (get-buffer helm-swoop-edit-buffer))
-  (message "helm-swoop-edit canceled"))
-
-(defun helm-swoop-edit ()
-  (interactive)
-  (helm-exit-and-execute-action 'helm-swoop--edit))
-
-;;; @ helm-multi-swoop ----------------------------------------
-(defvar helm-multi-swoop-buffer-list "*helm-multi-swoop buffers list*"
-  "Buffer name")
-(defvar helm-multi-swoop-ignore-buffers-match "^\\*"
-  "Regexp to eliminate buffers you don't want to see")
-(defvar helm-multi-swoop-candidate-number-limit 250)
-(defvar helm-multi-swoop-last-selected-buffers nil)
-(defvar helm-multi-swoop-last-query nil)
-(defvar helm-multi-swoop-query nil)
-(defvar helm-multi-swoop-buffer "*Helm Multi Swoop*")
-(defvar helm-multi-swoop-all-from-helm-swoop-last-point nil
-  "For the last position, when helm-multi-swoop-all-from-helm-swoop canceled")
-(defvar helm-multi-swoop-move-line-action-last-buffer nil)
-
-(defvar helm-multi-swoop-buffers-map
-  (let (($map (make-sparse-keymap)))
-    (set-keymap-parent $map helm-map)
-    (define-key $map (kbd "RET")
-      (lambda () (interactive)
-        (helm-exit-and-execute-action 'helm-multi-swoop--exec)))
-    (delq nil $map)))
-
-(defvar helm-multi-swoop-projectile-buffers-filter
-  #'projectile-buffers-with-file-or-process)
-;; action -----------------------------------------------------
-
-(defun helm-multi-swoop--move-line-action ()
-  (with-helm-window
-    (let* (($key (buffer-substring (point-at-bol) (point-at-eol)))
-           ($num (when (string-match "^[0-9]+" $key)
-                   (string-to-number (match-string 0 $key))))
-           ($source (helm-get-current-source))
-           ($buf (let (($name (assoc-default 'name $source)))
-                   (when $name (get-buffer $name)))))
-      (when $buf
-        ;; Synchronizing line position
-        (with-selected-window helm-swoop-synchronizing-window
-          (with-current-buffer $buf
-            (when (not (eq $buf helm-multi-swoop-move-line-action-last-buffer))
-              (set-window-buffer nil $buf)
-              (helm-swoop--pattern-match))
-            (helm-swoop--goto-line $num)
-            (helm-swoop--target-line-overlay-move $buf)
-            (helm-swoop--recenter))
-          (setq helm-multi-swoop-move-line-action-last-buffer $buf))
-        (setq helm-swoop-last-line-info (cons $buf $num))))))
-
-(defun helm-multi-swoop--get-marked-buffers ()
-  (let ($list
-        ($buf (get-buffer helm-multi-swoop-buffer-list)))
-    (when $buf
-      (with-current-buffer (get-buffer helm-multi-swoop-buffer-list)
-        (mapc (lambda ($ov)
-                (when (eq 'helm-visible-mark (overlay-get $ov 'face))
-                  (setq $list (cons
-                               (let (($word (buffer-substring-no-properties
-                                             (overlay-start $ov) (overlay-end $ov))))
-                                 (mapc (lambda ($r)
-                                         (setq $word (replace-regexp-in-string
-                                                      (car $r) (cdr $r) $word)))
-                                       (list '("\\`[ \t\n\r]+" . "")
-                                             '("[ \t\n\r]+\\'" . "")))
-                                 $word)
-                               $list))))
-              (overlays-in (point-min) (point-max))))
-      (delete "" $list))))
-
-;; core --------------------------------------------------------
-
-(cl-defun helm-multi-swoop--exec (ignored &key $query $buflist $func $action)
-  (interactive)
-  (setq helm-swoop-synchronizing-window (selected-window))
-  (setq helm-swoop-last-point
-        (or helm-multi-swoop-all-from-helm-swoop-last-point
-            (cons (point) (buffer-name (current-buffer)))))
-  (setq helm-swoop-last-line-info
-        (cons (current-buffer) (line-number-at-pos)))
-  (unless (get-buffer helm-multi-swoop-buffer-list)
-    (get-buffer-create helm-multi-swoop-buffer-list))
-  (helm-swoop--set-prefix (prefix-numeric-value current-prefix-arg))
-  (let (($buffs (or $buflist
-                    (helm-multi-swoop--get-marked-buffers)
-                    `(,(buffer-name helm-swoop-target-buffer))
-                    (error "No buffer selected")))
-        $contents
-        $preserve-position
-        ($prefix-arg (prefix-numeric-value
-                      (or current-prefix-arg helm-swoop-last-prefix-number 1))))
-    (helm-swoop--set-prefix $prefix-arg)
-    (setq helm-multi-swoop-last-selected-buffers $buffs)
-    ;; Create buffer sources
-    (mapc (lambda ($buf)
-            (when (get-buffer $buf)
-              (with-current-buffer (get-buffer $buf)
-                (let* (($func
-                        (or $func
-                            (lambda ()
-                              (helm-swoop--split-lines-by
-                               (helm-swoop--get-content $buf t)
-                               "\n" $prefix-arg))))
-                       ($action
-                        (or $action
-                            `(("Go to Line"
-                               . (lambda ($line)
-                                   (switch-to-buffer ,$buf)
-                                   (helm-swoop--goto-line
-                                    (when (string-match "^[0-9]+" $line)
-                                      (string-to-number
-                                       (match-string 0 $line))))
-                                   (when (re-search-forward
-                                          (mapconcat 'identity
-                                                     (split-string
-                                                      helm-pattern " ") "\\|")
-                                          nil t)
-                                     (funcall helm-swoop-flash-region-function
-                                              (match-beginning 0) (match-end 0))
-                                     (goto-char (match-beginning 0)))
-                                   (helm-swoop--recenter)))
-                              ("Edit" . helm-multi-swoop--edit)))))
-                  (setq $preserve-position
-                        (cons (cons $buf (point)) $preserve-position))
-                  (setq
-                   $contents
-                   (cons
-                    (helm-c-source-multi-swoop $buf $func $action $prefix-arg)
-                    $contents))))))
-          $buffs)
-    (unwind-protect
-        (progn
-          (add-hook 'helm-after-update-hook 'helm-swoop--pattern-match)
-          (add-hook 'helm-after-update-hook 'helm-swoop--keep-nearest-position t)
-          (setq helm-swoop-line-overlay
-                (make-overlay (point) (point)))
-          (overlay-put helm-swoop-line-overlay
-                       'face 'helm-swoop-target-line-face)
-          (helm-swoop--target-line-overlay-move)
-          ;; Execute helm
-          (let ((helm-display-function helm-swoop-split-window-function)
-                (helm-display-source-at-screen-top nil)
-                (helm-completion-window-scroll-margin 5))
-            (helm :sources $contents
-                  :buffer helm-multi-swoop-buffer
-                  :input (or $query helm-multi-swoop-query "")
-                  :prompt helm-swoop-prompt
-                  :candidate-number-limit
-                  helm-multi-swoop-candidate-number-limit
-                  :preselect
-                  (regexp-quote
-                   (format "%s %s" (line-number-at-pos)
-                           (helm-swoop--get-string-at-line))))))
-      ;; Restore
-      (progn
-        (when (= 1 helm-exit-status)
-          (helm-swoop-back-to-last-point t)
-          (helm-swoop--restore-unveiled-overlay))
-        (setq helm-swoop-invisible-targets nil)
-        (remove-hook 'helm-after-update-hook 'helm-swoop--pattern-match)
-        (remove-hook 'helm-after-update-hook 'helm-swoop--keep-nearest-position)
-        (setq helm-multi-swoop-last-query helm-swoop-pattern)
-        (helm-swoop--restore-unveiled-overlay)
-        (setq helm-multi-swoop-query nil)
-        (setq helm-multi-swoop-all-from-helm-swoop-last-point nil)
-        (mapc (lambda ($buf)
-                (let (($current-buffer (buffer-name (current-buffer))))
-                  (with-current-buffer (car $buf)
-                    ;; Delete overlay
-                    (delete-overlay helm-swoop-line-overlay)
-                    (helm-swoop--delete-overlay 'target-buffer)
-                    ;; Restore each buffer's position
-                    (unless (equal (car $buf) $current-buffer)
-                      (goto-char (cdr $buf))))))
-              $preserve-position)))))
-
-(defun helm-multi-swoop--get-buffer-list ()
-  (let ($buflist1 $buflist2)
-    ;; eliminate buffers start with whitespace and dired buffers
-    (mapc (lambda ($buf)
-            (setq $buf (buffer-name $buf))
-            (unless (string-match "^\\s-" $buf)
-              (unless (eq 'dired-mode (with-current-buffer $buf major-mode))
-                (setq $buflist1 (cons $buf $buflist1)))))
-          (buffer-list))
-    ;; eliminate buffers match pattern
-    (mapc (lambda ($buf)
-            (unless (string-match
-                     helm-multi-swoop-ignore-buffers-match
-                     $buf)
-              (setq $buflist2 (cons $buf $buflist2))))
-          $buflist1)
-    $buflist2))
-
-(defun helm-c-source-helm-multi-swoop-buffers ()
-  "Show buffer list to select"
-  `((name . "helm-multi-swoop select buffers")
-    (candidates . helm-multi-swoop--get-buffer-list)
-    (header-line . "[C-SPC]/[M-SPC] select, [RET] next step")
-    (keymap . ,helm-multi-swoop-buffers-map)
-    (match . ,(helm-swoop-match-functions))
-    (search . ,(helm-swoop-search-functions))))
-
-(defun helm-multi-swoop--get-query ($query)
-  (cond ($query
-         (setq helm-multi-swoop-query $query))
-        (mark-active
-         (let (($st (buffer-substring-no-properties
-                     (region-beginning) (region-end))))
-           (if (string-match "\n" $st)
-               (message "Multi line region is not allowed")
-             (setq helm-multi-swoop-query
-                   (helm-swoop-pre-input-optimize $st)))))
-        ((setq helm-multi-swoop-query
-               (helm-swoop-pre-input-optimize
-                (funcall helm-swoop-pre-input-function))))
-        (t (setq helm-multi-swoop-query ""))))
-
-;;;###autoload
-(defun helm-multi-swoop (&optional $query $buflist)
-  "\
-Usage:
-M-x helm-multi-swoop
-1. Select any buffers by [C-SPC] or [M-SPC]
-2. Press [RET] to start helm-multi-swoop
-
-C-u M-x helm-multi-swoop
-If you have done helm-multi-swoop before, you can skip select buffers step.
-Last selected buffers will be applied to helm-multi-swoop.
-"
-  (interactive)
-  (setq helm-multi-swoop-query (helm-multi-swoop--get-query $query))
-  (if (equal current-prefix-arg '(4))
-      (helm-multi-swoop--exec nil
-                              :$query helm-multi-swoop-query
-                              :$buflist $buflist)
-    (if $buflist
-        (helm-multi-swoop--exec nil
-                                :$query $query
-                                :$buflist $buflist)
-      (helm :sources (helm-c-source-helm-multi-swoop-buffers)
-            :buffer helm-multi-swoop-buffer-list
-            :prompt "Mark any buffers by [C-SPC] or [M-SPC]: "))))
-
-;;;###autoload
-(defun helm-multi-swoop-all (&optional $query)
-  "Apply all buffers to helm-multi-swoop"
-  (interactive)
-  (setq helm-multi-swoop-query (helm-multi-swoop--get-query $query))
-  (helm-multi-swoop--exec nil
-                          :$query helm-multi-swoop-query
-                          :$buflist (helm-multi-swoop--get-buffer-list)))
-
-(defun get-buffers-matching-mode ($mode)
-  "Returns a list of buffers where their major-mode is equal to MODE"
-  (let ($buffer-mode-matches)
-    (mapc (lambda ($buf)
-            (when (get-buffer $buf)
-              (with-current-buffer (get-buffer $buf)
-                (if (eq $mode major-mode)
-                    (add-to-list '$buffer-mode-matches (buffer-name $buf))))))
-          (buffer-list))
-    $buffer-mode-matches))
-
-(defun helm-multi-swoop-by-mode ($mode &optional $query)
-  "Apply all buffers whose mode is MODE to helm-multi-swoop"
-  (setq helm-multi-swoop-query (helm-multi-swoop--get-query $query))
-  (if (get-buffers-matching-mode $mode)
-      (helm-multi-swoop--exec nil
-                              :$query helm-multi-swoop-query
-                              :$buflist (get-buffers-matching-mode $mode))
-    (message "there are no buffers in that mode right now")))
-
-;;;###autoload
-(defun helm-multi-swoop-org (&optional $query)
-  "Applies all org-mode buffers to helm-multi-swoop"
-  (interactive)
-  (helm-multi-swoop-by-mode 'org-mode $query))
-
-;;;###autoload
-(defun helm-multi-swoop-current-mode (&optional $query)
-  "Applies all buffers of the same mode as the current buffer to helm-multi-swoop"
-  (interactive)
-  (helm-multi-swoop-by-mode major-mode $query))
-
-;;;###autoload
-(defun helm-multi-swoop-projectile (&optional $query)
-  "Apply all opened buffers of the current project to helm-multi-swoop"
-  (interactive)
-  (setq helm-multi-swoop-query (helm-multi-swoop--get-query $query))
-  (if (require 'projectile nil 'noerror)
-      ;; set filter function that is used in projectile-project-buffers
-      (let ((projectile-buffers-filter-function
-             helm-multi-swoop-projectile-buffers-filter))
-        (helm-multi-swoop--exec nil
-                                :$query helm-multi-swoop-query
-                                :$buflist (mapcar #'buffer-name
-                                                  (projectile-project-buffers))))
-    (error "Package 'projectile' is not available")))
-
-
-(defun helm-swoop--wrap-function-with-pre-input-function ($target-func $pre-input-func)
-  (let ((helm-swoop-pre-input-function $pre-input-func))
-    (funcall $target-func)))
-
-;;;###autoload
-(defun helm-swoop-without-pre-input ()
-  "Start helm-swoop without pre input query."
-  (interactive)
-  (helm-swoop--wrap-function-with-pre-input-function
-   'helm-swoop (lambda () nil)))
-
-;;;###autoload
-(defun helm-swoop-symble-pre-input ()
-  "Start helm-swoop without pre input query."
-  (interactive)
-  (helm-swoop--wrap-function-with-pre-input-function
-   'helm-swoop (lambda () (format "\\_<%s\\_> " (thing-at-point 'symbol)))))
-
-;; option -------------------------------------------------------
-
-(defun helm-multi-swoop-all-from-isearch ()
-  "Invoke `helm-multi-swoop-all' from isearch."
-  (interactive)
-  (let (($query (if isearch-regexp
-                    isearch-string
-                  (regexp-quote isearch-string))))
-    (let (search-nonincremental-instead)
-      (isearch-exit))
-    (helm-multi-swoop-all $query)))
-;; When doing isearch, hand the word over to helm-swoop
-;; (define-key isearch-mode-map (kbd "C-x M-i") 'helm-multi-swoop-all-from-isearch)
-
-(defun helm-multi-swoop-all-from-helm-swoop ()
-  "Invoke `helm-multi-swoop-all' from helm-swoop."
-  (interactive)
-  (helm-swoop--restore)
-  (delete-overlay helm-swoop-line-overlay)
-  (setq helm-multi-swoop-all-from-helm-swoop-last-point helm-swoop-last-point)
-  (let (($query helm-pattern))
-    (run-with-timer 0 nil (lambda () (helm-multi-swoop-all $query))))
-  (helm-exit-minibuffer))
-
-(defun helm-multi-swoop-current-mode-from-helm-swoop ()
-  "Invoke `helm-multi-swoop-all' from helm-swoop."
-  (interactive)
-  (helm-swoop--restore)
-  (delete-overlay helm-swoop-line-overlay)
-  (setq helm-multi-swoop-all-from-helm-swoop-last-point helm-swoop-last-point)
-  (let (($query helm-pattern))
-    (run-with-timer 0 nil (lambda () (helm-multi-swoop-current-mode $query))))
-  (helm-exit-minibuffer))
-;; (define-key helm-swoop-map (kbd "M-m") 'helm-multi-swoop-current-mode-from-helm-swoop)
-
-(defadvice helm-resume (around helm-multi-swoop-resume activate)
-  "Resume if the last used helm buffer is *Helm Swoop*"
-  (if (equal helm-last-buffer helm-multi-swoop-buffer)
-
-      (if (boundp 'helm-multi-swoop-last-query)
-          (if (not (ad-get-arg 0))
-              (helm-multi-swoop helm-multi-swoop-last-query
-                                helm-multi-swoop-last-selected-buffers))
-        ;; Temporary apply second last buffer
-        (let ((helm-last-buffer (cadr helm-buffers))) ad-do-it))
-    ad-do-it))
-
-;;; @ helm-multi-swoop-edit -----------------------------------
-(defvar helm-multi-swoop-edit-save t
-  "Save each buffer you edit when editing is complete")
-(defvar helm-multi-swoop-edit-buffer "*Helm Multi Swoop Edit*")
-
-(defvar helm-multi-swoop-edit-map
-  (let (($map (make-sparse-keymap)))
-    (define-key $map (kbd "C-x C-s") 'helm-multi-swoop--edit-complete)
-    (define-key $map (kbd "C-c C-g") 'helm-multi-swoop--edit-cancel)
-    (define-key $map (kbd "C-c C-q C-k") 'helm-multi-swoop--edit-delete-all-lines)
-    $map))
-
-(defun helm-multi-swoop--edit ($candidate)
-  "This function will only be called from `helm-swoop-edit'"
-  (interactive)
-  (delete-overlay helm-swoop-line-overlay)
-  (helm-swoop--delete-overlay 'target-buffer)
-  (with-current-buffer (get-buffer-create helm-multi-swoop-edit-buffer)
-    (helm-swoop--clear-edit-buffer 'helm-multi-swoop-edit)
-    (let (($bufstr "")
-          ($mark nil)
-          ($buf (get-buffer helm-multi-swoop-buffer)))
-      ;; Get target line number to edit
-      (when $buf
-        (with-current-buffer $buf
-          ;; Set overlay to helm-source-header for editing marked lines
-          (save-excursion
-            (goto-char (point-min))
-            (let (($beg (point)) $end)
-              (overlay-recenter (point-max))
-              (while (setq $beg (text-property-any $beg (point-max)
-                                                   'face 'helm-source-header))
-                (setq $end (next-single-property-change $beg 'face))
-                (overlay-put (make-overlay $beg $end) 'source-header t)
-                (setq $beg $end)
-                (goto-char $end))))
-          ;; Use selected line by [C-SPC] or [M-SPC]
-          (mapc (lambda ($ov)
-                  (when (overlay-get $ov 'source-header)
-                    (setq $bufstr (concat (buffer-substring
-                                           (overlay-start $ov) (overlay-end $ov))
-                                          $bufstr)))
-                  (when (eq 'helm-visible-mark (overlay-get $ov 'face))
-                    (let (($str (buffer-substring (overlay-start $ov) (overlay-end $ov))))
-                      (unless (equal "" $str) (setq $mark t))
-                      (setq $bufstr (concat (buffer-substring
-                                             (overlay-start $ov) (overlay-end $ov))
-                                            $bufstr)))))
-                (overlays-in (point-min) (point-max)))
-          (if $mark
-              (progn (setq $bufstr (concat "Helm Multi Swoop\n" $bufstr))
-                     (setq $mark nil))
-            (setq $bufstr (concat "Helm Multi Swoop\n"
-                                  (buffer-substring
-                                   (point-min) (point-max)))))))
-
-      ;; Set for edit buffer
-      (insert $bufstr)
-      (add-text-properties (point-min) (point-max)
-                           '(read-only t rear-nonsticky t front-sticky t))
-
-      ;; Set for editable context
-      (let ((inhibit-read-only t))
-        ;; Title and explanation
-        (goto-char (point-min))
-        (let (($o (make-overlay (point) (point-at-eol))))
-          (overlay-put $o 'helm-multi-swoop-edit t)
-          (overlay-put $o 'face 'font-lock-function-name-face)
-          (overlay-put $o 'after-string
-                       (propertize
-                        (substitute-command-keys
-                         (concat
-                          " [\\<helm-swoop-edit-map>\\[helm-swoop--edit-complete]] Complete"
-                          ", [\\<helm-swoop-edit-map>\\[helm-swoop--edit-cancel]] Cancel"
-                          ", [\\<helm-swoop-edit-map>\\[helm-swoop--edit-delete-all-lines]] Delete All"
-                          ))
-                        'face 'helm-bookmark-addressbook)))
-        ;; Line number and editable area
-        (while (re-search-forward "^\\([0-9]+\s\\)\\(.*\\)$" nil t)
-          (let* (($bol1 (match-beginning 1))
-                 ($eol1 (match-end 1))
-                 ($bol2 (match-beginning 2))
-                 ($eol2 (match-end 2)))
-
-            ;; Line number
-            (add-text-properties $bol1 $eol1
-                                 '(face font-lock-function-name-face
-                                        intangible t))
-            ;; Editable area
-            (remove-text-properties $bol2 $eol2 '(read-only t))
-            ;; (add-text-properties $bol2 $eol2 '(font-lock-face helm-match))
-
-            ;; For line tail
-            (set-text-properties $eol2 (or (1+ $eol2) (point-max))
-                                 '(read-only t rear-nonsticky t))))
-        (helm-swoop--target-word-overlay 'edit-buffer 0))))
-
-  (other-window 1)
-  (switch-to-buffer helm-multi-swoop-edit-buffer)
-  (goto-char (point-min))
-  (if (string-match "^[0-9]+" $candidate)
-      (re-search-forward
-       (concat "^" (match-string 0 $candidate)) nil t))
-  (use-local-map helm-multi-swoop-edit-map))
-
-(defun helm-multi-swoop--separate-text-property-into-list ($property)
-  (interactive)
-  (let ($list $end)
-    (save-excursion
-      (goto-char (point-min))
-      (while (setq $end (next-single-property-change (point) $property))
-        ;; Must eliminate last return because of unexpected edit result
-        (setq $list (cons
-                     (let (($str (buffer-substring-no-properties (point) $end)))
-                       (if (string-match "\n\n\\'" $str)
-                           (replace-regexp-in-string "\n\\'" "" $str)
-                         $str))
-                     $list))
-        (goto-char $end))
-      (setq $list (cons (buffer-substring-no-properties (point) (point-max))
-                        $list)))
-    (nreverse $list)))
-
-(defun helm-multi-swoop--collect-edited-lines ()
-  "Create a list of edited lines with each its own line number"
-  (interactive)
-  (let* (($list
-          (helm-multi-swoop--separate-text-property-into-list 'helm-header))
-         ($length (length $list))
-         ($i 1) ;; 0th $list is header
-         $pairs)
-    (while (<= $i $length)
-      (let ($contents)
-        ;; Make ((number . line) (number . line) (number . line) ...)
-        (with-temp-buffer
-          (insert (format "%s" (nth (1+ $i) $list)))
-          (goto-char (point-min))
-          (while (re-search-forward "^\\([0-9]+\\)\s" nil t)
-            (setq $contents
-                  (cons (cons (string-to-number (match-string 1))
-                              (buffer-substring-no-properties
-                               (point)
-                               (save-excursion
-                                 (if (re-search-forward
-                                      "^\\([0-9]+\\)\s\\|^\\(\\-+\\)" nil t)
-                                     (1- (match-beginning 0))
-                                   (goto-char (point-max))
-                                   (re-search-backward "\n" nil t)))))
-                        $contents))))
-        ;; Make ((buffer-name (number . line) (number . line) ...)
-        ;;       (buffer-name (number . line) (number . line) ...) ...)
-        (setq $pairs (cons (cons (nth $i $list) $contents) $pairs)))
-      (setq $i (+ $i 2)))
-    (delete '(nil) $pairs)))
-
-(defun helm-multi-swoop--edit-complete ()
-  "Delete all extracted lines, and apply changes to buffers and kill temporary edit buffer"
-  (interactive)
-  (let (($list (helm-multi-swoop--collect-edited-lines))
-        $read-only)
-    (mapc (lambda ($x)
-            (with-current-buffer (car $x)
-              (unless buffer-read-only
-                (save-excursion
-                  (mapc (lambda ($cell)
-                          (let (($k (car $cell))
-                                ($v (cdr $cell)))
-                            (goto-char (point-min))
-                            (delete-region (point-at-bol $k) (point-at-eol $k))
-                            (goto-char (point-at-bol $k))
-                            (insert $v)))
-                        (cdr $x))))
-              (if helm-multi-swoop-edit-save
-                  (if buffer-read-only
-                      (setq $read-only t)
-                    (save-buffer)))))
-          $list)
-    (select-window helm-swoop-synchronizing-window)
-    (kill-buffer (get-buffer helm-multi-swoop-edit-buffer))
-    (if $read-only
-        (message "Couldn't save some buffers because of read-only")
-      (message "Successfully helm-multi-swoop-edit applied to original buffer"))))
-
-(defun helm-multi-swoop--edit-delete-all-lines ()
-  "Delete all extracted lines, and apply changes to buffers and kill temporary edit buffer"
-  (interactive)
-  (let (($list (helm-multi-swoop--collect-edited-lines))
-        $read-only)
-    (mapc (lambda ($x)
-            (with-current-buffer (car $x)
-              (unless buffer-read-only
-                (save-excursion
-                  (mapc (lambda ($cell)
-                          (let (($k (car $cell)))
-                            (goto-char (point-min))
-                            (delete-region (point-at-bol $k)
-                                           (if (eq (point-at-eol $k) (point-max))
-                                               (point-at-eol $k)
-                                             (1+ (point-at-eol $k))))))
-                        (cdr $x))))
-              (if helm-multi-swoop-edit-save
-                  (if buffer-read-only
-                      (setq $read-only t)
-                    (save-buffer)))))
-          $list)
-    (select-window helm-swoop-synchronizing-window)
-    (kill-buffer (get-buffer helm-multi-swoop-edit-buffer))
-    (if $read-only
-        (message "Couldn't save some buffers because of read-only")
-      (message "Successfully helm-multi-swoop-edit applied to original buffer"))))
-
-(defun helm-multi-swoop--edit-cancel ()
-  "Cancel edit and kill temporary buffer"
-  (interactive)
-  (select-window helm-swoop-synchronizing-window)
-  (kill-buffer (get-buffer helm-multi-swoop-edit-buffer))
-  (message "helm-multi-swoop-edit canceled"))
-
-;;;###autoload
-(defun helm-multi-swoop-edit ()
-  (interactive)
-  (helm-exit-and-execute-action 'helm-multi-swoop--edit))
-
-;;; @ helm-swoop-same-face-at-point -----------------------------------
-
-(defsubst helm-swoop--get-at-face (&optional $point)
-  (or $point (setq $point (point)))
-  (let (($face (or (get-char-property $point 'read-face-name)
-                   (get-char-property $point 'face))))
-    $face))
-
-(defun helm-swoop--cull-face-include-line ($face)
-  (let (($list) ($po (point-min)))
-    (save-excursion
-      (while (setq $po (next-single-property-change $po 'face))
-        (when (equal $face (helm-swoop--get-at-face $po))
-          (goto-char $po)
-          (setq $list (cons (format "%s %s"
-                                    (line-number-at-pos $po)
-                                    (buffer-substring (point-at-bol) (point-at-eol)))
-                            $list))
-          (let (($ov (make-overlay $po (or (next-single-property-change $po 'face)
-                                           (point-max)))))
-            (overlay-put $ov 'face 'helm-swoop-target-word-face)
-            (overlay-put $ov 'target-buffer 'helm-swoop-target-word-face)))))
-    (nreverse (delete-dups $list))))
-
-(defun helm-swoop-same-face-at-point (&optional $face)
-  (interactive)
-  (or $face (setq $face (helm-swoop--get-at-face)))
-  (helm-swoop :$query ""
-              :$source
-              `((name . "helm-swoop-same-face-at-point")
-                (candidates . ,(helm-swoop--cull-face-include-line $face))
-                (header-line . ,(format "%s" $face))
-                (action
-                 . (("Go to Line"
-                     . (lambda ($line)
-                         (helm-swoop--goto-line
-                          (when (string-match "^[0-9]+" $line)
-                            (string-to-number (match-string 0 $line))))
-                         (let (($po (point))
-                               ($poe (point-at-eol)))
-                           (while (<= (setq $po (next-single-property-change $po 'face)) $poe)
-                             (when (eq 'helm-swoop-target-word-face (helm-swoop--get-at-face $po))
-                               (goto-char $po))))
-                         (helm-swoop--recenter)))
-                    ("Edit" . helm-swoop--edit))))))
-
-(defun helm-multi-swoop-same-face-at-point (&optional $face)
-  (interactive)
-  (or $face (setq $face (helm-swoop--get-at-face)))
-  (helm-multi-swoop--exec
-   nil
-   :$query ""
-   :$func (lambda () (helm-swoop--cull-face-include-line $face))
-   :$action (lambda ($line)
-              (switch-to-buffer (assoc-default 'name (helm-get-current-source)))
-              (helm-swoop--goto-line
-               (when (string-match "^[0-9]+" $line)
-                 (string-to-number (match-string 0 $line))))
-              (let (($po (point))
-                    ($poe (point-at-eol)))
-                (while (<= (setq $po (next-single-property-change $po 'face)) $poe)
-                  (when (eq 'helm-swoop-target-word-face (helm-swoop--get-at-face $po))
-                    (goto-char $po))))
-              (helm-swoop--recenter))
-   :$buflist (helm-multi-swoop--get-buffer-list)))
-
-(provide 'helm-swoop)
-
-;; Local Variables:
-;; indent-tabs-mode: nil
-;; End:
-
-;;; helm-swoop.el ends here
diff --git a/elpa/helm-swoop-20200121.1859/helm-swoop-autoloads.el b/elpa/helm-swoop-20200121.1859/helm-swoop-autoloads.el
new file mode 100644 (file)
index 0000000..3c34a23
--- /dev/null
@@ -0,0 +1,89 @@
+;;; helm-swoop-autoloads.el --- automatically extracted autoloads
+;;
+;;; Code:
+
+(add-to-list 'load-path (directory-file-name
+                         (or (file-name-directory #$) (car load-path))))
+
+\f
+;;;### (autoloads nil "helm-swoop" "helm-swoop.el" (0 0 0 0))
+;;; Generated autoloads from helm-swoop.el
+
+(autoload 'helm-swoop-back-to-last-point "helm-swoop" "\
+Go back to last position where `helm-swoop' was called.
+If $CANSEL is non-nil, store `helm-swoop-last-point'.
+
+\(fn &optional $CANCEL)" t nil)
+
+(autoload 'helm-swoop "helm-swoop" "\
+List the all lines to another buffer, which is able to squeeze by
+ any words you input. At the same time, the original buffer's cursor
+ is jumping line to line according to moving up and down the list.
+
+\(fn &key $QUERY $SOURCE ($MULTILINE current-prefix-arg))" t nil)
+
+(autoload 'helm-swoop-from-isearch "helm-swoop" "\
+Invoke `helm-swoop' from isearch.
+
+\(fn)" t nil)
+
+(autoload 'helm-multi-swoop "helm-swoop" "\
+Multi swoop for $QUERY in $BUFLIST.
+
+Usage:
+  \\[execute-extended-command] helm-multi-swoop
+  1. Select any buffers by [C-SPC] or [M-SPC]
+  2. Press [RET] to start `helm-multi-swoop'
+
+\\[universal-argument] \\[execute-extended-command] helm-multi-swoop
+If you have done helm-multi-swoop before, you can skip select buffers step.
+Last selected buffers will be applied to helm-multi-swoop.
+
+\(fn &optional $QUERY $BUFLIST)" t nil)
+
+(autoload 'helm-multi-swoop-all "helm-swoop" "\
+Apply all buffers to helm-multi-swoop for $QUERY.
+
+\(fn &optional $QUERY)" t nil)
+
+(autoload 'helm-multi-swoop-org "helm-swoop" "\
+Applie all `org-mode' buffers to helm-multi-swoop for $QUERY.
+
+\(fn &optional $QUERY)" t nil)
+
+(autoload 'helm-multi-swoop-current-mode "helm-swoop" "\
+Applie all buffers of the same mode as the current buffer to helm-multi-swoop for $QUERY.
+
+\(fn &optional $QUERY)" t nil)
+
+(autoload 'helm-multi-swoop-projectile "helm-swoop" "\
+Apply all opened buffers of the current project to helm-multi-swoop for $QUERY.
+
+\(fn &optional $QUERY)" t nil)
+
+(autoload 'helm-swoop-without-pre-input "helm-swoop" "\
+Start helm-swoop without pre input query.
+
+\(fn)" t nil)
+
+(autoload 'helm-swoop-symble-pre-input "helm-swoop" "\
+Start helm-swoop without pre input query.
+
+\(fn)" t nil)
+
+(autoload 'helm-multi-swoop-edit "helm-swoop" "\
+Multi swoop edit.
+
+\(fn)" t nil)
+
+(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "helm-swoop" '("helm-" "get-buffers-matching-mode")))
+
+;;;***
+\f
+;; Local Variables:
+;; version-control: never
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; coding: utf-8
+;; End:
+;;; helm-swoop-autoloads.el ends here
diff --git a/elpa/helm-swoop-20200121.1859/helm-swoop-pkg.el b/elpa/helm-swoop-20200121.1859/helm-swoop-pkg.el
new file mode 100644 (file)
index 0000000..0a82d8b
--- /dev/null
@@ -0,0 +1,2 @@
+;;; -*- no-byte-compile: t -*-
+(define-package "helm-swoop" "20200121.1859" "Efficiently hopping squeezed lines powered by helm interface" '((emacs "24.4") (helm "3.2")) :commit "9324d8c196ab2a86fde7142f159e081b87a4d277" :keywords '("convenience" "helm" "swoop" "inner" "buffer" "search") :authors '(("Shingo Fukuyama - http://fukuyama.co")) :maintainer '("Shingo Fukuyama - http://fukuyama.co") :url "https://github.com/emacsorphanage/helm-swoop")
diff --git a/elpa/helm-swoop-20200121.1859/helm-swoop.el b/elpa/helm-swoop-20200121.1859/helm-swoop.el
new file mode 100644 (file)
index 0000000..6cca3be
--- /dev/null
@@ -0,0 +1,1734 @@
+;;; helm-swoop.el --- Efficiently hopping squeezed lines powered by helm interface -*- lexical-binding: t -*-
+
+;; Copyright (C) 2019  Emacsorphanage Community
+;; Copyright (C) 2013-2018  Shingo Fukuyama
+
+;; Version: 2.0.0
+;; Package-Version: 20200121.1859
+;; Author: Shingo Fukuyama - http://fukuyama.co
+;; URL: https://github.com/emacsorphanage/helm-swoop
+;; Created: Oct 24 2013
+;; Keywords: convenience, helm, swoop, inner, buffer, search
+;; Package-Requires: ((emacs "24.4") (helm "3.2"))
+
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+;; See the GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; List the all lines to another buffer, which is able to squeeze
+;; by any words you input.  At the same time, the original buffer's
+;; cursor is jumping line to line according to moving up and down
+;; the list.
+
+;; Example config
+;; ----------------------------------------------------------------
+;; ;; helm from https://github.com/emacs-helm/helm
+;; (require 'helm)
+
+;; ;; Locate the helm-swoop folder to your path
+;; ;; This line is unnecessary if you get this program from MELPA
+;; (add-to-list 'load-path "~/.emacs.d/elisp/helm-swoop")
+
+;; (require 'helm-swoop)
+
+;; ;; Change keybinds to whatever you like :)
+;; (global-set-key (kbd "M-i") 'helm-swoop)
+;; (global-set-key (kbd "M-I") 'helm-swoop-back-to-last-point)
+;; (global-set-key (kbd "C-c M-i") 'helm-multi-swoop)
+;; (global-set-key (kbd "C-x M-i") 'helm-multi-swoop-all)
+
+;; ;; When doing isearch, hand the word over to helm-swoop
+;; (define-key isearch-mode-map (kbd "M-i") 'helm-swoop-from-isearch)
+;; (define-key helm-swoop-map (kbd "M-i") 'helm-multi-swoop-all-from-helm-swoop)
+
+;; ;; Save buffer when helm-multi-swoop-edit complete
+;; (setq helm-multi-swoop-edit-save t)
+
+;; ;; If this value is t, split window inside the current window
+;; (setq helm-swoop-split-with-multiple-windows nil)
+
+;; ;; Split direction.  'split-window-vertically or 'split-window-horizontally
+;; (setq helm-swoop-split-direction 'split-window-vertically)
+
+;; ;; If nil, you can slightly boost invoke speed in exchange for text color
+;; (setq helm-swoop-speed-or-color nil)
+
+;; ;; Go to the opposite side of line from the end or beginning of line
+;; (setq helm-swoop-move-to-line-cycle t)
+
+;; ;; Optional face for line numbers
+;; ;; Face name is `helm-swoop-line-number-face`
+;; (setq helm-swoop-use-line-number-face t)
+
+;; ----------------------------------------------------------------
+
+;; * `M-x helm-swoop` when region active
+;; * `M-x helm-swoop` when the cursor is at any symbol
+;; * `M-x helm-swoop` when the cursor is not at any symbol
+;; * `M-3 M-x helm-swoop` or `C-u 5 M-x helm-swoop` multi separated line culling
+;; * `M-x helm-multi-swoop` multi-occur like feature
+;; * `M-x helm-multi-swoop-all` apply all buffers
+;; * `C-u M-x helm-multi-swoop` apply last selected buffers from the second time
+;; * `M-x helm-swoop-same-face-at-point` list lines have the same face at the cursor is on
+;; * During isearch `M-i` to hand the word over to helm-swoop
+;; * During helm-swoop `M-i` to hand the word over to helm-multi-swoop-all
+;; * While doing `helm-swoop` press `C-c C-e` to edit mode, apply changes to original buffer by `C-x C-s`
+
+;; Helm Swoop Edit
+;; While doing helm-swoop, press keybind [C-c C-e] to move to edit buffer.
+;; Edit the list and apply by [C-x C-s].  If you'd like to cancel, [C-c C-g]
+
+;;; Code:
+
+(require 'cl-lib)
+(require 'helm)
+(require 'helm-utils)
+(require 'helm-grep)
+
+(declare-function migemo-search-pattern-get "migemo")
+(declare-function migemo-forward "migemo")
+(declare-function projectile-buffers-with-file-or-process "projectile")
+(declare-function projectile-project-buffers "projectile")
+(defvar projectile-buffers-filter-function)
+
+;;; @ helm-swoop ----------------------------------------------
+
+(defgroup helm-swoop nil
+  "Open helm-swoop."
+  :prefix "helm-swoop-" :group 'helm)
+
+(defface helm-swoop-target-line-face
+  '((t (:background "#e3e300" :foreground "#222222")))
+  "Face for helm-swoop target line"
+  :group 'helm-swoop)
+(defface helm-swoop-target-line-block-face
+  '((t (:background "#cccc00" :foreground "#222222")))
+  "Face for target line"
+  :group 'helm-swoop)
+(defface helm-swoop-target-word-face
+  '((t (:background "#7700ff" :foreground "#ffffff")))
+  "Face for target word"
+  :group 'helm-swoop)
+(defface helm-swoop-line-number-face
+  '((t (:foreground "#999999")))
+  "Face for line numbers"
+  :group 'helm-swoop)
+
+(defcustom helm-swoop-speed-or-color nil
+  "If nil, you can slightly boost invoke speed in exchange for text color."
+  :group 'helm-swoop :type 'boolean)
+(defcustom helm-swoop-use-line-number-face nil
+  "Use face to line numbers on helm-swoop buffer."
+  :group 'helm-swoop :type 'boolean)
+(defcustom helm-swoop-split-with-multiple-windows nil
+  "Split window when having multiple windows open."
+  :group 'helm-swoop :type 'boolean)
+(defcustom helm-swoop-move-to-line-cycle t
+  "Return to the opposite side of line."
+  :group 'helm-swoop :type 'boolean)
+(defcustom helm-swoop-split-direction 'split-window-vertically
+  "Split direction."
+  :type '(choice (const :tag "vertically"   split-window-vertically)
+                 (const :tag "horizontally" split-window-horizontally))
+  :group 'helm-swoop)
+(defcustom helm-swoop-use-fuzzy-match nil
+  "If t, use fuzzy matching functions as well as exact matches."
+  :group 'helm-swoop :type 'boolean)
+(defcustom helm-swoop-min-overlay-length 2
+  "Minimum pattern length before applying the overlay on the matched word."
+  :group 'helm-swoop :type 'integer)
+
+(defvar helm-swoop-split-window-function
+  (lambda ($buf &rest _$args)
+    (if helm-swoop-split-with-multiple-windows
+        (funcall helm-swoop-split-direction)
+      (when (one-window-p)
+        (funcall helm-swoop-split-direction)))
+    (other-window 1)
+    (switch-to-buffer $buf))
+  "Change the way to split window only when `helm-swoop' is calling.")
+
+(defcustom helm-swoop-after-goto-line-action-hook nil
+  "The hook run after `helm-swoop--goto-line."
+  :group 'helm-swoop
+  :type 'hook)
+(defcustom helm-swoop-before-goto-line-action-hook nil
+  "The hook run before `helm-swoop--goto-line."
+  :group 'helm-swoop
+  :type 'hook)
+
+(defcustom helm-swoop-flash-region-function 'helm-swoop-flash-word
+  "The function used to flash the result when a search done."
+  :group 'helm-swoop
+  :type '(choice
+          (const :tag "Default highlight function" helm-swoop-flash-word)
+          (const :tag "Pulse highlight function" pulse-momentary-highlight-region)
+          function))
+
+(defcustom helm-swoop-fontify-buffer-size-limit 100000
+  "If buffer size smaller than value, do fontify to make buffer highlighted.
+
+If value is symbol `always', always do fontify."
+  :group 'helm-swoop
+  :type '(choice
+          integer
+          (const :tag "Always Fontify" always)))
+
+(defvar helm-swoop-candidate-number-limit 19999)
+(defvar helm-swoop-buffer "*Helm Swoop*")
+(defvar helm-swoop-prompt "Swoop: ")
+(defvar helm-swoop-last-point nil)
+(defvar helm-swoop-invisible-targets nil)
+(defvar helm-swoop-last-line-info nil)
+
+;; Buffer local variables
+(defvar helm-swoop-list-cache)
+(defvar helm-swoop-pattern nil)            ; Keep helm-pattern value
+(defvar helm-swoop-last-query nil)         ; Last search query for resume
+(defvar-local helm-swoop-last-prefix-number 1) ; For multiline highlight
+
+;; Global variables
+(defvar helm-swoop-synchronizing-window nil
+  "Window object where `helm-swoop' called from.")
+(defvar helm-swoop-target-buffer nil
+  "Buffer object where `helm-swoop' called from.")
+(defvar helm-swoop-line-overlay nil
+  "Overlay object to indicate other window's line.")
+
+(defvar helm-swoop--basic-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map helm-map)
+    (dolist (action '(next-line previous-line next-page previous-page
+                                beginning-of-buffer end-of-buffer toggle-visible-mark))
+      (let ((orig-fn (intern (format "helm-%s" action)))
+            (new-fn (intern (format "helm-swoop-%s" action))))
+        (defalias new-fn `(lambda (&optional arg)
+                            (interactive "p")
+                            (call-interactively ',orig-fn)
+                            (helm-swoop--move-line-action))
+          (format "Replacement of `%s' action for `helm-swoop'.
+
+\(fn ARG)" orig-fn))
+        (define-key map `[remap ,orig-fn] new-fn)))
+    map))
+
+(defvar helm-swoop-map
+  (let (($map (make-sparse-keymap)))
+    (set-keymap-parent $map helm-swoop--basic-map)
+    (define-key $map (kbd "C-c C-e") 'helm-swoop-edit)
+    (define-key $map (kbd "M-i") 'helm-multi-swoop-all-from-helm-swoop)
+    (define-key $map (kbd "C-w") 'helm-swoop-yank-thing-at-point)
+    (define-key $map (kbd "^") 'helm-swoop-caret-match)
+    $map)
+  "Keymap for helm-swoop.")
+
+(defvar helm-multi-swoop--basic-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map helm-map)
+    (dolist (action '(next-line previous-line next-page previous-page
+                                beginning-of-buffer end-of-buffer toggle-visible-mark))
+      (let ((orig-fn (intern (format "helm-%s" action)))
+            (new-fn (intern (format "helm-multi-swoop-%s" action))))
+        (defalias new-fn `(lambda (&optional arg)
+                            (interactive "p")
+                            (call-interactively ',orig-fn)
+                            (helm-multi-swoop--move-line-action))
+          (format "Replacement of `%s' action for `helm-multi-swoop'.
+
+\(fn ARG)" orig-fn))
+        (define-key map `[remap ,orig-fn] new-fn)))
+    map))
+
+(defvar helm-multi-swoop-map
+  (let (($map (make-sparse-keymap)))
+    (set-keymap-parent $map helm-multi-swoop--basic-map)
+    (define-key $map (kbd "C-c C-e") 'helm-multi-swoop-edit)
+    $map))
+
+(defvar helm-c-source-swoop-match-functions
+  '(helm-mm-exact-match
+    helm-mm-match
+    helm-mm-3-migemo-match))
+
+(defvar helm-c-source-swoop-search-functions
+  '(helm-mm-exact-search
+    helm-mm-search
+    helm-candidates-in-buffer-search-default-fn
+    helm-mm-3-migemo-search))
+
+(defvar helm-swoop-font-lock-exclude
+  '(Man-mode
+    adoc-mode
+    bbdb-mode
+    bongo-library-mode
+    bongo-mode
+    bongo-playlist-mode
+    bookmark-bmenu-mode
+    circe-channel-mode
+    circe-query-mode
+    circe-server-mode
+    deadgrep-mode
+    debbugs-gnu-mode
+    dired-mode
+    elfeed-search-mode
+    elfeed-show-mode
+    emms-playlist-mode
+    emms-stream-mode
+    erc-mode
+    eshell-mode
+    eww-mode
+    forth-block-mode
+    forth-mode
+    fundamental-mode
+    gnus-article-mode
+    gnus-group-mode
+    gnus-summary-mode
+    help-mode
+    helpful-mode
+    jabber-chat-mode
+    magit-popup-mode
+    matrix-client-mode
+    matrix-client-room-list-mode
+    mu4e-headers-mode
+    mu4e-view-mode
+    nix-mode
+    notmuch-search-mode
+    notmuch-tree-mode
+    occur-edit-mode
+    occur-mode
+    org-agenda-mode
+    package-menu-mode
+    rcirc-mode
+    sauron-mode
+    treemacs-mode
+    twittering-mode
+    vc-dir-mode
+    w3m-mode
+    woman-mode
+    xref--xref-buffer-mode)
+  "List of major-modes that are incompatible with `font-lock-ensure'.")
+
+(defun helm-swoop-match-functions ()
+  "Return match functions."
+  (if helm-swoop-use-fuzzy-match
+      (append helm-c-source-swoop-match-functions '(helm-fuzzy-match))
+    helm-c-source-swoop-match-functions))
+
+(defun helm-swoop-search-functions ()
+  "Return search functions."
+  (if helm-swoop-use-fuzzy-match
+      (append helm-c-source-swoop-search-functions '(helm-fuzzy-search))
+    helm-c-source-swoop-search-functions))
+
+(defcustom helm-swoop-pre-input-function
+  (lambda () (thing-at-point 'symbol))
+  "This function can pre-input keywords when helm-swoop invoked."
+  :group 'helm-swoop :type 'function)
+
+(defun helm-swoop-pre-input-optimize ($query)
+  "Return $QUERY processed by `regexp-quote'."
+  (when $query (regexp-quote $query)))
+
+(defsubst helm-swoop--goto-line ($line)
+  "Go to $LINE concider narrowing."
+  (goto-char (point-min))
+  (forward-line (1- $line)))
+
+(defsubst helm-swoop--recenter ()
+  "Recenter."
+  (recenter (/ (window-height) 2)))
+
+(defsubst helm-swoop--delete-overlay ($identity &optional $beg $end)
+  "Delete overlay if $IDENTITY has in $BEG to $END."
+  (overlay-recenter (or $end (point-max)))
+  (mapc (lambda ($o)
+          (if (overlay-get $o $identity)
+              (delete-overlay $o)))
+        (overlays-in (or $beg (point-min)) (or $end (point-max)))))
+
+(defsubst helm-swoop--get-string-at-line ()
+  "Get line string with no properties."
+  (buffer-substring-no-properties (point-at-bol) (point-at-eol)))
+
+(defun helm-swoop--buffer-substring ($point-min $point-max)
+  "Get buffer substring $POINT-MIN to $POINT-MAX."
+  (if helm-swoop-speed-or-color
+      (let (($content (buffer-substring $point-min $point-max)))
+        (propertize $content 'read-only nil))
+    (buffer-substring-no-properties $point-min $point-max)))
+
+;;;###autoload
+(defun helm-swoop-back-to-last-point (&optional $cancel)
+  "Go back to last position where `helm-swoop' was called.
+If $CANSEL is non-nil, store `helm-swoop-last-point'."
+  (interactive)
+  (if helm-swoop-last-point
+      (let (($po (point)))
+        (switch-to-buffer (cdr helm-swoop-last-point))
+        (goto-char (car helm-swoop-last-point))
+        (unless $cancel
+          (setq helm-swoop-last-point
+                (cons $po (buffer-name (current-buffer))))))))
+
+(defun helm-swoop--split-lines-by ($string $regexp $step)
+  "Return $STRING processed by `split-string' by $step for multiline."
+  (or $step (setq $step 1))
+  (let (($from1 0) ;; last match point
+        ($from2 0) ;; last substring point
+        $list
+        ($i 1)) ;; from line 1
+    (while (string-match $regexp $string $from1)
+      (setq $i (1+ $i))
+      (if (eq 0 (% $i $step))
+          (progn
+            (setq $list (cons (substring $string $from2 (match-beginning 0))
+                              $list))
+            (setq $from2 (match-end 0))
+            (setq $from1 (match-end 0)))
+        (setq $from1 (match-end 0))))
+    (setq $list (cons (substring $string $from2) $list))
+    (nreverse $list)))
+
+(defun helm-swoop--target-line-overlay-move (&optional $buf)
+  "Add color to the target line in $BUF."
+  (move-overlay
+   helm-swoop-line-overlay
+   (progn
+     (search-backward
+      "\n" nil t (% (line-number-at-pos) helm-swoop-last-prefix-number))
+     (goto-char (point-at-bol)))
+   ;; For multiline highlight
+   (save-excursion
+     (goto-char (point-at-bol))
+     (or (re-search-forward "\n" nil t helm-swoop-last-prefix-number)
+         ;; For the end of buffer error
+         (point-max)))
+   $buf)
+  (helm-swoop--unveil-invisible-overlay))
+
+(defun helm-swoop--validate-regexp (regexp)
+  "Validate REGEXP."
+  (condition-case _err
+      (progn
+        (string-match-p regexp "")
+        t)
+    (invalid-regexp nil)))
+
+(defun helm-swoop--target-word-overlay ($identity &optional $threshold)
+  "Target ward overlay to $IDENTITY with $THRESHOLD."
+  (interactive)
+  (save-excursion
+    (let (($pat (split-string helm-pattern " "))
+          ($threshold (or $threshold 2))
+          $o)
+      (mapc (lambda ($wd)
+              (when (and (helm-swoop--validate-regexp $wd) (< $threshold (length $wd)))
+                (goto-char (point-min))
+                ;; Optional require migemo.el
+                (if (and (featurep 'migemo) helm-migemo-mode)
+                    (setq $wd (migemo-search-pattern-get $wd)))
+                ;; For caret begging match
+                (if (string-match "^\\^\\[0\\-9\\]\\+\\.\\(.+\\)" $wd)
+                    (setq $wd (concat "^" (match-string 1 $wd))))
+                (overlay-recenter (point-max))
+                (while (and (not (eobp)) (re-search-forward $wd nil t))
+                  (if (= (match-beginning 0) (match-end 0))
+                      (forward-char 1)
+                    (setq $o (make-overlay (match-beginning 0) (match-end 0)))
+                    (overlay-put $o 'face 'helm-swoop-target-word-face)
+                    (overlay-put $o $identity t)))))
+            $pat))))
+
+(defun helm-swoop--restore-unveiled-overlay ()
+  "Restore unveiled overlay."
+  (when helm-swoop-invisible-targets
+    (mapc (lambda ($ov) (overlay-put (car $ov) 'invisible (cdr $ov)))
+          helm-swoop-invisible-targets)
+    (setq helm-swoop-invisible-targets nil)))
+
+(defun helm-swoop--unveil-invisible-overlay ()
+  "Show hidden text temporarily to view it during helm-swoop.
+This function needs to call after latest helm-swoop-line-overlay set."
+  (helm-swoop--restore-unveiled-overlay)
+  (mapc (lambda ($ov)
+          (let (($type (overlay-get $ov 'invisible)))
+            (when $type
+              (overlay-put $ov 'invisible nil)
+              (setq helm-swoop-invisible-targets
+                    (cons (cons $ov $type) helm-swoop-invisible-targets)))))
+        (overlays-in (overlay-start helm-swoop-line-overlay)
+                     (overlay-end helm-swoop-line-overlay))))
+
+;; helm action ------------------------------------------------
+
+(defun helm-swoop--move-line-action ()
+  "Move line action."
+  (with-helm-window
+    (let* (($key (helm-swoop--get-string-at-line))
+           ($num (when (string-match "^[0-9]+" $key)
+                   (string-to-number (match-string 0 $key)))))
+      ;; Synchronizing line position
+      (when (and $key $num)
+        (with-selected-window helm-swoop-synchronizing-window
+          (helm-swoop--goto-line $num)
+          (with-current-buffer helm-swoop-target-buffer
+            (delete-overlay helm-swoop-line-overlay)
+            (helm-swoop--target-line-overlay-move))
+          (helm-swoop--recenter))
+        (setq helm-swoop-last-line-info
+              (cons helm-swoop-target-buffer $num))))))
+
+(defun helm-swoop--nearest-line ($target $list)
+  "Return the nearest number of $TARGET out of $LIST."
+  (when (and $target $list)
+    (let ($result)
+      (cl-labels ((filter ($fn $elem $list)
+                          (let ($r)
+                            (mapc (lambda ($e)
+                                    (if (funcall $fn $elem $e)
+                                        (setq $r (cons $e $r))))
+                                  $list) $r)))
+        (if (eq 1 (length $list))
+            (setq $result (car $list))
+          (let* (($lts (filter '> $target $list))
+                 ($gts (filter '< $target $list))
+                 ($lt (if $lts (apply 'max $lts)))
+                 ($gt (if $gts (apply 'min $gts)))
+                 ($ltg (if $lt (- $target $lt)))
+                 ($gtg (if $gt (- $gt $target))))
+            (setq $result
+                  (cond ((memq $target $list) $target)
+                        ((and (not $lt) (not $gt)) nil)
+                        ((not $gtg) $lt)
+                        ((not $ltg) $gt)
+                        ((eq $ltg $gtg) $gt)
+                        ((< $ltg $gtg) $lt)
+                        ((> $ltg $gtg) $gt)
+                        (t 1))))))
+      $result)))
+
+(defun helm-swoop--keep-nearest-position ()
+  "Keep nearest position."
+  (with-helm-window
+    (let (($p (point-min)) $list $bound
+          $nearest-line $target-point
+          ($buf (rx-to-string (buffer-name (car helm-swoop-last-line-info)) t)))
+      (save-excursion
+        (goto-char $p)
+        (while (if $p (setq $p (re-search-forward (concat "^" $buf "$") nil t)))
+          (when (get-text-property (point-at-bol) 'helm-header)
+            (forward-char 1)
+            (setq $bound (next-single-property-change (point) 'helm-header))
+            (while (re-search-forward "^[0-9]+" $bound t)
+              (setq $list (cons
+                           (string-to-number (match-string 0))
+                           $list)))
+            (setq $nearest-line (helm-swoop--nearest-line
+                                 (cdr helm-swoop-last-line-info)
+                                 $list))
+            (goto-char $p)
+            (re-search-forward (concat "^"
+                                       (number-to-string $nearest-line)
+                                       "\\s-") $bound t)
+            (setq $target-point (point))
+            (setq $p nil))))
+      (when $target-point
+        (goto-char $target-point)
+        (helm-mark-current-line)
+        (if (equal helm-swoop-buffer (buffer-name (current-buffer)))
+            (helm-swoop--move-line-action)
+          (helm-multi-swoop--move-line-action))))))
+
+(defun helm-swoop--pattern-match ()
+  "Overlay target words."
+  (with-helm-window
+    (setq helm-swoop-pattern helm-pattern)
+    (when (< helm-swoop-min-overlay-length (length helm-pattern))
+      (helm-swoop--delete-overlay 'target-buffer)
+      (helm-swoop--target-word-overlay 'target-buffer helm-swoop-min-overlay-length)
+      (with-selected-window helm-swoop-synchronizing-window
+        (helm-swoop--delete-overlay 'target-buffer)
+        (helm-swoop--target-word-overlay 'target-buffer helm-swoop-min-overlay-length)))))
+
+(defun helm-swoop-flash-word ($match-beg $match-end)
+  "Flash ward in $MATCH-BEG to $MATCH-END."
+  (interactive)
+  (unwind-protect
+      (let (($o (make-overlay $match-beg $match-end)))
+        (when $o
+          (overlay-put $o 'face 'helm-swoop-target-word-face)
+          (overlay-put $o 'helm-swoop-overlay-word-frash t)))
+    (run-with-idle-timer
+     0.6 nil (lambda () (helm-swoop--delete-overlay 'helm-swoop-overlay-word-frash)))))
+
+;; core ------------------------------------------------
+
+(defun helm-swoop--maybe-fontify! ()
+  "Ensure the entired buffer is highlighted."
+  (let ((fontify-safe?
+         (not (or (derived-mode-p 'magit-mode)
+                  (bound-and-true-p magit-blame-mode)
+                  (memq major-mode helm-swoop-font-lock-exclude)
+                  (not (derived-mode-p 'prog-mode))))))
+    (when (and helm-swoop-speed-or-color
+               font-lock-mode
+               fontify-safe?
+               (or (eq 'always helm-swoop-fontify-buffer-size-limit)
+                   (< (buffer-size) helm-swoop-fontify-buffer-size-limit)))
+      (if (fboundp 'font-lock-ensure)
+          (font-lock-ensure)
+        (with-no-warnings (font-lock-fontify-buffer))))))
+
+(defun helm-swoop--get-content ($buffer &optional $linum)
+  "Get the whole content in $BUFFER and add line number at the head.
+If $LINUM is number, lines are separated by $LINUM."
+  (let (($buf (get-buffer $buffer)))
+    (when $buf
+      (with-current-buffer $buf
+        (helm-swoop--maybe-fontify!)
+        (let (($bufstr (helm-swoop--buffer-substring (point-min) (point-max))))
+          (with-temp-buffer
+            (insert $bufstr)
+            (goto-char (point-min))
+            (let (($i 1))
+              (insert (format "%s " $i))
+              (while (re-search-forward "\n" nil t)
+                (setq $i (1+ $i))
+                (if helm-swoop-use-line-number-face
+                    (insert (propertize (format "%s" $i) 'font-lock-face 'helm-swoop-line-number-face) " ")
+                  (insert (format "%s " $i))))
+              ;; Delete empty lines
+              (unless $linum
+                (goto-char (point-min))
+                (while (re-search-forward "^[0-9]+\\s-*$" nil t)
+                  (replace-match ""))))
+            (helm-swoop--buffer-substring (point-min) (point-max))))))))
+
+(defun helm-swoop--goto-line-action ($line)
+  "Goto $LINE action."
+  (run-hooks 'helm-swoop-before-goto-line-action-hook)
+  (helm-swoop--goto-line
+   (when (string-match "^[0-9]+" $line)
+     (string-to-number (match-string 0 $line))))
+  (let (($regex
+         (mapconcat 'identity
+                    (split-string helm-pattern " ")
+                    "\\|")))
+    (when (or (and (featurep 'migemo) helm-migemo-mode (migemo-forward $regex nil t))
+              (re-search-forward $regex nil t))
+      (funcall helm-swoop-flash-region-function
+               (match-beginning 0) (match-end 0))
+      (goto-char (match-beginning 0))
+      (run-hooks 'helm-swoop-after-goto-line-action-hook)))
+  (helm-swoop--recenter))
+
+(defun helm-c-source-swoop ()
+  "C source swoop."
+  `((name . ,(buffer-name helm-swoop-target-buffer))
+    (candidates . ,(if helm-swoop-list-cache
+                       (progn
+                         (helm-swoop--split-lines-by
+                          helm-swoop-list-cache "\n" helm-swoop-last-prefix-number))
+                     (helm-swoop--split-lines-by
+                      (setq helm-swoop-list-cache
+                            (helm-swoop--get-content helm-swoop-target-buffer t))
+                      "\n" helm-swoop-last-prefix-number)))
+    (get-line . ,#'helm-swoop--buffer-substring)
+    (keymap . ,helm-swoop-map)
+    (header-line . ,(substitute-command-keys
+                     "[\\<helm-swoop-map>\\[helm-swoop-edit]] Edit mode, \
+[\\<helm-swoop-map>\\[helm-multi-swoop-all-from-helm-swoop]] apply all buffers"))
+    (action . (("Go to Line" . helm-swoop--goto-line-action)
+               ("Edit" . helm-swoop--edit)))
+    ,(if (and helm-swoop-last-prefix-number
+              (> helm-swoop-last-prefix-number 1))
+         '(multiline))
+    (match . ,(helm-swoop-match-functions))
+    ;; (search . ,(helm-swoop-search-functions))
+    ))
+
+(defun helm-c-source-multi-swoop ($buf $func $action $multiline)
+  "C source multi swoop in $BUF for $FUNC, $ACTION, $MULTILINE."
+  `((name . ,$buf)
+    (candidates . ,(funcall $func))
+    (action . ,$action)
+    (header-line . ,(concat $buf
+                            (substitute-command-keys
+                             "    [\\<helm-multi-swoop-map>\\[helm-multi-swoop-edit]] Edit mode")))
+    (keymap . ,helm-multi-swoop-map)
+    (requires-pattern . 2)
+    ,(if (and $multiline
+              (> $multiline 1))
+         '(multiline))
+    (match . ,(helm-swoop-match-functions))
+    ;; (search . ,(helm-swoop-search-functions))
+    ))
+
+(defun helm-swoop--set-prefix ($multiline)
+  "Set prefix $MULTILINE."
+  ;; Enable scrolling margin
+  (setq helm-swoop-last-prefix-number
+        (or $multiline 1))) ;; $multiline is for resume
+
+;; Delete cache when buffer is saved or file changes on disk
+(defun helm-swoop--clear-cache ()
+  "Delete cache when buffer is saved or file change on disk."
+  (if (boundp 'helm-swoop-list-cache) (setq helm-swoop-list-cache nil)))
+(add-hook 'after-save-hook 'helm-swoop--clear-cache)
+(add-hook 'after-revert-hook 'helm-swoop--clear-cache)
+
+(defadvice narrow-to-region (around helm-swoop-advice-narrow-to-region activate)
+  "Advice for `narrow-to-region'."
+  (helm-swoop--clear-cache)
+  ad-do-it)
+(defadvice narrow-to-defun (around helm-swoop-advice-narrow-to-defun activate)
+  "Advice for `narrow-to-defun'."
+  (helm-swoop--clear-cache)
+  ad-do-it)
+(defadvice narrow-to-page (around helm-swoop-advice-narrow-to-page activate)
+  "Advice for `narrow-to-page'."
+  (helm-swoop--clear-cache)
+  ad-do-it)
+(defadvice widen (around helm-swoop-advice-widen activate)
+  "Advice for `widen'."
+  (helm-swoop--clear-cache)
+  ad-do-it)
+
+(defun helm-swoop--restore ()
+  "Restore."
+  (when (= 1 helm-exit-status)
+    (helm-swoop-back-to-last-point t)
+    (helm-swoop--restore-unveiled-overlay))
+  (setq helm-swoop-invisible-targets nil)
+  (remove-hook 'helm-after-update-hook 'helm-swoop--pattern-match)
+  (remove-hook 'helm-after-update-hook 'helm-swoop--keep-nearest-position)
+  (setq helm-swoop-last-query helm-swoop-pattern)
+  (mapc (lambda ($ov)
+          (when (or (eq 'helm-swoop-target-line-face (overlay-get $ov 'face))
+                    (eq 'helm-swoop-target-line-block-face
+                        (overlay-get $ov 'face)))
+            (delete-overlay $ov)))
+        (overlays-in (point-min) (point-max)))
+  (helm-swoop--delete-overlay 'target-buffer)
+  (deactivate-mark t))
+
+;;;###autoload
+(cl-defun helm-swoop (&key $query $source ($multiline current-prefix-arg))
+  "List the all lines to another buffer, which is able to squeeze by
+ any words you input. At the same time, the original buffer's cursor
+ is jumping line to line according to moving up and down the list."
+  (interactive)
+  (setq helm-swoop-synchronizing-window (selected-window))
+  (setq helm-swoop-last-point (cons (point) (buffer-name (current-buffer))))
+  (setq helm-swoop-last-line-info
+        (cons (current-buffer) (line-number-at-pos)))
+  (unless (boundp 'helm-swoop-last-query)
+    (set (make-local-variable 'helm-swoop-last-query) ""))
+  (setq helm-swoop-target-buffer (current-buffer))
+  (helm-swoop--set-prefix (prefix-numeric-value $multiline))
+  ;; Overlay
+  (setq helm-swoop-line-overlay (make-overlay (point) (point)))
+  (overlay-put helm-swoop-line-overlay
+               'face (if (< 1 helm-swoop-last-prefix-number)
+                         'helm-swoop-target-line-block-face
+                       'helm-swoop-target-line-face))
+  ;; Cache
+  (cond ((not (boundp 'helm-swoop-list-cache))
+         (set (make-local-variable 'helm-swoop-list-cache) nil))
+        ((buffer-modified-p)
+         (setq helm-swoop-list-cache nil)))
+  (unwind-protect
+      (progn
+        ;; For synchronizing line position
+        (add-hook 'helm-after-update-hook 'helm-swoop--pattern-match)
+        (add-hook 'helm-after-update-hook 'helm-swoop--keep-nearest-position t)
+        (cond ($query
+               (if (string-match
+                    "\\(\\^\\[0\\-9\\]\\+\\.\\)\\(.*\\)" $query)
+                   $query ;; NEED FIX #1 to appear as a "^"
+                 $query))
+              (mark-active
+               (let (($st (buffer-substring-no-properties
+                           (region-beginning) (region-end))))
+                 (if (string-match "\n" $st)
+                     (message "Multi line region is not allowed")
+                   (setq $query (helm-swoop-pre-input-optimize $st)))))
+              ((setq $query (helm-swoop-pre-input-optimize
+                             (funcall helm-swoop-pre-input-function))))
+              (t (setq $query "")))
+        ;; First behavior
+        (helm-swoop--recenter)
+        (move-beginning-of-line 1)
+        (helm-swoop--target-line-overlay-move)
+        ;; Execute helm
+        (let ((helm-display-function helm-swoop-split-window-function)
+              (helm-display-source-at-screen-top nil)
+              (helm-completion-window-scroll-margin 5))
+          (helm :sources
+                (or $source
+                    (helm-c-source-swoop))
+                :buffer helm-swoop-buffer
+                :input $query
+                :prompt helm-swoop-prompt
+                :preselect
+                ;; Get current line has content or else near one
+                (if (string-match "^[\t\n\s]*$" (helm-swoop--get-string-at-line))
+                    (save-excursion
+                      (if (re-search-forward "[^\t\n\s]" nil t)
+                          (format "^%s\s" (line-number-at-pos))
+                        (re-search-backward "[^\t\n\s]" nil t)
+                        (format "^%s\s" (line-number-at-pos))))
+                  (format "^%s\s" (line-number-at-pos)))
+                :candidate-number-limit helm-swoop-candidate-number-limit)))
+    ;; Restore helm's hook and window function etc
+    (helm-swoop--restore)))
+
+;; Receive word from isearch ---------------
+;;;###autoload
+(defun helm-swoop-from-isearch ()
+  "Invoke `helm-swoop' from isearch."
+  (interactive)
+  (let (($query (if isearch-regexp
+                    isearch-string
+                  (regexp-quote isearch-string))))
+    (let (search-nonincremental-instead)
+      (isearch-exit))
+    (helm-swoop :$query $query)))
+;; When doing isearch, hand the word over to helm-swoop
+(define-key isearch-mode-map (kbd "M-i") 'helm-swoop-from-isearch)
+
+;; Receive word from evil search ---------------
+(defun helm-swoop-from-evil-search ()
+  "Invoke `helm-swoop' from evil isearch."
+  (interactive)
+  (if (string-match "\\(isearch-\\|evil.*search\\)" (symbol-name real-last-command))
+      (helm-swoop :$query (if isearch-regexp
+                              isearch-string
+                            (regexp-quote isearch-string)))
+    (helm-swoop)))
+;; When doing evil-search, hand the word over to helm-swoop
+;; (define-key evil-motion-state-map (kbd "M-i") 'helm-swoop-from-evil-search)
+
+;; Receive word from evil search ---------------
+(defun helm-swoop-yank-thing-at-point ()
+  "Insert string at which the point helm-swoop started."
+  (interactive)
+  (let ($amend $buf)
+    (with-selected-window helm-swoop-synchronizing-window
+      (setq $buf (get-buffer (cdr helm-swoop-last-point)))
+      (when $buf
+        (with-current-buffer $buf
+          (save-excursion
+            (goto-char (car helm-swoop-last-point))
+            (setq $amend (thing-at-point 'symbol))))))
+    (when $amend
+      (with-selected-window (minibuffer-window)
+        (insert $amend)))))
+
+;; For helm-resume ------------------------
+(defadvice helm-resume-select-buffer
+    (around helm-swoop-if-selected-as-resume activate)
+  "Resume if *Helm Swoop* buffer selected when helm-resume with prefix."
+  (if (boundp 'helm-swoop-last-query)
+      ad-do-it
+    ;; If the buffer hasn't called helm-swoop, just hide from options
+    (let ((helm-buffers (delete helm-swoop-buffer helm-buffers)))
+      ad-do-it))
+  (when (and (equal ad-return-value helm-swoop-buffer)
+             (boundp 'helm-swoop-last-query))
+    (helm-swoop :$query helm-swoop-last-query
+                :$multiline helm-swoop-last-prefix-number)
+    (setq ad-return-value nil)))
+
+(defadvice helm-resume (around helm-swoop-resume activate)
+  "Resume if the last used helm buffer is helm-swoop-buffer."
+  (if (equal helm-last-buffer helm-swoop-buffer)
+      (if (boundp 'helm-swoop-last-query)
+          (if (not (ad-get-arg 0))
+              (helm-swoop :$query helm-swoop-last-query
+                          :$multiline helm-swoop-last-prefix-number))
+        ;; Temporary apply second last buffer
+        (let ((helm-last-buffer (cadr helm-buffers))) ad-do-it))
+    ad-do-it))
+
+;; For caret beginning-match -----------------------------
+(defun helm-swoop--caret-match-delete ($o $aft $beg $end &optional $len)
+  "Caret match delete for $O, $AFT in $BEG to $END and $LEN."
+  (if $aft
+      (- $end $beg $len) ;; Unused argument? To avoid byte compile error
+    (delete-region (overlay-start $o) (1- (overlay-end $o)))))
+
+(defun helm-swoop-caret-match (&optional _$resume)
+  "Caret match."
+  (interactive)
+  (let* (($prompt helm-swoop-prompt) ;; Accept change of the variable
+         ($line-number-regexp "^[0-9]+.")
+         ($prompt-regexp
+          (funcall `(lambda ()
+                      (rx bol ,$prompt))))
+         ($prompt-regexp-with-line-number
+          (funcall `(lambda ()
+                      (rx bol ,$prompt (group ,$line-number-regexp)))))
+         ($disguise-caret
+          (lambda ()
+            (save-excursion
+              (re-search-backward $prompt-regexp-with-line-number nil t)
+              (let (($o (make-overlay (match-beginning 1) (match-end 1))))
+                (overlay-put $o 'face 'helm-swoop-target-word-face)
+                (overlay-put $o 'modification-hooks '(helm-swoop--caret-match-delete))
+                (overlay-put $o 'display "^")
+                (overlay-put $o 'evaporate t))))))
+    (if (and (minibufferp)
+             (string-match $prompt-regexp
+                           (buffer-substring-no-properties
+                            (point-min) (point-max)))
+             (eq (point) (+ 1 (length helm-swoop-prompt))))
+        (progn
+          (insert $line-number-regexp)
+          (funcall $disguise-caret))
+      (insert "^"))))
+
+;;; @ helm-swoop-edit -----------------------------------------
+
+(defvar helm-swoop-edit-target-buffer)
+(defvar helm-swoop-edit-buffer "*Helm Swoop Edit*")
+(defvar helm-swoop-edit-map
+  (let (($map (make-sparse-keymap)))
+    (define-key $map (kbd "C-x C-s") 'helm-swoop--edit-complete)
+    (define-key $map (kbd "C-c C-g") 'helm-swoop--edit-cancel)
+    (define-key $map (kbd "C-c C-q C-k") 'helm-swoop--edit-delete-all-lines)
+    $map))
+
+(defun helm-swoop--clear-edit-buffer ($prop)
+  "Clear edit buffer with $PROP."
+  (let ((inhibit-read-only t))
+    (mapc (lambda ($ov)
+            (when (overlay-get $ov $prop)
+              (delete-overlay $ov)))
+          (overlays-in (point-min) (point-max)))
+    (set-text-properties (point-min) (point-max) nil)
+    (goto-char (point-min))
+    (erase-buffer)))
+
+(defun helm-swoop--collect-edited-lines ()
+  "Create a list of edited lines with each its own line number."
+  (interactive)
+  (let ($list)
+    (goto-char (point-min))
+    (while (re-search-forward "^\\([0-9]+\\)\s" nil t)
+      (setq $list
+            (cons (cons (string-to-number (match-string 1))
+                        (buffer-substring-no-properties
+                         (point)
+                         (save-excursion
+                           (if (re-search-forward
+                                "^\\([0-9]+\\)\s\\|^\\(\\-+\\)" nil t)
+                               (1- (match-beginning 0))
+                             (goto-char (point-max))
+                             (re-search-backward "\n" nil t)))))
+                  $list)))
+    $list))
+
+(defun helm-swoop--edit ($candidate)
+  "This function will only be called from `helm-swoop-edit' with $CANDIDATE."
+  (interactive)
+  (setq helm-swoop-edit-target-buffer helm-swoop-target-buffer)
+  (delete-overlay helm-swoop-line-overlay)
+  (helm-swoop--delete-overlay 'target-buffer)
+  (with-current-buffer (get-buffer-create helm-swoop-edit-buffer)
+
+    (helm-swoop--clear-edit-buffer 'helm-swoop-edit)
+    (let (($bufstr ""))
+      ;; Get target line number to edit
+      (with-current-buffer helm-swoop-buffer
+        ;; Use selected line by [C-SPC] or [M-SPC]
+        (mapc (lambda ($ov)
+                (when (eq 'helm-visible-mark (overlay-get $ov 'face))
+                  (setq $bufstr (concat (buffer-substring-no-properties
+                                         (overlay-start $ov) (overlay-end $ov))
+                                        $bufstr))))
+              (overlays-in (point-min) (point-max)))
+        (if (equal "" $bufstr)
+            ;; Not found selected line
+            (setq $bufstr (buffer-substring-no-properties
+                           (point-min) (point-max)))
+          ;; Attach title
+          (setq $bufstr (concat "Helm Swoop\n" $bufstr))))
+
+      ;; Set for edit buffer
+      (insert $bufstr)
+      (add-text-properties (point-min) (point-max)
+                           '(read-only t rear-nonsticky t front-sticky t))
+
+      ;; Set for editable context
+      (let ((inhibit-read-only t))
+        ;; Title and explanation
+        (goto-char (point-min))
+        (let (($o (make-overlay (point) (point-at-eol))))
+          (overlay-put $o 'helm-swoop-edit t)
+          (overlay-put $o 'face 'font-lock-function-name-face)
+          (overlay-put $o 'after-string
+                       (propertize
+                        (substitute-command-keys
+                         (concat
+                          " [\\<helm-swoop-edit-map>\\[helm-swoop--edit-complete]] Complete"
+                          ", [\\<helm-swoop-edit-map>\\[helm-swoop--edit-cancel]] Cancel"
+                          ", [\\<helm-swoop-edit-map>\\[helm-swoop--edit-delete-all-lines]] Delete All"))
+                        'face 'helm-bookmark-addressbook)))
+        ;; Line number and editable area
+        (while (re-search-forward "^\\([0-9]+\s\\)\\(.*\\)$" nil t)
+          (let* (($bol1 (match-beginning 1))
+                 ($eol1 (match-end 1))
+                 ($bol2 (match-beginning 2))
+                 ($eol2 (match-end 2)))
+            ;; Line number
+            (add-text-properties $bol1 $eol1
+                                 '(face font-lock-function-name-face
+                                        intangible t))
+            ;; Editable area
+            (remove-text-properties $bol2 $eol2 '(read-only t))
+            ;; For line tail
+            (set-text-properties $eol2 (or (1+ $eol2) (point-max))
+                                 '(read-only t rear-nonsticky t))))
+        (helm-swoop--target-word-overlay 'edit-buffer 0))))
+
+  (other-window 1)
+  (switch-to-buffer helm-swoop-edit-buffer)
+  (goto-char (point-min))
+  (if (string-match "^[0-9]+" $candidate)
+      (re-search-forward
+       (concat "^" (match-string 0 $candidate)) nil t))
+  (use-local-map helm-swoop-edit-map))
+
+(defun helm-swoop--edit-complete ()
+  "Apply change and kill temporary edit buffer."
+  (interactive)
+  (let (($list (helm-swoop--collect-edited-lines)))
+    (with-current-buffer helm-swoop-edit-target-buffer
+      ;; Replace from the end of buffer
+      (save-excursion
+        (mapc (lambda ($cell)
+                (let (($k (car $cell))
+                      ($v (cdr $cell)))
+                  (goto-char (point-min))
+                  (delete-region (point-at-bol $k) (point-at-eol $k))
+                  (goto-char (point-at-bol $k))
+                  (insert $v)))
+              $list)))
+    (select-window helm-swoop-synchronizing-window)
+    (kill-buffer (get-buffer helm-swoop-edit-buffer)))
+  (message "Successfully helm-swoop-edit applied to original buffer"))
+
+(defun helm-swoop--edit-delete-all-lines ()
+  "Apply change and kill temporary edit buffer."
+  (interactive)
+  (let (($list (helm-swoop--collect-edited-lines)))
+    (with-current-buffer helm-swoop-edit-target-buffer
+      ;; Replace from the end of buffer
+      (save-excursion
+        (mapc (lambda ($cell)
+                (let (($k (car $cell)))
+                  (goto-char (point-min))
+                  (delete-region (point-at-bol $k)
+                                 (if (eq (point-at-eol $k) (point-max))
+                                     (point-at-eol $k)
+                                   (1+ (point-at-eol $k))))))
+              $list)))
+    (select-window helm-swoop-synchronizing-window)
+    (kill-buffer (get-buffer helm-swoop-edit-buffer)))
+  (message "Successfully helm-swoop-edit applied to original buffer"))
+
+(defun helm-swoop--edit-cancel ()
+  "Cancel edit and kill temporary buffer."
+  (interactive)
+  (select-window helm-swoop-synchronizing-window)
+  (kill-buffer (get-buffer helm-swoop-edit-buffer))
+  (message "helm-swoop-edit canceled"))
+
+(defun helm-swoop-edit ()
+  "Execute `helm-swoop--edit'."
+  (interactive)
+  (helm-exit-and-execute-action 'helm-swoop--edit))
+
+;;; @ helm-multi-swoop ----------------------------------------
+(defvar helm-multi-swoop-buffer-list "*helm-multi-swoop buffers list*"
+  "Buffer name.")
+(defvar helm-multi-swoop-ignore-buffers-match "^\\*"
+  "Regexp to eliminate buffers you don't want to see.")
+(defvar helm-multi-swoop-candidate-number-limit 250)
+(defvar helm-multi-swoop-last-selected-buffers nil)
+(defvar helm-multi-swoop-last-query nil)
+(defvar helm-multi-swoop-query nil)
+(defvar helm-multi-swoop-buffer "*Helm Multi Swoop*")
+(defvar helm-multi-swoop-all-from-helm-swoop-last-point nil
+  "For the last position, when helm-multi-swoop-all-from-helm-swoop canceled.")
+(defvar helm-multi-swoop-move-line-action-last-buffer nil)
+
+(defvar helm-multi-swoop-buffers-map
+  (let (($map (make-sparse-keymap)))
+    (set-keymap-parent $map helm-map)
+    (define-key $map (kbd "RET")
+      (lambda () (interactive)
+        (helm-exit-and-execute-action 'helm-multi-swoop--exec)))
+    (delq nil $map)))
+
+(defvar helm-multi-swoop-projectile-buffers-filter
+  #'projectile-buffers-with-file-or-process)
+;; action -----------------------------------------------------
+
+(defun helm-multi-swoop--move-line-action ()
+  "Move line action."
+  (with-helm-window
+    (let* (($key (buffer-substring (point-at-bol) (point-at-eol)))
+           ($num (when (string-match "^[0-9]+" $key)
+                   (string-to-number (match-string 0 $key))))
+           ($source (helm-get-current-source))
+           ($buf (let (($name (assoc-default 'name $source)))
+                   (when $name (get-buffer $name)))))
+      (when $buf
+        ;; Synchronizing line position
+        (with-selected-window helm-swoop-synchronizing-window
+          (with-current-buffer $buf
+            (when (not (eq $buf helm-multi-swoop-move-line-action-last-buffer))
+              (set-window-buffer nil $buf)
+              (helm-swoop--pattern-match))
+            (helm-swoop--goto-line $num)
+            (helm-swoop--target-line-overlay-move $buf)
+            (helm-swoop--recenter))
+          (setq helm-multi-swoop-move-line-action-last-buffer $buf))
+        (setq helm-swoop-last-line-info (cons $buf $num))))))
+
+(defun helm-multi-swoop--get-marked-buffers ()
+  "Get marked buffers."
+  (let ($list
+        ($buf (get-buffer helm-multi-swoop-buffer-list)))
+    (when $buf
+      (with-current-buffer (get-buffer helm-multi-swoop-buffer-list)
+        (mapc (lambda ($ov)
+                (when (eq 'helm-visible-mark (overlay-get $ov 'face))
+                  (setq $list (cons
+                               (let (($word (buffer-substring-no-properties
+                                             (overlay-start $ov) (overlay-end $ov))))
+                                 (mapc (lambda ($r)
+                                         (setq $word (replace-regexp-in-string
+                                                      (car $r) (cdr $r) $word)))
+                                       (list '("\\`[ \t\n\r]+" . "")
+                                             '("[ \t\n\r]+\\'" . "")))
+                                 $word)
+                               $list))))
+              (overlays-in (point-min) (point-max))))
+      (delete "" $list))))
+
+;; core --------------------------------------------------------
+
+(cl-defun helm-multi-swoop--exec (ignored &key $query $buflist $func $action)
+  "Multi swoop exec with IGNORED $QUERY $BUFLIST $FUNC $ACTION."
+  (interactive)
+  (setq helm-swoop-synchronizing-window (selected-window))
+  (setq helm-swoop-last-point
+        (or helm-multi-swoop-all-from-helm-swoop-last-point
+            (cons (point) (buffer-name (current-buffer)))))
+  (setq helm-swoop-last-line-info
+        (cons (current-buffer) (line-number-at-pos)))
+  (unless (get-buffer helm-multi-swoop-buffer-list)
+    (get-buffer-create helm-multi-swoop-buffer-list))
+  (helm-swoop--set-prefix (prefix-numeric-value current-prefix-arg))
+  (let (($buffs (or $buflist
+                    (helm-multi-swoop--get-marked-buffers)
+                    `(,(buffer-name helm-swoop-target-buffer))
+                    (error "No buffer selected")))
+        $contents
+        $preserve-position
+        ($prefix-arg (prefix-numeric-value
+                      (or current-prefix-arg helm-swoop-last-prefix-number 1))))
+    (helm-swoop--set-prefix $prefix-arg)
+    (setq helm-multi-swoop-last-selected-buffers $buffs)
+    ;; Create buffer sources
+    (mapc (lambda ($buf)
+            (when (get-buffer $buf)
+              (with-current-buffer (get-buffer $buf)
+                (let* (($func
+                        (or $func
+                            (lambda ()
+                              (helm-swoop--split-lines-by
+                               (helm-swoop--get-content $buf t)
+                               "\n" $prefix-arg))))
+                       ($action
+                        (or $action
+                            `(("Go to Line"
+                               . (lambda ($line)
+                                   (switch-to-buffer ,$buf)
+                                   (helm-swoop--goto-line
+                                    (when (string-match "^[0-9]+" $line)
+                                      (string-to-number
+                                       (match-string 0 $line))))
+                                   (when (re-search-forward
+                                          (mapconcat 'identity
+                                                     (split-string
+                                                      helm-pattern " ") "\\|")
+                                          nil t)
+                                     (funcall helm-swoop-flash-region-function
+                                              (match-beginning 0) (match-end 0))
+                                     (goto-char (match-beginning 0)))
+                                   (helm-swoop--recenter)))
+                              ("Edit" . helm-multi-swoop--edit)))))
+                  (setq $preserve-position
+                        (cons (cons $buf (point)) $preserve-position))
+                  (setq
+                   $contents
+                   (cons
+                    (helm-c-source-multi-swoop $buf $func $action $prefix-arg)
+                    $contents))))))
+          $buffs)
+    (unwind-protect
+        (progn
+          (add-hook 'helm-after-update-hook 'helm-swoop--pattern-match)
+          (add-hook 'helm-after-update-hook 'helm-swoop--keep-nearest-position t)
+          (setq helm-swoop-line-overlay
+                (make-overlay (point) (point)))
+          (overlay-put helm-swoop-line-overlay
+                       'face 'helm-swoop-target-line-face)
+          (helm-swoop--target-line-overlay-move)
+          ;; Execute helm
+          (let ((helm-display-function helm-swoop-split-window-function)
+                (helm-display-source-at-screen-top nil)
+                (helm-completion-window-scroll-margin 5))
+            (helm :sources $contents
+                  :buffer helm-multi-swoop-buffer
+                  :input (or $query helm-multi-swoop-query "")
+                  :prompt helm-swoop-prompt
+                  :candidate-number-limit
+                  helm-multi-swoop-candidate-number-limit
+                  :preselect
+                  (regexp-quote
+                   (format "%s %s" (line-number-at-pos)
+                           (helm-swoop--get-string-at-line))))))
+      ;; Restore
+      (progn
+        (when (= 1 helm-exit-status)
+          (helm-swoop-back-to-last-point t)
+          (helm-swoop--restore-unveiled-overlay))
+        (setq helm-swoop-invisible-targets nil)
+        (remove-hook 'helm-after-update-hook 'helm-swoop--pattern-match)
+        (remove-hook 'helm-after-update-hook 'helm-swoop--keep-nearest-position)
+        (setq helm-multi-swoop-last-query helm-swoop-pattern)
+        (helm-swoop--restore-unveiled-overlay)
+        (setq helm-multi-swoop-query nil)
+        (setq helm-multi-swoop-all-from-helm-swoop-last-point nil)
+        (mapc (lambda ($buf)
+                (let (($current-buffer (buffer-name (current-buffer))))
+                  (with-current-buffer (car $buf)
+                    ;; Delete overlay
+                    (delete-overlay helm-swoop-line-overlay)
+                    (helm-swoop--delete-overlay 'target-buffer)
+                    ;; Restore each buffer's position
+                    (unless (equal (car $buf) $current-buffer)
+                      (goto-char (cdr $buf))))))
+              $preserve-position)))))
+
+(defun helm-multi-swoop--get-buffer-list ()
+  "Get buffer list."
+  (let ($buflist1 $buflist2)
+    ;; eliminate buffers start with whitespace and dired buffers
+    (mapc (lambda ($buf)
+            (setq $buf (buffer-name $buf))
+            (unless (string-match "^\\s-" $buf)
+              (unless (eq 'dired-mode (with-current-buffer $buf major-mode))
+                (setq $buflist1 (cons $buf $buflist1)))))
+          (buffer-list))
+    ;; eliminate buffers match pattern
+    (mapc (lambda ($buf)
+            (unless (string-match
+                     helm-multi-swoop-ignore-buffers-match
+                     $buf)
+              (setq $buflist2 (cons $buf $buflist2))))
+          $buflist1)
+    $buflist2))
+
+(defun helm-c-source-helm-multi-swoop-buffers ()
+  "Show buffer list to select."
+  `((name . "helm-multi-swoop select buffers")
+    (candidates . helm-multi-swoop--get-buffer-list)
+    (header-line . "[C-SPC]/[M-SPC] select, [RET] next step")
+    (keymap . ,helm-multi-swoop-buffers-map)
+    (match . ,(helm-swoop-match-functions))
+    ;; (search . ,(helm-swoop-search-functions))
+    ))
+
+(defun helm-multi-swoop--get-query ($query)
+  "Get query from $QUERY."
+  (cond ($query
+         (setq helm-multi-swoop-query $query))
+        (mark-active
+         (let (($st (buffer-substring-no-properties
+                     (region-beginning) (region-end))))
+           (if (string-match "\n" $st)
+               (message "Multi line region is not allowed")
+             (setq helm-multi-swoop-query
+                   (helm-swoop-pre-input-optimize $st)))))
+        ((setq helm-multi-swoop-query
+               (helm-swoop-pre-input-optimize
+                (funcall helm-swoop-pre-input-function))))
+        (t (setq helm-multi-swoop-query ""))))
+
+;;;###autoload
+(defun helm-multi-swoop (&optional $query $buflist)
+  "Multi swoop for $QUERY in $BUFLIST.
+
+Usage:
+  \\[execute-extended-command] helm-multi-swoop
+  1. Select any buffers by [C-SPC] or [M-SPC]
+  2. Press [RET] to start `helm-multi-swoop'
+
+\\[universal-argument] \\[execute-extended-command] helm-multi-swoop
+If you have done helm-multi-swoop before, you can skip select buffers step.
+Last selected buffers will be applied to helm-multi-swoop."
+  (interactive)
+  (setq helm-multi-swoop-query (helm-multi-swoop--get-query $query))
+  (if (equal current-prefix-arg '(4))
+      (helm-multi-swoop--exec nil
+                              :$query helm-multi-swoop-query
+                              :$buflist $buflist)
+    (if $buflist
+        (helm-multi-swoop--exec nil
+                                :$query $query
+                                :$buflist $buflist)
+      (helm :sources (helm-c-source-helm-multi-swoop-buffers)
+            :buffer helm-multi-swoop-buffer-list
+            :prompt "Mark any buffers by [C-SPC] or [M-SPC]: "))))
+
+;;;###autoload
+(defun helm-multi-swoop-all (&optional $query)
+  "Apply all buffers to helm-multi-swoop for $QUERY."
+  (interactive)
+  (setq helm-multi-swoop-query (helm-multi-swoop--get-query $query))
+  (helm-multi-swoop--exec nil
+                          :$query helm-multi-swoop-query
+                          :$buflist (helm-multi-swoop--get-buffer-list)))
+
+(defun get-buffers-matching-mode ($mode)
+  "Return a list of buffers where their `major-mode' is equal to $MODE."
+  (let ($buffer-mode-matches)
+    (mapc (lambda ($buf)
+            (when (get-buffer $buf)
+              (with-current-buffer (get-buffer $buf)
+                (if (eq $mode major-mode)
+                    (add-to-list '$buffer-mode-matches (buffer-name $buf))))))
+          (buffer-list))
+    $buffer-mode-matches))
+
+(defun helm-multi-swoop-by-mode ($mode &optional $query)
+  "Apply all buffers whose mode is $MODE to helm-multi-swoop for $QUERY."
+  (setq helm-multi-swoop-query (helm-multi-swoop--get-query $query))
+  (if (get-buffers-matching-mode $mode)
+      (helm-multi-swoop--exec nil
+                              :$query helm-multi-swoop-query
+                              :$buflist (get-buffers-matching-mode $mode))
+    (message "there are no buffers in that mode right now")))
+
+;;;###autoload
+(defun helm-multi-swoop-org (&optional $query)
+  "Applie all `org-mode' buffers to helm-multi-swoop for $QUERY."
+  (interactive)
+  (helm-multi-swoop-by-mode 'org-mode $query))
+
+;;;###autoload
+(defun helm-multi-swoop-current-mode (&optional $query)
+  "Applie all buffers of the same mode as the current buffer to helm-multi-swoop for $QUERY."
+  (interactive)
+  (helm-multi-swoop-by-mode major-mode $query))
+
+;;;###autoload
+(defun helm-multi-swoop-projectile (&optional $query)
+  "Apply all opened buffers of the current project to helm-multi-swoop for $QUERY."
+  (interactive)
+  (setq helm-multi-swoop-query (helm-multi-swoop--get-query $query))
+  (if (require 'projectile nil 'noerror)
+      ;; set filter function that is used in projectile-project-buffers
+      (let ((projectile-buffers-filter-function
+             helm-multi-swoop-projectile-buffers-filter))
+        (helm-multi-swoop--exec nil
+                                :$query helm-multi-swoop-query
+                                :$buflist (mapcar #'buffer-name
+                                                  (projectile-project-buffers))))
+    (error "Package 'projectile' is not available")))
+
+
+(defun helm-swoop--wrap-function-with-pre-input-function ($target-func $pre-input-func)
+  "Wrap function with pre input function for $TARGET-FUNC and $PRE-INPUT-FUNC."
+  (let ((helm-swoop-pre-input-function $pre-input-func))
+    (funcall $target-func)))
+
+;;;###autoload
+(defun helm-swoop-without-pre-input ()
+  "Start helm-swoop without pre input query."
+  (interactive)
+  (helm-swoop--wrap-function-with-pre-input-function
+   'helm-swoop (lambda () nil)))
+
+;;;###autoload
+(defun helm-swoop-symble-pre-input ()
+  "Start helm-swoop without pre input query."
+  (interactive)
+  (helm-swoop--wrap-function-with-pre-input-function
+   'helm-swoop (lambda () (format "\\_<%s\\_> " (thing-at-point 'symbol)))))
+
+;; option -------------------------------------------------------
+
+(defun helm-multi-swoop-all-from-isearch ()
+  "Invoke `helm-multi-swoop-all' from isearch."
+  (interactive)
+  (let (($query (if isearch-regexp
+                    isearch-string
+                  (regexp-quote isearch-string))))
+    (let (search-nonincremental-instead)
+      (isearch-exit))
+    (helm-multi-swoop-all $query)))
+;; When doing isearch, hand the word over to helm-swoop
+;; (define-key isearch-mode-map (kbd "C-x M-i") 'helm-multi-swoop-all-from-isearch)
+
+(defun helm-multi-swoop-all-from-helm-swoop ()
+  "Invoke `helm-multi-swoop-all' from helm-swoop."
+  (interactive)
+  (helm-swoop--restore)
+  (delete-overlay helm-swoop-line-overlay)
+  (setq helm-multi-swoop-all-from-helm-swoop-last-point helm-swoop-last-point)
+  (let (($query helm-pattern))
+    (run-with-timer 0 nil (lambda () (helm-multi-swoop-all $query))))
+  (helm-exit-minibuffer))
+
+(defun helm-multi-swoop-current-mode-from-helm-swoop ()
+  "Invoke `helm-multi-swoop-all' from helm-swoop."
+  (interactive)
+  (helm-swoop--restore)
+  (delete-overlay helm-swoop-line-overlay)
+  (setq helm-multi-swoop-all-from-helm-swoop-last-point helm-swoop-last-point)
+  (let (($query helm-pattern))
+    (run-with-timer 0 nil (lambda () (helm-multi-swoop-current-mode $query))))
+  (helm-exit-minibuffer))
+;; (define-key helm-swoop-map (kbd "M-m") 'helm-multi-swoop-current-mode-from-helm-swoop)
+
+(defadvice helm-resume (around helm-multi-swoop-resume activate)
+  "Resume if the last used helm buffer is *Helm Swoop*."
+  (if (equal helm-last-buffer helm-multi-swoop-buffer)
+
+      (if (boundp 'helm-multi-swoop-last-query)
+          (if (not (ad-get-arg 0))
+              (helm-multi-swoop helm-multi-swoop-last-query
+                                helm-multi-swoop-last-selected-buffers))
+        ;; Temporary apply second last buffer
+        (let ((helm-last-buffer (cadr helm-buffers))) ad-do-it))
+    ad-do-it))
+
+;;; @ helm-multi-swoop-edit -----------------------------------
+(defvar helm-multi-swoop-edit-save t
+  "Save each buffer you edit when editing is complete.")
+(defvar helm-multi-swoop-edit-buffer "*Helm Multi Swoop Edit*")
+
+(defvar helm-multi-swoop-edit-map
+  (let (($map (make-sparse-keymap)))
+    (define-key $map (kbd "C-x C-s") 'helm-multi-swoop--edit-complete)
+    (define-key $map (kbd "C-c C-g") 'helm-multi-swoop--edit-cancel)
+    (define-key $map (kbd "C-c C-q C-k") 'helm-multi-swoop--edit-delete-all-lines)
+    $map))
+
+(defun helm-multi-swoop--edit ($candidate)
+  "This function will only be called from `helm-swoop-edit' for $CANDIDATE."
+  (interactive)
+  (delete-overlay helm-swoop-line-overlay)
+  (helm-swoop--delete-overlay 'target-buffer)
+  (with-current-buffer (get-buffer-create helm-multi-swoop-edit-buffer)
+    (helm-swoop--clear-edit-buffer 'helm-multi-swoop-edit)
+    (let (($bufstr "")
+          ($mark nil)
+          ($buf (get-buffer helm-multi-swoop-buffer)))
+      ;; Get target line number to edit
+      (when $buf
+        (with-current-buffer $buf
+          ;; Set overlay to helm-source-header for editing marked lines
+          (save-excursion
+            (goto-char (point-min))
+            (let (($beg (point)) $end)
+              (overlay-recenter (point-max))
+              (while (setq $beg (text-property-any $beg (point-max)
+                                                   'face 'helm-source-header))
+                (setq $end (next-single-property-change $beg 'face))
+                (overlay-put (make-overlay $beg $end) 'source-header t)
+                (setq $beg $end)
+                (goto-char $end))))
+          ;; Use selected line by [C-SPC] or [M-SPC]
+          (mapc (lambda ($ov)
+                  (when (overlay-get $ov 'source-header)
+                    (setq $bufstr (concat (buffer-substring
+                                           (overlay-start $ov) (overlay-end $ov))
+                                          $bufstr)))
+                  (when (eq 'helm-visible-mark (overlay-get $ov 'face))
+                    (let (($str (buffer-substring (overlay-start $ov) (overlay-end $ov))))
+                      (unless (equal "" $str) (setq $mark t))
+                      (setq $bufstr (concat (buffer-substring
+                                             (overlay-start $ov) (overlay-end $ov))
+                                            $bufstr)))))
+                (overlays-in (point-min) (point-max)))
+          (if $mark
+              (progn (setq $bufstr (concat "Helm Multi Swoop\n" $bufstr))
+                     (setq $mark nil))
+            (setq $bufstr (concat "Helm Multi Swoop\n"
+                                  (buffer-substring
+                                   (point-min) (point-max)))))))
+
+      ;; Set for edit buffer
+      (insert $bufstr)
+      (add-text-properties (point-min) (point-max)
+                           '(read-only t rear-nonsticky t front-sticky t))
+
+      ;; Set for editable context
+      (let ((inhibit-read-only t))
+        ;; Title and explanation
+        (goto-char (point-min))
+        (let (($o (make-overlay (point) (point-at-eol))))
+          (overlay-put $o 'helm-multi-swoop-edit t)
+          (overlay-put $o 'face 'font-lock-function-name-face)
+          (overlay-put $o 'after-string
+                       (propertize
+                        (substitute-command-keys
+                         (concat
+                          " [\\<helm-swoop-edit-map>\\[helm-swoop--edit-complete]] Complete"
+                          ", [\\<helm-swoop-edit-map>\\[helm-swoop--edit-cancel]] Cancel"
+                          ", [\\<helm-swoop-edit-map>\\[helm-swoop--edit-delete-all-lines]] Delete All"))
+                        'face 'helm-bookmark-addressbook)))
+        ;; Line number and editable area
+        (while (re-search-forward "^\\([0-9]+\s\\)\\(.*\\)$" nil t)
+          (let* (($bol1 (match-beginning 1))
+                 ($eol1 (match-end 1))
+                 ($bol2 (match-beginning 2))
+                 ($eol2 (match-end 2)))
+
+            ;; Line number
+            (add-text-properties $bol1 $eol1
+                                 '(face font-lock-function-name-face
+                                        intangible t))
+            ;; Editable area
+            (remove-text-properties $bol2 $eol2 '(read-only t))
+            ;; (add-text-properties $bol2 $eol2 '(font-lock-face helm-match))
+
+            ;; For line tail
+            (set-text-properties $eol2 (or (1+ $eol2) (point-max))
+                                 '(read-only t rear-nonsticky t))))
+        (helm-swoop--target-word-overlay 'edit-buffer 0))))
+
+  (other-window 1)
+  (switch-to-buffer helm-multi-swoop-edit-buffer)
+  (goto-char (point-min))
+  (if (string-match "^[0-9]+" $candidate)
+      (re-search-forward
+       (concat "^" (match-string 0 $candidate)) nil t))
+  (use-local-map helm-multi-swoop-edit-map))
+
+(defun helm-multi-swoop--separate-text-property-into-list ($property)
+  "Separete text property into list for $PROPERTY."
+  (interactive)
+  (let ($list $end)
+    (save-excursion
+      (goto-char (point-min))
+      (while (setq $end (next-single-property-change (point) $property))
+        ;; Must eliminate last return because of unexpected edit result
+        (setq $list (cons
+                     (let (($str (buffer-substring-no-properties (point) $end)))
+                       (if (string-match "\n\n\\'" $str)
+                           (replace-regexp-in-string "\n\\'" "" $str)
+                         $str))
+                     $list))
+        (goto-char $end))
+      (setq $list (cons (buffer-substring-no-properties (point) (point-max))
+                        $list)))
+    (nreverse $list)))
+
+(defun helm-multi-swoop--collect-edited-lines ()
+  "Create a list of edited lines with each its own line number."
+  (interactive)
+  (let* (($list
+          (helm-multi-swoop--separate-text-property-into-list 'helm-header))
+         ($length (length $list))
+         ($i 1) ;; 0th $list is header
+         $pairs)
+    (while (<= $i $length)
+      (let ($contents)
+        ;; Make ((number . line) (number . line) (number . line) ...)
+        (with-temp-buffer
+          (insert (format "%s" (nth (1+ $i) $list)))
+          (goto-char (point-min))
+          (while (re-search-forward "^\\([0-9]+\\)\s" nil t)
+            (setq $contents
+                  (cons (cons (string-to-number (match-string 1))
+                              (buffer-substring-no-properties
+                               (point)
+                               (save-excursion
+                                 (if (re-search-forward
+                                      "^\\([0-9]+\\)\s\\|^\\(\\-+\\)" nil t)
+                                     (1- (match-beginning 0))
+                                   (goto-char (point-max))
+                                   (re-search-backward "\n" nil t)))))
+                        $contents))))
+        ;; Make ((buffer-name (number . line) (number . line) ...)
+        ;;       (buffer-name (number . line) (number . line) ...) ...)
+        (setq $pairs (cons (cons (nth $i $list) $contents) $pairs)))
+      (setq $i (+ $i 2)))
+    (delete '(nil) $pairs)))
+
+(defun helm-multi-swoop--edit-complete ()
+  "Delete all extracted lines, and apply change to buffers and kill temporary edit buffer."
+  (interactive)
+  (let (($list (helm-multi-swoop--collect-edited-lines))
+        $read-only)
+    (mapc (lambda ($x)
+            (with-current-buffer (car $x)
+              (unless buffer-read-only
+                (save-excursion
+                  (mapc (lambda ($cell)
+                          (let (($k (car $cell))
+                                ($v (cdr $cell)))
+                            (goto-char (point-min))
+                            (delete-region (point-at-bol $k) (point-at-eol $k))
+                            (goto-char (point-at-bol $k))
+                            (insert $v)))
+                        (cdr $x))))
+              (if helm-multi-swoop-edit-save
+                  (if buffer-read-only
+                      (setq $read-only t)
+                    (save-buffer)))))
+          $list)
+    (select-window helm-swoop-synchronizing-window)
+    (kill-buffer (get-buffer helm-multi-swoop-edit-buffer))
+    (if $read-only
+        (message "Couldn't save some buffers because of read-only")
+      (message "Successfully helm-multi-swoop-edit applied to original buffer"))))
+
+(defun helm-multi-swoop--edit-delete-all-lines ()
+  "Delete all extracted lines, and apply change to buffers and kill temporary edit buffer."
+  (interactive)
+  (let (($list (helm-multi-swoop--collect-edited-lines))
+        $read-only)
+    (mapc (lambda ($x)
+            (with-current-buffer (car $x)
+              (unless buffer-read-only
+                (save-excursion
+                  (mapc (lambda ($cell)
+                          (let (($k (car $cell)))
+                            (goto-char (point-min))
+                            (delete-region (point-at-bol $k)
+                                           (if (eq (point-at-eol $k) (point-max))
+                                               (point-at-eol $k)
+                                             (1+ (point-at-eol $k))))))
+                        (cdr $x))))
+              (if helm-multi-swoop-edit-save
+                  (if buffer-read-only
+                      (setq $read-only t)
+                    (save-buffer)))))
+          $list)
+    (select-window helm-swoop-synchronizing-window)
+    (kill-buffer (get-buffer helm-multi-swoop-edit-buffer))
+    (if $read-only
+        (message "Couldn't save some buffers because of read-only")
+      (message "Successfully helm-multi-swoop-edit applied to original buffer"))))
+
+(defun helm-multi-swoop--edit-cancel ()
+  "Cancel edit and kill temporary buffer."
+  (interactive)
+  (select-window helm-swoop-synchronizing-window)
+  (kill-buffer (get-buffer helm-multi-swoop-edit-buffer))
+  (message "helm-multi-swoop-edit canceled"))
+
+;;;###autoload
+(defun helm-multi-swoop-edit ()
+  "Multi swoop edit."
+  (interactive)
+  (helm-exit-and-execute-action 'helm-multi-swoop--edit))
+
+;;; @ helm-swoop-same-face-at-point -----------------------------------
+
+(defsubst helm-swoop--get-at-face (&optional $point)
+  "Get at face at $POINT."
+  (or $point (setq $point (point)))
+  (let (($face (or (get-char-property $point 'read-face-name)
+                   (get-char-property $point 'face))))
+    $face))
+
+(defun helm-swoop--cull-face-include-line ($face)
+  "Cull face include line for $FACE."
+  (let (($list) ($po (point-min)))
+    (save-excursion
+      (while (setq $po (next-single-property-change $po 'face))
+        (when (equal $face (helm-swoop--get-at-face $po))
+          (goto-char $po)
+          (setq $list (cons (format "%s %s"
+                                    (line-number-at-pos $po)
+                                    (buffer-substring (point-at-bol) (point-at-eol)))
+                            $list))
+          (let (($ov (make-overlay $po (or (next-single-property-change $po 'face)
+                                           (point-max)))))
+            (overlay-put $ov 'face 'helm-swoop-target-word-face)
+            (overlay-put $ov 'target-buffer 'helm-swoop-target-word-face)))))
+    (nreverse (delete-dups $list))))
+
+(defun helm-swoop-same-face-at-point (&optional $face)
+  "Same face at point for $FACE."
+  (interactive)
+  (or $face (setq $face (helm-swoop--get-at-face)))
+  (helm-swoop :$query ""
+              :$source
+              `((name . "helm-swoop-same-face-at-point")
+                (candidates . ,(helm-swoop--cull-face-include-line $face))
+                (header-line . ,(format "%s" $face))
+                (action
+                 . (("Go to Line"
+                     . (lambda ($line)
+                         (helm-swoop--goto-line
+                          (when (string-match "^[0-9]+" $line)
+                            (string-to-number (match-string 0 $line))))
+                         (let (($po (point))
+                               ($poe (point-at-eol)))
+                           (while (<= (setq $po (next-single-property-change $po 'face)) $poe)
+                             (when (eq 'helm-swoop-target-word-face (helm-swoop--get-at-face $po))
+                               (goto-char $po))))
+                         (helm-swoop--recenter)))
+                    ("Edit" . helm-swoop--edit))))))
+
+(defun helm-multi-swoop-same-face-at-point (&optional $face)
+  "Same face at point for $FACE."
+  (interactive)
+  (or $face (setq $face (helm-swoop--get-at-face)))
+  (helm-multi-swoop--exec
+   nil
+   :$query ""
+   :$func (lambda () (helm-swoop--cull-face-include-line $face))
+   :$action (lambda ($line)
+              (switch-to-buffer (assoc-default 'name (helm-get-current-source)))
+              (helm-swoop--goto-line
+               (when (string-match "^[0-9]+" $line)
+                 (string-to-number (match-string 0 $line))))
+              (let (($po (point))
+                    ($poe (point-at-eol)))
+                (while (<= (setq $po (next-single-property-change $po 'face)) $poe)
+                  (when (eq 'helm-swoop-target-word-face (helm-swoop--get-at-face $po))
+                    (goto-char $po))))
+              (helm-swoop--recenter))
+   :$buflist (helm-multi-swoop--get-buffer-list)))
+
+(provide 'helm-swoop)
+
+;; Local Variables:
+;; indent-tabs-mode: nil
+;; End:
+
+;;; helm-swoop.el ends here
diff --git a/elpa/helm-swoop-readme.txt b/elpa/helm-swoop-readme.txt
new file mode 100644 (file)
index 0000000..041fb55
--- /dev/null
@@ -0,0 +1,62 @@
+List the all lines to another buffer, which is able to squeeze
+by any words you input.  At the same time, the original buffer's
+cursor is jumping line to line according to moving up and down
+the list.
+
+Example config
+----------------------------------------------------------------
+helm from https://github.com/emacs-helm/helm
+(require 'helm)
+
+Locate the helm-swoop folder to your path
+This line is unnecessary if you get this program from MELPA
+(add-to-list 'load-path "~/.emacs.d/elisp/helm-swoop")
+
+(require 'helm-swoop)
+
+Change keybinds to whatever you like :)
+(global-set-key (kbd "M-i") 'helm-swoop)
+(global-set-key (kbd "M-I") 'helm-swoop-back-to-last-point)
+(global-set-key (kbd "C-c M-i") 'helm-multi-swoop)
+(global-set-key (kbd "C-x M-i") 'helm-multi-swoop-all)
+
+When doing isearch, hand the word over to helm-swoop
+(define-key isearch-mode-map (kbd "M-i") 'helm-swoop-from-isearch)
+(define-key helm-swoop-map (kbd "M-i") 'helm-multi-swoop-all-from-helm-swoop)
+
+Save buffer when helm-multi-swoop-edit complete
+(setq helm-multi-swoop-edit-save t)
+
+If this value is t, split window inside the current window
+(setq helm-swoop-split-with-multiple-windows nil)
+
+Split direction.  'split-window-vertically or 'split-window-horizontally
+(setq helm-swoop-split-direction 'split-window-vertically)
+
+If nil, you can slightly boost invoke speed in exchange for text color
+(setq helm-swoop-speed-or-color nil)
+
+Go to the opposite side of line from the end or beginning of line
+(setq helm-swoop-move-to-line-cycle t)
+
+Optional face for line numbers
+Face name is `helm-swoop-line-number-face`
+(setq helm-swoop-use-line-number-face t)
+
+----------------------------------------------------------------
+
+* `M-x helm-swoop` when region active
+* `M-x helm-swoop` when the cursor is at any symbol
+* `M-x helm-swoop` when the cursor is not at any symbol
+* `M-3 M-x helm-swoop` or `C-u 5 M-x helm-swoop` multi separated line culling
+* `M-x helm-multi-swoop` multi-occur like feature
+* `M-x helm-multi-swoop-all` apply all buffers
+* `C-u M-x helm-multi-swoop` apply last selected buffers from the second time
+* `M-x helm-swoop-same-face-at-point` list lines have the same face at the cursor is on
+* During isearch `M-i` to hand the word over to helm-swoop
+* During helm-swoop `M-i` to hand the word over to helm-multi-swoop-all
+* While doing `helm-swoop` press `C-c C-e` to edit mode, apply changes to original buffer by `C-x C-s`
+
+Helm Swoop Edit
+While doing helm-swoop, press keybind [C-c C-e] to move to edit buffer.
+Edit the list and apply by [C-x C-s].  If you'd like to cancel, [C-c C-g]