Track your reading with read.csv
Ever since I started organizing my tasks and journaling with a custom todo.txt, Iāve been looking for other cluttered parts of my life to simplify. My reading is one of those. I love reading, but Iāve always had trouble keeping track of my reading. In particular a single to-read list and a single place for reading notes are, I think, essential for deep and reflective reading. But Iāve always failed at these. Every few years I got fed up with my uselessly scattered hodgepodge of reading lists, and so I went through them all and made a sleek new list⦠only to see it degenerate into the same old chaos within a few months. I often took notes on what I read, somewhere, but⦠dagnabbit, where did I put those notes? I always lost them, or stopped taking notes because they werenāt within easy reach.
Even the basic task of keeping track of what I read hasnāt been straightforward. For a few years Iāve been using Goodreads, but it has a few problems. Itās hard to track your reading of rare or old books with Goodreads, because you probably have to add them to the catalog yourself. Its main draw is that itās also a social network, but I can only remember one time that I ever interacted with a friend on there. With every passing year it looks more and more like a graveyard, and complaints by its users have been getting louder. The most useful part of the site is the book reviews, but you donāt need a Goodreads account for that. As for the other social book sites, theyāre not any better than Goodreads.
So Iāve finally abandoned Goodreads, and now (as we speak!) I am basking in the glory of a unified approach to keeping track of my reading, my to-read list, and my reading notes. One list, hundreds of lines, zero headache. Here we go.
The end result
Weāll get into how to set it up, but here is a bit of my read.csv, where each column is distinguished by a color:
So now I can pull up my list quicker than going into an app, and I can write notes that wonāt get lost, and I can easily organize my to-read lists as well: the ācurrently readingā section above is followed by some short high-priority āwill readā lists, followed by a long ādone readingā list, followed by a bunch of low-priority āmaybe will readā lists.
Wow, that format looks cumbersome, you might be saying with snicker. Writing out nine columns every time you want to jot down an interesting title?? No, because I can jot them down as a comment (starting with \
or any other character of your choosing), and then later use an AutoHotkey shortcut (Ctrl+Shift+R) to convert it to an entry, leaving only the Bookshelf column to fill in manually:
If itās an audiobook, I also add an audio symbolājust a few keystrokes, thanks to my text expander.
That last line, like many of my to-reads, is already CSV-formatted because it was exported from my Goodreads āWant to Readā shelf. (In that case, Date Started is the Date Added from Goodreads.)
But the best thing about my read.csv is not just that itās quick or pleasant to use. Itās actually changing the way I read for the better: having my notes always in view motivates me to take notes. And not just on my reading. Iāve begun to track courses, podcasts, and documentaries in there tooāany educational or reflective media consumption thatās worth writing down.
If you want to try it yourself, hereās how.
1. Download your Goodreads data
If youāre on Goodreads, the first thing you need to do is export your library. This will give you a CSV file. Open it up and delete all the columns you donāt need.
If youāre not on Goodreads, simply create a blank CSV file. Onward!
2. Get the Rainbow CSV extension for VS Code
You could manage your reading list in Excel or another spreadsheet app, but then you lose the advantages of working in plain text with a good text editor. For me thatās VS Code, so I poked around and found the Rainbow CSV extension, which provides three key functions for our list:
- Highlights each column in a different color
- Multi-cursor selection and editing of columns
- Filter and sort data with SQL-like queries
For quicker sorting by a particular column (with a hotkey instead of a query), Iām using the Stable Sort extension.
For a hotkey to select a title (i.e. everything between the nearest semicolons) Iām using the Select By extension.
I also added the following lines to VS Codeās settings.json
. (Adjust the font size according to your screen, if you wish.)
"[csv (semicolon)]": {
"editor.quickSuggestions": false,
"editor.wrappingIndent": "deepIndent",
"editor.fontSize": 16
},
3. Make a hotkey to create new entries
Typing out nine columns for every entry is a pain, so instead I made an AutoHotkey script that takes the current line and turns it into an entry, with todayās date as Date Started. If the line has a comment character at the beginning, it automatically disappears. If I already added the ISBN after the title (after a semicolon), then it fills the ISBN column in the new entry. Hereās the script, assigned to the hotkey Ctrl+Shift+R:
^+r::
oCB := ClipboardAll
Clipboard := ""
Send ^x
Sleep,50
beforeText = curr`; `;
afterText = `; `;`#%A_YYYY%-%A_MM%-%A_DD%`;`;1
Clipboard := beforeText . Trim(Clipboard, "`r`n\") . (InStr(Clipboard, "`;") ? "" : "`; ") . afterText . "`r`n"
Send ^v
Sleep,50
Clipboard := oCB
Send {Left 3}
Sleep,50
Send {Ctrl Up}{Shift Up}
Return
For adding the Date Finished, I have another hotkey, Ctrl+Shift+D:
^+d::
SendInput {#}%A_YYYY%-%A_MM%-%A_DD%
return
Caveats and limitations
Some things to watch out for:
- Every column in every row has to have a value, even if itās just a space, otherwise Rainbow CSV throws a fit when selecting that entire column. Thatās why all incomplete rows (like jotted-down notes) have to be commented out.
- Quote marks surrounding a column are also a no-go. Thatās why Iām using semicolons as separators instead of commas, so that I donāt have to quote every column containing a comma. That means that I canāt use semicolons in my notes, but⦠eh, who needs āem anyway.
- Entries canāt span multiple lines, and that means I have to write out my notes on a single line. But for me thatās an acceptable tradeoff for being able to keep my notes always in view.
- Multi-column editing is simplest on columns with a consistent format (in terms of number of words), so Iām using only single words in the Bookshelves column:
rubyrails
,dramapoetry
, andeconpolitics
, for example.
Other possibilities
I donāt do these things with my read.csv, but you might want to:
- If you want to include your Kindle notes and highlights in your read.csv, you can export them as plain text, replace line breaks with some other separator (see caveat #3 above), and then paste them into your notes column in read.csv. But if you have a lot of notes and highlights, prepare for a lot of clutter.
- If you want to bring in an element of social sharing, you can store your read.csv on Dropbox and use the Dropbox JavaScript API to display all or some lines from the file in a webpage. I store mine in Dropbox, but mainly so that I can edit it on the go with the Simple Text app. Iām not making my read.csv publicly viewable because my reading notes are for my own reflection, not for the world to see, but at some point Iāll think of a better way to share my reading journey using read.csv.
Iām sure you could add on to this list. With plain text, the possibilities are endless.