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.
154 lines
5.6 KiB
EmacsLisp
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
|