From 24e7c62b84cac53326f00954b45e97896f96ae5e Mon Sep 17 00:00:00 2001 From: Carsten Dominik Date: Tue, 1 Sep 2009 16:30:33 +0200 Subject: [PATCH] Some small fixes --- doc/org.texi | 18 +++++++++++------- lisp/ChangeLog | 19 +++++++++++++++++++ lisp/org-agenda.el | 1 + lisp/org-compat.el | 22 ++++++++++++++++++++++ lisp/org-exp.el | 6 ++++-- lisp/org-html.el | 2 +- lisp/org.el | 44 +++++++++++++++++++++++++++++++++++++++++--- 7 files changed, 99 insertions(+), 13 deletions(-) diff --git a/doc/org.texi b/doc/org.texi index 73a24ee3f..2662f28b4 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -3822,7 +3822,8 @@ with detailed subtasks on the tree@footnote{To keep subtasks out of the global TODO list, see the @code{org-agenda-todo-list-sublevels}.}. To keep the overview over the fraction of subtasks that are already completed, insert either @samp{[/]} or @samp{[%]} anywhere in the headline. These cookies will -be updates each time the todo status of a child changes. For example: +be updates each time the todo status of a child changes, or when pressing +@kbd{C-c C-c} on the cookie. For example: @example * Organize Party [33%] @@ -3970,12 +3971,13 @@ for better visibility, customize the variable @code{org-track-ordered-property-with-tag}. @kindex C-c # @item C-c # -Update the checkbox statistics in the current outline entry. When -called with a @kbd{C-u} prefix, update the entire file. Checkbox -statistic cookies are updated automatically if you toggle checkboxes -with @kbd{C-c C-c} and make new ones with @kbd{M-S-@key{RET}}. If you -delete boxes or add/change them by hand, use this command to get things -back into sync. Or simply toggle any checkbox twice with @kbd{C-c C-c}. +Update the statistics cookie in the current outline entry. When called with +a @kbd{C-u} prefix, update the entire file. Checkbox statistic cookies are +updated automatically if you toggle checkboxes with @kbd{C-c C-c} and make +new ones with @kbd{M-S-@key{RET}}. TODO statistics cookies update when +changing TODO states. If you delete boxes/entries or add/change them by +hand, use this command to get things back into sync. Or simply toggle any +entry twice (checkboxes with @kbd{C-c C-c}). @end table @node Tags, Properties and Columns, TODO Items, Top @@ -10335,6 +10337,8 @@ drawer, offer property commands. If the cursor is at a footnote reference, go to the corresponding definition, and vice versa. @item +If the cursor is on a statistics cookie, update it. +@item If the cursor is in a plain list item with a checkbox, toggle the status of the checkbox. @item diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 82ffb272b..ee5aacac7 100755 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,22 @@ +2009-09-02 Carsten Dominik + + * org-agenda.el (org-agenda-quit): When the agenda window is + dedicated, remove other windows before exiting, so that the frame + really will be killed. + + * org-exp.el (org-export-handle-include-files): Reset START and + END for each loop cycle. + +2009-09-01 Carsten Dominik + + * org.el (org-eval-in-calendar): Use + `org-select-frame-set-input-focus'. + + * org-compat.el (org-select-frame-set-input-focus): New function. + + * org.el (org-update-statistics-cookies): New function. + (org-mode-map): Bind `C-c #' to `org-update-statistics-cookies'. + 2009-08-31 Carsten Dominik * org-src.el (org-edit-fixed-width-region): Set org-src-mode only diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 90bcea6d0..d314775db 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -4800,6 +4800,7 @@ If ERROR is non-nil, throw an error, otherwise just return nil." (interactive) (if org-agenda-columns-active (org-columns-quit) + (if (window-dedicated-p) (delete-other-windows)) (let ((buf (current-buffer))) (and (not (eq org-agenda-window-setup 'current-window)) (not (one-window-p)) diff --git a/lisp/org-compat.el b/lisp/org-compat.el index 7693379eb..8f9304c3c 100644 --- a/lisp/org-compat.el +++ b/lisp/org-compat.el @@ -332,6 +332,28 @@ that can be added." string) (apply 'kill-new string args)) +(defun org-select-frame-set-input-focus (frame) + "Select FRAME, raise it, and set input focus, if possible." + (cond ((featurep 'xemacs) + (if (fboundp 'select-frame-set-input-focus) + (select-frame-set-input-focus frame) + (raise-frame frame) + (select-frame frame) + (focus-frame frame))) + ;; `select-frame-set-input-focus' defined in Emacs 21 will not + ;; set the input focus. + ((>= emacs-major-version 22) + (select-frame-set-input-focus frame)) + (t + (raise-frame frame) + (select-frame frame) + (cond ((memq window-system '(x ns mac)) + (x-focus-frame frame)) + ((eq window-system 'w32) + (w32-focus-frame frame))) + (when focus-follows-mouse + (set-mouse-position frame (1- (frame-width frame)) 0))))) + (provide 'org-compat) ;; arch-tag: a0a0579f-e68c-4bdf-9e55-93768b846bbe diff --git a/lisp/org-exp.el b/lisp/org-exp.el index c36cfa667..91b0ab5f9 100644 --- a/lisp/org-exp.el +++ b/lisp/org-exp.el @@ -2131,7 +2131,8 @@ TYPE must be a string, any of: markup (org-symname-or-string (pop params)) lang (and (member markup '("src" "SRC")) (org-symname-or-string (pop params))) - switches (mapconcat '(lambda (x) (format "%s" x)) params " ")) + switches (mapconcat '(lambda (x) (format "%s" x)) params " ") + start nil end nil) (delete-region (match-beginning 0) (match-end 0)) (if (or (not file) (not (file-exists-p file)) @@ -2146,7 +2147,8 @@ TYPE must be a string, any of: (setq start (format "#+begin_%s %s\n" markup switches) end (format "#+end_%s" markup)))) (insert (or start "")) - (insert (org-get-file-contents (expand-file-name file) prefix prefix1 markup)) + (insert (org-get-file-contents (expand-file-name file) + prefix prefix1 markup)) (or (bolp) (newline)) (insert (or end "")))))) diff --git a/lisp/org-html.el b/lisp/org-html.el index 197e1868c..096877611 100644 --- a/lisp/org-html.el +++ b/lisp/org-html.el @@ -1642,7 +1642,7 @@ lang=\"%s\" xml:lang=\"%s\"> (push (mapconcat (lambda (x) (setq gr (pop org-table-colgroup-info)) - (format "%s%s" + (format "%s%s" (if (memq gr '(:start :startend)) (prog1 (if colgropen "\n" "") diff --git a/lisp/org.el b/lisp/org.el index c851dc199..3a6152d6f 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -9655,6 +9655,39 @@ changes because there are uncheckd boxes in this entry." (throw 'dont-block nil))))) t)) ; do not block +(defun org-update-statistics-cookies (all) + "Update the statistics cookie, either from TODO or from checkboxes. +This should be called with the cursor in a line with a statistics cookie." + (interactive "P") + (if all + (progn + (org-update-checkbox-count 'all) + (org-map-entries 'org-update-parent-todo-statistics)) + (if (not (org-on-heading-p)) + (org-update-checkbox-count) + (let ((pos (move-marker (make-marker) (point))) + end l1 l2) + (ignore-errors (org-back-to-heading t)) + (if (not (org-on-heading-p)) + (org-update-checkbox-count) + (setq l1 (org-outline-level)) + (setq end (save-excursion + (outline-next-heading) + (if (org-on-heading-p) (setq l2 (org-outline-level))) + (point))) + (if (and (save-excursion (re-search-forward + "^[ \t]*[-+*] \\[[- X]\\]" end t)) + (not (save-excursion (re-search-forward + ":COOKIE_DATA:.*\\" end t)))) + (org-update-checkbox-count) + (if (and l2 (> l2 l1)) + (progn + (goto-char end) + (org-update-parent-todo-statistics)) + (error "No data for statistics cookie")))) + (goto-char pos) + (move-marker pos nil))))) + (defvar org-entry-property-inherited-from) ;; defined below (defun org-update-parent-todo-statistics () "Update any statistics cookie in the parent of the current headline. @@ -12766,7 +12799,7 @@ Also, store the cursor date in variable org-ans2." (setq org-ans2 (format-time-string "%Y-%m-%d" time)))) (org-move-overlay org-date-ovl (1- (point)) (1+ (point)) (current-buffer)) (select-window sw) - (select-frame-set-input-focus sf))) + (org-select-frame-set-input-focus sf))) (defun org-calendar-select () "Return to `org-read-date' with the date currently selected. @@ -14287,7 +14320,7 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]." (org-defkey org-mode-map "\C-c^" 'org-sort) (org-defkey org-mode-map "\C-c\C-c" 'org-ctrl-c-ctrl-c) (org-defkey org-mode-map "\C-c\C-k" 'org-kill-note-or-show-branches) -(org-defkey org-mode-map "\C-c#" 'org-update-checkbox-count) +(org-defkey org-mode-map "\C-c#" 'org-update-statistics-cookies) (org-defkey org-mode-map "\C-m" 'org-return) (org-defkey org-mode-map "\C-j" 'org-return-indent) (org-defkey org-mode-map "\C-c?" 'org-table-field-info) @@ -14897,6 +14930,8 @@ This command does many different things, depending on context: - If a function in `org-ctrl-c-ctrl-c-hook' recognizes this location, this is what we do. +- If the cursor is on a statistics cookie, update it. + - If the cursor is in a headline, prompt for tags and insert them into the current line, aligned to `org-tags-column'. When called with prefix arg, realign all tags in the current buffer. @@ -14948,6 +14983,9 @@ This command does many different things, depending on context: ((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]*\\)\\]") + (or (org-on-heading-p) (org-at-item-p))) + (call-interactively 'org-update-statistics-cookies)) ((org-on-heading-p) (call-interactively 'org-set-tags)) ((org-at-table.el-p) (require 'table) @@ -15493,7 +15531,7 @@ such private information before sending the email.") list)) nil nil "Remember to cover the basics, that is, what you expected to happen and -what in fact did happen. You don't know hoe to make a good report? See +what in fact did happen. You don't know how to make a good report? See http://orgmode.org/manual/Feedback.html#Feedback