Function: org-thing-at-point

org-thing-at-point is a byte-compiled function defined in org-pcomplete.el.gz.

Signature

(org-thing-at-point)

Documentation

Examine the thing at point and let the caller know what it is.

The return value is a string naming the thing at point.

Source Code

;; Defined in /usr/src/emacs/lisp/org/org-pcomplete.el.gz
;;; Internal Functions

(defun org-thing-at-point ()
  "Examine the thing at point and let the caller know what it is.
The return value is a string naming the thing at point."
  (let ((line-to-here (org-current-line-string t))
	(case-fold-search t))
    (cond
     ;; Parameters on a clock table opening line.
     ((org-match-line "[ \t]*#\\+BEGIN: clocktable[ \t]")
      (cons "block-option" "clocktable"))
     ;; Flags and parameters on a source block opening line.
     ((org-match-line "[ \t]*#\\+BEGIN_SRC[ \t]")
      (cons "block-option" "src"))
     ;; Value for a known keyword.
     ((org-match-line "[ \t]*#\\+\\(\\S-+\\):")
      (cons "file-option" (match-string-no-properties 1)))
     ;; Keyword name.
     ((and (org-match-line "[ \t]*#\\+[a-zA-Z_]*$")
	   (looking-at-p "[ \t]*$"))
      (cons "file-option" nil))
     ;; Link abbreviation.
     ((save-excursion
	(skip-chars-backward "-A-Za-z0-9_")
	(and (eq ?\[ (char-before))
	     (eq ?\[ (char-before (1- (point))))))
      (cons "link" nil))
     ;; Entities.  Some of them accept numbers, but only at their end.
     ;; So, we first skip numbers, then letters.
     ((eq ?\\ (save-excursion
		(skip-chars-backward "0-9")
		(skip-chars-backward "a-zA-Z")
		(char-before)))
      (cons "tex" nil))
     ;; Tags on a headline.
     ((and (org-match-line
	    (format "\\*+ \\(?:.+? \\)?\\(:\\)\\(\\(?::\\|%s\\)+\\)?[ \t]*$"
		    org-tag-re))
	   (or (org-point-in-group (point) 2)
	       (= (point) (match-end 1))))
      (cons "tag" nil))
     ;; TODO keywords on an empty headline.
     ((and (string-match "^\\*+ +\\S-*$" line-to-here)
	   (looking-at-p "[ \t]*$"))
      (cons "todo" nil))
     ;; Heading after a star for search strings or links.
     ((save-excursion
	(skip-chars-backward "^*" (line-beginning-position))
	(and (eq ?* (char-before))
	     (eq (char-before (1- (point))) '?\[)
	     (eq (char-before (- (point) 2)) '?\[)))
      (cons "searchhead" nil))
     ;; Property or drawer name, depending on point.  If point is at
     ;; a valid location for a node property, offer completion on all
     ;; node properties in the buffer. Otherwise, offer completion on
     ;; all drawer names, including "PROPERTIES".
     ((and (string-match "^[ \t]*:\\S-*$" line-to-here)
	   (looking-at-p "[ \t]*$"))
      (let ((origin (line-beginning-position)))
	(if (org-before-first-heading-p) (cons "drawer" nil)
	  (save-excursion
	    (org-end-of-meta-data)
	    (if (or (= origin (point))
		    (not (org-match-line "[ \t]*:PROPERTIES:[ \t]*$")))
		(cons "drawer" nil)
	      (while (org-match-line org-property-re)
		(forward-line))
	      (if (= origin (point)) (cons "prop" nil)
		(cons "drawer" nil)))))))
     (t nil))))