Function: org-entry-put

org-entry-put is a byte-compiled function defined in org.el.gz.

Signature

(org-entry-put POM PROPERTY VALUE)

Documentation

Set PROPERTY to VALUE for entry at point-or-marker POM.

If the value is nil, it is converted to the empty string. If it is not a string, an error is raised. Also raise an error on invalid property names.

PROPERTY can be any regular property (see org-special-properties). It can also be "TODO",
"PRIORITY", "SCHEDULED" and "DEADLINE".

For the last two properties, VALUE may have any of the special values "earlier" and "later". The function then increases or decreases scheduled or deadline date by one day.

Source Code

;; Defined in /usr/src/emacs/lisp/org/org.el.gz
(defun org-entry-put (pom property value)
  "Set PROPERTY to VALUE for entry at point-or-marker POM.

If the value is nil, it is converted to the empty string.  If it
is not a string, an error is raised.  Also raise an error on
invalid property names.

PROPERTY can be any regular property (see
`org-special-properties').  It can also be \"TODO\",
\"PRIORITY\", \"SCHEDULED\" and \"DEADLINE\".

For the last two properties, VALUE may have any of the special
values \"earlier\" and \"later\".  The function then increases or
decreases scheduled or deadline date by one day."
  (cond ((null value) (setq value ""))
	((not (stringp value)) (error "Properties values should be strings"))
	((not (org--valid-property-p property))
	 (user-error "Invalid property name: \"%s\"" property)))
  (org-no-read-only
   (org-with-point-at pom
     (if (or (not (featurep 'org-inlinetask)) (org-inlinetask-in-task-p))
	 (org-back-to-heading-or-point-min t)
       (org-with-limited-levels (org-back-to-heading-or-point-min t)))
     (let ((beg (point)))
       (cond
        ((equal property "TODO")
	 (cond ((not (org-string-nw-p value)) (setq value 'none))
	       ((not (member value org-todo-keywords-1))
                (user-error "\"%s\" is not a valid TODO state" value)))
	 (org-todo value)
	 (org-align-tags))
        ((equal property "PRIORITY")
	 (org-priority (if (org-string-nw-p value) (string-to-char value) ?\s))
	 (org-align-tags))
        ((equal property "SCHEDULED")
	 (forward-line)
	 (if (and (looking-at-p org-planning-line-re)
		  (re-search-forward
		   org-scheduled-time-regexp (line-end-position) t))
	     (cond ((string= value "earlier") (org-timestamp-change -1 'day))
		   ((string= value "later") (org-timestamp-change 1 'day))
		   ((string= value "") (org-schedule '(4)))
		   (t (org-schedule nil value)))
	   (if (member value '("earlier" "later" ""))
	       (call-interactively #'org-schedule)
	     (org-schedule nil value))))
        ((equal property "DEADLINE")
	 (forward-line)
	 (if (and (looking-at-p org-planning-line-re)
		  (re-search-forward
		   org-deadline-time-regexp (line-end-position) t))
	     (cond ((string= value "earlier") (org-timestamp-change -1 'day))
		   ((string= value "later") (org-timestamp-change 1 'day))
		   ((string= value "") (org-deadline '(4)))
		   (t (org-deadline nil value)))
	   (if (member value '("earlier" "later" ""))
	       (call-interactively #'org-deadline)
	     (org-deadline nil value))))
        ((member property org-special-properties)
	 (error "The %s property cannot be set with `org-entry-put'" property))
        (t
         (org-fold-core-ignore-modifications
	   (let* ((range (org-get-property-block beg 'force))
                  (end (cdr range))
                  (case-fold-search t))
	     (goto-char (car range))
	     (if (re-search-forward (org-re-property property nil t) end t)
                 (progn (delete-region (match-beginning 0) (match-end 0))
                        (goto-char (match-beginning 0)))
	       (goto-char end)
	       (insert-and-inherit "\n")
	       (backward-char))
	     (insert-and-inherit ":" property ":")
	     (when value (insert-and-inherit " " value))
	     (org-indent-line))))))
     (run-hook-with-args 'org-property-changed-functions property value))))