From 72e6b81dde8f08a249838be8d260b9d87f3466eb Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Sun, 27 Dec 2020 17:11:18 -0800 Subject: Add old post ‘Different roles’ --- different-roles.org | 112 +++++++++++++++++++++++++++++++++++++++++ different-roles.post | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 252 insertions(+) create mode 100644 different-roles.org create mode 100644 different-roles.post diff --git a/different-roles.org b/different-roles.org new file mode 100644 index 0000000..5ab399b --- /dev/null +++ b/different-roles.org @@ -0,0 +1,112 @@ +#+TITLE: Different roles +#+DATE: 2013-01-10 +#+COLESLAW_TAGS: org-mode, emacs, todo + +The other day I noticed that when I'm working I find it very annoying +to have tasks for my personal projects appear in either my agenda or +my todo list, so I was thinking if I couldn't make it somewhat more +flexible. + +First I've added some separation between my org files, I've split +them into ~personal-org-agenda-files~, ~work-org-agenda-files~ and +~common-org-agenda-files~, since there are also /some/ tasks that I would +like to know about in either situation. + +#+BEGIN_SRC emacs-lisp + (defvar oni:personal-agenda-files + (list (expand-file-name "~/documents/org/tasks")) + "My personal agenda, should only show up at times I don't have + to work.") + + (defvar oni:work-agenda-files + (list (expand-file-name "~/documents/org/work")) + "My work agenda, should only show up at times I work.") + + (defvar oni:common-agenda-files + (list (expand-file-name "~/documents/org/misc")) + "Agenda files that are work-agnostic, should always show up.") +#+END_SRC + +At first I only seperated them with ~org-agenda-custom-commands~: + +#+BEGIN_SRC emacs-lisp + (setq org-agenda-custom-commands + '(("P" . "Personal only") + ("Pa" "Personal agenda" agenda "" + ((org-agenda-files (append oni:personal-agenda-files + oni:common-agenda-files)))) + ("Pt" "Personal todo" agenda "" + ((org-agenda-files (append oni:personal-agenda-files + oni:common-agenda-files)))) + ("W" . "Work only") + ("Wa" "Work agenda" agenda "" + ((org-agenda-files (append oni:work-agenda-files + oni:common-agenda-files)))) + ("Wt" "Work todo" todo "" + ((org-agenda-files (append oni:work-agenda-files + oni:common-agenda-files)))))) +#+END_SRC + +But it's clunky to have to use a separate command just to see a clean +todo list. Then I thought, and tried, to have a function that checks +the time to see which it should use, since I work from 09:00 to +17:00, if the current time is between those times I should only look +at my work todo list, most of the time, outside of those hours I +don't really care what I have to do for work. + +#+BEGIN_SRC emacs-lisp + (defun oni:set-org-agenda-files () + (interactive) + (let ((current-time (current-time-string)) + (start-time (format-time-string "%a %b %e 09:00:00 %Y")) + (end-time (format-time-string "%a %b %e 17:00:00 %Y"))) + (if (or (and (string< current-time start-time) + (string< current-time end-time)) + (and (string< start-time current-time) + (string< end-time current-time))) + (setq org-agenda-files + (append oni:personal-agenda-files + oni:common-agenda-files)) + (setq org-agenda-files + (append oni:work-agenda-files + oni:common-agenda-files))))) +#+END_SRC + +It's weird, but since Emacs doesn't have any real datetime functions +for creation/comparison, for as far as I know, it seemed easiest to +just create some strings representing the time and compare these. + +Then it should be, if the current time is either before both start +and end time or after both start and end time it should return my +personal todo list, otherwise it should return my work todo list. + +Now, it would be silly to have to call that manually every so-often, +so I've set it up to do so automatically. + +#+BEGIN_SRC emacs-lisp + (oni:set-org-agenda-files) + (run-at-time "09:01" nil 'oni:set-org-agenda-files) + (run-at-time "17:01" nil 'oni:set-org-agenda-files) +#+END_SRC + +First, I set my agenda files to whatevers they should be *right now*. +Then I have this function run at 09:01 and 17:01, if either or both +have already passed, they won't be executed today. This effectively +tells Emacs to switch to my work "role" after 09:00 and back to my +personal "role" after 17:00. + +It's not perfect yet, but I felt like writing something. The things +I would change might include: + +- Check the times for either ~<~ or ~=~ the start/end times, so I don't + have to check for ~:01~ every time, but Emacs doesn't have a ~string<=~ + function so I'll have to mimic it. + +- Always set it to my personal "role" during weekends. + +- Have them repeat every 24 hours, just in case I don't turn off my + PC for a few days. + +I'll fix those soon, they're not hard to do, but this works for now. +It has worked well for me today, but I might throw it out again +tomorrow, as I sometimes tend to do. diff --git a/different-roles.post b/different-roles.post new file mode 100644 index 0000000..aa70159 --- /dev/null +++ b/different-roles.post @@ -0,0 +1,140 @@ +;;;;; +title: Different roles +date: 2013-01-10 +tags: org-mode, emacs, todo +format: html +;;;;; +

