;;;; reindent.el
;;; a reindenting script to automagically indent files.
;;; Licenced under the GNU GPLv3 or later.
;;; Copyright © 2014, Samuel W. Flint <swflint@flintfam.org>

(require 'find-lisp)

(defun indent-buffer ()
  "Indent Current Buffer"
  (indent-region (point-min) (point-max)))

(defun indent-correctly ()
  "Indent the current buffer, unless the region is active"
  (if (region-active-p)
      (progn
        (indent-region
         (region-beginning)
         (region-end))
        (message "Indented Region."))
    (indent-buffer)
    (message "Indented Buffer.")))

(defun untabify-correctly ()
  "Untabify current buffer, unless the region is active"
  (if (region-active-p)
      (progn
        (untabify (region-beginning) (region-end))
        (message "Untabified Region"))
    (untabify (point-min) (point-max))
    (message "Untabified Buffer")))

(defun indent-driver ()
  (indent-correctly)
  (untabify-correctly)
  (save-buffer))

(defun indent-driver-with-file (file-path)
  (let ((file-buffer (find-file file-path)))
    (with-current-buffer file-buffer
      (indent-driver)
      (save-buffer))
    (kill-buffer file-buffer)))

(defun reindent-directory-contents (directory regex)
  "Reindent the files in a directory.

Map `indent-driver-with-file' over files in DIRECTORY whose names
match REGEX.  Uses `find-lisp-find-files' to locate files to map
over.

Returns 't'."
  (interactive (list (read-directory-name "Directory: ")
                     (read-regexp "Matching Regexp: ")))
  (mapc #'indent-driver-with-file (find-lisp-find-files directory regex))
  t)

(provide 'reindent-tools)

;;;; end reindent.el