emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 5bca5be: Add new command `el-search-this-sexp'


From: Michael Heerdegen
Subject: [elpa] master 5bca5be: Add new command `el-search-this-sexp'
Date: Sun, 2 Jul 2017 09:42:10 -0400 (EDT)

branch: master
commit 5bca5bed47bd660886266ac6038eca6e866ad686
Author: Michael Heerdegen <address@hidden>
Commit: Michael Heerdegen <address@hidden>

    Add new command `el-search-this-sexp'
---
 packages/el-search/el-search.el | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/packages/el-search/el-search.el b/packages/el-search/el-search.el
index a024212..b6d1021 100644
--- a/packages/el-search/el-search.el
+++ b/packages/el-search/el-search.el
@@ -89,6 +89,10 @@
 ;;     Resume the last search from the position of the last visited
 ;;     match, or (with prefix arg) prompt for an old search to resume.
 ;;
+;;   C-H (el-search-this-sexp)
+;;     Grab the symbol or sexp under point and initiate an el-search
+;;     for other occurrences.
+;;
 ;;
 ;; These bindings may not work in a console (if you have a good idea
 ;; for nice alternative bindings please mail me).
@@ -1303,6 +1307,7 @@ that contain a file named \".nosearch\" are excluded as 
well."
   (define-key emacs-lisp-mode-map [(control ?S)] #'el-search-pattern)
   (define-key emacs-lisp-mode-map [(control ?R)] #'el-search-pattern-backwards)
   (define-key emacs-lisp-mode-map [(control ?%)] #'el-search-query-replace)
+  (define-key emacs-lisp-mode-map [(control ?H)] #'el-search-this-sexp) ;H 
like in "highlight" or "here"
   (define-key global-map          [(control ?J)] 
#'el-search-jump-to-search-head)
   (define-key global-map          [(control ?A)] #'el-search-from-beginning)
   (define-key global-map          [(control ?D)] #'el-search-skip-directory)
@@ -2030,6 +2035,40 @@ With prefix arg, restart the current search."
 
 (define-obsolete-function-alias 'el-search-previous-match 
'el-search-pattern-backwards)
 
+(defun el-search-this-sexp (sexp)
+  "Prepare to el-search the `sexp-at-point'.
+
+Grab the `sexp-at-point' SEXP and prepare to el-search the
+current buffer for other matches of 'SEXP.
+
+Use the normal search commands to seize the search."
+  (interactive (list (if (not (derived-mode-p 'emacs-lisp-mode))
+                         (user-error "Current buffer not in `emacs-lisp-mode'")
+                       (let ((symbol-at-point-text (thing-at-point 'symbol))
+                             symbol-at-point)
+                         (if (and symbol-at-point-text
+                                  ;; That should ideally be always true but 
isn't
+                                  (condition-case nil
+                                      (symbolp (setq symbol-at-point (read 
symbol-at-point-text)))
+                                    (invalid-read-syntax nil)))
+                             symbol-at-point
+                           (if (thing-at-point 'sexp)
+                               (sexp-at-point)
+                             (user-error "No sexp at point")))))))
+  (let ((printed-sexp (el-search--pp-to-string sexp)))
+    (el-search--pushnew-to-history (concat "'" printed-sexp) 
'el-search-pattern-history)
+    (el-search-setup-search-1
+     `',sexp
+     (let ((current-buffer (current-buffer)))
+       (lambda () (stream (list current-buffer))))
+     'from-here)
+    (el-search--next-buffer el-search--current-search)
+    (setq this-command 'el-search-pattern
+          el-search--success t)
+    (el-search-hl-other-matches (el-search--current-matcher))
+    (add-hook 'post-command-hook #'el-search-hl-post-command-fun t t)
+    (el-search--message-no-log "%s" printed-sexp)))
+
 
 ;;;; El-Occur
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]