2016-05-21 18:54:58 -04:00
|
|
|
;;; core-scratch.el
|
|
|
|
|
|
|
|
(setq initial-major-mode 'doom-mode
|
|
|
|
initial-scratch-message "\n Loading..."
|
2016-05-21 23:08:06 -04:00
|
|
|
inhibit-startup-screen t
|
|
|
|
;; shuts up emacs at startup
|
|
|
|
inhibit-startup-echo-area-message user-login-name)
|
|
|
|
|
|
|
|
(defvar doom-buffer nil
|
|
|
|
"The global and persistent scratch buffer for doom.")
|
|
|
|
(defvar doom-buffer-name "*doom*"
|
|
|
|
"The name of the doom scratch buffer.")
|
2016-05-23 17:12:18 -04:00
|
|
|
(defvar-local doom-buffer-edited nil
|
|
|
|
"If non-nil, the scratch buffer has been edited.")
|
2016-05-21 18:54:58 -04:00
|
|
|
|
2016-05-26 18:44:56 -04:00
|
|
|
(def-popup! "*doom*" :align below :size 35 :select t)
|
2016-05-29 14:05:40 -04:00
|
|
|
(def-popup! "^\\*doom.+\\*$" :regexp t :align below :size 12 :noselect t)
|
2016-05-24 21:57:25 -04:00
|
|
|
|
2016-05-21 18:54:58 -04:00
|
|
|
(define-derived-mode doom-mode text-mode "DOOM"
|
2016-05-23 17:12:18 -04:00
|
|
|
"Major mode for special DOOM buffers.")
|
2016-05-21 18:54:58 -04:00
|
|
|
|
|
|
|
;; Don't kill the scratch buffer
|
2016-05-21 23:08:06 -04:00
|
|
|
(add-hook! 'kill-buffer-query-functions
|
|
|
|
(not (string= doom-buffer-name (buffer-name))))
|
2016-05-21 18:54:58 -04:00
|
|
|
|
2016-05-22 01:13:09 -04:00
|
|
|
(add-hook! emacs-startup 'doom-mode-startup)
|
|
|
|
|
|
|
|
(defun doom-mode-startup ()
|
|
|
|
(doom-mode-init)
|
2016-05-26 05:23:42 -04:00
|
|
|
(with-current-buffer doom-buffer
|
|
|
|
(setq mode-line-format nil)))
|
2016-05-22 01:13:09 -04:00
|
|
|
|
2016-05-23 17:12:18 -04:00
|
|
|
(defun doom-mode-erase-on-insert ()
|
|
|
|
(erase-buffer)
|
|
|
|
(setq doom-buffer-edited t)
|
|
|
|
(remove-hook 'evil-insert-state-entry-hook 'doom-mode-erase-on-insert t))
|
|
|
|
|
2016-05-21 18:54:58 -04:00
|
|
|
(defun doom-mode-init (&optional auto-detect-frame)
|
|
|
|
(unless (buffer-live-p doom-buffer) (setq doom-buffer nil))
|
|
|
|
(let ((old-scratch (get-buffer "*scratch*")))
|
|
|
|
(when old-scratch
|
|
|
|
(with-current-buffer old-scratch
|
|
|
|
(rename-buffer doom-buffer-name)
|
|
|
|
(setq doom-buffer old-scratch))))
|
|
|
|
(unless doom-buffer
|
|
|
|
(setq doom-buffer (get-buffer-create doom-buffer-name)))
|
|
|
|
(with-current-buffer doom-buffer
|
|
|
|
(doom-mode)
|
2016-05-23 17:12:18 -04:00
|
|
|
(add-hook 'evil-insert-state-entry-hook 'doom-mode-erase-on-insert nil t)
|
|
|
|
(add-hook 'after-change-major-mode-hook 'doom-mode-erase-on-insert nil t)
|
2016-05-21 18:54:58 -04:00
|
|
|
(erase-buffer)
|
2016-05-23 17:12:18 -04:00
|
|
|
(setq doom-buffer-edited nil)
|
2016-05-21 18:54:58 -04:00
|
|
|
(insert
|
2016-05-28 21:51:21 -04:00
|
|
|
(let* ((auto-detect-frame (or auto-detect-frame (not window-system)))
|
2016-05-23 20:56:19 -04:00
|
|
|
(width (max 3 (- (if auto-detect-frame
|
|
|
|
(window-width)
|
|
|
|
(cdr (assq 'width default-frame-alist))) 3)))
|
2016-05-23 17:12:18 -04:00
|
|
|
(height (if auto-detect-frame
|
|
|
|
(window-height)
|
|
|
|
(cdr (assq 'height default-frame-alist))))
|
|
|
|
(lead (make-string (truncate (max 0 (/ (- width 78) 2))) ? )))
|
2016-05-21 18:54:58 -04:00
|
|
|
(concat
|
|
|
|
(propertize
|
|
|
|
(concat
|
2016-05-23 17:12:18 -04:00
|
|
|
(make-string (min 3 (truncate (/ height 5))) ?\n)
|
2016-05-21 18:54:58 -04:00
|
|
|
lead "================= =============== =============== ======== ========\n"
|
|
|
|
lead "\\\\ . . . . . . .\\\\ //. . . . . . .\\\\ //. . . . . . .\\\\ \\\\. . .\\\\// . . //\n"
|
|
|
|
lead "||. . ._____. . .|| ||. . ._____. . .|| ||. . ._____. . .|| || . . .\\/ . . .||\n"
|
|
|
|
lead "|| . .|| ||. . || || . .|| ||. . || || . .|| ||. . || ||. . . . . . . ||\n"
|
|
|
|
lead "||. . || || . .|| ||. . || || . .|| ||. . || || . .|| || . | . . . . .||\n"
|
|
|
|
lead "|| . .|| ||. _-|| ||-_ .|| ||. . || || . .|| ||. _-|| ||-_.|\\ . . . . ||\n"
|
|
|
|
lead "||. . || ||-' || || `-|| || . .|| ||. . || ||-' || || `|\\_ . .|. .||\n"
|
|
|
|
lead "|| . _|| || || || || ||_ . || || . _|| || || || |\\ `-_/| . ||\n"
|
|
|
|
lead "||_-' || .|/ || || \\|. || `-_|| ||_-' || .|/ || || | \\ / |-_.||\n"
|
|
|
|
lead "|| ||_-' || || `-_|| || || ||_-' || || | \\ / | `||\n"
|
|
|
|
lead "|| `' || || `' || || `' || || | \\ / | ||\n"
|
|
|
|
lead "|| .===' `===. .==='.`===. .===' /==. | \\/ | ||\n"
|
|
|
|
lead "|| .==' \\_|-_ `===. .===' _|_ `===. .===' _-|/ `== \\/ | ||\n"
|
|
|
|
lead "|| .==' _-' `-_ `=' _-' `-_ `=' _-' `-_ /| \\/ | ||\n"
|
|
|
|
lead "|| .==' _-' '-__\\._-' '-_./__-' `' |. /| | ||\n"
|
|
|
|
lead "||.==' _-' `' | /==.||\n"
|
|
|
|
lead "==' _-' E M A C S \\/ `==\n"
|
|
|
|
lead "\\ _-' `-_ /\n"
|
|
|
|
lead " `'' ``'")
|
|
|
|
'face 'font-lock-comment-face)
|
|
|
|
"\n\n"
|
|
|
|
(propertize
|
|
|
|
(s-trim-right
|
2016-05-23 17:12:18 -04:00
|
|
|
(s-center (max 0 (1- width)) "Press `,m` to open recent files, or `,E` to access emacs.d"))
|
2016-05-21 18:54:58 -04:00
|
|
|
'face 'font-lock-keyword-face)
|
2016-05-21 23:08:06 -04:00
|
|
|
(concat
|
|
|
|
"\n\n"
|
2016-05-23 17:12:18 -04:00
|
|
|
(s-trim-right (s-center (max 0 (- width 2))
|
2016-05-21 23:08:06 -04:00
|
|
|
(format "Loaded in %.3fs"
|
|
|
|
(float-time (time-subtract after-init-time emacs-start-time)))))))))
|
2016-05-21 18:54:58 -04:00
|
|
|
(back-to-indentation)
|
2016-05-23 17:12:18 -04:00
|
|
|
(doom|update-scratch-buffer nil t)))
|
2016-05-21 18:54:58 -04:00
|
|
|
|
|
|
|
(provide 'core-scratch)
|
|
|
|
;;; core-scratch.el ends here
|