]> git.eshelyaron.com Git - emacs.git/commitdiff
(org-prepare-agenda-buffers): Use `invisible-OK' argument
authorCarsten Dominik <dominik@science.uva.nl>
Thu, 29 Jun 2006 10:37:08 +0000 (10:37 +0000)
committerCarsten Dominik <dominik@science.uva.nl>
Thu, 29 Jun 2006 10:37:08 +0000 (10:37 +0000)
for `org-end-of-subtree'.
(org-export-cleanup-toc-line): Renamed from
`org-html-cleanup-toc-line'.
(org-beginning-of-item): Fixed bug in regular expression for white
line.
(org-export-as-html): Enforce space after bullet in plain list
items.
(org-set-autofill-regexps): Require space after plain
list bullet for paragraph-start.
(org-ts-regexp3): New constant.
(org-at-timestamp-p): New optional argument ALSO-INACTIVE.
(org-timestamp-up-day, org-timestamp-down-day)
(org-timestamp-change): Work with inactive timestamps.
(org-ts-regexp1): Don't allow brackets in time stamps.

lisp/textmodes/org.el

index a1ff47de7de5700d0b0ff75c3dd944e108e03bec..58c02d9a899a2e0f4a963cb21c8aa9d27a11049d 100644 (file)
@@ -5,7 +5,7 @@
 ;; Author: Carsten Dominik <dominik at science dot uva dot nl>
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/
-;; Version: 4.40
+;; Version: 4.41
 ;;
 ;; This file is part of GNU Emacs.
 ;;
 ;;
 ;; Recent changes
 ;; --------------
+;; Version 4.41
+;;    - Shift-curser keys can modify inactive time stamps (inactive time
+;;      stamps are the ones in [...] brackets.
+;;    - Toggle all checkboxes in a region/below a headline.
+;;    - Bug fixes.
+;;
 ;; Version 4.40
 ;;    - Bug fixes.
 ;;
 
 ;;; Customization variables
 
-(defvar org-version "4.40"
+(defvar org-version "4.41"
   "The version number of the file org.el.")
 (defun org-version ()
   (interactive)
@@ -1905,6 +1911,11 @@ headline  Only export the headline, but skip the tree below it."
   :group 'org-export
   :type 'boolean)
 
+(defcustom org-export-remove-timestamps-from-toc t
+  "Nil means, remove timestamps from the table of contents entries."
+  :group 'org-export
+  :type 'boolean)
+
 (defcustom org-export-with-tags t
   "Nil means, do not export tags, just remove them from headlines."
   :group 'org-export-general
@@ -3075,10 +3086,12 @@ that will be added to PLIST.  Returns the string that was modified."
   "Regular expression for fast time stamp matching.")
 (defconst org-ts-regexp-both "[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}[^\r\n>]*?\\)[]>]"
   "Regular expression for fast time stamp matching.")
-(defconst org-ts-regexp1 "\\(\\([0-9]\\{4\\}\\)-\\([0-9]\\{2\\}\\)-\\([0-9]\\{2\\}\\)\\([^0-9>\r\n]*\\)\\(\\([0-9]\\{2\\}\\):\\([0-9]\\{2\\}\\)\\)?\\)"
+(defconst org-ts-regexp1 "\\(\\([0-9]\\{4\\}\\)-\\([0-9]\\{2\\}\\)-\\([0-9]\\{2\\}\\)\\([^]0-9>\r\n]*\\)\\(\\([0-9]\\{2\\}\\):\\([0-9]\\{2\\}\\)\\)?\\)"
   "Regular expression matching time strings for analysis.")
 (defconst org-ts-regexp2 (concat "<" org-ts-regexp1 ">")
   "Regular expression matching time stamps, with groups.")
+(defconst org-ts-regexp3 (concat "[[<]" org-ts-regexp1 "[]>]")
+  "Regular expression matching time stamps (also [..]), with groups.")
 (defconst org-tr-regexp (concat org-ts-regexp "--?-?" org-ts-regexp)
   "Regular expression matching a time stamp range.")
 (defconst org-tsr-regexp (concat org-ts-regexp "\\(--?-?"
@@ -4157,12 +4170,31 @@ If optional TXT is given, check this string instead of the current kill."
         (skip-chars-forward " \t")
         (looking-at "\\[[ X]\\]"))))
 
-(defun org-toggle-checkbox ()
+(defun org-toggle-checkbox (&optional arg)
   "Toggle the checkbox in the current line."
-  (interactive)
-  (save-excursion
-    (if (org-at-item-checkbox-p)
-       (replace-match (if (equal (match-string 0) "[ ]") "[X]" "[ ]") t t))))
+  (interactive "P")
+  (catch 'exit
+    (let (beg end status (firstnew 'unknown))
+      (cond
+       ((org-region-active-p)
+       (setq beg (region-beginning) end (region-end)))
+       ((org-on-heading-p)
+       (setq beg (point) end (save-excursion (outline-next-heading) (point))))
+       ((org-at-item-checkbox-p)
+       (save-excursion
+         (replace-match (if (equal (match-string 0) "[ ]") "[X]" "[ ]") t t))
+       (throw 'exit t))
+       (t (error "Not at a checkbox or heading, and no active region")))
+      (save-excursion
+       (goto-char beg)
+       (while (< (point) end)
+         (when (org-at-item-checkbox-p)
+           (setq status (equal (match-string 0) "[X]"))
+           (when (eq firstnew 'unknown)
+             (setq firstnew (not status)))
+           (replace-match 
+            (if (if arg (not status) firstnew) "[X]" "[ ]") t t))
+         (beginning-of-line 2))))))
 
 (defun org-get-indentation (&optional line)
   "Get the indentation of the current line, interpreting tabs.
@@ -4216,7 +4248,7 @@ If the cursor is not in an item, throw an error."
            (while t
              (beginning-of-line 0)
              (if (< (point) limit) (throw 'exit nil))
-             (unless (looking-at " \t]*$")
+             (unless (looking-at "[ \t]*$")
                (skip-chars-forward " \t")
                (setq ind1 (current-column))
                (if (< ind1 ind)
@@ -4575,7 +4607,7 @@ When TAG is non-nil, don't move trees, but mark them with the ARCHIVE tag."
     (save-excursion
       (goto-char begm)
       (while (re-search-forward re1 endm t)
-             beg (match-beginning 0)
+       (setq beg (match-beginning 0)
              end (save-excursion (org-end-of-subtree t) (point)))
        (goto-char beg)
        (if (re-search-forward re end t)
@@ -4588,10 +4620,9 @@ When TAG is non-nil, don't move trees, but mark them with the ARCHIVE tag."
                    (org-toggle-tag org-archive-tag 'on)
                  (org-archive-subtree))
                (setq cntarch (1+ cntarch)))
-           (goto-char end))))
+           (goto-char end)))))
     (message "%d trees archived" cntarch)))
 
-
 (defun org-cycle-hide-archived-subtrees (state)
   "Re-hide all archived subtrees after a visibility state change."
   (when (and (not org-cycle-open-archived-trees)
@@ -4658,6 +4689,7 @@ the children that do not contain any open TODO items."
 
 (defun org-prepare-agenda-buffers (files)
   "Create buffers for all agenda files, protect archived trees and comments."
+  (interactive)
   (let ((pa '(:org-archived t))
        (pc '(:org-comment t))
        (pall '(:org-archived t :org-comment t))
@@ -4674,12 +4706,12 @@ the children that do not contain any open TODO items."
            (goto-char (point-min))
            (while (re-search-forward rea nil t)
              (if (org-on-heading-p)
-                 (add-text-properties (point-at-bol) (org-end-of-subtree) pa))))
+                 (add-text-properties (point-at-bol) (org-end-of-subtree t) pa))))
          (goto-char (point-min))
          (setq re (concat "^\\*+ +" org-comment-string "\\>"))
          (while (re-search-forward re nil t)
            (add-text-properties
-            (match-beginning 0) (org-end-of-subtree) pc)))))))
+            (match-beginning 0) (org-end-of-subtree t) pc)))))))
 
 (defun org-agenda-skip ()
   "Throw to `:skip' in places that should be skipped."
