Make `symbol-at-point' work in buffers with no symbols

* lisp/thingatpt.el (thing-at-point--end-of-symbol): New function
(bug#14234).
(symbol): Use it instead of `forward-symbol', because the latter
will move to the end of the buffer even if there is no symbol
there.  Instead error out like `forward-sexp' and friends.
This commit is contained in:
Lars Ingebrigtsen 2021-01-20 04:44:18 +01:00
parent 3bbec2eb2b
commit 40a5df8143
2 changed files with 22 additions and 0 deletions

View file

@ -218,6 +218,14 @@ The bounds of THING are determined by `bounds-of-thing-at-point'."
(put 'sexp 'beginning-op 'thing-at-point--beginning-of-sexp)
;; Symbols
(put 'symbol 'end-op 'thing-at-point--end-of-symbol)
(defun thing-at-point--end-of-symbol ()
"Move point to the end of the current symbol."
(re-search-forward "\\(\\sw\\|\\s_\\)+"))
;; Lists
(put 'list 'bounds-of-thing-at-point 'thing-at-point-bounds-of-list-at-point)

View file

@ -146,4 +146,18 @@ position to retrieve THING.")
(should (thing-at-point-looking-at "2abcd"))
(should (equal (match-data) m2)))))
(ert-deftest test-narrow-buffer-symbol ()
(with-temp-buffer
(insert "foo bar zot")
(goto-char 5)
(should (equal (symbol-at-point) 'bar)))
(with-temp-buffer
(insert "`[[`(")
(goto-char 2)
(should (equal (symbol-at-point) nil)))
(with-temp-buffer
(insert "aa `[[`(")
(goto-char 4)
(should (equal (symbol-at-point) nil))))
;;; thingatpt.el ends here