emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [PATCH] org-agenda: rewrite mode-line
@ 2010-12-06 15:41 Julien Danjou
  2010-12-12  8:32 ` Carsten Dominik
  2011-01-21  9:25 ` Carsten Dominik
  0 siblings, 2 replies; 10+ messages in thread
From: Julien Danjou @ 2010-12-06 15:41 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: Julien Danjou

* org-agenda.el (org-agenda-filter-apply)
(org-agenda-filter-by-tag-show-all) (org-agenda-change-time-span)
(org-remove-subtree-entries-from-agenda) (org-agenda-entry-text-mode,
org-agenda-clockreport-mode) (org-agenda-toggle-diary,
org-agenda-archives-mode) (org-agenda-toggle-deadlines,
org-agenda-toggle-time-grid): Stop calling org-agenda-set-mode-name.
(org-agenda-set-mode-name): Rewrite mode-name value using dynamic
evaluation with :eval and other advanced format.

Signed-off-by: Julien Danjou <julien@danjou.info>
---
 lisp/org-agenda.el |   66 ++++++++++++++++++++-------------------------------
 1 files changed, 26 insertions(+), 40 deletions(-)

diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 20c901a..7624348 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -5936,7 +5936,6 @@ If the line does not have an effort defined, return nil."
   (let (tags)
     (setq org-agenda-filter filter
 	  org-agenda-filter-form (org-agenda-filter-make-matcher))
-    (org-agenda-set-mode-name)
     (save-excursion
       (goto-char (point-min))
       (while (not (eobp))
@@ -5973,8 +5972,7 @@ If the line does not have an effort defined, return nil."
   (mapc 'delete-overlay org-agenda-filter-overlays)
   (setq org-agenda-filter-overlays nil)
   (setq org-agenda-filter nil)
-  (setq org-agenda-filter-form nil)
-  (org-agenda-set-mode-name))
+  (setq org-agenda-filter-form nil))
 
 (defun org-agenda-manipulate-query-add ()
   "Manipulate the query by adding a search term with positive selection.
@@ -6164,7 +6162,6 @@ SPAN may be `day', `week', `month', `year'."
 	  (list (car org-agenda-last-arguments) sd span t)))
     (org-agenda-redo)
     (org-agenda-find-same-or-today-or-agenda))
-  (org-agenda-set-mode-name)
   (message "Switched to %s view" span))
 
 (defun org-agenda-compute-starting-span (sd span &optional n)
@@ -6258,7 +6255,6 @@ so that the date SD will be in that range."
   "Toggle follow mode in an agenda buffer."
   (interactive)
   (setq org-agenda-follow-mode (not org-agenda-follow-mode))
-  (org-agenda-set-mode-name)
   (if (and org-agenda-follow-mode (org-get-at-bol 'org-marker))
       (org-agenda-show))
   (message "Follow mode is %s"
@@ -6274,7 +6270,6 @@ so that the date SD will be in that range."
        (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)))
@@ -6288,7 +6283,6 @@ agenda filter."
   (if with-filter
       (setq org-agenda-clockreport-mode 'with-filter)
     (setq org-agenda-clockreport-mode (not org-agenda-clockreport-mode)))
-  (org-agenda-set-mode-name)
   (org-agenda-redo)
   (message "Clocktable mode is %s"
 	   (if org-agenda-clockreport-mode "on" "off")))
@@ -6305,7 +6299,6 @@ With a double `C-u' prefix arg, show *only* log items, nothing else."
 	    'only
 	  (if special '(closed clock state)
 	    (not org-agenda-show-log))))
-  (org-agenda-set-mode-name)
   (org-agenda-redo)
   (message "Log mode is %s"
 	   (if org-agenda-show-log "on" "off")))
