Browse Source

Agenda: New submode to show entry text inline with the agenda entries.

The key access it `E'.
Carsten Dominik 15 years ago
parent
commit
632d7813ec
5 changed files with 143 additions and 76 deletions
  1. 6 0
      doc/ChangeLog
  2. 30 19
      doc/org.texi
  3. 3 3
      doc/orgcard.tex
  4. 18 0
      lisp/ChangeLog
  5. 86 54
      lisp/org-agenda.el

+ 6 - 0
doc/ChangeLog

@@ -1,3 +1,9 @@
+2009-08-27  Carsten Dominik  <carsten.dominik@gmail.com>
+
+	* orgcard.tex: DOcument the `E' key in the agenda.
+
+	* org.texi (Agenda commands): Document entry text mode.
+
 2009-08-18  Carsten Dominik  <carsten.dominik@gmail.com>
 
 	* org.texi (Agenda commands): Improve documentation of the keys to

+ 30 - 19
doc/org.texi

@@ -6957,6 +6957,25 @@ argument as well.  For example, @kbd{200712 w} will jump to week 12 in
 2007.  If such a year specification has only one or two digits, it will
 be mapped to the interval 1938-2037.
 @c
+@kindex @key{right}
+@item @key{right}
+@vindex org-agenda-ndays
+Display the following @code{org-agenda-ndays} days.  For example, if
+the display covers a week, switch to the following week.  With prefix
+arg, go forward that many times @code{org-agenda-ndays} days.
+@c
+@kindex @key{left}
+@item @key{left}
+Display the previous dates.
+@c
+@kindex .
+@item .
+Go to today.
+@c
+@kindex j
+@item j
+Prompt for a date and go there.
+@c
 @kindex D
 @item D
 Toggle the inclusion of diary entries.  See @ref{Weekly/daily agenda}.
@@ -6999,6 +7018,17 @@ covered by the current agenda view.  The initial setting for this mode in new
 agenda buffers can be set with the variable
 @code{org-agenda-start-with-clockreport-mode}.
 @c
+@kindex v E
+@kindex E
+@item v E @ @r{or short} @ E
+@vindex org-agenda-start-with-entry-text-mode
+@vindex org-agenda-entry-text-maxlines
+Toggle entry text mode.  In entry text mode, a number of lines from the Org
+outline node referenced by an agenda line will be displayed below the line.
+The maximum number of lines is given by the variable
+@code{org-agenda-entry-text-maxlines}.  Calling this command with a numeric
+prefix argument will temporarily modify that number to the prefix value.
+@c
 @kindex G
 @item G
 @vindex org-agenda-use-time-grid
@@ -7024,25 +7054,6 @@ Same as @kbd{r}.
 Save all Org buffers in the current Emacs session, and also the locations of
 IDs.
 @c
-@kindex @key{right}
-@item @key{right}
-@vindex org-agenda-ndays
-Display the following @code{org-agenda-ndays} days.  For example, if
-the display covers a week, switch to the following week.  With prefix
-arg, go forward that many times @code{org-agenda-ndays} days.
-@c
-@kindex @key{left}
-@item @key{left}
-Display the previous dates.
-@c
-@kindex .
-@item .
-Go to today.
-@c
-@kindex j
-@item j
-Prompt for a date and go there.
-@c
 @kindex C-c C-x C-c
 @item C-c C-x C-c
 @vindex org-columns-default-format

+ 3 - 3
doc/orgcard.tex

@@ -593,8 +593,7 @@ after  ``{\tt :}'', and dictionary words elsewhere.
 {\bf Clocking time}
 
 \key{start clock on current item}{C-c C-x C-i}
-\key{stop clock on current item}{C-c C-x C-o}
-\key{cancel current clock}{C-c C-x C-x}
+\key{stop/cancel clock on current item}{C-c C-x C-o/x}
 \key{display total subtree times}{C-c C-x C-d}
 \key{remove displayed times}{C-c C-c}
 \key{insert/update table with clock report}{C-c C-x C-r}
@@ -635,7 +634,8 @@ after  ``{\tt :}'', and dictionary words elsewhere.
 \key{delete other windows}{o}
 \key{view mode dipatcher}{v}
 \key{switch to day/week/month/year view}{d w vm vy}
-\key{toggle diary entries / time grid / clock report}{D / G / R}
+\key{toggle diary entries / time grid}{D / G}
+\key{toggle entry text / clock report}{E / R}
 \key{toggle display of logbook entries}{l / v l/L}
 \key{toggle inclusion of archived trees/files}{v a/A}
 \key{refresh agenda buffer with any changes}{r / g}