@@ -5686,7 +5718,7 @@ With prefix ARG, change by that many units."
   "Increase the date in the time stamp by one day.
 With prefix ARG, change that many days."
   (interactive "p")
-  (if (and (not (org-at-timestamp-p))
+  (if (and (not (org-at-timestamp-p t))
           (org-on-heading-p))
       (org-todo 'up)
     (org-timestamp-change (prefix-numeric-value arg) 'day)))
@@ -5695,7 +5727,7 @@ With prefix ARG, change that many days."
   "Decrease the date in the time stamp by one day.
 With prefix ARG, change that many days."
   (interactive "p")
-  (if (and (not (org-at-timestamp-p))
+  (if (and (not (org-at-timestamp-p t))
           (org-on-heading-p))
       (org-todo 'down)
     (org-timestamp-change (- (prefix-numeric-value arg)) 'day)))
@@ -5705,14 +5737,14 @@ With prefix ARG, change that many days."
        (<= (match-beginning n) pos)
        (>= (match-end n) pos)))
 
-(defun org-at-timestamp-p ()
+(defun org-at-timestamp-p (&optional also-inactive)
   "Determine if the cursor is in or at a timestamp."
   (interactive)
-  (let* ((tsr org-ts-regexp2)
+  (let* ((tsr (if also-inactive org-ts-regexp3 org-ts-regexp2))
         (pos (point))
         (ans (or (looking-at tsr)
                  (save-excursion
-                   (skip-chars-backward "^<\n\r\t")
+                   (skip-chars-backward "^[<\n\r\t")
                    (if (> (point) 1) (backward-char 1))
                    (and (looking-at tsr)
                         (> (- (match-end 0) pos) -1))))))
@@ -5737,7 +5769,7 @@ in the timestamp determines what will be changed."
        org-ts-what
        (pos (point))
        ts time time0)
-    (if (not (org-at-timestamp-p))
+    (if (not (org-at-timestamp-p t))
        (error "Not at a timestamp"))
     (setq org-ts-what (or what org-ts-what))
     (setq fmt (if (<= (abs (- (cdr org-ts-lengths)
@@ -5745,6 +5777,8 @@ in the timestamp determines what will be changed."
                      1)
                  (cdr org-time-stamp-formats)
                (car org-time-stamp-formats)))
+    (if (= (char-after (match-beginning 0)) ?\[)
+       (setq fmt (concat "[" (substring fmt 1 -1) "]")))
     (setq ts (match-string 0))
     (replace-match "")
     (setq time0 (org-parse-time-string ts))
@@ -13819,7 +13853,7 @@ lang=\"%s\" xml:lang=\"%s\">
                                   level (org-tr-level level)
                                   txt (save-match-data
                                         (org-html-expand
-                                         (org-html-cleanup-toc-line
+                                         (org-export-cleanup-toc-line
                                           (match-string 3 line))))
                                   todo
                                   (or (and org-export-mark-todo-in-toc
@@ -14055,9 +14089,9 @@ lang=\"%s\" xml:lang=\"%s\">
            ;; Normal lines
            (when (string-match
                   (cond
-                   ((eq llt t) "^\\([ \t]*\\)\\(\\([-+*]\\)\\|\\([0-9]+[.)]\\) \\)?\\( *[^ \t\n\r]\\|[ \t]*$\\)")
-                   ((= llt ?.) "^\\([ \t]*\\)\\(\\([-+*]\\)\\|\\([0-9]+\\.\\) \\)?\\( *[^ \t\n\r]\\|[ \t]*$\\)")
-                   ((= llt ?\)) "^\\( \t]*\\)\\(\\([-+*]\\)\\|\\([0-9]+)\\) \\)?\\( *[^ \t\n\r]\\|[ \t]*$\\)")
+                   ((eq llt t) "^\\([ \t]*\\)\\(\\([-+*] \\)\\|\\([0-9]+[.)]\\) \\)?\\( *[^ \t\n\r]\\|[ \t]*$\\)")
+                   ((= llt ?.) "^\\([ \t]*\\)\\(\\([-+*] \\)\\|\\([0-9]+\\.\\) \\)?\\( *[^ \t\n\r]\\|[ \t]*$\\)")
+                   ((= llt ?\)) "^\\( \t]*\\)\\(\\([-+*] \\)\\|\\([0-9]+)\\) \\)?\\( *[^ \t\n\r]\\|[ \t]*$\\)")
                    (t (error "Invalid value of `org-plain-list-ordered-item-terminator'")))
                   line)
              (setq ind (org-get-string-indentation line)
@@ -14345,12 +14379,13 @@ But it has the disadvantage, that Org-mode's HTML conversions cannot be used."
       (setq s (replace-match "&gt;" t t s))))
   s)
 
-(defun org-html-cleanup-toc-line (s)
+(defun org-export-cleanup-toc-line (s)
   "Remove tags and time staps from lines going into the toc."
   (if (string-match " +:[a-zA-Z0-9_@:]+: *$" s)
       (setq s (replace-match "" t t s)))
-  (while (string-match org-maybe-keyword-time-regexp s)
-    (setq s (replace-match "" t t s)))
+  (when org-export-remove-timestamps-from-toc
+    (while (string-match org-maybe-keyword-time-regexp s)
+      (setq s (replace-match "" t t s))))
   s)
 
 (defun org-html-expand (string)
@@ -15219,6 +15254,7 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
 (define-key org-mode-map "\C-c\C-x\C-r" 'org-clock-report)
 (define-key org-mode-map "\C-c\C-x\C-u" 'org-dblock-update)
 (define-key org-mode-map "\C-c\C-x\C-l" 'org-preview-latex-fragment)
+(define-key org-mode-map "\C-c\C-x\C-b" 'org-toggle-checkbox)
 
 (when (featurep 'xemacs)
   (define-key org-mode-map 'button3   'popup-mode-menu))
@@ -15435,7 +15471,7 @@ Calls `org-timestamp-up' or `org-priority-up', depending on context.
 See the individual commands for more information."
   (interactive "P")
   (cond
-   ((org-at-timestamp-p) (call-interactively 'org-timestamp-up))
+   ((org-at-timestamp-p t) (call-interactively 'org-timestamp-up))
    ((org-on-heading-p) (call-interactively 'org-priority-up))
    ((org-at-item-p) (call-interactively 'org-previous-item))
    (t (call-interactively 'org-beginning-of-item) (beginning-of-line 1))))
@@ -15446,7 +15482,7 @@ Calls `org-timestamp-down' or `org-priority-down', depending on context.
 See the individual commands for more information."
   (interactive "P")
   (cond
-   ((org-at-timestamp-p) (call-interactively 'org-timestamp-down))
+   ((org-at-timestamp-p t) (call-interactively 'org-timestamp-down))
    ((org-on-heading-p) (call-interactively 'org-priority-down))
    (t (call-interactively 'org-next-item))))
 
@@ -15454,7 +15490,7 @@ See the individual commands for more information."
   "Next TODO keyword or timestamp one day later, depending on context."
   (interactive)
   (cond
-   ((org-at-timestamp-p) (call-interactively 'org-timestamp-up-day))
+   ((org-at-timestamp-p t) (call-interactively 'org-timestamp-up-day))
    ((org-on-heading-p) (org-call-with-arg 'org-todo 'right))
    (t (org-shiftcursor-error))))
 
@@ -15462,7 +15498,7 @@ See the individual commands for more information."
   "Previous TODO keyword or timestamp one day earlier, depending on context."
   (interactive)
   (cond
-   ((org-at-timestamp-p) (call-interactively 'org-timestamp-down-day))
+   ((org-at-timestamp-p t) (call-interactively 'org-timestamp-down-day))
    ((org-on-heading-p) (org-call-with-arg 'org-todo 'left))
    (t (org-shiftcursor-error))))
 
@@ -15986,7 +16022,7 @@ return nil."
   (set (make-local-variable 'paragraph-separate) "\f\\|\\*\\|[         ]*$\\|[ \t]*[:|]")
   ;; The paragraph starter includes hand-formatted lists.
   (set (make-local-variable 'paragraph-start)
-       "\f\\|[         ]*$\\|\\([*\f]+\\)\\|[ \t]*\\([-+*]\\|[0-9]+[.)][ \t]+\\)\\|[ \t]*[:|]")
+       "\f\\|[         ]*$\\|\\([*\f]+\\)\\|[ \t]*\\([-+*][ \t]+\\|[0-9]+[.)][ \t]+\\)\\|[ \t]*[:|]")
   ;; Inhibit auto-fill for headers, tables and fixed-width lines.
   ;; But only if the user has not turned off tables or fixed-width regions
   (set (make-local-variable 'auto-fill-inhibit-regexp)