X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/68fe8117585c06b3eb53248b95c47c4700193a0b..21516b4b7114e8c5dadf4747066e72eb1e9960d6:/packages/el-search/el-search.el diff --git a/packages/el-search/el-search.el b/packages/el-search/el-search.el index 00b1b15c2..dea74b280 100644 --- a/packages/el-search/el-search.el +++ b/packages/el-search/el-search.el @@ -253,9 +253,28 @@ The default value is `exp'." (t (:background "DarkSlateGray1"))) "Face for highlighting the other matches.") +(defcustom el-search-smart-case-fold-search t + "Whether to use smart case folding in pattern matching. +When an \"el-search\" pattern involves regexp matching (like for +\"string\" or \"source\") and this option is non-nil, +case-fold-search will be temporarily bound to t if the according +regexp contains any upper case letter, and nil else. This is +done independently for every single matching operation. + +If nil, the value of `case-fold-search' is decisive." + :type 'boolean) + ;;;; Helpers +(defun el-search--smart-string-match-p (regexp string) + "`string-match-p' taking `el-search-smart-case-fold-search' into account." + (let ((case-fold-search (if el-search-smart-case-fold-search + (not (let ((case-fold-search nil)) + (string-match-p "[[:upper:]]" regexp))) + case-fold-search))) + (string-match-p regexp string))) + (defun el-search--print (expr) (let ((print-quoted t) (print-length nil) @@ -308,9 +327,10 @@ The default value is `exp'." (or (scan-sexps (point) 1) (point-max))) (defun el-search--ensure-sexp-start () - "Move point to the beginning of the next sexp if necessary. -Don't move if already at beginning of a sexp. -Point must not be inside a string or comment." + "Move point to the next sexp beginning position. +Don't move if already at beginning of a sexp. Point must not be +inside a string or comment. `read' the expression at that point +and return it." (let ((not-done t) res) (while not-done (let ((stop-here nil) @@ -569,7 +589,7 @@ matches the list (1 2 3 4 5 6 7 8 9) and binds `x' to (4 5 6)." `(and (pred stringp) (pred (lambda (,string) (cl-every - (lambda (,regexp) (string-match-p ,regexp ,string)) + (lambda (,regexp) (el-search--smart-string-match-p ,regexp ,string)) (list ,@regexps))))))) (el-search-defpattern symbol (&rest regexps) @@ -614,7 +634,7 @@ of any kind matched by all PATTERNs are also matched. (defun el-search--match-symbol-file (regexp symbol) (when-let ((symbol-file (and (symbolp symbol) (symbol-file symbol)))) - (string-match-p + (el-search--smart-string-match-p (if (symbolp regexp) (concat "\\`" (symbol-name regexp) "\\'") regexp) (file-name-sans-extension (file-name-nondirectory symbol-file)))))