mirror of https://github.com/Chizi123/.emacs.d.git

Joel Grunbaum
2020-02-24 be9cffb0ef508a4f8d91e66e4dec97180151289a
commit | author | age
990949 1 #+TITLE: My Emacs configuration
be9cff 2 #  LocalWords:  poppler mingw emacs eq nt gnuplot setenv mapconcat el cond minibuffer pdf color Smartparens smartparens yas aindent whitespace eldoc ielm ibuffer hippie pscp pos Spaceline spaceline powerline spacemacs seperator dir Yasnippet yasnippet flycheck magit fullscreen CEDET askifnotset semanticdb EDE ede gdb srefactor analyzer eval cdb autosetup ghostscript math unicode reftex bibtex TeXcount texcount str latin rkt PlantUML plantuml autoload alist matlab verilog ds vh src fontify natively fortran dvipng plist xcolor EXWM Zenburn setq zenburn defun dolist init config DejaVu ispell aspell flyspell kbd recentf sexp ov bg listp defadvice progn prog keyfreq autosave dabbrev hl gc linum linux utf RET ARG arg configs backends contribs AucTex tex auctex LaTeX url htmlize
8a38cc 3
bf794a 4 * COMMENT Windows dependencies
990949 5 Dependencies needed for Aspell, poppler PDF-tools, compilers and ghost-script provided by mingw64
C 6 #+BEGIN_SRC emacs-lisp
7   (when (eq system-type 'windows-nt)
8     (add-to-list 'exec-path "C:/msys64/usr/bin")
9     (add-to-list 'exec-path "C:/msys64/mingw64/bin")
10     (add-to-list 'exec-path "c:/Program Files/gnuplot")
11     (setenv "PATH" (mapconcat #'identity exec-path path-separator)))
12 #+END_SRC
13
14 * Aesthetic changes
0fcc09 15 ** Emacs theme
C 16 Zenburn theme is the default
990949 17 #+BEGIN_SRC emacs-lisp
0fcc09 18   (setq emacs-theme 'zenburn)
C 19
412080 20   (defun disable-all-themes ()
C 21     (dolist (i custom-enabled-themes)
22       (disable-theme i)))
23
0fcc09 24   (cond ((eq emacs-theme 'zenburn)
C 25          (use-package zenburn-theme
26            :ensure t
412080 27            :init
C 28            (disable-all-themes)
0fcc09 29            :config
C 30            (load-theme 'zenburn t)))
31         ((eq emacs-theme 'doom-one)
32          (use-package doom-themes
33            :ensure t
412080 34            :init
C 35            (disable-all-themes)
0fcc09 36            :config
C 37            (setq doom-themes-enable-bolt t
38                  doom-themes-enable-italic t)
39            (load-theme 'doom-one t)
40            (doom-themes-visual-bell-config)
412080 41            (doom-themes-org-config)))
C 42         ((eq emacs-theme 'none)
43          (disable-all-themes)))
990949 44 #+END_SRC
8a38cc 45
990949 46 ** Default font
20e001 47 #+BEGIN_SRC emacs-lisp 
be9cff 48   ;; (set-frame-font "DejaVu Sans Mono" nil t)
20e001 49   (set-frame-font "Dank Mono-11" nil t)
be9cff 50   ;; (set-frame-font "Source Code Pro-10" nil t)
20e001 51   (set-face-italic 'font-lock-comment-face t)
C 52   (set-face-italic 'font-lock-keyword-face t)
990949 53 #+END_SRC
8a38cc 54
990949 55 ** Remove menu bar, toolbar, but keep scroll bar
C 56 #+BEGIN_SRC emacs-lisp
57   (menu-bar-mode 0)
58   (tool-bar-mode 0)
59   (scroll-bar-mode 1)
60 #+END_SRC
61
62 * Writing requirements
63 ** Spellchecking
64 #+BEGIN_SRC emacs-lisp
65   (require 'ispell)
66   (setq-default ispell-program-name "aspell")
67   (setq-default ispell-local-dictionary "en_AU")
68   (add-hook 'latex-mode-hook 'flyspell-mode)
69   (add-hook 'latex-mode-hook 'flyspell-buffer)
70   (add-hook 'org-mode-hook 'flyspell-mode)
71   (add-hook 'org-mode-hook 'flyspell-buffer)
72 #+END_SRC
73
74 ** Switch-window
75 Helps to change windows easily when many are open at once
76 #+BEGIN_SRC emacs-lisp
77 (use-package switch-window
78   :ensure t
79   :config
80     (setq switch-window-input-style 'minibuffer)
81     (setq switch-window-increase 4)
82     (setq switch-window-threshold 2)
83     (setq switch-window-shortcut-style 'qwerty)
84     (setq switch-window-qwerty-shortcuts
85         '("a" "s" "d" "f" "j" "k" "l" "i" "o"))
86   :bind
87     ([remap other-window] . switch-window))
88 #+END_SRC
8a38cc 89
990949 90 ** Go to new window when opened
C 91 #+BEGIN_SRC emacs-lisp
92   (defun split-and-follow-horizontally ()
93     (interactive)
94     (split-window-below)
95     (balance-windows)
96     (other-window 1))
97   (global-set-key (kbd "C-x 2") 'split-and-follow-horizontally)
98
99   (defun split-and-follow-vertically ()
100     (interactive)
101     (split-window-right)
102     (balance-windows)
103     (other-window 1))
104   (global-set-key (kbd "C-x 3") 'split-and-follow-vertically)
105 #+END_SRC
8a38cc 106
990949 107 ** PDF-tools
C 108 #+BEGIN_SRC emacs-lisp
bf794a 109   (use-package pdf-tools
JG 110     :ensure t
111     :config
112     (pdf-tools-install 1))
990949 113 #+END_SRC
8a38cc 114
be9cff 115 ** COMMENT Writegood-mode
49aa9f 116 Supposedly should provide insight to writing quality
JG 117 #+BEGIN_SRC emacs-lisp
118   (use-package writegood-mode
119     :ensure t
120     :hook (text-mode . writegood-mode))
121 #+END_SRC
122
990949 123 * Helm and Projectile
C 124 ** Helm core
125 #+BEGIN_SRC emacs-lisp
126   (use-package helm-config
127     :ensure helm
128     :bind (("M-x" . helm-M-x)
129            ("C-x C-f" . helm-find-files)
130            ("M-y" . helm-show-kill-ring)
131            ("C-x b" . helm-mini)
132            ("C-c h o" . helm-occur))
133     :config
134     (setq helm-M-x-fuzzy-match t)
135     (setq helm-buffers-fuzzy-matching t
136           helm-recentf-fuzzy-match    t)
137     (setq helm-split-window-in-side-p           t ; open helm buffer inside current window, not occupy whole other window
138           helm-move-to-line-cycle-in-source     t ; move to end or beginning of source when reaching top or bottom of source.
139           helm-ff-search-library-in-sexp        t ; search for library in `require' and `declare-function' sexp.
140           helm-scroll-amount                    8 ; scroll 8 lines other window using M-<next>/M-<prior>
141           helm-ff-file-name-history-use-recentf t
142           helm-echo-input-in-header-line t)
143     (defun spacemacs//helm-hide-minibuffer-maybe ()
144       "Hide minibuffer in Helm session if we use the header line as input field."
145       (when (with-helm-buffer helm-echo-input-in-header-line)
146         (let ((ov (make-overlay (point-min) (point-max) nil nil t)))
147           (overlay-put ov 'window (selected-window))
148           (overlay-put ov 'face
149                        (let ((bg-color (face-background 'default nil)))
150                          `(:background ,bg-color :foreground ,bg-color)))
151           (setq-local cursor-type nil))))
152     (add-hook 'helm-minibuffer-set-up-hook
153               'spacemacs//helm-hide-minibuffer-maybe)
154     (helm-mode 1))
155 #+END_SRC
8a38cc 156
990949 157 ** Projectile
C 158 *** Enable it
159  #+BEGIN_SRC emacs-lisp
160    (use-package projectile
161      :ensure t
162      :bind ("C-c p" . projectile-command-map)
163      :diminish projectile-mode
164      :config
165      (projectile-global-mode)
166      (setq projectile-completion-system 'helm)
167      (when (eq system-type 'windows-nt)
168        (setq projectile-indexing-method 'alien)))
169  #+END_SRC
8a38cc 170
990949 171 *** Let it compile things
C 172  #+BEGIN_SRC emacs-lisp
173    (global-set-key (kbd "<f5>") 'projectile-compile-project)
174  #+END_SRC
8a38cc 175
990949 176 *** Enable communication with helm
C 177 #+BEGIN_SRC emacs-lisp
baf326 178   (use-package helm-projectile
C 179     :ensure t
180     :config
181     (helm-projectile-on))
990949 182 #+END_SRC
8a38cc 183
be9cff 184 ** COMMENT ggtags
bf794a 185 #+BEGIN_SRC emacs-lisp
JG 186     (use-package ggtags
187       :ensure t
188       :bind (("C-c g s" . ggtags-find-other-symbol)
189            ("C-c g h" . ggtags-view-tag-history)
190            ("C-c g r" . ggtags-find-reference)
191            ("C-c g f" . ggtags-find-file)
192            ("C-c g c" . ggtags-create-tags)
193            ("C-c g u" . ggtags-update-tags))
194       :config
195       (add-hook 'c-mode-common-hook
196               (lambda ()
197                 (when (derived-mode-p 'c-mode 'c++-mode 'java-mode)
198                   (ggtags-mode 1))))
199       )
200
201     (setq
202      helm-gtags-ignore-case t
203      helm-gtags-auto-update t
204      helm-gtags-use-input-at-cursor t
205      helm-gtags-pulse-at-cursor t
206      helm-gtags-prefix-key "\C-c g"
207      helm-gtags-suggested-key-mapping t
208      )
209
210     (use-package helm-gtags
211       :ensure t
212       :config
213       (add-hook 'dired-mode-hook 'helm-gtags-mode)
214       (add-hook 'eshell-mode-hook 'helm-gtags-mode)
215       (add-hook 'c-mode-hook 'helm-gtags-mode)
216       (add-hook 'c++-mode-hook 'helm-gtags-mode)
217       (add-hook 'asm-mode-hook 'helm-gtags-mode)
218     
219       (define-key helm-gtags-mode-map (kbd "C-c g a") 'helm-gtags-tags-in-this-function)
220       (define-key helm-gtags-mode-map (kbd "C-j") 'helm-gtags-select)
221       (define-key helm-gtags-mode-map (kbd "M-.") 'helm-gtags-dwim)
222       (define-key helm-gtags-mode-map (kbd "M-,") 'helm-gtags-pop-stack)
223       (define-key helm-gtags-mode-map (kbd "C-c <") 'helm-gtags-previous-history)
224       (define-key helm-gtags-mode-map (kbd "C-c >") 'helm-gtags-next-history))
225 #+END_SRC
226
be9cff 227 ** COMMENT Ctags
bf794a 228 #+BEGIN_SRC emacs-lisp
JG 229   (defvar ctags-command "ctags -e -R --languages=vhdl")
230
231   (defun ctags ()
232     (call-process-shell-command ctags-command nil "*Ctags*"))
233
234
235   (defun ctags-find-tags-file ()
236     "Recursively searches each parent directory for a file named
237                 TAGS and returns the path to that file or nil if a tags file is
238                 not found or if the buffer is not visiting a file."
239     (progn
240       (defun find-tags-file-r (path)
241         "Find the tags file from current to the parent directories."
242         (let* ((parent-directory (file-name-directory (directory-file-name path)))
243                (tags-file-name (concat (file-name-as-directory path) "TAGS")))
244           (cond
245            ((file-exists-p tags-file-name) (throw 'found tags-file-name))
246            ((string= "/TAGS" tags-file-name) nil)
247            (t (find-tags-file-r parent-directory)))))
248
249       (if (buffer-file-name)
250           (catch 'found
251             (find-tags-file-r (file-name-directory buffer-file-name)))
252         nil)))
253
254   (defun ctags-set-tags-file ()
255     "Uses `ctags-find-tags-file' to find a TAGS file. If found,
256                 set 'tags-file-name' with its path or set as nil."
257     (setq-default tags-file-name (ctags-find-tags-file)))
258
259   (defun ctags-create-tags-table ()
260     (interactive)
261     (let* ((current-directory default-directory)
262            (top-directory (read-directory-name
263                            "Top of source tree: " default-directory))
264            (file-name (concat (file-name-as-directory top-directory) "TAGS")))
265       (cd top-directory)
266       (if (not (= 0 (ctags)))
267           (message "Error creating %s!" file-name)
268         (setq-default tags-file-name file-name)
269         (message "Table %s created and configured." tags-file-name))
270       (cd current-directory)))
271
272   (defun ctags-update-tags-table ()
273     (interactive)
274     (let ((current-directory default-directory))
275       (if (not tags-file-name)
276           (message "Tags table not configured.")
277         (cd (file-name-directory tags-file-name))
278         (if (not (= 0 (ctags)))
279             (message "Error updating %s!" tags-file-name)
280           (message "Table %s updated." tags-file-name))
281         (cd current-directory))))
282
283   (defun ctags-create-or-update-tags-table ()
284     "Create or update a tags table with `ctags-command'."
285     (interactive)
286     (if (not (ctags-set-tags-file))
287         (ctags-create-tags-table)
288       (ctags-update-tags-table)))
289
290
291   (defun ctags-search ()
292     "A wrapper for `tags-search' that provide a default input."
293     (interactive)
294     (let* ((symbol-at-point (symbol-at-point))
295            (default (symbol-name symbol-at-point))
296            (input (read-from-minibuffer
297                    (if (symbol-at-point)
298                        (concat "Tags search (default " default "): ")
299                      "Tags search (regexp): "))))
300       (if (and (symbol-at-point) (string= input ""))
301           (tags-search default)
302         (if (string= input "")
303             (message "You must provide a regexp.")
304           (tags-search input)))))
305 #+END_SRC
306
990949 307 * Small tweaks
C 308 ** Remove startup screen
309 #+BEGIN_SRC emacs-lisp
310 (setq inhibit-startup-message t)
311 #+END_SRC
8a38cc 312
990949 313 ** Disable bell
C 314 Bloody bell dings every time you hit a key too much
315 #+BEGIN_SRC emacs-lisp
316 (setq ring-bell-function 'ignore)
317 #+END_SRC
8a38cc 318
990949 319 ** Pretty symbols
C 320 Why not? They make it look nice
321 #+BEGIN_SRC emacs-lisp
322   (when window-system
323     (use-package pretty-mode
324       :ensure t
325       :diminish t
326       :config
327       (global-pretty-mode)))
328 #+END_SRC
8a38cc 329
990949 330 ** find file other window
C 331 Lets it accept more than one file. Works recursively.
332 #+BEGIN_SRC emacs-lisp
333 (defadvice find-file-other-window (around find-files activate)
334   (if (listp filename)
335       (loop for f in filename do (find-file-other-window f wildcards))
336     ad-do-it))
337 #+END_SRC
8a38cc 338
990949 339 ** Which key
C 340 Helps to explain keybindings if you get lost
341 #+BEGIN_SRC emacs-lisp
342   (use-package which-key
343     :ensure t
344     :diminish which-key-mode
345     :config
346     (which-key-mode))
347 #+END_SRC
8a38cc 348
bf794a 349 ** Config shortcuts
JG 350 *** Go to this file
990949 351 #+BEGIN_SRC emacs-lisp
C 352 (defun config-visit ()
353   (interactive)
354   (find-file "~/.emacs.d/config.org"))
355 (global-set-key (kbd "C-c e d") 'config-visit)
356 #+END_SRC
8a38cc 357
bf794a 358 *** Go to init.el
990949 359 #+BEGIN_SRC emacs-lisp
C 360   (defun init-visit ()
361     (interactive)
362     (find-file "~/.emacs.d/init.el"))
363   (global-set-key (kbd "C-c e i") 'init-visit)
364 #+END_SRC
8a38cc 365
bf794a 366 *** Reload configuration
990949 367 #+BEGIN_SRC emacs-lisp
C 368 (defun config-reload ()
369   "Reloads ~/.emacs.d/config.org at run time"
370   (interactive)
371   (org-babel-load-file (expand-file-name "~/.emacs.d/config.org")))
372 (global-set-key (kbd "C-c e r") 'config-reload)
373 #+END_SRC
8a38cc 374
990949 375 ** Smartparens
C 376 Matches brackets automatically
377 #+BEGIN_SRC emacs-lisp
378 (use-package smartparens
379   :ensure t
380   :diminish smartparens-mode
381   :config
382   (progn
383     (require 'smartparens-config)
384     (smartparens-global-mode 1)))
385 #+END_SRC
8a38cc 386
990949 387 ** Rainbow
C 388 Its a little gimmicky but its still cool
389 #+BEGIN_SRC emacs-lisp
390   (use-package rainbow-mode
391     :ensure t
392     :diminish rainbow-mode
393     :init
394     (add-hook 'prog-mode-hook 'rainbow-mode))
395 #+END_SRC
8a38cc 396
990949 397 ** Rainbow delimiters
C 398 A bit more useful than above.
399 Colours the brackets so that they stand out more.
400 #+BEGIN_SRC emacs-lisp
401   (use-package rainbow-delimiters
402     :ensure t
403     :init
404       (add-hook 'prog-mode-hook #'rainbow-delimiters-mode))
405 #+END_SRC
8a38cc 406
990949 407 ** clean-aindent-mode
C 408 Removes unnecessary white space
409 #+BEGIN_SRC emacs-lisp
410 (use-package clean-aindent-mode
411   :ensure t
412   :hook prog-mode)
413 #+END_SRC
414 Shows trailing white space
415 #+BEGIN_SRC emacs-lisp
416 (add-hook 'prog-mode-hook (lambda () (interactive) (setq show-trailing-whitespace 1)))
417 #+END_SRC
8a38cc 418
990949 419 ** whitespace mode
C 420 Reveals whitespace characters
421 #+BEGIN_SRC emacs-lisp
422 (global-set-key (kbd "C-c w") 'whitespace-mode)
423 (add-hook 'diff-mode-hook (lambda ()
424                             (setq-local whitespace-style
425                                         '(face
426                                           tabs
427                                           tab-mark
428                                           spaces
429                                           space-mark
430                                           trailing
431                                           indentation::space
432                                           indentation::tab
433                                           newline
434                                           newline-mark))
435                             (whitespace-mode 1)))
436
437 #+END_SRC
8a38cc 438
990949 439 ** eldoc
C 440 #+BEGIN_SRC emacs-lisp
441   (add-hook 'emacs-lisp-mode-hook 'eldoc-mode)
442   (add-hook 'lisp-interaction-mode-hook 'eldoc-mode)
443   (add-hook 'ielm-mode-hook 'eldoc-mode)
444 #+END_SRC
8a38cc 445
990949 446 ** key-freq
C 447 collects interesting statistics
448 #+BEGIN_SRC emacs-lisp
449 (use-package keyfreq
450   :ensure t
451   :config
452   (keyfreq-mode 1)
453   (keyfreq-autosave-mode 1))
454 #+END_SRC
8a38cc 455
990949 456 ** undo-tree
C 457 A more advanced undo mechanism
458 #+BEGIN_SRC emacs-lisp
459 (use-package undo-tree
460   :ensure t
461   :diminish undo-tree-mode
462   :config
463   (global-undo-tree-mode))
464 #+END_SRC
8a38cc 465
990949 466 ** volatile highlights
C 467 Colour the material just copied
468 #+BEGIN_SRC emacs-lisp
469 (use-package volatile-highlights
470   :ensure t
471   :diminish volatile-highlights-mode
472   :config
473   (volatile-highlights-mode t))
474 #+END_SRC
8a38cc 475
990949 476 ** ibuffer
C 477 #+BEGIN_SRC emacs-lisp
478 (global-set-key (kbd "C-x C-b") 'ibuffer)
479 (setq ibuffer-use-other-window t)
480 #+END_SRC
8a38cc 481
990949 482 ** hippie expand
C 483 #+BEGIN_SRC emacs-lisp
484 (global-set-key (kbd "M-/") 'hippie-expand) ;; replace dabbrev-expand
485 (setq
486  hippie-expand-try-functions-list
487  '(try-expand-dabbrev ;; Try to expand word "dynamically", searching the current buffer.
488    try-expand-dabbrev-all-buffers ;; Try to expand word "dynamically", searching all other buffers.
489    try-expand-dabbrev-from-kill ;; Try to expand word "dynamically", searching the kill ring.
490    try-complete-file-name-partially ;; Try to complete text as a file name, as many characters as unique.
491    try-complete-file-name ;; Try to complete text as a file name.
492    try-expand-all-abbrevs ;; Try to expand word before point according to all abbrev tables.
493    try-expand-list ;; Try to complete the current line to an entire line in the buffer.
494    try-expand-line ;; Try to complete the current line to an entire line in the buffer.
495    try-complete-lisp-symbol-partially ;; Try to complete as an Emacs Lisp symbol, as many characters as unique.
496    try-complete-lisp-symbol) ;; Try to complete word as an Emacs Lisp symbol.
497  )
498 #+END_SRC
8a38cc 499
990949 500 ** Highlight line
C 501 #+BEGIN_SRC emacs-lisp
502 (global-hl-line-mode)
503 #+END_SRC
8a38cc 504
990949 505 ** Line numbers
C 506 #+BEGIN_SRC emacs-lisp
507 (add-hook 'prog-mode-hook 'linum-mode)
508 #+END_SRC
509
510 ** Garbage collection
511 starts garbage collection every 100MB
512 #+BEGIN_SRC emacs-lisp
513 (setq gc-cons-threshold 100000000)
514 #+END_SRC
515
516 ** Kill ring
517 Changes the kill ring size to 5000.
518 #+BEGIN_SRC emacs-lisp
519   (setq global-mark-ring-max 5000
520     mark-ring-max 5000
521     mode-require-final-newline t
522     kill-ring-max 5000
523     kill-whole-line t)
524 #+END_SRC
8a38cc 525
990949 526 ** Coding style
C 527 #+BEGIN_SRC emacs-lisp
bf794a 528   (setq c-default-style '((java-mode . "java")
JG 529                          (awk-mode . "awk")
530                          (other . "k&r")))
990949 531 #+END_SRC
C 532
533 ** Coding system
534 #+BEGIN_SRC emacs-lisp
bf794a 535   (set-terminal-coding-system 'utf-8)
JG 536   (set-keyboard-coding-system 'utf-8)
537   (set-language-environment "UTF-8")
538   (prefer-coding-system 'utf-8)
539   (setq-default indent-tabs-mode t
540             tab-width 4)
541   (delete-selection-mode)
542   (global-set-key (kbd "RET") 'newline-and-indent)
990949 543 #+END_SRC
8a38cc 544
990949 545 ** Move to beginning of line ignoring whitespace
C 546 Move point back to indentation of beginning of line.
547
548 Move point to the first non-whitespace character on this line.
549 If point is already there, move to the beginning of the line.
550 Effectively toggle between the first non-whitespace character and
551 the beginning of the line.
552
553 If ARG is not nil or 1, move forward ARG - 1 lines first. If
554 point reaches the beginning or end of the buffer, stop there.
555 #+BEGIN_SRC emacs-lisp
556 (defun prelude-move-beginning-of-line (arg)
557   (interactive "^p")
558   (setq arg (or arg 1))
559
560   ;; Move lines first
561   (when (/= arg 1)
562     (let ((line-move-visual nil))
563       (forward-line (1- arg))))
564
565   (let ((orig-point (point)))
566     (back-to-indentation)
567     (when (= orig-point (point))
568       (move-beginning-of-line 1))))
569
570 (global-set-key (kbd "C-a") 'prelude-move-beginning-of-line)
571 #+END_SRC
8a38cc 572
990949 573 ** Indent region or buffer
C 574 #+BEGIN_SRC emacs-lisp
575 (defun indent-region-or-buffer ()
576   "Indent a region if selected, otherwise the whole buffer."
577   (interactive)
578   (unless (member major-mode prelude-indent-sensitive-modes)
579     (save-excursion
580       (if (region-active-p)
581           (progn
582             (indent-region (region-beginning) (region-end))
583             (message "Indented selected region."))
584         (progn
585           (indent-buffer)
586           (message "Indented buffer.")))
587       (whitespace-cleanup))))
588
589 (global-set-key (kbd "C-c i") 'indent-region-or-buffer)
590 #+END_SRC
8a38cc 591
990949 592 ** Tramp
C 593 #+BEGIN_SRC emacs-lisp
594   (when (eq system-type 'windows-nt)
595     (setq tramp-default-method "pscp"))
596   (setq password-cache-expiry nil)
597 #+END_SRC
598
599 * Mode line tweaks
600 Diminish is used but is included in init.el such that it can be used throughout this document
601 ** Spaceline
602 A little easier to read than the default emacs mode line
603 #+BEGIN_SRC emacs-lisp
412080 604     (use-package spaceline
C 605       :ensure t
606       :config
607       (require 'spaceline-config)
608       (setq spaceline-buffer-encoding-abbrev-p t)
609       (setq spaceline-line-column-p t)
610       (setq spaceline-line-p t)
611       (setq powerline-default-separator (quote arrow))
612       (spaceline-spacemacs-theme)
613       (spaceline-helm-mode))
990949 614 #+END_SRC
8a38cc 615
990949 616 ** No separator
C 617 #+BEGIN_SRC emacs-lisp
618 (setq powerline-default-seperator nil)
619 #+END_SRC
8a38cc 620
990949 621 * Programming tweaks
C 622 ** Yasnippet
623 #+BEGIN_SRC emacs-lisp
bf794a 624   (use-package yasnippet
JG 625     :ensure t
626     :diminish yas-minor-mode
627     :config
628     (use-package yasnippet-snippets
629       :ensure t)
630     (yas-reload-all)
631     (yas-global-mode 1))
990949 632 #+END_SRC
8a38cc 633
990949 634 ** flycheck
C 635 #+BEGIN_SRC emacs-lisp
8a38cc 636   (use-package flycheck
C 637     :ensure t
638     :diminish flycheck-mode
639     :config
640     (global-flycheck-mode))
990949 641 #+END_SRC
bf794a 642 *** flycheck-pos-tipe
990949 643 #+BEGIN_SRC emacs-lisp
C 644 (use-package flycheck-pos-tip
645   :ensure t
646   :after flycheck
647   :config
648   (flycheck-pos-tip-mode))
649 #+END_SRC
8a38cc 650
990949 651 ** Company
8a38cc 652 Company is auto-complete for Emacs
990949 653 #+BEGIN_SRC emacs-lisp
C 654   (use-package company
655     :ensure t
656     :diminish company-mode
657     :config
658     (global-company-mode)
659     (setq company-idle-delay 0)
660     (setq company-minimum-prefix-length 3))
661 #+END_SRC
8a38cc 662
990949 663 ** Magit
C 664 #+BEGIN_SRC emacs-lisp
665   (use-package magit
666     :ensure t
667     :commands magit-get-top-dir
668     :bind ("C-x g" . magit-status)
669     :init
670     (progn
671       ;; make magit status go full-screen but remember previous window
672       ;; settings
673       ;; from: http://whattheemacsd.com/setup-magit.el-01.html
674       (defadvice magit-status (around magit-fullscreen activate)
675         (window-configuration-to-register :magit-fullscreen)
676         ad-do-it
677         (delete-other-windows))
678
679       ;; Close popup when committing - this stops the commit window
680       ;; hanging around
681       ;; From: http://git.io/rPBE0Q
682       (defadvice git-commit-commit (after delete-window activate)
683         (delete-window))
684
685       (defadvice git-commit-abort (after delete-window activate)
686         (delete-window))
687
688       :config
689       (progn
690         ;; restore previously hidden windows
691         (defadvice magit-quit-window (around magit-restore-screen activate)
692           (let ((current-mode major-mode))
693             ad-do-it
694             ;; we only want to jump to register when the last seen buffer
695             ;; was a magit-status buffer.
696             (when (eq 'magit-status-mode current-mode)
697               (jump-to-register :magit-fullscreen)))))
698
699       ;; magit settings
700       (setq
701        ;; don't put "origin-" in front of new branch names by default
702        magit-default-tracking-name-function 'magit-default-tracking-name-branch-only
703        ;; open magit status in same window as current buffer
704        magit-status-buffer-switch-function 'switch-to-buffer
705        ;; highlight word/letter changes in hunk diffs
706        magit-diff-refine-hunk t
707        ;; ask me if I want to include a revision when rewriting
708        magit-rewrite-inclusive 'ask
709        ;; ask me to save buffers
710        magit-save-some-buffers t
711        ;; pop the process buffer if we're taking a while to complete
712        magit-process-popup-time 10
713        ;; ask me if I want a tracking upstream
714        magit-set-upstream-on-push 'askifnotset
715        )))
716 #+END_SRC
8a38cc 717
990949 718 ** CEDET
C 719 *** semantic
720 #+BEGIN_SRC emacs-lisp
721   (use-package semantic
722     :config
723     (global-semanticdb-minor-mode 1)
724     (global-semantic-idle-scheduler-mode 1)
725     (global-semantic-idle-summary-mode 1)
726     (semantic-mode 1))
727 #+END_SRC
8a38cc 728
990949 729 *** EDE
C 730 #+BEGIN_SRC emacs-lisp
731 (use-package ede
732   :config
733   (global-ede-mode t))
734 #+END_SRC
8a38cc 735
990949 736 *** gdb-many-windows
C 737 #+BEGIN_SRC emacs-lisp
738 (setq
739  ;; use gdb-many-windows by default
740  gdb-many-windows t
741
742  ;; Non-nil means display source file containing the main routine at startup
743  gdb-show-main t)
744 #+END_SRC
8a38cc 745
990949 746 *** Semantic refactor
C 747 #+BEGIN_SRC emacs-lisp
748 (use-package srefactor
749   :ensure t
750   :bind (("M-RET o" . 'srefactor-lisp-one-line)
751      ("M-RET m" . 'srefactor-lisp-format-sexp)
752      ("M-RET d" . 'srefactor-lisp-format-defun)
753      ("M-RET b" . 'srefactor-lisp-format-buffer)
754      :map c-mode-base-map
755           ("M-RET" . 'srefactor-refactor-at-point)
756           :map c++-mode-map
757           ("M-RET" . 'srefactor-refactor-at-point)))
758 #+END_SRC
8a38cc 759
990949 760 ** Language specific configs
C 761 *** C/C++
762 **** yasnippet
763 #+BEGIN_SRC emacs-lisp
764 (add-hook 'c++-mode-hook 'yas-minor-mode)
765 (add-hook 'c-mode-hook 'yas-minor-mode)
766 #+END_SRC
8a38cc 767
990949 768 **** flycheck clang
C 769 #+BEGIN_SRC emacs-lisp
770 (use-package flycheck-clang-analyzer
771   :ensure t
772   :config
773   (with-eval-after-load 'flycheck
774     (require 'flycheck-clang-analyzer)
775      (flycheck-clang-analyzer-setup)))
776 #+END_SRC
8a38cc 777
990949 778 **** company
C 779 #+BEGIN_SRC emacs-lisp
780   (use-package company-c-headers
781       :ensure t
782       :after company
783       :config
784       (add-hook 'c++-mode-hook 'company-mode)
785       (add-hook 'c-mode-hook 'company-mode))
786
787   (use-package company-irony
788     :ensure t
789     :config
790     (add-to-list 'company-backends '(company-c-headers
791                                      company-dabbrev-code
792                                      company-irony)))
793
794   (use-package irony
795     :ensure t
796     :init
797     (setq w32-pipe-read-delay 0)
798     (setq irony-server-w32-pipe-buffer-size (* 64 1024))
799     (add-hook 'c++-mode-hook 'irony-mode)
800     (add-hook 'c-mode-hook 'irony-mode)
801     (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)
802     (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options))
803 #+END_SRC
8a38cc 804
990949 805 *** emacs-lisp
C 806 **** eldoc
807 #+BEGIN_SRC emacs-lisp
808 (add-hook 'emacs-lisp-mode-hook 'eldoc-mode)
809 #+END_SRC
8a38cc 810
990949 811 **** yasnippet
C 812 #+BEGIN_SRC emacs-lisp
813 (add-hook 'emacs-lisp-mode-hook 'yas-minor-mode)
814 #+END_SRC
8a38cc 815
990949 816 **** company
C 817 #+BEGIN_SRC emacs-lisp
818 (add-hook 'emacs-lisp-mode-hook 'company-mode)
819
820 (use-package slime
821   :ensure t
822   :config
823   (setq inferior-lisp-program "/usr/bin/sbcl")
824   (setq slime-contribs '(slime-fancy)))
825
826 (use-package slime-company
827   :ensure t
828   :init
829     (require 'company)
830     (slime-setup '(slime-fancy slime-company)))
831 #+END_SRC
8a38cc 832
bf794a 833 *** COMMENT x86
990949 834 **** x86-lookup
C 835 #+BEGIN_SRC emacs-lisp
836 (use-package x86-lookup
837   :ensure t
838   :init
839   (setq x86-lookup-pdf "D:/Coding/x86-instructions.pdf")
840   :bind ("C-h x" . x86-lookup))
841 #+END_SRC
8a38cc 842
990949 843 *** Latex
C 844 **** AucTex
845 #+BEGIN_SRC emacs-lisp
20e001 846   (use-package tex
C 847     :ensure auctex
848     :config
849     (setq TeX-auto-save t)
850     (setq TeX-parse-self t)
851     (setq TeX-view-program-selection '((output-pdf "PDF Tools"))
852           TeX-source-correlate-start-server t)
853     (add-hook 'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer))
990949 854 #+END_SRC
8a38cc 855
990949 856 **** Company
C 857 #+BEGIN_SRC emacs-lisp
858   (use-package company-math
859     :ensure t
860     :after company
861     :config
862     (add-to-list 'company-backends 'company-math-symbols-unicode))
863
864   (use-package company-reftex
865     :ensure t
866     :after company
867     :config
868     (add-to-list 'company-backends 'company-reftex))
869
870   (use-package company-auctex
871     :ensure t
872     :after company
873     :config
874     (company-auctex-init))
875
876   (use-package company-bibtex
877     :ensure t
878     :after company
879     (add-to-list 'company-backends 'company-bibtex))
880 #+END_SRC
8a38cc 881
bf794a 882 **** TeXcount
990949 883      Word counts in latex
C 884      #+BEGIN_SRC emacs-lisp
bf794a 885        (defun get-texcount-latest()
JG 886          (if (not(file-directory-p "~/.texcount"))
887              (make-directory "~/.texcount"))
888          (url-copy-file "https://app.uio.no/ifi/texcount/download.php?file=texcount_3_1_1.zip" "~/.texcount/texcount.zip" 1)
889          (shell-command "unzip -o ~/.texcount/texcount.zip -d ~/.texcount")
890          (add-to-list 'exec-path "~/.texcount/texcount.pl"))
20e001 891
bf794a 892        (if (not(file-exists-p "~/.texcount/texcount.pl"))
JG 893            (get-texcount-latest))
990949 894
bf794a 895        (defun texcount ()
JG 896          (interactive)
897          (let*
898              ( (this-file (buffer-file-name))
899                (enc-str (symbol-name buffer-file-coding-system))
900                (enc-opt
901                 (cond
902                  ((string-match "utf-8" enc-str) "-utf8")
903                  ((string-match "latin" enc-str) "-latin1")
904                  ("-encoding=guess")
905                  ) )
906                (word-count
907                 (with-output-to-string
908                   (with-current-buffer standard-output
909                     (call-process "texcount" nil t nil "-0" enc-opt this-file)
910                     ) ) ) )
911            (message word-count)
912            ) )
913        (add-hook 'LaTeX-mode-hook (lambda () (define-key LaTeX-mode-map (kbd "C-c c") 'texcount)))
914        (add-hook 'latex-mode-hook (lambda () (define-key latex-mode-map (kbd "C-c c") 'texcount)))
990949 915      #+END_SRC
C 916
917 *** PlantUML
918 #+BEGIN_SRC emacs-lisp
bf794a 919   (use-package plantuml-mode
JG 920     :ensure t
921     :init
922     (cond ((eq system-type 'windows-nt)
923            (setq plantuml-jar-path "c:/ProgramData/chocolatey/lib/plantuml/tools/plantuml.jar"))
924           ((eq system-type 'gnu/linux)
925            (setq plantuml-jar-path "/usr/share/java/plantuml/plantuml.jar"))))
990949 926 #+END_SRC
C 927
bf794a 928 *** COMMENT Racket
990949 929 **** Major mode
C 930 #+BEGIN_SRC emacs-lisp
931   (when (eq system-type 'windows-nt)
932     (add-to-list 'exec-path "c:/Program Files/Racket")
933     (setenv "PATH" (mapconcat #'identity exec-path path-separator)))
934
935   (use-package racket-mode
936       :ensure t
937       :config
938       (autoload 'racket-mode "Racket" "Racket Editing Mode" t)
939       (add-to-list
940        'auto-mode-alist
8a38cc 941        '("\\.rkt$" . racket-mode))
990949 942       (setq matlab-indent-function t))
C 943 #+END_SRC
944
945 *** Verilog
baf326 946 **** Get latest version
C 947 Pull the latest version from the web
948 #+BEGIN_SRC emacs-lisp
949   (defun get-verilog-latest()
0864ff 950     (if (not(file-directory-p "~/.emacs.d/elpa/verilog-mode"))
C 951         (make-directory "~/.emacs.d/elpa/verilog-mode"))
952     (if (file-exists-p "~/.emacs.d/elpa/verilog-mode/verilog-mode.el")
953         (delete-file "~/.emacs.d/elpa/verilog-mode/verilog-mode.el"))
dc8eb0 954     (url-copy-file "https://www.veripool.org/ftp/verilog-mode.el" "~/.emacs.d/elpa/verilog-mode/verilog-mode.el" 1))
baf326 955 #+END_SRC
C 956
957 **** Integrate into emacs
990949 958 Add updated version and integrate it with Emacs.
C 959 #+BEGIN_SRC emacs-lisp
0864ff 960     (defun verilog-read-file-as-string (file)
C 961       "Read FILE contents."
962       (when (file-exists-p file)
963         (with-temp-buffer
964           (insert-file-contents file)
965           (buffer-string))))
966
967     (defun verilog-write-string-to-file (file string)
968       "Substitute FILE contents with STRING."
969       (with-temp-buffer
970         (insert string)
971         (when (file-writable-p file)
972           (write-region (point-min)
973                         (point-max)
974                         file))))
975
976     (defun verilog-today-day ()
977       (time-to-days (current-time)))
978
979     (defun should-update-verilog-p ()
980       "Return non-nil when an update is due."
981       (and
982        (or
983         (not (file-exists-p "~/.emacs.d/.last-verilog-update-day"))
984         (if (>= (/ (- (verilog-today-day) (verilog-read-last-update-day)) 7) 1)
985             t
986           nil))))
987
988     (defun verilog-read-last-update-day ()
989       "Read last update day."
990       (string-to-number
991        (verilog-read-file-as-string "~/.emacs.d/.last-verilog-update-day")))
992
993     (defun verilog-write-current-day ()
994       "Store current day."
995       (verilog-write-string-to-file
996        "~/.emacs.d/.last-verilog-update-day"
997        (int-to-string (verilog-today-day))))
998
999     (use-package verilog-mode
1000       :init
1001       (when (should-update-verilog-p)
1002           (get-verilog-latest)
1003           (verilog-write-current-day))
1004       (add-to-list 'load-path "~/.emacs.d/elpa/verilog-mode/verilog-mode.el")
1005       :config
1006       (autoload 'verilog-mode "verilog-mode" "Verilog mode" t )
1007       (add-to-list 'auto-mode-alist '("\\.[ds]?vh?\\'" . verilog-mode)))
990949 1008 #+END_SRC
8a38cc 1009
49aa9f 1010 *** MATLAB
JG 1011 Mode for editing MATLAB m-files.
1012 Have to manually install matlab-mode
1013 #+BEGIN_SRC emacs-lisp
1014   (autoload 'matlab-mode "matlab" "Matlab Editing Mode" t)
1015   (add-to-list
1016    'auto-mode-alist
1017    '("\\.m$" . matlab-mode))
1018   (setq matlab-indent-function t)
1019   (setq matlab-shell-command "matlab")
1020   (matlab-cedet-setup)
1021 #+END_SRC
1022
1023 *** MIPS
1024 #+BEGIN_SRC emacs-lisp
1025   (use-package mips-mode
1026     :ensure t
1027     :mode "\\.mips$")
1028 #+END_SRC
1029
60454d 1030 *** IPython notebooks
JG 1031 Allow emacs to view and use IPython notebooks
1032 #+BEGIN_SRC emacs-lisp
1033   (use-package ein
1034     :ensure t)
1035 #+END_SRC
1036
990949 1037 * Org mode
C 1038 ** Up to date org
1039 #+BEGIN_SRC emacs-lisp
1040     (use-package org
1041       :ensure t
1042       :pin org)
1043 #+END_SRC
8a38cc 1044
990949 1045 ** Small tweaks
C 1046 #+BEGIN_SRC emacs-lisp
1047 (setq org-src-fontify-natively t)
1048 (setq org-src-tab-acts-natively t)
1049 (setq org-confirm-babel-evaluate nil)
1050 (setq org-export-with-smart-quotes t)
1051 (setq org-src-window-setup 'current-window)
1052 (add-hook 'org-mode-hook 'org-indent-mode)
1053 (diminish 'org-indent-mode)
1054 (diminish 'visual-line-mode)
1055 #+END_SRC
8a38cc 1056
990949 1057 ** Line wrapping
C 1058 #+BEGIN_SRC emacs-lisp
1059   (add-hook 'org-mode-hook
bf794a 1060             '(lambda ()
JG 1061                (visual-line-mode 1)))
990949 1062 #+END_SRC
8a38cc 1063
990949 1064 ** org-bullets
C 1065 #+BEGIN_SRC emacs-lisp
bf794a 1066   (use-package org-bullets
JG 1067     :ensure t
1068     :config
990949 1069     (add-hook 'org-mode-hook (lambda () (org-bullets-mode))))
C 1070 #+END_SRC
8a38cc 1071
990949 1072 ** Org Babel
C 1073 *** Languages
1074 Add C to org babel supported languages
1075 #+BEGIN_SRC emacs-lisp
baf326 1076     (org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t)
C 1077                                                              (C . t)
1078                                                              (python . t)
1079                                                              (latex . t)
1080                                                              (scheme . t)
1081                                                              (gnuplot . t)
1082                                                              (matlab . t)
1083                                                              (plantuml . t)
1084                                                              (fortran . t)
1085                                                              (java . t)
1086                                                              (plantuml . t)))
1087 #+END_SRC
1088
1089 **** Plantuml path
1090 #+BEGIN_SRC emacs-lisp
1091   (setq org-plantuml-jar-path plantuml-jar-path)
990949 1092 #+END_SRC
8a38cc 1093
990949 1094 ** Latex preview fragments match colour
C 1095 Make the previews match theme colour of Emacs.
1096 #+BEGIN_SRC emacs-lisp
1097   (let ((dvipng--plist (alist-get 'dvipng org-preview-latex-process-alist)))
1098     (plist-put dvipng--plist :use-xcolor t)
1099     (plist-put dvipng--plist :image-converter '("dvipng -D %D -T tight -o %O %f")))
1100 #+END_SRC
bf794a 1101
be9cff 1102 * EMMS
JG 1103 Emacs media manager.
1104 #+BEGIN_SRC emacs-lisp
1105   (use-package emms-setup
1106     :ensure emms
1107     :init
1108     (add-to-list 'load-path "~/elisp/emms/")
1109     :config
1110     (emms-all)
1111     (emms-default-players)
1112     (setq emms-source-file-directory "~/Music/"))
1113 #+END_SRC
1114
1115 * Org Blog
1116 ** Org static blog config
1117 Boiler plate template code for site.
1118 #+BEGIN_SRC emacs-lisp
1119   (use-package org-static-blog
1120     :ensure t
1121     :config
1122     (setq org-static-blog-publish-title "Joel's Site")
1123     (setq org-static-blog-publish-url "https://blog.joelg.cf/")
1124     (setq org-static-blog-publish-directory "/backup/home/joel/Downloads/Chizi123.github.io/")
1125     (setq org-static-blog-posts-directory "/backup/home/joel/Downloads/Chizi123.github.io/posts/")
1126     (setq org-static-blog-drafts-directory "/backup/home/joel/Downloads/Chizi123.github.io/drafts/")
1127     (setq org-static-blog-enable-tags t)
1128     (setq org-export-with-toc nil)
1129     (setq org-export-with-section-numbers nil)
1130
1131     ;; This header is inserted into the <head> section of every page:
1132     ;;   (you will need to create the style sheet at
1133     ;;    ~/projects/blog/static/style.css
1134     ;;    and the favicon at
1135     ;;    ~/projects/blog/static/favicon.ico)
1136     (setq org-static-blog-page-header
1137     "<meta name=\"author\" content=\"Joel Grunbaum\">
1138     <meta name=\"referrer\" content=\"no-referrer\">
1139     <link href= \"static/style.css\" rel=\"stylesheet\" type=\"text/css\" />
1140     <link rel=\"icon\" href=\"static/favicon.png\">
1141     <script async src=\"https://www.googletagmanager.com/gtag/js?id=UA-147303155-2\"></script>
1142     <script>
1143       window.dataLayer = window.dataLayer || [];
1144       function gtag(){dataLayer.push(arguments);}
1145       gtag('js', new Date());
1146       gtag('config', 'UA-147303155-2');
1147     </script>
1148     ")
1149
1150     ;; This preamble is inserted at the beginning of the <body> of every page:
1151     ;;   This particular HTML creates a <div> with a simple linked headline
1152     (setq org-static-blog-page-preamble
1153     "<div class=\"header\">
1154       <a href=\"https://blog.joelg.cf\">Joel's Site - Personal site and constant work in progress</a>
1155       <div class=\"sitelinks\">
1156         <a href=\"https://blog.joelg.cf/about-me.html\">About Me</a> |
1157         <a href=\"https://github.com/Chizi123\">Github</a> |
1158         <a href=\"https://facebook.com/joel.grun.5\">Facebook</a>
1159       </div>
1160     </div>")
1161
1162     ;; This postamble is inserted at the end of the <body> of every page:
1163     ;;   This particular HTML creates a <div> with a link to the archive page
1164     ;;   and a licensing stub.
1165     (setq org-static-blog-page-postamble
1166     "<div id=\"archive\">
1167       <a href=\"https://blog.joelg.cf/archive.html\">Other posts</a>
1168     </div>
1169     <br>
1170     <div id=\"commento\"></div>
1171     <script src=\"https://cdn.commento.io/js/commento.js\"></script>")
1172     ;; <center><button id=\"disqus_button\" onclick=\"load_disqus()\">Load Disqus Comments</button></center>
1173     ;; <div id=\"disqus_thread\"></div>
1174     ;; <script type=\"text/javascript\">
1175     ;;   function load_disqus() {
1176     ;;       var dsq = document.createElement('script');
1177     ;;       dsq.type = 'text/javascript';
1178     ;;       dsq.async = true;
1179     ;;       dsq.src = 'https://joelg-cf.disqus.com/embed.js';
1180     ;;       (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
1181     ;;       document.getElementById('disqus_button').style.visibility = 'hidden';
1182     ;;   };
1183     ;; </script>")
1184
1185     ;; generate blog files and create sitemap for files
1186     (defun blog-publish()
1187       (interactive)
1188       (org-static-blog-publish)
1189       (setq n 0)
1190       (setq site "https://blog.joelg.cf/")
1191       (setq posts (directory-files org-static-blog-publish-directory))
1192       (generate-new-buffer "sitemap.xml.gen")
1193       (with-current-buffer "sitemap.xml.gen" (insert "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n"))
1194       (while (< n (length (directory-files org-static-blog-publish-directory)))
1195         (setq curr (nth n posts))
1196         (if (string-match "\\(html\\)" curr)
1197             (if (string-match "index.html" curr)
1198                 (with-current-buffer "sitemap.xml.gen" (insert (concat "\t<url>\n\t\t<loc>" site "</loc>\n\t</url>\n")))
1199               (with-current-buffer "sitemap.xml.gen" (insert (concat "\t<url>\n\t\t<loc>" site curr "</loc>\n\t</url>\n")))))
1200         (setq n (1+ n)))
1201       (with-current-buffer "sitemap.xml.gen" (insert "</urlset>"))
1202       (with-current-buffer "sitemap.xml.gen" (write-region (point-min) (point-max) (concat org-static-blog-publish-directory "sitemap.xml")) t)
1203       (kill-buffer "sitemap.xml.gen"))
1204   )
1205 #+END_SRC
1206
1207 ** Emacs-htmlize
1208 Allow org features to be exported to HTML for site
1209 #+BEGIN_SRC emacs-lisp
1210   (use-package htmlize
1211     :ensure t)
1212 #+END_SRC