+ 18 - 0
lisp/ChangeLog

@@ -1,6 +1,24 @@
 2009-08-27  Carsten Dominik  <carsten.dominik@gmail.com>
 
 	* org-agenda.el (org-agenda-mode): Force visual line motion off.
+	(org-agenda-add-entry-text-maxlines): Improve docstring.
+	(org-agenda-start-with-entry-text-mode): New option.
+	(org-agenda-entry-text-maxlines): New option.
+	(org-agenda-entry-text-mode): New variable.
+	(org-agenda-mode): Set initial value of
+	`org-agenda-entry-text-mode'.
+	(org-agenda-mode-map): Add the `E' key.
+	(org-agenda-menu): Add entry text mode to the menu.
+	(org-agenda-get-some-entry-text): Fix line count bug.
+	(org-finalize-agenda): Apply entry text mode if appropriate.
+	(org-agenda-entry-text-show-here): New function.
+	(org-agenda-entry-text-show): New function.
+	(org-agenda-entry-text-hide): New function.
+	(org-agenda-view-mode-dispatch): Add entry text mode to the view
+	key menu.
+	(org-agenda-entry-text-mode): New command.
+	(org-agenda-set-mode-name): Add entry text mode to the mode line
+	string.
 
 2009-08-25  Carsten Dominik  <carsten.dominik@gmail.com>
 

+ 86 - 54
lisp/org-agenda.el

@@ -128,7 +128,11 @@ This is only relevant when `org-agenda-add-entry-text' is part of
 `org-agenda-before-write-hook', which it is by default.
 When this is 0, nothing will happen.  When it is greater than 0, it
 specifies the maximum number of lines that will be added for each entry
-that is listed in the agenda view."
+that is listed in the agenda view.
+
+Note that this variable is not used during display, only when exporting
+the agenda.  For agenda display, see org-agenda-entry-text-mode and the
+variable `org-agenda-entry-text-maxlines'."
   :group 'org-agenda
   :type 'integer)
 
@@ -651,6 +655,20 @@ Needs to be set before org.el is loaded."
   :group 'org-agenda-startup
   :type 'boolean)
 
+(defcustom org-agenda-start-with-entry-text-mode nil
+  "The initial value of entry-text-mode in a newly created agenda window."
+  :group 'org-agenda-startup
+  :type 'boolean)
+
+(defcustom org-agenda-entry-text-maxlines 5
+  "Number of text lines to be added when `E' is presed in the agenda.
+
+Note that this variable only used during agenda display.  Add add entry text
+when exporting the agenda, configure the variable
+`org-agenda-add-entry-ext-maxlines'."
+  :group 'org-agenda
+  :type 'integer)
+
 (defvar org-agenda-include-inactive-timestamps nil
   "Non-nil means, include inactive time stamps in agenda and timeline.")
 
@@ -1245,6 +1263,7 @@ works you probably want to add it to `org-agenda-custom-commands' for good."
 (defvar org-agenda-menu) ; defined later in this file.
 (defvar org-agenda-restrict) ; defined later in this file.
 (defvar org-agenda-follow-mode nil)
+(defvar org-agenda-entry-text-mode nil)
 (defvar org-agenda-clockreport-mode nil)
 (defvar org-agenda-show-log nil)
 (defvar org-agenda-redo-command nil)
@@ -1284,6 +1303,7 @@ The following commands are available:
 			 buffer-substring-filters)))
   (unless org-agenda-keep-modes
     (setq org-agenda-follow-mode org-agenda-start-with-follow-mode
+	  org-agenda-entry-text-mode org-agenda-start-with-entry-text-mode
 	  org-agenda-clockreport-mode org-agenda-start-with-clockreport-mode
 	  org-agenda-show-log org-agenda-start-with-log-mode))
 
