diff --git a/emacs/.emacs.d/init.el b/emacs/.emacs.d/init.el index 42854f0..5db6481 100644 --- a/emacs/.emacs.d/init.el +++ b/emacs/.emacs.d/init.el @@ -167,6 +167,21 @@ This is currently the data directory under the ;; whereabouts I am, so they just take up space. (scroll-bar-mode -1) +;;;; Whitespace: +;; I hate it when trailing whitespace is left around a file. I've been +;; using this for years, and apart from having some trouble working +;; with people who don't pay attention to it, it has worked +;; flawlessly. +(ensure-library destroy-trailing-whitespace + :path "vendor-lisp/destroy-trailing-whitespace") +(require 'destroy-trailing-whitespace) +(global-destroy-trailing-whitespace-mode) + +;; Having a final newline at the end of the file is always a good +;; idea. Some programs just don't work without it and others produce +;; some strange results. Github diffs are an example. +(setq require-final-newline t) + ;;;; Minor modes: ;;;;; Paredit: diff --git a/emacs/.emacs.d/vendor-lisp/destroy-trailing-whitespace/destroy-trailing-whitespace.el b/emacs/.emacs.d/vendor-lisp/destroy-trailing-whitespace/destroy-trailing-whitespace.el new file mode 100644 index 0000000..ed170df --- /dev/null +++ b/emacs/.emacs.d/vendor-lisp/destroy-trailing-whitespace/destroy-trailing-whitespace.el @@ -0,0 +1,66 @@ +;;; destroy-trailing-whitespace.el --- Destroy all trailing whitespace -*- lexical-binding: t; -*- + +;; Copyright (C) 2016 Tom Willemse + +;; Author: Tom Willemse +;; Keywords: convenience + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; This library offers a single mode that will delete all trailing +;; whitespace before saving any file. It tries to be intelligent +;; enough to only do this for modes where trailing whitespace is not +;; meaningful. Currently it only keeps whitespace around in +;; `markdown-mode' since it uses two spaces at the end of a line to +;; signify a line break. +;; +;; To use this mode in all buffers, add the following to your init +;; file: +;; +;; (require 'destroy-trailing-whitespace) +;; (global-destroy-trailing-whitespace-mode) +;; +;; To use this mode in just some buffers add it to your preferred +;; hook. For example, to use it only in `prog-mode' buffers: +;; +;; (require 'destroy-trailing-whitespace) +;; (add-hook 'prog-mode-hook 'destroy-trailing-whitespace-mode) + +;;; Code: + +(defun destroy-trailing-whitespace () + "Delete trailing whitespace everywhere, except in Markdown buffers." + (if (not (eq major-mode 'markdown-mode)) + (delete-trailing-whitespace))) + +;;;###autoload +(define-minor-mode destroy-trailing-whitespace-mode + "Destroy all trailing whitespace before saving the buffer." + :lighter "" + (if destroy-trailing-whitespace-mode + (add-hook 'before-save-hook 'delete-trailing-whitespace nil :local) + (remove-hook 'before-save-hook 'delete-trailing-whitespace :local))) + +;;;###autoload +(define-minor-mode global-destroy-trailing-whitespace-mode + "Destroy all trailing whitespace before saving any open buffer." + :lighter "" :global t + (if global-destroy-trailing-whitespace-mode + (add-hook 'before-save-hook 'destroy-trailing-whitespace) + (remove-hook 'before-save-hook 'destroy-trailing-whitespace))) + +(provide 'destroy-trailing-whitespace) +;;; destroy-trailing-whitespace.el ends here