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

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