aboutsummaryrefslogtreecommitdiff
path: root/lisp/core
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-10-29 01:11:01 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-10-29 01:11:01 +0800
commitd2b8f0cdf59e00e1e6d239fd08b2d3ae4d9a4455 (patch)
tree35b0ac8237bbea12799768613167cf87f3d26f41 /lisp/core
parented2abc29486a9f5f4a9b76949ca3012f24a9bf69 (diff)
downloademacs.d-d2b8f0cdf59e00e1e6d239fd08b2d3ae4d9a4455.tar.gz
emacs.d-d2b8f0cdf59e00e1e6d239fd08b2d3ae4d9a4455.tar.xz
Configure Emacs core modules
Signed-off-by: Richard Qin <richard.qin.x@gmail.com>
Diffstat (limited to 'lisp/core')
-rw-r--r--lisp/core/init-defaults.el13
-rw-r--r--lisp/core/init-files.el79
-rw-r--r--lisp/core/init-keybindings.el73
-rw-r--r--lisp/core/init-session.el62
4 files changed, 214 insertions, 13 deletions
diff --git a/lisp/core/init-defaults.el b/lisp/core/init-defaults.el
index 259a9c6..da20170 100644
--- a/lisp/core/init-defaults.el
+++ b/lisp/core/init-defaults.el
@@ -38,19 +38,6 @@
(delete-selection-mode 1)
-;; ------------------------------------------------------------
-;; History
-;; ------------------------------------------------------------
-
-(setq savehist-file
- (expand-file-name "var/savehist" user-emacs-directory))
-
-(setq save-place-file
- (expand-file-name "var/places" user-emacs-directory))
-
-(savehist-mode 1)
-(save-place-mode 1)
-
(provide 'init-defaults)
;;; init-defaults.el ends here
diff --git a/lisp/core/init-files.el b/lisp/core/init-files.el
new file mode 100644
index 0000000..0973df3
--- /dev/null
+++ b/lisp/core/init-files.el
@@ -0,0 +1,79 @@
+;;; init-files.el --- File management -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2026 Richard Qin
+;; SPDX-License-Identifier: GPL-3.0-or-later
+
+;; Author: Richard Qin
+;; This file is not part of GNU Emacs.
+
+;;; Commentary:
+
+;; Configure file backups and automatic saving.
+;; Store generated files under the var/ directory.
+
+;;; Code:
+
+;; ------------------------------------------------------------
+;; Directories
+;; ------------------------------------------------------------
+
+(defvar my/backup-directory
+ (expand-file-name "var/backups/" user-emacs-directory)
+ "Directory for backup files.")
+
+(defvar my/auto-save-directory
+ (expand-file-name "var/auto-save/" user-emacs-directory)
+ "Directory for auto-save files.")
+
+(defvar my/auto-save-list-directory
+ (expand-file-name "var/auto-save-list/" user-emacs-directory)
+ "Directory for auto-save session records.")
+
+(dolist (dir (list my/backup-directory
+ my/auto-save-directory
+ my/auto-save-list-directory))
+ (make-directory dir t))
+
+
+;; ------------------------------------------------------------
+;; Backups
+;; ------------------------------------------------------------
+
+;; Enable backup files.
+(setq make-backup-files t)
+
+;; Store all backups in a dedicated directory.
+(setq backup-directory-alist
+ `(("." . ,my/backup-directory)))
+
+;; Use numbered backups.
+(setq version-control t)
+
+;; Keep several versions of each file.
+(setq kept-new-versions 10
+ kept-old-versions 2
+ delete-old-versions t)
+
+
+;; ------------------------------------------------------------
+;; Auto-save
+;; ------------------------------------------------------------
+
+;; Enable automatic saving.
+(setq auto-save-default t)
+
+;; Store auto-save files in a dedicated directory.
+;; SHA-1 avoids excessively long generated filenames.
+(setq auto-save-file-name-transforms
+ `((".*" ,my/auto-save-directory sha1)))
+
+;; Store auto-save session records separately.
+(setq auto-save-list-file-prefix
+ (expand-file-name
+ ".saves-"
+ my/auto-save-list-directory))
+
+
+(provide 'init-files)
+
+;;; init-files.el ends here
diff --git a/lisp/core/init-keybindings.el b/lisp/core/init-keybindings.el
new file mode 100644
index 0000000..d33dac3
--- /dev/null
+++ b/lisp/core/init-keybindings.el
@@ -0,0 +1,73 @@
+;;; init-keybindings.el --- Global keybindings -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2026 Richard Qin
+;; SPDX-License-Identifier: GPL-3.0-or-later
+
+;; Author: Richard Qin
+;; This file is not part of GNU Emacs.
+
+;;; Commentary:
+
+;; Define personal commands and global keybindings.
+;; Use C-c m as the prefix for custom commands.
+
+;;; Code:
+
+;; ------------------------------------------------------------
+;; Personal commands
+;; ------------------------------------------------------------
+
+(defun my/open-init-file ()
+ "Open the main Emacs initialization file."
+ (interactive)
+ (find-file
+ (expand-file-name "init.el" user-emacs-directory)))
+
+(defun my/open-config-directory ()
+ "Open the Emacs configuration directory in Dired."
+ (interactive)
+ (dired user-emacs-directory))
+
+
+;; ------------------------------------------------------------
+;; Personal keymap
+;; ------------------------------------------------------------
+
+(defvar my/command-map
+ (make-sparse-keymap)
+ "Keymap for personal Emacs commands.")
+
+;; Register the personal command prefix.
+(define-key global-map
+ (kbd "C-c m")
+ my/command-map)
+
+
+;; ------------------------------------------------------------
+;; Keybindings
+;; ------------------------------------------------------------
+
+(define-key my/command-map
+ (kbd "i")
+ #'my/open-init-file)
+
+(define-key my/command-map
+ (kbd "d")
+ #'my/open-config-directory)
+
+(define-key my/command-map
+ (kbd "r")
+ #'revert-buffer)
+
+(define-key my/command-map
+ (kbd "w")
+ #'whitespace-mode)
+
+(define-key my/command-map
+ (kbd "e")
+ #'eval-buffer)
+
+
+(provide 'init-keybindings)
+
+;;; init-keybindings.el ends here
diff --git a/lisp/core/init-session.el b/lisp/core/init-session.el
new file mode 100644
index 0000000..d768390
--- /dev/null
+++ b/lisp/core/init-session.el
@@ -0,0 +1,62 @@
+;;; init-session.el --- Session management -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2026 Richard Qin
+;; SPDX-License-Identifier: GPL-3.0-or-later
+
+;; Author: Richard Qin
+;; This file is not part of GNU Emacs.
+
+;;; Commentary:
+
+;; Preserve command history, recently opened files,
+;; and cursor positions between Emacs sessions.
+
+;;; Code:
+
+;; ------------------------------------------------------------
+;; Command history
+;; ------------------------------------------------------------
+
+(require 'savehist)
+
+(setq savehist-file
+ (expand-file-name
+ "var/savehist"
+ user-emacs-directory))
+
+(savehist-mode 1)
+
+
+;; ------------------------------------------------------------
+;; Cursor positions
+;; ------------------------------------------------------------
+
+(require 'saveplace)
+
+(setq save-place-file
+ (expand-file-name
+ "var/places"
+ user-emacs-directory))
+
+(save-place-mode 1)
+
+
+;; ------------------------------------------------------------
+;; Recent files
+;; ------------------------------------------------------------
+
+(require 'recentf)
+
+(setq recentf-save-file
+ (expand-file-name
+ "var/recentf"
+ user-emacs-directory))
+
+(setq recentf-max-saved-items 200)
+
+(recentf-mode 1)
+
+
+(provide 'init-session)
+
+;;; init-session.el ends here