;;; dired-auto-readme.el --- -*- lexical-binding: t; -*- ;; Copyright (C) 2020 Arthur Miller ;; Author: Arthur Miller ;; Keywords: ;; 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 . (defvar dired-auto-readme-files '("README" "README.md" "README.org" "README.txt") "List of README file names to automatically display. First file in the directory matching the list is used. ") (defun dired-auto-readme--insert () "Insert README file in the current buffer. " (setq inhibit-read-only t) (catch 'break (dolist (file dired-auto-readme-files) (when (file-exists-p file) (save-excursion (let ((readme-text)) (with-current-buffer (get-buffer-create file) (insert-file-contents file) (font-lock-ensure) (indent-region (point-min) (point-max)) (setq readme-text (buffer-substring (point-min) (point-max))) ;;(kill-buffer) ) (goto-char (point-max)) (make-variable-buffer-local 'dired-auto-readme--start-point) (setq dired-auto-readme--start-point (point)) (insert readme-text)) (setq dired-auto-readme--inserted t) (setq inhibit-read-only nil) (throw 'break t)))))) (defun dired-auto-readme--remove () (setq inhibit-read-only t) (save-excursion (goto-char dired-auto-readme--start-point) (delete-region (point) (point-max))) (setq dired-auto-readme--inserted nil) (setq inhibit-read-only t)) ;;;###autoload (define-minor-mode dired-auto-readme-mode "Dired minor mode to preview README in current directory." :global nil :lighter " README" (when (derived-mode-p 'dired-mode) (make-variable-buffer-local 'dired-auto-readme--inserted) (cond (dired-auto-readme-mode (unless dired-auto-readme--inserted (dired-auto-readme--insert)) ;; hook run by `dired-revert' (add-hook 'dired-after-readin-hook #'dired-auto-readme--insert nil t)) (t (when dired-auto-readme--inserted (dired-auto-readme--remove)) (remove-hook 'dired-after-readin-hook #'dired-auto-readme--insert t))))) (provide 'dired-auto-readme) ;;; dired-auto-readme.el ends here