@@ -6316,7 +6309,6 @@ When called with a prefix argument, include all archive files as well."
   (interactive "P")
   (setq org-agenda-archives-mode
 	(if with-files t (if org-agenda-archives-mode nil 'trees)))
-  (org-agenda-set-mode-name)
   (org-agenda-redo)
   (message
    "%s"
@@ -6335,7 +6327,6 @@ When called with a prefix argument, include all archive files as well."
   (org-agenda-check-type t 'agenda)
   (setq org-agenda-include-diary (not org-agenda-include-diary))
   (org-agenda-redo)
-  (org-agenda-set-mode-name)
   (message "Diary inclusion turned %s"
 	   (if org-agenda-include-diary "on" "off")))
 
@@ -6345,7 +6336,6 @@ When called with a prefix argument, include all archive files as well."
   (org-agenda-check-type t 'agenda)
   (setq org-agenda-include-deadlines (not org-agenda-include-deadlines))
   (org-agenda-redo)
-  (org-agenda-set-mode-name)
   (message "Deadlines inclusion turned %s"
 	   (if org-agenda-include-deadlines "on" "off")))
 
@@ -6355,7 +6345,6 @@ When called with a prefix argument, include all archive files as well."
   (org-agenda-check-type t 'agenda)
   (setq org-agenda-use-time-grid (not org-agenda-use-time-grid))
   (org-agenda-redo)
-  (org-agenda-set-mode-name)
   (message "Time-grid turned %s"
 	   (if org-agenda-use-time-grid "on" "off")))
 
@@ -6363,36 +6352,33 @@ When called with a prefix argument, include all archive files as well."
   "Set the mode name to indicate all the small mode settings."
   (setq mode-name
 	(list "Org-Agenda"
-	      (if (get 'org-agenda-files 'org-restrict) " []" "")
+	      '(:eval (when (get 'org-agenda-files 'org-restrict) " []"))
 	      " "
 	      '(:eval (org-agenda-span-name org-agenda-current-span))
-	      (if org-agenda-follow-mode     " Follow" "")
-	      (if org-agenda-entry-text-mode " ETxt"   "")
-	      (if org-agenda-include-diary   " Diary"  "")
-	      (if org-agenda-include-deadlines " Ddl"  "")
-	      (if org-agenda-use-time-grid   " Grid"   "")
-	      (if (and (boundp 'org-habit-show-habits)
-		       org-habit-show-habits) " Habit"   "")
-	      (if (consp org-agenda-show-log) " LogAll"
-		(if org-agenda-show-log " Log" ""))
-	      (if (or org-agenda-filter (get 'org-agenda-filter
-					     :preset-filter))
-		  (concat " {" (mapconcat
-				'identity
-				(append (get 'org-agenda-filter
-					     :preset-filter)
-					org-agenda-filter) "") "}")
-		"")
-	      (if org-agenda-archives-mode
-		  (if (eq org-agenda-archives-mode t)
-		      " Archives"
-		    (format " :%s:" org-archive-tag))
-		"")
-	      (if org-agenda-clockreport-mode
-		  (if (eq org-agenda-clockreport-mode 'with-filter)
-		      " Clock{}" " Clock")
-		"")))
-  (force-mode-line-update))
+	      '(org-agenda-follow-mode " Follow")
+	      '(org-agenda-entry-text-mode " ETxt")
+	      '(org-agenda-include-diary " Diary")
+	      '(org-agenda-include-deadlines " Ddl")
+	      '(org-agenda-use-time-grid " Grid")
+	      '(:eval (and (boundp 'org-habit-show-habits)
+			   org-habit-show-habits " Habit"))
+	      '(:eval (if (consp org-agenda-show-log) " LogAll"
+			(if org-agenda-show-log " Log" "")))
+	      '(:eval (when (or org-agenda-filter (get 'org-agenda-filter
+						       :preset-filter))
+			(concat " {" (mapconcat
+				      'identity
+				      (append (get 'org-agenda-filter
+						   :preset-filter)
+					      org-agenda-filter) "") "}")))
+	      '(:eval (when org-agenda-archives-mode
+			(if (eq org-agenda-archives-mode t)
+			    " Archives"
+			  (format " :%s:" org-archive-tag))))
+	      '(:eval (if org-agenda-clockreport-mode
+			  (if (eq org-agenda-clockreport-mode 'with-filter)
+			      " Clock{}"
+			    " Clock"))))))
 
 (defun org-agenda-post-command-hook ()
   (setq org-agenda-type
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2011-03-05 10:51 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-06 15:41 [PATCH] org-agenda: rewrite mode-line Julien Danjou
2010-12-12  8:32 ` Carsten Dominik
2010-12-12 18:55   ` Julien Danjou
2010-12-13 14:49     ` Carsten Dominik
2010-12-21  7:36       ` Carsten Dominik
2010-12-21  8:53         ` Michael Sperber
2011-01-21  9:25 ` Carsten Dominik
2011-03-04 22:09   ` Bastien
2011-03-05 10:12     ` Michael Sperber
2011-03-05 10:50       ` Bastien

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).