lepisma / org-books

Reading list management with org mode
GNU General Public License v3.0
286 stars 23 forks source link
emacs org-mode reading-list

+TITLE: org-books

+AUTHOR: Abhinav Tushar

[[https://travis-ci.org/lepisma/org-books][https://img.shields.io/travis/lepisma/org-books/master.svg]] [[https://melpa.org/#/org-books][file:https://melpa.org/packages/org-books-badge.svg]] [[https://stable.melpa.org/#/org-books][file:https://stable.melpa.org/packages/org-books-badge.svg]]

Reading list management using org-mode. A sample list lives on my wiki [[https://lepisma.xyz/wiki/readings/reading-list][here]].

[[file:./screen.gif]]

** Quickstart ~org-books~ is available on melpa.

+BEGIN_SRC emacs-lisp

;; Set path to the reading list org file (setq org-books-file "~/my-list.org")

;; A basic template file can be generated using the function `org-books-create-file'.

+END_SRC

** Adding new source A /source/ for books provide a /details function/ that takes certain input (like a url in case of amazon) and returns a list of ~title~, ~author~ and ~props~. ~props~ is an alist which gets added to the entry as org properties. Here is the output from amazon's:

+BEGIN_SRC emacs-lisp :exports both :results output

(print (org-books-get-details-amazon "https://www.amazon.in/Algebra-Chapter-Graduate-Studies-Mathematics/dp/0821847813/"))

+END_SRC

+RESULTS:

: ("Algebra: Chapter 0 (Graduate Studies in Mathematics)" "Paolo Aluffi" (("AMAZON" . "https://www.amazon.in/Algebra-Chapter-Graduate-Studies-Mathematics/dp/0821847813/")))

With the details function defined, you need to write the url pattern it accepts and add it to the variable =org-books-url-pattern-dispatches=. Check variable's docstring for more details.

As of now there are the following sources:

** Using org-capture For a more flexible setup, you might just want to use ~org-capture~, possibly with a little help from functions present in this package. Directly using capture gives you much more flexibility over the structure and organization of entries. Here we describe a few capture /templates/ that can be used:

*** Manual entry

+BEGIN_SRC emacs-lisp

(setq org-capture-templates '(("b" "Book" entry (file "some-file.org") "* %^{TITLE}\n:PROPERTIES:\n:ADDED: %<[%Y-%02m-%02d]>\n:END:%^{AUTHOR}p\n%?" :empty-lines 1)))

+END_SRC

*** Using url from clipboard

+BEGIN_SRC emacs-lisp

(setq org-capture-templates '(("b" "Book" entry (file "some-file.org") "%(let* ((url (substring-no-properties (current-kill 0))) (details (org-books-get-details url))) (when details (apply #'org-books-format 1 details)))")))

+END_SRC

** Capturing reading logs While reading, I keep a timestamped log under the book connected via org capture template. Here is how it looks like:

+begin_src org

,*** READING Book name
:PROPERTIES:
:AUTHOR:   Author
:ADDED:    [2020-03-29]
:AMAZON:   https://www.amazon.com/...
:END:

,**** Log
 + [2021-04-09 Fri 00:32] ...
 + [2021-04-08 Thu 23:59] This book is very ...

+end_src

Org capture template looks like the following, using the function ~org-books-visit-book-log~ from this package:

+begin_src emacs-lisp

(setq org-capture-templates '(("b" "Book log" item (function org-books-visit-book-log) "- %U %?" :prepend t)))

+end_src