Giter Club home page Giter Club logo

org-books's Introduction

org-books

https://img.shields.io/travis/lepisma/org-books/master.svg https://melpa.org/packages/org-books-badge.svg https://stable.melpa.org/packages/org-books-badge.svg

Reading list management using org-mode. A sample list lives on my wiki here.

./screen.gif

Quickstart

org-books is available on melpa.

;; 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'.
  • To add books manually, use org-books-add-book function. To add from urls, call org-books-add-url (or use org-books-cliplink if url is in clipboard).
  • To give ratings, go to the entry and call org-books-rate-book.
  • While filing a book, org-books-file-depth tells which headings are to be considered as a category (like fiction or something).
  • org-books-add-to-top (default t) tells whether to add the book at the top or bottom under the selected heading.

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:

(print (org-books-get-details-amazon "https://www.amazon.in/Algebra-Chapter-Graduate-Studies-Mathematics/dp/0821847813/"))
("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:

  • Manual (input: title, author etc.)
  • Amazon (input: url)
  • Goodreads (input: url)
  • Openlibrary (input: url)
  • ISBN (input: ISBN, dispatches openlibrary url source)

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

(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)))

Using url from clipboard

(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)))")))

Capturing reading logs

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

*** 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 ...

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

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

org-books's People

Contributors

dariuskramer avatar lagman avatar lepisma avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.