(defun create-scratch-buffer nil "create a new scratch buffer to work in. (could be *scratch* - *scratchX*)" (interactive) (let ((n 0) bufname) (while (progn (setq bufname (concat "*scratch" (if (= n 0) "" (int-to-string n)) "*")) (setq n (1+ n)) (get-buffer bufname))) (switch-to-buffer (get-buffer-create bufname)) (emacs-lisp-mode))) (defun untabify-buffer () (interactive) (untabify (point-min) (point-max))) (defun indent-buffer () (interactive) (indent-region (point-min) (point-max))) (defun indent-defun () "Indent the current defun." (interactive) (save-restriction (widen) (narrow-to-defun) (indent-buffer))) (defun cleanup-buffer-safe () "Perform a bunch of safe operations on the whitespace content of a buffer. Does not indent buffer, because it is used for a before-save-hook, and that might be bad." (interactive) (untabify-buffer) (delete-trailing-whitespace) (set-buffer-file-coding-system 'utf-8)) (defun cleanup-buffer () "Perform a bunch of operations on the whitespace content of a buffer. Including indent-buffer, which should not be called automatically on save." (interactive) (cleanup-buffer-safe) (indent-buffer)) ;; Borrowed from https://gist.github.com/1415844 ;; Also see http://emacsworld.blogspot.com/2011/12/moving-buffers-between-windows.html (require 'cl) (defun rotate-left (l) (append (cdr l) (list (car l)))) (defun rotate-windows () (interactive) (let ((start-positions (rotate-left (mapcar 'window-start (window-list)))) (buffers (rotate-left (mapcar 'window-buffer (window-list))))) (mapcar* (lambda (window buffer pos) (set-window-buffer window buffer) (set-window-start window pos)) (window-list) buffers start-positions))) ;; TODO: add function to hide function bodies and leave just name and ;; docstring, useful for quick overview of the package. See ;; `hs-make-overlay'