diff options
-rw-r--r-- | emacs/.emacs.d/main.el | 321 |
1 files changed, 0 insertions, 321 deletions
diff --git a/emacs/.emacs.d/main.el b/emacs/.emacs.d/main.el index d07dfe1..f27f51f 100644 --- a/emacs/.emacs.d/main.el +++ b/emacs/.emacs.d/main.el @@ -12,45 +12,36 @@ ;;;; Basics ;;;;; Startup ;; Open Emacs with just a plain window. No graphics or messages, please! -;; #+BEGIN_SRC emacs-lisp (setq inhibit-startup-screen t) (setq gc-cons-threshold 100000000) (add-hook 'after-init-hook (lambda () (setq gc-cons-threshold 800000))) (remove-hook 'find-file-hooks #'vc-refresh-state) -;; #+END_SRC ;; Are we running on Windows via the WSL? -;; #+BEGIN_SRC emacs-lisp (when (file-exists-p "/proc/sys/kernel/osrelease") (with-temp-buffer (insert-file-contents-literally "/proc/sys/kernel/osrelease") (decode-coding-region (point-min) (point-max) 'utf-8 t) (when (string-match "Microsoft$" (buffer-string)) (setq system-type 'gnu/linux/windows)))) -;; #+END_SRC ;;;;; Compatibility -;; #+BEGIN_SRC emacs-lisp (if (version< emacs-version "25.0") (defmacro with-eval-after-load (file &rest body) `(eval-after-load ,file (lambda () ,@body)))) -;; #+END_SRC ;;;;; Scratch buffers ;; I usually use scratch buffers for any sort of text. If I need a ;; programming mode in one, then I’ll just call it manually. I also like ;; the buffer to be empty. -;; #+BEGIN_SRC emacs-lisp (setq initial-scratch-message "" initial-major-mode 'text-mode) -;; #+END_SRC ;;;;; Personal Information -;; #+BEGIN_SRC emacs-lisp (setq user-mail-address "alan@alanpearce.eu" user-full-name "Alan Pearce") ;; #+end_src @@ -59,7 +50,6 @@ ;;;;; Use-package -;; #+BEGIN_SRC emacs-lisp (eval-and-compile (require 'seq) (defun is-nix-emacs () @@ -101,7 +91,6 @@ (setq use-package-always-ensure (not nix-emacs) use-package-always-demand (daemonp) package-enable-at-startup nil) -;; #+END_SRC ;;;;; Helpers @@ -111,10 +100,8 @@ ;; modification and removal, without the boilerplate of an extra function ;; definition. -;; #+BEGIN_SRC emacs-lisp (eval-and-compile (use-package hook-helpers)) -;; #+END_SRC ;;;; Customize ;; I don’t really like using customize for normal configuration. @@ -123,22 +110,17 @@ ;; that it’s not important whether the file exists or not, which is why I ;; pass =:noerror= to =load= -;; #+BEGIN_SRC emacs-lisp (setq custom-file "~/.emacs.d/custom.el") (load custom-file :noerror :nomessage) -;; #+END_SRC ;;;; Styles ;; I prefer an always-visible cursor. Feels less distracting. -;; #+BEGIN_SRC emacs-lisp (when (fboundp #'blink-cursor-mode) (blink-cursor-mode -1)) -;; #+END_SRC ;; Disable all the bars, unless on OSX, in which case, keep the menu bar. -;; #+BEGIN_SRC emacs-lisp (when (and menu-bar-mode (not (eq window-system 'ns))) (menu-bar-mode -1)) (with-eval-after-load 'scroll-bar @@ -147,22 +129,18 @@ (tooltip-mode -1)) (with-eval-after-load 'tool-bar (tool-bar-mode -1)) -;; #+END_SRC ;; Ring the bell sometimes, but not so often -;; #+BEGIN_SRC emacs-lisp (setq ring-bell-function (lambda () (unless (memq this-command '(isearch-abort abort-recursive-edit exit-minibuffer keyboard-quit undo-tree-undo)) (ding)))) -;; #+END_SRC ;;;;; Colours ;; White-theme. Sounds like a good idea. -;; #+BEGIN_SRC emacs-lisp (use-package white-theme :if (or window-system (daemonp)) @@ -173,15 +151,12 @@ '(git-gutter-fr:modified ((t (:foreground "#b8b8b8")))) '(git-gutter-fr:deleted ((t (:foreground "#b8b8b8")))) '(font-lock-string-face ((t (:slant normal))))))) -;; #+END_SRC ;; Highlighting quasi-quoted expressions in lisps is quite useful, but I ;; don't need it all the time. I'll keep it around for a while so that I ;; can enable it if needed. -;; #+BEGIN_SRC emacs-lisp (use-package highlight-stages :diminish highlight-stages-mode) -;; #+END_SRC (global-hl-line-mode +1) @@ -189,7 +164,6 @@ ;; When possible, set up fonts. I don’t have any settings here for X11, ;; because I manage those in my [[file:~/projects/dotfiles/tag-xresources/xresources/main][XResources file]]. -;; #+BEGIN_SRC emacs-lisp (when (or (display-graphic-p) (daemonp)) @@ -227,25 +201,20 @@ (ap/set-fonts "Noto Mono" 12 "Sans" 12 nil))))) (add-hook 'first-frame-hook #'ap/set-fonts-according-to-system) -;; #+END_SRC ;; Reduce font decoration. I’m trying to see whether this helps me focus ;; on the right things. -;; #+BEGIN_SRC emacs-lisp (setq font-lock-maximum-decoration '((dired-mode . 1) (t . 1))) -;; #+END_SRC ;; Make symbols prettier. Turns out, in many cases, this is already ;; configured, just not enabled. If using the mac-port version of Emacs, ;; it has it's own, more extensive version. -;; #+BEGIN_SRC emacs-lisp (if (eq window-system 'mac) (if (fboundp 'mac-auto-operator-composition-mode) (mac-auto-operator-composition-mode +1)) (global-prettify-symbols-mode +1)) -;; #+END_SRC ;;;;; Page Breaks @@ -254,7 +223,6 @@ ;; Horizontal) can only be displayed with a different font, which is not ;; correct, at least for Liberation Mono. -;; #+BEGIN_SRC emacs-lisp (use-package page-break-lines :defer 5 :diminish page-break-lines-mode @@ -264,10 +232,8 @@ (set-fontset-font "fontset-default" (cons page-break-lines-char page-break-lines-char) (face-attribute 'default :family))))) -;; #+END_SRC ;;;;; Modeline -;; #+BEGIN_SRC emacs-lisp (column-number-mode -1) (line-number-mode -1) (size-indication-mode t) @@ -276,13 +242,11 @@ (setq frame-title-format (list "Emacs" '(buffer-file-name " — %f") '(dired-directory (" — " dired-directory)))) -;; #+END_SRC ;;;;; Chrome ;; Sometimes I like to hide clutter. Other times, it's useful. -;; #+BEGIN_SRC emacs-lisp (defvar mode-line-default-format mode-line-format) (defvar mode-line-default-hidden nil "Whether to hide the mode line by default.") @@ -334,25 +298,21 @@ (add-hook 'minibuffer-setup-hook #'show-mode-line) (add-hook 'minibuffer-exit-hook #'hide-mode-line) -;; #+END_SRC ;;;;; Highlight Changes ;; Highlight what just changed when I undo, yank, and so on. -;; #+BEGIN_SRC emacs-lisp (use-package volatile-highlights :diminish volatile-highlights-mode :config (progn (volatile-highlights-mode t))) -;; #+END_SRC ;;;;; Renaming major modes ;; Diminishing major modes does not happen in the same manner as minor ;; modes. -;; #+BEGIN_SRC emacs-lisp (unless (version<= emacs-version "24.4") (use-package cyphejor :defer 2 @@ -369,7 +329,6 @@ ("mode" "") ("shell" "sh" :postfix))) (cyphejor-mode 1)))) -;; #+END_SRC ;;;; Environment Variables @@ -382,7 +341,6 @@ ;; On Windows, I like to run Emacs from the system tray menu of VcXsrv. ;; It starts up without an environment in this case as well. -;; #+BEGIN_SRC emacs-lisp (use-package exec-path-from-shell :if (or (eq system-type 'darwin) (eq system-type 'gnu/linux/windows) @@ -391,7 +349,6 @@ :config (progn (setq exec-path-from-shell-arguments '("-l")) (exec-path-from-shell-initialize))) -;; #+END_SRC ;;;;; NixOS sandboxes @@ -399,7 +356,6 @@ ;; development. This package allows using tools from inside sandboxes, ;; and some convenience commands for building packages and launching shells. -;; #+BEGIN_SRC emacs-lisp (use-package nix-sandbox :defines (flycheck-command-wrapper-function flycheck-executable-find) @@ -415,7 +371,6 @@ (if (nix-current-sandbox) (nix-executable-find (nix-current-sandbox) cmd) (executable-find cmd))))))) -;; #+END_SRC ;;;; Keybindings @@ -424,7 +379,6 @@ ;; re-arrangement of modifiers on OSX: Cmd on the outside, then ;; Option/alt, then Control. -;; #+BEGIN_SRC emacs-lisp (when (eq system-type 'darwin) (set-keyboard-coding-system nil) (custom-set-variables @@ -436,9 +390,7 @@ '(mac-right-command-modifier 'left) '(mac-function-modifier 'hyper)) (unbind-key "s-x")) -;; #+END_SRC -;; #+BEGIN_SRC emacs-lisp (unbind-key "<f4>") (bind-key* "<f5>" #'compile) (bind-key* "<f6>" #'kmacro-start-macro-or-insert-counter) @@ -469,14 +421,12 @@ (bind-key* "s-," #'switch-to-dotfiles) (bind-key* "C-x M-x" #'execute-extended-command) (set-register ?z `(file . ,(expand-file-name ".config/zsh/zshrc" "~"))) -;; #+END_SRC ;;;;; Crux ;; I can replace most of the simple helper/wrapper functions in my ;; configuration with crux.el -;; #+BEGIN_SRC emacs-lisp (use-package crux :bind (("M-o" . crux-smart-open-line-above) ("C-o" . crux-smart-open-line) @@ -488,33 +438,27 @@ :init (progn (defalias 'delete-current-buffer-file #'crux-delete-file-and-buffer) (defalias 'rename-current-buffer-file #'crux-rename-file-and-buffer))) -;; #+END_SRC ;;;; Projects -;; #+BEGIN_SRC emacs-lisp (defun switch-to-dotfiles () "Switch to dotfiles project." (interactive) (projectile-switch-project-by-name (car (split-string (shell-command-to-string "ghq list --full-path dotfiles"))))) -;; #+END_SRC ;;;;; The Silver Searcher -;; #+BEGIN_SRC emacs-lisp (use-package ag :defer 30 :config (setq ag-project-root-function #'projectile-project-root)) (use-package wgrep-ag :after ag) -;; #+END_SRC ;;;;; Ripgrep ;; Step over Silver Search, here comes a new challenger. -;; #+BEGIN_SRC emacs-lisp (use-package ripgrep :if (executable-find "rg")) @@ -523,14 +467,12 @@ :if (executable-find "rg") :bind (:map projectile-command-map ("s r" . projectile-ripgrep))) -;; #+END_SRC ;;;;; Projectile ;; Projectile is awesome for working in projects, especially VCS-backed ;; ones. -;; #+BEGIN_SRC emacs-lisp (add-to-list 'byte-compile-not-obsolete-funcs #'projectile-global-mode) (use-package projectile :bind (("s-p" . projectile-switch-project) @@ -600,14 +542,12 @@ "Find rg on project." (call-interactively #'counsel-projectile-rg)) (define-key projectile-mode-map [remap counsel-projectile-ag] #'counsel-projectile-rg))) -;; #+END_SRC ;;;;; vc ;; This is nice for some things that magit doesn’t do, and for those rare ;; occasions that I’m working with something other than git. -;; #+BEGIN_SRC emacs-lisp (use-package vc :defer t :bind (("C-x v C" . vc-resolve-conflicts)) @@ -616,7 +556,6 @@ (setq vc-ignore-dir-regexp (format "\\(%s\\)\\|\\(%s\\)" vc-ignore-dir-regexp tramp-file-name-regexp)))) -;; #+END_SRC ;;;;; git-gutter-fringe @@ -624,7 +563,6 @@ ;; changed. This package colours the fringe. I have it set to the right ;; fringe so it doesn’t interfere with flycheck. -;; #+BEGIN_SRC emacs-lisp (eval-when-compile (require 'fringe-helper)) (use-package git-gutter-fringe :defer 2 @@ -644,14 +582,12 @@ ".....XXX" "....XXXX") (setq git-gutter-fr:side 'right-fringe))) -;; #+END_SRC ;;;;; magit ;; Magit is my favourite way to use git. I use selective staging all the ;; time. Make sure to set it up with a nice =completing-read-function= -;; #+BEGIN_SRC emacs-lisp (use-package magit :defer 5 :commands (magit-status) @@ -661,18 +597,15 @@ global-magit-file-mode nil) (add-to-list 'magit-no-confirm 'safe-with-wip)) :init (add-hook 'magit-mode-hook #'magit-load-config-extensions)) -;; #+END_SRC ;;;;; git-messenger ;; Popup the last commit that changed the line at point. -;; #+BEGIN_SRC emacs-lisp (use-package git-messenger :bind* (("C-x v p" . git-messenger:popup-message)) :config (progn (setq git-messenger:use-magit-popup t))) -;; #+END_SRC ;;;;; git-timemachine @@ -681,10 +614,8 @@ ;; in the past. I often find it useful when I remember writing something ;; a particular way, but it changed later. -;; #+BEGIN_SRC emacs-lisp (use-package git-timemachine :commands git-timemachine) -;; #+END_SRC ;;;;; ghq @@ -692,10 +623,8 @@ ;; seem familiar to anyone who's used =go get= before. [[https://github.com/rcoedo/emacs-ghq][=emacs-ghq=]] is a ;; simple wrapper for it. -;; #+BEGIN_SRC emacs-lisp (use-package ghq :if (executable-find "ghq")) -;; #+END_SRC ;;;; Files @@ -704,16 +633,13 @@ ;; Auto-save everything to a temporary directory, instead of cluttering ;; the filesystem. I don’t want emacs-specific lockfiles, either. -;; #+BEGIN_SRC emacs-lisp (setq auto-save-file-name-transforms `((".*" ,temporary-file-directory t)) create-lockfiles nil) -;; #+END_SRC ;;;;; Backups ;; I like to keep my backups out of regular folders. I tell emacs to use ;; a subfolder of its configuration directory for that. Also, use the ;; trash for deleting on OS X. -;; #+BEGIN_SRC emacs-lisp (let ((backup-dir (expand-file-name "~/.emacs.d/backups/"))) (unless (file-directory-p backup-dir) (make-directory backup-dir)) @@ -727,35 +653,29 @@ (call-process (executable-find "trash") nil 0 nil file)))) -;; #+END_SRC ;;;;; autorevert -;; #+BEGIN_SRC emacs-lisp (use-package autorevert :diminish auto-revert-mode :init (progn (global-auto-revert-mode 1) (setq auto-revert-verbose nil auto-revert-use-notify (not (eq system-type 'darwin))))) -;; #+END_SRC ;;;;; Encoding ;; UTF-8 is usually appropriate. Note that =prefer-coding-system= expects ;; only a coding system, not a coding system and line ending combination. -;; #+BEGIN_SRC emacs-lisp (prefer-coding-system 'utf-8) (setq-default buffer-file-coding-system 'utf-8-auto-unix) -;; #+END_SRC ;;;;; Buffer-file management ;; Ask if I want to create a directory when it doesn’t exist. This is ;; especially nice when starting new projects. -;; #+BEGIN_SRC emacs-lisp (defun my-create-non-existent-directory () "Offer to create non-existent directories of found-file." (let ((parent-directory (file-name-directory buffer-file-name))) @@ -763,12 +683,10 @@ (y-or-n-p (format "Directory `%s' does not exist! Create it? " parent-directory))) (make-directory parent-directory t)))) (add-to-list 'find-file-not-found-functions #'my-create-non-existent-directory) -;; #+END_SRC ;; I often want to rename or delete the file that I’m currently visiting ;; with a buffer. -;; #+BEGIN_SRC emacs-lisp (defun kill-or-delete-this-buffer-dwim (&optional arg) "Kill current buffer. With prefix ARG, delete it." (interactive "P") @@ -780,13 +698,11 @@ (when (equal buf "*HTTP Response*") (other-window 1)) (kill-buffer buf))))) -;; #+END_SRC ;;;;; Whitespace ;; Show bad whitespace, so that I can fix it. -;; #+BEGIN_SRC emacs-lisp (defun show-trailing-whitespace-on () "Show trailing whitespace." (interactive) @@ -797,24 +713,20 @@ (setq-local show-trailing-whitespace nil)) (add-hook 'prog-mode-hook #'show-trailing-whitespace-on) (add-hook 'text-mode-hook #'show-trailing-whitespace-on) -;; #+END_SRC ;;;;; shrink-whitespace ;; DWIM whitespace removal. So I don’t need =M-SPC=, =M-\= and =C-x o= ;; for similar things any more. -;; #+BEGIN_SRC emacs-lisp (use-package shrink-whitespace :bind ("M-SPC" . shrink-whitespace)) -;; #+END_SRC ;;;;; Tramp ;; Tramp is awesome. It makes SSH feel Unix-y. The proxy setup is so ;; that I can sudo on remote machines -;; #+BEGIN_SRC emacs-lisp (use-package tramp :defer 7 :config (progn @@ -835,19 +747,16 @@ (add-to-list 'tramp-default-proxies-alist '(nil "\\`root\\'" (concat "/" tramp-default-method ":%h:"))) (add-to-list 'tramp-default-proxies-alist `(,(regexp-quote (system-name)) nil nil)) (add-to-list 'tramp-default-proxies-alist '("localhost" nil nil)))) -;; #+END_SRC ;;;;; ediff ;; I like a horizonal diff setup, with everything in one frame. -;; #+BEGIN_SRC emacs-lisp (use-package ediff :defer t :config (progn (setq ediff-split-window-function 'split-window-horizontally ediff-window-setup-function 'ediff-setup-windows-plain))) -;; #+END_SRC ;;;; Indentation @@ -855,11 +764,9 @@ ;; tabstops. I’ve recently switched to using two spaces, since elastic ;; tabstops is probably never going to happen. -;; #+BEGIN_SRC emacs-lisp (setq-default tab-width 2 indent-tabs-mode nil) (electric-indent-mode +1) -;; #+END_SRC ;;;;; smart-tabs-mode @@ -867,32 +774,27 @@ ;; Not related to [[smart-tab][=smart-tab=]], this mode indents with tabs and aligns ;; with spaces. Perfect! -;; #+BEGIN_SRC emacs-lisp (use-package smart-tabs-mode :defer 1 :config (progn (smart-tabs-insinuate 'c 'cperl 'python) (define-hook-helper php-mode () (smart-tabs-mode indent-tabs-mode)))) -;; #+END_SRC ;;;;; editorconfig -;; #+BEGIN_SRC emacs-lisp (use-package editorconfig :diminish editorconfig-mode :init (progn (unless (executable-find "editorconfig") (warn "Missing `editorconfig' executable."))) :config (editorconfig-mode 1)) -;; #+END_SRC ;;;;; dtrt-indent-mode ;; Sometimes people use different indentation settings. [[https://github.com/jscheid/dtrt-indent][dtrt-indent]] ;; guesses the correct settings for me. -;; #+BEGIN_SRC emacs-lisp (use-package dtrt-indent :config (progn (define-hook-helper after-change-major-mode () @@ -901,25 +803,21 @@ (dtrt-indent-adapt))) (defadvice dtrt-indent-try-set-offset (after toggle-smart-tabs activate) (smart-tabs-mode (or indent-tabs-mode -1))))) -;; #+END_SRC ;;;; Security ;;;;; password-store ;; This is a frontend to the GPG-powered =pass= program. -;; #+BEGIN_SRC emacs-lisp (use-package password-store :defer 15 :config (progn (setq password-store-password-length 16))) -;; #+END_SRC ;;;; Buffers ;;;;; Ibuffer ;; Ibuffer is quite nice for listing all buffers. -;; #+BEGIN_SRC emacs-lisp (use-package ibuffer :bind (("C-x C-b" . ibuffer)) :config (progn @@ -950,32 +848,26 @@ (mode 16 16 :left :elide) " " filename-and-process))))) -;; #+END_SRC ;;;;; Relative Buffer names -;; #+BEGIN_SRC emacs-lisp (use-package relative-buffers :defer 15 :config (progn (global-relative-buffers-mode))) -;; #+END_SRC ;;;;; Narrowing ;; Enable it without prompting -;; #+BEGIN_SRC emacs-lisp (put 'narrow-to-defun 'disabled nil) (put 'narrow-to-page 'disabled nil) (put 'narrow-to-region 'disabled nil) -;; #+END_SRC ;;;;; ace-window ;; I don’t often have many windows open at once, but when I do, ;; =ace-window= is really nice to jump around them in the same way that ;; =ace-jump= or =avy= work. -;; #+BEGIN_SRC emacs-lisp (use-package ace-window :bind (("s-s" . ace-window)) :config (progn @@ -991,14 +883,12 @@ (?, winner-undo) (?. winner-redo)) aw-keys '(?a ?r ?s ?t ?n ?e ?i ?o)))) -;; #+END_SRC ;;;; Windows ;; Scrolling is tricky. I use this setup to help me keep track of the ;; point whilst I’m moving about. -;; #+BEGIN_SRC emacs-lisp (setq scroll-conservatively 100 scroll-margin 1 scroll-preserve-screen-position t @@ -1008,7 +898,6 @@ frame-resize-pixelwise nil) (if (boundp 'ns-pop-up-frames) (setq ns-pop-up-frames nil)) -;; #+END_SRC ;;;;; eyebrowse @@ -1017,7 +906,6 @@ ;; instead. On macOS, super makes a lot of sense, as it's used by most ;; programs to switch between program windows or views. -;; #+BEGIN_SRC emacs-lisp (use-package eyebrowse :config (progn (setq eyebrowse-new-workspace t) @@ -1045,14 +933,12 @@ ("M-8" . eyebrowse-switch-to-window-config-8) ("M-9" . eyebrowse-switch-to-window-config-9)) (eyebrowse-mode +1))) -;; #+END_SRC ;;;; Sessions ;;;;; Desktop ;; Save my Emacs session and restore it on startup. -;; #+BEGIN_SRC emacs-lisp (use-package desktop :ensure nil :config (progn @@ -1066,51 +952,42 @@ (unless (file-directory-p desktop-dirname) (make-directory desktop-dirname)) (desktop-save-mode 1))) -;; #+END_SRC ;;;;; winner ;; Undo, for window-based commands. -;; #+BEGIN_SRC emacs-lisp (use-package winner :config (setq winner-boring-buffers '("*Completions*" "*Help*" "*Apropos*" "*Buffer List*" "*info*" "*Compile-Log*")) :init (progn (winner-mode 1))) -;; #+END_SRC ;;;;; windmove ;; Directional window movement -;; #+BEGIN_SRC emacs-lisp (use-package windmove :bind* (("S-<left>" . windmove-left) ("S-<right>" . windmove-right) ("S-<up>" . windmove-up) ("S-<down>" . windmove-down))) -;; #+END_SRC ;;;; Blogging ;; I have a [[https://alanpearce.uk][blog]] that I publish with hugo. -;; #+BEGIN_SRC emacs-lisp (use-package easy-hugo :config (setq easy-hugo-basedir (car (split-string (shell-command-to-string "ghq list --full-path alanpearce.uk"))) easy-hugo-url "https://alanpearce.uk" easy-hugo-default-ext ".md")) -;; #+END_SRC ;;;; Completion ;; Make built-in completion a bit more intelligent, by adding substring ;; and initial-based completion and ignoring case. -;; #+BEGIN_SRC emacs-lisp (setq completion-styles '(basic initials partial-completion substring) completion-ignore-case t tab-always-indent 'complete) -;; #+END_SRC ;;;;; Company @@ -1118,7 +995,6 @@ ;; auto-complete-mode. I’ve not tried auto-complete-mode as company ;; seems to work perfectly well for me. -;; #+BEGIN_SRC emacs-lisp (use-package company :commands (company-mode) :diminish " C" @@ -1139,28 +1015,22 @@ company-auto-complete-chars '(?\ ?\( ?\) ?.) company-tooltip-align-annotations t company-selection-wrap-around t))) -;; #+END_SRC -;; #+BEGIN_SRC emacs-lisp (use-package company-web :after company) -;; #+END_SRC ;;;; Dates & Times ;;;;; Calendar ;; Weeks start on Monday for me and I prefer ISO-style dates. -;; #+BEGIN_SRC emacs-lisp (use-package calendar :defer 1 :config (progn (setq calendar-week-start-day 1) (calendar-set-date-style 'iso))) -;; #+END_SRC ;; Sometimes I want to insert a date or time into a buffer. -;; #+BEGIN_SRC emacs-lisp (defun insert-date (prefix) "Insert the current date. With PREFIX, use British format. @@ -1179,13 +1049,10 @@ With two prefix arguments, write out the day and month name." ((not prefix) "%Y-%m-%d %H:%M:%S") ((equal prefix '(4)) "%Y-%m-%dT%H:%M:%SZ")))) (insert (format-time-string format)))) -;; #+END_SRC -;; #+BEGIN_SRC emacs-lisp (defun yesterday-time () "Provide the date/time 24 hours before the time now in the format of `current-time'." (timer-relative-time (current-time) -86400)) -;; #+END_SRC ;;;; Directories @@ -1194,7 +1061,6 @@ With two prefix arguments, write out the day and month name." ;; have two dired windows open, assume that I’m going to be ;; copying/moving files between them. -;; #+BEGIN_SRC emacs-lisp (use-package dired :defer 3 :ensure nil @@ -1210,11 +1076,9 @@ With two prefix arguments, write out the day and month name." (when (and (eq system-type 'darwin) (executable-find "gls")) (setq insert-directory-program (executable-find "gls"))) (put 'dired-find-alternate-file 'disabled nil))) -;; #+END_SRC ;; Don’t show uninteresting files in dired listings. -;; #+BEGIN_SRC emacs-lisp (defun turn-on-dired-omit-mode () "Enable dired-omit mode." (interactive) @@ -1231,11 +1095,9 @@ With two prefix arguments, write out the day and month name." dired-bind-jump nil)) :init (progn (add-hook 'dired-mode-hook #'turn-on-dired-omit-mode))) -;; #+END_SRC ;; Expand subfolders like a tree inside the parent -;; #+BEGIN_SRC emacs-lisp (with-eval-after-load 'dired (use-package dired-subtree :functions (dired-subtree--get-ov @@ -1252,18 +1114,15 @@ With two prefix arguments, write out the day and month name." (dired-up-directory)))) (bind-key "^" #'dired-subtree-maybe-up dired-mode-map) (bind-key "i" #'dired-subtree-toggle dired-mode-map)))) -;; #+END_SRC ;;;;; Disk usage ;; Combine dired and du (disk usage). -;; #+BEGIN_SRC emacs-lisp (use-package dired-du :after dired :config (progn (setq dired-du-size-format t))) -;; #+END_SRC ;;;;; Dired-narrow ;; One can already use dired with wildcards to browse a filtered @@ -1272,70 +1131,57 @@ With two prefix arguments, write out the day and month name." ;; to start filtering, =RET= to complete the filter and =g= to refresh ;; the buffer, removing the filter. -;; #+BEGIN_SRC emacs-lisp (with-eval-after-load 'dired (use-package dired-narrow :bind (:map dired-mode-map ("/" . dired-narrow)))) -;; #+END_SRC ;;;; Documentation ;;;;; helpful -;; #+BEGIN_SRC emacs-lisp (use-package helpful) -;; #+END_SRC ;;;;; ehelp ;; ehelp is a less well-known package that’s part of Emacs and slightly ;; improves the normal help commands, mostly by making quitting them easier. -;; #+BEGIN_SRC emacs-lisp (use-package ehelp :bind-keymap ("C-h" . ehelp-map)) -;; #+END_SRC ;;;;; discover-my-major ;; A nicer way to browse keybindings for major modes. -;; #+BEGIN_SRC emacs-lisp (use-package discover-my-major :bind ("<f1>" . discover-my-major)) -;; #+END_SRC ;;;;; which-key ;; Popup keybindings following a prefix automatically. -;; #+BEGIN_SRC emacs-lisp (use-package which-key :diminish which-key-mode :config (progn (which-key-mode 1) (which-key-setup-side-window-right-bottom))) -;; #+END_SRC ;;;;; eldoc ;; Documentation in the echo-area (where the minibuffer is displayed) is ;; rather useful. -;; #+BEGIN_SRC emacs-lisp (use-package eldoc :commands (eldoc-mode) :diminish eldoc-mode :config (progn (setq eldoc-idle-delay 0.1) (eldoc-add-command 'paredit-backward-delete 'paredit-close-round))) -;; #+END_SRC ;;;; Mail ;;;;; Basics -;; #+BEGIN_SRC emacs-lisp (with-eval-after-load "mailcap" (when (eq system-type 'darwin) (mailcap-add-mailcap-entry "application" "pdf" '((viewer . "/usr/bin/qlmanage -p %s") (type . "application/pdf"))))) @@ -1346,11 +1192,9 @@ With two prefix arguments, write out the day and month name." (with-eval-after-load "mml-sec" (setq mml-secure-openpgp-encrypt-to-self t)) -;; #+END_SRC ;;;;; mu -;; #+BEGIN_SRC emacs-lisp (when (executable-find "mu") (add-to-list 'load-path (expand-file-name "../share/emacs/site-lisp/mu4e" @@ -1446,11 +1290,9 @@ With two prefix arguments, write out the day and month name." ;; try to emulate some of the eww key-bindings (local-set-key (kbd "<tab>") 'shr-next-link) (local-set-key (kbd "<backtab>") 'shr-previous-link))))) -;; #+END_SRC ;;;; Misc -;; #+BEGIN_SRC emacs-lisp (defvar *init-file* (file-truename user-init-file) "Where the Emacs init file really is, passing through symlinks.") @@ -1498,11 +1340,9 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (bind-key* "M-!" #'shell-execute) (bind-key* "C-x r M-w" #'copy-rectangle) -;; #+END_SRC ;;;;; Auxillary Configuration -;; #+BEGIN_SRC emacs-lisp (require 'pinentry) (defvar have-private-key @@ -1561,7 +1401,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (run-at-time nil nil (lambda () (run-hooks 'first-frame-hook)))) (add-hook 'first-frame-hook #'load-private-data) -;; #+END_SRC ;;;; Minibuffer @@ -1569,30 +1408,23 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ;; Fortunately, this is possible. Of course, I need to know how many ;; minibuffers there are on the stack. -;; #+BEGIN_SRC emacs-lisp (setq enable-recursive-minibuffers t) (minibuffer-depth-indicate-mode t) -;; #+END_SRC ;; This avoids some issue with the minibuffer and the point being behind ;; the prompt. I don’t remember what exactly. -;; #+BEGIN_SRC emacs-lisp (setq minibuffer-prompt-properties '(read-only t point-entered minibuffer-avoid-prompt face minibuffer-prompt)) -;; #+END_SRC ;; Occasionally, I exit emacs. I should probably reduce the frequency of this. -;; #+BEGIN_SRC emacs-lisp (if (daemonp) (defalias 'exit-emacs #'delete-frame) (defalias 'exit-emacs #'save-buffers-kill-emacs)) -;; #+END_SRC ;;;;; swiper/ivy ;; Ivy is the new kid on the completion block. It seems to be a strong ;; replacement for helm so far. -;; #+BEGIN_SRC emacs-lisp (use-package swiper :bind (("C-s" . swiper) ("C-r" . swiper) @@ -1608,11 +1440,9 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (ivy--reset-state ivy-last)) "kill"))) (add-to-list 'ivy-initial-inputs-alist '(counsel-M-x . "")))) -;; #+END_SRC ;;;;; counsel -;; #+BEGIN_SRC emacs-lisp (use-package counsel :config (progn (bind-key "M-x" #'counsel-M-x) @@ -1630,7 +1460,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (message "File not writable %s" buffer-file-name) (find-alternate-file (concat "/sudo::" buffer-file-name)))) (setq counsel-rg-base-command "rg -i --no-heading --line-number --hidden %s ."))) -;; #+END_SRC ;;;;; smex @@ -1639,7 +1468,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ;; function uses it internally, so I’m keeping it around, even though I ;; don’t use it directly. -;; #+BEGIN_SRC emacs-lisp (use-package smex :defines (smex-key-advice-ignore-menu-bar) :commands (smex @@ -1656,7 +1484,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (setq smex-history-length 100 smex-save-file (concat user-emacs-directory "smex-items")))) -;; #+END_SRC ;;;;; cmd-to-echo @@ -1664,29 +1491,22 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ;; node.js) inside emacs. =cmd-to-echo= seems great for this, as new ;; output pops up in the echo area. -;; #+BEGIN_SRC emacs-lisp (use-package cmd-to-echo :commands (cmd-to-echo) :config (setq cmd-to-echo-add-output-to-process-buffers t)) -;; #+END_SRC ;;;; Modes ;; Setup some modes for systemd files -;; #+BEGIN_SRC emacs-lisp (add-to-list 'auto-mode-alist '("\\.service\\'" . conf-mode)) (add-to-list 'auto-mode-alist '("\\.target\\'" . conf-mode)) (add-to-list 'auto-mode-alist '("\\.socket\\'" . conf-mode)) -;; #+END_SRC ;; =direnv=’s files are basically shell scripts, it’s a nice way to ;; set environment variables for projects. -;; #+BEGIN_SRC emacs-lisp (add-to-list 'auto-mode-alist '("\\.envrc\\'" . sh-mode)) -;; #+END_SRC ;; Some modes that I don’t really customise much, mostly for ;; configuration files. -;; #+BEGIN_SRC emacs-lisp (use-package haskell-mode :mode (("\\.hs\\'" . haskell-mode))) @@ -1742,14 +1562,12 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (define-derived-mode saltstack-mode yaml-mode "Salt") (add-to-list 'auto-mode-alist '("\\.sls\\'" . saltstack-mode)) -;; #+END_SRC ;;;;; ledger ;; I use [[http://ledger-cli.org/][=ledger=]] to manage my finances. It has an Emacs mode, which ;; works really nicely. -;; #+BEGIN_SRC emacs-lisp (use-package ledger-mode :mode ("\\.ledger\\'" . ledger-mode) :functions ledger-report @@ -1785,11 +1603,9 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ("equity" "ledger -f %(ledger-file) equity") ("payee" "ledger -f %(ledger-file) reg @%(payee)") ("account" "ledger -f %(ledger-file) reg %(account)"))))) -;; #+END_SRC ;;;;; Beancount -;; #+BEGIN_SRC emacs-lisp (let ((beancount-dir (car (split-string (shell-command-to-string "ghq list --full-path blais/beancount"))))) (when (and beancount-dir (file-directory-p beancount-dir)) @@ -1801,23 +1617,19 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." :bind (:map beancount-mode-map ("C-c d" . insert-date)) :config (setq beancount-use-ido nil)))) -;; #+END_SRC ;;;;; Markdown -;; #+BEGIN_SRC emacs-lisp (use-package markdown-mode :defer t :config (progn (add-hook 'markdown-mode-hook #'turn-on-auto-fill))) -;; #+END_SRC ;;;;; Outshine ;; Org-ified source code. I think this might work better than ;; lentic-mode, whilst also being more general. -;; #+BEGIN_SRC emacs-lisp (defvar outline-minor-mode-prefix "M-#") (use-package outshine :bind (:map outline-minor-mode-map @@ -1827,13 +1639,11 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (add-hook 'emacs-lisp-mode-hook #'outline-minor-mode) (add-hook 'ledger-mode-hook #'outline-minor-mode) (add-hook 'sh-mode-hook #'outline-minor-mode))) -;; #+END_SRC ;;;;; Org ;; Org is wünderbar. -;; #+BEGIN_SRC emacs-lisp (use-package org :bind (("C-c C-a" . org-agenda-list) ("C-c a" . org-agenda) @@ -1887,7 +1697,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." :after org :config (progn (bind-key "C-x C-s" #'org-edit-src-exit org-src-mode-map))) -;; #+END_SRC ;;;;;;; org-babel @@ -1896,7 +1705,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ;; to have my =ledger= setup in an org file with some graph processing ;; with R or something. -;; #+BEGIN_SRC emacs-lisp (use-package ob-core :defer t :ensure nil @@ -1907,13 +1715,11 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (setq org-src-tab-acts-natively t org-edit-src-content-indentation 0 org-src-preserve-indentation t))) -;; #+END_SRC ;;;;;;; org-journal ;; I can use this to keep a journal. I should use it. -;; #+BEGIN_SRC emacs-lisp (use-package org-journal :bind ("s-j" . org-journal-new-entry) :defer 20 @@ -1932,7 +1738,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." "Show org-journal entry for yesterday" (interactive) (org-journal-read-or-display-entry (yesterday-time))))) -;; #+END_SRC ;;;; Programming @@ -1945,7 +1750,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ;; On-the-fly error checking in programming modes? Yes please. -;; #+BEGIN_SRC emacs-lisp (use-package flycheck :diminish " ✓" :defer 5 @@ -1958,35 +1762,29 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ".XXX....")) (if (executable-find "eslint_d") (setq flycheck-javascript-eslint-executable "eslint_d")))) -;; #+END_SRC ;;;;;; flycheck-pos-tip ;; Show flycheck errors in a little popup, so I don't lose my place -;; #+BEGIN_SRC emacs-lisp (use-package flycheck-pos-tip :after flycheck :config (progn (setq flycheck-display-errors-delay 0.5) (flycheck-pos-tip-mode 1))) -;; #+END_SRC ;;;;;; flycheck-flow -;; #+BEGIN_SRC emacs-lisp (use-package flycheck-flow :after js2-mode :if (executable-find "flow") :config (progn (flycheck-add-next-checker 'javascript-eslint 'javascript-flow))) -;; #+END_SRC ;;;;; golang ;; Go has a few packages to inter-operate with other emacs packages. -;; #+BEGIN_SRC emacs-lisp (use-package company-go :commands company-go :config (progn @@ -2007,13 +1805,11 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (setq go-projectile-switch-gopath 'maybe))) -;; #+END_SRC ;;;;; ggtags ;; A nice completion backend for programming modes. -;; #+BEGIN_SRC emacs-lisp (use-package ggtags :if (executable-find "gtags") :commands turn-on-ggtags-mode @@ -2025,7 +1821,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (interactive) (ggtags-mode 1)) (add-hook 'c-mode-common-hook #'turn-on-ggtags-mode))) -;; #+END_SRC ;;;;; dumb-jump @@ -2033,24 +1828,20 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ;; a project-wide text search and apply heuristics to the results to ;; guess a definition. -;; #+BEGIN_SRC emacs-lisp (use-package dumb-jump :bind (("M-g o" . dumb-jump-go-other-window) ("M-g j" . dumb-jump-go) ("M-g x" . dumb-jump-go-prefer-external) ("M-g z" . dumb-jump-go-prefer-external-other-window)) :config (setq dumb-jump-selector 'ivy)) -;; #+END_SRC ;;;;; imenu-anywhere ;; This is like imenu, but shows functions (or similar top-level ;; entities) across buffers in the same project. Neat! -;; #+BEGIN_SRC emacs-lisp (use-package imenu-anywhere :bind ("C-x C-." . ivy-imenu-anywhere)) -;; #+END_SRC ;;;;; Lisps ;;;;;; All @@ -2058,7 +1849,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ;; Lisp modes don’t seem to have a common ancestor. So I made a custom ;; hook which I trigger in every lispy-mode. -;; #+BEGIN_SRC emacs-lisp (defcustom lisp-mode-common-hook nil "Hook run when entering any Lisp mode." :type 'hook @@ -2070,79 +1860,65 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." lisp-mode-hook clojure-mode-hook) (run-hooks 'lisp-mode-common-hook)) -;; #+END_SRC ;;;;;;; Redshank ;; Lisp syntax allows for really easy refactoring. Redshank gives some ;; operations that aren’t part of paredit, like extracting variables into ;; let bindings. -;; #+BEGIN_SRC emacs-lisp (use-package redshank :diminish redshank-mode :after (paredit) :config (progn (add-hook 'lisp-mode-common-hook #'turn-on-redshank-mode))) -;; #+END_SRC ;;;;;; Emacs Lisp ;; Customise the modeline-display of =emacs-lisp-mode=. Then make sure ;; it runs the common lisp hooks. -;; #+BEGIN_SRC emacs-lisp (add-hook 'emacs-lisp-mode-hook #'eldoc-mode) -;; #+END_SRC ;; Go-to function for elisp. Except it works through the entire Emacs ecosystem. -;; #+BEGIN_SRC emacs-lisp (use-package elisp-slime-nav :commands elisp-slime-nav-mode :diminish elisp-slime-nav-mode :init (progn (add-hook 'emacs-lisp-mode-hook #'elisp-slime-nav-mode))) -;; #+END_SRC ;; Interactive elisp -;; #+BEGIN_SRC emacs-lisp (use-package ielm :defer t :ensure nil :config (progn (define-hook-helper ielm-mode () (run-hooks 'lisp-mode-common-hook)))) -;; #+END_SRC ;;;;;; Scheme & Lisp ;; I don’t work with these as often as I would like -;; #+BEGIN_SRC emacs-lisp (define-hook-helper lisp-mode () (set (make-local-variable 'lisp-indent-function) #'common-lisp-indent-function)) -;; #+END_SRC ;;;;;;; geiser ;; A REPL thing for Scheme. Hopefully I’ll get to use it more in the ;; future. -;; #+BEGIN_SRC emacs-lisp (use-package geiser :commands (geiser-mode geiser run-geiser run-racket)) -;; #+END_SRC ;;;;;;; slime ;; A REPL thing (and more) for Lisp. -;; #+BEGIN_SRC emacs-lisp (use-package slime :commands (slime) :config (progn @@ -2153,11 +1929,9 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (setq common-lisp-hyperspec-root "file://opt/local/share/doc/lisp/HyperSpec-7-0/" inferior-lisp-program (or (executable-find "sbcl") (executable-find "ccl64"))))) -;; #+END_SRC ;;;;;; Clojure -;; #+BEGIN_SRC emacs-lisp (use-package clojure-mode :defer t :init (progn @@ -2172,36 +1946,30 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." :init (progn (define-hook-helper clojure-mode () (clj-refactor-mode 1)))) -;; #+END_SRC ;;;;;;; cider ;; A REPL thing for Clojure -;; #+BEGIN_SRC emacs-lisp (use-package cider :defer t :config (progn (setq nrepl-hide-special-buffers t) (unbind-key "C-c C-f" cider-mode-map) (add-hook 'cider-mode-hook #'eldoc-mode))) -;; #+END_SRC ;;;;; Auto-compile ;; Auto-compile emacs lisp when saving. -;; #+BEGIN_SRC emacs-lisp (use-package auto-compile :defer t :init (add-hook 'emacs-lisp-mode-hook #'auto-compile-on-save-mode)) -;; #+END_SRC ;;;;; cc-mode ;; Although I don’t use C or C++, setting up the mode is helpful because ;; quite a few other modes are derived from it. -;; #+BEGIN_SRC emacs-lisp (use-package cc-mode :defer 5 :config (progn @@ -2210,30 +1978,23 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (other . "k&r")) c-basic-offset 4) (c-set-offset 'case-label '+))) -;; #+END_SRC ;;;;; quickrun ;; It’s nice to be able to quickly evaluate some code. Although I don’t ;; really seem to use it. -;; #+BEGIN_SRC emacs-lisp (use-package quickrun :bind (("C-c C-e" . quickrun))) -;; #+END_SRC ;;;;; Scala ;; Let’s try using Scala. -;; #+BEGIN_SRC emacs-lisp (use-package scala-mode) -;; #+END_SRC ;; And add ensime, an IDE-style environment. -;; #+BEGIN_SRC emacs-lisp (use-package ensime) -;; #+END_SRC ;;;;; Web development @@ -2242,7 +2003,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ;; This mode is really great for editing Javascript. It turns code into ;; an AST internally, so it can work with it almost like a lisp. -;; #+BEGIN_SRC emacs-lisp (use-package js2-mode :mode (("\\.js\\'" . js2-mode)) :interpreter ("node" . js2-mode) @@ -2261,25 +2021,21 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." js2-include-node-externs t js2-highlight-level 1 js2-strict-missing-semi-warning nil))) -;; #+END_SRC ;;;;;;; rjsx-mode ;; A set of advice for js2-jsx-mode to work better with React. -;; #+BEGIN_SRC emacs-lisp (use-package rjsx-mode :after js2-mode :if (fboundp #'js2--struct-put) :mode (("\\.jsx\\'" . rjsx-mode))) -;; #+END_SRC ;;;;;;; js2-refactor ;; Thanks to the AST provided by js2-mode, refactoring is possible. This ;; library implements some refactorings. -;; #+BEGIN_SRC emacs-lisp (use-package js2-refactor :after js2-mode :diminish js2-refactor-mode @@ -2287,14 +2043,12 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (bind-key "C-k" #'js2r-kill js2-mode-map) (add-hook 'js2-mode-hook #'js2-refactor-mode) (js2r-add-keybindings-with-prefix "C-c C-m"))) -;; #+END_SRC ;;;;;;; add-node-modules-path ;; Inside a javascript project, it's common to install tools locally to ;; the project. This will allows emacs to find their executables. -;; #+BEGIN_SRC emacs-lisp (use-package add-node-modules-path :config (progn (define-hook-helper js2-mode () @@ -2303,16 +2057,13 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (setq flycheck-javascript-eslint-executable "eslint")) (when (executable-find "standard") (setq flycheck-javascript-standard-executable "standard"))))) -;; #+END_SRC ;;;;;;; Flow -;; #+BEGIN_SRC emacs-lisp (use-package flow-minor-mode :after js2-mode :config (progn (add-hook 'js2-mode-hook #'flow-minor-enable-automatically))) -;; #+END_SRC ;;;;;;; Indium @@ -2332,19 +2083,16 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ;; ~M-x indium-connect-to-nodejs RET 127.0.0.1 RET PORT RET~ -;; #+BEGIN_SRC emacs-lisp (use-package indium :diminish (indium-interaction-mode . "In") :config (progn (add-hook 'js2-mode-hook #'indium-interaction-mode))) -;; #+END_SRC ;;;;;; tern ;; Tern understands javascript. It adds really clever documented ;; completions, besides other IDE-like things. -;; #+BEGIN_SRC emacs-lisp (use-package tern :diminish tern-mode :if (executable-find "tern") @@ -2358,17 +2106,14 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (with-eval-after-load 'tern (use-package company-tern)) -;; #+END_SRC ;;;;;; json-mode -;; #+BEGIN_SRC emacs-lisp (use-package json-mode :mode (("\\.json\\'" . json-mode) ("\\.sailsrc\\'" . json-mode) ("composer\\.lock\\'" . json-mode) ("\\.tern-project\\'" . json-mode))) -;; #+END_SRC ;;;;;; restclient @@ -2376,7 +2121,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ;; calls. Feels a bit like using =org-babel=. I wonder if there’s an ;; integration between the two yet. -;; #+BEGIN_SRC emacs-lisp (use-package restclient :mode ("\\.api\\'" . restclient-mode) :config (progn @@ -2389,22 +2133,18 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (use-package company-restclient :after (company restclient) :init (add-to-list 'company-backends #'company-restclient t)) -;; #+END_SRC ;;;;;; sgml-mode ;; This is for HTML, since old versions of HTML were derived from SGML. -;; #+BEGIN_SRC emacs-lisp (use-package sgml-mode :defer t :config (setq sgml-basic-offset 2)) -;; #+END_SRC ;;;;;; emmet-mode ;; Emmet is really nice to write HTML quickly. Especially with ;; frameworks that require multiple nested elements to do anything useful. -;; #+BEGIN_SRC emacs-lisp (use-package emmet-mode :commands (emmet-mode) :diminish (emmet-mode . " >") @@ -2414,7 +2154,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (add-hook 'sgml-mode-hook #'emmet-mode) (add-hook 'web-mode-hook #'emmet-mode) (add-hook 'css-mode-hook #'emmet-mode))) -;; #+END_SRC ;;;;;; web-mode @@ -2422,7 +2161,6 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ;; is really nice, because it handles the HTML part the same way in all ;; of them as well. -;; #+BEGIN_SRC emacs-lisp (use-package web-mode :mode (("/views/.*\\.php\\'" . web-mode) ("\\.html\\'" . web-mode) @@ -2439,13 +2177,11 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." web-mode-enable-auto-pairing nil web-mode-enable-auto-quoting nil) (sp-local-pair '(web-mode) "<%" "%>"))) -;; #+END_SRC ;;;;; Live coding ;; Sometimes I might want to show off my emacs usage. -;; #+BEGIN_SRC emacs-lisp (defun live-coding () "Configure display for live coding." (interactive) @@ -2457,22 +2193,18 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (interactive) (ap/set-fonts-according-to-system) (global-command-log-mode -1)) -;; #+END_SRC ;;;;;; command-log-mode -;; #+BEGIN_SRC emacs-lisp (use-package command-log-mode :defines (command-log-mode-key-binding-open-log) :config (progn (setq command-log-mode-key-binding-open-log nil command-log-mode-auto-show t command-log-mode-is-global t))) -;; #+END_SRC ;;;; Spelling -;; #+BEGIN_SRC emacs-lisp (use-package ispell :bind (("<f8>" . ispell-word)) :config (progn @@ -2484,9 +2216,7 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." ((executable-find "hunspell") (setq ispell-program-name "hunspell" ispell-really-aspell nil ispell-really-hunspell t))))) -;; #+END_SRC -;; #+BEGIN_SRC emacs-lisp (use-package flyspell :diminish " ﹏" :config (progn @@ -2532,26 +2262,22 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." (setq-local ispell-extra-args (flyspell-detect-ispell-args))) (add-hook 'text-mode-hook 'fly-text-mode-hook-setup) (add-hook 'prog-mode-hook #'flyspell-prog-mode))) -;; #+END_SRC ;;;;; Style checking ;; [[https://github.com/ValeLint/vale][Vale]] is a linter, but for prose. Neat idea! Salesman is a bad term. -;; #+BEGIN_SRC emacs-lisp (use-package flycheck-vale :if (executable-find "vale") :config (progn (add-to-list 'flycheck-vale-modes 'org-mode) (add-to-list 'flycheck-vale-modes 'org-journal-mode) (flycheck-vale-setup))) -;; #+END_SRC ;;;; Scripting ;; Make a shell-script buffer executable after saving it, if it has a shebang. -;; #+BEGIN_SRC emacs-lisp (add-hook 'after-save-hook #'executable-make-buffer-file-executable-if-script-p) @@ -2562,18 +2288,14 @@ With prefix TO-CURRENT-BUFFER, insert command output into buffer." :config (setq sh-shell-file "/usr/bin/env zsh" sh-indentation 2 sh-basic-offset 2)) -;; #+END_SRC -;; #+BEGIN_SRC emacs-lisp (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on) -;; #+END_SRC ;;;;; eshell ;; I should try to get into the habit of using this more. It’s really ;; nice, when I remember to use it. -;; #+BEGIN_SRC emacs-lisp (use-package eshell :bind ("C-c s" . eshell) :defer 10 @@ -2609,11 +2331,9 @@ Pass optional ARG to `eshell' (which see)." (bind-key "C-c S" #'eshell-goto-current-dir) -;; #+END_SRC ;;;;;; Shells -;; #+BEGIN_SRC emacs-lisp (use-package shell :defer t :ensure nil @@ -2632,26 +2352,22 @@ Pass ARG to `comint-delchar-or-maybe-eof'." (if (null (get-buffer-process (current-buffer))) (kill-buffer) (comint-delchar-or-maybe-eof arg))) -;; #+END_SRC ;;;; Text editing ;; Emacs has an editor within. -;; #+BEGIN_SRC emacs-lisp (put 'upcase-region 'disabled nil) (put 'downcase-region 'disabled nil) (setq sentence-end-double-space t line-move-visual nil) (setq-default truncate-lines nil) -;; #+END_SRC ;;;;; align ;; =Align= is a useful command to line things up, once given some rules. ;; The most important one for me is JSON property alignment. -;; #+BEGIN_SRC emacs-lisp (use-package align :defer 10 :ensure nil @@ -2660,64 +2376,52 @@ Pass ARG to `comint-delchar-or-maybe-eof'." '(colon-key-value (regexp . ":\\(\\s-*\\)") (modes . '(js2-mode)))))) -;; #+END_SRC ;;;;; Clipboard ;; I like to use the clipboard more than the primary selection in X11. -;; #+BEGIN_SRC emacs-lisp (setq select-enable-clipboard t save-interprogram-paste-before-kill t) (if (functionp 'x-cut-buffer-or-selection-value) (setq interprogram-paste-function 'x-cut-buffer-or-selection-value)) (when (boundp 'x-select-request-type) (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))) -;; #+END_SRC ;;;;; Selection ;; I’m quite used to deleting text by selecting it and typing. Emacs has ;; a mode for that. -;; #+BEGIN_SRC emacs-lisp (use-package delsel :config (delete-selection-mode t)) -;; #+END_SRC ;; Sub-word movement is really nice for camel- and Pascal-case -;; #+BEGIN_SRC emacs-lisp (use-package subword :diminish subword-mode :init (global-subword-mode t)) -;; #+END_SRC ;; I find that =zap-up-to-char= normally makes more sense to me than ;; =zap-to-char=. -;; #+BEGIN_SRC emacs-lisp (use-package misc :ensure nil :bind (("M-z" . zap-up-to-char) ("M-Z" . zap-to-char))) -;; #+END_SRC ;; Expanding the region by semantic units was something I quite liked ;; from Sublime Text. As always, there’s a mode for that. -;; #+BEGIN_SRC emacs-lisp (use-package expand-region :bind ("C-M-SPC" . er/expand-region) :config (setq expand-region-fast-keys-enabled nil)) -;; #+END_SRC ;;;;; avy ;; Avy is a really nice way to move around files, like ace-jump-mode, but ;; somehow I prefer it. -;; #+BEGIN_SRC emacs-lisp (use-package avy :defer 5 :bind* (("M-g g" . avy-goto-line) @@ -2729,51 +2433,42 @@ Pass ARG to `comint-delchar-or-maybe-eof'." (avy-setup-default) (setq avy-all-windows nil avy-keys '(?a ?r ?s ?t ?d ?h ?n ?e ?i ?\;)))) -;; #+END_SRC ;;;;;; ace-link ;; Visit any link. Despite the name, this works with avy. -;; #+BEGIN_SRC emacs-lisp (use-package ace-link :after avy :config (progn (ace-link-setup-default))) -;; #+END_SRC ;;;;; goto-chg ;; This is like popping the mark, only it filters to only change areas ;; and doesn’t go back to the same place more than once. -;; #+BEGIN_SRC emacs-lisp (use-package goto-chg :bind ("C-c C-SPC" . goto-last-change)) -;; #+END_SRC ;;;;; beginend ;; In special buffers, I would rather have =M->= and =M-<= goto the ;; logical beginning/end rather than the physical ones. -;; #+BEGIN_SRC emacs-lisp (use-package beginend :config (progn (beginend-setup-all) (seq-do (lambda (modepair) (diminish (cdr modepair))) beginend-modes))) -;; #+END_SRC ;;;;; fontawesome ;; Sometimes I might want to add a font-awesome icon to some text. ;; This package gives me two interfaces to find the icons -;; #+BEGIN_SRC emacs-lisp (use-package fontawesome) -;; #+END_SRC ;;;;; multiple-cursors @@ -2781,7 +2476,6 @@ Pass ARG to `comint-delchar-or-maybe-eof'." ;; cursors was one of my favourite features, so I was really happy when I ;; saw that multiple-cursors was released for Emacs. -;; #+BEGIN_SRC emacs-lisp (use-package multiple-cursors :defer 1 :bind* (("C-." . mc/mark-next-like-this) @@ -2789,14 +2483,12 @@ Pass ARG to `comint-delchar-or-maybe-eof'." ("M-<f3>" . mc/mark-all-like-this-dwim) ("C-<f3>" . mc/mark-more-like-this-extended) ("C-S-L" . mc/edit-lines))) -;; #+END_SRC ;;;;; paredit ;; Balanced parentheses in lisps are nice, but all the refactoring and ;; movement commands are much more interesting. -;; #+BEGIN_SRC emacs-lisp (use-package paredit :diminish "()" :config (progn @@ -2804,7 +2496,6 @@ Pass ARG to `comint-delchar-or-maybe-eof'." (put #'paredit-forward-delete 'delete-selection 'supersede) (put #'paredit-backward-delete 'delete-selection 'supersede) (add-hook 'eval-expression-minibuffer-setup-hook #'enable-paredit-mode))) -;; #+END_SRC ;;;;; smartparens @@ -2812,7 +2503,6 @@ Pass ARG to `comint-delchar-or-maybe-eof'." ;; I didn’t find smartparens’ implementation of paredit style to be as ;; nice as the real version -;; #+BEGIN_SRC emacs-lisp (eval-when-compile (require 'smartparens nil :noerror)) (use-package smartparens-config :ensure smartparens @@ -2838,24 +2528,20 @@ Pass ARG to `comint-delchar-or-maybe-eof'." (define-hook-helper lisp-mode-common () (smartparens-strict-mode -1) (smartparens-mode -1)))) -;; #+END_SRC ;;;;; move-text ;; Transposing lines, made easier. -;; #+BEGIN_SRC emacs-lisp (use-package move-text :config (move-text-default-bindings)) -;; #+END_SRC ;;;;; undo-tree ;; Emacs’ default handling of undo is a bit confusing. Undo-tree makes ;; it much clearer. It’s especially helpful for protoyping and refactoring. -;; #+BEGIN_SRC emacs-lisp (use-package undo-tree :config (progn (global-undo-tree-mode) @@ -2871,14 +2557,11 @@ Pass ARG to `comint-delchar-or-maybe-eof'." (set-marker m nil)) ad-do-it))) :diminish undo-tree-mode) -;; #+END_SRC ;;;;; replace -;; #+BEGIN_SRC emacs-lisp (with-eval-after-load "replace.el" (setq case-replace nil)) -;; #+END_SRC ;;;;; visual-regexp @@ -2886,23 +2569,19 @@ Pass ARG to `comint-delchar-or-maybe-eof'." ;; so this package is pretty useful because it highlights everything in ;; the buffer for me. -;; #+BEGIN_SRC emacs-lisp (use-package visual-regexp :bind (("C-c r" . vr/replace) ("C-c q" . vr/query-replace) ("C-c m" . vr/mc-mark))) -;; #+END_SRC ;;;; End ;; Start a server if possible. A daemon is already a server. -;; #+BEGIN_SRC emacs-lisp (use-package server :defer 2 :if (not (daemonp)) :config (unless (server-running-p server-name) (server-start))) -;; #+END_SRC ;; # Local Variables: ;; # lentic-init: lentic-orgel-org-init |