Added page Emacs

This commit is contained in:
2025-10-31 23:39:50 +01:00
parent e597e8f981
commit 3b9f0c91b9

View File

@@ -0,0 +1,515 @@
+++
title = "init.el.org"
author = ["Anne"]
date = 2025-10-31T00:00:00+01:00
lastmod = 2025-10-31T23:38:58+01:00
tags = ["emacs"]
draft = false
+++
## My Emacs configuration {#my-emacs-configuration}
More about [the Emacs initialization file](https://www.gnu.org/software/emacs/manual/html_node/emacs/Init-File.html)
`~/.emacs.d/init.el` is generated from this org file with [Org-babel](https://orgmode.org/worg/org-contrib/babel/)
How to tangle: `M-x org-babel-tangle` or `C-c C-v t`
My Emacs repository: [git.minded.net/anne/emacs](https://git.minded.net/anne/emacs)
The source version of this file: [git.minded.net/anne/emacs/src/branch/main/init.el.org](https://git.minded.net/anne/emacs/src/branch/main/init.el.org?display=source)
Or view this file on my blog: [blog.minded.net/emacs/init.el.org](https://blog.minded.net/emacs)
### About me {#about-me}
```elisp
(setq user-full-name "Anne"
user-mail-address "anne@minded.net")
```
### Use-package {#use-package}
<https://github.com/jwiegley/use-package>
```elisp
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(package-initialize)
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(require 'use-package)
(setq use-package-always-ensure 't)
```
### Reload configuration {#reload-configuration}
`M-x reload-emacs-init`
```elisp
(defun reload-emacs-init ()
(interactive)
(load-file "~/.emacs.d/init.el")
(message "Configuarion reloaded!"))
```
### Customizations file {#customizations-file}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Saving-Customizations.html>
You can choose to save customizations somewhere other than your initialization file.
```elisp
(setq custom-file "~/.emacs.d/custom.el")
(load custom-file 'noerror 'nomessage)
```
### TRAMP {#tramp}
<https://www.gnu.org/software/emacs/manual/html_node/tramp/Auto_002dsave-File-Lock-and-Backup.html>
```elisp
(setq tramp-allow-unsafe-temporary-files t)
```
### zone-mode {#zone-mode}
```elisp
(add-to-list 'auto-mode-alist '("/etc/bind/zones/" . zone-mode))
```
### Lock files {#lock-files}
<https://www.gnu.org/software/emacs/manual/html_node/elisp/File-Locks.html>
If create-lockfiles is nil, Emacs does not lock files.
```elisp
(setq create-lockfiles nil)
```
### Yes-or-no prompts {#yes-or-no-prompts}
<https://www.emacswiki.org/emacs/YesOrNoP>
```elispx1
(defalias 'yes-or-no-p 'y-or-n-p)
```
### Keeping buffers up-to-date {#keeping-buffers-up-to-date}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Auto-Revert.html>
```elisp
(global-auto-revert-mode 1)
(setq global-auto-revert-non-file-buffers t)
```
### Disable startup screen {#disable-startup-screen}
<https://www.gnu.org/software/emacs/manual/html_node/elisp/Startup-Summary.html>
```elisp
(setq inhibit-startup-screen nil)
```
### What to display {#what-to-display}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Frames.html>
I do like the menu bar after all.
```elisp
(tool-bar-mode -1)
;;(menu-bar-mode -1)
(tooltip-mode -1)
```
### Mode line column and line numbers {#mode-line-column-and-line-numbers}
<https://www.gnu.org/software/emacs/manual/html_node/efaq/Displaying-the-current-line-or-column.html>
```elisp
(column-number-mode t)
```
### Theme {#theme}
```elisp
(use-package ef-themes
:ensure t
:demand t
:config
(ef-themes-select 'ef-dream))
```
```elisp
(custom-set-faces
'(helm-buffer-directory ((t (:extend t :background "dim gray" :foreground "DarkRed"))))
'(helm-ff-directory ((t (:extend t :background "dim gray" :foreground "DarkRed"))))
'(org-agenda-date-today ((t (:inherit org-agenda-date :underline nil))))
'(menu ((t (:background "magenta")))))
```
### Mood-line {#mood-line}
<https://gitlab.com/jessieh/mood-line>
A lightweight, drop-in replacement for the default Emacs mode line configuration.
```elisp
(use-package mood-line
:config (mood-line-mode)
;;(setq mood-line-format mood-line-format-default)
(setq mood-line-format mood-line-format-default-extended)
(setq mood-line-glyph-alist mood-line-glyphs-unicode))
```
### Suppress dialog boxes {#suppress-dialog-boxes}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Dialog-Boxes.html>
```elisp
(setq use-dialog-box nil)
```
### Sentences {#sentences}
<https://www.gnu.org/software/emacs/manual/html_node/efaq/Filling-paragraphs-with-a-single-space.html>
```elisp
(setq sentence-end-double-space nil)
```
### Minibuffer {#minibuffer}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Minibuffer-Edit.html>
```elisp
(setq resize-mini-windows t)
(setq max-mini-window-height 0.5)
```
### Word wrap {#word-wrap}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Visual-Line-Mode.html>
```elisp
(add-hook 'text-mode-hook 'visual-line-mode)
```
### Mouse support {#mouse-support}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Mouse-Input.html>
```elisp
(xterm-mouse-mode 1)
(mouse-wheel-mode 1)
(context-menu-mode 1)
```
### Kill-line {#kill-line}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Killing-by-Lines.html>
If non-nil, `kill-line` with no arg at start of line kills the whole line.
```elisp
(setq kill-whole-line t)
```
### Indentation {#indentation}
<https://www.gnu.org/software/emacs/manual/html_node/eintr/Indent-Tabs-Mode.html>
```elisp
(setq-default indent-tabs-mode nil)
```
### Electric pair mode {#electric-pair-mode}
<https://emacsdocs.org/docs/emacs/Matching>
```elisp
(electric-pair-mode 1)
```
### Overwrite highlighted region {#overwrite-highlighted-region}
<https://www.gnu.org/software/emacs/manual/html_node/efaq/Replacing-highlighted-text.html>
```elisp
(delete-selection-mode t)
```
### Scrolling {#scrolling}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Scrolling.html>
```elisp
(setq scroll-error-top-bottom t)
```
### Cursor {#cursor}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Cursor-Display.html>
```elisp
(global-hl-line-mode t)
```
### Window handling {#window-handling}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Window-Convenience.html>
Winner mode is a global minor mode that records the changes in the window configuration (i.e., how the frames are partitioned into windows), so that you can undo them.
```elisp
(winner-mode 1)
```
The Windmove package defines commands for moving directionally between neighboring windows in a frame.
```elisp
(use-package windmove
:bind
(("<f2> <right>" . windmove-right)
("<f2> <left>" . windmove-left)
("<f2> <up>" . windmove-up)
("<f2> <down>" . windmove-down)))
```
### Crux {#crux}
<https://github.com/bbatsov/crux>
A Collection of Ridiculously Useful eXtensions for Emacs. crux bundles many useful interactive commands to enhance your overall Emacs experience.
```elisp
(use-package crux
:bind
("C-a" . crux-move-beginning-of-line)
("C-c o" . crux-open-with)
("C-k" . crux-kill-whole-line)
("C-c f" . crux-cleanup-buffer-or-region)
("C-x C-a" . crux-sudo-edit)
:config
(crux-with-region-or-buffer indent-region)
(crux-with-region-or-buffer untabify)
(crux-with-region-or-line comment-or-uncomment-region))
```
### Dired {#dired}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired.html>
```elisp
(put 'dired-find-alternate-file 'disabled nil)
(setq dired-listing-switches "-agho --group-directories-first")
```
### Kill buffer {#kill-buffer}
```elisp
(global-set-key (kbd "C-x k") 'kill-current-buffer)
```
### Unset C-z {#unset-c-z}
Unset C-z which is bound to \`suspend-frame' by default.
```elisp
(global-unset-key (kbd "C-z"))
```
### Backups {#backups}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Backup.html>
Automatically backup buffers/files into the ~.emacs.d/backup/ directory.
```elisp
(setq backup-directory-alist '(("." . "~/.emacs.d/backups")))
(setq backup-by-copying t ; Don't delink hardlinks
version-control t ; Use version numbers on backups
delete-old-versions t ; Automatically delete excess backups
kept-new-versions 20 ; how many of the newest versions to keep
kept-old-versions 5) ; and how many of the old
```
### backup-walker {#backup-walker}
<https://github.com/lewang/backup-walker>
```elisp
(use-package backup-walker
:bind
("C-c b" . backup-walker-start))
```
### Auto save {#auto-save}
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Auto-Save-Control.html>
```elisp
(setq auto-save-timeout 20 ; number of seconds idle time before auto-save (default: 30)
auto-save-interval 200) ; number of keystrokes between auto-saves (default: 300)
```
### Lastmod time stamp {#lastmod-time-stamp}
```elisp
(setq time-stamp-start "\\(^:last_modified: \\\\?[\[<]+\\|^:LASTMOD: \\\\?[\[<]+\\|^#\\+lastmod: \\\\?[\[<]+\\|^;; lastmod: \\\\?[\[<]+\\)")
(setq time-stamp-end "\\\\?[\]>]")
(setq time-stamp-format "%Y-%02m-%02d %3a %02H:%02M")
(setq time-stamp-limit 12)
(add-hook 'before-save-hook 'time-stamp)
(setq time-stamp-active t)
```
### Magit {#magit}
<https://magit.vc/>
<https://systemcrafters.net/mastering-git-with-magit/introduction/>
```elisp
(use-package magit
:ensure t)
```
### Which-key {#which-key}
<https://github.com/justbur/emacs-which-key>
which-key is a minor mode for Emacs that displays the key bindings following your currently entered incomplete command (a prefix) in a popup.
```elisp
(use-package which-key
:config
(which-key-mode)
(setq which-key-idle-delay 0.5
which-key-idle-secondary-delay 0.5)
(which-key-setup-side-window-bottom))
```
### Helm {#helm}
<https://emacs-helm.github.io/helm/>
Imagine a life without Helm...
```elisp
(use-package helm
:ensure t
:config
;;(require 'helm-config)
:init
(helm-mode 1)
(setq helm-split-window-inside-p t)
:diminish helm-mode
:bind (("M-x" . helm-M-x) ; Evaluate functions
("C-x C-f" . helm-find-files) ; Open or create files
("C-x b" . helm-mini) ; Select buffers
("C-x C-b" . helm-buffers-list)
("C-x C-r" . helm-recentf) ; Select recently saved files
("C-c i" . helm-imenu) ; Select document heading
("M-y" . helm-show-kill-ring) ; Show the kill ring
("C-x c g" . helm-do-grep-ag)
:map helm-map
("C-z" . helm-select-action)
("<tab>" . helm-execute-persistent-action)))
```
### Org-appear {#org-appear}
<https://github.com/awth13/org-appear>
Make invisible parts of Org elements appear visible.
```elisp
(use-package org-appear
:load-path "~/.emacs.d/etc/elisp/org-appear"
:hook (org-mode . org-appear-mode)
:init
(setq org-appear-autolinks t))
```
Hide emphasis markers by default.
```elisp
(setq org-hide-emphasis-markers t)
```
### Org-roam {#org-roam}
<https://github.com/org-roam/org-roam>
<https://www.orgroam.com/>
```elisp
(use-package org-roam
:ensure t
;;:init
;;(setq org-roam-v2-ack t)
:custom
(org-roam-directory "~/org/notes")
(org-roam-completion-everywhere t)
(org-roam-capture-templates
'(("d" "default" plain "%?"
:target (file+head "%<%Y%m%d>-${slug}.org"
":PROPERTIES:\n:CREATED: %U\n:LASTMOD: []\n:END:\n#+title: ${title}\n\n\n")
:unnarrowed t)))
:config
(org-roam-db-autosync-mode)
(setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:42}" 'face 'org-tag)))
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n i" . org-roam-node-insert)
("C-c n c" . org-roam-capture)
("C-c n d" . org-id-get-create)
("C-c n t" . org-roam-tag-add)
("C-c n u" . org-roam-tag-remove)
("C-c n a" . org-roam-alias-add)
("C-c n b" . org-roam-alias-remove)))
```