Skip to content

Latest commit

 

History

History
113 lines (61 loc) · 3.51 KB

Emacs-Tips-Cleaning.org

File metadata and controls

113 lines (61 loc) · 3.51 KB

Teach Emacs to Keep Your Folders Clean

Have you noticed these files before?

  • Emacs.org~
  • #Emacs.org#
  • .#Emacs.org
  • ~/.emacs.d/.lsp-session-v1
  • ~/.emacs.d/transient/
  • ~/.emacs.d/projectile-bookmarks.eld

Emacs and the packages we use create a lot of “temporary” files for various reasons.

Let’s keep our folders clean!

Backup Files

Everyone sees these files, they get created when you edit a file and save it. (This doesn’t happen in VC-controlled repos, though!)

(setq backup-directory-alist `(("." . ,(expand-file-name "tmp/backups/" user-emacs-directory))))

NOTE: You’ll have to clean up any previous backup files that were created!

You can also turn off this behavior entirely:

(setq make-backup-files nil)

More info: https://www.gnu.org/software/emacs/manual/html_node/emacs/Backup.html

Auto Save Files

auto-save-mode will create temporary files in the same folder as edited files: #Emacs.org#

You can change this using auto-save-file-name-transforms:

;; auto-save-mode doesn't create the path automatically!
(make-directory (expand-file-name "tmp/auto-saves/" user-emacs-directory) t)

(setq auto-save-list-file-prefix (expand-file-name "tmp/auto-saves/sessions/" user-emacs-directory)
      auto-save-file-name-transforms `((".*" ,(expand-file-name "tmp/auto-saves/" user-emacs-directory) t)))

More info: https://www.gnu.org/software/emacs/manual/html_node/emacs/Auto-Save-Files.html#Auto-Save-Files

Lock Files

These are the files that look like .#Emacs.org. They appear when you have unsaved changes to a file in a buffer!

Unfortunately these can’t be moved, but they can be disabled:

(setq create-lockfiles nil)

I don’t recommend setting this across your whole configuration but it can be useful in certain projects where these files cause trouble. Use directory-local variables for this!

More information: https://www.gnu.org/software/emacs/manual/html_node/elisp/File-Locks.html

Files created by packages

Projectile, lsp-mode, and other packages create their own files to store variables and state!

(setq projectile-known-projects-file (expand-file-name "tmp/projectile-bookmarks.eld" user-emacs-directory)
      lsp-session-file (expand-file-name "tmp/.lsp-session-v1" user-emacs-directory))

An easy fix

Many files are created relative to user-emacs-directory already! We can change it in our config:

(setq user-emacs-directory (expand-file-name "~/.cache/emacs"))

NOTE: You will need to move all of your current transient files to this new location!

However, this isn’t 100% reliable; you’ll need to chase down the files created by modes and packages you use.

No Littering!

One community-maintained solution for this is the package no-littering:

https://github.com/emacscollective/no-littering

Even if you don’t want to use it, the settings it applies are very useful to learn what you might want to set!

(use-package no-littering)

NOTE: You need to use this very early in your configuration otherwise it won’t work as expected!

Now you can add the var/ and etc/ folders in your user-emacs-directory to your .gitignore!