| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | 
							- ;; Then I don't really thing you would have to be able to customize 
 
- ;; this, as there are only very few operations for which this makes 
 
- ;; sense:
 
- ;; A****  Archive
 
- ;; T**** Mark TODO
 
- ;; D**** Mark DONE
 
- ;; N**** Cycle TODO to the next state
 
- ;; Can't really think of anything else.
 
- ;; I prefer configurable, because then people can use numbers. This is
 
- ;; the idea that the editor may have limited UI. I'm using a j2me based
 
- ;; editor called JPE at the moment:
 
- ;; http://my-communicator.com/s80/software/applications.php?fldAuto=556&faq=2
 
- ;; But other people may be using something like this: 
 
- ;; http://www.getjar.com/products/3960/TextEditor
 
- ;; Or this which i'm currently playing with: 
 
- ;; http://www.bermin.net/index.html
 
- ;; As for other things, it depends on what you want emacs to be able to
 
- ;; do with an externally changed org mode file. For me this is about
 
- ;; using org mode in an intelligent way with my mobile phone/pda. I can
 
- ;; imagine wanting to write functions like:
 
- ;; * move this huge piece of text and tables down a level
 
- ;; <* move this huge piece of text and tables up a level
 
- ;; M* ask to recategorise this heading when i open org mode
 
- ;; +* remind me about this when i open org mode so i can brain dump on it
 
- ;;    in a real editor.
 
- ;; D* ask me to schedule this as an event when i open org mode.
 
- ;; O* open my mail client to send an email to this email address i just got
 
- ;; C* search bbdb for the contact details of the phone no on this line.
 
- ;; c* search ldap for the contact details of this name
 
- ;; B* open a web browser to this link i wanted to check out when i got back to my machine
 
- ;; R* remind me to look at TheseSearchTags headings when i get back to my machine.
 
- (defcustom org-fastup-action-alist
 
-   '((?A org-archive t)
 
-     (?T (org-todo 1) nil)
 
-     (?D (org-todo (length org-todo-keywords)) nil)
 
-     (?N org-todo nil)
 
-     (?< org-promote-subtree t)
 
-     (?> org-demote-subtree t)
 
-     (?M org-set-tags nil)
 
-     (?S org-schedule t))
 
-   "List of fastupdate actions.
 
- Each entry in this list is a list of 3 items:
 
- - A character representing the fastupdate action
 
- - A function or form to be executed, with cursor at beginning of headline
 
- - A flag indicating if execution of this action should normally be confirmed."
 
-   :group 'org-fastup
 
-   :type '(repeat
 
- 	  (list  :value (?a  nil t)
 
- 	   (character :tag "Prefix char")
 
- 	   (choice
 
- 	    (const :tag "Archive this subtree" org-archive)
 
- 	    (const :tag "Make TODO" (org-todo 1))
 
- 	    (const :tag "Mark DONE" (org-todo (length org-todo-keywords)))
 
- 	    (const :tag "Cycle TODO" org-todo)
 
- 	    (const :tag "Promote subtree" org-promote-subtree)
 
- 	    (const :tag "Demote subtree" org-demote-subtree)
 
- 	    (const :tag "Set Tags" org-set-tags)
 
- 	    (const :tag "Schedule" org-schedule)
 
- 	    (const :tag "Set Deadline" org-schedule)
 
- 	    (sexp))
 
- 	    (boolean :tag "Confirm"))))
 
- (defun org-fastup-check-buffer ()
 
-   "Check for and execute fastupdate actions.
 
- This first checks if there are any fastupdate actions in the buffer.
 
- If yes, the user is asked for a processing mode, with three possibilities
 
- with respect to confirming actions:
 
- Always    confirm each action before executing it
 
- Never     execute all actions without prior confirmation
 
- Maybe     get only confirmation for actions that have been configured
 
-           as requiring confirmation in `org-fastup-action-alist'.
 
- The command will then walk through the buffer, stop at each eaction
 
- and do the right thing there."
 
-   (interactive)
 
-   (show-all)  ; make everything visible
 
-   (let ((start (point-min))
 
- 	;; FIXME: should I limit the regexp to match existing actions?
 
- 	;; I think not, to catch typos
 
- 	(re "^\\([-a-zA-Z0-9!@#$%^&+?<>]\\)\\*+")
 
- 	s action confirm)
 
-     (if (not (save-excursion
 
- 	       (goto-char (point-min))
 
- 	       (re-search-forward re nil t)))
 
- 	(if (interactive-p) (message "No fastupdate actions in this buffer"))
 
-       (goto-char start)
 
-       (message "Fastupdate:  Confirm actions [A]lways [Maybe] [N]ever, or [Q]uit?")
 
-       (setq reaction (read-char-exclusive))
 
-       (cond
 
-        ((memq reaction '(?q ?Q)) (error "Abort"))
 
-        ((memq reaction '(?a ?A)) (setq cf 'always))
 
-        ((memq reaction '(?m ?M)) (setq cf 'maybe))
 
-        ((memq reaction '(?n ?N)) (setq cf 'never)))
 
-       (while (re-search-forward re nil t)
 
- 	(goto-char (setq start (match-beginning 0)))
 
- 	(setq s (match-string 1)
 
- 	      entry (assoc (string-to-char s) org-fastup-action-alist)
 
- 	      action (nth 1 entry)
 
- 	      confirm (nth 2 entry))
 
- 	(cond
 
- 	 ((null action)
 
- 	  (if (y-or-n-p "Unknown action.  Remove fastupdate character? ")
 
- 	      (delete-region start (1+ start))
 
- 	    (goto-char (1+ start))))
 
- 	 ((or (equal cf 'never)
 
- 	      (and (eq cf 'maybe) (not confirm))
 
- 	      (y-or-n-p (format "execute action [%s] " s)))
 
- 	  (delete-region start (1+ start))
 
- 	  ;; FIXME: wrap the following into condition-case and 
 
- 	  ;; handle any errors in some way.
 
- 	  (if (symbolp action) (funcall action) (eval action))
 
- 	  ;; FIXME: remove the sit-for
 
- 	  (sit-for 2))
 
- 	 (t
 
- 	  (if (y-or-n-p "Action denied. Remove fastupdate character? ")
 
- 	      ;; Remove the character, without action.
 
- 	      (delete-region start (1+ start))
 
- 	    ;; Just leave the character in and skip this location
 
- 	    (goto-char (1+ start)))))))))
 
 
  |