From 712c01f4f4907742b78d978b5535be27fb176af6 Mon Sep 17 00:00:00 2001 From: Bryan Gilbert Date: Sat, 6 May 2017 11:53:10 -0400 Subject: [PATCH] add `doom/large-file-check to prompt literal open of large files --- core/autoload/editor.el | 14 ++++++++++++++ core/core-editor.el | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/core/autoload/editor.el b/core/autoload/editor.el index d0f51eb3a..d9aa3dc53 100644 --- a/core/autoload/editor.el +++ b/core/autoload/editor.el @@ -206,3 +206,17 @@ for function signatures or notes. Run again to clear the header line." (setq content (replace-regexp-in-string "\n" " " content t t)) (setq content (replace-regexp-in-string "\\s-+" " " content)) content))))) + +;;;###autoload +(defun doom/check-large-file () + (let* ((filename (buffer-file-name)) + (size (nth 7 (file-attributes filename)))) + (when (and + (not (memq major-mode doom-large-file-modes-list)) + size (> size (* 1024 1024 doom-large-file-size)) + (y-or-n-p (format (concat "%s is a large file, open literally to " + "avoid performance issues?") + filename))) + (setq buffer-read-only t) + (buffer-disable-undo) + (fundamental-mode)))) diff --git a/core/core-editor.el b/core/core-editor.el index 37e18dc71..c4406225a 100644 --- a/core/core-editor.el +++ b/core/core-editor.el @@ -1,5 +1,16 @@ ;;; core-editor.el --- filling the editor shaped hole in the Emacs OS + +(defvar doom-large-file-size 1 + "Size (in MB) above which the user will be propmpted to open the file literally to avoid + performance issues. Opening literally means that no major or minor modes are active and + the buffer is readonly.") + +(defvar doom-large-file-modes-list + '(archive-mode tar-mode jka-compr git-commit-mode image-mode + doc-view-mode doc-view-mode-maybe ebrowse-tree-mode pdf-view-mode) + "Major modes which `doom/check-large-file' will not be automatically applied to") + (setq-default ;; Save clipboard contents into kill-ring before replacing them save-interprogram-paste-before-kill t @@ -88,6 +99,9 @@ (insert linestr)))) (advice-add #'delete-trailing-whitespace :around #'doom*delete-trailing-whitespace) +;; automatically check for large files and optionally prompt to open literally +(add-hook 'find-file-hook 'doom/check-large-file) + ;; ;; Core Plugins