558 lines
21 KiB
EmacsLisp
558 lines
21 KiB
EmacsLisp
;; General Settings
|
|
(setq inhibit-startup-screen t)
|
|
(setq vc-follow-symlinks t)
|
|
(setq backup-directory-alist `((".*" . "~/.emacs.d/saves"))
|
|
delete-old-versions t)
|
|
(setq auto-save-file-name-transforms `((".*" ,temporary-file-directory t)))
|
|
|
|
(setq gc-cons-threshold 50000000)
|
|
(setq large-file-warning-threshold 100000000)
|
|
(global-auto-revert-mode t)
|
|
(fset 'yes-or-no-p 'y-or-n-p)
|
|
(prefer-coding-system 'utf-8)
|
|
(set-default-coding-systems 'utf-8)
|
|
(set-terminal-coding-system 'utf-8)
|
|
(set-keyboard-coding-system 'utf-8)
|
|
;; (define-key key-translation-map (kbd "ESC") (kbd "C-g"))
|
|
|
|
(add-hook 'text-mode-hook (lambda () (setq fill-column 100) (turn-on-auto-fill)))
|
|
|
|
(put 'narrow-to-region 'disabled nil)
|
|
|
|
;; (require 'server)
|
|
;; (if (not (server-running-p)) (server-start))
|
|
(add-hook 'prog-mode (lambda () (modify-syntax-entry ?_ "w")))
|
|
|
|
(setq default-directory "/home/joe")
|
|
(setq-default display-line-numbers 'relative)
|
|
(make-variable-buffer-local 'global-hl-line-mode)
|
|
(set-window-margins nil 0)
|
|
(setq-default right-fringe-width 10)
|
|
(setq scroll-margin 0
|
|
scroll-conservatively 100000
|
|
scroll-preserve-screen-position 1)
|
|
|
|
(global-hl-line-mode +1)
|
|
(column-number-mode +1)
|
|
|
|
|
|
(dolist (mode '(dashboard-mode-hook org-mode-hook term-mode-hook eww-mode-hook vterm-mode-hook eshell-mode-hook dired-mode-hook shell-mode-hook magit-mode-hook))
|
|
(add-hook mode (lambda () (display-line-numbers-mode 0))))
|
|
|
|
(set-face-attribute 'default nil :font "Fira Code Nerd Font" :height 105)
|
|
|
|
;; Visuals
|
|
(scroll-bar-mode -1)
|
|
(tool-bar-mode -1)
|
|
(menu-bar-mode -1)
|
|
(tooltip-mode -1)
|
|
|
|
;; Text Settings
|
|
(setq-default c-basic-offset 4) ;; This is annoying
|
|
(setq-default indent-tabs-mode nil)
|
|
(setq-default tab-width 4)
|
|
(setq indent-line-function 'insert-tab)
|
|
(set-default 'truncate-lines t)
|
|
(set-default 'truncate-partial-width-windows nil)
|
|
|
|
(setq-default line-spacing 5)
|
|
(add-hook 'dashboard-mode-hook (lambda () (setq-local line-spacing 12)))
|
|
|
|
(add-hook 'before-save-hook 'whitespace-cleanup)
|
|
|
|
;; (setq visible-bell nil ring-bell-function 'joe/flash-mode-line)
|
|
;; (defun joe/flash-mode-line ()
|
|
;; (invert-face 'mode-line)
|
|
;; (run-with-timer 0.1 nil #'invert-face 'mode-line))
|
|
|
|
;; (set-face-foreground 'minibuffer-prompt nil)
|
|
|
|
(defadvice text-scale-increase (around all-buffers (arg) activate)
|
|
(dolist (buffer (buffer-list))
|
|
(with-current-buffer buffer
|
|
ad-do-it)))
|
|
|
|
(defun joe/edit-init()
|
|
"Edit 'init.el' quickly"
|
|
(interactive)
|
|
(find-file user-init-file))
|
|
|
|
(defun joe/show-full-path ()
|
|
"Show the full path file name in the minibuffer."
|
|
(interactive)
|
|
(message (buffer-file-name)))
|
|
|
|
(defun joe/toggle-buffer-mode ()
|
|
"Toggles the current major mode between actual and fundamental mode. This will act as a way to easily get
|
|
all of the evil keybindings in buffers like magit, without compromises."
|
|
(interactive)
|
|
(let ((previous-mode major-mode))
|
|
(unless (boundp 'joe/buffer-previous-mode)
|
|
(setq-local joe/buffer-previous-mode major-mode))
|
|
(if (equal major-mode 'fundamental-mode)
|
|
(funcall joe/buffer-previous-mode)
|
|
(progn
|
|
(fundamental-mode)
|
|
(setq-local joe/buffer-previous-mode previous-mode)))))
|
|
|
|
(defun joe/revert-buffer-no-confirm ()
|
|
"Revert buffer without confirmation."
|
|
(interactive)
|
|
(revert-buffer :ignore-auto :noconfirm))
|
|
|
|
;; Packages
|
|
(require 'package)
|
|
(setq package-archives
|
|
'(("org" . "http://orgmode.org/elpa/")
|
|
("gnu" . "http://elpa.gnu.org/packages/")
|
|
("melpa" . "https://melpa.org/packages/")))
|
|
;; ("marmalade" . "http://marmalade-repo.org/packages/")))
|
|
|
|
(package-initialize)
|
|
|
|
;; Why we use this line
|
|
;; https://www.reddit.com/r/emacs/comments/1rdstn/set_packageenableatstartup_to_nil_for_slightly/
|
|
(setq package-enable-at-startup nil)
|
|
|
|
(custom-set-variables
|
|
;; custom-set-variables was added by Custom.
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
;; Your init file should contain only one such instance.
|
|
;; If there is more than one, they won't work right.
|
|
'(ansi-color-faces-vector
|
|
[default default default italic underline success warning error])
|
|
'(custom-safe-themes
|
|
'("aaa4c36ce00e572784d424554dcc9641c82d1155370770e231e10c649b59a074" default))
|
|
'(flycheck-color-mode-line-face-to-color 'mode-line-buffer-id)
|
|
'(frame-background-mode 'dark)
|
|
'(ignored-local-variable-values
|
|
'((eval add-hook 'after-save-hook
|
|
'(lambda nil
|
|
(org-babel-tangle))
|
|
nil t)))
|
|
'(org-agenda-files '("~/todo.org"))
|
|
'(package-selected-packages
|
|
'(macrostep org-kanban embark-consult embark olivetti vertico-posframe orderless vertico eglot-fsharp consult-eglot eglot nano-modeline mini-modeline pdf-tools consult all-the-icons-completion kind-icon mini-modeline shelldon pcomplete-extension corfu-doc esh-autosuggest fish-completion cape corfu highlight-quoted dirvish ranger magit multi-vterm evil-collection smartparens vterm all-the-icons org-bullets fsharp-mode fish-mode find-file-in-project helpful ahk-mode rainbow-delimiters doom-themes marginalia avy evil-commentary evil-surround undo-tree which-key dashboard))
|
|
'(safe-local-variable-values
|
|
'((eval add-hook 'after-save-hook
|
|
'(lambda nil
|
|
(org-babel-tangle))
|
|
nil t)))
|
|
'(window-divider-mode nil))
|
|
(custom-set-faces
|
|
;; custom-set-faces was added by Custom.
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
;; Your init file should contain only one such instance.
|
|
;; If there is more than one, they won't work right.
|
|
'(magit-diff-hunk-heading-highlight ((t (:extend t :background "cornflower blue" :foreground "#212337" :weight bold)))))
|
|
|
|
(dolist (p package-selected-packages)
|
|
(when (not (package-installed-p p))
|
|
(package-install p)))
|
|
|
|
(setq custom-safe-themes t)
|
|
(load-theme 'doom-vibrant t)
|
|
;; (load-theme 'doom-flatwhite t)
|
|
|
|
(setq evil-want-keybinding nil)
|
|
(setq evil-undo-system 'undo-tree)
|
|
(setq evil-want-C-u-scroll t)
|
|
(setq evil-want-Y-yank-to-eol t)
|
|
|
|
(require 'highlight-quoted)
|
|
(add-hook 'emacs-lisp-mode-hook 'highlight-quoted-mode)
|
|
|
|
(global-undo-tree-mode)
|
|
(setq undo-tree-visualizer-diff t)
|
|
(setq undo-tree-history-directory-alist '(("." . "~/.emacs.vanilla/undo")))
|
|
(require 'evil)
|
|
(evil-mode)
|
|
(require 'evil-collection)
|
|
(evil-collection-init)
|
|
|
|
(save-place-mode t)
|
|
(setq save-place-file "~/.emacs.vanilla/places")
|
|
(setq org-edit-src-content-indentation 0)
|
|
(require 'dired)
|
|
(require 'dirvish)
|
|
(setq delete-by-moving-to-trash t)
|
|
(setq dired-dwim-target t)
|
|
(setq dirvish-preview-dispatchers (cl-substitute 'pdf-preface 'pdf dirvish-preview-dispatchers))
|
|
(dirvish-define-preview exa (file)
|
|
"Use `exa' to generate directory preview."
|
|
:require ("exa") ; tell Dirvish to check if we have the executable
|
|
(when (file-directory-p file) ; we only interest in directories here
|
|
`(shell . ("exa" "--color=always" "-al" ,file)))) ; use the command output as preview
|
|
(setq dired-listing-switches "-l --almost-all --human-readable --time-style=long-iso --group-directories-first --no-group")
|
|
(add-to-list 'dirvish-preview-dispatchers 'exa)
|
|
(evil-define-key 'normal dirvish-mode-map (kbd "q") 'dirvish-quit)
|
|
|
|
(defun joe/dired-open-file ()
|
|
"In dired, open the file named on this line."
|
|
(interactive)
|
|
(let* ((file (dired-get-filename nil t)))
|
|
(call-process "xdg-open" nil 0 nil file)))
|
|
|
|
(defun joe/bookmark-set-and-save ()
|
|
"In dired, open the file named on this line."
|
|
(interactive)
|
|
(bookmark-set)
|
|
(bookmark-save))
|
|
|
|
(defun lsp-related-stuff ()
|
|
(evil-define-key 'normal 'global (kbd "M-s") 'consult-imenu)
|
|
(evil-define-key 'normal 'global (kbd "M-i") 'eldoc)
|
|
(evil-define-key 'normal 'global (kbd "M-e") 'flymake-goto-next-error)
|
|
(evil-define-key 'normal 'global (kbd "M-E") 'flymake-goto-prev-error))
|
|
|
|
(add-hook 'prog-mode-hook 'lsp-related-stuff)
|
|
|
|
(require 'dashboard)
|
|
(dashboard-setup-startup-hook)
|
|
(setq initial-buffer-choice (lambda () (get-buffer-create "*dashboard*")))
|
|
(setq dashboard-startup-banner 'logo)
|
|
(setq dashboard-center-content t)
|
|
(setq dashboard-set-file-icons t)
|
|
(setq dashboard-set-heading-icons t)
|
|
|
|
(require 'which-key)
|
|
(setq which-key-idle-delay 0.3)
|
|
(which-key-mode)
|
|
|
|
(which-key-add-keymap-based-replacements evil-normal-state-map
|
|
"<leader>f" '("Files")
|
|
"<leader>b" '("Buffers")
|
|
"<leader>d" '("Dired")
|
|
"<leader>g" '("Git")
|
|
"<leader>t" '("Tabs")
|
|
"<leader>p" '("Packages")
|
|
"<leader>s" '("Shell (vterm)")
|
|
"<leader>h" '("Help"))
|
|
|
|
(evil-set-leader 'normal (kbd "SPC"))
|
|
|
|
;; TODO: We need 3 bindings; 1.) close buffer 2.) close window 3.) close buffer and window
|
|
;; To disable a keybinding just bind it to nil
|
|
(evil-define-key 'normal 'global (kbd "<leader>w") 'save-buffer)
|
|
(evil-define-key 'normal 'global (kbd "<leader>q") 'kill-buffer-and-window)
|
|
(evil-define-key 'normal 'global (kbd "<leader>h") 'help-command)
|
|
(evil-define-key 'normal 'global (kbd "<leader>k") 'kill-this-buffer)
|
|
(evil-define-key 'normal 'global (kbd "<leader>hf") 'helpful-callable)
|
|
(evil-define-key 'normal 'global (kbd "<leader>hv") 'helpful-variable)
|
|
(evil-define-key 'normal 'global (kbd "<leader>hk") 'helpful-key)
|
|
(evil-define-key 'normal 'global (kbd "<leader>ho") 'helpful-symbol)
|
|
(evil-define-key 'normal 'global (kbd "<leader>hg") 'helpful-at-point)
|
|
(evil-define-key 'normal 'global (kbd "<leader>fb") 'bookmark-jump)
|
|
(evil-define-key 'normal 'global (kbd "<leader>fr") 'consult-recent-file)
|
|
(evil-define-key 'normal 'global (kbd "<leader>ff") 'ffip)
|
|
(evil-define-key 'normal 'global (kbd "<leader>fi") 'joe/edit-init)
|
|
(evil-define-key 'normal 'global (kbd "<leader>bl") 'mode-line-other-buffer)
|
|
(evil-define-key 'normal 'global (kbd "<leader>bb") 'switch-to-buffer)
|
|
(evil-define-key 'normal 'global (kbd "<leader>bi") 'ibuffer)
|
|
(evil-define-key 'normal 'global (kbd "<leader>bm") 'joe/toggle-buffer-mode)
|
|
(evil-define-key 'normal 'global (kbd "<leader>br") 'joe/revert-buffer-no-confirm)
|
|
(evil-define-key 'normal 'global (kbd "<leader>bk") 'kill-this-buffer)
|
|
(evil-define-key 'normal 'global (kbd "<leader>gg") 'magit-status)
|
|
(evil-define-key 'normal 'global (kbd "<leader>gc") 'magit-clone)
|
|
(evil-define-key 'normal 'global (kbd "<leader>pi") 'package-install)
|
|
(evil-define-key 'normal 'global (kbd "<leader>pd") 'package-delete)
|
|
(evil-define-key 'normal 'global (kbd "<leader>pf") 'package-refresh-contents)
|
|
(evil-define-key 'normal 'global (kbd "<leader>pl") 'package-list-packages)
|
|
(evil-define-key 'normal 'global (kbd "<leader>pr") 'package-reinstall)
|
|
(evil-define-key 'normal 'global (kbd "<leader>tt") 'multi-vterm)
|
|
(evil-define-key 'normal 'global (kbd "<leader>tn") 'multi-vterm-next)
|
|
(evil-define-key 'normal 'global (kbd "<leader>tv") 'vterm-other-window)
|
|
(evil-define-key 'normal 'global (kbd "<leader>Ba") 'joe/bookmark-set-and-save)
|
|
(evil-define-key 'normal 'global (kbd "<leader>Bd") 'bookmark-delete)
|
|
(evil-define-key 'normal 'global (kbd "<leader>cr") 'joe/compile-run)
|
|
(evil-define-key 'normal 'global (kbd "<leader>cc") 'joe/compile-comp)
|
|
(evil-define-key 'normal 'global (kbd "<leader>ct") 'consult-theme)
|
|
|
|
(evil-define-key 'normal 'global (kbd "C-h") 'evil-window-left)
|
|
(evil-define-key 'normal 'global (kbd "C-j") 'evil-window-down)
|
|
(evil-define-key 'normal 'global (kbd "C-k") 'evil-window-up)
|
|
(evil-define-key 'normal 'global (kbd "C-l") 'evil-window-right)
|
|
(evil-define-key 'normal 'global (kbd "M-h") 'tab-previous)
|
|
(evil-define-key 'normal 'global (kbd "M-l") 'tab-next)
|
|
(evil-define-key 'normal 'global (kbd "<leader>tn") 'tab-new)
|
|
(evil-define-key 'normal 'global (kbd "<leader>tc") 'tab-close)
|
|
;; (evil-define-key 'normal 'global (kbd "M-h") 'tab-line-switch-to-prev-tab)
|
|
;; (evil-define-key 'normal 'global (kbd "M-l") 'tab-line-switch-to-next-tab)
|
|
|
|
(defvar global-evil-leader-map (make-sparse-keymap))
|
|
(evil-define-key 'normal 'global-evil-leader-map (kbd "SPC") 'evil-send-leader)
|
|
|
|
(define-minor-mode global-evil-leader-mode
|
|
"Minor mode to make evil leader global"
|
|
:global t
|
|
:keymap global-evil-leader-map)
|
|
(global-evil-leader-mode)
|
|
|
|
;; (require 'mini-modeline)
|
|
;; (mini-modeline-mode 1)
|
|
(require 'nano-modeline)
|
|
(nano-modeline-mode 1)
|
|
|
|
(require 'evil-surround)
|
|
(global-evil-surround-mode 1)
|
|
|
|
(require 'evil-snipe)
|
|
(evil-snipe-override-mode 1)
|
|
|
|
(require 'evil-commentary)
|
|
(evil-commentary-mode)
|
|
|
|
(require 'avy)
|
|
(setq avy-keys '(?a ?s ?d ?f ?w ?e ?r ?u ?i ?o ?h ?j ?k ?l ?x ?c ?m))
|
|
(setq avy-all-windows t)
|
|
(setq avy-background t)
|
|
(defvar avy-map (make-sparse-keymap))
|
|
|
|
(define-key evil-normal-state-map (kbd ",") avy-map)
|
|
(define-key avy-map "b" #'avy-goto-word-0-above)
|
|
(define-key avy-map "w" #'avy-goto-word-0-below)
|
|
(define-key avy-map "c" #'avy-goto-char-timer)
|
|
|
|
(require 'org-bullets)
|
|
(defun joe/org-mode-setup ()
|
|
(org-bullets-mode)
|
|
(org-indent-mode))
|
|
(add-hook 'org-mode-hook 'joe/org-mode-setup)
|
|
(setq org-todo-keywords '((sequence "TODO" "IN-PROGRESS" "|" "DONE" "BACKLOG")))
|
|
(require 'org-tempo)
|
|
(add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
|
|
(setq org-edit-src-content-indentation 0)
|
|
|
|
(require 'olivetti)
|
|
(setq olivetti-minimum-body-width 120)
|
|
|
|
;; VEMCO
|
|
|
|
(require 'vertico)
|
|
(vertico-mode)
|
|
(vertico-multiform-mode)
|
|
(define-key vertico-map "\M-G" #'vertico-multiform-mode)
|
|
(require 'vertico-posframe)
|
|
(setq vertico-posframe-min-width 150)
|
|
(setq vertico-posframe-min-height 30)
|
|
(vertico-posframe-mode)
|
|
(require 'embark)
|
|
(require 'embark-consult)
|
|
(define-key vertico-map "\M-e" #'embark-act)
|
|
|
|
(require 'marginalia)
|
|
(marginalia-mode t)
|
|
(setq marginalia-annotators
|
|
'(marginalia-annotators-heavy marginalia-annotators-light nil))
|
|
(require 'orderless)
|
|
(setq completion-styles '(orderless basic)
|
|
completion-category-overrides '((file (styles basic partial-completion))))
|
|
(require 'savehist)
|
|
(savehist-mode)
|
|
|
|
(require 'recentf)
|
|
(setq recentf-max-saved-items 1000)
|
|
(setq recentf-max-menu-items 500)
|
|
(recentf-mode t)
|
|
(run-at-time t (* 5 60) 'recentf-save-list)
|
|
|
|
(defun recentf-push-buffers-in-frame ()
|
|
(walk-windows
|
|
(lambda (win)
|
|
(let ((bfn (buffer-local-value 'buffer-file-name (window-buffer win))))
|
|
(and bfn (recentf-add-file bfn))))))
|
|
(add-to-list 'window-configuration-change-hook 'recentf-push-buffers-in-frame)
|
|
|
|
(defun recentf-add-dired-directory ()
|
|
(when (and (stringp dired-directory)
|
|
(equal "" (file-name-nondirectory dired-directory)))
|
|
(recentf-add-file dired-directory)))
|
|
(add-hook 'dired-mode-hook 'recentf-add-dired-directory)
|
|
|
|
;; Magic advice to rename entries in recentf when moving files in
|
|
;; dired.
|
|
(defun rjs/recentf-rename-notify (oldname newname &rest args)
|
|
(if (file-directory-p newname)
|
|
(rjs/recentf-rename-directory oldname newname)
|
|
(rjs/recentf-rename-file oldname newname)))
|
|
|
|
(defun rjs/recentf-rename-file (oldname newname)
|
|
(setq recentf-list
|
|
(mapcar (lambda (name)
|
|
(if (string-equal name oldname)
|
|
newname
|
|
name))
|
|
recentf-list)))
|
|
|
|
(defun rjs/recentf-rename-directory (oldname newname)
|
|
;; oldname, newname and all entries of recentf-list should already
|
|
;; be absolute and normalised so I think this can just test whether
|
|
;; oldname is a prefix of the element.
|
|
(setq recentf-list
|
|
(mapcar (lambda (name)
|
|
(if (string-prefix-p oldname name)
|
|
(concat newname (substring name (length oldname)))
|
|
name))
|
|
recentf-list)))
|
|
|
|
;; (advice-add 'dired-rename-file :after #'rjs/recentf-rename-notify)
|
|
|
|
(require 'smartparens)
|
|
(smartparens-global-mode +1)
|
|
(show-paren-mode +1)
|
|
(sp-pair "'" nil :actions :rem)
|
|
|
|
(require 'vterm)
|
|
(setq vterm-shell "/bin/fish")
|
|
(setq vterm-timer-delay 0.01)
|
|
(setq vterm-buffer-name-string "VTerm - %s")
|
|
(setq vterm-max-scrollback 100000)
|
|
|
|
(add-hook 'vterm-mode-hook
|
|
(lambda () (setq global-hl-line-mode nil))
|
|
(evil-define-key 'normal vterm-mode-map (kbd "(") 'vterm-previous-prompt)
|
|
(evil-define-key 'normal vterm-mode-map (kbd ")") 'vterm-next-prompt))
|
|
|
|
(require 'find-file-in-project)
|
|
(setq ffip-use-rust-fd 't)
|
|
|
|
(require 'evil-goggles)
|
|
(evil-goggles-mode)
|
|
(setq evil-goggles-duration 0.075)
|
|
(setq evil-goggles-pulse t)
|
|
(setq evil-goggles-async-duration 0.55)
|
|
|
|
(modify-all-frames-parameters
|
|
'((right-divider-width . 5)
|
|
(internal-border-width . 10)))
|
|
;; (dolist (face '(window-divider
|
|
;; window-divider-first-pixel
|
|
;; window-divider-last-pixel))
|
|
;; (face-spec-reset-face face)
|
|
;; (set-face-foreground face "#333"))
|
|
;; (set-face-background 'fringe (face-attribute 'default :background))
|
|
|
|
(require 'corfu)
|
|
(global-corfu-mode)
|
|
(setq corfu-auto t)
|
|
(setq corfu-scroll-margin 10)
|
|
(setq corfu-preselect-first nil)
|
|
(setq corfu-preview-current t)
|
|
(setq corfu-echo-documentation t)
|
|
(setq corfu-quit-no-match t)
|
|
(setq corfu-auto-prefix 1)
|
|
(setq corfu-auto-delay 0)
|
|
(setq corfu-max-width 100
|
|
corfu-min-width 50)
|
|
(require 'kind-icon)
|
|
(setq kind-icon-default-face 'corfu-default)
|
|
(add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter)
|
|
|
|
(require 'all-the-icons-completion)
|
|
(all-the-icons-completion-mode)
|
|
(add-hook 'marginalia-mode-hook #'all-the-icons-completion-marginalia-setup)
|
|
|
|
(require 'ligature)
|
|
(global-ligature-mode)
|
|
(ligature-set-ligatures 'prog-mode '("|||>" "<|||" "<==>" "<!--" "####" "~~>" "***" "||=" "||>"
|
|
":::" "::=" "=:=" "===" "==>" "=!=" "=>>" "=<<" "=/=" "!=="
|
|
"!!." ">=>" ">>=" ">>>" ">>-" ">->" "->>" "-->" "---" "-<<"
|
|
"<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->"
|
|
"<--" "<-<" "<<=" "<<-" "<<<" "<+>" "</>" "###" "#_(" "..<"
|
|
"..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~="
|
|
"~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|"
|
|
"[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:"
|
|
">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:"
|
|
"<$" "<=" "<>" "<-" "<<" "<+" "</" "#{" "#[" "#:" "#=" "#!"
|
|
"##" "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?" "+>" "++" "?:"
|
|
"?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
|
|
"\\\\" "://"))
|
|
|
|
(add-to-list 'completion-at-point-functions #'cape-file)
|
|
|
|
(define-key corfu-map (kbd "M-d") #'corfu-doc-toggle)
|
|
(define-key corfu-map (kbd "M-p") #'corfu-doc-scroll-down)
|
|
(define-key corfu-map (kbd "M-n") #'corfu-doc-scroll-up)
|
|
|
|
(require 'lsp)
|
|
(require 'consult)
|
|
;; (require 'consult-lsp)
|
|
;; (require 'dap-mode)
|
|
;; (require 'dap-netcore)
|
|
;; (require 'dap-gdb-lldb)
|
|
;; (setq dap-print-io t)
|
|
|
|
(require 'eglot)
|
|
(require 'eglot-fsharp)
|
|
(require 'consult-eglot)
|
|
|
|
(defun joe/compile-run () (interactive) (compile "make run"))
|
|
(defun joe/compile-comp () (interactive) (compile "make"))
|
|
|
|
;; (require 'tree-sitter)
|
|
;; (require 'tree-sitter-langs)
|
|
;; (require 'evil-textobj-tree-sitter)
|
|
;; (define-key evil-outer-text-objects-map "f" (evil-textobj-tree-sitter-get-textobj "function.outer"))
|
|
;; (define-key evil-inner-text-objects-map "f" (evil-textobj-tree-sitter-get-textobj "function.inner"))
|
|
;; (define-key evil-normal-state-map (kbd "]f") (lambda ()
|
|
;; (interactive)
|
|
;; (evil-textobj-tree-sitter-goto-textobj "function.outer")))
|
|
;; (define-key evil-normal-state-map (kbd "[f") (lambda ()
|
|
;; (interactive)
|
|
;; (evil-textobj-tree-sitter-goto-textobj "function.outer" t)))
|
|
(setq display-buffer-alist
|
|
`((,(rx bos
|
|
(| (literal "*compilation")
|
|
(literal "*shell")
|
|
(literal "*eshell")
|
|
(literal "*Compile-Log")))
|
|
display-buffer-in-direction
|
|
(window . ;reference window
|
|
t) ;either `t' (selected window), `main', `root', or an arbitrary valid window
|
|
(direction .
|
|
below) ;`below' (window) or `bottom' (of frame)
|
|
;absolute (10) or relative (0.3)
|
|
(window-height . 0.33))))
|
|
|
|
;; (dap-register-debug-template "NetCoreDdg Launch (4)"
|
|
;; (list :type "coreclr"
|
|
;; :request "launch"
|
|
;; :mode "launch"
|
|
;; :name "NetCoreDbg Launch"
|
|
;; :cwd nil
|
|
;; :dap-compilation "dotnet build"
|
|
;; :program "${workspaceFolder}/bin/Debug/net6.0/${workspaceFolderBasename}"))
|
|
;; (dap-register-debug-provider
|
|
;; "coreclr"
|
|
;; 'dap-netcore--populate-args)
|
|
;; (add-to-list 'load-path (expand-file-name "~/.emacs.vanilla/elpa/aweshell/"))
|
|
;; (require 'aweshell)
|
|
;; (require 'fish-completion)
|
|
;; (global-fish-completion-mode)
|
|
;; (setq evil-collection-company-use-tng nil)
|
|
|
|
;; (require 'slime)
|
|
;; (setq inferior-lisp-program "/usr/bin/sbcl")
|
|
|
|
;; (add-hook 'slime-mode-hook
|
|
;; (lambda ()
|
|
;; ;; (setq global-hl-line-mode nil)
|
|
;; (evil-define-key 'normal slime-repl-mode-map (kbd "(") 'slime-repl-previous-prompt)
|
|
;; (evil-define-key 'normal slime-repl-mode-map (kbd ")") 'slime-repl-next-prompt)
|
|
;; (evil-define-key 'normal slime-repl-mode-map (kbd "C-j") 'evil-window-down)
|
|
;; (evil-define-key 'normal slime-repl-mode-map (kbd "C-k") 'evil-window-up)))
|
|
;; (setq slime-contribs '(slime-fancy slime-company))
|
|
|
|
;; (require 'eglot)
|
|
;; (require 'eglot-fsharp)
|
|
;; (require 'consult-eglot)
|
|
|
|
;; TODO: Packages to check out
|
|
;; expand-region
|
|
;; projectile
|
|
;; Hydra (we can use it for some of the ideas I've had about repeating and arranging stuff)
|
|
;; CTRLF (figure out if it does anything interesting)
|
|
;; exec-path-from-shell
|
|
;; markdown-preview-mode
|
|
;; markdown-mode
|