Start work on user details.

Commit
5cc72005748960596a7e0003cdf34b95685b03b3
Author
Blendoit <blendoit@gmail.com>
Author date
Committer
Blendoit <blendoit@gmail.com>
Committer date
Changed files
.gitignore
index 807703b8..29d95903 100644..100644
@@ -1,27 +1,20 @@
1 1 # .gitignore
2 2
3 Added: # All secrets!
4 Added: secret*
5 Added:
6 Added: # .org => .el => .elc
7 Added: *.el
3 8 *.elc
4 9
5 Removed: # TeX artifacts
6 Removed: *.tex
7 Removed: *.lot
8 Removed: *.lof
9 Removed:
10 10 # These directories are populated on config execution.
11 11 elpa/**
12 12 url/**
13 Added: meta/**
13 14 auto-save-list/**
14 15 transient/**
16 Added: _minted*
15 17
16 18 # Tangled config .el file from .org
17 Removed: blendoit/blendoit-init.el
19 Added: smart-documents.el
18 20
19 Removed: # Misc
20 Removed: *.eld
21 Removed: ido.last
22 Removed: recentf
23 Removed: srecode-map.el
24 Removed: .org-id-locations
25 Removed: network-security.data
26 Removed: places
27 Removed: projectile.cache
blendoit/.gitignore
index dff4699c..00000000 100644..000000
@@ -1,5 +0,0 @@
1 Removed: # blendoit/.gitignore
2 Removed:
3 Removed: _minted-blendoit-init/
4 Removed: secrets.org
5 Removed: secrets.el
blendoit/blendoit-init.org
index 57e0931b..00000000 100644..000000
@@ -1,1014 +0,0 @@
1 Removed: #+TITLE: My Literate GNU Emacs Config
2 Removed: #+AUTHOR: Marius Peter
3 Removed: #+DATE: <2020-07-23 Thu>
4 Removed: #+EMAIL: blendoit@gmail.com
5 Removed: #+STARTUP: showall customtime
6 Removed: #+SETUPFILE: ~/.emacs.d/templates/documents/general.org
7 Removed: #+INCLUDE: ~/.emacs.d/templates/documents/general.org_title
8 Removed:
9 Removed: #+LATEX: \begin{abstract}
10 Removed: GNU Emacs is most often used as a text editor. The utmost level of
11 Removed: customization is afforded by enabling the user to rewrite \textit{any} part of
12 Removed: the source code and observe the editor's modified behaviour in real time. Since
13 Removed: its inception in 1984, GNU Emacs has grown to be much more than a
14 Removed: full-featured, high-productivity text editor---new \textit{modes} have been
15 Removed: written to interact with hundreds of file formats, including \texttt{.txt},
16 Removed: \texttt{.pdf}, \texttt{.jpg}, \texttt{.csv}, and \texttt{.zip} just to name a
17 Removed: few. This configuration file itself was written in \textit{Org mode}, a
18 Removed: collection of functions enabling the harmonious mixing of code and comments in
19 Removed: view of publication: this is the endgame of \textit{literate programming}.
20 Removed: #+LATEX: \end{abstract}
21 Removed:
22 Removed: * Introduction
23 Removed:
24 Removed: The following sections were laid out very deliberately. When we start Emacs,
25 Removed: Emacs Lisp source code blocks contained in this document are evaluated
26 Removed: sequentially---our editing environment is constructed in real time as we
27 Removed: execute the blocks in order. For instance, we only begin loading packages once
28 Removed: we ensured ~use-package~ is working properly.
29 Removed:
30 Removed: Customizing Emacs goes far, far beyond this document---feel free to experiment
31 Removed: and discover.
32 Removed:
33 Removed: - ~C-h f~ describe function
34 Removed: - ~C-h v~ describe variable
35 Removed: - ~C-h k~ describe key
36 Removed:
37 Removed: These three commands will attempt to describe the element currently under our
38 Removed: cursor, however you can start typing to search for another symbol.
39 Removed:
40 Removed: * TODO First-time setup
41 Removed:
42 Removed: Spacemacs-like dialog for default settings.
43 Removed:
44 Removed: #+NAME: first-setup
45 Removed: # #+BEGIN_SRC emacs-lisp
46 Removed: # ;; Prompt enterprise or personal install. Create file in .emacs.d/ on Linux,
47 Removed: # ;; AppData/ on Windows. Ask user for details and preferred bindings.
48 Removed: #
49 Removed: # ; Check if .emacs.d exists
50 Removed: #
51 Removed: # ; If it does, warn user
52 Removed: #
53 Removed: # ; Copy init-bootstrap.el from USB to where operating systems expects init.el
54 Removed: #
55 Removed: # ;; (defun blendoit/first-time-setup-windows-nt ()
56 Removed: # ;; "Execute the first-time setup on MS Windows.
57 Removed: # ;; If no `.emacs.d/' config exists on local system, copy
58 Removed: # ;; init-bootstrap.el to `~.emacs.d/'."
59 Removed: # ;; (interactive)
60 Removed: # ;; (find-file "~/.emacs.d/blendoit/blendoit-init.org"))
61 Removed: #
62 Removed: # ;; (cond ((string-equal system-type "windows-nt")blendoit/first-time-setup-windows-nt)
63 Removed: # ;; ((string-equal system-type "gnu/linux") blendoit/first-time-setup-linux))
64 Removed: # #+END_SRC
65 Removed:
66 Removed: ** File system paths
67 Removed:
68 Removed: In this subsection, we tell Emacs about relevant paths to resources.
69 Removed:
70 Removed: On my MS Windows machine, I add the path to Portable Git.[fn::Download from
71 Removed: https://git-scm.com/download/win]
72 Removed:
73 Removed: #+BEGIN_SRC emacs-lisp
74 Removed: (when (string-equal system-type "windows-nt")
75 Removed: (add-to-list 'exec-path "C:/Users/marius.peter/PortableGit/bin/"))
76 Removed: #+END_SRC
77 Removed:
78 Removed: * Early setup
79 Removed:
80 Removed: ** Garbage collection
81 Removed:
82 Removed: First, we increase the RAM threshold beyond which the garbage collector is
83 Removed: activated.
84 Removed:
85 Removed: #+NAME: garbage-collection
86 Removed: #+BEGIN_SRC emacs-lisp
87 Removed: (setq gc-cons-threshold 100000000)
88 Removed: #+END_SRC
89 Removed:
90 Removed: ** Profiling --- start
91 Removed:
92 Removed: We start the profiler now , and will interrupt it in Section [[Profiling ---
93 Removed: stop]]. We will then present profiling report in Section [[Profiling --- report]].
94 Removed:
95 Removed: #+NAME: profiler-start
96 Removed: #+BEGIN_SRC emacs-lisp
97 Removed: ; (profiler-start)
98 Removed: #+END_SRC
99 Removed:
100 Removed: ** Emacs client
101 Removed:
102 Removed: Makes opening emacs faster for following instances.
103 Removed:
104 Removed: #+NAME: emacs-client
105 Removed: #+BEGIN_SRC emacs-lisp
106 Removed: ; (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*")))
107 Removed: #+END_SRC
108 Removed:
109 Removed: ** Custom file
110 Removed:
111 Removed: Load settings created automatically by GNU Emacs Custom. (For example, any
112 Removed: clickable option/toggle is saved here.) Useful for fooling around with M-x
113 Removed: customize-group <package>.
114 Removed:
115 Removed: user-emacs-directory
116 Removed:
117 Removed: #+NAME: custom-file-location
118 Removed: #+BEGIN_SRC emacs-lisp
119 Removed: (setq custom-file (concat user-emacs-directory "init-custom.el"))
120 Removed: (load custom-file)
121 Removed: #+END_SRC
122 Removed:
123 Removed: ** Customization shortcuts
124 Removed:
125 Removed: We begin by defining a user shortcut to this very file. We load this as early as
126 Removed: possible, this facilitates debugging.
127 Removed:
128 Removed: #+NAME: shortcut-config
129 Removed: #+BEGIN_SRC emacs-lisp
130 Removed: (defun my/find-literate-config ()
131 Removed: "Jump to this very file."
132 Removed: (interactive)
133 Removed: (find-file my/literate-config))
134 Removed:
135 Removed: (global-set-key (kbd "C-c c") 'my/find-literate-config)
136 Removed: #+END_SRC
137 Removed:
138 Removed: Now, different shortcuts for other customization actions:
139 Removed:
140 Removed: #+NAME: shortcuts-customization
141 Removed: #+BEGIN_SRC emacs-lisp
142 Removed: (global-set-key (kbd "C-c v") 'customize-variable)
143 Removed: (global-set-key (kbd "C-c f") 'customize-face)
144 Removed: #+END_SRC
145 Removed:
146 Removed: ** Backups
147 Removed:
148 Removed: Backups are so important that they should be described right after the shortcut
149 Removed: to this file.
150 Removed:
151 Removed: #+BEGIN_SRC emacs-lisp
152 Removed: (setq backup-directory-alist `((".*" . ,temporary-file-directory))
153 Removed: auto-save-file-name-transforms `((".*" ,temporary-file-directory t))
154 Removed: backup-by-copying t ; Don't delink hardlinks
155 Removed: version-control t ; Use version numbers on backups
156 Removed: delete-old-versions t ; Automatically delete excess backups
157 Removed: kept-new-versions 20 ; how many of the newest versions to keep
158 Removed: kept-old-versions 5 ; and how many of the old
159 Removed: )
160 Removed: #+END_SRC
161 Removed:
162 Removed: ** Initial and default frames
163 Removed:
164 Removed: We set the dimensions of the inital and default frames.
165 Removed:
166 Removed: #+BEGIN_SRC emacs-lisp
167 Removed: (add-to-list 'default-frame-alist '(width . 100))
168 Removed: (add-to-list 'default-frame-alist '(height . 50))
169 Removed:
170 Removed: (add-to-list 'initial-frame-alist '(width . 100))
171 Removed: (add-to-list 'initial-frame-alist '(height . 50))
172 Removed: #+END_SRC
173 Removed:
174 Removed: *** GNU/Linux
175 Removed:
176 Removed: These settings affect the first and subsequent frames spawned by Emacs in
177 Removed: GNU/Linux. Frame transparency increases when focus is lost.
178 Removed:
179 Removed: #+BEGIN_SRC emacs-lisp
180 Removed: (when (and (display-graphic-p) (string-equal system-type "gnu/linux"))
181 Removed: (set-frame-parameter (selected-frame) 'alpha '(90 . 50))
182 Removed: (add-to-list 'default-frame-alist '(alpha . (90 . 50))))
183 Removed: #+END_SRC
184 Removed:
185 Removed: ** Secrets
186 Removed:
187 Removed: The code contained in the =secrets.org= file is loaded by Emacs, but not
188 Removed: rendered in this PDF for the sake of privacy. It contains individually
189 Removed: identifying information such as names and e-mail addresses, which are used to
190 Removed: populate Org templates (Section [[~org-mode~]]).
191 Removed:
192 Removed: You need to create this =secrets.org= file, as it is ignored by =git= by
193 Removed: default.
194 Removed:
195 Removed: #+BEGIN_SRC emacs-lisp
196 Removed: (org-babel-load-file "~/.emacs.d/blendoit/secrets.org")
197 Removed: #+END_SRC
198 Removed:
199 Removed: * Global key bindings
200 Removed:
201 Removed: The following bindings strive to further enhance CUA mode.[fn::Common User
202 Removed: Access. This is a term coined by IBM which has influenced user navigation cues
203 Removed: on all modern desktop OSes. From IBM's CUA, we get the =Ctrl-v= and =Ctrl-v=
204 Removed: keyboard shortcuts.]
205 Removed:
206 Removed: #+BEGIN_SRC emacs-lisp
207 Removed: (cua-mode)
208 Removed: #+END_SRC
209 Removed:
210 Removed:
211 Removed: ** Keyboard navigation
212 Removed:
213 Removed: #+BEGIN_SRC emacs-lisp
214 Removed: (global-set-key (kbd "C-`") 'delete-other-windows)
215 Removed: #+END_SRC
216 Removed:
217 Removed: *** Saving a file
218 Removed:
219 Removed: #+BEGIN_SRC emacs-lisp
220 Removed: (global-set-key (kbd "C-s") 'save-buffer)
221 Removed: #+END_SRC
222 Removed:
223 Removed: *** Opening a file
224 Removed:
225 Removed: #+BEGIN_SRC emacs-lisp
226 Removed: (global-set-key (kbd "C-o") 'find-file)
227 Removed: #+END_SRC
228 Removed:
229 Removed: *** Opening a recently visited file
230 Removed:
231 Removed: #+BEGIN_SRC emacs-lisp
232 Removed: (global-set-key (kbd "C-r") 'counsel-recentf)
233 Removed: #+END_SRC
234 Removed:
235 Removed: *** Locating a file
236 Removed:
237 Removed: #+BEGIN_SRC emacs-lisp
238 Removed: (global-set-key (kbd "C-c l") 'counsel-locate)
239 Removed: #+END_SRC
240 Removed:
241 Removed: *** Closing window and quitting Emacs
242 Removed:
243 Removed: #+BEGIN_SRC emacs-lisp
244 Removed: (defun my/delete-window-or-previous-buffer ()
245 Removed: "Delete window; if sole window, previous buffer."
246 Removed: (interactive)
247 Removed: (if (> (length (window-list)) 1)
248 Removed: (delete-window)
249 Removed: (previous-buffer)))
250 Removed: #+END_SRC
251 Removed:
252 Removed: The following bindings lead to more natural exit behaviors.
253 Removed:
254 Removed: #+BEGIN_SRC emacs-lisp
255 Removed: (global-set-key (kbd "C-w") 'my/delete-window-or-previous-buffer)
256 Removed: (global-set-key (kbd "C-q") 'save-buffers-kill-terminal)
257 Removed: #+END_SRC
258 Removed:
259 Removed: ** Mouse zoom
260 Removed:
261 Removed: The typical binding on both GNU/Linux and MS Windows is adequate here: ~C-=~ to
262 Removed: zoom in, ~C--~ to zoom out.
263 Removed:
264 Removed: It seems that starting with Emacs 27.1, Control + mousewheel works.
265 Removed:
266 Removed: #+BEGIN_SRC emacs-lisp
267 Removed: (global-set-key (kbd "C--") 'text-scale-decrease)
268 Removed: (global-set-key (kbd "C-=") 'text-scale-increase)
269 Removed: (global-set-key (kbd "C-+") 'text-scale-increase)
270 Removed: #+END_SRC
271 Removed:
272 Removed: * Packages
273 Removed:
274 Removed: Packages are collections of =.el= files providing added functionality to Emacs.
275 Removed:
276 Removed: ** Meta
277 Removed:
278 Removed: How do we bootstrap packages? First, let's figure out:
279 Removed:
280 Removed: 1. Where we get our packages from
281 Removed: 2. How we upgrade packages
282 Removed: 3. How we ensure our required packages are installed
283 Removed:
284 Removed: *** Package archives
285 Removed:
286 Removed: List of package archives.
287 Removed:
288 Removed: #+NAME: package-archives
289 Removed: #+BEGIN_SRC emacs-lisp
290 Removed: (require 'package)
291 Removed: (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
292 Removed: (add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/") t)
293 Removed: (package-initialize)
294 Removed: #+END_SRC
295 Removed:
296 Removed: *** TODO Convenient package update
297 Removed:
298 Removed: One-function rollup of upgradeable package tagging, download and lazy install.
299 Removed:
300 Removed: #+BEGIN_SRC emacs-lisp
301 Removed:
302 Removed: #+END_SRC
303 Removed:
304 Removed: *** ~use-package~
305 Removed:
306 Removed: We ensure =use-package= is installed, as well as all packages described in this
307 Removed: configuration file.
308 Removed:
309 Removed: #+BEGIN_SRC emacs-lisp
310 Removed: (unless (package-installed-p 'use-package)
311 Removed: (package-refresh-contents)
312 Removed: (package-install 'use-package)
313 Removed: (eval-when-compile (require 'use-package)))
314 Removed: (setq use-package-always-ensure t)
315 Removed: (require 'use-package)
316 Removed: (require 'bind-key)
317 Removed: #+END_SRC
318 Removed:
319 Removed: ** ~org-mode~
320 Removed:
321 Removed: Phew, I can finally introduce Org mode! I am so *excited*.
322 Removed:
323 Removed: Org mode replaces aword processor, a presentation creator, and a spreadsheet
324 Removed: editor. IMHO, the spreadsheet ability captures more than 80% use cases wherein
325 Removed: one wishes to include a table in a text document destined for physical
326 Removed: publication. (It is clear that Excel spreadsheets are /not/ destined for
327 Removed: physical publication---simply attempt to print an Excel spreadsheet with the
328 Removed: default settings.) In my opinion, Org mode matches all /useful/ features of
329 Removed: the Microsoft Office suite 1-to-1.
330 Removed:
331 Removed: What follows are customizations designed to make Org mode behave more like
332 Removed: Microsoft Word. The end goal is, once again, to draw as many new users to Emacs
333 Removed: as possible!
334 Removed:
335 Removed: *** Basic customization
336 Removed:
337 Removed: Org base directory is in user home on GNU/Linux, or in =AppData= in MS Windows.
338 Removed:
339 Removed: #+NAME: org-basic
340 Removed: #+BEGIN_SRC emacs-lisp
341 Removed: (setq org-directory (concat user-emacs-directory "~/org"))
342 Removed: #+END_SRC
343 Removed:
344 Removed: First, we hide markup symbols for *bold*, /italic/, _underlined_ and
345 Removed: +strikethrough+ text, and ensure our document appears indented upon
346 Removed: loading:[fn::It /appears/ indented, but the underlying plaintext file does not
347 Removed: contain tab characters!]
348 Removed:
349 Removed: For the time being, I will in fact display emphasis markers, because hiding
350 Removed: them corrupts tables.
351 Removed:
352 Removed: #+NAME: org-basic
353 Removed: #+BEGIN_SRC emacs-lisp
354 Removed: (setq org-hide-emphasis-markers nil)
355 Removed: (setq org-startup-indented t)
356 Removed: #+END_SRC
357 Removed:
358 Removed: *** Languages executable in smart documents
359 Removed:
360 Removed: The following languages can be written inside =SRC= blocks, in view of being
361 Removed: executed by the Org Babel backend.
362 Removed:
363 Removed: #+BEGIN_SRC emacs-lisp
364 Removed: (setq org-babel-load-languages
365 Removed: '((shell . t)
366 Removed: (python . t)
367 Removed: (plantuml . t)
368 Removed: (emacs-lisp . t)
369 Removed: (awk . t)
370 Removed: (ledger . t)
371 Removed: (gnuplot . t)
372 Removed: (latex . t)))
373 Removed: #+END_SRC
374 Removed:
375 Removed: *** Prevent or warn on invisible edits
376 Removed:
377 Removed: #+BEGIN_SRC emacs-lisp
378 Removed: (setq org-catch-invisible-edits t)
379 Removed: #+END_SRC
380 Removed:
381 Removed: *** Agenda
382 Removed:
383 Removed: The agenda displays a chronological list of headings across all agenda files
384 Removed: for which the heading or body contain a matching =org-time-stamp=.[fn::An
385 Removed: =org-time-stamp= can be inserted with ~C-c .~ (period)]
386 Removed:
387 Removed: #+BEGIN_SRC emacs-lisp
388 Removed: (global-set-key (kbd "C-c a") 'org-agenda-list)
389 Removed:
390 Removed: (defun my/find-diary-file ()
391 Removed: "Load `org-agenda-diary-file'."
392 Removed: (interactive)
393 Removed: (find-file org-agenda-diary-file))
394 Removed:
395 Removed: (global-set-key (kbd "C-c d") 'my/find-diary-file)
396 Removed: #+END_SRC
397 Removed:
398 Removed: *** Timestamps
399 Removed:
400 Removed: More literary timestamps are exported to LaTeX using the following custom
401 Removed: format:
402 Removed:
403 Removed: #+BEGIN_SRC emacs-lisp
404 Removed: (setq org-time-stamp-custom-formats
405 Removed: '("%d %b, %Y (%a)" . "%d %b, %Y (%a), at %H:%M"))
406 Removed: #+END_SRC
407 Removed:
408 Removed: *** LaTeX export
409 Removed:
410 Removed: We'll be compiling our documents with LuaTeX. This will afford us some
411 Removed: future-proofing, since it was designated as the successor to pdfTeX by the
412 Removed: latter's creators.
413 Removed:
414 Removed: First, we define the command executed when an Org file is exported to
415 Removed: LaTeX. We'll use =latexmk=, the Perl script which automagically runs binaries
416 Removed: related to LaTeX in the correct order and the right amount of times.
417 Removed:
418 Removed: Options and why we need them:
419 Removed: - ~-shell-excape~ :: required by minted to color source blocks
420 Removed: - ~-pdflatex=lualatex~ :: we use lualatex to generate our PDF
421 Removed: - ~-interaction=nonstopmode~ :: go as far as possible without prompting user
422 Removed: for input
423 Removed:
424 Removed: #+BEGIN_SRC emacs-lisp
425 Removed: (setq org-latex-pdf-process
426 Removed: '("latexmk -pdf -f \
427 Removed: -pdflatex=lualatex -shell-escape \
428 Removed: -interaction=nonstopmode -outdir=%o %f"))
429 Removed: #+END_SRC
430 Removed:
431 Removed: We customize the format for org time stamps to make them appear monospaced in
432 Removed: our exported LaTeX documents. This makes them visually distinguishable from
433 Removed: body text.
434 Removed:
435 Removed: #+BEGIN_SRC emacs-lisp
436 Removed: (setq org-latex-active-timestamp-format
437 Removed: "\\texttt{%s}")
438 Removed: (setq org-latex-inactive-timestamp-format
439 Removed: "\\texttt{%s}")
440 Removed: #+END_SRC
441 Removed:
442 Removed: The following packages are loaded for every time we export to LaTeX.
443 Removed:
444 Removed: #+BEGIN_SRC emacs-lisp
445 Removed: (setq org-latex-packages-alist
446 Removed: '(("AUTO" "polyglossia" t
447 Removed: ("xelatex" "lualatex"))
448 Removed: ("AUTO" "babel" t
449 Removed: ("pdflatex"))
450 Removed: ("" "booktabs" t
451 Removed: ("pdflatex"))
452 Removed: ("table,svgnames" "xcolor" t
453 Removed: ("pdflatex"))))
454 Removed: #+END_SRC
455 Removed:
456 Removed: Little bonus for GNU/Linux users: syntax highlighting for source code blocks in
457 Removed: LaTeX exports.
458 Removed:
459 Removed: #+BEGIN_SRC emacs-lisp
460 Removed: (when (string-equal system-type "gnu/linux")
461 Removed: (add-to-list 'org-latex-packages-alist '("AUTO" "minted" t
462 Removed: ("pdflatex" "lualatex")))
463 Removed: (setq org-latex-listings 'minted)
464 Removed: (setq org-latex-minted-options
465 Removed: '(("style" "friendly") ())))
466 Removed: #+END_SRC
467 Removed:
468 Removed: Now, we set the files to be deleted when a LaTeX \rightarrow PDF compilation
469 Removed: occurs. We only care about two files, in the end: the Org mode file for
470 Removed: edition, and the PDF for distribution.
471 Removed:
472 Removed: #+BEGIN_SRC emacs-lisp
473 Removed: (setq org-latex-logfiles-extensions
474 Removed: '("aux" "bcf" "blg" "fdb_latexmk"
475 Removed: "fls" "figlist" "idx" "log" "nav"
476 Removed: "out" "ptc" "run.xml" "snm" "toc" "vrb" "xdv"
477 Removed: "tex" "lot" "lof"))
478 Removed: #+END_SRC
479 Removed:
480 Removed: By default, Org agenda inserts diary entries as the first under the selected
481 Removed: date. It is preferable to insert entries in the order that they were recorded,
482 Removed: i.e. chronologically.
483 Removed:
484 Removed: #+BEGIN_SRC emacs-lisp
485 Removed: (setq org-agenda-insert-diary-strategy 'date-tree-last)
486 Removed: #+END_SRC
487 Removed:
488 Removed: What follows are the document class structures that can be exported in LaTeX.
489 Removed:
490 Removed: #+BEGIN_SRC emacs-lisp
491 Removed: (setq org-latex-classes
492 Removed: '(("article" "\\documentclass[11pt]{article}"
493 Removed: ("\\section{%s}" . "\\section*{%s}")
494 Removed: ("\\subsection{%s}" . "\\subsection*{%s}")
495 Removed: ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
496 Removed: ("\\paragraph{%s}" . "\\paragraph*{%s}")
497 Removed: ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
498 Removed: ("report" "\\documentclass[11pt]{report}"
499 Removed: ("\\part{%s}" . "\\part*{%s}")
500 Removed: ("\\chapter{%s}" . "\\chapter*{%s}")
501 Removed: ("\\section{%s}" . "\\section*{%s}")
502 Removed: ("\\subsection{%s}" . "\\subsection*{%s}")
503 Removed: ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
504 Removed: ("book" "\\documentclass[12pt]{book}"
505 Removed: ("\\part{%s}" . "\\part*{%s}")
506 Removed: ("\\chapter{%s}" . "\\chapter*{%s}")
507 Removed: ("\\section{%s}" . "\\section*{%s}")
508 Removed: ("\\subsection{%s}" . "\\subsection*{%s}")
509 Removed: ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
510 Removed: ("book-blendoit" "\\documentclass[12pt]{book}"
511 Removed: ("\\chapter{%s}" . "\\chapter*{%s}")
512 Removed: ("\\section{%s}" . "\\section*{%s}")
513 Removed: ("\\subsection*{%s}" . "\\subsection*{%s}")
514 Removed: ("\\subsubsection*{%s}" . "\\subsubsection*{%s}"))))
515 Removed: #+END_SRC
516 Removed:
517 Removed: By default, body text can immediately follow the table of contents. It is
518 Removed: however cleaner to separate table of contents with the rest of the work.
519 Removed:
520 Removed: #+BEGIN_SRC emacs-lisp
521 Removed: (setq org-latex-toc-command "\\tableofcontents\\clearpage")
522 Removed: #+END_SRC
523 Removed:
524 Removed:
525 Removed:
526 Removed: The following makes =TODO= items appear red and =CLOSED= items appear green in
527 Removed: Org's LaTeX exports. Very stylish, much flair!
528 Removed:
529 Removed: *** Export
530 Removed:
531 Removed: This creates a shorter binding for the most common Org export: Org \rightarrow
532 Removed: LaTeX \rightarrow PDF.
533 Removed:
534 Removed: #+BEGIN_SRC emacs-lisp
535 Removed: (defun my/org-quick-export ()
536 Removed: "Org export to PDF and open.
537 Removed: This basically reimplements `C-c C-e C-a l o'."
538 Removed: (interactive)
539 Removed: (org-open-file (org-latex-export-to-pdf)))
540 Removed:
541 Removed: (global-set-key (kbd "C-c e") 'my/org-quick-export)
542 Removed: #+END_SRC
543 Removed:
544 Removed: ** TODO ~evil-mode~
545 Removed:
546 Removed: Forgive me, for I have sinned.
547 Removed:
548 Removed: This is the 2^{nd} most significant customization after ~org-mode~. Enabling
549 Removed: ~evil-mode~ completely changes editing keys.[fn::For more information on =vi=
550 Removed: keybindings, visit [[https://hea-www.harvard.edu/~fine/Tech/vi.html]].]
551 Removed:
552 Removed: #+BEGIN_SRC emacs-lisp
553 Removed: (use-package evil)
554 Removed: ; (setq evil-toggle-key "C-c d") ; devil...
555 Removed: ; (evil-mode 1)
556 Removed: #+END_SRC
557 Removed:
558 Removed: ** Spelling, completion, and snippets
559 Removed:
560 Removed: The following customizations open the doors to vastly increased typing speed
561 Removed: and accuracy.
562 Removed:
563 Removed: *** ~flycheck~
564 Removed:
565 Removed: Syntax highlighting for Emacs.
566 Removed:
567 Removed: #+NAME: flycheck
568 Removed: #+BEGIN_SRC emacs-lisp
569 Removed: (use-package flycheck)
570 Removed: (global-flycheck-mode)
571 Removed: #+END_SRC
572 Removed:
573 Removed: *** TODO ~flyspell~
574 Removed:
575 Removed: #+NAME: flyspell
576 Removed: #+BEGIN_SRC emacs-lisp
577 Removed: (use-package flyspell)
578 Removed: (add-hook 'text-mode-hook 'flyspell-mode)
579 Removed: #+END_SRC
580 Removed:
581 Removed: *** Insert template from keyword
582 Removed:
583 Removed: Thanks to yasnippet, we can type certain keywords, press =TAB=, and this will
584 Removed: automatically insert a text snippet. We may then navigate through the snippet
585 Removed: by using =TAB= (next field) and =SHIFT-TAB= (previous field).
586 Removed:
587 Removed: For instance: Typing =src= then pressing =TAB= will expand the keyword to the
588 Removed: following text:
589 Removed:
590 Removed: : #+BEGIN_SRC emacs-lisp
591 Removed: :
592 Removed: : #+END_SRC
593 Removed:
594 Removed: We notice that emacs-lisp is highlighted---this is the first modifiable field.
595 Removed:
596 Removed: #+NAME: yasnippet
597 Removed: #+BEGIN_SRC emacs-lisp
598 Removed: (use-package yasnippet)
599 Removed: (yas-global-mode 1)
600 Removed: #+END_SRC
601 Removed:
602 Removed: *** Complete anything interactively
603 Removed:
604 Removed: #+NAME: company
605 Removed: #+BEGIN_SRC emacs-lisp
606 Removed: ; (add-hook 'after-init-hook 'global-company-mode)
607 Removed: #+END_SRC
608 Removed:
609 Removed: *** Delete all consecutive whitespaces
610 Removed:
611 Removed: #+NAME: company
612 Removed: #+BEGIN_SRC emacs-lisp
613 Removed: (use-package hungry-delete
614 Removed: :init (hungry-delete-mode))
615 Removed: #+END_SRC
616 Removed:
617 Removed: ** Utilities
618 Removed:
619 Removed: *** Versioning of files
620 Removed:
621 Removed: Wonderful Git porcelain for Emacs. Enables the administration of a Git
622 Removed: repository in a pain-free way.
623 Removed:
624 Removed: #+BEGIN_SRC emacs-lisp
625 Removed: (use-package magit
626 Removed: :bind ("C-c g" . magit-status))
627 Removed: #+END_SRC
628 Removed:
629 Removed: *** Navigate between projects
630 Removed:
631 Removed: This enables us to better manage our =.git= projects.
632 Removed:
633 Removed: #+BEGIN_SRC emacs-lisp
634 Removed: (use-package projectile
635 Removed: :bind ("C-c p" . 'projectile-command-map)
636 Removed: :init (projectile-mode 1)
637 Removed: (setq projectile-completion-system 'ivy))
638 Removed: #+END_SRC
639 Removed:
640 Removed: *** Display keyboard shortcuts on screen
641 Removed:
642 Removed: #+BEGIN_SRC emacs-lisp
643 Removed: (use-package which-key
644 Removed: :init (which-key-mode))
645 Removed: #+END_SRC
646 Removed:
647 Removed: *** Jump to symbol's definition
648 Removed:
649 Removed: #+BEGIN_SRC emacs-lisp
650 Removed: (use-package dumb-jump)
651 Removed: (add-hook 'xref-backend-functions #'dumb-jump-xref-activate)
652 Removed: #+END_SRC
653 Removed:
654 Removed: *** Graphical representation of file history
655 Removed:
656 Removed: #+BEGIN_SRC emacs-lisp
657 Removed: (use-package undo-tree)
658 Removed: (global-undo-tree-mode)
659 Removed: #+END_SRC
660 Removed:
661 Removed: *** Auto-completion framework
662 Removed:
663 Removed: #+BEGIN_SRC emacs-lisp
664 Removed: (use-package ivy
665 Removed: :config (setq ivy-use-virtual-buffers t
666 Removed: ivy-count-format "%d/%d "
667 Removed: enable-recursive-minibuffers t))
668 Removed: (ivy-mode t)
669 Removed: #+END_SRC
670 Removed:
671 Removed: **** Smartly suggesting interactive search matches
672 Removed:
673 Removed: Wonderful counsellor!
674 Removed:
675 Removed: #+BEGIN_SRC emacs-lisp
676 Removed: (use-package counsel
677 Removed: :bind ("M-x" . counsel-M-x)
678 Removed: :config (counsel-mode t))
679 Removed:
680 Removed: (global-set-key (kbd "C-f") 'counsel-grep-or-swiper)
681 Removed: #+END_SRC
682 Removed:
683 Removed: **** Searching for items
684 Removed:
685 Removed: #+BEGIN_SRC emacs-lisp
686 Removed: (use-package swiper
687 Removed: :bind (("C-f" . counsel-grep-or-swiper)))
688 Removed: #+END_SRC
689 Removed:
690 Removed: ** File formats
691 Removed:
692 Removed: *** =csv= and Excel
693 Removed:
694 Removed: #+BEGIN_SRC emacs-lisp
695 Removed: (use-package csv-mode)
696 Removed: #+END_SRC
697 Removed:
698 Removed: *** Interacting with PDFs
699 Removed:
700 Removed: Org mode shines particularly when exporting to PDF---Org files can reliably be
701 Removed: shared and exported to PDF in a reproducible fashion.
702 Removed:
703 Removed: #+BEGIN_SRC emacs-lisp
704 Removed: (use-package pdf-tools)
705 Removed: ;; (pdf-tools-install)
706 Removed: #+END_SRC
707 Removed:
708 Removed: *** Accounting
709 Removed:
710 Removed: Ledger is a creation of John Wiegley's. It enables double-entry accounting in a
711 Removed: simple plaintext format, and reliable verification of account balances through
712 Removed: time.[fn::For more information, visit https://www.ledger-cli.org/.]
713 Removed:
714 Removed: #+BEGIN_SRC emacs-lisp
715 Removed: (use-package ledger-mode
716 Removed: :bind
717 Removed: ("C-c r" . ledger-report)
718 Removed: ("C-c C" . ledger-mode-clean-buffer))
719 Removed: #+END_SRC
720 Removed:
721 Removed: These reports can be generated within Emacs. It is quite useful to pipe their
722 Removed: output to an automated ``smart document''.
723 Removed:
724 Removed: #+BEGIN_SRC emacs-lisp
725 Removed: (setq ledger-reports
726 Removed: '(("bal" "%(binary) -f %(ledger-file) bal")
727 Removed: ("bal-USD" "%(binary) -f %(ledger-file) bal --exchange USD")
728 Removed: ("reg" "%(binary) -f %(ledger-file) reg")
729 Removed: ("net-worth" "%(binary) -f %(ledger-file) bal ^Assets ^Liabilities --exchange USD")
730 Removed: ("net-income" "%(binary) -f %(ledger-file) bal ^Income ^Expenses --exchange USD --depth 2 --invert")
731 Removed: ("payee" "%(binary) -f %(ledger-file) reg @%(payee)")
732 Removed: ("account" "%(binary) -f %(ledger-file) reg %(account)")
733 Removed: ("budget" "%(binary) -f %(ledger-file) budget --exchange USD")))
734 Removed: #+END_SRC
735 Removed:
736 Removed:
737 Removed: *** Plotting & charting
738 Removed:
739 Removed: #+BEGIN_SRC emacs-lisp
740 Removed: (use-package gnuplot)
741 Removed: #+END_SRC
742 Removed:
743 Removed: ** Cosmetics
744 Removed:
745 Removed: *** Start page
746 Removed:
747 Removed: We replace the standard welcome screen with our own.
748 Removed:
749 Removed: #+BEGIN_SRC emacs-lisp
750 Removed: (setq inhibit-startup-message t)
751 Removed: (use-package dashboard
752 Removed: :config
753 Removed: (dashboard-setup-startup-hook)
754 Removed: (setq dashboard-startup-banner (concat user-emacs-directory "img/Safran_logo.svg"))
755 Removed: (setq dashboard-items '((recents . 5)
756 Removed: (projects . 5)))
757 Removed: (setq dashboard-banner-logo-title "A modern professional text editor."))
758 Removed: #+END_SRC
759 Removed:
760 Removed: *** Mode line
761 Removed:
762 Removed: #+NAME: powerline
763 Removed: #+BEGIN_SRC emacs-lisp
764 Removed: (use-package powerline)
765 Removed: #+END_SRC
766 Removed:
767 Removed: *** TODO Sidebar
768 Removed: Get inspiration from ~ibuffer-sidebar~ and create a better sidebar.
769 Removed:
770 Removed: #+BEGIN_SRC emacs-lisp
771 Removed: ;; (load-file)
772 Removed: #+END_SRC
773 Removed:
774 Removed: *** Better parentheses
775 Removed:
776 Removed: #+BEGIN_SRC emacs-lisp
777 Removed: (use-package rainbow-delimiters
778 Removed: :config (add-hook 'prog-mode-hook #'rainbow-delimiters-mode))
779 Removed: (electric-pair-mode)
780 Removed: (show-paren-mode 1)
781 Removed: #+END_SRC
782 Removed:
783 Removed: *** Colored keywords for those colors
784 Removed:
785 Removed: This highlights hexadecimal numbers which look like colors, in that same color.
786 Removed:
787 Removed: #+BEGIN_SRC emacs-lisp
788 Removed: (use-package rainbow-mode
789 Removed: :init
790 Removed: (add-hook 'prog-mode-hook 'rainbow-mode))
791 Removed: #+END_SRC
792 Removed:
793 Removed: * Editing preferences
794 Removed:
795 Removed: These customizations enhance editor usability. They are not brought about
796 Removed:
797 Removed: ** Editor
798 Removed:
799 Removed: *** Coding standards
800 Removed:
801 Removed: This is just a better default. Don't @ me.
802 Removed:
803 Removed: #+BEGIN_SRC emacs-lisp
804 Removed: (setq c-default-style "linux"
805 Removed: c-basic-offset 4)
806 Removed: #+END_SRC
807 Removed:
808 Removed: *** Recent files
809 Removed:
810 Removed: The keybinding for opening a recently visited file is described in paragraph
811 Removed: [[Opening a recently visited file]].
812 Removed:
813 Removed: #+BEGIN_SRC emacs-lisp
814 Removed: (recentf-mode 1)
815 Removed: (setq recentf-max-menu-items 25)
816 Removed: (setq recentf-max-saved-items 25)
817 Removed: (run-at-time nil (* 5 60) 'recentf-save-list)
818 Removed: #+END_SRC
819 Removed:
820 Removed: ** Frame
821 Removed:
822 Removed: *** Clean up menus
823 Removed:
824 Removed: Originally, I wished to inhibit certain entries in the GUI menus. Not worth the
825 Removed: effort at this time.
826 Removed:
827 Removed: #+BEGIN_SRC emacs-lisp
828 Removed: (menu-bar-mode -1)
829 Removed: (tool-bar-mode -1)
830 Removed: #+END_SRC
831 Removed:
832 Removed: *** Dividers
833 Removed:
834 Removed: This ensures users can resize windows using the GUI. It also creates a useful
835 Removed: separation between the bottom of the frame and the echo area.
836 Removed:
837 Removed: #+BEGIN_SRC emacs-lisp
838 Removed: (menu-bar-bottom-and-right-window-divider)
839 Removed: #+END_SRC
840 Removed:
841 Removed: *** TODO Header & mode line
842 Removed: Complete mode line rewrite. Might require new package.
843 Removed:
844 Removed: Top of the buffer is more intuitive for buffer info, bottom is more intuitive
845 Removed: for buffer action.
846 Removed:
847 Removed: This is pretty much a gutted out powerline.
848 Removed:
849 Removed: **** Header line
850 Removed:
851 Removed: #+BEGIN_SRC emacs-lisp
852 Removed: (setq header-line-format "%b")
853 Removed: #+END_SRC
854 Removed:
855 Removed: **** Mode line
856 Removed:
857 Removed: #+BEGIN_SRC emacs-lisp
858 Removed: (setq mode-line-format nil)
859 Removed: #+END_SRC
860 Removed:
861 Removed: ** Window
862 Removed:
863 Removed: ** Buffer
864 Removed:
865 Removed: Save cursor location in visited buffer after closing it or Emacs.
866 Removed:
867 Removed: #+BEGIN_SRC emacs-lisp
868 Removed: (save-place-mode 1)
869 Removed: #+END_SRC
870 Removed:
871 Removed: *** Column filling
872 Removed:
873 Removed: A line of text is considered ``filled'' when it reaches 79 characters in
874 Removed: length.
875 Removed:
876 Removed: #+BEGIN_SRC emacs-lisp
877 Removed: (setq-default fill-column 79)
878 Removed: #+END_SRC
879 Removed:
880 Removed: Automatically break lines longer than =fill-column=.
881 Removed:
882 Removed: #+BEGIN_SRC emacs-lisp
883 Removed: (add-hook 'org-mode-hook 'turn-on-auto-fill)
884 Removed: #+END_SRC
885 Removed:
886 Removed: ** Minibuffer
887 Removed:
888 Removed: We replace the longer ~yes-or-no-p~ questions with more convenient ~y-or-n-p~.
889 Removed:
890 Removed: #+BEGIN_SRC emacs-lisp
891 Removed: (defalias 'yes-or-no-p 'y-or-n-p)
892 Removed: #+END_SRC
893 Removed:
894 Removed: Disable minibuffer scroll bar.
895 Removed:
896 Removed: #+BEGIN_SRC emacs-lisp
897 Removed: (set-window-scroll-bars (minibuffer-window) nil nil)
898 Removed: #+END_SRC
899 Removed:
900 Removed: * Themes
901 Removed:
902 Removed: Without a carefully designed theme, our editor could become unusable. Thus, we
903 Removed: describe two themes that were developed purposefully and iteratively.
904 Removed:
905 Removed: #+BEGIN_SRC emacs-lisp
906 Removed: (setq custom-theme-directory (concat user-emacs-directory "themes/"))
907 Removed: (load-theme 'blendoit-light)
908 Removed: ; (load-theme 'blendoit-dark)
909 Removed: #+END_SRC
910 Removed:
911 Removed: ** My light and dark themes
912 Removed:
913 Removed: A highly legible unambiguous and thoughtful theme.
914 Removed:
915 Removed: *** Colors
916 Removed:
917 Removed: The default face is a black foreground on a white background, this matches MS
918 Removed: Word. We are striving for a simple, intuitive color scheme.
919 Removed:
920 Removed: Most of the visual cues derived from color are identical in both light and dark
921 Removed: themes (Table [[theme-color-1]]).
922 Removed:
923 Removed: #+NAME: theme-color-1
924 Removed: #+CAPTION[Light and dark themes' colors]: Light and dark themes' colors.
925 Removed: #+ATTR_LATEX: :booktabs t
926 Removed: | Color | ~blendoit-light~ | ~blendoit-dark~ |
927 Removed: |---------------------------------+---------------------------------+--------------------|
928 Removed: | Black | default text | default background |
929 Removed: | Lighter shades | lesser headers | /n/a/ |
930 Removed: | White | default background | default text |
931 Removed: | Darker shades | /n/a/ | lesser headers |
932 Removed: | \color{Red} Red | negative | /same/ |
933 Removed: | \color{Tomato} Tomato | timestamp `TODO' | /same/ |
934 Removed: | \color{Green} Green | positive | /same/ |
935 Removed: | \color{ForestGreen} ForestGreen | timestamp `DONE' | /same/ |
936 Removed: | \color{Blue} Blue | interactable content; links | /same/ |
937 Removed: | \color{SteelBlue} SteelBlue | anything Org mode; anchor color | /same/ |
938 Removed: | \color{DeepSkyBlue} DeepSkyBlue | ~highlight~ | /same/ |
939 Removed: | \color{DodgerBlue} DodgerBlue | ~isearch~ | /same/ |
940 Removed: | \color{Purple} Purple | | |
941 Removed:
942 Removed: *** Cursors
943 Removed:
944 Removed: In order to imitate other modern text editors, we resort to a blinking bar
945 Removed: cursor. We choose red, the most captivating color, because the cursor is
946 Removed: arguably the region on our screen:
947 Removed:
948 Removed: 1. most often looked at;
949 Removed: 2. most often searched when lost.
950 Removed:
951 Removed: In files containing only ~fixed-pitch~ fonts (i.e. files containing only code),
952 Removed: the cursor becomes a high-visibility box.
953 Removed:
954 Removed: In files containing a mix of ~variable-pitch~ and ~fixed-pitch~ fonts, the
955 Removed: cursor is a more MS Word-like bar.
956 Removed:
957 Removed: #+BEGIN_SRC emacs-lisp
958 Removed: (setq-default cursor-type 'bar)
959 Removed: #+END_SRC
960 Removed:
961 Removed: *** Faces
962 Removed:
963 Removed: - ~default~: Hack
964 Removed: - Legible, modern monospace font
965 Removed: - Strict, sharp, uncompromising
966 Removed: - ~fixed-pitch~: Hack
967 Removed: - ~variable-pitch~: Liberation Sans
968 Removed: - Libre alternative to Arial
969 Removed: - ~org-block~: Hermit
970 Removed: - Slightly wider than Hack
971 Removed: - More opinionated shapes
972 Removed: - Very legible parentheses
973 Removed:
974 Removed: **** ~variable-pitch-mode~
975 Removed:
976 Removed: We use ~variable-pitch-mode~ for appropriate modes.
977 Removed:
978 Removed: #+BEGIN_SRC emacs-lisp
979 Removed: (add-hook 'org-mode-hook 'variable-pitch-mode)
980 Removed: (add-hook 'info-mode-hook 'variable-pitch-mode)
981 Removed: #+END_SRC
982 Removed:
983 Removed: **** TODO Default font size
984 Removed:
985 Removed: Make default font size larger on displays of which the resolution is greater
986 Removed: than =1920x1080=.
987 Removed:
988 Removed: #+BEGIN_SRC emacs-lisp
989 Removed: #+END_SRC
990 Removed:
991 Removed: ** TODO ~minimal~
992 Removed:
993 Removed: * Late setup
994 Removed:
995 Removed: At this point, our editor is almost ready to run. Phew! All that's left to do
996 Removed: is to interrupt our profiling activities, and smartly store the result of our
997 Removed: profiling.
998 Removed:
999 Removed: ** Profiling --- stop
1000 Removed:
1001 Removed: #+BEGIN_SRC emacs-lisp
1002 Removed: ;; (profiler-stop)
1003 Removed: #+END_SRC
1004 Removed:
1005 Removed: ** Profiling --- report
1006 Removed:
1007 Removed: #+BEGIN_SRC emacs-lisp
1008 Removed: ;; (profiler-report)
1009 Removed: #+END_SRC
1010 Removed:
1011 Removed: * Conclusion
1012 Removed:
1013 Removed: In this configuration file, we described a series of customization steps taken
1014 Removed: to make Emacs more palatable to modern IDE users.
blendoit/blendoit-init.pdf
index f9f49851..00000000 100644..000000

Binary files differ

blendoit/blendoit-sidebar.el.bkp
index 86770835..00000000 100644..000000
@@ -1,23 +0,0 @@
1 Removed: ;;; blendoit-sidebar.el --- Modern buffer list in sidebar
2 Removed:
3 Removed: ;; Copyright (C) 2020 Marius Peter
4 Removed:
5 Removed: ;; Author: Marius Peter <mpeter@ucla.edu>
6 Removed: ;; Version: 0.1
7 Removed: ;; Package-Requires: ((flange "1.0"))
8 Removed: ;; Keywords: multimedia, frobnicate
9 Removed: ;; URL: http://example.com/jrhacker/superfrobnicate
10 Removed:
11 Removed: ;; Commentary:
12 Removed:
13 Removed: ;; This package provides an auto-hiding sidebar with a list of open buffers.
14 Removed:
15 Removed: ;; Code:
16 Removed:
17 Removed: ;;;###autoload
18 Removed: (define-minor-mode blendoit-sidebar-mode)
19 Removed:
20 Removed:
21 Removed: (provide 'blendoit-sidebar)
22 Removed:
23 Removed: ;;; blendoit-sidebar.el ends here
init-custom.el
index 55f9072a..4aab2a2d 100644..100644
@@ -15,11 +15,11 @@
15 15 '(company-quickhelp-color-foreground "#DCDCCC")
16 16 '(custom-enabled-themes nil)
17 17 '(custom-safe-themes
18 Removed: '("311aa5df3223b5b4a7c638aad3befb4de9c7f46360d52acd1fa2cd2232b1dcbd" default))
18 Added: '("5c32236ef318adafe4102f627f330fa8f448046dfd838eef5cc09c7f682cf71f" "e343fecfb8d681186d594002c9b44ce48c2061599d7e4ec635cf1ca2a277a47a" "302dc61dc55600c7424f945dce9e74fba7df19f4a7bfb72aefd93193fa82ede4" "58f1f85248ba913387d1e7ed02a867161b315cfb5acff0c234e013ffd2577d22" "a256abf590bbc3257cc11d91a312e9fe8487dc1b95a5b7b732dd2f96a7fe5a45" "30368d6195cae9298304e6ac0534b90c85b1655965f1206c5c624270f0f46002" "311aa5df3223b5b4a7c638aad3befb4de9c7f46360d52acd1fa2cd2232b1dcbd" default))
19 19 '(fci-rule-color "#383838")
20 20 '(fringe-mode 0 nil (fringe))
21 21 '(indicate-empty-lines t)
22 Removed: '(line-number-mode nil)
22 Added: '(line-number-mode t)
23 23 '(message-required-headers '((optional . References) From))
24 24 '(nrepl-message-colors
25 25 '("#CC9393" "#DFAF8F" "#F0DFAF" "#7F9F7F" "#BFEBBF" "#93E0E3" "#94BFF3" "#DC8CC3"))
init.el
index 70093d29..9f56fa4f 100644..100644
@@ -10,35 +10,10 @@
10 10
11 11 ;;; Code:
12 12
13 Removed: ;; SET BACKUPS AND SAVE BEHAVIOURS HERE
13 Added: (org-babel-load-file "~/.emacs.d/smart-documents.org")
14 14
15 Removed: (org-babel-load-file "~/.emacs.d/blendoit/blendoit-init.org")
16 Removed:
17 Removed: (setq my/literate-config (concat user-emacs-directory "blendoit/blendoit-init.org"))
18 Removed: (setq my/literate-config-compiled (concat user-emacs-directory "blendoit/blendoit-init.elc"))
19 Removed:
20 Removed: ;; (defun my/load-config-linux ()
21 Removed: ;; "Bootstrap a full `.emacs.d/' configuration for GNU/Linux."
22 Removed: ;; (setq user-emacs-directory "/run/media/blendux/1924-4A2F/dotemacs/")
23 Removed: ;; (setq my/literate-config (concat user-emacs-directory "blendoit/blendoit-init.org"))
24 Removed: ;; (setq my/literate-config-compiled (concat user-emacs-directory "blendoit/blendoit-init.elc"))
25 Removed: ;; (load-file my/literate-config-compiled)
26 Removed: ;; (message "It worked. Take a break."))
27 Removed:
28 Removed: ;; (defun my/load-config-windows ()
29 Removed: ;; "Bootstrap a full `.emacs.d/' configuration for MS Windows."
30 Removed: ;; (setq alphabet (mapcar 'string "ABCDEFFGHIJKLMNOPQRSTUVWXYZ"))
31 Removed: ;; (setq drives (mapcar '(lambda (drive) (concat drive ":")) alphabet))
32 Removed: ;; (setq user-emacs-directory (substring (locate-file "dotemacs/init.el" drives) 0 12))
33 Removed: ;; (setq my/literate-config (concat user-emacs-directory "blendoit/blendoit-init.org"))
34 Removed: ;; (setq my/literate-config-compiled (concat user-emacs-directory "blendoit/blendoit-init.elc"))
35 Removed: ;; (load-file my/literate-config-compiled)
36 Removed: ;; (message "It worked. Take a break."))
37 Removed:
38 Removed: ;; ;; Perform the configuration bootstrap, per the running OS.
39 Removed: ;; (cond ((string-equal system-type "gnu/linux") (my/load-config-linux))
40 Removed: ;; ((string-equal system-type "windows-nt") (my/load-config-windows))
41 Removed: ;; (t (message "You're running neither GNU/Linux nor MS Windows.")))
15 Added: (setq my/literate-config (concat user-emacs-directory "smart-documents.org"))
16 Added: ;; (setq my/literate-config-compiled (concat user-emacs-directory "blendoit-init.elc"))
42 17
43 18 (provide 'init)
44 19
smart-documents.org
index 00000000..dc3cf69e 000000..100644
@@ -0,0 +1,1086 @@
1 Added: # -*- mode: org; -*- #
2 Added:
3 Added: #+TITLE: Smart Documents
4 Added: #+AUTHOR: Marius Peter
5 Added: #+DATE: <2020-07-23 Thu>
6 Added: #+EMAIL: blendoit@gmail.com
7 Added: #+STARTUP: showall customtime
8 Added: #+SETUPFILE: ~/.emacs.d/templates/documents/general.org
9 Added: #+INCLUDE: ~/.emacs.d/templates/documents/general.org_title
10 Added:
11 Added: #+LATEX_HEADER: \setmainfont{urw gothic}
12 Added:
13 Added: #+LATEX: \begin{abstract}
14 Added: The idea of /Smart Documents/ came to me as I was reflecting on how to improve
15 Added: the document production process in my workplace. So much time was wasted on
16 Added: formatting; output PDFs were awfully inconsistent, and conveyed poor brand
17 Added: awareness from a typographical standpoint.
18 Added:
19 Added: #+LATEX: \end{abstract}
20 Added:
21 Added: * Introduction
22 Added:
23 Added: GNU Emacs is most often used as a text editor. The utmost level of
24 Added: customization is afforded by enabling the user to rewrite /any/ part of the
25 Added: source code and observe the editor's modified behaviour in real time. Since its
26 Added: inception in 1984, GNU Emacs has grown to be much more than a full-featured,
27 Added: high-productivity text editor---new /modes/ have been written to interact with
28 Added: hundreds of file formats, including =.txt=, =.pdf=, =.jpg=, =.csv=, and =.zip=
29 Added: just to name a few. This configuration file itself was written in /Org mode/, a
30 Added: collection of functions enabling the harmonious mixing of code and comments in
31 Added: view of publication: this is the endgame of /literate programming/, and the
32 Added: basis of my vision for /Smart Documents/.
33 Added:
34 Added: The following sections were laid out very deliberately. When we start Emacs,
35 Added: the source code blocks contained in this document are evaluated
36 Added: sequentially---our editing environment is constructed in real time as we
37 Added: execute the blocks in order. For instance, we only begin loading packages once
38 Added: we ensured ~use-package~ is working properly.[fn::For more information on the
39 Added: detailed steps Emacs takes upon starting, refer to
40 Added: [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Startup-Summary.html]].]
41 Added:
42 Added: Customizing Emacs goes far, far beyond this document---feel free to experiment
43 Added: and discover.
44 Added:
45 Added: - ~C-h f~ describe function
46 Added: - ~C-h v~ describe variable
47 Added: - ~C-h k~ describe key
48 Added:
49 Added: These three commands will attempt to describe the element currently under our
50 Added: cursor, however one can start typing to search for another symbol.
51 Added:
52 Added: ** =init.el=
53 Added:
54 Added: When Emacs first starts up, it looks for the following files in order and
55 Added: attempts to load the contents of the first existing file. From the manual:
56 Added:
57 Added: #+BEGIN_QUOTE
58 Added: Traditionally, file =~/.emacs= is used as the init file, although Emacs also
59 Added: looks at =~/.emacs.el=, =~/.emacs.d/init.el=, =~/.config/emacs/init.el=, or
60 Added: other
61 Added: locations.[fn::[[https://www.gnu.org/software/emacs/manual/html_node/emacs/Init-File.html]]]
62 Added: #+END_QUOTE
63 Added:
64 Added: If no file is found, Emacs then loads in its purely vanilla state.
65 Added:
66 Added: * TODO First-time setup
67 Added:
68 Added: ** TODO User details
69 Added:
70 Added: The advantage of working with /Smart Documents/ is that they can automatically
71 Added: be populated with our details in the header, footer, or other appropriate
72 Added: element.
73 Added:
74 Added: #+NAME: user-details
75 Added: #+BEGIN_SRC emacs-lisp
76 Added: (defun my/tokenize-user-details ()
77 Added: "Tokenize user details."
78 Added:
79 Added: (cons 'user-full-name user-full-name))
80 Added:
81 Added: (unless (file-exists-p (concat user-emacs-directory
82 Added: "meta/user-details"))
83 Added: (setq user-full-name (read-string "Enter full user name:"))
84 Added: (setq user-mail-address (read-string "Enter user e-mail address:"))
85 Added: (setq user-details '(user-full-name
86 Added: user-mail-address))
87 Added: (append-to-file "Foobar\n" nil "~/.emacs.d/meta/foobar"))
88 Added: #+END_SRC
89 Added:
90 Added:
91 Added:
92 Added: ** File system paths
93 Added:
94 Added: In this subsection, we tell Emacs about relevant paths to resources.
95 Added:
96 Added: On my MS Windows machine, I add the path to Portable Git.[fn::Download from
97 Added: https://git-scm.com/download/win]
98 Added:
99 Added: #+BEGIN_SRC emacs-lisp
100 Added: (when (string-equal system-type "windows-nt")
101 Added: (add-to-list 'exec-path "C:/Users/marius.peter/PortableGit/bin/"))
102 Added: #+END_SRC
103 Added:
104 Added: * Early setup
105 Added:
106 Added: ** Garbage collection
107 Added:
108 Added: First, we increase the RAM threshold beyond which the garbage collector is
109 Added: activated.
110 Added:
111 Added: #+NAME: garbage-collection
112 Added: #+BEGIN_SRC emacs-lisp
113 Added: (setq gc-cons-threshold 100000000)
114 Added: #+END_SRC
115 Added:
116 Added: ** Profiling --- start
117 Added:
118 Added: We start the profiler now , and will interrupt it in Section [[Profiling ---
119 Added: stop]]. We will then present profiling report in Section [[Profiling --- report]].
120 Added:
121 Added: #+NAME: profiler-start
122 Added: #+BEGIN_SRC emacs-lisp
123 Added: ; (profiler-start)
124 Added: #+END_SRC
125 Added:
126 Added: ** TODO Emacs client
127 Added:
128 Added: Makes opening emacs faster for following instances.
129 Added:
130 Added: #+NAME: emacs-client
131 Added: #+BEGIN_SRC emacs-lisp
132 Added: ; (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*")))
133 Added: #+END_SRC
134 Added:
135 Added: ** Customization shortcuts
136 Added:
137 Added: We begin by defining a user shortcut to this very file. We load this as early as
138 Added: possible, this facilitates debugging.
139 Added:
140 Added: #+NAME: shortcut-config
141 Added: #+BEGIN_SRC emacs-lisp
142 Added: (defun my/find-literate-config ()
143 Added: "Jump to this very file."
144 Added: (interactive)
145 Added: (find-file my/literate-config))
146 Added:
147 Added: (global-set-key (kbd "C-c c") 'my/find-literate-config)
148 Added: #+END_SRC
149 Added:
150 Added: Now, different shortcuts for other customization actions:
151 Added:
152 Added: #+NAME: shortcuts-customization
153 Added: #+BEGIN_SRC emacs-lisp
154 Added: (global-set-key (kbd "C-c v") 'customize-variable)
155 Added: (global-set-key (kbd "C-c f") 'customize-face)
156 Added: #+END_SRC
157 Added:
158 Added: ** Locations
159 Added:
160 Added: In this section, we'll be tidying up the =.emacs.d/= directory---by default,
161 Added: many Emacs packages create files useful for themselves in our
162 Added: ~user-emacs-directory~. This leads to undesirable clutter. Certain packages
163 Added: create files that log recently visited files ([[Recently visited files]]); log
164 Added: location of known projects ([[Projects' bookmarks]]); log location in recently
165 Added: visited files ([[Location in previously visited file]]) The commonality
166 Added: between all these files is that they tend to reference... other files. Thus, I
167 Added: decided to refer to them as meta-files. First, let's designate a folder to collect
168 Added: our meta-files together:
169 Added:
170 Added: #+BEGIN_SRC emacs-lisp
171 Added: (setq my/meta-files-location (concat user-emacs-directory "meta/"))
172 Added: #+END_SRC
173 Added:
174 Added: *** Custom file
175 Added:
176 Added: Load settings created automatically by GNU Emacs Custom. (For example, any
177 Added: clickable option/toggle is saved here.) Useful for fooling around with ~M-x
178 Added: customize-group <package>~.
179 Added:
180 Added: #+NAME: custom-file-location
181 Added: #+BEGIN_SRC emacs-lisp
182 Added: (setq custom-file (concat user-emacs-directory "init-custom.el"))
183 Added: (load custom-file)
184 Added: #+END_SRC
185 Added:
186 Added: *** Recently visited files
187 Added:
188 Added: #+BEGIN_SRC emacs-lisp
189 Added: (setq recentf-save-file (concat
190 Added: my/meta-files-location
191 Added: "recentf"))
192 Added: #+END_SRC
193 Added:
194 Added: *** Projects' bookmarks
195 Added:
196 Added: #+BEGIN_SRC emacs-lisp
197 Added: (setq projectile-known-projects-file (concat
198 Added: my/meta-files-location
199 Added: "projectile-bookmarks.eld"))
200 Added: #+END_SRC
201 Added:
202 Added: *** Location in previously visited file
203 Added:
204 Added: #+BEGIN_SRC emacs-lisp
205 Added: (setq save-place-file (concat
206 Added: my/meta-files-location
207 Added: "places"))
208 Added: #+END_SRC
209 Added:
210 Added: ** Backups
211 Added:
212 Added: Backups are so important that they should be described right after the shortcut
213 Added: to this file.
214 Added:
215 Added: #+BEGIN_SRC emacs-lisp
216 Added: (setq backup-directory-alist `((".*" . ,temporary-file-directory))
217 Added: auto-save-file-name-transforms `((".*" ,temporary-file-directory t))
218 Added: backup-by-copying t ; Don't delink hardlinks
219 Added: version-control t ; Use version numbers on backups
220 Added: delete-old-versions t ; Automatically delete excess backups
221 Added: kept-new-versions 20 ; how many of the newest versions to keep
222 Added: kept-old-versions 5 ; and how many of the old
223 Added: )
224 Added: #+END_SRC
225 Added:
226 Added: ** Initial and default frames
227 Added:
228 Added: We set the dimensions of the inital and default frames.
229 Added:
230 Added: #+BEGIN_SRC emacs-lisp
231 Added: (add-to-list 'default-frame-alist '(width . 100))
232 Added: (add-to-list 'default-frame-alist '(height . 50))
233 Added:
234 Added: (add-to-list 'initial-frame-alist '(width . 100))
235 Added: (add-to-list 'initial-frame-alist '(height . 50))
236 Added: #+END_SRC
237 Added:
238 Added: *** GNU/Linux
239 Added:
240 Added: These settings affect the first and subsequent frames spawned by Emacs in
241 Added: GNU/Linux. Frame transparency increases when focus is lost.
242 Added:
243 Added: #+BEGIN_SRC emacs-lisp
244 Added: (when (and (display-graphic-p) (string-equal system-type "gnu/linux"))
245 Added: (set-frame-parameter (selected-frame) 'alpha '(90 . 50))
246 Added: (add-to-list 'default-frame-alist '(alpha . (90 . 50))))
247 Added: #+END_SRC
248 Added:
249 Added: ** Secrets
250 Added:
251 Added: The code containe din the =secrets.org= file is loaded by Emacs, but not
252 Added: rendered in this PDF for the sake of privacy. It contains individually
253 Added: identifying information such as names and e-mail addresses, which are used to
254 Added: populate Org templates (Section [[~org-mode~]]). You need to create this
255 Added: =secrets.org= file, as it is ignored by =git= by default.
256 Added:
257 Added: #+BEGIN_SRC emacs-lisp
258 Added: (org-babel-load-file "~/.emacs.d/secrets.org")
259 Added: #+END_SRC
260 Added:
261 Added: * Global key bindings
262 Added:
263 Added: The following bindings strive to further enhance CUA mode.[fn::Common User
264 Added: Access. This is a term coined by IBM which has influenced user navigation cues
265 Added: on all modern desktop OSes. From IBM's CUA, we get the =Ctrl-v= and =Ctrl-v=
266 Added: keyboard shortcuts.]
267 Added:
268 Added: #+BEGIN_SRC emacs-lisp
269 Added: (cua-mode)
270 Added: #+END_SRC
271 Added:
272 Added: ** Keyboard navigation
273 Added:
274 Added: *** Saving a file
275 Added:
276 Added: #+BEGIN_SRC emacs-lisp
277 Added: (global-set-key (kbd "C-s") 'save-buffer)
278 Added: #+END_SRC
279 Added:
280 Added: *** Opening a file
281 Added:
282 Added: #+BEGIN_SRC emacs-lisp
283 Added: (global-set-key (kbd "C-o") 'find-file)
284 Added: #+END_SRC
285 Added:
286 Added: *** Opening a recently visited file
287 Added:
288 Added: #+BEGIN_SRC emacs-lisp
289 Added: (global-set-key (kbd "C-r") 'counsel-recentf)
290 Added: #+END_SRC
291 Added:
292 Added: *** Make only window
293 Added:
294 Added: #+BEGIN_SRC emacs-lisp
295 Added: (global-set-key (kbd "C-`") 'delete-other-windows)
296 Added: #+END_SRC
297 Added:
298 Added: *** Locating a file
299 Added:
300 Added: #+BEGIN_SRC emacs-lisp
301 Added: (global-set-key (kbd "C-c l") 'counsel-locate)
302 Added: #+END_SRC
303 Added:
304 Added: *** Closing window and quitting Emacs
305 Added:
306 Added: #+BEGIN_SRC emacs-lisp
307 Added: (defun my/delete-window-or-previous-buffer ()
308 Added: "Delete window; if sole window, previous buffer."
309 Added: (interactive)
310 Added: (if (> (length (window-list)) 1)
311 Added: (delete-window)
312 Added: (previous-buffer)))
313 Added: #+END_SRC
314 Added:
315 Added: The following bindings lead to more natural exit behaviors.
316 Added:
317 Added: #+BEGIN_SRC emacs-lisp
318 Added: (global-set-key (kbd "C-w") 'my/delete-window-or-previous-buffer)
319 Added: (global-set-key (kbd "C-q") 'save-buffers-kill-terminal)
320 Added: #+END_SRC
321 Added:
322 Added: ** Mouse zoom
323 Added:
324 Added: The typical binding on both GNU/Linux and MS Windows is adequate here: ~C-=~ to
325 Added: zoom in, ~C--~ to zoom out.
326 Added:
327 Added: It seems that starting with Emacs 27.1, Control + mousewheel works.
328 Added:
329 Added: #+BEGIN_SRC emacs-lisp
330 Added: (global-set-key (kbd "C--") 'text-scale-decrease)
331 Added: (global-set-key (kbd "C-=") 'text-scale-increase)
332 Added: (global-set-key (kbd "C-+") 'text-scale-increase)
333 Added: #+END_SRC
334 Added:
335 Added: * Packages
336 Added:
337 Added: Packages are collections of =.el= files providing added functionality to Emacs.
338 Added:
339 Added: ** Meta
340 Added:
341 Added: How do we bootstrap packages? First, let's figure out:
342 Added:
343 Added: 1. Where we get our packages from
344 Added: 2. How we upgrade packages
345 Added: 3. How we ensure our required packages are installed
346 Added:
347 Added: *** Package archives
348 Added:
349 Added: List of package archives.
350 Added:
351 Added: #+NAME: package-archives
352 Added: #+BEGIN_SRC emacs-lisp
353 Added: (require 'package)
354 Added: (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
355 Added: (add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/") t)
356 Added: (package-initialize)
357 Added: #+END_SRC
358 Added:
359 Added: *** TODO Convenient package update
360 Added:
361 Added: One-function rollup of upgradeable package tagging, download and lazy install.
362 Added:
363 Added: #+BEGIN_SRC emacs-lisp
364 Added:
365 Added: #+END_SRC
366 Added:
367 Added: *** ~use-package~
368 Added:
369 Added: We ensure =use-package= is installed, as well as all packages described in this
370 Added: configuration file.
371 Added:
372 Added: #+BEGIN_SRC emacs-lisp
373 Added: (unless (package-installed-p 'use-package)
374 Added: (package-refresh-contents)
375 Added: (package-install 'use-package)
376 Added: (eval-when-compile (require 'use-package)))
377 Added: (setq use-package-always-ensure t)
378 Added: (require 'use-package)
379 Added: (require 'bind-key)
380 Added: #+END_SRC
381 Added:
382 Added: ** ~org-mode~
383 Added:
384 Added: Phew, I can finally introduce Org mode! I am so *excited*.
385 Added:
386 Added: Org mode replaces aword processor, a presentation creator, and a spreadsheet
387 Added: editor. IMHO, the spreadsheet ability captures more than 80% use cases wherein
388 Added: one wishes to include a table in a text document destined for physical
389 Added: publication. (It is clear that Excel spreadsheets are /not/ destined for
390 Added: physical publication---simply attempt to print an Excel spreadsheet with the
391 Added: default settings.) In my opinion, Org mode matches all /useful/ features of
392 Added: the Microsoft Office suite 1-to-1.
393 Added:
394 Added: What follows are customizations designed to make Org mode behave more like
395 Added: Microsoft Word. The end goal is, once again, to draw as many new users to Emacs
396 Added: as possible!
397 Added:
398 Added: *** Basic customization
399 Added:
400 Added: Org base directory is in user home on GNU/Linux, or in =AppData= in MS Windows.
401 Added:
402 Added: #+NAME: org-basic
403 Added: #+BEGIN_SRC emacs-lisp
404 Added: (setq org-directory (concat user-emacs-directory "~/org"))
405 Added: #+END_SRC
406 Added:
407 Added: First, we hide markup symbols for *bold*, /italic/, _underlined_ and
408 Added: +strikethrough+ text, and ensure our document appears indented upon
409 Added: loading:[fn::It /appears/ indented, but the underlying plaintext file does not
410 Added: contain tab characters!]
411 Added:
412 Added: For the time being, I will in fact display emphasis markers, because hiding
413 Added: them corrupts tables.
414 Added:
415 Added: #+NAME: org-basic
416 Added: #+BEGIN_SRC emacs-lisp
417 Added: (setq org-hide-emphasis-markers nil)
418 Added: (setq org-startup-indented t)
419 Added: #+END_SRC
420 Added:
421 Added: *** Languages executable in smart documents
422 Added:
423 Added: The following languages can be written inside =SRC= blocks, in view of being
424 Added: executed by the Org Babel backend.
425 Added:
426 Added: #+BEGIN_SRC emacs-lisp
427 Added: (setq org-babel-load-languages
428 Added: '((shell . t)
429 Added: (python . t)
430 Added: (plantuml . t)
431 Added: (emacs-lisp . t)
432 Added: (awk . t)
433 Added: (ledger . t)
434 Added: (gnuplot . t)
435 Added: (latex . t)))
436 Added: #+END_SRC
437 Added:
438 Added: *** Prevent or warn on invisible edits
439 Added:
440 Added: #+BEGIN_SRC emacs-lisp
441 Added: (setq org-catch-invisible-edits t)
442 Added: #+END_SRC
443 Added:
444 Added: *** Agenda
445 Added:
446 Added: The agenda displays a chronological list of headings across all agenda files
447 Added: for which the heading or body contain a matching =org-time-stamp=.[fn::An
448 Added: =org-time-stamp= can be inserted with ~C-c .~ (period)]
449 Added:
450 Added: #+BEGIN_SRC emacs-lisp
451 Added: (global-set-key (kbd "C-c a") 'org-agenda-list)
452 Added:
453 Added: (defun my/find-diary-file ()
454 Added: "Load `org-agenda-diary-file'."
455 Added: (interactive)
456 Added: (find-file org-agenda-diary-file))
457 Added:
458 Added: (global-set-key (kbd "C-c d") 'my/find-diary-file)
459 Added: #+END_SRC
460 Added:
461 Added: *** Timestamps
462 Added:
463 Added: More literary timestamps are exported to LaTeX using the following custom
464 Added: format:
465 Added:
466 Added: #+BEGIN_SRC emacs-lisp
467 Added: (setq org-time-stamp-custom-formats
468 Added: '("%d %b. %Y (%a)" . "%d %b. %Y (%a), at %H:%M"))
469 Added: #+END_SRC
470 Added:
471 Added: *** LaTeX export
472 Added:
473 Added: We'll be compiling our documents with LuaTeX. This will afford us some
474 Added: future-proofing, since it was designated as the successor to pdfTeX by the
475 Added: latter's creators.
476 Added:
477 Added: First, we define the command executed when an Org file is exported to
478 Added: LaTeX. We'll use =latexmk=, the Perl script which automagically runs binaries
479 Added: related to LaTeX in the correct order and the right amount of times.
480 Added:
481 Added: Options and why we need them:
482 Added: - ~-shell-excape~ :: required by minted to color source blocks
483 Added: - ~-pdflatex=lualatex~ :: we use lualatex to generate our PDF
484 Added: - ~-interaction=nonstopmode~ :: go as far as possible without prompting user
485 Added: for input
486 Added:
487 Added: #+BEGIN_SRC emacs-lisp
488 Added: (setq org-latex-pdf-process
489 Added: '("latexmk -pdf -f \
490 Added: -pdflatex=lualatex -shell-escape \
491 Added: -interaction=nonstopmode -outdir=%o %f"))
492 Added: #+END_SRC
493 Added:
494 Added: We customize the format for org time stamps to make them appear monospaced in
495 Added: our exported LaTeX documents. This makes them visually distinguishable from
496 Added: body text.
497 Added:
498 Added: #+BEGIN_SRC emacs-lisp
499 Added: (setq org-latex-active-timestamp-format
500 Added: "\\texttt{%s}")
501 Added: (setq org-latex-inactive-timestamp-format
502 Added: "\\texttt{%s}")
503 Added: #+END_SRC
504 Added:
505 Added: The following packages are loaded for every time we export to LaTeX.
506 Added:
507 Added: #+BEGIN_SRC emacs-lisp
508 Added: (setq org-latex-packages-alist
509 Added: '(("AUTO" "polyglossia" t
510 Added: ("xelatex" "lualatex"))
511 Added: ("AUTO" "babel" t
512 Added: ("pdflatex"))
513 Added: ("" "booktabs" t
514 Added: ("pdflatex"))
515 Added: ("table,svgnames" "xcolor" t
516 Added: ("pdflatex"))))
517 Added: #+END_SRC
518 Added:
519 Added: Little bonus for GNU/Linux users: syntax highlighting for source code blocks in
520 Added: LaTeX exports.
521 Added:
522 Added: #+BEGIN_SRC emacs-lisp
523 Added: (when (string-equal system-type "gnu/linux")
524 Added: (add-to-list 'org-latex-packages-alist '("AUTO" "minted" t
525 Added: ("pdflatex" "lualatex")))
526 Added: (setq org-latex-listings 'minted)
527 Added: (setq org-latex-minted-options
528 Added: '(("style" "friendly") ())))
529 Added: #+END_SRC
530 Added:
531 Added: Now, we set the files to be deleted when a LaTeX \rightarrow PDF compilation
532 Added: occurs. We only care about two files, in the end: the Org mode file for
533 Added: edition, and the PDF for distribution.
534 Added:
535 Added: #+BEGIN_SRC emacs-lisp
536 Added: (setq org-latex-logfiles-extensions
537 Added: '("aux" "bcf" "blg" "fdb_latexmk"
538 Added: "fls" "figlist" "idx" "log" "nav"
539 Added: "out" "ptc" "run.xml" "snm" "toc" "vrb" "xdv"
540 Added: "tex" "lot" "lof"))
541 Added: #+END_SRC
542 Added:
543 Added: By default, Org agenda inserts diary entries as the first under the selected
544 Added: date. It is preferable to insert entries in the order that they were recorded,
545 Added: i.e. chronologically.
546 Added:
547 Added: #+BEGIN_SRC emacs-lisp
548 Added: (setq org-agenda-insert-diary-strategy 'date-tree-last)
549 Added: #+END_SRC
550 Added:
551 Added: What follows are the document class structures that can be exported in LaTeX.
552 Added:
553 Added: #+BEGIN_SRC emacs-lisp
554 Added: (setq org-latex-classes
555 Added: '(("article" "\\documentclass[11pt]{article}"
556 Added: ("\\section{%s}" . "\\section*{%s}")
557 Added: ("\\subsection{%s}" . "\\subsection*{%s}")
558 Added: ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
559 Added: ("\\paragraph{%s}" . "\\paragraph*{%s}")
560 Added: ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
561 Added: ("report" "\\documentclass[11pt]{report}"
562 Added: ("\\part{%s}" . "\\part*{%s}")
563 Added: ("\\chapter{%s}" . "\\chapter*{%s}")
564 Added: ("\\section{%s}" . "\\section*{%s}")
565 Added: ("\\subsection{%s}" . "\\subsection*{%s}")
566 Added: ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
567 Added: ("book" "\\documentclass[12pt]{book}"
568 Added: ("\\part{%s}" . "\\part*{%s}")
569 Added: ("\\chapter{%s}" . "\\chapter*{%s}")
570 Added: ("\\section{%s}" . "\\section*{%s}")
571 Added: ("\\subsection{%s}" . "\\subsection*{%s}")
572 Added: ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
573 Added: ("book-blendoit" "\\documentclass[12pt]{book}"
574 Added: ("\\chapter{%s}" . "\\chapter*{%s}")
575 Added: ("\\section{%s}" . "\\section*{%s}")
576 Added: ("\\subsection*{%s}" . "\\subsection*{%s}")
577 Added: ("\\subsubsection*{%s}" . "\\subsubsection*{%s}"))))
578 Added: #+END_SRC
579 Added:
580 Added: By default, body text can immediately follow the table of contents. It is
581 Added: however cleaner to separate table of contents with the rest of the work.
582 Added:
583 Added: #+BEGIN_SRC emacs-lisp
584 Added: (setq org-latex-toc-command "\\tableofcontents\\clearpage")
585 Added: #+END_SRC
586 Added:
587 Added:
588 Added:
589 Added: The following makes =TODO= items appear red and =CLOSED= items appear green in
590 Added: Org's LaTeX exports. Very stylish, much flair!
591 Added:
592 Added: *** TODO Export
593 Added:
594 Added: This creates a shorter binding for the most common Org export: Org \rightarrow
595 Added: LaTeX \rightarrow PDF.
596 Added:
597 Added: #+BEGIN_SRC emacs-lisp
598 Added: (defun my/org-quick-export ()
599 Added: "Org async export to PDF and open.
600 Added: This basically reimplements `C-c C-e C-a l o'."
601 Added: (interactive)
602 Added: (org-open-file (org-latex-export-to-pdf)))
603 Added:
604 Added: (global-set-key (kbd "C-c e") 'my/org-quick-export)
605 Added: #+END_SRC
606 Added:
607 Added: ** TODO ~evil-mode~
608 Added:
609 Added: Forgive me, for I have sinned.
610 Added:
611 Added: This is the 2^{nd} most significant customization after ~org-mode~. Enabling
612 Added: ~evil-mode~ completely changes editing keys.[fn::For more information on =vi=
613 Added: keybindings, visit [[https://hea-www.harvard.edu/~fine/Tech/vi.html]].]
614 Added:
615 Added: #+BEGIN_SRC emacs-lisp
616 Added: (use-package evil)
617 Added: ; (setq evil-toggle-key "C-c d") ; devil...
618 Added: ; (evil-mode 1)
619 Added: #+END_SRC
620 Added:
621 Added: ** Spelling, completion, and snippets
622 Added:
623 Added: The following customizations open the doors to vastly increased typing speed
624 Added: and accuracy.
625 Added:
626 Added: *** ~flycheck~
627 Added:
628 Added: Syntax highlighting for Emacs.
629 Added:
630 Added: #+NAME: flycheck
631 Added: #+BEGIN_SRC emacs-lisp
632 Added: (use-package flycheck)
633 Added: (global-flycheck-mode)
634 Added: #+END_SRC
635 Added:
636 Added: *** TODO ~flyspell~
637 Added:
638 Added: #+NAME: flyspell
639 Added: #+BEGIN_SRC emacs-lisp
640 Added: (use-package flyspell)
641 Added: (add-hook 'text-mode-hook 'flyspell-mode)
642 Added: #+END_SRC
643 Added:
644 Added: *** Insert template from keyword
645 Added:
646 Added: Thanks to yasnippet, we can type certain keywords, press =TAB=, and this will
647 Added: automatically insert a text snippet. We may then navigate through the snippet
648 Added: by using =TAB= (next field) and =SHIFT-TAB= (previous field).
649 Added:
650 Added: For instance: Typing =src= then pressing =TAB= will expand the keyword to the
651 Added: following text:
652 Added:
653 Added: : #+BEGIN_SRC emacs-lisp
654 Added: :
655 Added: : #+END_SRC
656 Added:
657 Added: We notice that emacs-lisp is highlighted---this is the first modifiable field.
658 Added:
659 Added: #+NAME: yasnippet
660 Added: #+BEGIN_SRC emacs-lisp
661 Added: (use-package yasnippet)
662 Added: (yas-global-mode 1)
663 Added: #+END_SRC
664 Added:
665 Added: *** Complete anything interactively
666 Added:
667 Added: #+NAME: company
668 Added: #+BEGIN_SRC emacs-lisp
669 Added: ; (add-hook 'after-init-hook 'global-company-mode)
670 Added: #+END_SRC
671 Added:
672 Added: *** Delete all consecutive whitespaces
673 Added:
674 Added: #+NAME: company
675 Added: #+BEGIN_SRC emacs-lisp
676 Added: (use-package hungry-delete
677 Added: :init (hungry-delete-mode))
678 Added: #+END_SRC
679 Added:
680 Added: ** Utilities
681 Added:
682 Added: *** Versioning of files
683 Added:
684 Added: Wonderful Git porcelain for Emacs. Enables the administration of a Git
685 Added: repository in a pain-free way.
686 Added:
687 Added: #+BEGIN_SRC emacs-lisp
688 Added: (use-package magit
689 Added: :bind ("C-c g" . magit-status))
690 Added: #+END_SRC
691 Added:
692 Added: *** Navigate between projects
693 Added:
694 Added: This enables us to better manage our =.git= projects.
695 Added:
696 Added: #+BEGIN_SRC emacs-lisp
697 Added: (use-package projectile
698 Added: :bind ("C-c p" . 'projectile-command-map)
699 Added: :init (projectile-mode 1)
700 Added: (setq projectile-completion-system 'ivy))
701 Added: #+END_SRC
702 Added:
703 Added: *** Display keyboard shortcuts on screen
704 Added:
705 Added: #+BEGIN_SRC emacs-lisp
706 Added: (use-package which-key
707 Added: :init (which-key-mode))
708 Added: #+END_SRC
709 Added:
710 Added: *** Jump to symbol's definition
711 Added:
712 Added: #+BEGIN_SRC emacs-lisp
713 Added: (use-package dumb-jump)
714 Added: (add-hook 'xref-backend-functions #'dumb-jump-xref-activate)
715 Added: #+END_SRC
716 Added:
717 Added: *** Graphical representation of file history
718 Added:
719 Added: #+BEGIN_SRC emacs-lisp
720 Added: (use-package undo-tree)
721 Added: (global-undo-tree-mode)
722 Added: #+END_SRC
723 Added:
724 Added: *** Auto-completion framework
725 Added:
726 Added: #+BEGIN_SRC emacs-lisp
727 Added: (use-package ivy
728 Added: :config (setq ivy-use-virtual-buffers t
729 Added: ivy-count-format "%d/%d "
730 Added: enable-recursive-minibuffers t))
731 Added: (ivy-mode t)
732 Added: #+END_SRC
733 Added:
734 Added: **** Smartly suggesting interactive search matches
735 Added:
736 Added: Wonderful counsellor!
737 Added:
738 Added: #+BEGIN_SRC emacs-lisp
739 Added: (use-package counsel
740 Added: :bind ("M-x" . counsel-M-x)
741 Added: :config (counsel-mode t))
742 Added:
743 Added: (global-set-key (kbd "C-f") 'counsel-grep-or-swiper)
744 Added: #+END_SRC
745 Added:
746 Added: **** Searching for items
747 Added:
748 Added: #+BEGIN_SRC emacs-lisp
749 Added: (use-package swiper
750 Added: :bind (("C-f" . counsel-grep-or-swiper)))
751 Added: #+END_SRC
752 Added:
753 Added: ** File formats
754 Added:
755 Added: *** =csv= and Excel
756 Added:
757 Added: #+BEGIN_SRC emacs-lisp
758 Added: (use-package csv-mode)
759 Added: #+END_SRC
760 Added:
761 Added: *** Interacting with PDFs
762 Added:
763 Added: Org mode shines particularly when exporting to PDF---Org files can reliably be
764 Added: shared and exported to PDF in a reproducible fashion.
765 Added:
766 Added: #+BEGIN_SRC emacs-lisp
767 Added: (use-package pdf-tools)
768 Added: ;; (pdf-tools-install)
769 Added: #+END_SRC
770 Added:
771 Added: *** Accounting
772 Added:
773 Added: Ledger is a creation of John Wiegley's. It enables double-entry accounting in a
774 Added: simple plaintext format, and reliable verification of account balances through
775 Added: time.[fn::For more information, visit https://www.ledger-cli.org/.]
776 Added:
777 Added: #+BEGIN_SRC emacs-lisp
778 Added: (use-package ledger-mode
779 Added: :bind
780 Added: ("C-c r" . ledger-report)
781 Added: ("C-c C" . ledger-mode-clean-buffer))
782 Added: #+END_SRC
783 Added:
784 Added: These reports can be generated within Emacs. It is quite useful to pipe their
785 Added: output to an automated ``smart document''.
786 Added:
787 Added: #+BEGIN_SRC emacs-lisp
788 Added: (setq ledger-reports
789 Added: '(("bal" "%(binary) -f %(ledger-file) bal")
790 Added: ("bal-USD" "%(binary) -f %(ledger-file) bal --exchange USD")
791 Added: ("reg" "%(binary) -f %(ledger-file) reg")
792 Added: ("net-worth" "%(binary) -f %(ledger-file) bal ^Assets ^Liabilities --exchange USD")
793 Added: ("net-income" "%(binary) -f %(ledger-file) bal ^Income ^Expenses --exchange USD --depth 2 --invert")
794 Added: ("payee" "%(binary) -f %(ledger-file) reg @%(payee)")
795 Added: ("account" "%(binary) -f %(ledger-file) reg %(account)")
796 Added: ("budget" "%(binary) -f %(ledger-file) budget --exchange USD")))
797 Added: #+END_SRC
798 Added:
799 Added:
800 Added: *** Plotting & charting
801 Added:
802 Added: #+BEGIN_SRC emacs-lisp
803 Added: (use-package gnuplot)
804 Added: #+END_SRC
805 Added:
806 Added: ** Cosmetics
807 Added:
808 Added: *** Start page
809 Added:
810 Added: We replace the standard welcome screen with our own.
811 Added:
812 Added: #+BEGIN_SRC emacs-lisp
813 Added: (setq inhibit-startup-message t)
814 Added: (use-package dashboard
815 Added: :config
816 Added: (dashboard-setup-startup-hook)
817 Added: (setq dashboard-startup-banner (concat user-emacs-directory "img/Safran_logo.svg"))
818 Added: (setq dashboard-items '((recents . 5)
819 Added: (projects . 5)))
820 Added: (setq dashboard-banner-logo-title "A modern professional text editor."))
821 Added: #+END_SRC
822 Added:
823 Added: *** TODO Mode line
824 Added:
825 Added: #+NAME: powerline
826 Added: #+BEGIN_SRC emacs-lisp
827 Added: (use-package powerline)
828 Added: #+END_SRC
829 Added:
830 Added: *** TODO Sidebar
831 Added: Get inspiration from ~ibuffer-sidebar~ and create a better sidebar.
832 Added:
833 Added: #+BEGIN_SRC emacs-lisp
834 Added: ;; (load-file)
835 Added: #+END_SRC
836 Added:
837 Added: *** Better parentheses
838 Added:
839 Added: #+BEGIN_SRC emacs-lisp
840 Added: (use-package rainbow-delimiters
841 Added: :config (add-hook 'prog-mode-hook #'rainbow-delimiters-mode))
842 Added: (electric-pair-mode)
843 Added: (show-paren-mode 1)
844 Added: #+END_SRC
845 Added:
846 Added: *** Highlight ``color keywords'' in their color
847 Added:
848 Added: This highlights hexadecimal numbers which look like colors, in that same color.
849 Added:
850 Added: #+BEGIN_SRC emacs-lisp
851 Added: (use-package rainbow-mode
852 Added: :init
853 Added: (add-hook 'prog-mode-hook 'rainbow-mode))
854 Added: #+END_SRC
855 Added:
856 Added: *** UTF-8 bullet points in =Org mode=
857 Added:
858 Added: #+BEGIN_SRC emacs-lisp
859 Added: (use-package org-bullets
860 Added: :config
861 Added: (when (string-equal system-type "gnu/linux")
862 Added: (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))))
863 Added: #+END_SRC
864 Added:
865 Added: * Editing preferences
866 Added:
867 Added: These customizations enhance editor usability. They are not brought about
868 Added:
869 Added: ** Editor
870 Added:
871 Added: *** Coding standards
872 Added:
873 Added: This is just a better default. Don't @ me.
874 Added:
875 Added: #+BEGIN_SRC emacs-lisp
876 Added: (setq c-default-style "linux"
877 Added: c-basic-offset 4)
878 Added: #+END_SRC
879 Added:
880 Added: *** Recent files
881 Added:
882 Added: The keybinding for opening a recently visited file is described in paragraph
883 Added: [[Opening a recently visited file]].
884 Added:
885 Added: #+BEGIN_SRC emacs-lisp
886 Added: (recentf-mode 1)
887 Added: (setq recentf-max-menu-items 25)
888 Added: (setq recentf-max-saved-items 25)
889 Added: (run-at-time nil (* 5 60) 'recentf-save-list)
890 Added: #+END_SRC
891 Added:
892 Added: ** Frame
893 Added:
894 Added: *** Clean up menus
895 Added:
896 Added: Originally, I wished to inhibit certain entries in the GUI menus. Not worth the
897 Added: effort at this time.
898 Added:
899 Added: #+BEGIN_SRC emacs-lisp
900 Added: (menu-bar-mode -1)
901 Added: (tool-bar-mode -1)
902 Added: #+END_SRC
903 Added:
904 Added: *** Dividers
905 Added:
906 Added: This ensures users can resize windows using the GUI. It also creates a useful
907 Added: separation between the bottom of the frame and the echo area.
908 Added:
909 Added: #+BEGIN_SRC emacs-lisp
910 Added: (menu-bar-bottom-and-right-window-divider)
911 Added: #+END_SRC
912 Added:
913 Added: *** TODO Header & mode line
914 Added: Complete mode line rewrite. Might require new package.
915 Added:
916 Added: Top of the buffer is more intuitive for buffer info, bottom is more intuitive
917 Added: for buffer action.
918 Added:
919 Added: This is pretty much a gutted out powerline.
920 Added:
921 Added: **** Header line
922 Added:
923 Added: #+BEGIN_SRC emacs-lisp
924 Added: (setq header-line-format "%b")
925 Added: #+END_SRC
926 Added:
927 Added: **** Mode line
928 Added:
929 Added: #+BEGIN_SRC emacs-lisp
930 Added: (setq mode-line-format nil)
931 Added: #+END_SRC
932 Added:
933 Added: ** Window
934 Added:
935 Added: ** Buffer
936 Added:
937 Added: Save cursor location in visited buffer after closing it or Emacs.
938 Added:
939 Added: #+BEGIN_SRC emacs-lisp
940 Added: (save-place-mode 1)
941 Added: #+END_SRC
942 Added:
943 Added: *** Column filling
944 Added:
945 Added: A line of text is considered ``filled'' when it reaches 79 characters in
946 Added: length.
947 Added:
948 Added: #+BEGIN_SRC emacs-lisp
949 Added: (setq-default fill-column 79)
950 Added: #+END_SRC
951 Added:
952 Added: Automatically break lines longer than =fill-column=.
953 Added:
954 Added: #+BEGIN_SRC emacs-lisp
955 Added: (add-hook 'org-mode-hook 'turn-on-auto-fill)
956 Added: #+END_SRC
957 Added:
958 Added: ** Minibuffer
959 Added:
960 Added: We replace the longer ~yes-or-no-p~ questions with more convenient ~y-or-n-p~.
961 Added:
962 Added: #+BEGIN_SRC emacs-lisp
963 Added: (defalias 'yes-or-no-p 'y-or-n-p)
964 Added: #+END_SRC
965 Added:
966 Added: Disable minibuffer scroll bar.
967 Added:
968 Added: #+BEGIN_SRC emacs-lisp
969 Added: (set-window-scroll-bars (minibuffer-window) nil nil)
970 Added: #+END_SRC
971 Added:
972 Added: * Themes
973 Added:
974 Added: Without a carefully designed theme, our editor could become unusable. Thus, we
975 Added: describe two themes that were developed purposefully and iteratively.
976 Added:
977 Added: #+BEGIN_SRC emacs-lisp
978 Added: (setq custom-theme-directory (concat user-emacs-directory "themes/"))
979 Added: (load-theme 'blendoit-light)
980 Added: ; (load-theme 'blendoit-dark)
981 Added: #+END_SRC
982 Added:
983 Added: ** My light and dark themes
984 Added:
985 Added: A highly legible, unambiguous, and classic theme.
986 Added:
987 Added: *** Colors
988 Added:
989 Added: The default face is a black foreground on a white background, this matches MS
990 Added: Word. We are striving for a simple, intuitive color scheme.
991 Added:
992 Added: Most of the visual cues derived from color are identical in both light and dark
993 Added: themes (Table [[theme-color-1]]).
994 Added:
995 Added: #+NAME: theme-color-1
996 Added: #+CAPTION[Light and dark themes' colors]: Light and dark themes' colors.
997 Added: #+ATTR_LATEX: :booktabs t
998 Added: | Color | ~blendoit-light~ | ~blendoit-dark~ |
999 Added: |---------------------------------+---------------------------------+--------------------|
1000 Added: | Black | default text | default background |
1001 Added: | Lighter shades | lesser headers | /n/a/ |
1002 Added: | White | default background | default text |
1003 Added: | Darker shades | /n/a/ | lesser headers |
1004 Added: | \color{Red} Red | negative | /same/ |
1005 Added: | \color{Tomato} Tomato | timestamp `TODO' | /same/ |
1006 Added: | \color{Green} Green | positive | /same/ |
1007 Added: | \color{ForestGreen} ForestGreen | timestamp `DONE' | /same/ |
1008 Added: | \color{Blue} Blue | interactable content; links | /same/ |
1009 Added: | \color{SteelBlue} SteelBlue | anything Org mode; anchor color | /same/ |
1010 Added: | \color{DeepSkyBlue} DeepSkyBlue | ~highlight~ | /same/ |
1011 Added: | \color{DodgerBlue} DodgerBlue | ~isearch~ | /same/ |
1012 Added: | \color{Purple} Purple | | |
1013 Added:
1014 Added: *** Cursors
1015 Added:
1016 Added: In order to imitate other modern text editors, we resort to a blinking bar
1017 Added: cursor. We choose red, the most captivating color, because the cursor is
1018 Added: arguably the region on our screen:
1019 Added:
1020 Added: 1. most often looked at;
1021 Added: 2. most often searched when lost.
1022 Added:
1023 Added: In files containing only ~fixed-pitch~ fonts (i.e. files containing only code),
1024 Added: the cursor becomes a high-visibility box.
1025 Added:
1026 Added: In files containing a mix of ~variable-pitch~ and ~fixed-pitch~ fonts, the
1027 Added: cursor is a more MS Word-like bar.
1028 Added:
1029 Added: #+BEGIN_SRC emacs-lisp
1030 Added: (setq-default cursor-type 'bar)
1031 Added: #+END_SRC
1032 Added:
1033 Added: *** Fonts
1034 Added:
1035 Added: - Hack :: ~default~ and ~fixed-pitch~
1036 Added: - Legible, modern monospace font
1037 Added: - Strict, sharp, uncompromising
1038 Added: - Liberation Sans :: ~variable-pitch~
1039 Added: - Libre alternative to Arial
1040 Added: - Unoffensive
1041 Added: - Hermit :: ~org-block~, anything Org/meta in general
1042 Added: - Slightly wider than Hack
1043 Added: - More opinionated shapes
1044 Added: - Very legible parentheses
1045 Added:
1046 Added: **** Using proportional fonts when needed
1047 Added:
1048 Added: We use ~variable-pitch-mode~ for appropriate modes.
1049 Added:
1050 Added: #+BEGIN_SRC emacs-lisp
1051 Added: (add-hook 'org-mode-hook 'variable-pitch-mode)
1052 Added: (add-hook 'info-mode-hook 'variable-pitch-mode)
1053 Added: #+END_SRC
1054 Added:
1055 Added: **** TODO Default font size
1056 Added:
1057 Added: Make default font size larger on displays of which the resolution is greater
1058 Added: than 1920\times1080.
1059 Added:
1060 Added: #+BEGIN_SRC emacs-lisp
1061 Added: #+END_SRC
1062 Added:
1063 Added: ** TODO ~minimal~
1064 Added:
1065 Added: * Late setup
1066 Added:
1067 Added: At this point, our editor is almost ready to run. Phew! All that's left to do
1068 Added: is to interrupt our profiling activities, and smartly store the result of our
1069 Added: profiling.
1070 Added:
1071 Added: ** Profiling --- stop
1072 Added:
1073 Added: #+BEGIN_SRC emacs-lisp
1074 Added: ;; (profiler-stop)
1075 Added: #+END_SRC
1076 Added:
1077 Added: ** Profiling --- report
1078 Added:
1079 Added: #+BEGIN_SRC emacs-lisp
1080 Added: ;; (profiler-report)
1081 Added: #+END_SRC
1082 Added:
1083 Added: * Conclusion
1084 Added:
1085 Added: In this configuration file, we described a series of customization steps taken
1086 Added: to make Emacs more palatable to modern IDE users.
smart-documents.pdf
index 00000000..22120d28 000000..100644

Binary files differ

snippets/org-mode/quote
index 00000000..633dca7b 000000..100644
@@ -0,0 +1,7 @@
1 Added: # -*- mode: snippet -*-
2 Added: # name: quote
3 Added: # key: quote
4 Added: # --
5 Added: #+BEGIN_QUOTE
6 Added: $0
7 Added: #+END_QUOTE
snippets/org-mode/src
index da052d2a..e6da583d 100644..100644
@@ -1,5 +1,6 @@
1 Removed: # key: src
1 Added: # -*- mode: snippet -*-
2 2 # name: src
3 Added: # key: src
3 4 # --
4 5 #+BEGIN_SRC ${1:emacs-lisp}
5 6 $0
themes/blendoit-light-theme.el
index 9fe1d992..0b97d462 100644..100644
@@ -1,5 +1,5 @@
1 1 (deftheme blendoit-light
2 Removed: "Created 2020-09-07.")
2 Added: "Created 2020-10-04.")
3 3
4 4 (custom-theme-set-faces
5 5 'blendoit-light
@@ -16,7 +16,7 @@
16 16 '(trailing-whitespace ((((class color) (background light)) (:background "red1")) (((class color) (background dark)) (:background "red1")) (t (:inverse-video t))))
17 17 '(font-lock-builtin-face ((t (:foreground "dark slate blue"))))
18 18 '(font-lock-comment-delimiter-face ((t (:foreground "dim gray" :inherit font-lock-comment-face))))
19 Removed: '(font-lock-comment-face ((t (:slant italic :foreground "slate gray" :inherit variable-pitch))))
19 Added: '(font-lock-comment-face ((t (:foreground "slate gray" :slant italic :height 1.1))))
20 20 '(font-lock-constant-face ((t (:foreground "dark cyan"))))
21 21 '(font-lock-function-name-face ((((class color) (min-colors 88) (background light)) (:foreground "Blue1")) (((class color) (min-colors 88) (background dark)) (:foreground "LightSkyBlue")) (((class color) (min-colors 16) (background light)) (:foreground "Blue")) (((class color) (min-colors 16) (background dark)) (:foreground "LightSkyBlue")) (((class color) (min-colors 8)) (:weight bold :foreground "blue")) (t (:weight bold :inverse-video t))))
22 22 '(font-lock-keyword-face ((t (:foreground "slate blue"))))
@@ -59,10 +59,10 @@
59 59 '(org-code ((t (:background "light grey" :foreground "black" :family "Hack"))))
60 60 '(org-checkbox-statistics-todo ((t (:inherit org-checkbox :foreground "tomato"))))
61 61 '(org-checkbox-statistics-done ((t (:inherit org-checkbox :foreground "ForestGreen"))))
62 Removed: '(org-verbatim ((t (:inherit shadow))))
63 Removed: '(font-lock-doc-face ((t (:Family "Liberation Sans" :inherit font-lock-string-face))))
62 Added: '(org-verbatim ((t (:inherit fixed-pitch :foreground "DodgerBlue1" :foundry "Hack"))))
63 Added: '(font-lock-doc-face ((t (:inherit font-lock-string-face :Family "Liberation Sans"))))
64 64 '(org-document-info ((t (:weight bold))))
65 Removed: '(org-table ((t (:foreground "SteelBlue" :inherit fixed-pitch))))
65 Added: '(org-table ((t (:height 0.8 :family "Hack"))))
66 66 '(org-block ((t (:height 0.8 :family "Hermit"))))
67 67 '(org-special-keyword ((t (:inherit org-meta-line))))
68 68 '(org-level-1 ((t (:foreground "black" :weight bold :height 1.6))))