emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Orgmode] Re: [PATCH] org-at-property-p and related


From: Mikael Fornius
Subject: [Orgmode] Re: [PATCH] org-at-property-p and related
Date: Thu, 11 Mar 2010 13:52:53 +0100
User-agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1.92 (gnu/linux)

Sorry the attached patch is inverted! :-)

Try this.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 5aece42..e9d7065 100755
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,17 @@
+2010-03-06  Mikael Fornius  <address@hidden>
+
+       * org.el (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.
+
+2010-03-05  Mikael Fornius  <address@hidden>
+
+       * org.el (org-at-property-p): Check if we are inside a property
+       drawer not just any drawer.
+       (org-property-end-re): Spell check.
+
 2010-03-01  Carsten Dominik  <address@hidden>
 
        * org-list.el (org-toggle-checkbox): No errors when updating
diff --git a/lisp/org.el b/lisp/org.el
index fd906f0..ba0c739 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -12435,7 +12435,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.")
@@ -12512,13 +12512,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.
@@ -12949,7 +12952,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)
@@ -12957,18 +12961,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)))
@@ -12977,8 +12980,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)
@@ -15976,7 +15980,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]*\\)\\]")
-- 
Mikael Fornius

reply via email to

[Prev in Thread] Current Thread [Next in Thread]