Building up my tech notes
| geek, supernote- Added extra CSS to force images to fit on the page
- Updated shell script to use EPUB for more formats
A- wants me to sit with her at bedtime. She also wants to read a stack of books until she gets sleepy. This means I sometimes have an hour (or even two) of sitting quietly with her which I can use for writing, drawing, reading, or knitting, as long as I'm quiet. ("Mama, keepp your thoughts to yourself!")
My Supernote A5X supports EPUBs and PDFs, but doesn't support HTML files or my library's e-book platform (Libby), and I'm not too keen on the Kindle app. So I need to load it up with my own collection of books, manuals, API documentation, and notes.
Org Mode can export to EPUBs and PDFs well enough. If I make the output file a symbolic link to the same file in the Dropbox folder that's synchronized with my Supernote, I can re-export the EPUB and it will end up in the right place when I sync. I've started accumulating little snippets from the digest of my reading highlights, since putting them into Org Mode allows me to organize them and summarize them in different ways. It feels good to be collecting and organizing things I'm learning.
I plan to use this reading time to skim documentation for interesting things, since sometimes the challenges are more about knowing something exists and what it's called. Then I can copy the digests into my reference.org and export it as an EPUB or PDF, review that periodically, and maybe add some shortcuts to my Emacs configuration so that I can quickly jump to lines in my reference file.
HTML
The Supernote doesn't support HTML files, but I can convert HTML to
PDFs with pandoc file.html -t latex -o file.pdf
. This shell script
copies files to my INBOX directory, converting HTML files along the way:
#!/bin/bash INBOX=~/Dropbox/Supernote/INBOX for FILE in "$@"; do if [[ "$FILE" == *.html ]]; then ebook-convert "$FILE" $INBOX/$(basename "$FILE" .html).epub --extra-css 'img { max-width: 100% !important; max-weight: 100% !important }' # or pdf: wkhtmltopdf --no-background "$FILE" $INBOX/$(basename "$FILE" .html).pdf elif [[ "$FILE" == *.xml ]]; then dbtoepub "$FILE" -o $INBOX/$(basename "$FILE" .xml).epub elif [[ "$FILE" == *.texi ]]; then texi2pdf "$FILE" -o $INBOX/$(basename "$FILE" .texi).pdf elif [[ "$FILE" == *.org ]]; then emacs -Q --batch "$FILE" --eval "(progn (package-initialize) (use-package 'ox-epub) (org-epub-export-to-epub))" cp "${FILE%.*}".epub $INBOX else cp "$FILE" $INBOX fi done
Manpages
I'd like to be able to refer to manpages. I couldn't figure out how to get man -H
to work with the Firefox inside a snap (it complained about having elevated permissions). I installed man2html
and found the manpage for xdotool. zcat /usr/share/man/man1/xdotool.1.gz | man2html > /tmp/xdotool.html
created the HTML file, and then I used ebook-convert /tmp/xdotool.html /tmp/xdotool.epub
to create an EPUB file.
I tried getting the filename for the manpage by using the man
command in Emacs, but I couldn't figure out how to get the filename
from there. I remembered that Emacs has a woman
command that
displays manpages without using the external man
command. That led
me to woman-file-name
, which gives me the path to the manpage given
a command. Emacs handles uncompressing .gz files automatically, so
everything's good to go from there.
(defvar my-supernote-inbox "~/Dropbox/Supernote/INBOX") (defun my-save-manpage-to-supernote (path) (interactive (list (woman-file-name nil))) (let* ((base (file-name-base path)) (temp-html (make-temp-file base nil ".html"))) (with-temp-buffer (insert-file-contents path) (call-process-region (point-min) (point-max) "man2html" t t) (when (re-search-backward "Invalid Man Page" nil t) (delete-file temp-html) (error "Could not convert.")) (write-file temp-html)) (call-process "ebook-convert" nil (get-buffer-create "*temp*") nil temp-html (expand-file-name (concat base ".epub") my-supernote-inbox)) (delete-file temp-html)))
Info files
I turned the Elisp reference into a PDF by going to doc/lispref
in
my Emacs checkout and typing make elisp.pdf
. It's 1470 pages long,
so that should keep me busy for a while. Org Mode also has a make
pdf
target that uses texi2pdf to generate doc/org.pdf
and
doc/orgguide.pdf
. Other .texi files could be converted with
texi2pdf, or I can use makeinfo
to create Docbook files and then use
dbtoepub
to convert them as in the shell script in the HTML section
above.
Python documentation
I wanted to load the API documentation for autokey into one page for easy reference. The documentation at https://autokey.github.io/index.html was produced by epydoc, which doesn't support Python 3. I got to work using the sphinx-epytext extension. After I used sphinx-quickstart
, I edited conf.py to include extensions = ['sphinx.ext.autodoc', 'sphinx_epytext', 'sphinx.ext.autosummary']
, and I added the following to index.rst:
Welcome to autokey's documentation! =================================== .. autoclass:: autokey.scripting.Keyboard :members: :undoc-members: .. autoclass:: autokey.scripting.Mouse :members: :undoc-members: .. autoclass:: autokey.scripting.Store :members: :undoc-members: .. autoclass:: autokey.scripting.QtDialog :members: :undoc-members: .. autoclass:: autokey.scripting.System :members: :undoc-members: .. autoclass:: autokey.scripting.QtClipboard :members: :undoc-members: .. autoclass:: autokey.scripting.Window :members: :undoc-members: .. autoclass:: autokey.scripting.Engine :members: :undoc-members:
Then make pdf
created a PDF. There's probably a way to get a proper
table of contents, but it was a good start.