@@ -1356,6 +1376,7 @@ The following commands are available:
 
 (org-defkey org-agenda-mode-map "f" 'org-agenda-follow-mode)
 (org-defkey org-agenda-mode-map "R" 'org-agenda-clockreport-mode)
+(org-defkey org-agenda-mode-map "E" 'org-agenda-entry-text-mode)
 (org-defkey org-agenda-mode-map "l" 'org-agenda-log-mode)
 (org-defkey org-agenda-mode-map "v" 'org-agenda-view-mode-dispatch)
 (org-defkey org-agenda-mode-map "D" 'org-agenda-toggle-diary)
@@ -1520,6 +1541,9 @@ The following commands are available:
      ["Show clock report" org-agenda-clockreport-mode
       :style toggle :selected org-agenda-clockreport-mode
       :active (org-agenda-check-type nil 'agenda)]
+     ["Show some entry text" org-agenda-entry-text-mode
+      :style toggle :selected org-agenda-entry-text-mode
+      :active t]
     "--"
      ["Show Logbook entries" org-agenda-log-mode
       :style toggle :selected org-agenda-show-log
@@ -2306,7 +2330,7 @@ This will ignore drawers etc, just get the text."
 		(while (looking-at "[ \t]*\n") (replace-match ""))
 		(goto-char (point-max))
 		(when (> (org-current-line)
-			 (1+ n-lines))
+			 n-lines)
 		  (goto-line (1+ n-lines))
 		  (backward-char 1))
 		(setq txt (buffer-substring (point-min) (point)))))))))
@@ -2449,6 +2473,9 @@ bind it in the options section.")
       (when (and org-agenda-dim-blocked-tasks org-blocker-hook)
 	(org-agenda-dim-blocked-tasks))
       (org-agenda-mark-clocking-task)
+      (when org-agenda-entry-text-mode
+	(org-agenda-entry-text-hide)
+	(org-agenda-entry-text-show))	
       (run-hooks 'org-finalize-agenda-hook)
       (setq org-agenda-type (get-text-property (point) 'org-agenda-type))
       (when (get 'org-agenda-filter :preset-filter)
@@ -2601,6 +2628,43 @@ no longer in use."
   (mapc (lambda (m) (org-check-and-save-marker m beg end))
 	org-agenda-markers))
 
+;;; Entry text mode
+
+(defun org-agenda-entry-text-show-here ()
+  "Add some text from te entry as context to the current line."
+  (let (m txt o)
+    (setq m (get-text-property (point) 'org-hd-marker))
+    (unless (marker-buffer m)
+      (error "No marker points to an entry here"))
+    (setq txt (concat "\n" (org-no-properties
+			    (org-agenda-get-some-entry-text
+			     m org-agenda-entry-text-maxlines))))
+    (when (string-match "\\S-" txt)
+      (setq o (org-make-overlay (point-at-bol) (point-at-eol)))
+      (org-overlay-put o 'evaporate t)
+      (org-overlay-put o 'org-overlay-type 'agenda-entry-content)
+      (org-overlay-put o 'after-string txt))))
+
+(defun org-agenda-entry-text-show ()
+  "Add entry context for all agenda lines."
+  (interactive)
+  (save-excursion
+    (goto-char (point-max))
+    (beginning-of-line 1)
+    (while (not (bobp))
+      (when (get-text-property (point) 'org-hd-marker)
+	(org-agenda-entry-text-show-here))
+      (beginning-of-line 0))))
+
+(defun org-agenda-entry-text-hide ()
+  "Remove any shown entry context."
+  (delq nil
+	(mapcar (lambda (o)
+		  (if (eq (org-overlay-get o 'org-overlay-type)
+			  'agenda-entry-content)
+		      (progn (org-delete-overlay o) t)))
+		(org-overlays-in (point-min) (point-max)))))
+
 ;;; Agenda timeline
 
 (defvar org-agenda-only-exact-dates nil) ; dynamically scoped
@@ -5060,7 +5124,7 @@ With prefix ARG, go backward that many times the current span."
   "Call one of the view mode commands."
   (interactive)
   (message "View: [d]ay [w]eek [m]onth [y]ear [l]og [L]og-all [a]rch-trees [A]rch-files
-       clock[R]eport      time[G]rid      [[]inactive      include[D]iary")
+       clock[R]eport   time[G]rid   [[]inactive  [E]ntryText   include[D]iary")
   (let ((a (read-char-exclusive)))
     (case a
       (?d (call-interactively 'org-agenda-day-view))
@@ -5068,9 +5132,11 @@ With prefix ARG, go backward that many times the current span."
       (?m (call-interactively 'org-agenda-month-view))
       (?y (call-interactively 'org-agenda-year-view))
       (?l (call-interactively 'org-agenda-log-mode))
+      (?f (call-interactively 'org-agenda-follow-mode))
       (?a (call-interactively 'org-agenda-archives-mode))
       (?A (org-agenda-archives-mode 'files))
       (?R (call-interactively 'org-agenda-clockreport-mode))
+      (?E (call-interactively 'org-agenda-entry-text-mode))
       (?G (call-interactively 'org-agenda-toggle-time-grid))
       (?D (call-interactively 'org-agenda-toggle-diary))
       (?\[ (let ((org-agenda-include-inactive-timestamps t))
@@ -5236,6 +5302,22 @@ so that the date SD will be in that range."
   (message "Follow mode is %s"
 	   (if org-agenda-follow-mode "on" "off")))
 
+(defun org-agenda-entry-text-mode (&optional arg)
+  "Toggle entry text mode in an agenda buffer."
+  (interactive "P")
+  (if (integerp arg)
+      (setq org-agenda-entry-text-mode t)
+    (setq org-agenda-entry-text-mode (not org-agenda-entry-text-mode)))
+  (org-agenda-entry-text-hide)
+  (and org-agenda-entry-text-mode
+       (let ((org-agenda-entry-text-maxlines
+	      (if (integerp arg) arg org-agenda-entry-text-maxlines)))
+	 (org-agenda-entry-text-show)))
+  (org-agenda-set-mode-name)
+  (message "Entry text mode is %s.  Maximum number of lines is %d"
+	   (if org-agenda-entry-text-mode "on" "off")
+	   (if (integerp arg) arg org-agenda-entry-text-maxlines)))
+
 (defun org-agenda-clockreport-mode ()
   "Toggle clocktable mode in an agenda buffer."
   (interactive)
@@ -5309,6 +5391,7 @@ When called with a prefix argument, include all archive files as well."
 		(if (equal org-agenda-ndays 1) " Day"    "")
 		(if (equal org-agenda-ndays 7) " Week"   "")
 		(if org-agenda-follow-mode     " Follow" "")
+		(if org-agenda-entry-text-mode " ETxt"   "")
 		(if org-agenda-include-diary   " Diary"  "")
 		(if org-agenda-use-time-grid   " Grid"   "")
 		(if (consp org-agenda-show-log) " LogAll"
@@ -6613,57 +6696,6 @@ belonging to the \"Work\" category."
 	(and (< h org-extend-today-until)
 	     (= date (1- today))))))
 
-;;; Experimental code
-
-(defcustom org-agenda-entry-text-maxlines 5
-  "Number of text lines to be added when `E' is presed in the agenda."
-  :group 'org-agenda
-  :type 'integer)
-
-(defun org-agenda-show-some-context ()
-  "Add some text from te entry as context to the current line."
-  (let (m txt o)
-    (setq m (get-text-property (point) 'org-hd-marker))
-    (unless (marker-buffer m)
-      (error "No marker points to an entry here"))
-    (setq txt (concat "\n" (org-no-properties
-			    (org-agenda-get-some-entry-text
-			     m org-agenda-entry-text-maxlines))))
-    (when (string-match "\\S-" txt)
-      (setq o (org-make-overlay (point-at-bol) (point-at-eol)))
-      (org-overlay-put o 'evaporate t)
-      (org-overlay-put o 'org-overlay-type 'agenda-entry-content)
-      (org-overlay-put o 'after-string txt))))
-
-(defun org-agenda-toggle-entry-contents ()
-  "Toggle the display of entry context."
-  (interactive)
-  (or (org-agenda-remove-entry-contents)
-      (org-agenda-add-entry-contents)))
-
-(org-defkey org-agenda-mode-map "E" 'org-agenda-toggle-entry-contents)
-(org-defkey org-agenda-keymap "E" 'org-agenda-toggle-entry-contents)
-
-(defun org-agenda-add-entry-contents ()
-  "Add entry context for all agenda lines."
-  (interactive)
-  (save-excursion
-    (goto-char (point-max))
-    (beginning-of-line 1)
-    (while (not (bobp))
-      (when (get-text-property (point) 'org-hd-marker)
-	(org-agenda-show-some-context))
-      (beginning-of-line 0))))
-
-(defun org-agenda-remove-entry-contents ()
-  "Remove any shown entry context."
-  (delq nil
-	(mapcar (lambda (o)
-		  (if (eq (org-overlay-get o 'org-overlay-type)
-			  'agenda-entry-content)
-		      (progn (org-delete-overlay o) t)))
-		(org-overlays-in (point-min) (point-max)))))
-
 (provide 'org-agenda)
 
 ;; arch-tag: 77f7565d-7c4b-44af-a2df-9f6f7070cff1