core-editor: refactor large-file detection

This commit is contained in:
Henrik Lissner 2017-05-06 22:55:10 +02:00
parent 404428d860
commit 09218f5bb3
2 changed files with 21 additions and 21 deletions

View file

@ -207,16 +207,3 @@ for function signatures or notes. Run again to clear the header line."
(setq content (replace-regexp-in-string "\\s-+" " " content)) (setq content (replace-regexp-in-string "\\s-+" " " content))
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,15 +1,14 @@
;;; core-editor.el --- filling the editor shaped hole in the Emacs OS ;;; core-editor.el --- filling the editor shaped hole in the Emacs OS
(defvar doom-large-file-size 1 (defvar doom-large-file-size 1
"Size (in MB) above which the user will be propmpted to open the file literally to avoid "Size (in MB) above which the user will be prompted to open the file literally
performance issues. Opening literally means that no major or minor modes are active and to avoid performance issues. Opening literally means that no major or minor
the buffer is readonly.") modes are active and the buffer is read-only.")
(defvar doom-large-file-modes-list (defvar doom-large-file-modes-list
'(archive-mode tar-mode jka-compr git-commit-mode image-mode '(archive-mode tar-mode jka-compr git-commit-mode image-mode
doc-view-mode doc-view-mode-maybe ebrowse-tree-mode pdf-view-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") "Major modes that `doom|check-large-file' will ignore.")
(setq-default (setq-default
;; Save clipboard contents into kill-ring before replacing them ;; Save clipboard contents into kill-ring before replacing them
@ -99,8 +98,22 @@
(insert linestr)))) (insert linestr))))
(advice-add #'delete-trailing-whitespace :around #'doom*delete-trailing-whitespace) (advice-add #'delete-trailing-whitespace :around #'doom*delete-trailing-whitespace)
;; automatically check for large files and optionally prompt to open literally (defun doom|check-large-file ()
(add-hook 'find-file-hook 'doom/check-large-file) "Check if the buffer's file is large. If so, ask for confirmation to open it
literally (read-only, disabled undo and in fundamental-mode) for performance
sake."
(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?")
(file-relative-name filename))))
(setq buffer-read-only t)
(buffer-disable-undo)
(fundamental-mode))))
(add-hook 'find-file-hook #'doom|check-large-file)
;; ;;