add `doom/large-file-check to prompt literal open of large files

This commit is contained in:
Bryan Gilbert 2017-05-06 11:53:10 -04:00
parent eba9c382eb
commit 712c01f4f4
2 changed files with 28 additions and 0 deletions

View file

@ -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))))

View file

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