diff --git a/early-init.el b/early-init.el index a976879..b9f656f 100644 --- a/early-init.el +++ b/early-init.el @@ -4,7 +4,7 @@ ;; URL: https://github.com/jamescherti/minimal-emacs.d ;; Package-Requires: ((emacs "29.1")) ;; Keywords: maint -;; Version: 1.1.1 +;; Version: 1.1.2 ;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Commentary: @@ -38,23 +38,49 @@ turned on.") (defvar minimal-emacs-gc-cons-threshold (* 16 1024 1024) "The value of `gc-cons-threshold' after Emacs startup.") +(defvar minimal-emacs-optimize-startup-gc t + "If non-nil, increase `gc-cons-threshold' during startup to reduce pauses. +After Emacs finishes loading, `gc-cons-threshold' is restored to the value +stored in `minimal-emacs--restore-gc-cons-threshold'.") + (defvar minimal-emacs-package-initialize-and-refresh t "Whether to automatically initialize and refresh packages. When set to non-nil, Emacs will automatically call `package-initialize' and `package-refresh-contents' to set up and update the package system.") +(defvar minimal-emacs-inhibit-redisplay-during-startup nil + "Suppress redisplay during startup to improve performance. +This prevents visual updates while Emacs initializes, leading to a cleaner and +faster startup. The tradeoff is that you won't see the progress or activities +during the startup process.") + +(defvar minimal-emacs-inhibit-message-during-startup nil + "Suppress startup messages for a cleaner experience. +By disabling startup messages, this slightly enhances performance and provides a +cleaner startup. The tradeoff is that you won't be informed of the progress or +any relevant activities during startup.") + +(defvar minimal-emacs-disable-mode-line-during-startup nil + "Disable the mode line during startup to improve performance. +This reduces visual clutter and slightly enhances startup performance. The +tradeoff is that the mode line is hidden during the startup phase, giving a more +minimalistic appearance during startup.") + (defvar minimal-emacs-user-directory user-emacs-directory "The default value of the `user-emacs-directory' variable.") ;;; Load pre-early-init.el +;; Prefer loading newer compiled files +(setq load-prefer-newer t) + (defun minimal-emacs-load-user-init (filename) "Execute a file of Lisp code named FILENAME." (let ((user-init-file (expand-file-name filename minimal-emacs-user-directory))) (when (file-exists-p user-init-file) - (load user-init-file nil t)))) + (load user-init-file nil t t)))) (minimal-emacs-load-user-init "pre-early-init.el") @@ -66,11 +92,13 @@ When set to non-nil, Emacs will automatically call `package-initialize' and ;; Garbage collection significantly affects startup times. This setting delays ;; garbage collection during startup but will be reset later. -(setq gc-cons-threshold most-positive-fixnum) +(when minimal-emacs-optimize-startup-gc + (setq gc-cons-threshold most-positive-fixnum) -(add-hook 'emacs-startup-hook - (lambda () - (setq gc-cons-threshold minimal-emacs-gc-cons-threshold))) + (defun minimal-emacs--restore-gc-cons-threshold () + "Restore `minimal-emacs-gc-cons-threshold'." + (setq gc-cons-threshold minimal-emacs-gc-cons-threshold)) + (add-hook 'emacs-startup-hook #'minimal-emacs--restore-gc-cons-threshold 105)) ;;; Misc @@ -81,76 +109,87 @@ When set to non-nil, Emacs will automatically call `package-initialize' and ;;; Performance -;; Prefer loading newer compiled files -(setq load-prefer-newer t) - ;; Font compacting can be very resource-intensive, especially when rendering ;; icon fonts on Windows. This will increase memory usage. (setq inhibit-compacting-font-caches t) (unless (daemonp) (let ((old-value (default-toplevel-value 'file-name-handler-alist))) - (set-default-toplevel-value - 'file-name-handler-alist - ;; Determine the state of bundled libraries using calc-loaddefs.el. - ;; If compressed, retain the gzip handler in `file-name-handler-alist`. - ;; If compiled or neither, omit the gzip handler during startup for - ;; improved startup and package load time. - (if (eval-when-compile - (locate-file-internal "calc-loaddefs.el" load-path)) - nil - (list (rassq 'jka-compr-handler old-value)))) - ;; Ensure the new value persists through any current let-binding. + ;; Determine the state of bundled libraries using calc-loaddefs.el. + ;; If compressed, retain the gzip handler in `file-name-handler-alist`. + ;; If compiled or neither, omit the gzip handler during startup for + ;; improved startup and package load time. (set-default-toplevel-value 'file-name-handler-alist - file-name-handler-alist) - ;; Remember the old value to reset it as needed. - (add-hook 'emacs-startup-hook - (lambda () - (set-default-toplevel-value - 'file-name-handler-alist - ;; Merge instead of overwrite to preserve any changes made - ;; since startup. - (delete-dups (append file-name-handler-alist old-value)))) - 101)) + (if (eval-when-compile + (locate-file-internal "calc-loaddefs.el" + load-path)) + nil + (list (rassq 'jka-compr-handler old-value)))) + ;; Ensure the new value persists through any current let-binding. + (put 'file-name-handler-alist 'initial-value old-value) + ;; Emacs processes command-line files very early in startup. These files may + ;; include special paths like TRAMP paths, so restore + ;; `file-name-handler-alist' for this stage of initialization. + (define-advice command-line-1 (:around (fn args-left) respect-file-handlers) + (let ((file-name-handler-alist + (if args-left old-value file-name-handler-alist))) + (funcall fn args-left))) + + ;; Restore the old value to reset it as needed. + (defun minimal-emacs--restore-file-name-handler-alist () + "Restore `file-name-handler-alist'." + (set-default-toplevel-value + 'file-name-handler-alist + ;; Merge instead of overwrite to preserve any changes made since startup. + (delete-dups (append file-name-handler-alist old-value)))) + + (add-hook + 'emacs-startup-hook #'minimal-emacs--restore-file-name-handler-alist 101)) (unless noninteractive (unless minimal-emacs-debug - (unless minimal-emacs-debug + (when minimal-emacs-inhibit-redisplay-during-startup ;; Suppress redisplay and redraw during startup to avoid delays and ;; prevent flashing an unstyled Emacs frame. - ;; (setq-default inhibit-redisplay t) ; Can cause artifacts - (setq-default inhibit-message t) + (defun minimal-emacs--reset-inhibit-redisplay () + (setq-default inhibit-redisplay nil) + (remove-hook 'post-command-hook #'minimal-emacs--reset-inhibit-redisplay)) - ;; Reset the above variables to prevent Emacs from appearing frozen or - ;; visually corrupted after startup or if a startup error occurs. - (defun minimal-emacs--reset-inhibited-vars-h () - ;; (setq-default inhibit-redisplay nil) ; Can cause artifacts + (setq-default inhibit-redisplay t) + (add-hook 'post-command-hook #'minimal-emacs--reset-inhibit-redisplay -100)) + + (when minimal-emacs-inhibit-message-during-startup + (defun minimal-emacs--reset-inhibit-message () (setq-default inhibit-message nil) - (remove-hook 'post-command-hook #'minimal-emacs--reset-inhibited-vars-h)) + (remove-hook 'post-command-hook #'minimal-emacs--reset-inhibit-message)) - (add-hook 'post-command-hook - #'minimal-emacs--reset-inhibited-vars-h -100)) + (setq-default inhibit-message t) + (add-hook 'post-command-hook #'minimal-emacs--reset-inhibit-message -100)) - (dolist (buf (buffer-list)) - (with-current-buffer buf - (setq mode-line-format nil))) - - (put 'mode-line-format 'initial-value - (default-toplevel-value 'mode-line-format)) - (setq-default mode-line-format nil) + (put 'mode-line-format + 'initial-value (default-toplevel-value 'mode-line-format)) + (when minimal-emacs-disable-mode-line-during-startup + (setq-default mode-line-format nil) + (dolist (buf (buffer-list)) + (with-current-buffer buf + (setq mode-line-format nil)))) (defun minimal-emacs--startup-load-user-init-file (fn &rest args) "Advice for startup--load-user-init-file to reset mode-line-format." (unwind-protect - (progn - ;; Start up as normal - (apply fn args)) + ;; Start up as normal + (apply fn args) ;; If we don't undo inhibit-{message, redisplay} and there's an ;; error, we'll see nothing but a blank Emacs frame. - (setq-default inhibit-message nil) - (unless (default-toplevel-value 'mode-line-format) - (setq-default mode-line-format - (get 'mode-line-format 'initial-value))))) + (when minimal-emacs-inhibit-message-during-startup + (setq-default inhibit-message nil)) + (when minimal-emacs-inhibit-redisplay-during-startup + (setq-default inhibit-redisplay nil)) + ;; Restore the mode-line + (when minimal-emacs-disable-mode-line-during-startup + (unless (default-toplevel-value 'mode-line-format) + (setq-default mode-line-format (get 'mode-line-format + 'initial-value)))))) (advice-add 'startup--load-user-init-file :around #'minimal-emacs--startup-load-user-init-file)) @@ -256,8 +295,6 @@ When set to non-nil, Emacs will automatically call `package-initialize' and (push '(vertical-scroll-bars) default-frame-alist) (push '(horizontal-scroll-bars) default-frame-alist) (setq scroll-bar-mode nil) -(when (fboundp 'horizontal-scroll-bar-mode) - (horizontal-scroll-bar-mode -1)) (unless (memq 'tooltips minimal-emacs-ui-features) (when (bound-and-true-p tooltip-mode) @@ -270,9 +307,17 @@ When set to non-nil, Emacs will automatically call `package-initialize' and (setq use-dialog-box nil)) ;;; package.el -(setq package-enable-at-startup nil) -(setq package-quickstart nil) +(setq use-package-compute-statistics minimal-emacs-debug) + +;; Setting use-package-expand-minimally to (t) results in a more compact output +;; that emphasizes performance over clarity. +(setq use-package-expand-minimally (not noninteractive)) + +(setq use-package-minimum-reported-time (if minimal-emacs-debug 0 0.1)) +(setq use-package-verbose minimal-emacs-debug) +(setq package-enable-at-startup nil) ; Let the init.el file handle this (setq use-package-always-ensure t) +(setq use-package-enable-imenu-support t) (setq package-archives '(("melpa" . "https://melpa.org/packages/") ("melpa-stable" . "https://stable.melpa.org/packages/") ("gnu" . "https://elpa.gnu.org/packages/") diff --git a/init.el b/init.el index 099f9e1..8b9b90a 100644 --- a/init.el +++ b/init.el @@ -4,7 +4,7 @@ ;; URL: https://github.com/jamescherti/minimal-emacs.d ;; Package-Requires: ((emacs "29.1")) ;; Keywords: maint -;; Version: 1.1.1 +;; Version: 1.1.2 ;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Commentary: @@ -17,12 +17,16 @@ ;;; Load pre-init.el (minimal-emacs-load-user-init "pre-init.el") -;;; Networking +;;; Before package + +;; Increase how much is read from processes in a single chunk +(setq read-process-output-max (* 1024 1024)) ; 1024kb ;; Don't ping things that look like domain names. (setq ffap-machine-p-known 'reject) ;;; package.el + (when (bound-and-true-p minimal-emacs-package-initialize-and-refresh) ;; Initialize and refresh package contents again if needed (package-initialize) @@ -46,23 +50,14 @@ (setq warning-suppress-types '((lexical-binding))) -;; Some features that are not represented as packages can be found in -;; `features', but this can be inconsistent. The following enforce consistency: -(if (fboundp #'json-parse-string) - (push 'jansson features)) -(if (string-match-p "HARFBUZZ" system-configuration-features) ; no alternative - (push 'harfbuzz features)) -(if (bound-and-true-p module-file-suffix) - (push 'dynamic-modules features)) - ;;; Minibuffer + ;; Allow nested minibuffers (setq enable-recursive-minibuffers t) ;; Keep the cursor out of the read-only portions of the.minibuffer (setq minibuffer-prompt-properties - '(read-only t intangible t cursor-intangible t face - minibuffer-prompt)) + '(read-only t intangible t cursor-intangible t face minibuffer-prompt)) (add-hook 'minibuffer-setup-hook #'cursor-intangible-mode) ;;; User interface @@ -71,59 +66,63 @@ (setq idle-update-delay 1.0) ;; Allow for shorter responses: "y" for yes and "n" for no. +(setq read-answer-short t) (if (boundp 'use-short-answers) (setq use-short-answers t) (advice-add #'yes-or-no-p :override #'y-or-n-p)) (defalias #'view-hello-file #'ignore) ; Never show the hello file -;;; Misc +;; No beeping or blinking +(setq visible-bell nil) +(setq ring-bell-function #'ignore) -;; switch-to-buffer runs pop-to-buffer-same-window instead -(setq switch-to-buffer-obey-display-actions t) +;;; Show-paren (setq show-paren-delay 0.1 show-paren-highlight-openparen t show-paren-when-point-inside-paren t show-paren-when-point-in-periphery t) +;;; Compilation + +(setq compilation-always-kill t + compilation-ask-about-save nil + compilation-scroll-output 'first-error) + +;;; Misc + (setq whitespace-line-column nil) ; whitespace-mode ;; I reduced the default value of 9 to simplify the font-lock keyword, -;; aiming to improve performance. This package helps differentiate -;; nested delimiter pairs, particularly in languages with heavy use of -;; parentheses. +;; aiming to improve performance. (setq rainbow-delimiters-max-face-count 5) ;; Can be activated with `display-line-numbers-mode' (setq-default display-line-numbers-width 3) (setq-default display-line-numbers-widen t) -(setq comint-prompt-read-only t) -(setq comint-buffer-maximum-size 2048) - -(setq compilation-always-kill t - compilation-ask-about-save nil - compilation-scroll-output 'first-error) - (setq truncate-string-ellipsis "…") -;; Delete by moving to trash in interactive mode -(setq delete-by-moving-to-trash (not noninteractive)) - -;; Increase how much is read from processes in a single chunk -(setq read-process-output-max (* 512 1024)) ; 512kb +;; Improve Emacs' responsiveness by delaying syntax highlighting during input +;; but may reduce visual feedback. +(setq redisplay-skip-fontification-on-input t) ;; Collects and displays all available documentation immediately, even if ;; multiple sources provide it. It concatenates the results. (setq eldoc-documentation-strategy 'eldoc-documentation-compose-eagerly) -;; For some reason, `abbrev_defs` is located in ~/.emacs.d/abbrev_defs, even -;; when `user-emacs-directory` is modified. This ensures the abbrev file is -;; correctly located based on the updated `user-emacs-directory`. -(setq abbrev-file-name (expand-file-name "abbrev_defs" user-emacs-directory)) +;; Disable truncation of printed s-expressions in the message buffer +(setq eval-expression-print-length nil + eval-expression-print-level nil) + +;; Position underlines at the descent line instead of the baseline. +(setq x-underline-at-descent-line t) ;;; Files +;; Delete by moving to trash in interactive mode +(setq delete-by-moving-to-trash (not noninteractive)) + ;; Disable the warning "X and Y are the same file". Ignoring this warning is ;; acceptable since it will redirect you to the existing buffer regardless. (setq find-file-suppress-same-file-warnings t) @@ -133,22 +132,19 @@ (setq find-file-visit-truename t vc-follow-symlinks t) -;; Skip confirmation prompts when creating a new file or buffer -(setq confirm-nonexistent-file-or-buffer nil) - -(setq uniquify-buffer-name-style 'forward) - -(setq mouse-yank-at-point t) - ;; Prefer vertical splits over horizontal ones (setq split-width-threshold 170 split-height-threshold nil) -;; The native border "uses" a pixel of the fringe on the rightmost -;; splits, whereas `window-divider` does not. -(setq window-divider-default-bottom-width 1 - window-divider-default-places t - window-divider-default-right-width 1) +;;; Buffers + +(setq uniquify-buffer-name-style 'forward) + +(setq comint-prompt-read-only t) +(setq comint-buffer-maximum-size 2048) + +;; Skip confirmation prompts when creating a new file or buffer +(setq confirm-nonexistent-file-or-buffer nil) ;;; Backup files @@ -166,9 +162,14 @@ (setq version-control t) ; Use version numbers for backup files (setq kept-new-versions 5) (setq kept-old-versions 5) + +;;; VC + +(setq vc-git-print-log-follow t) (setq vc-make-backup-files nil) ; Do not backup version controlled files ;;; Auto save + ;; Enable auto-save to safeguard against crashes or data loss. The ;; `recover-file' or `recover-session' functions can be used to restore ;; auto-saved data. @@ -199,24 +200,31 @@ (setq global-auto-revert-non-file-buffers t) ;;; recentf + ;; `recentf' is an Emacs package that maintains a list of recently ;; accessed files, making it easier to reopen files you have worked on ;; recently. (setq recentf-max-saved-items 300) ; default is 20 -(setq recentf-auto-cleanup 'mode) +(setq recentf-max-menu-items 15) +(setq recentf-auto-cleanup (if (daemonp) 300 'never)) + +;; Update recentf-exclude +(setq recentf-exclude (list "^/\\(?:ssh\\|su\\|sudo\\)?:")) ;;; saveplace -;; `save-place-mode` enables Emacs to remember the last location within a file + +;; `save-place-mode' enables Emacs to remember the last location within a file ;; upon reopening. This feature is particularly beneficial for resuming work at ;; the precise point where you previously left off. (setq save-place-file (expand-file-name "saveplace" user-emacs-directory)) (setq save-place-limit 600) ;;; savehist -;; `savehist` is an Emacs feature that preserves the minibuffer history between -;; sessions. It saves the history of inputs in the minibuffer, such as commands, -;; search strings, and other prompts, to a file. This allows users to retain -;; their minibuffer history across Emacs restarts. + +;; `savehist-mode' is an Emacs feature that preserves the minibuffer history +;; between sessions. It saves the history of inputs in the minibuffer, such as +;; commands, search strings, and other prompts, to a file. This allows users to +;; retain their minibuffer history across Emacs restarts. (setq history-length 300) (setq savehist-save-minibuffer-history t) ;; Default @@ -232,7 +240,14 @@ (setq resize-mini-windows 'grow-only) +;; The native border "uses" a pixel of the fringe on the rightmost +;; splits, whereas `window-divider-mode' does not. +(setq window-divider-default-bottom-width 1 + window-divider-default-places t + window-divider-default-right-width 1) + ;;; Scrolling + ;; Enables faster scrolling through unfontified regions. This may result in ;; brief periods of inaccurate syntax highlighting immediately after scrolling, ;; which should quickly self-correct. @@ -270,7 +285,9 @@ (setq hscroll-margin 2 hscroll-step 1) -;;; Mouse Scroll +;;; Mouse + +(setq mouse-yank-at-point nil) ;; Emacs 29 (when (memq 'context-menu minimal-emacs-ui-features) @@ -278,6 +295,7 @@ (add-hook 'after-init-hook #'context-menu-mode))) ;;; Cursor + ;; The blinking cursor is distracting and interferes with cursor settings in ;; some minor modes that try to change it buffer-locally (e.g., Treemacs). ;; Additionally, it can cause freezing, especially on macOS, for users with @@ -296,18 +314,16 @@ (setq-default cursor-in-non-selected-windows nil) (setq highlight-nonselected-windows nil) -;;; Annoyances +;;; Text editing, indent, font, and formatting -;; No beeping or blinking -(setq visible-bell nil) -(setq ring-bell-function #'ignore) +;; Avoid automatic frame resizing when adjusting settings. +(setq global-text-scale-adjust-resizes-frames nil) ;; This controls how long Emacs will blink to show the deleted pairs with ;; `delete-pair'. A longer delay can be annoying as it causes a noticeable pause ;; after each deletion, disrupting the flow of editing. (setq delete-pair-blink-delay 0.03) -;;; Indent and formatting (setq-default left-fringe-width 8) (setq-default right-fringe-width 8) @@ -334,6 +350,9 @@ ;; Enable indentation and completion using the TAB key (setq-default tab-always-indent nil) +;; Perf: Reduce command completion overhead. +(setq read-extended-command-predicate #'command-completion-default-include-p) + ;; Enable multi-line commenting which ensures that `comment-indent-new-line' ;; properly continues comments onto new lines, which is useful for writing ;; longer comments or docstrings that span multiple lines. @@ -363,7 +382,7 @@ ;; Eliminate delay before highlighting search matches (setq lazy-highlight-initial-delay 0) -;;; Mode line +;;; Modeline ;; Setting `display-time-default-load-average' to nil makes Emacs omit the load ;; average information from the mode line. @@ -383,17 +402,37 @@ ;;; Dired (setq dired-free-space nil + dired-dwim-target t ; Propose a target for intelligent moving or copying. dired-deletion-confirmer 'y-or-n-p dired-filter-verbose nil - dired-clean-confirm-killing-deleted-buffers nil dired-recursive-deletes 'top - dired-recursive-copies 'always - dired-create-destination-dirs 'ask) + dired-recursive-copies 'always + dired-create-destination-dirs 'ask + ;; Revert the Dired buffer without prompting. + dired-auto-revert-buffer #'dired-buffer-stale-p + image-dired-thumb-size 150) -;;; Font / Text scale +(setq dired-vc-rename-file t) -;; Avoid automatic frame resizing when adjusting settings. -(setq global-text-scale-adjust-resizes-frames nil) +;; Disable the prompt about killing the Dired buffer for a deleted directory. +(setq dired-clean-confirm-killing-deleted-buffers nil) + +;; dired-omit-mode +(setq dired-omit-verbose nil) +(setq dired-omit-files (concat "\\`[.]\\'" + "\\|\\(?:\\.js\\)?\\.meta\\'" + "\\|\\.\\(?:elc|a\\|o\\|pyc\\|pyo\\|swp\\|class\\)\\'" + "\\|^\\.DS_Store\\'" + "\\|^\\.\\(?:svn\\|git\\)\\'" + "\\|^\\.ccls-cache\\'" + "\\|^__pycache__\\'" + "\\|^\\.project\\(?:ile\\)?\\'" + "\\|^flycheck_.*" + "\\|^flymake_.*")) + +;; ls-lisp +(setq ls-lisp-verbosity nil) +(setq ls-lisp-dirs-first t) ;;; Ediff @@ -401,9 +440,111 @@ (setq ediff-window-setup-function #'ediff-setup-windows-plain ediff-split-window-function #'split-window-horizontally) -;;; Load post-init.el +;;; Help + +;; Enhance `apropos' and related functions to perform more extensive searches +(setq apropos-do-all t) + +;; Fixes #11: Prevents help command completion from triggering autoload. +;; (e.g., apropos-command, apropos-variable, apropos...) +;; Loading additional files for completion can slow down help commands +;; and may unintentionally execute initialization code from some libraries. +(setq help-enable-completion-autoload nil) +(setq help-enable-autoload nil) +(setq help-enable-symbol-autoload nil) +(setq help-window-select t) + +;;; Eglot + +(setq eglot-sync-connect 1 + eglot-autoshutdown t) + +;; Activate Eglot in cross-referenced non-project files +(setq eglot-extend-to-xref t) + +;; Eglot optimization +(setq jsonrpc-event-hook nil) +(setq eglot-events-buffer-size 0) +(setq eglot-report-progress nil) ; Prevent Eglot minibuffer spam + +;; Eglot optimization: Disable `eglot-events-buffer' to maintain consistent +;; performance in long-running Emacs sessions. By default, it retains 2,000,000 +;; lines, and each new event triggers pretty-printing of the entire buffer, +;; leading to a gradual performance decline. +(setq eglot-events-buffer-config '(:size 0 :format full)) + +;;; Flymake + +(setq flymake-fringe-indicator-position 'left-fringe) +(setq flymake-show-diagnostics-at-end-of-line nil) + +;; Suppress the display of Flymake error counters when there are no errors. +(setq flymake-suppress-zero-counters t) + +;; Disable wrapping around when navigating Flymake errors. +(setq flymake-wrap-around nil) + +;;; hl-line-mode + +;; Restrict `hl-line-mode' highlighting to the current window, reducing visual +;; clutter and slightly improving `hl-line-mode' performance. +(setq hl-line-sticky-flag nil) +(setq global-hl-line-sticky-flag nil) + +;;; icomplete + +;; Do not delay displaying completion candidates in `fido-mode' or +;; `fido-vertical-mode' +(setq icomplete-compute-delay 0.01) + +;;; flyspell + +(setq flyspell-issue-welcome-flag nil) + +;; Greatly improves flyspell performance by preventing messages from being +;; displayed for each word when checking the entire buffer. +(setq flyspell-issue-message-flag nil) + +;;; ispell + +;; In Emacs 30 and newer, disable Ispell completion to avoid annotation errors +;; when no `ispell' dictionary is set. +(setq text-mode-ispell-word-completion nil) + +(setq ispell-silently-savep t) + +;;; ibuffer + +(setq ibuffer-formats + '((mark modified read-only locked + " " (name 40 40 :left :elide) + " " (size 8 -1 :right) + " " (mode 18 18 :left :elide) " " filename-and-process) + (mark " " (name 16 -1) " " filename))) + +;;; xref + +;; Enable completion in the minibuffer instead of the definitions buffer +(setq xref-show-definitions-function #'xref-show-definitions-completing-read + xref-show-xrefs-function #'xref-show-definitions-completing-read) + +;;; abbrev + +;; Ensure `abbrev_defs` is stored in the correct location when +;; `user-emacs-directory` is modified, as it defaults to ~/.emacs.d/abbrev_defs +;; regardless of the change. +(setq abbrev-file-name (expand-file-name "abbrev_defs" user-emacs-directory)) + +(setq save-abbrevs 'silently) + +;;; dabbrev + +(setq dabbrev-upcase-means-case-search t) +(setq dabbrev-ignored-buffer-modes + '(archive-mode image-mode docview-mode tags-table-mode pdf-view-mode)) + +;;; Load post init (minimal-emacs-load-user-init "post-init.el") (provide 'init) - ;;; init.el ends here