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') 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') 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 8561fa37f998dec3f8b1649b8d60de75aa6edd4d Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Sat, 4 Jan 2025 23:48:33 +0100 Subject: emacs: Configure wdired --- .config/emacs/modules/mm-modeline.el | 3 ++- .config/emacs/modules/mm-theme.el | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) (limited to '.config/emacs') diff --git a/.config/emacs/modules/mm-modeline.el b/.config/emacs/modules/mm-modeline.el index 2981307..eae4dce 100644 --- a/.config/emacs/modules/mm-modeline.el +++ b/.config/emacs/modules/mm-modeline.el @@ -50,7 +50,8 @@ ("Gmake" . "GMake") ("Imake" . "IMake") ("Js" . "JavaScript") - ("Ts Mode" . "Tree-Sitter Mode")) + ("Ts Mode" . "Tree-Sitter Mode") + ("Wdired" . "WDired")) "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-theme.el b/.config/emacs/modules/mm-theme.el index f4b9c9a..adb0bf6 100644 --- a/.config/emacs/modules/mm-theme.el +++ b/.config/emacs/modules/mm-theme.el @@ -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 -- cgit v1.2.3 From 4605c73cd896c281ca8bc0df25b0d25f7a3ebd67 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Sat, 4 Jan 2025 23:53:28 +0100 Subject: emacs: Quote symbol --- .config/emacs/modules/mm-theme.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to '.config/emacs') diff --git a/.config/emacs/modules/mm-theme.el b/.config/emacs/modules/mm-theme.el index adb0bf6..f2e9b04 100644 --- a/.config/emacs/modules/mm-theme.el +++ b/.config/emacs/modules/mm-theme.el @@ -210,7 +210,7 @@ See also the `mm-theme-background-opacity' variable." :hook ((bookmark-bmenu-mode dired-mode ibuffer-mode magit-repolist-mode) . line-selection-mode) :config - (add-hook wdired-mode-hook #'mm-disable-line-selection-mode)) + (add-hook 'wdired-mode-hook #'mm-disable-line-selection-mode)) ;;; Line Highlighting -- cgit v1.2.3 From 95af89b8ed2e39cc56f1fea6d6dcac0d46c04225 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Sat, 8 Mar 2025 13:45:22 +0100 Subject: emacs: Prefer OpenSans --- .config/emacs/modules/mm-theme.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to '.config/emacs') diff --git a/.config/emacs/modules/mm-theme.el b/.config/emacs/modules/mm-theme.el index f2e9b04..d9b129c 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.") -- 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') 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 49c88dc0dcb81898e609f4ec51388311cb2b8c71 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Wed, 14 May 2025 21:45:24 +0200 Subject: emacs: Add SQL as a modeline abbrev --- .config/emacs/modules/mm-modeline.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to '.config/emacs') diff --git a/.config/emacs/modules/mm-modeline.el b/.config/emacs/modules/mm-modeline.el index eae4dce..dd42f6f 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 -- cgit v1.2.3 From a83a65fe567d92911223ed6eb4ea6411573d9f32 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Thu, 29 May 2025 23:37:51 +0200 Subject: emacs: Add mm-buffer-menu.el --- .config/emacs/init.el | 1 + .config/emacs/modules/mm-buffer-menu.el | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 .config/emacs/modules/mm-buffer-menu.el (limited to '.config/emacs') 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 -- 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') 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') 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') 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 From 838608bbd285d47a4c8ca8aaf5e2b3778fe70122 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Wed, 4 Jun 2025 18:10:56 +0200 Subject: emacs: Simplify things --- .config/emacs/modules/mm-projects.el | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) (limited to '.config/emacs') 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.")))) -- cgit v1.2.3 From 2c0658ec8a69fc1466d2b94535590db1697a5423 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Thu, 5 Jun 2025 21:23:34 +0200 Subject: emacs: Add fix for xcompose-mode --- .config/emacs/modules/mm-modeline.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to '.config/emacs') diff --git a/.config/emacs/modules/mm-modeline.el b/.config/emacs/modules/mm-modeline.el index dd42f6f..d1ec6f0 100644 --- a/.config/emacs/modules/mm-modeline.el +++ b/.config/emacs/modules/mm-modeline.el @@ -52,7 +52,8 @@ ("Imake" . "IMake") ("Js" . "JavaScript") ("Ts Mode" . "Tree-Sitter Mode") - ("Wdired" . "WDired")) + ("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 -- cgit v1.2.3