All Projects → akirak → Org Reverse Datetree

akirak / Org Reverse Datetree

Licence: gpl-3.0
Reversed date trees for Emacs Org mode

Projects that are alternatives of or similar to Org Reverse Datetree

.emacs.d
🎉 Personal GNU Emacs configuration
Stars: ✭ 313 (+848.48%)
Mutual labels:  emacs, org-mode
Coldnew Emacs
coldnew's emacs config
Stars: ✭ 32 (-3.03%)
Mutual labels:  emacs, org-mode
Org Wiki
Wiki for Emacs org-mode built on top of Emacs org-mode.
Stars: ✭ 319 (+866.67%)
Mutual labels:  emacs, org-mode
Org Transclusion
(alpha) Emacs package to enable transclusion with Org Mode
Stars: ✭ 251 (+660.61%)
Mutual labels:  emacs, org-mode
Memacs
What did I do on February 14th 2007? Visualize your (digital) life in Org-mode
Stars: ✭ 711 (+2054.55%)
Mutual labels:  emacs, org-mode
Org Superstar Mode
Make org-mode stars a little more super
Stars: ✭ 271 (+721.21%)
Mutual labels:  emacs, org-mode
Org Roam Server
A Web Application to Visualize the Org-Roam Database
Stars: ✭ 443 (+1242.42%)
Mutual labels:  emacs, org-mode
Evil Org Mode
Supplemental evil-mode keybindings to emacs org-mode
Stars: ✭ 241 (+630.3%)
Mutual labels:  emacs, org-mode
Org Noter
Emacs document annotator, using Org-mode
Stars: ✭ 671 (+1933.33%)
Mutual labels:  emacs, org-mode
Ox Hugo
A carefully crafted Org exporter back-end for Hugo
Stars: ✭ 591 (+1690.91%)
Mutual labels:  emacs, org-mode
Org Projectile
Manage org-mode TODOs for your projectile projects
Stars: ✭ 259 (+684.85%)
Mutual labels:  emacs, org-mode
Org Super Agenda
Supercharge your Org daily/weekly agenda by grouping items
Stars: ✭ 829 (+2412.12%)
Mutual labels:  emacs, org-mode
Mu4e Dashboard
A dashboard for mu4e (mu for emacs)
Stars: ✭ 259 (+684.85%)
Mutual labels:  emacs, org-mode
Zetteldeft
A Zettelkasten system! Or rather, some functions on top of the emacs deft package.
Stars: ✭ 284 (+760.61%)
Mutual labels:  emacs, org-mode
Ob Async
Asynchronous src_block execution for org-babel
Stars: ✭ 249 (+654.55%)
Mutual labels:  emacs, org-mode
Org Sidebar
A helpful sidebar for Org mode
Stars: ✭ 354 (+972.73%)
Mutual labels:  emacs, org-mode
Doct
DOCT: Declarative Org Capture Templates for Emacs
Stars: ✭ 210 (+536.36%)
Mutual labels:  emacs, org-mode
Emacs Easy Hugo
Emacs major mode for managing hugo
Stars: ✭ 235 (+612.12%)
Mutual labels:  emacs, org-mode
Anki Editor
Emacs minor mode for making Anki cards with Org
Stars: ✭ 453 (+1272.73%)
Mutual labels:  emacs, org-mode
Org Ql
An Org-mode query language, including search commands and saved views
Stars: ✭ 721 (+2084.85%)
Mutual labels:  emacs, org-mode

