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 | 192 +++++++++++++++++++++++++++++++---------------- 1 files changed, 127 insertions(+), 65 deletions(-) diff --git a/config.org b/config.org index 1d46a04..faced63 100644 --- a/config.org +++ b/config.org @@ -835,7 +835,7 @@ LaTeX-mode rust-mode sh-mode - verilog-mode + ;; verilog-mode go-mode) . lsp)) :init (setq lsp-keymap-prefix "C-c l") @@ -867,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 @@ -1032,19 +1064,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 @@ -1197,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 -- Gitblit v1.9.3