summaryrefslogtreecommitdiff
path: root/.config/emacs
diff options
context:
space:
mode:
authorThomas Voss <thomas.voss@humanwave.nl> 2025-06-11 14:59:58 +0200
committerThomas Voss <thomas.voss@humanwave.nl> 2025-06-11 14:59:58 +0200
commit03f5bb39561fad4d7745ff796b91f73933d99259 (patch)
treec02bf7e1b0657c555412c895f4efebdad777dde2 /.config/emacs
parentfad74e4384176f8cf98c86cfbf5c0468c0f49dce (diff)
parenteb28738864a4b3dfe4443e897ccdea21c0765dc0 (diff)
Merge branch 'master' of github.com:Mango0x45/dotfiles
Diffstat (limited to '.config/emacs')
-rw-r--r--.config/emacs/init.el1
-rw-r--r--.config/emacs/modules/mm-buffer-menu.el15
-rw-r--r--.config/emacs/modules/mm-editing.el39
-rw-r--r--.config/emacs/modules/mm-modeline.el7
-rw-r--r--.config/emacs/modules/mm-projects.el27
-rw-r--r--.config/emacs/modules/mm-theme.el9
-rw-r--r--.config/emacs/site-lisp/number-format-mode.el129
7 files changed, 200 insertions, 27 deletions
diff --git a/.config/emacs/init.el b/.config/emacs/init.el
index 9bb921c..a8620d6 100644
--- a/.config/emacs/init.el
+++ b/.config/emacs/init.el
@@ -306,6 +306,7 @@ the buffer without saving it."
;;; Load Modules
(require 'mm-abbrev) ; Text Expansion
+(require 'mm-buffer-menu) ; Buffer Menu
(require 'mm-calc) ; Emacs Calc
(require 'mm-completion) ; Completions
(require 'mm-dired) ; Dired
diff --git a/.config/emacs/modules/mm-buffer-menu.el b/.config/emacs/modules/mm-buffer-menu.el
new file mode 100644
index 0000000..7b725c6
--- /dev/null
+++ b/.config/emacs/modules/mm-buffer-menu.el
@@ -0,0 +1,15 @@
+;;; mm-buffer-menu.el --- Buffer Menu configuration -*- lexical-binding: t; -*-
+
+(defun mm-Buffer-menu-delete-all ()
+ "Mark all buffers for deletion."
+ (interactive nil Buffer-menu-mode)
+ (save-excursion
+ (goto-char (point-min))
+ (while (not (eobp))
+ (Buffer-menu-delete))))
+
+(use-package buff-menu
+ :bind ( :map Buffer-menu-mode-map
+ ("D" . mm-Buffer-menu-delete-all)))
+
+(provide 'mm-buffer-menu) \ No newline at end of file
diff --git a/.config/emacs/modules/mm-editing.el b/.config/emacs/modules/mm-editing.el
index 42fdb21..50be4ee 100644
--- a/.config/emacs/modules/mm-editing.el
+++ b/.config/emacs/modules/mm-editing.el
@@ -125,18 +125,22 @@ those should be listed in `mm-editing-indentation-settings'."
;;; Code Commenting
-(defun mm-c-comment-no-leading-stars ()
+(defun mm-c-comment-no-continue ()
(setq-local comment-continue " "))
+(defun mm-mhtml-comment-no-continue ()
+ (setq-local comment-continue " "))
+
(use-package newcomment
:custom
(comment-style 'multi-line)
:config
(dolist (mode '(c-mode c++-mode))
- (add-hook (mm-mode-to-hook mode) #'mm-c-comment-no-leading-stars)
+ (add-hook (mm-mode-to-hook mode) #'mm-c-comment-no-continue)
(when-let ((ts-mode (mm-mode-to-ts-mode mode))
((fboundp ts-mode)))
- (add-hook (mm-mode-to-hook ts-mode) #'mm-c-comment-no-leading-stars))))
+ (add-hook (mm-mode-to-hook ts-mode) #'mm-c-comment-no-leading-stars)))
+ (add-hook 'mhtml-mode #'mm-mhtml-comment-no-continue))
;;; Multiple Cursors
@@ -222,8 +226,8 @@ and *Messages* buffer. This forces that to not happen."
helpful-symbol
helpful-variable))
(add-to-list 'mc/cmds-to-run-once command))))
- :config
- (keymap-unset mc/keymap "<return>" :remove))
+ (with-eval-after-load 'multiple-cursors-core
+ (keymap-unset mc/keymap "<return>" :remove)))
;;; Increment Numbers
@@ -310,13 +314,33 @@ is as described by `emmet-expand-line'."
(emmet-self-closing-tag-style ""))
+;;; Number Formatting
+
+(use-package number-format-mode
+ :commands ( number-format-buffer number-format-region
+ number-unformat-buffer number-unformat-region
+ number-format-mode))
+
+
;;; Additional Major Modes
(use-package awk-ts-mode :ensure t)
-(use-package csv-mode :ensure t)
(use-package git-modes :ensure t)
(use-package sed-mode :ensure t)
+(use-package csv-mode
+ :ensure t
+ :custom
+ (csv-align-style 'auto)
+ (csv-align-padding 2))
+
+(use-package xcompose-mode
+ :vc ( :url "https://git.thomasvoss.com/xcompose-mode"
+ :branch "master"
+ :rev :newest
+ :vc-backend Git)
+ :ensure t)
+
;;; Mode-Specific Configurations
@@ -332,6 +356,7 @@ is as described by `emmet-expand-line'."
;;; Add Missing Extensions
-(add-to-list 'auto-mode-alist '("\\.tmac\\'" . nroff-mode))
+(dolist (pattern '("\\.tmac\\'" "\\.mom\\'"))
+ (add-to-list 'auto-mode-alist (cons pattern 'nroff-mode)))
(provide 'mm-editing) \ No newline at end of file
diff --git a/.config/emacs/modules/mm-modeline.el b/.config/emacs/modules/mm-modeline.el
index 2981307..d1ec6f0 100644
--- a/.config/emacs/modules/mm-modeline.el
+++ b/.config/emacs/modules/mm-modeline.el
@@ -38,7 +38,8 @@
(propertize " (modified)" 'face 'mm-modeline-buffer-modified-face)))
(defconst mm-modeline-mode-acronyms
- '("css" "csv" "gsp" "html" "json" "mhtml" "rfc" "scss" "toml" "tsv" "url")
+ '("css" "csv" "gsp" "html" "json" "mhtml" "rfc" "scss" "sql" "toml" "tsv"
+ "url")
"List of acronyms in major mode names that should be capitalized.")
(defconst mm-modeline-remap-alist
@@ -50,7 +51,9 @@
("Gmake" . "GMake")
("Imake" . "IMake")
("Js" . "JavaScript")
- ("Ts Mode" . "Tree-Sitter Mode"))
+ ("Ts Mode" . "Tree-Sitter Mode")
+ ("Wdired" . "WDired")
+ ("Xcompose" . "XCompose"))
"Alist of substrings in major mode names that should be remapped.
Some major modes have substrings that would be better displayed in
another manner. For example expanding an abbreviation such as ‘Js’ to
diff --git a/.config/emacs/modules/mm-projects.el b/.config/emacs/modules/mm-projects.el
index be80789..00342f5 100644
--- a/.config/emacs/modules/mm-projects.el
+++ b/.config/emacs/modules/mm-projects.el
@@ -21,22 +21,17 @@ This is intended to be called interactively via
:config
(unless mm-darwin-p
(if-let ((repo-directory (getenv "REPODIR")))
- (with-eval-after-load 'async
- (async-start
- (lambda ()
- (require 'project)
- (let* ((list-dir
- (lambda (path)
- (directory-files path :full "\\`[^.]")))
- (directories
- (cl-loop for author in (funcall list-dir (getenv "REPODIR"))
- append (cl-loop for path in (funcall list-dir author)
- collect (list (concat path "/"))))))
- (with-temp-buffer
- (prin1 directories (current-buffer))
- (write-file project-list-file))))
- (lambda (_proc)
- (project--read-project-list))))
+ (let* ((list-dir
+ (lambda (path)
+ (directory-files path :full "\\`[^.]")))
+ (directories
+ (cl-loop for author in (funcall list-dir (getenv "REPODIR"))
+ append (cl-loop for path in (funcall list-dir author)
+ collect (list (concat path "/"))))))
+ (with-temp-buffer
+ (prin1 directories (current-buffer))
+ (write-file project-list-file))
+ (project--read-project-list))
(warn "The REPODIR environment variable is not set."))))
diff --git a/.config/emacs/modules/mm-theme.el b/.config/emacs/modules/mm-theme.el
index 53dc97b..95c96c9 100644
--- a/.config/emacs/modules/mm-theme.el
+++ b/.config/emacs/modules/mm-theme.el
@@ -16,7 +16,7 @@
"The default monospace font.
This is a plist containing a font name, -weight, and -height.")
-(defvar mm-theme-proportional-font '("SF Pro" :weight regular :height 162)
+(defvar mm-theme-proportional-font '("OpenSans" :weight regular :height 162)
"The default proportional font.
This is a plist containing a font name, -weight, and -height.")
@@ -203,9 +203,14 @@ See also the `mm-theme-background-opacity' variable."
;;; More Intuiative UI for Certain Modes
+(defun mm-disable-line-selection-mode ()
+ (line-selection-mode -1))
+
(use-package line-selection-mode
:hook ((bookmark-bmenu-mode dired-mode ibuffer-mode magit-repolist-mode)
- . line-selection-mode))
+ . line-selection-mode)
+ :config
+ (add-hook 'wdired-mode-hook #'mm-disable-line-selection-mode))
;;; Line Highlighting
diff --git a/.config/emacs/site-lisp/number-format-mode.el b/.config/emacs/site-lisp/number-format-mode.el
new file mode 100644
index 0000000..cbc5937
--- /dev/null
+++ b/.config/emacs/site-lisp/number-format-mode.el
@@ -0,0 +1,129 @@
+;;; number-format-mode.el --- Format numbers in the current buffer -*- lexical-binding: t; -*-
+
+(eval-when-compile
+ (require 'cl-macs)
+ (require 'seq))
+
+(defgroup number-format nil
+ "Customization group for `number-format'."
+ :group 'convenience) ; TODO: Is this the right group?
+
+(defcustom number-format-separator "."
+ "Thousands separator to use in numeric literals."
+ :type 'string
+ :package-version '(number-format-mode . "1.0.0")
+ :group 'number-format)
+
+(defcustom number-format-predicate nil
+ "Function determining if a number should be formatted.
+When formatting a number, this function is called with the START and END
+range of the number in the buffer. If this function returns non-nil the
+number is formatted.
+
+If this function is nil then all numbers are formatted."
+ :type 'function
+ :package-version '(number-format-mode . "1.0.0")
+ :group 'number-format)
+
+(defvar-local number-format--overlays (make-hash-table :test 'eq))
+(defconst number-format--regexp "\\b[0-9]\\{4,\\}\\b")
+
+(defun number-format--add-separators (s)
+ (while (string-match "\\(.*[0-9]\\)\\([0-9][0-9][0-9].*\\)" s)
+ (setq s (concat (match-string 1 s)
+ number-format-separator
+ (match-string 2 s))))
+ s)
+
+(defun number-format--adjust-overlays (ov _1 beg end &optional _2)
+ (let* ((ov-beg (overlay-start ov))
+ (ov-end (overlay-end ov))
+ (overlays (overlays-in ov-beg ov-end)))
+ (mapcar #'delete-overlay (gethash ov number-format--overlays))
+ (save-excursion
+ (goto-char ov-beg)
+ (if (looking-at number-format--regexp :inhibit-modify)
+ (puthash ov (number-format--at-range ov-beg ov-end)
+ number-format--overlays)
+ (delete-overlay ov)
+ (remhash ov number-format--overlays)))))
+
+(defun number-format--at-range (beg end)
+ (when (or (null number-format-predicate)
+ (funcall number-format-predicate beg end))
+ (let* ((offsets [3 1 2])
+ (len (- end beg))
+ (off (aref offsets (mod len 3))))
+ (goto-char (+ beg off)))
+ (let (overlays)
+ (while (< (point) end)
+ (let* ((group-end (+ (point) 3))
+ (ov (make-overlay (point) group-end)))
+ (overlay-put ov 'before-string ".")
+ (overlay-put ov 'evaporate t)
+ (push ov overlays)
+ (goto-char group-end)))
+ overlays)))
+
+(defun number-format--jit-lock (beg end)
+ (let ((line-beg (save-excursion (goto-char beg) (line-beginning-position)))
+ (line-end (save-excursion (goto-char end) (line-end-position))))
+ (number-unformat-region line-beg line-end)
+ (number-format-region line-beg line-end)))
+
+;;;###autoload
+(defun number-format-region (beg end)
+ "Format numbers between BEG and END.
+When called interactively, format numbers in the active region."
+ (interactive "r")
+ (save-excursion
+ (goto-char beg)
+ (save-restriction
+ (narrow-to-region beg end)
+ (number-unformat-region beg end)
+ (while (re-search-forward number-format--regexp nil :noerror)
+ (save-excursion
+ (cl-destructuring-bind (beg end) (match-data)
+ (let ((ov (make-overlay beg end nil nil :rear-advance)))
+ (overlay-put ov 'evaporate t)
+ (dolist (sym '(insert-behind-hooks
+ insert-in-front-hooks
+ modification-hooks))
+ (overlay-put ov sym '(number-format--adjust-overlays)))
+ (puthash ov (number-format--at-range beg end)
+ number-format--overlays))))))))
+
+;;;###autoload
+(defun number-unformat-region (beg end)
+ "Unformat numbers between BEG and END.
+When called interactively, unformat numbers in the active region."
+ (interactive "r")
+ (dolist (ov (overlays-in beg end))
+ (when-let ((overlays (gethash ov number-format--overlays)))
+ (mapcar #'delete-overlay overlays)
+ (remhash ov number-format--overlays)
+ (delete-overlay ov))))
+
+;;;###autoload
+(defun number-format-buffer ()
+ "Format numbers in the current buffer."
+ (interactive)
+ (number-format-region (point-min) (point-max)))
+
+;;;###autoload
+(defun number-unformat-buffer ()
+ "Unformat numbers in the current buffer."
+ (interactive)
+ (number-unformat-region (point-min) (point-max)))
+
+;;;###autoload
+(define-minor-mode number-format-mode
+ "TODO"
+ :lighter " Number-Format"
+ :group 'number-format
+ (number-unformat-buffer)
+ (if number-format-mode
+ (jit-lock-register #'number-format--jit-lock)
+ (jit-lock-unregister #'number-format--jit-lock)))
+
+(provide 'number-format) \ No newline at end of file