8

I want to know how do you use Emacs lisp to check the content of the current buffer, specially to know if certain string exists within the current buffer.

2 Answers 2

10

I think the easiest approach would be

(save-excursion
    (goto-char (point-min))
    (search-forward string nil t))

This will return non-nil if the given string is in the current buffer.

1
  • 3
    And in most cases, you'll want to use re-search-forward, for the added flexibility of specifying a regexp rather than a mere substring.
    – Stefan
    Mar 19, 2016 at 22:52
0

You can also do this on a way which probably looks familiar from other languages using s.el:

(with-current-buffer "some_buffer"
      (s-contains? "some string"
            (buffer-substring-no-properties (point-min) (point-max))))
3
  • 6
    Emacs is very good at acting directly on buffer contents. Copying portions of the buffer (let alone the entire contents, as in this case) in order to perform string-based operations is generally not the best approach.
    – phils
    Mar 19, 2016 at 22:14
  • 1
    I second @phils's recommendation, pointing out that it's very inefficient, especially in this case, since it copies the whole buffer's content.
    – Stefan
    Mar 19, 2016 at 22:50
  • Yes, you're right. This is not the best approach, I recommend accepted answer over this one. My idea was to point to s.el. @phils
    – yujaiyu
    Mar 20, 2016 at 0:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.