CaseFoldSearch

Searching case-sensitivity is governed by the variable case-fold-search: nil means case-sensitive; non-nil means case-insensitive (the case is “folded”). case-fold-search also affects how lots of programs work. For example MailSplitting in Gnus.

The default behaviour is to make searches case insensitive, unless you are searching for a mixed case word.

See also: IncrementalSearch

Tips and Enhancements

Toggle Case-Sensitivity on the Fly in Isearch

Command ‘isearch-toggle-case-fold’ toggles case-folding in searching on and off. The tip is to bind this command to ‘C-s C-c’, so you can toggle on the fly, while searching.

This code does that:

  (add-hook 'isearch-mode-hook
            (function
             (lambda ()
               (define-key isearch-mode-map "\C-h" 'isearch-mode-help)
               (define-key isearch-mode-map "\C-t" 'isearch-toggle-regexp)
               (define-key isearch-mode-map "\C-c" 'isearch-toggle-case-fold)
               (define-key isearch-mode-map "\C-j" 'isearch-edit-string))))

Actually, it also adds some other ‘C-s’ bindings:

Modeline Indicator

To indicate the current state of case-fold-search in your ModeLine, add the following to your ~/.emacs:

 From: KalleOlaviNiemitalo
 Subject: Re: case-fold-search indicator
 Newsgroups: gnu.emacs.help
 Date: 21 Jun 2001 18:06:42 +0300
 (add-to-list 'minor-mode-alist '(case-fold-search " CFS"))

This then displays CFS when the searching is case-insensitive, otherwise it shows nothing.

Using Regular Expressions

In Lisp programs, be sure to set the case-fold-search variable to nil with regular expressions that desire to be case-sensitive. To do this in your Lisp program set the case-fold-search variable to false (nil) temporarily with the let syntax:

 (define mytext-find-heading ()
  "Finds text heading by finding a line whose letters are uppercase."
  (interactive)
  (message "Finding text headings ...")
  (push-mark)
  (let ((case-fold-search nil)) ;; case-sensitive!!
    (if (re-search-forward
	 "^[^a-z\n]+$" nil 'move)
	(message "Found text heading.")
      (message "End of buffer"))))

[new] The term “case-fold” might appear strange to an emacs newbie. Is there any reason, “historical” or other, for it? – PhilHudson

I’ve got the same question as PhilHudson. More precisely I’ve trapped when trying to find capitalize word in a text with regular expression. The regexp-builder as well as the re-search-forward was actually returning every single word, capitalized or not. Until I dive into the source and understood. Once known it’s ok, but IMHO it must not be the default behavior? Well … hard to change the behavior once it has been the case so much time. Too much code out there expect it to be … a feature now.


CategoryRegexp