From f061fe925f61b7a678263ec2ccf143bcc6a48891 Mon Sep 17 00:00:00 2001
From: Liu Miao <liumiaogemini@mail.ustc.edu.cn>
Date: Tue, 15 Jun 2021 20:25:33 +0800
Subject: [PATCH] better init.el

---
 init.el         | 187 +++++++++++++++++++++++++++---------------------
 lisp/configs.el |  12 ++++
 2 files changed, 116 insertions(+), 83 deletions(-)

diff --git a/init.el b/init.el
index 7e1053d..8ccef14 100644
--- a/init.el
+++ b/init.el
@@ -10,91 +10,112 @@
 ;; (setq debug-on-error t)
 
 
-(let (
-      ;; adjust garbage collection at startup
-      (gc-cons-threshold (* 128 1024 1024))
-      (gc-cons-percentage 0.6))
-
-  ;; Use a hook so the messages doesn't get clobbered by other messages.
-  (add-hook 'emacs-startup-hook
-            (lambda ()
-              (message "Emacs ready in %s with %d garbage collections."
-                       (format "%.2f seconds"
-                               (float-time
-                                (time-subtract after-init-time before-init-time)))
-                       gcs-done)))
-  
-  ;; add `lisp' to `load-path'.
-  (add-to-list 'load-path
-               (expand-file-name "lisp" user-emacs-directory))
-  
-  ;; load user configs.
-  (require 'configs)
-  (or (file-exists-p user/userconfig-file)
-      (copy-file (concat user-emacs-directory "lisp/templates/userconfig.template")
-                 user/userconfig-file)
-      )
-  (load user/userconfig-file)
-
-  ;; load `custom-file'
-  (setq custom-file user/custom-file)
-  (when (file-exists-p custom-file)
-    (load custom-file))
-
-  (require 'cl-lib)
-  ;; Language and coding
-  (set-language-environment "utf-8")
-  ;; (set-keyboard-coding-system 'utf-8)
-  ;; (set-default-coding-systems 'utf-8)
+;; adjust garbage collection at startup
+(defvar better-gc-cons-threshold (* 128 1024 1024))
+(add-hook 'emacs-startup-hook
+          (lambda ()
+            (setq gc-cons-threshold better-gc-cons-threshold)
+            (setq gc-cons-percentage 0.6)))
+
+;; Use a hook so the messages doesn't get clobbered by other messages.
+(add-hook 'emacs-startup-hook
+          (lambda ()
+            (message "Emacs ready in %s with %d garbage collections."
+                     (format "%.2f seconds"
+                             (float-time
+                              (time-subtract after-init-time before-init-time)))
+                     gcs-done)))
+
+;; AutoGC
+(add-hook 'emacs-startup-hook
+          (lambda ()
+            (if (boundp 'after-focus-change-function)
+                (add-function :after after-focus-change-function
+                              (lambda ()
+                                (unless (frame-focus-state)
+                                  (garbage-collect))))
+              (add-hook 'after-focus-change-function 'garbage-collect))
+            (defun gc-minibuffer-setup-hook ()
+              (setq gc-cons-threshold (* better-gc-cons-threshold 2)))
+
+            (defun gc-minibuffer-exit-hook ()
+              (garbage-collect)
+              (setq gc-cons-threshold better-gc-cons-threshold))
+            (add-hook 'minibuffer-setup-hook #'gc-minibuffer-setup-hook)
+            (add-hook 'minibuffer-exit-hook #'gc-minibuffer-exit-hook)))
+
+;; add `lisp' to `load-path'.
+(add-to-list 'load-path
+             (expand-file-name "lisp" user-emacs-directory))
+
+;; load user configs.
+(require 'configs)
+(or (file-exists-p user/userconfig-file)
+    (copy-file (concat user-emacs-directory "lisp/templates/userconfig.template")
+               user/userconfig-file))
+(load user/userconfig-file)
+
+;; load `custom-file'
+(setq custom-file user/custom-file)
+(when (file-exists-p custom-file)
+  (load custom-file))
+
+(require 'cl-lib)
+;; Language and coding
+(set-language-environment "utf-8")
+;; (set-keyboard-coding-system 'utf-8)
+;; (set-default-coding-systems 'utf-8)
 
 ;;; Packages
-  (require 'package)
-  (setq package--init-file-ensured t
-        package-enable-at-startup nil
-        package-archives user/package-mirror)
-
-  ;; Evaluate the correct package subdirectory of packages.
-  (setq package-user-dir
-	(file-name-as-directory
-	 (if (not elpa-subdirectory)
-	     elpa-pack-dir
-	   (let ((subdir (format "%d%s%d"
-				 emacs-major-version
-				 version-separator
-				 emacs-minor-version)))
-	     (expand-file-name subdir elpa-pack-dir)))))
-
-  ;; Load Emacs packages and initialize them.
-  (package-initialize)
-
-  ;; Install use-package from melpa
-  (or (package-installed-p 'use-package)
-      (progn
-        (package-refresh-contents)
-        (package-install 'use-package)))
-  ;; Install use-package from melpa
-  (unless (package-installed-p 'quelpa)
-    (progn
-        (package-refresh-contents)
-        (package-install 'quelpa)))
-  (setq quelpa-checkout-melpa-p nil)
-
-  (require 'keybindings)
-  (require 'editor)
-  (require 'completion)
-  (require 'core-libs)
-
-  (require 'prog-common)
-  (require 'prog-c-cpp)
-  (require 'prog-python)
-  (require 'prog-haskell)
-  (require 'prog-lisp)
-  (require 'prog-verilog)
-  (require 'init-org)
-  (require 'apps)
-
-  (user/lazy-load)
-  )
+(require 'package)
+(setq package--init-file-ensured t
+      package-enable-at-startup nil
+      package-archives user/package-mirror)
+
+;; Evaluate the correct package subdirectory of packages.
+(setq package-user-dir
+	  (file-name-as-directory
+	   (if (not elpa-subdirectory)
+	       elpa-pack-dir
+	     (let ((subdir (format "%d%s%d"
+				               emacs-major-version
+				               version-separator
+				               emacs-minor-version)))
+	       (expand-file-name subdir elpa-pack-dir)))))
+
+;; Load Emacs packages and initialize them.
+(unless (bound-and-true-p package--initialized)
+  (package-initialize))
+
+;; Install use-package from melpa
+(unless (package-installed-p 'use-package)
+  (progn
+    (package-refresh-contents)
+    (package-install 'use-package)))
+
+;; Install quelpa from melpa
+(unless (package-installed-p 'quelpa)
+  (progn
+    (package-refresh-contents)
+    (package-install 'quelpa)))
+(setq quelpa-checkout-melpa-p nil)
+
+(require 'keybindings)
+(require 'editor)
+(require 'completion)
+(require 'core-libs)
+
+(require 'prog-common)
+(require 'prog-c-cpp)
+(require 'prog-python)
+(require 'prog-haskell)
+(require 'prog-lisp)
+(require 'prog-verilog)
+(require 'init-org)
+(require 'apps)
+
+(user/lazy-load)
+
 
 (provide 'init)
 ;;; init.el ends here
diff --git a/lisp/configs.el b/lisp/configs.el
index 655bfd4..91b842c 100644
--- a/lisp/configs.el
+++ b/lisp/configs.el
@@ -3,6 +3,18 @@
 ;;; Commentary:
 
 ;;; Code:
+(defvar user/full-name "Liu Miao")
+(defvar user/email-address "liumiaogemini@foxmail.com")
+
+(defconst *sys/win32*
+  (eq system-type 'windows-nt))
+
+(defconst *sys/linux*
+  (eq system-type 'gnu/linux))
+
+(defconst *sys/mac*
+  (eq system-type 'darwin))
+
 (defvar user/default-font '("Consolas"
                             :size 10
                             :weight normal
-- 
GitLab