From 5324d5fcbf8e365dc774795ceeedf1cac9d0b4bb Mon Sep 17 00:00:00 2001 From: Joel Grunbaum <joelgrun@gmail.com> Date: Wed, 22 Dec 2021 07:39:02 +0000 Subject: [PATCH] Added a more general git hook prompt and gerrit compatibality --- config.org | 316 +++++++++++++++++++++++++++++++++++----------------- 1 files changed, 210 insertions(+), 106 deletions(-) diff --git a/config.org b/config.org index 970263c..faced63 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 @@ -614,7 +614,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 +624,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 @@ -685,9 +695,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 @@ -718,6 +734,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 @@ -784,7 +807,6 @@ :config (flycheck-pos-tip-mode)) #+END_SRC - ** Company Company is auto-complete for Emacs. Uses various backends, more of which are added later. @@ -801,18 +823,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") @@ -823,11 +846,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) @@ -844,57 +867,89 @@ 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 @@ -948,7 +1003,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 @@ -959,8 +1015,25 @@ (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 @@ -970,40 +1043,50 @@ (add-hook 'c++-mode-hook 'company-mode) (add-hook 'c-mode-hook 'company-mode)) - (use-package irony - :ensure t - :init - (setq w32-pipe-read-delay 0) - (setq irony-server-w32-pipe-buffer-size (* 64 1024)) - (add-hook 'c++-mode-hook 'irony-mode) - (add-hook 'c-mode-hook 'irony-mode) - (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options) - (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)) + ;; (use-package irony + ;; :ensure t + ;; :init + ;; (setq w32-pipe-read-delay 0) + ;; (setq irony-server-w32-pipe-buffer-size (* 64 1024)) + ;; (add-hook 'c++-mode-hook 'irony-mode) + ;; (add-hook 'c-mode-hook 'irony-mode) + ;; (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options) + ;; (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)) - (use-package company-irony - :ensure t - :after irony - :config - (add-to-list 'company-backends '(company-c-headers - company-dabbrev-code - company-irony))) + ;; (use-package company-irony + ;; :ensure t + ;; :after irony + ;; :config + ;; (add-to-list 'company-backends '(company-c-headers + ;; company-dabbrev-code + ;; company-irony))) #+END_SRC **** 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 @@ -1121,10 +1204,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 @@ -1144,7 +1230,7 @@ '("\\.rkt$" . racket-mode))) #+END_SRC -*** COMMENT Verilog +*** Verilog **** Get latest version Use latest version from repositories. #+BEGIN_SRC emacs-lisp @@ -1153,9 +1239,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 @@ -1214,7 +1320,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 @@ -1244,9 +1350,8 @@ ** 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 @@ -1276,13 +1381,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 @@ -1298,7 +1403,6 @@ (scheme . t) (gnuplot . t) (matlab . t) - (plantuml . t) (fortran . t) (java . t) (plantuml . t))) -- Gitblit v1.9.3