Commit afb28e3b031e

Vincent Demeester <vincent@sbr.pm>
2025-05-15 15:11:33
tools/emacs: some "mini" updates
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent 37ed578
Changed files (1)
tools
emacs
tools/emacs/mini/init.el
@@ -100,25 +100,198 @@
   (require 'use-package))
 
 (use-package emacs
+  :bind
+  ("C-x m" . mark-defun)
+  :custom
+  (enable-local-variables :all)
+  (select-enable-clipboard t)
+  (select-enable-primary t)
+  (comment-multi-line t)
+  (make-backup-files nil)
   :hook
   (after-init . global-hl-line-mode)
-  (after-init . global-completion-preview-mode))
+  (after-init . global-completion-preview-mode)
+  :config
+  (delete-selection-mode 1))
+
+(use-package ffap
+  :hook
+  (after-init . ffap-bindings))
 
 (use-package icomplete
   :unless noninteractive
   :hook
-  ;; (icomplete-minibuffer-setup
-  ;;  . (lambda()(interactive) 
-  ;;      (setq-local completion-styles '(flex partial-completion initials basic))))
+  (icomplete-minibuffer-setup
+   . (lambda()(interactive) 
+       (setq-local completion-styles '(flex partial-completion initials basic))))
   (after-init . fido-vertical-mode)
   :custom
   (icomplete-compute-delay 0.01))
 
-(use-package orderless
+(use-package display-line-numbers
   :unless noninteractive
+  :hook (prog-mode . display-line-numbers-mode)
   :config
-  (setq completion-styles
-	'(orderless basic substring initials flex partial-completion))
-  (setq completion-category-defaults nil)
-  (setq completion-category-overrides nil)
-  )
+  (setq-default display-line-numbers-type 'relative)
+  (defun vde/toggle-line-numbers ()
+    "Toggles the display of line numbers.  Applies to all buffers."
+    (interactive)
+    (if (bound-and-true-p display-line-numbers-mode)
+        (display-line-numbers-mode -1)
+      (display-line-numbers-mode)))
+  :bind ("<f7>" . vde/toggle-line-numbers))
+
+(use-package flymake
+  :hook
+  (prog-mode . flymake-mode))
+
+
+(use-package aggressive-indent
+  :commands (aggressive-indent-mode)
+  :hook
+  (emacs-lisp-mode . aggressive-indent-mode))
+
+(use-package save-place
+  :defer 1
+  :config (save-place-mode 1))
+
+(use-package symbol-overlay
+  :custom
+  (symbol-overlay-idle-time 0.2)
+  :bind
+  ("M-s s i" . symbol-overlay-put)
+  ("M-N" . symbol-overlay-jump-next)
+  ("M-P" . symbol-overlay-jump-prev)
+  ("M-s s r" . symbol-overlay-rename)
+  ("M-s s c" . symbol-overlay-remove-all)
+  :hook
+  (prog-mode . symbol-overlay-mode))
+
+(use-package savehist
+  :unless noninteractive
+  :hook (after-init . savehist-mode)
+  :custom
+  (history-length 10000)
+  (savehist-save-minibuffer-history t)
+  (savehist-delete-duplicates t)
+  (savehist-autosave-interval 180)
+  (savehist-additional-variables '(extended-command-history
+				   search-ring
+				   regexp-search-ring
+				   comint-input-ring
+				   compile-history
+				   last-kbd-macro
+				   shell-command-history)))
+
+(use-package which-key
+  :custom
+  (which-key-separator " → " )
+  (which-key-add-column-padding 1)
+  (which-key-max-description-length 40)
+  :hook
+  (after-init . which-key-mode)
+  :config
+  
+  ;; Define custom, concise descriptions for `tab-bar` commands under "C-x t"
+  (which-key-add-key-based-replacements
+    "C-x t C-f" "Open file in new tab"
+    "C-x t RET" "Switch tabs"
+    "C-x t C-r" "Open file (read-only) in new tab"
+    "C-x t 0"   "Close current tab"
+    "C-x t 1"   "Close other tabs"
+    "C-x t 2"   "New empty tab"
+    "C-x t G"   "Group tabs"
+    "C-x t M"   "Move tab to position"
+    "C-x t N"   "New tab and switch to it"
+    "C-x t O"   "Previous tab"
+    "C-x t b"   "Switch buffer in new tab"
+    "C-x t d"   "Dired in new tab"
+    "C-x t f"   "Open file in new tab"
+    "C-x t m"   "Move tab left/right"
+    "C-x t n"   "Duplicate tab"
+    "C-x t o"   "Next tab"
+    "C-x t p"   "Project in new tab"
+    "C-x t r"   "Rename tab"
+    "C-x t t"   "Switch to other tab"
+    "C-x t u"   "Undo tab close"
+    "C-x t ^ f" "Detach tab window"))
+
+
+(use-package dired
+  :custom
+  (dired-hide-details-hide-information-lines 'nil)
+  (dired-kill-when-opening-new-dired-buffer 't)
+  :bind
+  (:map dired-mode-map
+	("E"   . wdired-change-to-wdired-mode)
+	("l"   . dired-find-file))
+  :hook
+  (dired-mode . dired-omit-mode)
+  (dired-mode . dired-hide-details-mode)
+  (dired-mode . dired-sort-toggle-or-edit))
+
+;; Recentf
+(use-package recentf
+  :defer t
+  :hook
+  (after-nit . recentf-mode)
+  :bind (("C-x C-r" . recentf-open)))
+
+(use-package prog-mode
+  :hook
+  (prog-mode . eldoc-mode)
+  :custom
+  (eldoc-idle-delay 0.2))
+
+(use-package eglot
+  :bind
+  (:map eglot-mode-map
+        ("C-c e a" . eglot-code-actions)
+        ("C-c e r" . eglot-reconnect)
+        ("<f2>" . eglot-rename)
+        ("C-c e ?" . eldoc-print-current-symbol-info))
+  :config
+  (add-to-list 'eglot-ignored-server-capabilities :documentHighlightProvider)
+  (add-to-list 'eglot-server-programs `(json-mode  "vscode-json-language-server" "--stdio"))
+  (add-to-list 'eglot-server-programs '(nix-mode . ("nil")))
+  (setq-default eglot-workspace-configuration
+		'(:gopls (:usePlaceholders t)))
+  
+  :hook
+  ;; (before-save . gofmt-before-save)
+  (before-save . eglot-format-buffer)
+  (nix-mode . eglot-ensure)
+  (nix-ts-mode . eglot-ensure)
+  (rust-mode . eglot-ensure)
+  (rust-ts-mode . eglot-ensure)
+  (python-mode . eglot-ensure)
+  ;; (json-mode . eglot-ensure)
+  ;; (yaml-mode . eglot-ensure)
+  ;; (c-mode . eglot-ensure)
+  ;; (cc-mode . eglot-ensure)
+  (go-mode . eglot-ensure)
+  (go-ts-mode . eglot-ensure)
+  ;; (js-mode . eglot-ensure)
+  ;; (js2-mode . eglot-ensure)
+  ;; (typescript-mode . eglot-ensure)
+  ;; (typescript-ts-mode . eglot-ensure)
+  (sh-mode . eglot-ensure)
+  (sh-script-mode . eglot-ensure))
+
+(use-package markdown-mode
+  :mode "\\.md\\'")
+
+(use-package yaml-mode
+  :mode "\\.yaml\\'")
+
+(use-package go-ts-mode
+  :mode (("\\.go$" . go-ts-mode)
+         ("\\.go" . go-ts-mode)
+         ("\\.go\\'" . go-ts-mode)))
+
+(use-package minions
+  :hook (after-init . minions-mode)
+  :config
+  (add-to-list 'minions-prominent-modes 'flymake-mode))
+
+# TODO ORG mode configuration (BIG one)