Create texinfo files with org-mode for your personal notes ========================================================== Build your Personal Knowledge Base with org-mode and Texinfo ------------------------------------------------------------ Org-mode is a wonderful system and for many people the main reason to start with Emacs. Org-mode is easy to use, powerful and a great environment to create and maintain your personal notes, organize your to-do items, and much more. Org-mode provides an export function that supports many formats. Org-mode can export to Texinfo and directly to info. Texinfo is a brilliant hypertext system that predates HTML. You access it with `info`, which is a text mode application. The content consists of a number of nodes. Each node is an information element. You access the nodes through menus, hyperlinks, and indices. Also you can "walk" through a info file with keys like `[` and `]`. See `info info`. Personal Knowledge Base with Texinfo ------------------------------------ Texinfo is a great way to access your Personal Knowledge Base. Texinfo has been developed to create manuals. So it is specially made to supply you with structured information. Texinfo is used by GNU as it's documentation system. Some other open source applications provide their documentation in the texinfo format, like ZSH. Texinfo is also a great medium for your personal notes. Using info to fetch your notes is very fast and most often requires just a few key strokes. See [my page: Texinfo as Personal Knowledge Base]. Type of information ------------------- Creating a Personal Knowledge Base with Texinfo is best suited for information that you write once and then retrieve it multiple times. Once you have written an org file with your notes, it is easy to update and create an updated info file from it. I use it for describing tasks that I do infrequent, like installing a new server, using Docker, manipulation PDF files, my notes on using ledger, and so on. I document all the necessary steps, in the right order, and any additional information. Write with org-mode -------------------- For each subject I create a separate org-mode file, f.e. an org-mode file for OpenBSD notes, an org-mode file for FreeBSD notes, one for Raspberry Pi OS notes, etcetera. In these files, I use three levels of headers: * Level 1 header for the main sections. * Level 2 headers, one for each subsection within the main section. * Level 3 headers, to create sub-subsections in the subsections, when needed. In most org-mode files that I use this way, I have several level 1 headers, to break up the information in logical sections. Within each section I have several level 2 headers for the subsections. In some subsections I break up the information in sub-subsections, using level 3 headers. Verbatim text ------------- For verbatim text, like code, commands, and so on, I use an org-mode block that starts with `#+begin_example` and ends with `#+end_example`. With the keybindings this is easy to enter. * Mark the block * Hit `C-c C-,` followed by `e` (Hold the control key, hit "c" followed by ".". Release the control key and hit "e"). Bullet list ----------- Bullet lists can be used in Texinfo. Just enter these in the normal org-mode way: - First item - Second item - Another item Set the Texinfo specific export settings ---------------------------------------- At the top of the org-mode document, add some keywords with their settings. #+TITLE: The title of the document #+TEXINFO_DIR_CATEGORY: Personal notes #+TEXINFO_DIR_TITLE: The title in the top "dir" document #+TEXINFO_DIR_DESC: The description shown in the top "dir" document The title will become the name of the Top node. The dir-categorie is the categorie, where your info file will appear in the top-level menu. I use "Personal notes" for all my own info files, so they appear together in the top-level menu, sorted alphabetically. The title in the top "dir" document (TEXINFO_DIR_TITLE) creates the menu entry in the top level menu. This has to be in the format `description: (file-name-without-extension).` This consists of three parts: * description: the text that will appear in the top level menu, so write it as a menu item. The colon direct after the text is mandatory. * file-name between parenthesis: this is the file info has to open. Use the file name of your org-file, without the ".org" extension. * a dot: close the line with a dot direct after the closing parenthesis. The dir-title will become the menu entry in the top-level menu. See also the GNU info node on [Texinfo specific export settings]. This is a small example: #+TITLE: FreeBSD Notes #+TEXINFO_DIR_CATEGORY: Personal notes #+TEXINFO_DIR_TITLE: FreeBSD Notes: (freebsd-notes). #+TEXINFO_DIR_DESC: My personal FreeBSD notes Creating indices ---------------- In info you can search for text, but also search in the index. Indices can help you find the required information quicker. Completion is available when searching in index. which makes indices even more valuable. Create a lot of index entries, so you can later find things more efficient. Adding a index entry .................... Use the export command `#+CINDEX:`, f.e.: #+CINDEX: GPT partitioning Like all the export settings and commands, `#+CINDEX:` ends with a colon. Don't forget to type it. Write the CINDEX line just below the header for the specific node. When you use the index in info and jump to the index, you will end in the right position. Close the org-mode file with an Index headline .............................................. To activate the index entries, add the following block at the end of your org-mode file: * Index :PROPERTIES: :INDEX: cp :END: This will create a node at the end of your info file with the index entries. Without this, you can not search in the index. The properties block shown above is needed for this. Searching with index entries ............................ When your info file is in place, and you open it in info, you can search with `i`-key. When you have entered the CINDEX mentioned above, and you have opened the info file in info, you hit "i", followed by GPT and the tab-key. This will complete to "GPT partitioning". Hit the enter-key, and info will jump to the specific node with this index entry. When there are more index entries with your search term, you can jump to the next search result with `,`-key. Again, this is very fast and efficient. Export from org-mode to Texinfo ------------------------------- Org-mode support two export methods: * `org-texinfo-export-to-texinfo` * `org-texinfo-export-to-info` When you export to texinfo, and not to info, you can edit your texinfo file before converting that to info with makeinfo. Substitute @uref with @ref -------------------------- When you create a link to another info file, that you are also writing in org-mode, just create an org-mode link to that file. When you have org-mode links to other texinfo files, the export function will create a `@uref` link. A `@uref` link will become just plain text in the final info file. When you substitute `@uref` with `@ref` before running makeinfo, the link will become an active link. You have to alter the text between the curly braces to. Export from org-mode: @uref{org-file-name.org, Header title} You have to convert this to: @ref{org-file-name} After this correction, makeinfo will create an active link to `org-file-name.info` in your infor file. This way you can jump in info to the target of the link with the enter key. Simple shell script to perform the substitution ............................................... #!/bin/sh ed $1 <<\EOF H g/^@uref/s/\..*}/}/ g/^@uref/s/^@uref/@ref/ wq EOF You can run this from the command line with the name of the texi file as argument. Convert the texinfo file to an info file ---------------------------------------- makeinfo --no-validate <texinfo-file> The --no-validate is needed when there is a link to another info file in the texinfo, that does not exist yet. Add the info file to your knowledge base ---------------------------------------- On your system, you will find the info files probably in `/usr/share/info` or `/usr/local/share/info`. These are the documentation files for the applications that are installed by the installer or your package manager. Create a separate directory for all your personal info files, like `~/.info`. Setup an environment variable named INFOPATH to this directory, and close with a colon, like: export INFOPATH=/home/<username>/.info: Move the info file to this directory, and run: install-info --info-dir=./ <info-file> See also [my page: Texinfo as Personal Knowledge Base]. Now open `info`. You will see a block with menu entries to your personal notes as well all the menu entries to the info files installed by your installer or package manager. Automation ---------- Let your computer do the work for you, where possible. * Use a snippet system like yasnippet with a template for your org-files * Create a Makefile to run the shell script with the substitution for uref lines and run makeinfo and install-info command. Have fun! Last edited: $Date: 2023/05/15 14:29:26 $ * EOF *