summaryrefslogtreecommitdiff
path: root/smart-documents.org
diff options
context:
space:
mode:
Diffstat (limited to 'smart-documents.org')
-rw-r--r--smart-documents.org493
1 files changed, 266 insertions, 227 deletions
diff --git a/smart-documents.org b/smart-documents.org
index 7722df6..853e637 100644
--- a/smart-documents.org
+++ b/smart-documents.org
@@ -11,42 +11,46 @@
#+LATEX_HEADER: \usepackage{lettrine}
#+LATEX: \begin{abstract}
-The idea of /Smart Documents/ came to me as I was reflecting on how to improve
-the document creation process in my workplace. The GNU Emacs editor had
-captured my imagination and I wanted to create an accessible and highly
-productive text editor to benefit my organization. In this paper, I'll lay out
-my vision for the /Smart Document/, a file containing both text destined to the
-reader, and code describing how to update, validate, and present this text;
-then, I'll weave my personal GNU Emacs customizations with a tutorial. This
-paper is a /Smart Document/ itself!
+The idea of /Smart Documents/ came to me as I was reflecting on
+how to improve the document creation process in my workplace. The
+GNU Emacs editor had captured my imagination and I wanted to
+create an accessible and highly productive text editor to benefit
+my organization. In this paper, I'll lay out my vision for the
+/Smart Document/, a file containing both text destined to the
+reader, and code describing how to update, validate, and present
+this text; then, I'll weave my personal GNU Emacs customizations
+with a tutorial. This paper is a /Smart Document/ itself!
#+LATEX: \end{abstract}
* Introduction
-GNU Emacs is most often used as a text editor. It would be unfair to say it is
-just that, because Emacs is capable of so much more. The utmost level of
-customization is afforded by enabling the user to rewrite /any/ part of the
-source code and observe the editor's modified behavior in real time. Since its
-inception in 1984, GNU Emacs has grown to be much more than a full-featured,
-high-productivity text editor---new /modes/ have been written to interact with
-hundreds of file formats, including =.txt=, =.pdf=, =.jpg=, =.csv=, and =.zip=
-just to name a few. This paper itself was written in /Org mode/, a collection
-of functions enabling the harmonious mixing of code and comments in view of
-publication: this is the endgame of /literate programming/, and the basis of my
+GNU Emacs is most often used as a text editor. It would be unfair
+to say it is just that, because Emacs is capable of so much
+more. The utmost level of customization is afforded by enabling
+the user to rewrite /any/ part of the source code and observe the
+editor's modified behavior in real time. Since its inception in
+1984, GNU Emacs has grown to be much more than a full-featured,
+high-productivity text editor---new /modes/ have been written to
+interact with hundreds of file formats, including =.txt=, =.pdf=,
+=.jpg=, =.csv=, and =.zip= just to name a few. This paper itself
+was written in /Org mode/, a collection of functions enabling the
+harmonious mixing of code and comments in view of publication:
+this is the endgame of /literate programming/, and the basis of my
vision for /Smart Documents/.
-The following sections were laid out very deliberately. When we start Emacs,
-the source code blocks contained in this document are evaluated
-sequentially---our editing environment is constructed in real time as we
-execute the blocks in order. For instance, we only begin loading packages once
-we ensured ~use-package~ is working properly.[fn::For more information on the
-detailed steps Emacs takes upon starting, refer to
+The following sections were laid out very deliberately. When we
+start Emacs, the source code blocks contained in this document are
+evaluated sequentially---our editing environment is constructed in
+real time as we execute the blocks in order. For instance, we only
+begin loading packages once we ensured ~use-package~ is working
+properly.[fn::For more information on the detailed steps Emacs
+takes upon starting, refer to
[[https://www.gnu.org/software/emacs/manual/html_node/elisp/Startup-Summary.html]].]
Customizing Emacs goes far, far beyond rewriting sections of this
-document---feel free to experiment and discover. Here are three commands that
-will help you understand all the symbols in this file, if you are browsing this
-paper within Emacs itself:
+document---feel free to experiment and discover. Here are three
+commands that will help you understand all the symbols in this
+file, if you are browsing this paper within Emacs itself:
- ~C-h f~ :: describe function
- ~C-h v~ :: describe variable
@@ -102,9 +106,9 @@ the first time.
** TODO User details
-One advantage of working with /Smart Documents/ is that they can automatically
-be populated with our details in the header, footer, or other appropriate
-element.
+One advantage of working with /Smart Documents/ is that they can
+automatically be populated with our details in the header, footer,
+or other appropriate element.
#+NAME: user-details-get
#+BEGIN_SRC emacs-lisp
@@ -151,12 +155,13 @@ https://git-scm.com/download/win]
:END:
The contents of this Section was automatically moved to
-=~/.emacs.d/init.el=.
-Use `sd-pack-section' to copy the contents back into this section.
+=~/.emacs.d/init.el=. Use `sd-pack-section' to copy the contents
+back into this section.
-This is the very first user-editable file loaded by Emacs.[fn::This feature
-became available in version 27.1.] In it, we disable GUI elements that would
-otherwise be loaded and displayed once Emacs is ready to accept user input.
+This is the very first user-editable file loaded by
+Emacs.[fn::This feature became available in version 27.1.] In it,
+we disable GUI elements that would otherwise be loaded and
+displayed once Emacs is ready to accept user input.
It can be found here: [[file:early-init.el]]
@@ -166,9 +171,9 @@ It can be found here: [[file:early-init.el]]
:END:
#+BEGIN_QUOTE
-Traditionally, file =~/.emacs= is used as the init file, although Emacs also
-looks at =~/.emacs.el=, =~/.emacs.d/init.el=, =~/.config/emacs/init.el=, or
-other locations.
+Traditionally, file =~/.emacs= is used as the init file, although
+Emacs also looks at =~/.emacs.el=, =~/.emacs.d/init.el=,
+=~/.config/emacs/init.el=, or other locations.
From the GNU
website[fn::[[https://www.gnu.org/software/emacs/manual/html_node/emacs/Init-File.html]]]
@@ -180,8 +185,9 @@ If no file is found, Emacs then loads in its purely vanilla state.
** Profiling --- start
-We start the profiler now , and will interrupt it in Section [[Profiling ---
-stop]]. We will then present profiling report in Section [[Profiling --- report]].
+We start the profiler now , and will interrupt it in Section
+[[Profiling --- stop]]. We will then present profiling report in
+Section [[Profiling --- report]].
#+NAME: profiler-start
#+BEGIN_SRC emacs-lisp :tangle yes
@@ -215,15 +221,17 @@ We begin by defining a function to open this very file.
** Meta-files
-In this section, we'll be tidying up the =.emacs.d/= directory---by default,
-many Emacs packages create files useful for themselves in our
-~user-emacs-directory~. This leads to undesirable clutter. Certain packages
-create files that log recently visited files ([[Recently visited files]]); log
-location of known projects ([[Projects' bookmarks]]); log location in recently
-visited files ([[Location in previously visited file]]) The commonality
-between all these files is that they tend to reference... other files. Thus, I
-decided to refer to them as meta-files. First, let's designate a folder to collect
-our meta-files together:
+In this section, we'll be tidying up the =.emacs.d/=
+directory---by default, many Emacs packages create files useful
+for themselves in our ~user-emacs-directory~. This leads to
+undesirable clutter. Certain packages create files that log
+recently visited files ([[Recently visited files]]); log location of
+known projects ([[Projects' bookmarks]]); log location in recently
+visited files ([[Location in previously visited file]]) The
+commonality between all these files is that they tend to
+reference... other files. Thus, I decided to refer to them as
+meta-files. First, let's designate a folder to collect our
+meta-files together:
#+BEGIN_SRC emacs-lisp :tangle yes
(setq sd-meta-files-location (concat user-emacs-directory "meta/"))
@@ -255,9 +263,9 @@ our meta-files together:
*** Custom file
-Load settings created automatically by GNU Emacs Custom. (For example, any
-clickable option/toggle is saved here.) Useful for fooling around with ~M-x
-customize-group <package>~.
+Load settings created automatically by GNU Emacs Custom. (For
+example, any clickable option/toggle is saved here.) Useful for
+fooling around with ~M-x customize-group <package>~.
#+NAME: custom-file-location
#+BEGIN_SRC emacs-lisp :tangle yes
@@ -299,8 +307,9 @@ We also set the dimensions of subsequent frames:
*** GNU/Linux
-These settings affect the first and subsequent frames spawned by Emacs in
-GNU/Linux. Frame transparency increases when focus is lost.
+These settings affect the first and subsequent frames spawned by
+Emacs in GNU/Linux. Frame transparency increases when focus is
+lost.
#+BEGIN_SRC emacs-lisp :tangle yes
(when (and (display-graphic-p) (string-equal system-type "gnu/linux"))
@@ -310,11 +319,12 @@ GNU/Linux. Frame transparency increases when focus is lost.
** Secrets
-The code contained in the =secrets.org= file is loaded by Emacs, but not
-rendered in this PDF for the sake of privacy. It contains individually
-identifying information such as names and e-mail addresses, which are used to
-populate Org templates (Section [[~org-mode~]]). You need to create this
-=secrets.org= file, as it is ignored by =git= by default.
+The code contained in the =secrets.org= file is loaded by Emacs,
+but not rendered in this PDF for the sake of privacy. It contains
+individually identifying information such as names and e-mail
+addresses, which are used to populate Org templates (Section
+[[~org-mode~]]). You need to create this =secrets.org= file, as it is
+ignored by =git= by default.
#+BEGIN_SRC emacs-lisp :tangle yes
(let ((secrets (concat user-emacs-directory "secrets.org")))
@@ -323,20 +333,22 @@ populate Org templates (Section [[~org-mode~]]). You need to create this
* Keyboard shortcuts
-The following bindings strive to further enhance CUA mode.[fn::Common User
-Access. This is a term coined by IBM which has influenced user navigation cues
-on all modern desktop OSes. From IBM's CUA, we get the =Ctrl-c= and =Ctrl-v=
-keyboard shortcuts.]
+The following bindings strive to further enhance CUA
+mode.[fn::Common User Access. This is a term coined by IBM which
+has influenced user navigation cues on all modern desktop
+OSes. From IBM's CUA, we get the =Ctrl-c= and =Ctrl-v= keyboard
+shortcuts.]
#+BEGIN_SRC emacs-lisp :tangle yes
(cua-mode)
#+END_SRC
-What follows are the most useful keybindings, as well as the keybindings to the
-functions we defined ourselves. It doesn't matter if we haven't defined the
-functions themselves yet; Emacs will accept a keybinding for any symbol and
-does not check if the symbol's function definition exists, until the keybinding
-is pressed.
+What follows are the most useful keybindings, as well as the
+keybindings to the functions we defined ourselves. It doesn't
+matter if we haven't defined the functions themselves yet; Emacs
+will accept a keybinding for any symbol and does not check if the
+symbol's function definition exists, until the keybinding is
+pressed.
** Files
@@ -466,12 +478,13 @@ It seems that starting with Emacs 27.1, Control + mousewheel works.
** Navigation
-=Alt= (=Meta=) is the privileged key for motion in a buffer. It is followed by
-an optional numerical argument, and a movement command. You may navigate in a
-buffer by keeping =Alt= pressed, optionally inputting a number from the keypad
-or number row, then pressing any of the following movement keys: =j=, =k=, =h=,
-and =l=. You will move in that direction in the amount of the numerical
-argument.
+=Alt= (=Meta=) is the privileged key for motion in a buffer. It is
+followed by an optional numerical argument, and a movement
+command. You may navigate in a buffer by keeping =Alt= pressed,
+optionally inputting a number from the keypad or number row, then
+pressing any of the following movement keys: =j=, =k=, =h=, and
+=l=. You will move in that direction in the amount of the
+numerical argument.
#+NAME: keybinding-navigation
#+CAPTION[Navigation keybindings]: Navigation keybindings.
@@ -532,13 +545,15 @@ We prevent Org mode from overriding preferred navigation keys.
** One-click workflows
-A major advantage of the Emacs document production system: arbitrarily
-complicated functions can be assigned to very simple keybindings. This means we
-can automate workflows up to a pretty absurd level.
+A major advantage of the Emacs document production system:
+arbitrarily complicated functions can be assigned to very simple
+keybindings. This means we can automate workflows up to a pretty
+absurd level.
*** Export to PDF
-PDF is probably the most prevalent file format for sharing static documents.
+PDF is probably the most prevalent file format for sharing static
+documents.
**** Document
@@ -570,7 +585,8 @@ Not only indent, but also clean up superfluous newlines.
* Packages
-Packages are collections of =.el= files providing added functionality to Emacs.
+Packages are collections of =.el= files providing added
+functionality to Emacs.
** Meta
@@ -594,7 +610,8 @@ List of package archives.
*** TODO Convenient package update
-One-function rollup of upgradeable package tagging, download and lazy install.
+One-function rollup of upgradeable package tagging, download and
+lazy install.
#+BEGIN_SRC emacs-lisp :tangle yes
@@ -602,8 +619,8 @@ One-function rollup of upgradeable package tagging, download and lazy install.
*** ~use-package~
-We ensure =use-package= is installed, as well as all packages described in this
-configuration file.
+We ensure =use-package= is installed, as well as all packages
+described in this configuration file.
#+BEGIN_SRC emacs-lisp :tangle yes
(unless (package-installed-p 'use-package)
@@ -619,9 +636,10 @@ configuration file.
Forgive me, for I have sinned.
-This is the 2^{nd} most significant customization after ~org-mode~. Enabling
-~evil-mode~ completely changes editing keys.[fn::For more information on =vi=
-keybindings, visit [[https://hea-www.harvard.edu/~fine/Tech/vi.html]].]
+This is the 2^{nd} most significant customization after
+~org-mode~. Enabling ~evil-mode~ completely changes editing
+keys.[fn::For more information on =vi= keybindings, visit
+[[https://hea-www.harvard.edu/~fine/Tech/vi.html]].]
#+BEGIN_SRC emacs-lisp :tangle yes
(use-package evil)
@@ -631,13 +649,14 @@ keybindings, visit [[https://hea-www.harvard.edu/~fine/Tech/vi.html]].]
** Spelling, completion, and snippets
-The following customizations open the doors to vastly increased typing speed
-and accuracy.
+The following customizations open the doors to vastly increased
+typing speed and accuracy.
*** Syntax checking
-We require a package to highlight syntax errors and warnings. The ~flycheck~
-package ensures we are aware of all our code's syntactical shortcomings.
+We require a package to highlight syntax errors and warnings. The
+~flycheck~ package ensures we are aware of all our code's
+syntactical shortcomings.
#+NAME: flycheck
#+BEGIN_SRC emacs-lisp :tangle yes
@@ -655,21 +674,22 @@ package ensures we are aware of all our code's syntactical shortcomings.
*** Insert template from keyword
-Thanks to ~yasnippet~, we can type certain keywords, then press =TAB=, to
-automatically insert a predefined text snippet. We can then navigate through
-the snippet by using =<tab>= (next field) and =<backtab>= (previous
-field).[fn::=<backtab>= is synonymous with pressing shift-tab.]
+Thanks to ~yasnippet~, we can type certain keywords, then press
+=TAB=, to automatically insert a predefined text snippet. We can
+then navigate through the snippet by using =<tab>= (next field)
+and =<backtab>= (previous field).[fn::=<backtab>= is synonymous
+with pressing shift-tab.]
-For instance: typing =src= then pressing =TAB= will expand the keyword to the
-following text:
+For instance: typing =src= then pressing =TAB= will expand the
+keyword to the following text:
: #+BEGIN_SRC emacs-lisp :tangle yes
:
: #+END_SRC
-We notice that emacs-lisp is highlighted---this is the first modifiable
-field. Many clever programming tricks can be performed with ~yasnippet~ to save
-us a ton of time with boilerplate text!
+We notice that emacs-lisp is highlighted---this is the first
+modifiable field. Many clever programming tricks can be performed
+with ~yasnippet~ to save us a ton of time with boilerplate text!
#+NAME: yasnippet
#+BEGIN_SRC emacs-lisp :tangle yes
@@ -696,8 +716,8 @@ us a ton of time with boilerplate text!
*** Versioning of files
-Wonderful Git porcelain for Emacs. Enables the administration of a Git
-repository in a pain-free way.
+Wonderful Git porcelain for Emacs. Enables the administration of a
+Git repository in a pain-free way.
#+BEGIN_SRC emacs-lisp :tangle yes
(use-package magit
@@ -724,9 +744,9 @@ This enables us to better manage our =.git= projects.
*** Jump to symbol's definition
-~dumb-jump~ is a reliable symbol definition finder. It uses different matching
-algorithms and heuristics to provide a very educated guess on the location of a
-symbol's definition.
+~dumb-jump~ is a reliable symbol definition finder. It uses
+different matching algorithms and heuristics to provide a very
+educated guess on the location of a symbol's definition.
#+BEGIN_SRC emacs-lisp :tangle yes
(use-package dumb-jump)
@@ -752,7 +772,9 @@ symbol's definition.
**** Smartly suggesting interactive search matches
-Wonderful counsellor!
+And he will be called Wonderful *Counselor*, Mighty God,
+Everlasting Father, Prince of Peace.
+
#+BEGIN_SRC emacs-lisp :tangle yes
(use-package counsel
@@ -798,8 +820,8 @@ Python is included by default on most Linux distributions.
*** Interacting with PDFs
-Org mode shines particularly when exporting to PDF---Org files can reliably be
-shared and exported to PDF in a reproducible fashion.
+Org mode shines particularly when exporting to PDF---Org files can
+reliably be shared and exported to PDF in a reproducible fashion.
#+BEGIN_SRC emacs-lisp :tangle yes
(use-package pdf-tools)
@@ -808,9 +830,10 @@ shared and exported to PDF in a reproducible fashion.
*** Accounting
-Ledger is a creation of John Wiegley's. It enables double-entry accounting in a
-simple plaintext format, and reliable verification of account balances through
-time.[fn::For more information, visit https://www.ledger-cli.org/.]
+Ledger is a creation of John Wiegley's. It enables double-entry
+accounting in a simple plaintext format, and reliable verification
+of account balances through time.[fn::For more information, visit
+https://www.ledger-cli.org/.]
#+BEGIN_SRC emacs-lisp :tangle yes
(use-package ledger-mode
@@ -819,8 +842,8 @@ time.[fn::For more information, visit https://www.ledger-cli.org/.]
("C-c C" . ledger-mode-clean-buffer))
#+END_SRC
-These reports can be generated within Emacs. It is quite useful to pipe their
-output to an automated ``smart document''.
+These reports can be generated within Emacs. It is quite useful to
+pipe their output to an automated ``smart document''.
#+BEGIN_SRC emacs-lisp :tangle yes
(setq ledger-reports
@@ -880,7 +903,8 @@ Get inspiration from ~ibuffer-sidebar~ and create a better sidebar.
*** Highlight ``color keywords'' in their color
-This highlights hexadecimal numbers which look like colors, in that same color.
+This highlights hexadecimal numbers which look like colors, in
+that same color.
#+BEGIN_SRC emacs-lisp :tangle yes
(use-package rainbow-mode
@@ -890,33 +914,35 @@ This highlights hexadecimal numbers which look like colors, in that same color.
*** +UTF-8 bullet points in =Org mode=+
-This section was removed, as it is more explicit to display the headline
-character for what it is: a collection of at least one asterisk.
+This section was removed, as it is more explicit to display the
+headline character for what it is: a collection of at least one
+asterisk.
* ~org-mode~
-Org mode is so significant that this section of the paper deserves its own
-introduction.
+Org mode is so significant that this section of the paper deserves
+its own introduction.
** Introduction
-Phew, after all this initialization, I can finally introduce Org mode! I am so
-*excited*.
+Phew, after all this initialization, I can finally introduce Org
+mode! I am so *excited*.
-Org mode replaces aword processor, a presentation creator, and a spreadsheet
-editor. The spreadsheet ability captures more than 80% use cases wherein one
-wishes to include a table in a text document destined for physical
-publication. (It is clear that Excel spreadsheets are /not/ destined for
-physical publication---simply attempt to print an Excel spreadsheet with the
-default settings.) In my opinion, Org mode matches all /useful/ features of
-the Microsoft Office suite 1-to-1.
+Org mode replaces aword processor, a presentation creator, and a
+spreadsheet editor. The spreadsheet ability captures more than 80%
+use cases wherein one wishes to include a table in a text document
+destined for physical publication. (It is clear that Excel
+spreadsheets are /not/ destined for physical publication---simply
+attempt to print an Excel spreadsheet with the default settings.)
+In my opinion, Org mode matches all /useful/ features of the
+Microsoft Office suite 1-to-1.
-What follows are customizations designed to make Org mode behave more like
-Microsoft Word. The end goal is, once again, to draw as many new users to Emacs
-as possible!
+What follows are customizations designed to make Org mode behave
+more like Microsoft Word. The end goal is, once again, to draw as
+many new users to Emacs as possible!
-Check out how much information Org mode keeps concerning the most recent
-header:
+Check out how much information Org mode keeps concerning the most
+recent header:
#+NAME: org-meta-info
#+BEGIN_SRC emacs-lisp :tangle no :results pp :exports both :cache yes
@@ -936,7 +962,8 @@ header:
*** Base folder
-Org base directory is in user home on GNU/Linux, or in =AppData= in MS Windows.
+Org base directory is in user home on GNU/Linux, or in =AppData=
+in MS Windows.
#+NAME: org-directory
#+BEGIN_SRC emacs-lisp :tangle yes
@@ -951,10 +978,11 @@ Org base directory is in user home on GNU/Linux, or in =AppData= in MS Windows.
** Org cosmetics
-First, we ensure the display of markup symbols for *bold*, /italic/,
-_underlined_ and +strikethrough+ text, and ensure our document appears indented
-upon loading.[fn::It /appears/ indented, but the underlying plaintext file does
-not contain tab characters!]
+First, we ensure the display of markup symbols for *bold*,
+/italic/, _underlined_ and +strikethrough+ text, and ensure our
+document appears indented upon loading.[fn::It /appears/ indented,
+but the underlying plaintext file does not contain tab
+characters!]
We then set values for many other Org-related cosmetic symbols.
@@ -968,21 +996,22 @@ We then set values for many other Org-related cosmetic symbols.
*** Dynamic numbering of headlines
-We enable the dynamic numbering of headlines in an Org buffer. We also set the
-numbering face to ~org-special-keyword~, which specifies a ~:background white~
-attribute. This is necessary because otherwise, the background of the numbering
-may be overridden by the ~TODO~ face attribute ~:background coral~.
+We enable the dynamic numbering of headlines in an Org buffer. We
+also set the numbering face to ~org-special-keyword~, which
+specifies a ~:background white~ attribute. This is necessary
+because otherwise, the background of the numbering may be
+overridden by the ~TODO~ face attribute ~:background coral~.
#+BEGIN_SRC emacs-lisp :tangle yes
(add-hook 'org-mode-hook 'org-num-mode)
(setq org-num-face 'org-special-keyword)
#+END_SRC
-By default, we hide Org document properties such as =#+TITLE=, =#+AUTHOR=, and
-=#+DATE=, because those keywords are defined when the document template is
-populated. We can nevertheless always access those properties and edit them
-manually, with a simple keyboard shortcut (cf. Section [[Open Org mode document
-properties]]).
+By default, we hide Org document properties such as =#+TITLE=,
+=#+AUTHOR=, and =#+DATE=, because those keywords are defined when
+the document template is populated. We can nevertheless always
+access those properties and edit them manually, with a simple
+keyboard shortcut (cf. Section [[Open Org mode document properties]]).
*** Document properties
@@ -1022,8 +1051,8 @@ properties]]).
*** Timestamps
-More literary timestamps are exported to LaTeX using the following custom
-format:
+More literary timestamps are exported to LaTeX using the following
+custom format:
#+BEGIN_SRC emacs-lisp :tangle yes
(setq org-time-stamp-custom-formats
@@ -1032,8 +1061,8 @@ format:
** Programming a Smart Documents
-The following languages can be used inside =SRC= blocks, in view of being
-executed by the Org Babel backend upon document export.
+The following languages can be used inside =SRC= blocks, in view
+of being executed by the Org Babel backend upon document export.
#+BEGIN_SRC emacs-lisp :tangle yes
(setq org-babel-load-languages
@@ -1054,31 +1083,33 @@ executed by the Org Babel backend upon document export.
** Agenda
-The agenda displays a chronological list of headings across all agenda files
-for which the heading or body contain a matching =org-time-stamp=.[fn::An
-=org-time-stamp= can be inserted with ~C-c .~ (period)]
+The agenda displays a chronological list of headings across all
+agenda files for which the heading or body contain a matching
+=org-time-stamp=.[fn::An =org-time-stamp= can be inserted with
+~C-c .~ (period)]
We open the agenda in a separate window.
#+BEGIN_SRC emacs-lisp :tangle yes
-(setq org-agenda-window-setup 'other-frame)
+ (setq org-agenda-window-setup 'other-frame)
#+END_SRC
** LaTeX export
-We'll be compiling our documents with LuaTeX. This will afford us some
-future-proofing, since it was designated as the successor to pdfTeX by the
-latter's creators.
+We'll be compiling our documents with LuaTeX. This will afford us
+some future-proofing, since it was designated as the successor to
+pdfTeX by the latter's creators.
-First, we define the command executed when an Org file is exported to
-LaTeX. We'll use =latexmk=, the Perl script which automagically runs binaries
-related to LaTeX in the correct order and the right amount of times.
+First, we define the command executed when an Org file is exported
+to LaTeX. We'll use =latexmk=, the Perl script which automagically
+runs binaries related to LaTeX in the correct order and the right
+amount of times.
Options and why we need them:
- ~-shell-excape~ :: required by minted to color source blocks
- ~-pdflatex=lualatex~ :: we use lualatex to generate our PDF
-- ~-interaction=nonstopmode~ :: go as far as possible without prompting user
- for input
+- ~-interaction=nonstopmode~ :: go as far as possible without
+ prompting user for input
#+BEGIN_SRC emacs-lisp :tangle yes
(setq org-latex-pdf-process
@@ -1089,9 +1120,9 @@ Options and why we need them:
*** Exporting timestamps
-We customize the format for org time stamps to make them appear monospaced in
-our exported LaTeX documents. This makes them visually distinguishable from
-body text.
+We customize the format for org time stamps to make them appear
+monospaced in our exported LaTeX documents. This makes them
+visually distinguishable from body text.
#+BEGIN_SRC emacs-lisp :tangle yes
(setq org-latex-active-timestamp-format
@@ -1102,7 +1133,8 @@ body text.
*** LaTeX packages
-The following packages are loaded for every time we export to LaTeX.
+The following packages are loaded for every time we export to
+LaTeX.
#+BEGIN_SRC emacs-lisp :tangle yes
(setq org-latex-packages-alist
@@ -1120,8 +1152,8 @@ The following packages are loaded for every time we export to LaTeX.
*** Colored source blocks in PDF export
-Little bonus for GNU/Linux users: syntax highlighting for source code blocks in
-LaTeX exports.
+Little bonus for GNU/Linux users: syntax highlighting for source
+code blocks in LaTeX exports.
#+BEGIN_SRC emacs-lisp :tangle yes
(when (string-equal system-type "gnu/linux")
@@ -1135,9 +1167,9 @@ LaTeX exports.
*** Cleaning directory after export
-Now, we set the files to be deleted when a LaTeX \rightarrow PDF compilation
-occurs. We only care about two files, in the end: the Org mode file for
-edition, and the PDF for distribution.
+Now, we set the files to be deleted when a LaTeX \rightarrow PDF
+compilation occurs. We only care about two files, in the end: the
+Org mode file for edition, and the PDF for distribution.
#+BEGIN_SRC emacs-lisp :tangle yes
(setq org-latex-logfiles-extensions
@@ -1149,16 +1181,16 @@ edition, and the PDF for distribution.
*** Chronological diary entries
-By default, Org agenda inserts diary entries as the first under the selected
-date. It is preferable to insert entries in the order that they were recorded,
-i.e. chronologically.
+By default, Org agenda inserts diary entries as the first under
+the selected date. It is preferable to insert entries in the order
+that they were recorded, i.e. chronologically.
#+BEGIN_SRC emacs-lisp :tangle yes
(setq org-agenda-insert-diary-strategy 'date-tree-last)
#+END_SRC
-What follows is an additional document class structures that can be exported in
-LaTeX.
+What follows is an additional document class structures that can
+be exported in LaTeX.
#+BEGIN_SRC emacs-lisp :tangle no
;; (add-to-list 'org-latex-classes
@@ -1172,23 +1204,25 @@ LaTeX.
*** Table of contents
-By default, body text can immediately follow the table of contents. It is
-however cleaner to separate table of contents with the rest of the work.
+By default, body text can immediately follow the table of
+contents. It is however cleaner to separate table of contents with
+the rest of the work.
#+BEGIN_SRC emacs-lisp :tangle yes
(setq org-latex-toc-command "\\tableofcontents\\clearpage")
#+END_SRC
-The following makes =TODO= items appear red and =CLOSED= items appear green in
-Org's LaTeX exports. Very stylish, much flair!
+The following makes =TODO= items appear red and =CLOSED= items
+appear green in Org's LaTeX exports. Very stylish, much flair!
** TODO Org links
-This is a mind-bending capacity of Org mode: we can assign arbitrary functions
-to be executed when a user follows an Org link. Org links appear like
-hyperlinks both in buffers and PDF exports---e.g. the following link to this
-very section, Section [[Org links]]---but their in-buffer behavior can be
-arbitrarily assigned.
+This is a mind-bending capacity of Org mode: we can assign
+arbitrary functions to be executed when a user follows an Org
+link. Org links appear like hyperlinks both in buffers and PDF
+exports---e.g. the following link to this very section, Section
+[[Org links]]---but their in-buffer behavior can be arbitrarily
+assigned.
#+BEGIN_SRC emacs-lisp :tangle no
(org-add-link-type
@@ -1204,21 +1238,23 @@ arbitrarily assigned.
* One-click workflows
-In this section, we'll implement useful one-click workflows. It comes later
-keybinding definitions for two reasons:
+In this section, we'll implement useful one-click workflows. It
+comes later keybinding definitions for two reasons:
1. To a new user, keybindings are more important than the precise
- implementation of the bound function---it is more important to know how to
- drive a car than how a car works.
-2. If the following subsections share the same name as the keybinding
- subsection (Section [[Keyboard shortcuts]]), the links will resolve to the
- earliest heading in the document, i.e. the keybinding subsection and not the
- subsection describing the `one-click workflow'.
+ implementation of the bound function---it is more important to
+ know how to drive a car than how a car works.
+2. If the following subsections share the same name as the
+ keybinding subsection (Section [[Keyboard shortcuts]]), the links
+ will resolve to the earliest heading in the document, i.e. the
+ keybinding subsection and not the subsection describing the
+ `one-click workflow'.
** TODO Export to PDF
-This reimplements the most common Org mode export: Org \rightarrow LaTeX
-\rightarrow PDF. The binding is defined in Section [[Export to PDF]].
+This reimplements the most common Org mode export: Org \rightarrow
+LaTeX \rightarrow PDF. The binding is defined in Section [[Export to
+PDF]].
#+BEGIN_SRC emacs-lisp :tangle yes
(defun sd-org-quick-export ()
@@ -1250,8 +1286,8 @@ Binding defined in Section [[Indent buffer]].
* Editing preferences
-These customizations enhance editor usability. They also encompass cosmetic
-changes not brought about a specific package.
+These customizations enhance editor usability. They also encompass
+cosmetic changes not brought about a specific package.
** Editor
@@ -1266,8 +1302,8 @@ This is just a better default. Don't @ me.
*** Recent files
-The keybinding for opening a recently visited file is described in paragraph
-[[Open a recently visited file]].
+The keybinding for opening a recently visited file is described in
+paragraph [[Open a recently visited file]].
#+BEGIN_SRC emacs-lisp :tangle yes
(recentf-mode 1)
@@ -1294,9 +1330,9 @@ The keybinding for opening a recently visited file is described in paragraph
:sd-unpack-path: sd-icons.el
:END:
-We start by defining some icons we wish to include in our user interface. Emacs
-allows the usage of GIF images---this paves the way for UI elements which may be
-animated.
+We start by defining some icons we wish to include in our user
+interface. Emacs allows the usage of GIF images---this paves the
+way for UI elements which may be animated.
#+BEGIN_SRC emacs-lisp :tangle yes
(defvar sd-icons-blue-ellipsis (create-image
@@ -1316,8 +1352,8 @@ animated.
**** TODO Header line
# Figure out how to do 'keymap cleanly
-In Org mode, the document header line will be the title of the document we are
-working on currently.
+In Org mode, the document header line will be the title of the
+document we are working on currently.
#+BEGIN_SRC emacs-lisp :tangle yes
(setq sd-header-gnu-linux
@@ -1404,8 +1440,8 @@ Save cursor location in visited buffer after closing it or Emacs.
*** Column filling
-A line of text is considered ``filled'' when it reaches 79 characters in
-length.
+A line of text is considered ``filled'' when it reaches 79
+characters in length.
#+BEGIN_SRC emacs-lisp :tangle yes
(setq-default fill-column 79)
@@ -1418,8 +1454,9 @@ length.
*** Beautiful symbols
-We want the Emacs Lisp keyword =lambda= to be rendered as \lambda within the
-editor. This is mostly for a subjective ``cool'' factor.
+We want the Emacs Lisp keyword =lambda= to be rendered as \lambda
+within the editor. This is mostly for a subjective ``cool''
+factor.
#+BEGIN_SRC emacs-lisp :tangle yes
(global-prettify-symbols-mode 1)
@@ -1427,8 +1464,8 @@ editor. This is mostly for a subjective ``cool'' factor.
*** Org mode sugar
-Let's pimp out the appearance of our text in Org mode. First, we prettify
-checkbox lists.
+Let's pimp out the appearance of our text in Org mode. First, we
+prettify checkbox lists.
#+BEGIN_SRC emacs-lisp :tangle yes
(when (string-equal system-type "gnu/linux")
@@ -1450,10 +1487,10 @@ checkbox lists.
*** Electric modes
-Electricity is a very important technology. In Emacs jargon, ``electric'' modes
-tend to automate behaviors or present some elegant simplification to a
-workflow.[fn::More information can be found at
-[[https://www.emacswiki.org/emacs/Electricity]].]
+Electricity is a very important technology. In Emacs jargon,
+``electric'' modes tend to automate behaviors or present some
+elegant simplification to a workflow.[fn::More information can be
+found at [[https://www.emacswiki.org/emacs/Electricity]].]
#+BEGIN_SRC emacs-lisp :tangle yes
(electric-pair-mode) ; Certain character pairs are automatically completed.
@@ -1476,8 +1513,9 @@ Disable minibuffer scroll bar.
* Themes
-Without a carefully designed theme, our editor would become unusable. Thus, we
-describe two themes that were developed purposefully and iteratively.
+Without a carefully designed theme, our editor would become
+unusable. Thus, we describe two themes that were developed
+purposefully and iteratively.
#+BEGIN_SRC emacs-lisp :tangle yes
(setq custom-theme-directory (concat user-emacs-directory "themes/"))
@@ -1491,11 +1529,12 @@ A highly legible, unambiguous, and classic theme.
*** Colors
-The default face is a black foreground on a white background, this matches MS
-Word. We are striving for a simple, intuitive color scheme.
+The default face is a black foreground on a white background, this
+matches MS Word. We are striving for a simple, intuitive color
+scheme.
-Most of the visual cues derived from color are identical in both light and dark
-themes (Table [[theme-color-1]]).
+Most of the visual cues derived from color are identical in both
+light and dark themes (Table [[theme-color-1]]).
#+NAME: theme-color-1
#+CAPTION[Light and dark themes' colors]: Light and dark themes' colors.
@@ -1518,9 +1557,9 @@ themes (Table [[theme-color-1]]).
*** Cursors
-In order to imitate other modern text editors, we resort to a blinking bar
-cursor. We choose red, the most captivating color, because the cursor is
-arguably the region on our screen:
+In order to imitate other modern text editors, we resort to a
+blinking bar cursor. We choose red, the most captivating color,
+because the cursor is arguably the region on our screen:
1. most often looked at;
2. most often searched when lost.
@@ -1539,8 +1578,8 @@ cursor is a more MS Word-like bar.
**** Currently used /chad fonts/
-- Hack[fn::https://sourcefoundry.org/hack/] :: ~default~ and ~fixed-pitch~,
- default code font
+- Hack[fn::https://sourcefoundry.org/hack/] :: ~default~ and
+ ~fixed-pitch~, default code font
- Legible, modern monospace font
- Strict, sharp, uncompromising
- Public Sans[fn::https://public-sans.digital.gov/] :: ~variable-pitch~,
@@ -1548,8 +1587,8 @@ cursor is a more MS Word-like bar.
- Very modern yet neutral
- Designed for the U.S. government
- Exceptional color on screen
-- Hermit[fn::https://pcaro.es/p/hermit/] :: ~org-block~, anything Org/meta in
- general
+- Hermit[fn::https://pcaro.es/p/hermit/] :: ~org-block~, anything
+ Org/meta in general
- Slightly wider than Hack
- More opinionated shapes
- Very legible parentheses, very useful for Emacs Lisp!
@@ -1615,6 +1654,6 @@ store the result of our profiling.
* Conclusion
-In this configuration file, we described a series of customization steps taken
-to make Emacs more palatable to modern IDE users.
+In this configuration file, we described a series of customization
+steps taken to make Emacs more palatable to modern IDE users.
Copyright 2019--2024 Marius PETER