Literate Programming IDE built in Elisp programming language and OrgMode markup language - Key Features
This document summarizes the features of a highly customized Literate Programming IDE built using Emacs Lisp and Emacs Org Mode. If you are a programmer, please open the accompanying ide.org file on Github to see the implementation.
Configured org-babel to expand noweb references (\<\<Some Block\>\>) by default on tangling and evaluation, but to keep them unexpanded during export (e.g., to PDF) for improved readability.
Eliminated the repetition of leading text before noweb targets in expanded code, ensuring cleaner tangled code.
Implemented custom functions ( anup/goto-definition, anup/goto-usage) to intelligently jump between noweb definitions ( :noweb-ref) and their usages (\<\<Target\>\>) within the Org buffer. This feature is seamlessly integrated with xref and dumb-jump.
Developed a system to automatically insert and update clickable links within the Org file, showing where code blocks are defined and where they are used. This includes functions for:
find-definitions: Identifies all:noweb-refdefinitions and their line numbers.find-usages: Identifies all noweb targets (\<\<Target\>\>) and their usage locations.insert-literate-links0: Orchestrates the deletion of old links, insertion of blank placeholders, and population of actual line-numbered, hyperlinked definitions and usages.
Configured org-babel to raise errors if noweb references fail to resolve across all languages, ensuring code integrity.
Enabled org-hide-emphasis-markers for clean display of italics, bold, strikethrough, underline, code, and verbatim text.
- Utilizes
org-starlessto hide leading asterisks in Org headings, providing a cleaner outline view. - Customized font families, sizes, backgrounds, and foregrounds for different Org heading levels (e.g., using “Arcanite Slab” and specific color schemes), enhancing visual hierarchy.
Integrated adaptive-wrap and visual-line-mode to ensure wrapped lines maintain proper indentation, improving readability of long paragraphs.
- Set
org-startup-foldedto “nofold” to show all content unfolded by default, except forPROPERTIESdrawers. org-hide-drawer-startuphides result and other drawers on file open, reducing visual clutter.- (Previously) Implemented a feature to hide source blocks marked with
:hiddenon file startup, encouraging a prose-first reading experience.
- Configured
org-block-begin-line,org-block-end-line, andorg-blockfaces to provide subdued, GitHub-like light grey backgrounds for source blocks, and less obtrusive delimiters. - Enabled
rainbow-modein Emacs Lisp buffers to display hex color codes, aiding theme customization. - Customized the appearance of
:PROPERTIES:drawers and special keywords with subdued foregrounds and white backgrounds.
Enhanced cursor color to “red” for improved visibility across various themes.
Enabled org-fontify-whole-block-delimiter-line and org-fontify-whole-heading-line for consistent background coloring of entire heading and source block delimiter lines.
Utilizes org-variable-pitch to intelligently switch between serif (Alegreya=/=Atkinson Hyperlegible) for prose and monospace for code/checkboxes, ensuring consistent vertical alignment.
Implemented org-sticky-header to keep the current Org heading visible at the top of the buffer, with a custom, visually distinct separator ” ⏪ ” and hidden asterisks, enhancing navigation in long documents.
Configured dumb-jump as the backend for xref ( M-.) using consult-xref for interactive selection with preview. Custom rules were added to dumb-jump to specifically treat Org files as Clojure files, enabling effective definition-finding within Clojure/ClojureScript Org Babel blocks.
Configured ob-shell to load .bashrc aliases and environment variables, ensuring consistent shell behavior within Org Babel code blocks.
Set org-export-with-sub-superscripts to {} to prevent underscores and carets from being misinterpreted as subscripts/superscripts in exported documents, while still allowing explicit {} -enclosed subscripts/superscripts.