[Emacs Lisp] Personal ~/.emacs.d/ configuration folder.
Start work on user details.
Changed files
.gitignore
@@ -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
@@ -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
@@ -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
Binary files differ
blendoit/blendoit-sidebar.el.bkp
@@ -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
@@ -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
@@ -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
@@ -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
Binary files differ
snippets/org-mode/quote
@@ -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
@@ -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
@@ -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))))