]> code.delx.au - gnu-emacs-elpa/blobdiff - packages/el-search/el-search.el
Complete and document what a SYMBOL in `l' matches
[gnu-emacs-elpa] / packages / el-search / el-search.el
index f6c8c48e0f008e331cafb20dd1482bc931931093..05378a8a502b3f30f9eb3b0d841f9ff6e46741ec 100644 (file)
@@ -374,14 +374,15 @@ of the definitions is limited to \"el-search\"."
 
 (defun el-search--matcher (pattern &rest body)
   (eval ;use `eval' to allow for user defined pattern types at run time
-   `(el-search--with-additional-pcase-macros
-     (let ((byte-compile-debug t) ;make undefined pattern types raise an error
-           (warning-suppress-log-types '((bytecomp)))
-           (pcase--dontwarn-upats (cons '_ pcase--dontwarn-upats)))
-       (byte-compile (lambda (expression)
-                       (pcase expression
-                         (,pattern ,@(or body (list t)))
-                         (_        nil))))))))
+   (let ((expression (make-symbol "expression")))
+     `(el-search--with-additional-pcase-macros
+       (let ((byte-compile-debug t) ;make undefined pattern types raise an error
+             (warning-suppress-log-types '((bytecomp)))
+             (pcase--dontwarn-upats (cons '_ pcase--dontwarn-upats)))
+         (byte-compile (lambda (,expression)
+                         (pcase ,expression
+                           (,pattern ,@(or body (list t)))
+                           (_        nil)))))))))
 
 (defun el-search--match-p (matcher expression)
   (funcall matcher expression))
@@ -663,7 +664,9 @@ matches any of these expressions:
 
 (defun el-search--s (expr)
   (cond
-   ((symbolp expr) `(symbol ,(symbol-name expr)))
+   ((symbolp expr) `(or (symbol ,(symbol-name expr))
+                        (,'\` (,'quote    (,'\, (symbol ,(symbol-name expr)))))
+                        (,'\` (,'function (,'\, (symbol ,(symbol-name expr)))))))
    ((stringp expr) `(string ,expr))
    (t expr)))
 
@@ -677,8 +680,8 @@ with very brief input by using a specialized syntax.
 
 An LPAT can take the following forms:
 
-SYMBOL  Matches any symbol matched by SYMBOL's name interpreted as
-        a regexp
+SYMBOL  Matches any symbol S matched by SYMBOL's name interpreted
+        as a regexp.  Matches also 'S and #'S for any such S.
 STRING  Matches any string matched by STRING interpreted as a
         regexp
 _       Matches any list element
@@ -952,8 +955,13 @@ Hit any key to proceed."
   (barf-if-buffer-read-only)
   (el-search-search-and-replace-pattern from to mapping))
 
-(defun el-search--take-over-from-isearch ()
-  (prog1 isearch-string (isearch-exit)))
+(defun el-search--take-over-from-isearch (&optional goto-left-end)
+  (let ((other-end (and goto-left-end isearch-other-end))
+        (input isearch-string))
+    (isearch-exit)
+    (when (and other-end (< other-end (point)))
+      (goto-char other-end))
+    input))
 
 ;;;###autoload
 (defun el-search-search-from-isearch ()
@@ -968,7 +976,7 @@ Hit any key to proceed."
 ;;;###autoload
 (defun el-search-replace-from-isearch ()
   (interactive)
-  (let ((el-search--initial-mb-contents (concat "'" (el-search--take-over-from-isearch))))
+  (let ((el-search--initial-mb-contents (concat "'" (el-search--take-over-from-isearch t))))
     (call-interactively #'el-search-query-replace)))