Function: symbol-before-point
symbol-before-point is a byte-compiled function defined in
completion.el.gz.
Signature
(symbol-before-point)
Documentation
Return a string of the symbol immediately before point.
Returns nil if there isn't one longer than completion-min-length.
Source Code
;; Defined in /usr/src/emacs/lisp/completion.el.gz
;; tests for symbol-under-point
;; `^' indicates cursor pos. where value is returned
;; simple-word-test
;; ^^^^^^^^^^^^^^^^ --> simple-word-test
;; _harder_word_test_
;; ^^^^^^^^^^^^^^^^^^ --> harder_word_test
;; .___.______.
;; --> nil
;; /foo/bar/quux.hello
;; ^^^^^^^^^^^^^^^^^^^ --> /foo/bar/quux.hello
;;
(defun symbol-before-point ()
"Return a string of the symbol immediately before point.
Returns nil if there isn't one longer than `completion-min-length'."
;; This is called when a word separator is typed so it must be FAST !
(with-syntax-table completion-syntax-table
;; Cursor is on following-char and after preceding-char
(cond ((= (setq cmpl-preceding-syntax (char-syntax (preceding-char))) ?_)
;; Number of chars to ignore at end.
(setq cmpl-symbol-end (point)
cmpl-symbol-start (scan-sexps cmpl-symbol-end -1))
;; Remove chars to ignore at the start.
(cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w)
(goto-char cmpl-symbol-start)
(forward-word-strictly 1)
(setq cmpl-symbol-start (point))
(goto-char cmpl-symbol-end)))
;; Return value if long enough.
(if (>= cmpl-symbol-end
(+ cmpl-symbol-start completion-min-length))
(buffer-substring-no-properties
cmpl-symbol-start cmpl-symbol-end)))
((= cmpl-preceding-syntax ?w)
;; chars to ignore at end
(let ((saved-point (point)))
(setq cmpl-symbol-start (scan-sexps saved-point -1))
;; take off chars. from end
(forward-word-strictly -1)
(setq cmpl-symbol-end (point))
;; remove chars to ignore at the start
(cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w)
(goto-char cmpl-symbol-start)
(forward-word-strictly 1)
(setq cmpl-symbol-start (point))))
;; Restore state.
(goto-char saved-point)
;; Return completion if the length is reasonable
(if (and (<= completion-min-length
(- cmpl-symbol-end cmpl-symbol-start))
(<= (- cmpl-symbol-end cmpl-symbol-start)
completion-max-length))
(buffer-substring-no-properties
cmpl-symbol-start cmpl-symbol-end)))))))