Better detection of cursor position when editing properties

This commit is contained in:
Carsten Dominik 2010-03-11 14:10:21 +01:00
parent c6cfd3cfd3
commit 30e3503b7b
2 changed files with 32 additions and 16 deletions

View File

@ -1,3 +1,14 @@
2010-03-11 Mikael Fornius <mfo@abc.se>
* org.el (org-at-property-p): Check if we are inside a property
drawer not just any drawer.
(org-set-property, org-delete-property): When cursor is on a
property key value pair do not prompt for property name instead
use name at cursor.
(org-ctrl-c-ctrl-c): Still do org-property-action when cursor is
on the first line of a property drawer.
(org-property-end-re): Spell check.
2010-03-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-export-attach-captions-and-attributes): Add the

View File

@ -12469,7 +12469,7 @@ Being in this list makes sure that they are offered for completion.")
"Regular expression matching the first line of a property drawer.")
(defconst org-property-end-re "^[ \t]*:END:[ \t]*$"
"Regular expression matching the first line of a property drawer.")
"Regular expression matching the last line of a property drawer.")
(defconst org-clock-drawer-start-re "^[ \t]*:CLOCK:[ \t]*$"
"Regular expression matching the first line of a property drawer.")
@ -12546,13 +12546,16 @@ allowed value."
(message "%s is now %s" prop val)))
(defun org-at-property-p ()
"Is the cursor in a property line?"
;; FIXME: Does not check if we are actually in the drawer.
;; FIXME: also returns true on any drawers.....
;; This is used by C-c C-c for property action.
"Is cursor inside a property drawer?"
(save-excursion
(beginning-of-line 1)
(looking-at (org-re "^[ \t]*\\(:\\([[:alpha:]][[:alnum:]_-]*\\):\\)[ \t]*\\(.*\\)"))))
(when (looking-at (org-re "^[ \t]*\\(:\\([[:alpha:]][[:alnum:]_-]*\\):\\)[ \t]*\\(.*\\)"))
(let ((match (match-data)) ;; Keep match-data for use by calling
(p (point)) ;; procedures.
(range (unless (org-before-first-heading-p)
(org-get-property-block))))
(prog1 (and range (<= (car range) p) (< p (cdr range)))
(set-match-data match))))))
(defun org-get-property-block (&optional beg end force)
"Return the (beg . end) range of the body of the property drawer.
@ -12983,7 +12986,8 @@ in the current file."
(interactive
(let* ((completion-ignore-case t)
(keys (org-buffer-property-keys nil t t))
(prop0 (org-icompleting-read "Property: " (mapcar 'list keys)))
(prop0 (or (progn (org-at-property-p) (org-match-string-no-properties 2))
(org-icompleting-read "Property: " (mapcar 'list keys))))
(prop (if (member prop0 keys)
prop0
(or (cdr (assoc (downcase prop0)
@ -12991,18 +12995,17 @@ in the current file."
keys)))
prop0)))
(cur (org-entry-get nil prop))
(prompt (concat prop " value"
(if (and cur (string-match "\\S-" cur))
(concat " [" cur "]") "") ": "))
(allowed (org-property-get-allowed-values nil prop 'table))
(existing (mapcar 'list (org-property-values prop)))
(val (if allowed
(org-completing-read "Value: " allowed nil
(org-completing-read prompt allowed nil
(not (get-text-property 0 'org-unrestricted
(caar allowed))))
(let (org-completion-use-ido org-completion-use-iswitchb)
(org-completing-read
(concat "Value" (if (and cur (string-match "\\S-" cur))
(concat " [" cur "]") "")
": ")
existing nil nil "" nil cur)))))
(org-completing-read prompt existing nil nil "" nil cur)))))
(list prop (if (equal val "") cur val))))
(unless (equal (org-entry-get nil property) value)
(org-entry-put nil property value)))
@ -13011,8 +13014,9 @@ in the current file."
"In the current entry, delete PROPERTY."
(interactive
(let* ((completion-ignore-case t)
(prop (org-icompleting-read
"Property: " (org-entry-properties nil 'standard))))
(prop (or (progn (org-at-property-p) (org-match-string-no-properties 2))
(org-icompleting-read
"Property: " (org-entry-properties nil 'standard)))))
(list prop)))
(message "Property %s %s" property
(if (org-entry-delete nil property)
@ -16010,7 +16014,8 @@ This command does many different things, depending on context:
(fboundp org-finish-function))
(funcall org-finish-function))
((run-hook-with-args-until-success 'org-ctrl-c-ctrl-c-hook))
((org-at-property-p)
((or (looking-at (org-re org-property-start-re))
(org-at-property-p))
(call-interactively 'org-property-action))
((org-on-target-p) (call-interactively 'org-update-radio-target-regexp))
((and (org-in-regexp "\\[\\([0-9]*%\\|[0-9]*/[0-9]*\\)\\]")