From 9cc8020ab02c50f383fdb53fe1915199546f2aba Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Sat, 4 Jan 2025 23:47:45 +0100 Subject: emacs: Configure csv-mode variables --- .config/emacs/modules/mm-editing.el | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to '.config/emacs/modules/mm-editing.el') diff --git a/.config/emacs/modules/mm-editing.el b/.config/emacs/modules/mm-editing.el index 42fdb21..2bc71e5 100644 --- a/.config/emacs/modules/mm-editing.el +++ b/.config/emacs/modules/mm-editing.el @@ -313,10 +313,15 @@ is as described by `emmet-expand-line'." ;;; 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)) + ;;; Mode-Specific Configurations -- cgit v1.2.3 From f93579ccddf3f3f8a5a50280dd2722fee8f71f3d Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Sat, 4 Jan 2025 23:48:10 +0100 Subject: emacs: Introduce number-format-mode.el --- .config/emacs/modules/mm-editing.el | 8 ++ .config/emacs/site-lisp/number-format-mode.el | 129 ++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 .config/emacs/site-lisp/number-format-mode.el (limited to '.config/emacs/modules/mm-editing.el') diff --git a/.config/emacs/modules/mm-editing.el b/.config/emacs/modules/mm-editing.el index 2bc71e5..c6c8532 100644 --- a/.config/emacs/modules/mm-editing.el +++ b/.config/emacs/modules/mm-editing.el @@ -309,6 +309,14 @@ is as described by `emmet-expand-line'." :custom (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 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 -- cgit v1.2.3 From f0c07760608258f8de50762bb33d05ef4f268989 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Sat, 8 Mar 2025 20:31:11 +0100 Subject: emacs: Use ‘with-eval-after-load’ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .config/emacs/modules/mm-editing.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to '.config/emacs/modules/mm-editing.el') diff --git a/.config/emacs/modules/mm-editing.el b/.config/emacs/modules/mm-editing.el index c6c8532..dda5352 100644 --- a/.config/emacs/modules/mm-editing.el +++ b/.config/emacs/modules/mm-editing.el @@ -222,8 +222,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 "" :remove)) + (with-eval-after-load 'multiple-cursors-core + (keymap-unset mc/keymap "" :remove))) ;;; Increment Numbers -- cgit v1.2.3 From 4fb5d4159586e84b8c062d1734d2041a8175b8b5 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Thu, 29 May 2025 23:38:12 +0200 Subject: emacs: Configure comments in mhtml mode --- .config/emacs/modules/mm-editing.el | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to '.config/emacs/modules/mm-editing.el') diff --git a/.config/emacs/modules/mm-editing.el b/.config/emacs/modules/mm-editing.el index dda5352..0506b65 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 -- cgit v1.2.3 From 03823f5b464b8c416e2cd625710f34e333daa682 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Wed, 4 Jun 2025 18:04:17 +0200 Subject: emacs: Add xcompose-mode --- .config/emacs/modules/mm-editing.el | 7 +++++++ 1 file changed, 7 insertions(+) (limited to '.config/emacs/modules/mm-editing.el') diff --git a/.config/emacs/modules/mm-editing.el b/.config/emacs/modules/mm-editing.el index 0506b65..d1cdcc0 100644 --- a/.config/emacs/modules/mm-editing.el +++ b/.config/emacs/modules/mm-editing.el @@ -334,6 +334,13 @@ is as described by `emmet-expand-line'." (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 -- cgit v1.2.3 From 401756f444a3becbcb88fe6f538ea62c79866b1d Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Wed, 4 Jun 2025 18:07:00 +0200 Subject: emacs: Add support for *.mom --- .config/emacs/modules/mm-editing.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to '.config/emacs/modules/mm-editing.el') diff --git a/.config/emacs/modules/mm-editing.el b/.config/emacs/modules/mm-editing.el index d1cdcc0..50be4ee 100644 --- a/.config/emacs/modules/mm-editing.el +++ b/.config/emacs/modules/mm-editing.el @@ -356,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 -- cgit v1.2.3