emacs_keep_it_clean.html (5524B)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <!-- Sep 03, 2024 --> 5 <meta charset="utf-8" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1" /> 7 <title>emacs: keep it clean</title> 8 <meta name="author" content="Vincent Demeester" /> 9 <meta name="generator" content="Org Mode" /> 10 <link rel='icon' type='image/x-icon' href='/images/favicon.ico'/> 11 <meta name='viewport' content='width=device-width, initial-scale=1'> 12 <link rel='stylesheet' href='/css/new.css' type='text/css'/> 13 <link rel='stylesheet' href='/css/syntax.css' type='text/css'/> 14 <link href='/index.xml' rel='alternate' type='application/rss+xml' title='Vincent Demeester' /> 15 </head> 16 <body> 17 <main id="content" class="content"> 18 <header> 19 <h1 class="title">emacs: keep it clean</h1> 20 </header><p> 21 I want to keep the <code>~/.emacs.d</code> folder as clean as possible. The <a href="https://github.com/emacscollective/no-littering">no-littering</a> project 22 helps wit that. 23 </p> 24 25 <blockquote> 26 <p> 27 The default paths used to store configuration files and persistent data are not consistent 28 across Emacs packages. This isn’t just a problem with third-party packages but even with 29 built-in packages. 30 </p> 31 32 <p> 33 Some packages put these files directly in user-emacs-directory or $HOME or in a 34 subdirectory of either of the two or elsewhere. Furthermore sometimes file names are used 35 that don’t provide any insight into what package might have created them. 36 </p> 37 38 <p> 39 This package sets out to fix this by changing the values of path variables to put 40 configuration files in no-littering-etc-directory (defaulting to ~/.emacs.d/etc/) and 41 persistent data files in no-littering-var-directory (defaulting to ~/.emacs.d/var/), and 42 by using descriptive file names and subdirectories when appropriate. This is similar to a 43 color-theme; a “path-theme” if you will. 44 </p> 45 </blockquote> 46 47 <p> 48 Let’s configure it <b>and</b> make sure we load it as soon as possible (hence the 49 <code>config/00-clean.el</code>). 50 </p> 51 52 <p> 53 As I am loading <code>recentf</code> during this cleanup part, I need to setup recentf before 😅. In 54 a gist: 55 </p> 56 57 <ul class="org-ul"> 58 <li>I keep about 200 items.</li> 59 <li>I don’t want the <i>auto-cleanup</i> of recentf items to happen when the mode is loaded (a.k.a. 60 at startup). It is configured to run after 360s of idle time.</li> 61 <li>I don’t really want to show the Nth number of the items.</li> 62 <li>I don’t want recentf to save remote, <code>su</code> and <code>sudo</code> items (<code>ssh:</code>, <code>sudo:</code>, …)</li> 63 </ul> 64 65 <div class="org-src-container"> 66 <pre class="src src-emacs-lisp">;;; 00-clean.el --- -*- lexical-binding: t; -*- 67 ;;; Commentary: 68 ;;; no-littering and recentf configurations 69 ;;; Note: this file is autogenerated from an org-mode file. 70 ;;; Code: 71 (use-package recentf 72 :config 73 (setq recentf-max-saved-items 200 74 recentf-auto-cleanup 360 75 recentf-show-file-shortcuts-flag nil) 76 (recentf-mode 1) 77 (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:") 78 ;; Magic advice to rename entries in recentf when moving files in 79 ;; dired. 80 (defun rjs/recentf-rename-notify (oldname newname &rest args) 81 (if (file-directory-p newname) 82 (rjs/recentf-rename-directory oldname newname) 83 (rjs/recentf-rename-file oldname newname))) 84 85 (defun rjs/recentf-rename-file (oldname newname) 86 (setq recentf-list 87 (mapcar (lambda (name) 88 (if (string-equal name oldname) 89 newname 90 oldname)) 91 recentf-list)) 92 recentf-cleanup) 93 94 (defun rjs/recentf-rename-directory (oldname newname) 95 ;; oldname, newname and all entries of recentf-list should already 96 ;; be absolute and normalised so I think this can just test whether 97 ;; oldname is a prefix of the element. 98 (setq recentf-list 99 (mapcar (lambda (name) 100 (if (string-prefix-p oldname name) 101 (concat newname (substring name (length oldname))) 102 name)) 103 recentf-list)) 104 recentf-cleanup) 105 106 (advice-add 'dired-rename-file :after #'rjs/recentf-rename-notify)) 107 108 (use-package no-littering ; Keep .emacs.d clean 109 :config 110 (require 'recentf) 111 (add-to-list 'recentf-exclude no-littering-var-directory) 112 (add-to-list 'recentf-exclude no-littering-etc-directory) 113 114 ;; Move this in its own thing 115 (setq 116 create-lockfiles nil 117 delete-old-versions t 118 kept-new-versions 6 119 kept-old-versions 2 120 version-control t) 121 122 (setq 123 backup-directory-alist 124 `((".*" . ,(no-littering-expand-var-file-name "backup/"))) 125 auto-save-file-name-transforms 126 `((".*" ,(no-littering-expand-var-file-name "auto-save/") t)))) 127 128 (provide '00-clean) 129 ;;; 00-clean.el ends here 130 </pre> 131 </div> 132 </main> 133 <footer id="postamble" class="status"> 134 <footer> 135 <small><a href="/" rel="history">Index</a> • <a href="/sitemap.html">Sitemap</a> • <a href="https://dl.sbr.pm/">Files</a></small><br/> 136 <small class='questions'>Questions, comments ? Please use my <a href="https://lists.sr.ht/~vdemeester/public-inbox">public inbox</a> by sending a plain-text email to <a href="mailto:~vdemeester/public-inbox@lists.sr.ht">~vdemeester/public-inbox@lists.sr.ht</a>.</small><br/> 137 <small class='copyright'> 138 Content and design by Vincent Demeester 139 (<a rel='licence' href='http://creativecommons.org/licenses/by-nc-sa/3.0/'>Some rights reserved</a>) 140 </small><br /> 141 </footer> 142 </footer> 143 </body> 144 </html>