branch: elpa/isl
commit 5378fcdb8bcf45079bac9f3a12ee3a7e89f3c99f
Author: Thierry Volpiatto <[email protected]>
Commit: Thierry Volpiatto <[email protected]>

    add isl-yank
---
 isearch-light.el | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/isearch-light.el b/isearch-light.el
index 778cc916c39..a9b98b92122 100644
--- a/isearch-light.el
+++ b/isearch-light.el
@@ -17,6 +17,7 @@
 (defvar isl-initial-pos nil)
 (defvar isl-number-results 0)
 (defvar isl-history nil)
+(defvar isl-yank-point nil)
 
 ;; User vars
 (defvar isl-case-fold-search 'smart
@@ -61,9 +62,9 @@
     (define-key map (kbd "<down>") 'isl-goto-next)
     (define-key map (kbd "<up>")   'isl-goto-prev)
     (define-key map (kbd "RET")    'isl-exit-at-point)
+    (define-key map (kbd "C-w")    'isl-yank-word-at-point)
     map))
 
-
 ;;; Actions
 ;;
 (defun isl-goto-next-1 ()
@@ -76,7 +77,8 @@
         (when (and ov pos)
           (setq isl-last-overlay ov)
           (overlay-put ov 'face 'isl-on)
-          (goto-char pos))))))
+          (goto-char pos)
+          (setq isl-yank-point pos))))))
 
 (defun isl-goto-next ()
   (interactive)
@@ -108,6 +110,21 @@
       (sit-for 0.1)
       (delete-overlay ov))
     (exit-minibuffer)))
+
+(defun isl-yank-word-at-point ()
+  (interactive)
+  (let (str)
+    (with-current-buffer isl-current-buffer
+      (when (or (memq (char-syntax (or (char-after) 0)) '(?w))
+                (memq (char-syntax (or (char-after (1+ (point))) 0))
+                      '(?w)))
+        (setq str (buffer-substring-no-properties (or isl-yank-point (point))
+                                                  (save-excursion
+                                                    (forward-word)
+                                                    (point))))))
+    (when str
+      (with-selected-window (minibuffer-window)
+        (insert str)))))
 
 (defun isl-delete-overlays ()
   (when isl-item-overlays
@@ -143,7 +160,8 @@
                   isl-number-results (length isl-item-overlays))
             (overlay-put isl-last-overlay 'face 'isl-on)
             (isl--set-iterator)
-            (goto-char (overlay-end (iterator:next isl-iterator))))))
+            (goto-char (overlay-end (iterator:next isl-iterator)))
+            (setq isl-yank-point (point)))))
       (isl--setup-mode-line))))
 
 (defun isl--setup-mode-line ()
@@ -206,7 +224,8 @@
       (unwind-protect
           (isl-read-from-minibuffer "Search: ")
         (isl-delete-overlays)
-        (setq mode-line-format (default-value 'mode-line-format)))
+        (setq mode-line-format (default-value 'mode-line-format)
+              isl-yank-point nil))
     (quit (goto-char isl-initial-pos))))
 
 ;;;###autoload

Reply via email to