Files
confi-emacs-actual/configs/init-editor.el
kj dabaf86f28 Big re-write :)
I reordered the code in a more clean an organized way. Also this improves a lot
the emacs startup time again, bucause after some updates it becomes a bit slow
with the old configuration, so i did it again in a new way.
2025-07-20 13:18:05 -03:00

154 lines
5.6 KiB
EmacsLisp

;; init-editor.el --- Initialize editing configurations. -*- lexical-binding: t -*-
;; Copyright (C) 2006-2025 Vincent Zhang
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;;
;; Configuración en la edición de texto en general
;;
;;; Code:
;; Visor de documentos de emacs (soporta de todo: epub, pdf, odt, docx, cbz, etc.)
(use-package doc-view
:hook
(doc-view-mode . (lambda ()
(display-line-numbers-mode 0)))
:ensure nil)
;; Eliminar cuando está
(use-package delsel
:ensure nil
:hook (elpaca-after-init . delete-selection-mode))
;; Minor mode to aggressively keep your code always indented
(use-package aggressive-indent
:diminish
:autoload aggressive-indent-mode
:functions too-long-file-p
:hook ((elpaca-after-init . global-aggressive-indent-mode)
;; NOTE: Disable in large files due to the performance issues
;; https://github.com/Malabarba/aggressive-indent-mode/issues/73
(find-file . (lambda ()
(when (too-long-file-p)
(aggressive-indent-mode -1)))))
:config
;; Disable in some modes
(dolist (mode '(gitconfig-mode
asm-mode web-mode html-mode
css-mode css-ts-mode
go-mode go-ts-mode
python-ts-mode yaml-ts-mode
scala-mode
shell-mode term-mode vterm-mode
prolog-inferior-mode))
(add-to-list 'aggressive-indent-excluded-modes mode))
;; Disable in some commands
(add-to-list 'aggressive-indent-protected-commands #'delete-trailing-whitespace t)
;; Be slightly less aggressive in C/C++/C#/Java/Go/Swift
(add-to-list 'aggressive-indent-dont-indent-if
'(and (derived-mode-p 'c-mode 'c++-mode 'csharp-mode
'java-mode 'go-mode 'swift-mode)
(null (string-match "\\([;{}]\\|\\b\\(if\\|for\\|while\\)\\b\\)"
(thing-at-point 'line))))))
;; Mover líneas o regiones con M-<teclas de dirección>
(use-package drag-stuff
:diminish
:autoload drag-stuff-define-keys
:hook (elpaca-after-init . drag-stuff-global-mode)
:config
(add-to-list 'drag-stuff-except-modes 'org-mode)
(drag-stuff-define-keys))
;; A comprehensive visual interface to diff & patch
(use-package ediff
:ensure nil
:hook(;; show org ediffs unfolded
(ediff-prepare-buffer . outline-show-all)
;; restore window layout when done
(ediff-quit . winner-undo))
:config
(setq ediff-window-setup-function 'ediff-setup-windows-plain
ediff-split-window-function 'split-window-horizontally
ediff-merge-split-window-function 'split-window-horizontally))
;; Automatic parenthesis pairing
(use-package elec-pair
:ensure nil
;; :hook (elpaca-after-init . electric-pair-mode)
:init (setq electric-pair-inhibit-predicate 'electric-pair-conservative-inhibit))
;; Edit multiple regions in the same way simultaneously
(use-package iedit
:defines desktop-minor-mode-table
:bind (("C-;" . iedit-mode)
("C-x r RET" . iedit-rectangle-mode)
:map isearch-mode-map ("C-;" . iedit-mode-from-isearch)
:map esc-map ("C-;" . iedit-execute-last-modification)
:map help-map ("C-;" . iedit-mode-toggle-on-function))
:config
;; Avoid restoring `iedit-mode'
(with-eval-after-load 'desktop
(add-to-list 'desktop-minor-mode-table
'(iedit-mode nil))))
;; Seleccionar por regiones (similar a mark-sexp, pero toma en cuenta hacia atrás del cursor también)
(use-package expand-region
:functions treesit-buffer-root-node
:bind ("C-=" . er/expand-region)
:config
(defun treesit-mark-bigger-node ()
"Use tree-sitter to mark regions."
(let* ((root (treesit-buffer-root-node))
(node (treesit-node-descendant-for-range root (region-beginning) (region-end)))
(node-start (treesit-node-start node))
(node-end (treesit-node-end node)))
;; Node fits the region exactly. Try its parent node instead.
(when (and (= (region-beginning) node-start) (= (region-end) node-end))
(when-let* ((node (treesit-node-parent node)))
(setq node-start (treesit-node-start node)
node-end (treesit-node-end node))))
(set-mark node-end)
(goto-char node-start)))
(add-to-list 'er/try-expand-list 'treesit-mark-bigger-node))
;; Hungry deletion (Elimina los espacios en blancos consecutivos)
(use-package hungry-delete
:diminish
:hook (elpaca-after-init . global-hungry-delete-mode)
:init (setq hungry-delete-chars-to-skip " \t\f\v"
hungry-delete-except-modes
'(help-mode minibuffer-mode minibuffer-inactive-mode calc-mode)))
;; Mejora C-a y C-e para ir a lo que contextualmente sería el fin de la línea
(use-package mwim
:bind (([remap move-beginning-of-line] . mwim-beginning)
([remap move-end-of-line] . mwim-end)))
;; Ayuda a manipular los archivos con líneas demasiado largas
(use-package so-long
:ensure nil
:hook (after-init . global-so-long-mode)
:bind (:map so-long-mode-map
("C-s" . isearch-forward)
("C-r" . isearch-backward))
:config
(setq so-long-variable-overrides
'((bidi-inhibit-bpa . t)
(bidi-paragraph-direction . left-to-right)
(buffer-read-only . nil)
(global-hl-line-mode . nil)
(line-move-visual . t)
(show-paren-mode . nil)
(truncate-lines . nil)
(which-func-mode . nil))))
(provide 'init-editor)
;;; init-editor.el ends here