summaryrefslogtreecommitdiff
path: root/emacs/coding-config.el
diff options
context:
space:
mode:
authortmu <t.man.atl.2012@gmail.com>2023-11-14 13:38:52 -0800
committertmu <t.man.atl.2012@gmail.com>2023-11-14 13:38:52 -0800
commita04213e2c04a98c204c5e51dcf0219a4286113bf (patch)
tree839dd4dc42b283a7f168a05d9f809686c7a77a4f /emacs/coding-config.el
parent05d72eabc9e1f0daefe26be6f7c54f83f58d5f15 (diff)
bits
Diffstat (limited to 'emacs/coding-config.el')
-rw-r--r--emacs/coding-config.el314
1 files changed, 314 insertions, 0 deletions
diff --git a/emacs/coding-config.el b/emacs/coding-config.el
new file mode 100644
index 0000000..340f0c0
--- /dev/null
+++ b/emacs/coding-config.el
@@ -0,0 +1,314 @@
+;;; project-stuff --- Things I want for coding mostly
+
+;;; Commentary:
+
+;;; Just want to seperate the coding stuff from my other init stuff
+
+
+(add-hook 'xref-backend-functions 'gxref-xref-backend)
+
+;; don't forget that eglot exists
+;; (global-company-mode 1)
+;; (setq company-idle-delay 0.1)
+
+;; (require 'semantic/sb)
+;; (setq semantic-default-submodes
+;; '(global-semantic-idle-scheduler-mode
+;; semantic-db-minor-mode
+;; global-semantic-idle-summary-mode
+;; global-semantic-idle-completions-mode
+;; global-semantic-highlight-func-mode
+;; global-semantic-mru-bookmark-mode
+;; global-semantic-idle-local-symbol-highlight-mode)
+;; semantic-idle-scheduler-work-idle-time 5)
+;; (semantic-mode 1
+;; (global-ede-mode t)
+
+;; better commenting stuff
+(global-set-key (kbd "C-x C-;") 'comment-or-uncomment-region)
+(global-set-key (kbd "C-x ;") 'comment-line)
+(global-set-key (kbd "C-x :") 'comment-set-column) ;never gonna use but whatever
+
+(setq asm-comment-char ?#)
+
+;; nice eglot binds
+(global-set-key (kbd "C-c f") 'eglot-code-action-quickfix)
+(global-set-key (kbd "C-c C-f") 'eglot-code-actions)
+
+;; deal white whitespace better
+(setq whitespace-style
+ '(face trailing tabs missing-newline-at-eof indentation space-after-tab space-before-tab tab-mark))
+(setq fill-column 80)
+(global-hl-todo-mode 1)
+
+
+(require 'sr-speedbar "~/.emacs.d/sr-speedbar.el" nil)
+(defun speedbar-switch-and-setup ()
+ "Switch in and out of the speedbar, opening as necessary."
+ (interactive)
+ (if (eq major-mode 'speedbar-mode)
+ (select-window (previous-window))
+ (let ((cur (current-buffer))
+ (win (get-buffer-window "*SPEEDBAR*")))
+ (if win
+ (select-window win)
+ (sr-speedbar-toggle)
+ (select-window (get-buffer-window "*SPEEDBAR*")))
+ (sr-speedbar-refresh)
+ (speedbar-find-selected-file (buffer-file-name cur))
+ (speedbar-expand-line))))
+
+(define-key speedbar-mode-map (kbd "q") 'sr-speedbar-toggle)
+(global-unset-key (kbd "M-i"))
+(global-set-key (kbd "M-i") 'speedbar-switch-and-setup)
+
+(global-set-key (kbd "M-Z") 'suspend-frame)
+
+;; indent code when pasting, from
+;; https://trey-jackson.blogspot.com/2008/03/emacs-tip-15-indent-yanked-code.html
+
+;; automatically indenting yanked text if in programming-modes
+(defvar yank-indent-modes '(emacs-lisp-mode
+ c-mode c++-mode
+ tcl-mode sql-mode
+ perl-mode cperl-mode
+ java-mode jde-mode
+ lisp-interaction-mode
+ LaTeX-mode TeX-mode
+ rust-mode
+ rustic-mode)
+ "Modes in which to indent regions that are yanked (or yank-popped).")
+
+(defun yank-advised-indent-function (beg end)
+ "Do indentation, as long as the region isn't too large.
+BEG and END define the region."
+ (indent-region beg end nil))
+
+(defadvice yank (after yank-indent activate)
+ "If current mode is one of 'yank-indent-modes, indent yanked text (with prefix arg don't indent)."
+ (if (and (not (ad-get-arg 0))
+ (member major-mode yank-indent-modes))
+ (let ((transient-mark-mode nil))
+ (yank-advised-indent-function (region-beginning) (region-end)))))
+
+(defadvice yank-pop (after yank-pop-indent activate)
+ "If current mode is one of 'yank-indent-modes, indent yanked text (with prefix arg don't indent)."
+ (if (and (not (ad-get-arg 0))
+ (member major-mode yank-indent-modes))
+ (let ((transient-mark-mode nil))
+ (yank-advised-indent-function (region-beginning) (region-end)))))
+
+(defadvice evil-paste-before (after yank-indent activate)
+ "If current mode is one of 'yank-indent-modes, indent yanked text (with prefix arg don't indent)."
+ (if (and (not (ad-get-arg 0))
+ (member major-mode yank-indent-modes))
+ (let ((transient-mark-mode nil))
+ (yank-advised-indent-function (region-beginning) (region-end)))))
+
+(defadvice evil-paste-after (after yank-indent activate)
+ "If current mode is one of 'yank-indent-modes, indent yanked text (with prefix arg don't indent)."
+ (if (and (not (ad-get-arg 0))
+ (member major-mode yank-indent-modes))
+ (let ((transient-mark-mode nil))
+ (yank-advised-indent-function (region-beginning) (region-end)))))
+
+
+;; make ibuffer play with projectile
+(require 'ibuffer)
+(add-hook 'ibuffer-hook
+ (lambda ()
+ (ibuffer-projectile-set-filter-groups)
+ (unless (eq ibuffer-sorting-mode 'alphabetic)
+ (ibuffer-do-sort-by-alphabetic))))
+
+;; make shells and whatnot slightly better
+(require 'comint)
+(setq comint-scroll-to-bottom-on-input t)
+(setq comint-scroll-to-bottom-on-output t)
+
+;; code folding
+
+(add-to-list 'load-path "~/.emacs.d/")
+;; (require 'ts-foldV)
+
+(autoload 'hide-lines "hide-lines" "Hide lines based on a regexp" t)
+(global-set-key (kbd "C-c /") 'hide-lines)
+
+;; region folding
+(autoload 'fold-this "fold-this" "arbitrary folding" t)
+(autoload 'fold-this-unfold-at-point "fold-this" "arbitrary folding" t)
+
+;; folding keybinds
+(defun fold-this-fold-forward (&optional arg)
+ "Fold forward ARG number of sexps, defaulting to one."
+ (interactive "p")
+ (push-mark)
+ (forward-sexp arg)
+ (fold-this (mark) (point))
+ (pop-mark))
+(defun fold-this-fold-backward (&optional arg)
+ "Fold backward ARG number of sexps, defaulting to one."
+ (interactive "p")
+ (push-mark)
+ (backward-sexp arg)
+ (fold-this (point) (mark))
+ (pop-mark))
+
+(define-prefix-command 'fold-map)
+(global-set-key (kbd "M-F") 'fold-map)
+
+(define-keymap :full nil
+ :parent nil
+ :suppress nil
+ :keymap nil
+ :name "fold-map"
+ :prefix 'fold-map
+ (kbd "c") 'fold-this
+ (kbd "e") 'fold-this-unfold-at-point
+ (kbd "t") 'hs-toggle-hiding
+ (kbd "f") 'fold-this-fold-forward
+ (kbd "b") 'fold-this-fold-backward
+ (kbd "l") 'hs-hide-level)
+
+
+(add-hook 'tex-mode-hook (lambda ()
+ (setq spell-fu-faces-exclude
+ '(tex-math
+ font-lock-builtin-face
+ font-lock-keyword-face
+ font-lock-function-name-face
+ font-lock-variable-name-face))))
+
+(defun clean-prog-file (buffer)
+ "Fixes whitespace in buffer"
+ (save-excursion
+ (with-current-buffer buffer
+ (untabify (point-min) (point-max))
+ (goto-char (point-min))
+ (while (re-search-forward " +$" nil t)
+ (replace-match "" nil nil)))))
+
+(add-hook 'prog-mode-hook (lambda ()
+ (hs-minor-mode 1)
+ ;; (flymake-mode 1)
+ (spell-fu-mode 0)
+ (superword-mode 1)
+ (whitespace-mode 1)
+ (display-fill-column-indicator-mode 1)
+ (add-hook 'before-save-hook
+ (lambda ()
+ (if (not (eq major-mode 'makefile-gmake-mode))
+ (clean-prog-file (current-buffer)))))))
+
+
+(add-hook 'haskell-mode-hook (lambda ()
+ (evil-define-key 'normal local-map (kbd "M-.") 'haskell-jump-to-def)
+ ))
+
+;; (use-package flymake-diagnostic-at-point
+;; :after flymake
+;; :config
+;; (setq flymake-diagnostic-at-point-timer-delay 1)
+;; (add-hook 'flymake-mode-hook #'flymake-diagnostic-at-point-mode))
+
+(use-package sideline
+ :init
+ (setq sideline-backends-skip-current-line t ; don't display on current line
+ sideline-order-left 'down ; or 'up
+ sideline-order-right 'up ; or 'down
+ sideline-format-left "%s " ; format for left aligment
+ sideline-format-right " %s" ; format for right aligment
+ sideline-priority 100 ; overlays' priority
+ sideline-display-backend-name t) ; display the backend name
+ :hook ((flycheck-mode . sideline-mode) ; for `sideline-flycheck`
+ (flymake-mode . sideline-mode)) ; for `sideline-flymake`
+ :init
+ (setq sideline-backends-right '(sideline-flymake)))
+
+
+;; eshell stuff
+(require 'eshell)
+(require 'esh-help)
+(setup-esh-help-eldoc)
+(add-hook 'eshell-mode-hook (lambda () (eldoc-mode 1)))
+(add-hook 'eshell-mode-hook 'eshell-fringe-status-mode)
+(require 'em-smart)
+(setq eshell-where-to-jump 'begin)
+(setq eshell-review-quick-commands 'not-even-short-output)
+(setq eshell-smart-space-goes-to-end t)
+(add-to-list 'eshell-modules-list 'eshell-smart)
+(eshell-vterm-mode 1)
+(setq eshell-visual-commands
+ (append eshell-visual-commands
+ '("ytfzf" "nmtui" "w3m")))
+
+(add-hook 'vterm-mode-hook (lambda ()
+ (hl-line-mode 0)))
+(add-hook 'eshell-mode-hook (lambda ()
+ (hl-line-mode 0)))
+
+(define-key vterm-mode-map (kbd "M-W") 'persp-switch-to-buffer)
+(define-key vterm-mode-map (kbd "M-k") 'persp-kill-buffer)
+(define-key vterm-mode-map (kbd "M-p") 'persp-key-map)
+
+(require 'evil)
+(evil-set-initial-state 'vterm-mode 'emacs)
+
+(define-key eshell-mode-map (kbd "M-o") 'other-window)
+(define-key eshell-mode-map (kbd "M-W") 'switch-buffer)
+(define-key eshell-mode-map (kbd "C-l") (lambda ()
+ (interactive)
+ (recenter-top-bottom 0)))
+
+;; compilation stuff
+(global-set-key (kbd "M-m") (lambda ()
+ (interactive)
+ (if flymake-mode
+ (flymake-goto-next-error)
+ (next-error))))
+(global-set-key (kbd "M-M") 'recompile)
+(setq compilation-always-kill t
+ compilation-scroll-output t)
+
+;; better searching
+(setq counsel-grep-base-command
+ "rg -i -M 120 --no-heading --line-number --color never '%s' %s")
+(global-set-key (kbd "C-s") 'counsel-grep-or-swiper)
+(global-set-key (kbd "C-S-s") 'isearch-forward)
+(define-key evil-normal-state-map (kbd "C-r") 'counsel-rg)
+
+(require 'persp-mode)
+(persp-mode 1)
+
+
+(with-eval-after-load "persp-mode"
+ (defvar after-switch-to-buffer-functions nil)
+ (defvar after-display-buffer-functions nil)
+
+ (if (fboundp 'advice-add)
+ ;;Modern way
+ (progn
+ (defun after-switch-to-buffer-adv (&rest r)
+ (apply #'run-hook-with-args 'after-switch-to-buffer-functions r))
+ (defun after-display-buffer-adv (&rest r)
+ (apply #'run-hook-with-args 'after-display-buffer-functions r))
+ (advice-add #'switch-to-buffer :after #'after-switch-to-buffer-adv)
+ (advice-add #'display-buffer :after #'after-display-buffer-adv))
+
+ (add-hook 'after-switch-to-buffer-functions
+ #'(lambda (bn) (when (and persp-mode
+ (not persp-temporarily-display-buffer))
+ (persp-add-buffer bn)))))
+
+ (setq persp-add-buffer-on-after-change-major-mode 'free
+ persp-autokill-buffer-on-remove t
+ persp-kill-foreign-buffer-behaviour 'dont-ask)
+ (global-set-key (kbd "M-p") 'persp-key-map)
+ (global-set-key (kbd "C-x b") #'persp-switch-to-buffer)
+ (global-set-key (kbd "C-x B") #'switch-to-buffer)
+ (global-set-key (kbd "C-x C-b") (lambda ()
+ (interactive)
+ (with-persp-buffer-list () (ibuffer))))
+ (global-set-key (kbd "M-W") #'persp-switch-to-buffer)
+ (global-set-key (kbd "C-x k") #'persp-kill-buffer))
+