mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-09-12 23:10:07 +00:00
Better detection of cursor position when editing properties
This commit is contained in:
parent
c6cfd3cfd3
commit
30e3503b7b
|
@ -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>
|
2010-03-11 Carsten Dominik <carsten.dominik@gmail.com>
|
||||||
|
|
||||||
* org-exp.el (org-export-attach-captions-and-attributes): Add the
|
* org-exp.el (org-export-attach-captions-and-attributes): Add the
|
||||||
|
|
37
lisp/org.el
37
lisp/org.el
|
@ -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.")
|
"Regular expression matching the first line of a property drawer.")
|
||||||
|
|
||||||
(defconst org-property-end-re "^[ \t]*:END:[ \t]*$"
|
(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]*$"
|
(defconst org-clock-drawer-start-re "^[ \t]*:CLOCK:[ \t]*$"
|
||||||
"Regular expression matching the first line of a property drawer.")
|
"Regular expression matching the first line of a property drawer.")
|
||||||
|
@ -12546,13 +12546,16 @@ allowed value."
|
||||||
(message "%s is now %s" prop val)))
|
(message "%s is now %s" prop val)))
|
||||||
|
|
||||||
(defun org-at-property-p ()
|
(defun org-at-property-p ()
|
||||||
"Is the cursor in a property line?"
|
"Is cursor inside a property drawer?"
|
||||||
;; 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.
|
|
||||||
(save-excursion
|
(save-excursion
|
||||||
(beginning-of-line 1)
|
(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)
|
(defun org-get-property-block (&optional beg end force)
|
||||||
"Return the (beg . end) range of the body of the property drawer.
|
"Return the (beg . end) range of the body of the property drawer.
|
||||||
|
@ -12983,7 +12986,8 @@ in the current file."
|
||||||
(interactive
|
(interactive
|
||||||
(let* ((completion-ignore-case t)
|
(let* ((completion-ignore-case t)
|
||||||
(keys (org-buffer-property-keys nil t 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)
|
(prop (if (member prop0 keys)
|
||||||
prop0
|
prop0
|
||||||
(or (cdr (assoc (downcase prop0)
|
(or (cdr (assoc (downcase prop0)
|
||||||
|
@ -12991,18 +12995,17 @@ in the current file."
|
||||||
keys)))
|
keys)))
|
||||||
prop0)))
|
prop0)))
|
||||||
(cur (org-entry-get nil prop))
|
(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))
|
(allowed (org-property-get-allowed-values nil prop 'table))
|
||||||
(existing (mapcar 'list (org-property-values prop)))
|
(existing (mapcar 'list (org-property-values prop)))
|
||||||
(val (if allowed
|
(val (if allowed
|
||||||
(org-completing-read "Value: " allowed nil
|
(org-completing-read prompt allowed nil
|
||||||
(not (get-text-property 0 'org-unrestricted
|
(not (get-text-property 0 'org-unrestricted
|
||||||
(caar allowed))))
|
(caar allowed))))
|
||||||
(let (org-completion-use-ido org-completion-use-iswitchb)
|
(let (org-completion-use-ido org-completion-use-iswitchb)
|
||||||
(org-completing-read
|
(org-completing-read prompt existing nil nil "" nil cur)))))
|
||||||
(concat "Value" (if (and cur (string-match "\\S-" cur))
|
|
||||||
(concat " [" cur "]") "")
|
|
||||||
": ")
|
|
||||||
existing nil nil "" nil cur)))))
|
|
||||||
(list prop (if (equal val "") cur val))))
|
(list prop (if (equal val "") cur val))))
|
||||||
(unless (equal (org-entry-get nil property) value)
|
(unless (equal (org-entry-get nil property) value)
|
||||||
(org-entry-put nil property value)))
|
(org-entry-put nil property value)))
|
||||||
|
@ -13011,8 +13014,9 @@ in the current file."
|
||||||
"In the current entry, delete PROPERTY."
|
"In the current entry, delete PROPERTY."
|
||||||
(interactive
|
(interactive
|
||||||
(let* ((completion-ignore-case t)
|
(let* ((completion-ignore-case t)
|
||||||
(prop (org-icompleting-read
|
(prop (or (progn (org-at-property-p) (org-match-string-no-properties 2))
|
||||||
"Property: " (org-entry-properties nil 'standard))))
|
(org-icompleting-read
|
||||||
|
"Property: " (org-entry-properties nil 'standard)))))
|
||||||
(list prop)))
|
(list prop)))
|
||||||
(message "Property %s %s" property
|
(message "Property %s %s" property
|
||||||
(if (org-entry-delete nil property)
|
(if (org-entry-delete nil property)
|
||||||
|
@ -16010,7 +16014,8 @@ This command does many different things, depending on context:
|
||||||
(fboundp org-finish-function))
|
(fboundp org-finish-function))
|
||||||
(funcall org-finish-function))
|
(funcall org-finish-function))
|
||||||
((run-hook-with-args-until-success 'org-ctrl-c-ctrl-c-hook))
|
((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))
|
(call-interactively 'org-property-action))
|
||||||
((org-on-target-p) (call-interactively 'org-update-radio-target-regexp))
|
((org-on-target-p) (call-interactively 'org-update-radio-target-regexp))
|
||||||
((and (org-in-regexp "\\[\\([0-9]*%\\|[0-9]*/[0-9]*\\)\\]")
|
((and (org-in-regexp "\\[\\([0-9]*%\\|[0-9]*/[0-9]*\\)\\]")
|
||||||
|
|
Loading…
Reference in a new issue