diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-10-29 01:11:01 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-10-29 01:11:01 +0800 |
| commit | d2b8f0cdf59e00e1e6d239fd08b2d3ae4d9a4455 (patch) | |
| tree | 35b0ac8237bbea12799768613167cf87f3d26f41 /lisp/core | |
| parent | ed2abc29486a9f5f4a9b76949ca3012f24a9bf69 (diff) | |
| download | emacs.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.el | 13 | ||||
| -rw-r--r-- | lisp/core/init-files.el | 79 | ||||
| -rw-r--r-- | lisp/core/init-keybindings.el | 73 | ||||
| -rw-r--r-- | lisp/core/init-session.el | 62 |
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 |