+The other day I noticed that when I'm working I find it very annoying +to have tasks for my personal projects appear in either my agenda or +my todo list, so I was thinking if I couldn't make it somewhat more +flexible. +

+ +

+First I've added some separation between my org files, I've split +them into personal-org-agenda-files, work-org-agenda-files and +common-org-agenda-files, since there are also some tasks that I would +like to know about in either situation. +

+ +
+
(defvar oni:personal-agenda-files
+  (list (expand-file-name "~/documents/org/tasks"))
+  "My personal agenda, should only show up at times I don't have
+  to work.")
+
+(defvar oni:work-agenda-files
+  (list (expand-file-name "~/documents/org/work"))
+  "My work agenda, should only show up at times I work.")
+
+(defvar oni:common-agenda-files
+  (list (expand-file-name "~/documents/org/misc"))
+  "Agenda files that are work-agnostic, should always show up.")
+
+
+ +

+At first I only seperated them with org-agenda-custom-commands: +

+ +
+
(setq org-agenda-custom-commands
+      '(("P" . "Personal only")
+        ("Pa" "Personal agenda" agenda ""
+         ((org-agenda-files (append oni:personal-agenda-files
+                                    oni:common-agenda-files))))
+        ("Pt" "Personal todo" agenda ""
+         ((org-agenda-files (append oni:personal-agenda-files
+                                    oni:common-agenda-files))))
+        ("W" . "Work only")
+        ("Wa" "Work agenda" agenda ""
+         ((org-agenda-files (append oni:work-agenda-files
+                                    oni:common-agenda-files))))
+        ("Wt" "Work todo" todo ""
+         ((org-agenda-files (append oni:work-agenda-files
+                                    oni:common-agenda-files))))))
+
+
+ +

+But it's clunky to have to use a separate command just to see a clean +todo list. Then I thought, and tried, to have a function that checks +the time to see which it should use, since I work from 09:00 to +17:00, if the current time is between those times I should only look +at my work todo list, most of the time, outside of those hours I +don't really care what I have to do for work. +

+ +
+
(defun oni:set-org-agenda-files ()
+  (interactive)
+  (let ((current-time (current-time-string))
+        (start-time (format-time-string "%a %b %e 09:00:00 %Y"))
+        (end-time (format-time-string "%a %b %e 17:00:00 %Y")))
+    (if (or (and (string< current-time start-time)
+                 (string< current-time end-time))
+            (and (string< start-time current-time)
+                 (string< end-time current-time)))
+        (setq org-agenda-files
+              (append oni:personal-agenda-files
+                      oni:common-agenda-files))
+      (setq org-agenda-files
+            (append oni:work-agenda-files
+                    oni:common-agenda-files)))))
+
+
+ +

+It's weird, but since Emacs doesn't have any real datetime functions +for creation/comparison, for as far as I know, it seemed easiest to +just create some strings representing the time and compare these. +

+ +

+Then it should be, if the current time is either before both start +and end time or after both start and end time it should return my +personal todo list, otherwise it should return my work todo list. +

+ +

+Now, it would be silly to have to call that manually every so-often, +so I've set it up to do so automatically. +

+ +
+
(oni:set-org-agenda-files)
+(run-at-time "09:01" nil 'oni:set-org-agenda-files)
+(run-at-time "17:01" nil 'oni:set-org-agenda-files)
+
+
+ +

+First, I set my agenda files to whatevers they should be right now. +Then I have this function run at 09:01 and 17:01, if either or both +have already passed, they won't be executed today. This effectively +tells Emacs to switch to my work "role" after 09:00 and back to my +personal "role" after 17:00. +

+ +

+It's not perfect yet, but I felt like writing something. The things +I would change might include: +

+ + + +

+I'll fix those soon, they're not hard to do, but this works for now. +It has worked well for me today, but I might throw it out again +tomorrow, as I sometimes tend to do. +

-- cgit v1.2.3-54-g00ecf