From 51fdbd03573d8b1e11e78aac00d329a4ac55eb78 Mon Sep 17 00:00:00 2001 From: Joel Grunbaum <joelgrun@gmail.com> Date: Tue, 28 Dec 2021 00:47:30 +0000 Subject: [PATCH] Removed semantic and other small tweaks --- config.org | 427 +++++++++++++++++++++++++++++++--------------------- 1 files changed, 255 insertions(+), 172 deletions(-) diff --git a/config.org b/config.org index a947797..5ca24d7 100644 --- a/config.org +++ b/config.org @@ -8,7 +8,7 @@ (cond ((eq system-type 'windows-nt) (add-to-list 'exec-path "C:/msys64/usr/bin") (add-to-list 'exec-path "C:/msys64/mingw64/bin") - (add-to-list 'exec-path "c:/Program Files/gnuplot") + (add-to-list 'exec-path "C:/Program Files/gnuplot") (setenv "PATH" (mapconcat #'identity exec-path path-separator))) ((eq system-type 'darwin) (use-package exec-path-from-shell @@ -86,12 +86,12 @@ (set-face-italic 'font-lock-keyword-face t) #+END_SRC -** Remove menu bar, toolbar, but keep scroll bar +** Remove menu bar, toolbar, and scroll bar Make the emacs interface slightly nicer. #+BEGIN_SRC emacs-lisp (menu-bar-mode 0) (tool-bar-mode 0) - (scroll-bar-mode 1) + (scroll-bar-mode 0) #+END_SRC * COMMENT EXWM Emacs window manager. @@ -124,21 +124,25 @@ (diminish 'flyspell-mode) #+END_SRC - +** COMMENT Language Tool +Language tool is an open source grammar checker. +#+BEGIN_SRC emacs-lisp + (use-package langtool + :ensure t + :init + (setq langtool-java-classpath "/usr/share/languagetool:/usr/share/java/languagetool/*")) +#+END_SRC ** Switch-window Helps to change windows easily when many are open at once. #+BEGIN_SRC emacs-lisp -(use-package switch-window - :ensure t - :config - (setq switch-window-input-style 'minibuffer) - (setq switch-window-increase 4) - (setq switch-window-threshold 2) - (setq switch-window-shortcut-style 'qwerty) - (setq switch-window-qwerty-shortcuts - '("a" "s" "d" "f" "j" "k" "l" "i" "o")) - :bind - ([remap other-window] . switch-window)) + (use-package switch-window + :ensure t + :config + ;; (setq switch-window-input-style 'minibuffer) + (setq switch-window-threshold 2) + (setq switch-window-shortcut-style 'qwerty) + :bind + ([remap other-window] . switch-window)) #+END_SRC ** Go to new window when opened @@ -481,7 +485,7 @@ #+END_SRC Shows trailing white space #+BEGIN_SRC emacs-lisp -(add-hook 'prog-mode-hook (lambda () (interactive) (setq show-trailing-whitespace 1))) + (add-hook 'prog-mode-hook (lambda () (interactive) (setq show-trailing-whitespace 1))) #+END_SRC ** Whitespace mode @@ -588,7 +592,7 @@ ** Garbage collection Starts garbage collection every 100MB. #+BEGIN_SRC emacs-lisp -(setq gc-cons-threshold 100000000) + (setq gc-cons-threshold (* 1024 1024 100)) #+END_SRC ** Kill ring @@ -617,12 +621,22 @@ (set-keyboard-coding-system 'utf-8) (set-language-environment "UTF-8") (prefer-coding-system 'utf-8) - (setq-default indent-tabs-mode t + (setq-default indent-tabs-mode nil tab-width 4 c-basic-offset tab-width cperl-indent-level tab-width) + (c-set-offset 'inline-open '0) (delete-selection-mode) (global-set-key (kbd "RET") 'newline-and-indent) +#+END_SRC +*** Smart tabs +Tabs for indentation, spaces for alignment +#+BEGIN_SRC emacs-lisp + (use-package smart-tabs-mode + :ensure t + :config + (smart-tabs-insinuate 'c 'c++ 'java 'javascript 'cperl 'python 'ruby + 'nxml)) #+END_SRC ** Move to beginning of line ignoring whitespace @@ -678,9 +692,15 @@ Remote editing mode. Hate having to re-input passwords. #+BEGIN_SRC emacs-lisp - (when (eq system-type 'windows-nt) - (setq tramp-default-method "pscp")) - (setq password-cache-expiry nil) + (use-package tramp + :ensure t + :pin gnu + :config + ;; (setq tramp-default-method "ssh") + (when (eq system-type 'windows-nt) + (setq tramp-default-method "pscp")) + (setq password-cache-expiry nil) + (add-to-list 'tramp-remote-path 'tramp-own-remote-path)) #+END_SRC ** COMMENT Y or N instead of yes or no @@ -711,6 +731,13 @@ (minimap-mode)) #+END_SRC +** Highlight indentation +Vertical demarcations for indent levels +#+BEGIN_SRC emacs-lisp + (use-package highlight-indentation + :ensure t + :hook (prog-mode . highlight-indentation-mode)) +#+END_SRC * Mode line tweaks Diminish is used but is included in init.el such that it can be used throughout this document ** Spaceline @@ -765,7 +792,6 @@ (use-package flycheck :ensure t :diminish flycheck-mode - :hook (prog-mode . flycheck-mode) :config (global-flycheck-mode)) #+END_SRC @@ -778,7 +804,6 @@ :config (flycheck-pos-tip-mode)) #+END_SRC - ** Company Company is auto-complete for Emacs. Uses various backends, more of which are added later. @@ -789,31 +814,34 @@ :config (global-company-mode) (setq company-idle-delay 0) - (setq company-minimum-prefix-length 3)) + (setq company-minimum-prefix-length 1)) #+END_SRC -** COMMENT LSP Mode +** LSP Mode Use LSP for completion suggestions. Causes too much memory usage, need to debug. +Need to generate ~compile_flags~ for c/c++, can use ~bear~ but may need other tools. #+BEGIN_SRC emacs-lisp (use-package lsp-mode :ensure t :hook (((c-mode - cpp-mode + c++-mode tex-mode latex-mode TeX-mode LaTeX-mode rust-mode sh-mode - verilog-mode) . lsp)) + ;; verilog-mode + go-mode) . lsp)) :init (setq lsp-keymap-prefix "C-c l") :commands lsp :config - (add-hook lsp-mode-hook lsp-enable-which-key-integration) + (add-hook 'lsp-mode-hook 'lsp-enable-which-key-integration) (setq read-process-output-max (* 1024 1024)) (setq lsp-completion-provider :capf) + (setq lsp-keep-workspace-alive 'nil) (add-to-list 'exec-path "~/.cargo/bin")) (use-package lsp-ui @@ -836,61 +864,93 @@ Emacs git client. Pretty good and offers fairly decent features. #+BEGIN_SRC emacs-lisp - (use-package magit - :ensure t - :commands magit-get-top-dir - :bind ("C-x g" . magit-status) - :init - (progn - ;; make magit status go full-screen but remember previous window - ;; settings - ;; from: http://whattheemacsd.com/setup-magit.el-01.html - (defadvice magit-status (around magit-fullscreen activate) - (window-configuration-to-register :magit-fullscreen) - ad-do-it - (delete-other-windows)) - - ;; Close popup when committing - this stops the commit window - ;; hanging around - ;; From: http://git.io/rPBE0Q - (defadvice git-commit-commit (after delete-window activate) - (delete-window)) - - (defadvice git-commit-abort (after delete-window activate) - (delete-window)) - - :config + (use-package magit + :ensure t + :commands magit-get-top-dir + :bind ("C-x g" . magit-status) + :init (progn - ;; restore previously hidden windows - (defadvice magit-quit-window (around magit-restore-screen activate) - (let ((current-mode major-mode)) - ad-do-it - ;; we only want to jump to register when the last seen buffer - ;; was a magit-status buffer. - (when (eq 'magit-status-mode current-mode) - (jump-to-register :magit-fullscreen))))) + ;; make magit status go full-screen but remember previous window + ;; settings + ;; from: http://whattheemacsd.com/setup-magit.el-01.html + (defadvice magit-status (around magit-fullscreen activate) + (window-configuration-to-register :magit-fullscreen) + ad-do-it + (delete-other-windows)) - ;; magit settings - (setq - ;; don't put "origin-" in front of new branch names by default - magit-default-tracking-name-function 'magit-default-tracking-name-branch-only - ;; open magit status in same window as current buffer - magit-status-buffer-switch-function 'switch-to-buffer - ;; highlight word/letter changes in hunk diffs - magit-diff-refine-hunk t - ;; ask me if I want to include a revision when rewriting - magit-rewrite-inclusive 'ask - ;; ask me to save buffers - magit-save-some-buffers t - ;; pop the process buffer if we're taking a while to complete - magit-process-popup-time 10 - ;; ask me if I want a tracking upstream - magit-set-upstream-on-push 'askifnotset - ))) + ;; Close popup when committing - this stops the commit window + ;; hanging around + ;; From: http://git.io/rPBE0Q + (defadvice git-commit-commit (after delete-window activate) + (delete-window)) + + (defadvice git-commit-abort (after delete-window activate) + (delete-window)) + + :config + (progn + ;; restore previously hidden windows + (defadvice magit-quit-window (around magit-restore-screen activate) + (let ((current-mode major-mode)) + ad-do-it + ;; we only want to jump to register when the last seen buffer + ;; was a magit-status buffer. + (when (eq 'magit-status-mode current-mode) + (jump-to-register :magit-fullscreen))))) + + ;; magit settings + (setq + ;; don't put "origin-" in front of new branch names by default + magit-default-tracking-name-function 'magit-default-tracking-name-branch-only + ;; open magit status in same window as current buffer + magit-status-buffer-switch-function 'switch-to-buffer + ;; highlight word/letter changes in hunk diffs + magit-diff-refine-hunk t + ;; ask me if I want to include a revision when rewriting + magit-rewrite-inclusive 'ask + ;; ask me to save buffers + magit-save-some-buffers t + ;; pop the process buffer if we're taking a while to complete + magit-process-popup-time 10 + ;; ask me if I want a tracking upstream + magit-set-upstream-on-push 'askifnotset + )) + ) +#+END_SRC + +*** More general yes and no prompt +The default setting can miss some. +Don't redefine the regex in case this is too general. +#+BEGIN_SRC emacs-lisp + ;;(when-let ((regex "[\[\(]]?\\([Yy]\\(es\\)?\\)[/|]\\([Nn]o?\\)[\]\)]") + (defun magit-process-general-yn-prompt-hook (proc str) + "Handle [y/n] prompts" + (when-let ((beg (string-match "[\[\(]]?\\([Yy]\\(es\\)?\\)[/|]\\([Nn]o?\\)[\]\)]" str))) + (let ;; ((max-mini-window-height 30)) + (process-send-string + proc + (downcase + (concat + (match-string + (if (save-match-data + (magit-process-kill-on-abort proc + (y-or-n-p (substring str 0 beg)))) 1 2) + str) + "\n")))))) + + (add-hook 'magit-process-prompt-functions + #'magit-process-general-yn-prompt-hook) +#+END_SRC +*** Gerrit integration +Gerrit takes ~origin:refs/for/master~ as a destination. +Enable magit to work with its oddities. +#+BEGIN_SRC emacs-lisp + (use-package magit-gerrit + :ensure t) #+END_SRC ** CEDET -*** Semantic +*** COMMENT Semantic Parser library for code, supports many other packages. Allows emacs to be more aware of what is being written. #+BEGIN_SRC emacs-lisp @@ -940,7 +1000,8 @@ ** Language specific configs *** C/C++ -**** Flycheck clang +**** Flycheck +***** Flycheck clang Add the clang backend for linting. #+BEGIN_SRC emacs-lisp (use-package flycheck-clang-analyzer @@ -951,8 +1012,24 @@ (require 'flycheck-clang-analyzer) (flycheck-clang-analyzer-setup))) #+END_SRC +***** Flycheck project root +Flycheck tends to fail finding the project root, giving errors about missing files. +This should remove them. +#+BEGIN_SRC emacs-lisp + (defun setup-flycheck-project-path () + (let ((root (ignore-errors (projectile-project-root)))) + (when root + (add-to-list + (make-variable-buffer-local 'flycheck-clang-include-path) + root) + (add-to-list + (make-variable-buffer-local 'flycheck-gcc-include-path) + root)))) -**** Company + (add-hook 'c-mode-hook 'setup-flycheck-project-path) + (add-hook 'c++-mode-hook 'setup-flycheck-project-path) +#+END_SRC +**** COMMENT Company Add header completion as well as Irony, which uses clang for suggestions. #+BEGIN_SRC emacs-lisp (use-package company-c-headers @@ -961,7 +1038,9 @@ :config (add-hook 'c++-mode-hook 'company-mode) (add-hook 'c-mode-hook 'company-mode)) - +#+END_SRC +**** COMMENT Irony +#+BEGIN_SRC emacs-lisp (use-package irony :ensure t :init @@ -980,9 +1059,35 @@ company-dabbrev-code company-irony))) #+END_SRC +**** Clang-format +Automatically format buffer on save. +#+BEGIN_SRC emacs-lisp + (defun set-clang-format-style () + (if (file-exists-p (concat + (projectile-project-root) + ".clang-format")) + (setq-local clang-format-style nil) + (setq-local clang-format-style (concat "{BasedOnStyle: LLVM," + "IndentWidth: " (format "%s" tab-width) "," + "UseTab: " (if (eq indent-tabs-mode nil) + "Never" + "AlignWithSpaces") + "," + "BreakBeforeBraces: Linux," + "AllowShortIfStatementsOnASingleLine: false," + "IndentCaseLabels: false}")))) + (use-package clang-format + :ensure t + :hook (c-mode-common . (set-clang-format-style))) + + ;; (defun clang-format-on-save () + ;; (add-hook 'before-save-hook 'clang-format-buffer nil t)) + ;; (add-hook 'c-mode-hook 'clang-format-on-save nil t) + ;; (add-hook 'c++-mode-hook 'clang-format-on-save nil t)) +#+END_SRC *** emacs-lisp -**** COMMENT company +**** COMMENT Company Add slime backend. #+BEGIN_SRC emacs-lisp (add-hook 'emacs-lisp-mode-hook 'company-mode) @@ -1061,7 +1166,7 @@ (defun get-texcount-latest() (if (not(file-directory-p "~/.texcount")) (make-directory "~/.texcount")) - (url-copy-file "https://app.uio.no/ifi/texcount/download.php?file=texcount_3_1_1.zip" "~/.texcount/texcount.zip" 1) + (url-copy-file "https://app.uio.no/ifi/texcount/download.php?file=texcount_3_2_0_41.zip" "~/.texcount/texcount.zip" 1) (shell-command "unzip -o ~/.texcount/texcount.zip -d ~/.texcount") (add-to-list 'exec-path "~/.texcount/texcount.pl")) @@ -1097,10 +1202,13 @@ :ensure t :init (cond ((eq system-type 'windows-nt) - (setq plantuml-jar-path "c:/ProgramData/chocolatey/lib/plantuml/tools/plantuml.jar")) + (when (file-exists-p "c:/ProgramData/chocolatey/lib/plantuml/tools/plantuml.jar") + (setq plantuml-jar-path "c:/ProgramData/chocolatey/lib/plantuml/tools/plantuml.jar") + (setq planuml-default-exec-mode 'jar))) ((eq system-type 'gnu/linux) - (setq plantuml-jar-path "/usr/share/java/plantuml/plantuml.jar"))) - (setq planuml-default-exec-mode 'jar)) + (when (file-exists-p "/usr/share/java/plantuml/plantuml.jar") + (setq plantuml-jar-path "/usr/share/java/plantuml/plantuml.jar") + (setq planuml-default-exec-mode 'jar))))) #+END_SRC *** COMMENT Racket @@ -1117,75 +1225,41 @@ (autoload 'racket-mode "Racket" "Racket Editing Mode" t) (add-to-list 'auto-mode-alist - '("\\.rkt$" . racket-mode)) - (setq matlab-indent-function t)) + '("\\.rkt$" . racket-mode))) #+END_SRC -*** COMMENT Verilog +*** Verilog **** Get latest version -Pull the latest version from the web. +Use latest version from repositories. #+BEGIN_SRC emacs-lisp - (defun get-verilog-latest() - (if (not(file-directory-p "~/.emacs.d/elpa/verilog-mode")) - (make-directory "~/.emacs.d/elpa/verilog-mode")) - (if (file-exists-p "~/.emacs.d/elpa/verilog-mode/verilog-mode.el") - (delete-file "~/.emacs.d/elpa/verilog-mode/verilog-mode.el")) - (url-copy-file "https://www.veripool.org/ftp/verilog-mode.el" "~/.emacs.d/elpa/verilog-mode/verilog-mode.el" 1)) -#+END_SRC - -**** Integrate into emacs -Add updated version (based off auto-package-update) and integrate it with Emacs. -#+BEGIN_SRC emacs-lisp - (defun verilog-read-file-as-string (file) - "Read FILE contents." - (when (file-exists-p file) - (with-temp-buffer - (insert-file-contents file) - (buffer-string)))) - - (defun verilog-write-string-to-file (file string) - "Substitute FILE contents with STRING." - (with-temp-buffer - (insert string) - (when (file-writable-p file) - (write-region (point-min) - (point-max) - file)))) - - (defun verilog-today-day () - (time-to-days (current-time))) - - (defun should-update-verilog-p () - "Return non-nil when an update is due." - (and - (or - (not (file-exists-p "~/.emacs.d/.last-verilog-update-day")) - (if (>= (/ (- (verilog-today-day) (verilog-read-last-update-day)) 7) 1) - t - nil)))) - - (defun verilog-read-last-update-day () - "Read last update day." - (string-to-number - (verilog-read-file-as-string "~/.emacs.d/.last-verilog-update-day"))) - - (defun verilog-write-current-day () - "Store current day." - (verilog-write-string-to-file - "~/.emacs.d/.last-verilog-update-day" - (int-to-string (verilog-today-day)))) - (use-package verilog-mode - :init - (when (should-update-verilog-p) - (get-verilog-latest) - (verilog-write-current-day)) - (add-to-list 'load-path "~/.emacs.d/elpa/verilog-mode/verilog-mode.el") + :ensure t + :pin gnu :config (autoload 'verilog-mode "verilog-mode" "Verilog mode" t ) - (add-to-list 'auto-mode-alist '("\\.[ds]?vh?\\'" . verilog-mode))) + (add-to-list 'auto-mode-alist '("\\.[ds]?va?h?\\'" . verilog-mode)) + (setq-default verilog-align-ifelse t + verilog-auto-delete-trailing-whitespace t + verilog-auto-inst-param-value t + verilog-auto-lineup 'all + verilog-auto-newline nil + verilog-auto-save-policy nil + verilog-auto-template-warn-unused t + verilog-auto-endcomments nil + verilog-highlight-grouping-keywords t + verilog-highlight-modules t + verilog-tab-to-comment t + verilog-indent-begin-after-if nil + verilog-indent-lists nil + verilog-case-indent 4 + verilog-cexp-indent 0 + verilog-indent-level 4 + verilog-indent-level-behavioral 4 + verilog-indent-level-declaration 4 + verilog-indent-level-directive 4 + verilog-indent-level-module 4)) #+END_SRC - +#+END_SRC *** COMMENT MATLAB Mode for editing MATLAB m-files. #+BEGIN_SRC emacs-lisp @@ -1244,39 +1318,48 @@ (use-package flycheck-rust :ensure t :config - (add-hook 'flyckeck-mode-hook #'flycheck-rust-setup)) + (add-hook 'flycheck-mode-hook #'flycheck-rust-setup)) +#+END_SRC +*** Go +**** Major mode +#+BEGIN_SRC emacs-lisp + (use-package go-mode + :ensure t + :config + (add-hook 'before-save-hook #'gofmt-before-save)) #+END_SRC -**** COMMENT Completion -Code completion with racer. +**** Flycheck #+BEGIN_SRC emacs-lisp - (use-package racer + (use-package flycheck-golangci-lint :ensure t - :hook ((rust-mode . racer-mode) - (racer-mode . (eldoc-mode company-mode))) - :init - (setq racer-command "~/.cargo/bin/racer")) + :config + (add-hook 'flycheck-mode-hook #'flycheck-golangci-lint-setup)) +#+END_SRC +**** Company +#+BEGIN_SRC emacs-lisp + (use-package company-go + :ensure t) #+END_SRC * Org mode ** Up to date org Pull the latest org mode from the repository, rather than the org which comes with emacs. #+BEGIN_SRC emacs-lisp - (use-package org - :ensure org-plus-contrib - :pin org) + (use-package org + :ensure org-contrib) #+END_SRC ** Small tweaks Small quality of life changes to org-mode. #+BEGIN_SRC emacs-lisp -(setq org-src-fontify-natively t) -(setq org-src-tab-acts-natively t) -(setq org-confirm-babel-evaluate nil) -(setq org-export-with-smart-quotes t) -(setq org-src-window-setup 'current-window) -(add-hook 'org-mode-hook 'org-indent-mode) -(diminish 'org-indent-mode) -(diminish 'visual-line-mode) + (setq org-src-fontify-natively t + org-src-tab-acts-natively t + org-confirm-babel-evaluate nil + org-export-with-smart-quotes t + org-src-window-setup 'current-window) + (add-hook 'org-mode-hook 'org-indent-mode) + (diminish 'org-indent-mode) + (diminish 'visual-line-mode) #+END_SRC *** Spell checking for code and latex #+BEGIN_SRC emacs-lisp @@ -1293,13 +1376,13 @@ (visual-line-mode 1))) #+END_SRC -** org-bullets +** Fancy org points Use bullets of different colours and styles instead of the "\*\*\*" to denote indentation levels. #+BEGIN_SRC emacs-lisp - (use-package org-bullets + (use-package org-superstar :ensure t :config - (add-hook 'org-mode-hook (lambda () (org-bullets-mode)))) + (add-hook 'org-mode-hook (lambda () (org-superstar-mode 1)))) #+END_SRC ** Org Babel @@ -1315,7 +1398,6 @@ (scheme . t) (gnuplot . t) (matlab . t) - (plantuml . t) (fortran . t) (java . t) (plantuml . t))) @@ -1345,8 +1427,9 @@ #+END_SRC ** Org export additions -*** COMMENT Pandoc +*** Pandoc Call pandoc on org buffer from org export. +Need to add ~#+OPTIONS: H:99~ to enable large level header exports. #+BEGIN_SRC emacs-lisp (use-package ox-pandoc :ensure t) @@ -1475,7 +1558,7 @@ :defer t) #+END_SRC -* Journaling +* COMMENT Journaling ** Noteworthy entries I write weekly journal entries recapping my week. These files are in org mode. -- Gitblit v1.9.3