;;; 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