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)))))))