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

Joel Grunbaum
2021-12-28 51fdbd03573d8b1e11e78aac00d329a4ac55eb78
config.org
@@ -124,7 +124,7 @@
  (diminish 'flyspell-mode)
#+END_SRC
** Language Tool
** COMMENT Language Tool
Language tool is an open source grammar checker.
#+BEGIN_SRC emacs-lisp
  (use-package langtool
@@ -135,17 +135,14 @@
** 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
@@ -488,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
@@ -595,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
@@ -614,7 +611,7 @@
#+BEGIN_SRC emacs-lisp
  (setq c-default-style '((java-mode . "java")
                         (awk-mode . "awk")
                         (other . "linux")))
                         (other . "k&r")))
#+END_SRC
** Coding system
@@ -624,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
                tab-width 8
  (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
@@ -692,7 +699,8 @@
    ;; (setq tramp-default-method "ssh")
    (when (eq system-type 'windows-nt)
      (setq tramp-default-method "pscp"))
    (setq password-cache-expiry nil))
    (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
@@ -796,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.
@@ -813,18 +820,19 @@
** 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
             ;; verilog-mode
             go-mode) . lsp))
    :init
    (setq lsp-keymap-prefix "C-c l")
@@ -835,11 +843,11 @@
    (setq lsp-completion-provider :capf)
    (setq lsp-keep-workspace-alive 'nil)
    (add-to-list 'exec-path "~/.cargo/bin"))
  (use-package lsp-ui
    :ensure t
    :commands lsp-ui-mode)
  (use-package helm-lsp
    :ensure t
    :commands helm-lsp-workspace-symbol)
@@ -856,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
@@ -960,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
@@ -971,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
@@ -981,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
@@ -1003,19 +1062,29 @@
**** Clang-format
Automatically format buffer on save.
#+BEGIN_SRC emacs-lisp
  (when (file-exists-p "/usr/share/clang/clang-format.el")
    (load "/usr/share/clang/clang-format.el")
    (setq clang-format-linux-style (concat "{BasedOnStyle: LLVM,"
                                           "IndentWidth: 8,"
                                           "UseTab: Always,"
                                           "BreakBeforeBraces: Linux,"
                                           "AllowShortIfStatementsOnASingleLine: false,"
                                           "IndentCaseLabels: false}"))
    (setq-default clang-format-style clang-format-linux-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))
      (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
@@ -1168,9 +1237,29 @@
    :pin gnu
    :config
    (autoload 'verilog-mode "verilog-mode" "Verilog mode" t )
    (add-to-list 'auto-mode-alist '("\\.[ds]?va?h?\\'" . 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
@@ -1229,7 +1318,7 @@
  (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
@@ -1239,9 +1328,6 @@
    :config
    (add-hook 'before-save-hook #'gofmt-before-save))
#+END_SRC
#+RESULTS:
: t
**** Flycheck
#+BEGIN_SRC emacs-lisp
@@ -1266,14 +1352,14 @@
** 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
@@ -1472,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.