summaryrefslogtreecommitdiff
path: root/emacs/project-stuff.el
diff options
context:
space:
mode:
Diffstat (limited to 'emacs/project-stuff.el')
-rw-r--r--emacs/project-stuff.el306
1 files changed, 270 insertions, 36 deletions
diff --git a/emacs/project-stuff.el b/emacs/project-stuff.el
index 879eae0..03142b2 100644
--- a/emacs/project-stuff.el
+++ b/emacs/project-stuff.el
@@ -1,41 +1,275 @@
-(defun create-tags (dir-name)
- "Create tags file."
- (interactive "DDirectory: ")
- (eshell-command
- (format "gtags %s" dir-name)))
-
- ;;; Jonas.Jarnestrom<at>ki.ericsson.se A smarter
- ;;; find-tag that automagically reruns etags when it cant find a
- ;;; requested item and then makes a new try to locate it.
- ;;; Fri Mar 15 09:52:14 2002
-
-(defadvice find-tag (around refresh-etags activate)
- "Rerun etags and reload tags if tag not found and redo find-tag.
- If buffer is modified, ask about save before running etags."
- (let ((extension (file-name-extension (buffer-file-name))))
- (condition-case err
- ad-do-it
- (error (and (buffer-modified-p)
- (not (ding))
- (y-or-n-p "Buffer is modified, save it? ")
- (save-buffer))
- (er-refresh-tags extension)
- ad-do-it))))
-
-(defun er-refresh-tags (&optional extension)
- "Run etags on all peer files in current dir and reload them silently."
- (interactive)
- (shell-command (format "etags *.%s" (or extension "el")))
- (let ((tags-revert-without-query t)) ; don't query, revert silently
- (visit-tags-table default-directory nil)))
+;;; 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)
-(require 'semantic/sb)
-(setq semantic-default-submodes
- '(global-semanticdb-minor-mode global-semantic-idle-scheduler-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-mode 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)
+
+;; don't forget that eglot exists
+
+;; 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 ?#)
+
+
+;; 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)
+(add-hook 'prog-mode-hook (lambda ()
+ (whitespace-mode 1)
+ (display-fill-column-indicator-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))))
-(load-file "~/.emacs.d/sr-speedbar.el")
+(define-key speedbar-mode-map (kbd "q") 'sr-speedbar-toggle)
(global-unset-key (kbd "M-i"))
-(global-set-key (kbd "M-i") 'sr-speedbar-toggle)
+(global-set-key (kbd "M-i") 'speedbar-switch-and-setup)
+
+;; 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)))))
+
+
+
+;; 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
+
+;; 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)
+ (add-hook 'before-save-hook (lambda () (clean-prog-file (current-buffer))))))
+
+(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))
+
+(setq rustic-lsp-setup-p nil)
+
+;; 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-unset-key (kbd "M-m"))
+(global-unset-key (kbd "M-M"))
+(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 finding things
+(global-set-key (kbd "C-s") 'swiper)
+(global-set-key (kbd "C-S-s") 'isearch-forward)
+(global-set-key (kbd "C-r") 'counsel-ag)
+
+;; perspective and friends
+;; (require 'perspective)
+;; (customize-set-variable 'persp-mode-prefix-key (kbd "M-p"))
+;; (global-set-key (kbd "C-x C-b") 'persp-ibuffer)
+;; (persp-mode)
+;; (global-set-key (kbd "C-x b") 'persp-switch-to-buffer*)
+;; (global-set-key (kbd "M-W") 'persp-switch-to-buffer*)
+;; (global-set-key (kbd "C-x k") 'persp-kill-buffer*)
+
+
+(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 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))
+