-- mode: org; mode: org-make-toc --

  • org-reverse-datetree [[https://melpa.org/#/org-reverse-datetree][https://melpa.org/packages/org-reverse-datetree-badge.svg]] [[https://github.com/akirak/org-reverse-datetree/workflows/CI/badge.svg][https://github.com/akirak/org-reverse-datetree/workflows/CI/badge.svg]]

This package provides functions for creating reverse date trees, which are similar to date trees as supported by built-in functions of Org mode (e.g. =org-capture=) but in a reversed order. Since newer contents come first in reverse date trees, they are more useful in situations where you want to find latest activities on a particular subject using a search tool like [[https://github.com/alphapapa/helm-org-rifle][helm-org-rifle]].

[[file:screenshots/org-reverse-datetree-1.png]] ** Table of contents :PROPERTIES: :TOC: siblings :END:

  • [[#features][Features]]
  • [[#prerequisites][Prerequisites]]
  • [[#usage][Usage]]
  • [[#configuring-date-formats][Configuring date formats]] - [[#non-reverse-date-tree][Non-reverse date tree]]
  • [[#defining-a-capture-template][Defining a capture template]]
  • [[#jumping-to-a-particular-date][Jumping to a particular date]]
  • [[#defining-a-refile-function][Defining a refile function]]
  • [[#archiving][Archiving]]
  • [[#defining-an-agenda-command][Defining an agenda command]]
  • [[#cleaning-up-empty-dates][Cleaning up empty dates]]
  • [[#configuration-examples][Configuration examples]]
  • [[#changelog][Changelog]]
  • [[#035-2020-11-28][0.3.5 (2020-11-28)]]
  • [[#034-2020-09-23][0.3.4 (2020-09-23)]]
  • [[#033-2020-03-25][0.3.3 (2020-03-25)]]
  • [[#032-2020-03-21][0.3.2 (2020-03-21)]]
  • [[#031-2020-02-24][0.3.1 (2020-02-24)]]
  • [[#license][License]]

** Features

  • Reverse date trees, where latest contents are shown first.

  • You can customize the format of the date tree.

  • Week trees are also supported. You can even create date trees with four levels (year-month-week-date) or any number of levels.

  • Configurations of date trees are stored in file headers, so each file is ensured to have a single date tree with a consistent structure.

  • Configuration is done interactively on first creation. ** Prerequisites

  • Emacs 26.1

  • dash ** Usage The following functions retrieve a configuration from the file header:

  • Use =org-reverse-datetree-goto-date-in-file= to jump to a date in the date tree. If this function is called non-interactively and the time argument is nil, it jumps to the current date. This can be used for =org-capture=.

  • =org-reverse-datetree-goto-read-date-in-file= is similar as above, but it always prompts for a date even if the function is called non-interactively.

  • =org-reverse-datetree-refile-to-file= is a function that refiles the current entry into a date tree. This can be used to build a custom command for refiling an entry to a particular file. *** Configuring date formats The format configuration is stored in the file header of each Org file, as shown in the following example:

#+begin_src org ,#+REVERSE_DATETREE_DATE_FORMAT: %Y-%m-%d %A ,#+REVERSE_DATETREE_WEEK_FORMAT: %Y W%W ,#+REVERSE_DATETREE_YEAR_FORMAT: %Y ,#+REVERSE_DATETREE_USE_WEEK_TREE: t #+end_src

These attributes are added by functions in this package on initial creation of the date tree, so you usually don't have to manually edit them.

You can customize the default format by setting =org-reverse-datetree-{year,month,week,date}-format=. Note that the formats should be basically numeric and zero-prefixed, since date-tree headings are ordered lexicographically by their texts. You should avoid a month format starting with a string like "Feb" or "February". If you want to contain one, you should append it to a zero-prefixed numeric month.

Another way to configure the structure is to set =org-reverse-datetree-level-formats= variable as a file-local variable. Through the variable, you can define a structure with any number of levels. For example, the following configuration enables date trees consisting of four levels (year-month-week-date) in all files (thanks [[https://github.com/samspo][@samspo]] for [[https://github.com/akirak/org-reverse-datetree/issues/4][reporting]]):

#+begin_src emacs-lisp (setq-default org-reverse-datetree-level-formats '("%Y" ; year (lambda (time) (format-time-string "%Y-%m %B" (org-reverse-datetree-monday time))) ; month "%Y W%W" ; week "%Y-%m-%d %A" ; date )) #+end_src **** Non-reverse date tree Even though this package is named =org-reverse-datetree=, it is now possible to create a non-reverse date tree, i.e. a normal ascending date tree.

To enable the feature, set =org-reverse-datetree-non-reverse= variable to non-nil. It is a file-local variable. The default continues to be a reverse date tree. *** Defining a capture template You can define an =org-capture= template which inserts an entry into a date tree with [[https://github.com/akirak/org-starter][org-starter]] package as follows:

#+begin_src emacs-lisp (org-starter-def-capture "p" "Commonplace book plain entry" entry (file+function "cpb.org" org-reverse-datetree-goto-date-in-file) "* %?" :clock-in t :clock-resume t :empty-lines 1) #+end_src

*** Jumping to a particular date Use =org-reverse-datetree-goto-date-in-file= command to jump to a particular date in the date tree of the current file.

*** Defining a refile function With =org-reverse-datetree-refile-to-file=, you can define a function which can be used to refile entries to the date tree in a particular file:

#+begin_src emacs-lisp (defun akirak/org-refile-to-cpb (arg) (interactive "P") (org-reverse-datetree-refile-to-file (org-starter-locate-file "cpb.org" nil t) nil :ask-always arg :prefer '("CREATED_TIME" "CREATED_AT" "CLOSED"))) #+end_src

The heading properties given as =:prefer= to the function are used to determine the date of an entry.

You can use this function both in =org-mode= (either on a single entry or on multiple entries under selection) and in =org-agenda-mode= (either on a single entry or on bulk entries). It retrieves a date for each entry if it operates on multiple entries.

=org-starter-locate-file= is a function from org-starter package, which locates the location of an Org file. If you don't use the package, you should give an absolute path:

#+begin_src emacs-lisp (defun akirak/org-refile-to-cpb (arg) (interactive "P") (org-reverse-datetree-refile-to-file "~/org/cpb.org" nil :ask-always arg :prefer '("CREATED_TIME" "CREATED_AT" "CLOSED"))) #+end_src

A recommended way to invoke this command is to add an entry to =org-starter-extra-refile-map= in org-starter package:

#+begin_src emacs-lisp (add-to-list 'org-starter-extra-refile-map '("p" akirak/org-refile-to-cpb "cpb")) #+end_src

Then you can run =org-starter-refile-by-key= and press p key to refile the selected entries to =cpb.org=. *** Archiving :PROPERTIES: :CREATED_TIME: [2020-03-25 Wed 19:04] :END: You can archive a tree to a reverse datetree using =org-reverse-datetree-archive-subtree= command. It also works on multiple trees in an active region.

The destination is specified in either =REVERSE_DATETREE_ARCHIVE_FILE= property (inherited) or =REVERSE_DATETREE_ARCHIVE_FILE= file header. It should be a file path. For now, the target file cannot contain multiple date trees.

From inside =org-agenda=, you can use =org-reverse-datetree-agenda-archive=. It doesn't work on bulk entries for now. *** Defining an agenda command With [[https://github.com/alphapapa/org-ql][org-ql]] package, you can define a function for browsing entries in a reverse date tree:

#+begin_src emacs-lisp (org-ql-search "~/org/cpb.org" (level 4) :sort priority) #+end_src

You can also define a custom org-agenda command:

#+begin_src emacs-lisp (setq org-agenda-custom-commands '(("c" "Browse entries in cpb.org" org-ql-block '(level 4) ((org-super-agenda-groups '((:todo "DONE") (:todo t))) (org-agenda-files '("~/org/cpb.org")))))) #+end_src

=org-super-agenda-groups= is an option for [[https://github.com/alphapapa/org-super-agenda][org-super-agenda]] for grouping the contents. If you don't activate =org-super-agenda-mode=, that option is simply ignoerd. *** Cleaning up empty dates You can use =org-reverse-datetree-cleanup-empty-dates= command to clean up date entries that contains no children. ** Configuration examples

  • [[https://out-of-cheese-error.netlify.com/spacemacs-config#org7963676][An Annotated Spacemacs - For an org-mode workflow ·]]: Using the package in some of his =org-capture= templates for clippling URLs, notes, and tasks. ** Changelog *** 0.3.5 (2020-11-28)
  • Fix bugs with =org-reverse-datetree-cleanup-empty-dates=.
  • Switch to [[https://github.com/akirak/elinter/][elinter]] for CI. *** 0.3.4 (2020-09-23) Add a function for archiving from org-agenda, =org-reverse-datetree-agenda-archive=. *** 0.3.3 (2020-03-25) Add an initial support for archiving. *** 0.3.2 (2020-03-21) Add support for a non-reverse date tree. *** 0.3.1 (2020-02-24)
  • Fix a bunch of issues with =org-reverse-datetree-cleanup-empty-dates=. Explicitly documented the function in README.
  • Switch to GitHub Actions on running CI. ** License GPL v3
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].