From ddecf80964d54478926aad8096e5f18aa6e57555 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sat, 28 Jan 2023 17:40:17 -0700 Subject: emacs: Tidy up/organize config --- .config/emacs/.gitignore | 11 +- .config/emacs/go-template-mode | 1 + .config/emacs/init.el | 362 +++++++++++++++++++++-------------------- .config/symlinks | 1 - 4 files changed, 193 insertions(+), 182 deletions(-) create mode 160000 .config/emacs/go-template-mode diff --git a/.config/emacs/.gitignore b/.config/emacs/.gitignore index ef4ec20..4e1b9c1 100644 --- a/.config/emacs/.gitignore +++ b/.config/emacs/.gitignore @@ -1,9 +1,2 @@ -auto-save-list/* -el-get/* -elmo/* -elpa/* -image-dired/* -server/* -session.* -tramp -url/* +/tramp +/games/ diff --git a/.config/emacs/go-template-mode b/.config/emacs/go-template-mode new file mode 160000 index 0000000..dcd1203 --- /dev/null +++ b/.config/emacs/go-template-mode @@ -0,0 +1 @@ +Subproject commit dcd12037308446179f26f7d2ab2c034a1e995d2e diff --git a/.config/emacs/init.el b/.config/emacs/init.el index ef6d542..2834faf 100644 --- a/.config/emacs/init.el +++ b/.config/emacs/init.el @@ -4,7 +4,7 @@ ;; With some differences in package.el initialization it should work with Emacs 24.4(+?). ;; Without (advice-add) it should work in older versions of Emacs 24. -;;;; Use XDG-ish locations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;; Use XDG-ish locations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (let ((xdg-cache-home (file-name-as-directory (or (getenv "XDG_CACHE_HOME") "~/.cache"))) (xdg-data-home (file-name-as-directory (or (getenv "XDG_DATA_HOME") "~/.local/share")))) (setq @@ -24,13 +24,13 @@ (setq custom-file (concat user-emacs-directory "custom.el")) (load custom-file 'noerror) -;;;; The basics that I can't use Emacs without ;;;;;;;;;;;;;;;;;;;;;;; +;;;; The basics that I can't use Emacs without ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (show-paren-mode 1) (column-number-mode 1) (line-number-mode 1) (ido-mode 1) (unless (daemonp) (server-mode 1)) -(when (require 'whitespace nil t) +(when (require 'whitespace) (setq whitespace-style '( tab-mark space-mark @@ -45,7 +45,8 @@ )) -;;;; Early settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;; Early settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; This isn't particularly important, but set it before doing a whole ;; lot (loading packages), so there isn't a weird change in text size. (set-face-attribute 'default nil @@ -53,9 +54,12 @@ :height 80 ;:weight 'semi-bold ) +(when (fboundp 'tool-bar-mode) (tool-bar-mode -1)) +(when (fboundp 'scroll-bar-mode) (scroll-bar-mode -1)) +(setq inhibit-startup-screen t) -;;;; Package management ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;; Package management ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; package.el (when (require 'package) @@ -87,7 +91,7 @@ (setq use-package-always-ensure t)) (require 'bind-key) -;; Themes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Themes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (use-package modus-themes :config (progn ;; Modus makes MMM regions almost impossible to see @@ -109,7 +113,7 @@ (modus-themes-load-vivendi) )) -;; Minor modes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Minor modes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (use-package editorconfig :config (progn (editorconfig-mode 1) @@ -145,7 +149,7 @@ (apply 'smart-tabs-insinuate (mapcar 'car smart-tabs-insinuate-alist)))) -;; Major modes (non-HTML-related) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Major modes (non-HTML-related) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (use-package bats-mode :mode "\\.bats\\'") (use-package bazel :mode (((rx "/" (or "BUILD" "BUILD.bazel") eos) . bazel-build-mode) @@ -162,6 +166,11 @@ :mode "Dockerfile\\(?:\\..*\\)?\\'" :commands (dockerfile-build-buffer dockerfile-build-no-cache-buffer)) +(use-package erc + :config (add-hook 'erc-mode-hook + (lambda () + (define-key erc-mode-map (kbd "C-c C-u") 'erc-cmd-QUERY) + ))) (use-package glsl-mode :mode ("\\.vert\\'" "\\.frag\\'" "\\.geom\\'" "\\.glsl\\'")) (use-package go-mode :mode ("\\.go\\'" "go\\.mod")) (use-package graphql-mode :mode ("\\.graphql\\'" "\\.gql\\'")) @@ -174,6 +183,16 @@ (use-package jq-mode :mode "\\.jq\\'" :interpreter "jq") +(use-package js + :interpreter (("node" . js-mode) + ("nodejs" . js-mode) + ("gjs" . js-mode) + ("rhino" . js-mode)) + :config (add-hook 'js-mode-hook + (lambda () + (hs-minor-mode t) + (local-set-key [C-tab] 'hs-toggle-hiding) + ))) (use-package lua-mode :mode "\\.lua\\'" :interpreter "lua") @@ -181,6 +200,23 @@ (use-package meson-mode :mode "/meson\\(\\.build\\|_options\\.txt\\)\\'") (use-package nginx-mode :mode ("nginx\\.conf\\'" "/nginx/.+\\.conf\\'")) (use-package protobuf-mode :mode "\\.proto\\'") +(use-package python + :mode ("\\.py[iw]?\\'" . python-mode) + :interpreter ("python[0-9.]*" . python-mode) + :config (add-hook 'python-mode-hook + (lambda () + (hs-minor-mode t) + (local-set-key [C-tab] 'hs-toggle-hiding) + ))) +(use-package ruby-mode + :mode "\\(?:\\.\\(?:rbw?\\|ru\\|rake\\|thor\\|jbuilder\\|rabl\\|gemspec\\|podspec\\)\\|/\\(?:Gem\\|Rake\\|Cap\\|Thor\\|Puppet\\|Berks\\|Brew\\|Vagrant\\|Guard\\|Pod\\)file\\)\\'" + :interpreter ("ruby" "rbx" "jruby" "ruby1.9" "ruby1.8") + :config (add-hook 'ruby-mode-hook + (lambda () + (set (make-local-variable 'indent-tabs-mode) t) + (set (make-local-variable 'ruby-indent-level) 4) + (set (make-local-variable 'tab-width) 4) + ))) (use-package terraform-mode :mode "\\.tf\\(vars\\)?\\'") (use-package yaml-mode :mode "\\.\\(e?ya?\\|ra\\)ml\\'" @@ -211,7 +247,16 @@ (use-package typescript-mode :mode "\\.tsx?\\'") (use-package web-mode :mode ("\\.html\\'" - "\\.vue\\'")) + "\\.vue\\'") + :config (add-hook 'web-mode-hook + (lambda () + (setq web-mode-enable-auto-closing nil) + (setq web-mode-enable-auto-pairing nil) + (setq web-mode-enable-auto-opening nil) + (setq web-mode-enable-auto-quoting nil) + (setq web-mode-enable-auto-expanding nil) + (setq web-mode-enable-auto-indentation nil) + ))) (use-package mmm-mode :load mmm-auto :config (progn @@ -244,14 +289,144 @@ 'wl-draft-send 'wl-draft-kill 'mail-send-hook) - (setq mail-user-agent 'wl-user-agent)))) + (setq mail-user-agent 'wl-user-agent) + ;; Use mailcrypt to encrypt/decrypt email + (when (require 'mailcrypt nil t) + (mc-setversion "gpg") + (add-hook 'wl-summary-mode-hook 'mc-install-read-mode) + (add-hook 'wl-mail-setup-hook 'mc-install-write-mode) + (defun mc-wl-verify-signature () + (interactive) + (save-window-excursion + (wl-summary-jump-to-current-message) + (mc-verify))) + (defun mc-wl-decrypt-message () + (interactive) + (save-window-excursion + (wl-summary-jump-to-current-message) + (let ((inhibit-read-only t)) + (mc-decrypt)))) + (eval-after-load "mailcrypt" + '(setq mc-modes-alist + (append + (quote + ((wl-draft-mode (encrypt . mc-encrypt-message) + (sign . mc-sign-message)) + (wl-summary-mode (decrypt . mc-wl-decrypt-message) + (verify . mc-wl-verify-signature)))) + mc-modes-alist)))) + ))) -;; Misc. crap +;; Non-built-in modes that aren't available with (use-package) ;;;;;;;;;;;;;;;;; + +(eval-when-compile + (add-to-list 'load-path (concat user-emacs-directory "go-template-mode")) + (require 'go-template-mode)) + +;; http://www.emacswiki.org/emacs/XModMapMode +(when (not (fboundp 'xmodmap-mode)) + (define-generic-mode 'xmodmap-mode + '(?!) + '("add" "clear" "keycode" "keysym" "pointer" "remove") + nil + '("[xX]modmap\\(rc\\)?\\'") + nil + "Simple mode for xmodmap files.")) + + +;; Config for built-in modes that are not exposed as ELPA :core packages ;;;;;;; + +(add-hook 'text-mode-hook 'turn-on-auto-fill) + +(add-hook 'lisp-mode-hook + (lambda () + (set (make-local-variable 'indent-tabs-mode) nil) + )) + +(add-hook 'emacs-lisp-mode-hook + (lambda () + (set (make-local-variable 'indent-tabs-mode) nil) + )) + +(eval-after-load "term" + '(progn + ;; Better buffer names ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; + ;; Ideally, figuring this out should be done by uniquify, but I + ;; haven't determined how to get uniquify to think that it manages the + ;; term buffer. + (defun term-get-short-cwd () + ;; local base=$PWD + ;; local suffix='' + ;; # The regex here is a list of directory names + ;; # that aren't really helpful, and that the + ;; # parent directory should be included also. + ;; if [[ $base =~ (/(src|pkg|doc|pkg-libre|src-libre|trunk|tags|branches))*$ ]]; then + ;; suffix=$BASH_REMATCH + ;; base=${base%$suffix} + ;; fi + ;; base=${base##*/} + ;; echo ${base}${suffix} + (directory-file-name default-directory)) + (defun term-handle-ansi-terminal-messages--uniquify (args) + (rename-buffer (concat + (replace-regexp-in-string "<.*>$" "" (buffer-name)) + "<" + (term-get-short-cwd) + ">") + t)) + (advice-add 'term-handle-ansi-terminal-messages :after + #'term-handle-ansi-terminal-messages--uniquify) + ;; Mode settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (add-hook 'term-mode-hook + (lambda () + (auto-fill-mode -1) + (setq term-prompt-regexp "^[^#$%>\n]*[#$%>] *") + (set (make-local-variable 'mouse-yank-at-point) t) + (setq tab-width 8 ) + (setq truncate-lines nil) + (set (make-local-variable 'autopair-dont-activate) t) ;; Don't let autopair break ansi-term + )))) + + +(add-hook 'tex-mode-hook + (lambda () + (set (make-local-variable 'tab-always-indent) nil) + (set (make-local-variable 'indent-tabs-mode) t) + + )) + +(eval-after-load "sh-script" + '(progn + ;; Fix indentation ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (defun sh-smie-sh-rules--fix (args) + "Replace :after \"then\" with :after \"if\" because Emacs 24 +sh-script.el is broken." + (if (equal args (list :after "then")) + (list :after "if") + args)) + (advice-add 'sh-smie-sh-rules :filter-args + #'sh-smie-sh-rules--fix) + ;; Mode settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (add-hook 'sh-mode-hook + (lambda () + (sh-electric-here-document-mode 0) + )))) + +(add-hook 'outline-minor-mode-hook + (lambda () + (define-key outline-minor-mode-map [C-tab] 'outline-cycle))) + +(add-to-list 'auto-mode-alist '("PKGBUILD" . sh-mode)) +(add-to-list 'auto-mode-alist '("SRCBUILD" . sh-mode)) +(add-to-list 'auto-mode-alist '("\\.mak\\'" . makefile-gmake-mode)) +(add-to-list 'auto-mode-alist '("\\.jad\\'" . java-mode)) +(add-to-list 'auto-mode-alist '("\\.schema\\'" . js-mode)) + + +;; Misc. crap ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(when (fboundp 'tool-bar-mode) (tool-bar-mode -1)) -(when (fboundp 'scroll-bar-mode) (scroll-bar-mode -1)) -(setq inhibit-startup-screen t) (setq-default truncate-lines t) (defun align-regexp--use-spaces (orig-fun &rest args) @@ -261,43 +436,6 @@ (advice-add 'align-regexp :around #'align-regexp--use-spaces) -(defun sh-smie-sh-rules--fix (args) - "Replace :after \"then\" with :after \"if\" because Emacs 24 -sh-script.el is broken." - (if (equal args (list :after "then")) - (list :after "if") - args)) -(advice-add 'sh-smie-sh-rules :filter-args - #'sh-smie-sh-rules--fix) - -;; Ideally, figuring this out should be done by uniquify, but I -;; haven't determined how to get uniquify to think that it manages the -;; term buffer. -(defun term-get-short-cwd () - ;; local base=$PWD - ;; local suffix='' - ;; # The regex here is a list of directory names - ;; # that aren't really helpful, and that the - ;; # parent directory should be included also. - ;; if [[ $base =~ (/(src|pkg|doc|pkg-libre|src-libre|trunk|tags|branches))*$ ]]; then - ;; suffix=$BASH_REMATCH - ;; base=${base%$suffix} - ;; fi - ;; base=${base##*/} - ;; echo ${base}${suffix} - (directory-file-name default-directory)) -(defun term-handle-ansi-terminal-messages--uniquify (args) - (rename-buffer (concat - (replace-regexp-in-string "<.*>$" "" (buffer-name)) - "<" - (term-get-short-cwd) - ">") - t)) -(advice-add 'term-handle-ansi-terminal-messages :after - #'term-handle-ansi-terminal-messages--uniquify) - - - ;; Make the mouse work in an xterm (when (fboundp 'xterm-mouse-mode) (xterm-mouse-mode 1) @@ -310,33 +448,6 @@ sh-script.el is broken." ;; customize doesn't correctly set this. (setq tramp-use-ssh-controlmaster-options nil) -;; Use mailcrypt to encrypt/decrypt email -(when (require 'mailcrypt nil t) - (mc-setversion "gpg") - (add-hook 'wl-summary-mode-hook 'mc-install-read-mode) - (add-hook 'wl-mail-setup-hook 'mc-install-write-mode) - (defun mc-wl-verify-signature () - (interactive) - (save-window-excursion - (wl-summary-jump-to-current-message) - (mc-verify))) - (defun mc-wl-decrypt-message () - (interactive) - (save-window-excursion - (wl-summary-jump-to-current-message) - (let ((inhibit-read-only t)) - (mc-decrypt)))) - (eval-after-load "mailcrypt" - '(setq mc-modes-alist - (append - (quote - ((wl-draft-mode (encrypt . mc-encrypt-message) - (sign . mc-sign-message)) - (wl-summary-mode (decrypt . mc-wl-decrypt-message) - (verify . mc-wl-verify-signature)))) - mc-modes-alist))) - ) - ;; Indent settings (setq-default indent-tabs-mode t @@ -378,100 +489,7 @@ sh-script.el is broken." (smerge-mode 1)))) (add-hook 'find-file-hook 'try-smerge-mode t) -;; http://www.emacswiki.org/emacs/XModMapMode -(when (not (fboundp 'xmodmap-mode)) - (define-generic-mode 'xmodmap-mode - '(?!) - '("add" "clear" "keycode" "keysym" "pointer" "remove") - nil - '("[xX]modmap\\(rc\\)?\\'") - nil - "Simple mode for xmodmap files.")) - - -;; All my weird mode-specific settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(add-hook 'text-mode-hook 'turn-on-auto-fill) - -(add-hook 'lisp-mode-hook - (lambda () - (set (make-local-variable 'indent-tabs-mode) nil) - )) - -(add-hook 'emacs-lisp-mode-hook - (lambda () - (set (make-local-variable 'indent-tabs-mode) nil) - )) - -(add-hook 'term-mode-hook - (lambda () - (auto-fill-mode -1) - (setq term-prompt-regexp "^[^#$%>\n]*[#$%>] *") - (set (make-local-variable 'mouse-yank-at-point) t) - (setq tab-width 8 ) - (setq truncate-lines nil) - (set (make-local-variable 'autopair-dont-activate) t) ;; Don't let autopair break ansi-term - )) - -(add-hook 'ruby-mode-hook - (lambda () - (set (make-local-variable 'indent-tabs-mode) t) - (set (make-local-variable 'ruby-indent-level) 4) - (set (make-local-variable 'tab-width) 4) - )) - -(add-hook 'tex-mode-hook - (lambda () - (set (make-local-variable 'tab-always-indent) nil) - (set (make-local-variable 'indent-tabs-mode) t) - )) - -(add-hook 'sh-mode-hook - (lambda () - (sh-electric-here-document-mode 0) - )) - -(add-hook 'erc-mode-hook - (lambda () - (define-key erc-mode-map (kbd "C-c C-u") 'erc-cmd-QUERY) - )) - -(add-hook 'js-mode-hook - (lambda () - (hs-minor-mode t) - (local-set-key [C-tab] 'hs-toggle-hiding) - )) - -(add-hook 'python-mode-hook - (lambda () - (hs-minor-mode t) - (local-set-key [C-tab] 'hs-toggle-hiding) - )) - -(add-hook 'outline-minor-mode-hook - (lambda () - (define-key outline-minor-mode-map [C-tab] 'outline-cycle))) - -(add-hook 'web-mode-hook - (lambda () - (setq web-mode-enable-auto-closing nil) - (setq web-mode-enable-auto-pairing nil) - (setq web-mode-enable-auto-opening nil) - (setq web-mode-enable-auto-quoting nil) - (setq web-mode-enable-auto-expanding nil) - (setq web-mode-enable-auto-indentation nil) - )) - -(add-to-list 'auto-mode-alist '("PKGBUILD" . sh-mode)) -(add-to-list 'auto-mode-alist '("SRCBUILD" . sh-mode)) -(add-to-list 'auto-mode-alist '("\\.mak\\'" . makefile-gmake-mode)) -(add-to-list 'auto-mode-alist '("\\.jad\\'" . java-mode)) -(add-to-list 'auto-mode-alist '("\\.schema\\'" . js-mode)) - -(eval-when-compile - (add-to-list 'load-path (concat user-emacs-directory "go-template-mode")) - (require 'go-template-mode)) - +;; Interactive commands (defun hex2dec-region (beg end) "Convert the region from hexadecimal to decimal." (interactive "r") diff --git a/.config/symlinks b/.config/symlinks index 550f444..1c3738b 100644 --- a/.config/symlinks +++ b/.config/symlinks @@ -29,7 +29,6 @@ # Directories .config/arduino/ .arduino .config/bazaar/ .bazaar -.config/emacs/ .emacs.d .config/icons/ .icons .config/mozilla/ .mozilla # .config/mplayer/ .mplayer # -- cgit v1.1-4-g5e80