Org mode, using text files to manage daily

1. Customized agenda view

I customized an all inclusive agenda view. I also kept another simple agenda view, which usually works on my slower Eee PC - because it's too slow. I usually spend a lot of time simplifying the agenda view and want the agenda view to include everything.

Most of the customized agenda views I used to have are no longer used, since the filtering function is introduced in the new "org mode". The current agenda view can bind everything in a single view.

Usage scenario of customized agenda view:

  • A single agenda view displays the following information

    • Day overview

    • Easy to find tasks that need redirection

    • It is convenient to find projects that cannot be promoted

    • It is convenient to find the next task to be performed

    • View project status

    • View task dependencies

    • View tasks to be archived

  • Find notes

  • View hobbies

If I need to view the calendar of the day, passing F12 a will be faster than generating the block agenda - but when I need to view the information I need to pay attention to for a week or a month, or view the task timing data. Only in this case will I generate the block view, otherwise I don't want to spend a lot of time waiting for it to generate.

1.1} setting

#+header: :tangle yes
#+begin_src emacs-lisp
;; Do not dim blocked tasks
(setq org-agenda-dim-blocked-tasks nil)

;; Compact the block agenda view
(setq org-agenda-compact-blocks t)

;; Custom agenda command definitions
(setq org-agenda-custom-commands
      (quote (("N" "Notes" tags "NOTE"
               ((org-agenda-overriding-header "Notes")
                (org-tags-match-list-sublevels t)))
              ("h" "Habits" tags-todo "STYLE=\"habit\""
               ((org-agenda-overriding-header "Habits")
                (org-agenda-sorting-strategy
                 '(todo-state-down effort-up category-keep))))
              (" " "Agenda"
               ((agenda "" nil)
                (tags "REFILE"
                      ((org-agenda-overriding-header "Tasks to Refile")
                       (org-tags-match-list-sublevels nil)))
                (tags-todo "-CANCELLED/!"
                           ((org-agenda-overriding-header "Stuck Projects")
                            (org-agenda-skip-function 'bh/skip-non-stuck-projects)
                            (org-agenda-sorting-strategy
                             '(category-keep))))
                (tags-todo "-HOLD-CANCELLED/!"
                           ((org-agenda-overriding-header "Projects")
                            (org-agenda-skip-function 'bh/skip-non-projects)
                            (org-tags-match-list-sublevels 'indented)
                            (org-agenda-sorting-strategy
                             '(category-keep))))
                (tags-todo "-CANCELLED/!NEXT"
                           ((org-agenda-overriding-header (concat "Project Next Tasks"
                                                                  (if bh/hide-scheduled-and-waiting-next-tasks
                                                                      ""
                                                                    " (including WAITING and SCHEDULED tasks)")))
                            (org-agenda-skip-function 'bh/skip-projects-and-habits-and-single-tasks)
                            (org-tags-match-list-sublevels t)
                            (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-with-date bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-sorting-strategy
                             '(todo-state-down effort-up category-keep))))
                (tags-todo "-REFILE-CANCELLED-WAITING-HOLD/!"
                           ((org-agenda-overriding-header (concat "Project Subtasks"
                                                                  (if bh/hide-scheduled-and-waiting-next-tasks
                                                                      ""
                                                                    " (including WAITING and SCHEDULED tasks)")))
                            (org-agenda-skip-function 'bh/skip-non-project-tasks)
                            (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-with-date bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-sorting-strategy
                             '(category-keep))))
                (tags-todo "-REFILE-CANCELLED-WAITING-HOLD/!"
                           ((org-agenda-overriding-header (concat "Standalone Tasks"
                                                                  (if bh/hide-scheduled-and-waiting-next-tasks
                                                                      ""
                                                                    " (including WAITING and SCHEDULED tasks)")))
                            (org-agenda-skip-function 'bh/skip-project-tasks)
                            (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-with-date bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-sorting-strategy
                             '(category-keep))))
                (tags-todo "-CANCELLED+WAITING|HOLD/!"
                           ((org-agenda-overriding-header (concat "Waiting and Postponed Tasks"
                                                                  (if bh/hide-scheduled-and-waiting-next-tasks
                                                                      ""
                                                                    " (including WAITING and SCHEDULED tasks)")))
                            (org-agenda-skip-function 'bh/skip-non-tasks)
                            (org-tags-match-list-sublevels nil)
                            (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)))
                (tags "-REFILE/"
                      ((org-agenda-overriding-header "Tasks to Archive")
                       (org-agenda-skip-function 'bh/skip-non-archivable-tasks)
                       (org-tags-match-list-sublevels nil))))
               nil))))

#+end_src

If the scope of my agenda view is not limited to the project, it generally looks like this. This view shows the top-level items and NEXT tasks. Since there is no single item focused at present, the details of the item are hidden.

Note that the screenshot of the agenda view is not the view I currently use. It is old and different from the settings described in the document. A new one will be uploaded later.

When an item is selected (selected by the shortcut key ^ P ^ in agenda), the agenda block view switches to display the item and sub item information. If an item is not hidden, it has nothing to do with the selected item.

This makes it easy to focus on the task at hand.

 

 

Note that the current screenshot of agenda is a little old, which is different from the settings described in the document. This image will be replaced later.

Usually I handle tasks on agenda from top to bottom. Because there are deadlines and scheduled tasks (often scheduled on the same day or earlier) are displayed at the top.

My daily work flow is as follows:

  • Punch in (timing will be automatically started for the default task)

  • Open the agenda view and know what important things need to be handled today

  • Read email and view news

    • Create notes and tasks requiring response through org capture

  • View redirection tasks and reply to messages

  • Check out my agenda view and get started on today's important tasks

    • Timing task start

    • Complete it and set it to the "DONE" state. Of course, it may be interrupted

  • Continue to complete other tasks

  • For interrupted tasks, create a journal task entry (C-C J)

  • Punch out, continue to punch in after lunch

  • Complete more tasks

  • Empty redirection task

    • Select multiple tasks with the same target by # m #

    • Redirect marked tasks in batch via # B r #

    • Repeat the above actions for all tasks (or make the redirection command C-C C-W for a single task) until all tasks are redirected.

  • Mark custom as complete

  • Punch out end of working day

1.2 # how do I choose the next task

First, select the tasks that are due today and planned today or previously from the agenda view. Then start working on the tasks in the Next Tasks list. I usually set my current projects as today's tasks, so that these projects will be displayed in the daily agenda and remind me of the need to complete them in time. Each time, I will only add one or two items to the agenda view of the current day. Items that are not particularly important will not be displayed on the agenda of the current day, which can ensure that the agenda view of the current day will not distract me from too many tasks.

When I need to switch to new task processing, I will execute # F12 SPC # start the agenda view and process it according to the following priorities:

  • Select a task from the current day's agenda

    • The deadline is today (priority - not too late)

    • Tasks that have passed the deadline (a little late)

    • Plan to finish the task today (planned to finish today)

    • Scheduled tasks still displayed in agenda

    • Tasks that will expire

  • Select NEXT status task

  • If you cannot find a task in "NEXT" status, select a task from the current project to continue

1.2.1 , why are tasks displayed in the , NEXT , list

I have tried a new time management method to deal with things. Now I only use one "NEXT" list. For a newly created project or a new task in "NEXT" status in the project, the project will be marked as "NEXT" status. For the task marked with "NEXT" status, it indicates the task that the task {can handle now. Logically, it indicates what the project needs to do NEXT.

I used to define "going" status tasks for tasks. Tasks in this status mean that I spent some time, but I haven't really started yet. I have a special agenda view to view the "going" task, so that I can quickly find the next task to deal with.

But now I have removed the "going" status from my status list. The NEXT status task displayed in the agenda view can represent the task to be processed - I don't need to check the NEXT status task list at the same time= NEXT = tasks in the list indicate that after these tasks are completed, the project can also move forward. I hope things can quickly find the tasks to be performed in the NEXT step - so don't spend time looking for tasks in different org files, which is why I only keep the "NEXT" task list instead of the "going" list.

1.3 # reading emails, newsgroups, and communicating through IRC

When reading email, watching newsgroups and communicating through IRC, I will start timing the defau lt task (usually * * Organization) to record how long I spent on the task. When checking email, I will go to Gnus and check all emails in my inbox. When I need to respond to some emails, I will create a new task titled 'reply < user >' through org capture, so that it can be easily found. Some emails can be answered quickly, but some emails take some time to study and even take a lot of time to complete. For those tasks that need to record timing information, I will create it first and then time it. For the task types created through the capture template that need to be replied, the current plan starts today. Therefore, these tasks can be retained and will not be lost.

Next, I start the view with the shortcut key , F12 a , and then time the tasks and process them in the agenda view. Repeat until all 'respond to customer' tasks are completed and the task status is marked as' DONE '.

I read emails and newsgroups in Gnus, so I don't need to time this reading task separately (it has been timed through the default task). If I need to remember an article, I will create a note task through the shortcut key C-C n. Basically, it doesn't take time. I also know that this note will be saved (saved in refle. ORG) and won't be lost. It just took some time to capture notes.

1.4 filtering

The time is short, but there are many tasks. Usually I have many tasks at one time (now there are 373). So many tasks need to be viewed, which is daunting. At this time, the agenda filtering function will come in handy.

It's 11:53AM. I'm still working. I don't want to see tasks that have nothing to do with my work. I don't want to spend time on a big project before lunch... So I need to find a small workload task, and then I can start the task.

How can this be done? First get all tasks in the NEXT state from the ageda view, and then narrow the scope through filtering. Tasks are sorted by workload, so the one at the top is the one with the least workload - just do the top task, and then go down. I can limit the display workload to less than 10 minutes by / + 1 , so that I can complete the task without delaying lunch.

1.4.1 / automatically remove tasks with context through / RET

Shortcut keys / RET # are very useful in agenda. This feature was added to org mode by John Wiegley. It can implement user-defined filters to filter out tasks you don't want to display.

At work, if I am doing a task assigned to me by the project manager. If something more important comes, the project at hand needs to be postponed to a later date. It means I need to stop my work. I will first add the "HOLD" tag to the project task, and then do the task with higher priority. When executing / RET, the tasks and subtasks marked "HOLD" will be filtered out (because the tag will inherit).

At home, I will mark some of my tasks with "farm" because these tasks need to be handled by myself on my farm. If I am not on the farm, I will use this function to automatically filter the tasks with this tag from the agenda. When I am on the farm, I can display these tasks through the shortcut key / TAB farm RET #.

Here are my settings to implement / RET # the usage scenarios described above.

#+header: :tangle yes
#+begin_src emacs-lisp
(defun bh/org-auto-exclude-function (tag)
  "Automatic task exclusion in the agenda with / RET"
  (and (cond
        ((string= tag "hold")
         t)
        ((string= tag "farm")
         t))
       (concat "-" tag)))

(setq org-agenda-auto-exclude-function 'bh/org-auto-exclude-function)
#+end_src

In this way, I can filter out the tasks that I can't work for the time being by executing / RET # in agenda. This makes my agenda more concise and orderly.

Keywords: emacs lisp

Added by lewel on Mon, 07 Feb 2022 02:16:46 +0200