Compare commits

...

42 Commits

Author SHA1 Message Date
kj
eb14dff0cd Add macher package 2025-09-08 10:24:01 -03:00
kj
58bb81edeb enable global subword mode by default. 2025-09-08 09:45:54 -03:00
kj
f689d2afe1 disable automatic PHP CS Fixer on save 2025-09-08 09:21:24 -03:00
kj
ed547bce34 add LanguageTool package for spell and grammar checking 2025-09-08 09:20:38 -03:00
kj
bf2bf01252 Change gptel conversation prefixes and remove my custom directives 2025-09-08 09:17:58 -03:00
kj
6c39aee1d0 feat(ai): Integrate gptel-magit
Integrates `gptel-magit` to provide AI assistance directly within
Magit. Disables `gptel-include-reasoning` as a temporary workaround
for an upstream issue (ragnard/gptel-magit#8).
2025-09-08 09:16:13 -03:00
kj
d1ddd81282 Add default config for php-cs-fixer and a hook to run it on save. 2025-09-05 20:47:34 -03:00
kj
96b0ccf056 Add custom config file. 2025-09-05 14:17:37 -03:00
kj
7289832288 Add php-cs-fixer package. 2025-09-04 10:14:54 -03:00
kj
03ee657182 Disable flymake in favor of flycheck. 2025-09-04 10:13:43 -03:00
kj
0b6c2058ed Refactor and add methods for filename insert and copy. 2025-09-04 10:13:03 -03:00
kj
d50d5228cf Add bwtest abbrev. 2025-09-01 15:24:54 -03:00
kj
b0ebfce668 Add new window/frame related shortcuts. 2025-09-01 15:21:50 -03:00
kj
99c6b012e5 Remove hook for ediff-quit. 2025-09-01 15:20:55 -03:00
kj
5ee6db55e0 Remove copilot toggle.
It is easy to remember in order to run it on M-x.
2025-09-01 12:43:25 -03:00
kj
709ca7fe27 Improvements to autocompletion with eglot.
Add a function to toggle autocompletion and improve the
competion-at-point-functions when eglot is rinning using cape-capf-super.
2025-09-01 12:35:10 -03:00
kj
a6b197b6a4 Add copilot toggle to hydra Toggles. 2025-09-01 11:56:03 -03:00
kj
021e19fb3c Add copilot package.
It is disabled by default but can be enabled if necessary.
2025-09-01 11:53:00 -03:00
kj
56141976e9 Add composer, phpunit and psysh 2025-08-30 11:24:19 -03:00
kj
7c4fea3b60 Add function to sort lines by length. 2025-08-29 18:09:21 -03:00
kj
b7168fd349 Change read-this-file to autofill with the current filename. 2025-08-29 18:06:53 -03:00
kj
87dc0ab99a Use intelephense as the php lsp. 2025-08-28 15:10:36 -03:00
kj
9b7635e69e Add string-inflection package. 2025-08-28 14:55:40 -03:00
kj
cadc7a3a7c Allow resize dired-sidebar. 2025-08-28 14:14:13 -03:00
kj
80e693caba Enable magit diff word granularity. 2025-08-26 16:15:54 -03:00
kj
1f31bf736b Add functions+shortcuts to insert the filename into the buffer. 2025-08-26 15:26:00 -03:00
kj
5b6f53fe4f Add "git blamer" into "Toggles" hydra menu. 2025-08-26 13:35:54 -03:00
kj
04f64eda5e Add blamer package
Actually there is vc-msg, vc-anotate, vc-region-history, etc. that do similar
things, but i will add this also.
2025-08-26 13:25:36 -03:00
kj
8f4e9f9fb8 Fix: always delete trailing whitespaces at save. 2025-08-20 15:04:48 -03:00
kj
5ffc4df914 Remove posframe package and other related.
It is more fancy but sometimes is buggy for me and I like mor the normal way of
emacs that shows all at the bottom.
2025-08-13 02:12:08 -03:00
kj
9727ed4949 Improve devdocs config and re-enable it. 2025-08-07 23:07:48 -03:00
kj
fac74ab714 Disable editorconfig and devdocs.
I barely need that. I will enable it when I need it.
2025-08-07 21:40:34 -03:00
kj
ecbb0e7fe9 Simplify the config for eldoc-box. 2025-08-07 09:28:32 -03:00
kj
fb3747f81d Add sql interactive config. 2025-08-06 23:30:58 -03:00
kj
c11add9cab Add corg package. 2025-08-06 23:28:58 -03:00
kj
aa024c234c Enable SQL Babel in ORG mode. 2025-08-06 20:12:11 -03:00
kj
236311a98d Enable init-prog. 2025-08-05 17:06:15 -03:00
kj
cb6ac8aa7c Remove duplicated package rg. 2025-08-05 17:05:53 -03:00
kj
7fc4f9ec7d Reduce devdocs keybinding to one. 2025-08-05 17:04:34 -03:00
kj
45d9a4927a Remove packages that are not needed now. 2025-08-05 17:01:57 -03:00
kj
d2496a736a Add necessary the "provide". 2025-08-05 17:01:06 -03:00
kj
9b62080f21 Remove unnecesarry git-gutter package related function. 2025-08-05 16:59:44 -03:00
17 changed files with 292 additions and 260 deletions

1
.gitignore vendored
View File

@ -36,3 +36,4 @@ workspace/
/intelephense/ /intelephense/
/auto-save-list/ /auto-save-list/
/*.eld /*.eld
/.custom.el

View File

@ -1,4 +1,4 @@
;;-*-coding: utf-8;-*- ;; -*- coding: utf-8; lexical-binding: t -*-
(define-abbrev-table 'mhtml-mode-abbrev-table (define-abbrev-table 'mhtml-mode-abbrev-table
'( '(
("doc" "<!DOCTYPE html> ("doc" "<!DOCTYPE html>
@ -14,6 +14,34 @@
("doctype" "<!DOCTYPE html>" nil :count 0) ("doctype" "<!DOCTYPE html>" nil :count 0)
)) ))
(define-abbrev-table 'php-ts-mode-abbrev-table
'(
("bwtest" "use Tests\\TestCase;
class Test extends TestCase
{
/**
* @group
* @group
* @test
*/
public function Service()
{
/**
* Preparing
*/
/**
* Actions
*/
/**
* Asserts
*/
}
}" nil :count 6)
))
(define-abbrev-table 'web-mode-abbrev-table (define-abbrev-table 'web-mode-abbrev-table
'( '(
("doc" "<!DOCTYPE html> ("doc" "<!DOCTYPE html>
@ -25,7 +53,7 @@
</head> </head>
<body> <body>
</body> </body>
</html>" nil :count 9) </html>" nil :count 10)
("doctype" "<!DOCTYPE html>" nil :count 1) ("doctype" "<!DOCTYPE html>" nil :count 2)
)) ))

View File

@ -5,7 +5,7 @@
;;; Commentary: ;;; Commentary:
;; Esta configuración para Inteligencia artifical en emacs, principalmente para el uso de chats. ;; Configuración para Inteligencia artifical en Emacs.
;;; Code: ;;; Code:
@ -24,22 +24,33 @@
;; "llava:latest")) ;; "llava:latest"))
gptel-default-mode 'org-mode gptel-default-mode 'org-mode
gptel-prompt-prefix-alist gptel-prompt-prefix-alist
'((markdown-mode . "# ") '((markdown-mode . "# User\n\n")
(org-mode . "* ") (org-mode . "* User\n\n")
(text-mode . "# ")) (text-mode . "# User\n\n"))
gptel-response-prefix-alist
'((markdown-mode . "# AI\n\n")
(org-mode . "* AI\n\n")
(text-mode . "# AI\n\n"))
gptel-directives gptel-directives
'((default . "Eres un LLM que vive dentro de Emacs. Responde de manera concisa.") '((default . "You are a large language model living in Emacs and a helpful assistant. Respond concisely in Spanish."))
(programming . "Eres un LLM y un programador profesional cuidadoso. Provee el código y solo el código como output sin ningún texto adicional, prompt o nota.")
(programming_tutor . "Eres un LLM y un programador profesional cuidadoso. Revisa el siguiente código y realiza sugerencias concisas en español para mejorarlo.")
(programming_explainer . "Eres un LLM y un programador profesional cuidadoso. Revisa el siguiente código y explica en español de manera concisa, su funcionamiento.")
(programming_describer . "Eres un LLM y un programador profesional cuidadoso. Revisa el siguiente código y explica en español su funcionamiento línea a línea.")
(writing . "Eres un LLM y un asistente de escritura. Responde de manera concisa.")
(grammarly . "You are a large language model and professional philologist. Improve grammar and spelling.")
(chat . "Eres un LLM y un compañero de conversación. Responde de manera concisa.")
(traductor . "Eres un traductor profesional. Traduce a español tomando en cuenta los posibles tecnicismos y nombres que no deberían traducirse.")
)
) )
) (setopt gptel-include-reasoning nil)) ;; Mantener hasta resolver: https://github.com/ragnard/gptel-magit/issues/8
(use-package copilot
:bind (("M-<return>" . copilot-complete)
:map copilot-completion-map
("C-g" . 'copilot-clear-overlay)
("C-<return>" . 'copilot-accept-completion)
("C-<tab>" . 'copilot-accept-completion-by-word)))
(use-package gptel-magit
:ensure t
:hook (magit-mode . gptel-magit-install))
(use-package macher
:ensure (:host github :repo "kmontag/macher")
:custom
(macher-action-buffer-ui 'org))
(provide 'init-ai) (provide 'init-ai)
;;; init-ai.el ends here ;;; init-ai.el ends here

View File

@ -20,6 +20,9 @@
(setq package-native-compile t) (setq package-native-compile t)
)) ))
;; Custom configs file
(setq custom-file (concat user-emacs-directory ".custom.el"))
;; Garbage Collector Magic Hack ;; Garbage Collector Magic Hack
(use-package gcmh (use-package gcmh
:diminish :diminish
@ -67,6 +70,7 @@
(use-package simple (use-package simple
:ensure nil :ensure nil
:hook ((after-init . size-indication-mode) :hook ((after-init . size-indication-mode)
(before-save . delete-trailing-whitespace)
(text-mode . visual-line-mode)) (text-mode . visual-line-mode))
:init :init
(setq column-number-mode t (setq column-number-mode t
@ -78,9 +82,8 @@
;; Visualize TAB, (HARD) SPACE, NEWLINE ;; Visualize TAB, (HARD) SPACE, NEWLINE
(setq-default show-trailing-whitespace nil ; Don't show trailing whitespace by default (setq-default show-trailing-whitespace nil ; Don't show trailing whitespace by default
cursor-type 'bar) ; Usar la barrita como cursor cursor-type 'bar) ; Usar la barrita como cursor
(setq show-trailing-whitespace t) (setq show-trailing-whitespace t))
(add-hook 'before-save-hook #'delete-trailing-whitespace nil t)
)
;; UTF-8 please ;; UTF-8 please
(when (fboundp 'set-charset-priority) (when (fboundp 'set-charset-priority)
@ -126,30 +129,5 @@
(async-bytecomp-package-mode 1) (async-bytecomp-package-mode 1)
(dired-async-mode 1)) (dired-async-mode 1))
;; Child frame
(use-package posframe
:hook (after-load-theme . posframe-delete-all)
:init
(defface posframe-border
`((t (:inherit region)))
"Face used by the `posframe' border."
:group 'posframe)
(defvar posframe-border-width 2
"Default posframe border width.")
:config
(with-no-warnings
(defun my-posframe--prettify-frame (&rest _)
(set-face-background 'fringe nil posframe--frame))
(advice-add #'posframe--create-posframe :after #'my-posframe--prettify-frame)
(defun posframe-poshandler-frame-center-near-bottom (info)
(cons (/ (- (plist-get info :parent-frame-width)
(plist-get info :posframe-width))
2)
(/ (+ (plist-get info :parent-frame-height)
(* 2 (plist-get info :font-height)))
2)))))
(provide 'init-base) (provide 'init-base)
;;; init-base.el ends here ;;; init-base.el ends here

View File

@ -66,20 +66,30 @@
)) ))
) )
;; Set de funciones de para las sugerencias de corfu. ;; Set de funciones de para las sugerencias de corfu.
(use-package cape (use-package cape
:ensure (:host github :repo "minad/cape") :ensure (:host github :repo "minad/cape")
:after corfu :after corfu
:hook (eglot-managed-mode . (lambda()
(setq completion-at-point-functions
(list (cape-capf-super
#'eglot-completion-at-point
#'cape-abbrev
#'cape-dabbrev
#'cape-history
#'cape-dict
#'cape-file
#'cape-keyword)))))
:bind (("C-c c f" . cape-file) :bind (("C-c c f" . cape-file)
("C-c c l" . cape-line)) ("C-c c l" . cape-line))
:init :init
(setq text-mode-ispell-word-completion nil) (setq text-mode-ispell-word-completion nil)
;; (add-to-list 'completion-at-point-functions #'cape-line) ;; Completar línea actual en función de lo que dice otras líneas de buffer. ;; (add-to-list 'completion-at-point-functions #'cape-line) ;; Completar línea actual en función de lo que dice otras líneas de buffer.
;; (add-to-list 'completion-at-point-functions #'cape-tex) ;; Completar Latex (caracteres unicode). ;; (add-to-list 'completion-at-point-functions #'cape-tex) ;; Completar Latex (caracteres unicode).
(add-to-list 'completion-at-point-functions #'cape-dict) ;; Completar desde un diccionario (por defecto toma el de linux que está en /usr/share/dict/words).
(add-to-list 'completion-at-point-functions #'cape-dabbrev) ;; Completar desde otras la palabras del buffer. (add-to-list 'completion-at-point-functions #'cape-dabbrev) ;; Completar desde otras la palabras del buffer.
(add-to-list 'completion-at-point-functions #'cape-abbrev) ;; Completar desde una abreviaciónes configuradas con add-global-abbrev (añadir abreviación global) o add-mode-abbrev (abreviación para el modo actual). (add-to-list 'completion-at-point-functions #'cape-abbrev) ;; Completar desde una abreviaciónes configuradas con add-global-abbrev (añadir abreviación global) o add-mode-abbrev (abreviación para el modo actual).
(add-to-list 'completion-at-point-functions #'cape-history) ;; Completar desde el historial de altocompletado
(add-to-list 'completion-at-point-functions #'cape-dict) ;; Completar desde un diccionario (por defecto toma el de linux que está en /usr/share/dict/words).
(add-to-list 'completion-at-point-functions #'cape-file) ;; Completar rutas de archivos. (add-to-list 'completion-at-point-functions #'cape-file) ;; Completar rutas de archivos.
(add-to-list 'completion-at-point-functions #'cape-keyword) ;; Completar desde keyword del lenguaje. (add-to-list 'completion-at-point-functions #'cape-keyword) ;; Completar desde keyword del lenguaje.

View File

@ -71,8 +71,7 @@
:ensure nil :ensure nil
:hook(;; show org ediffs unfolded :hook(;; show org ediffs unfolded
(ediff-prepare-buffer . outline-show-all) (ediff-prepare-buffer . outline-show-all)
;; restore window layout when done )
(ediff-quit . winner-undo))
:config :config
(setq ediff-window-setup-function 'ediff-setup-windows-plain (setq ediff-window-setup-function 'ediff-setup-windows-plain
ediff-split-window-function 'split-window-horizontally ediff-split-window-function 'split-window-horizontally
@ -149,7 +148,19 @@
(truncate-lines . nil) (truncate-lines . nil)
(which-func-mode . nil)))) (which-func-mode . nil))))
;; Generador de texto aleatorio para placeholding
(use-package lorem-ipsum) (use-package lorem-ipsum)
;; Corrector ortográfico y de sintaxis avanzado
(use-package languagetool
:ensure t
:defer t
:commands (languagetool-check
languagetool-clear-suggestions
languagetool-correct-at-point
languagetool-correct-buffer
languagetool-set-language
languagetool-server-mode))
(provide 'init-editor) (provide 'init-editor)
;;; init-editor.el ends here ;;; init-editor.el ends here

View File

@ -43,22 +43,14 @@
(insert current-line) (insert current-line)
(decf n))))) (decf n)))))
;; Mostrar y ocultar el diff de la línea de git-gutter
(defun git-gutter:toggle-popup-hunk ()
"Toggle 'git-gutter' hunk window."
(interactive)
(if (and (get-buffer "*git-gutter:diff*") (window-live-p (git-gutter:popup-buffer-window)))
(delete-window (git-gutter:popup-buffer-window))
(git-gutter:popup-hunk)))
;; Obtener el nombre del proyecto desde project.el ;; Obtener el nombre del proyecto desde project.el
(defun kj/project-name (&optional project) (defun kj/project-name (&optional project)
"Return the name for PROJECT. "Return the name for PROJECT.
If PROJECT is not specified, assume current project root." If PROJECT is not specified, assume current project root."
(when-let* ((root (or project (kj/project-root)))) ;; <-- ¡Aquí está el cambio! (when-let* ((root (or project (kj/project-root)))) ;; <-- ¡Aquí está el cambio!
(file-name-nondirectory (file-name-nondirectory
(directory-file-name (directory-file-name
(file-name-directory root))))) (file-name-directory root)))))
;; Obtener la raíz del proyecto desde project.el ;; Obtener la raíz del proyecto desde project.el
(defun kj/project-root () (defun kj/project-root ()
@ -96,7 +88,9 @@ If PROJECT is not specified, assume current project root."
;; Renombrar el archivo actual ;; Renombrar el archivo actual
(defun rename-this-file (new-name) (defun rename-this-file (new-name)
"Renames both current buffer and file it's visiting to NEW-NAME." "Renames both current buffer and file it's visiting to NEW-NAME."
(interactive "sNew name: ") (interactive (list (read-string "New name: "
(file-name-nondirectory
(buffer-file-name)))))
(let ((name (buffer-name)) (let ((name (buffer-name))
(filename (buffer-file-name))) (filename (buffer-file-name)))
(unless filename (unless filename
@ -108,7 +102,7 @@ If PROJECT is not specified, assume current project root."
(rename-buffer new-name)))) (rename-buffer new-name))))
;; Copiar el nombre del archivo actual ;; Copiar el nombre del archivo actual
(defun copy-file-name () (defun copy-filename ()
"Copy the current buffer file name to the clipboard." "Copy the current buffer file name to the clipboard."
(interactive) (interactive)
(let ((filename (if (equal major-mode 'dired-mode) (let ((filename (if (equal major-mode 'dired-mode)
@ -120,6 +114,18 @@ If PROJECT is not specified, assume current project root."
(message "Copied '%s'" filename)) (message "Copied '%s'" filename))
(warn "Current buffer is not attached to a file!")))) (warn "Current buffer is not attached to a file!"))))
(defun copy-basename ()
"Copy the current buffer basename to the clipboard."
(interactive)
(let ((filename (if (equal major-mode 'dired-mode)
default-directory
(file-name-nondirectory (buffer-file-name)))))
(if filename
(progn
(kill-new filename)
(message "Copied '%s'" filename))
(warn "Current buffer is not attached to a file!"))))
;; Verifica si se puede levantar un childframe ;; Verifica si se puede levantar un childframe
(defun childframe-workable-p () (defun childframe-workable-p ()
"Whether childframe is workable." "Whether childframe is workable."
@ -133,5 +139,37 @@ If PROJECT is not specified, assume current project root."
"Check if font with FONT-NAME is available." "Check if font with FONT-NAME is available."
(find-font (font-spec :name font-name))) (find-font (font-spec :name font-name)))
(defun insert-filename ()
"Insert the full path file name into the current buffer."
(interactive)
(insert (buffer-file-name)))
(defun insert-basename ()
"Insert the filename (without path) into the current buffer."
(interactive)
(insert (file-name-nondirectory (buffer-file-name))))
(defun sort-lines-by-length (reverse beg end)
"Sort lines by length."
(interactive "P\nr")
(save-excursion
(save-restriction
(narrow-to-region beg end)
(goto-char (point-min))
(let ;; To make `end-of-line' and etc. to ignore fields.
((inhibit-field-text-motion t))
(sort-subr reverse 'forward-line 'end-of-line nil nil
(lambda (l1 l2)
(apply #'< (mapcar (lambda (range) (- (cdr range) (car range)))
(list l1 l2)))))))))
(defun corfu-auto-toggle()
"Toggle corfu autocomplete."
(interactive)
(global-corfu-mode 0)
(setq corfu-auto (not corfu-auto))
(global-corfu-mode 1)
)
(provide 'init-functions) (provide 'init-functions)
;;; init-functions.el ends here. ;;; init-functions.el ends here.

View File

@ -30,13 +30,16 @@
(global-set-key (kbd "C-x mp") 'php-ts-mode) (global-set-key (kbd "C-x mp") 'php-ts-mode)
(global-set-key (kbd "C-x mw") 'web-mode) (global-set-key (kbd "C-x mw") 'web-mode)
;; Cambiar de ventana
(global-set-key (kbd "C-S-o") 'other-window)
;; Saltar entre párrafos ;; Saltar entre párrafos
(define-key global-map "\M-[" 'backward-paragraph) (define-key global-map "\M-[" 'backward-paragraph)
(define-key global-map "\M-]" 'forward-paragraph) (define-key global-map "\M-]" 'forward-paragraph)
;; Insertar nombre del archivo
(global-set-key (kbd "C-c ff") 'insert-filename)
(global-set-key (kbd "C-c fb") 'insert-basename)
(global-set-key (kbd "C-c fcf") 'copy-filename)
(global-set-key (kbd "C-c fcb") 'copy-basename)
;; Deactivar el abrir *messages* al cliquear en el minibuffer ;; Deactivar el abrir *messages* al cliquear en el minibuffer
(define-key minibuffer-inactive-mode-map [mouse-1] #'ignore) (define-key minibuffer-inactive-mode-map [mouse-1] #'ignore)

View File

@ -39,13 +39,12 @@
(eglot-ensure)))) (eglot-ensure))))
((markdown-mode yaml-mode yaml-ts-mode) . eglot-ensure)) ((markdown-mode yaml-mode yaml-ts-mode) . eglot-ensure))
:init :init
(setq read-process-output-max (* 1024 1024)) ; 1MB (setq read-process-output-max (* 4 1024 1024)) ; 4MB
(setq eglot-autoshutdown t (setq eglot-autoshutdown t
eglot-events-buffer-size 0
eglot-send-changes-idle-time 0.5) eglot-send-changes-idle-time 0.5)
:config :config
(setq eglot-sync-connect 0) (setq eglot-sync-connect 0)
;; (add-to-list 'eglot-server-programs '(php-mode . ("intelephense" "--stdio"))) (add-to-list 'eglot-server-programs '(php-mode . ("intelephense" "--stdio")))
(add-to-list 'eglot-server-programs (add-to-list 'eglot-server-programs
'((tsx-ts-mode '((tsx-ts-mode
@ -63,7 +62,7 @@
"Passes through required deno initialization options" "Passes through required deno initialization options"
(list :enable t (list :enable t
:lint t)) :lint t))
) )
;; Mejorar la velocidad de eglot (un binario en rust ) ;; Mejorar la velocidad de eglot (un binario en rust )
(use-package eglot-booster (use-package eglot-booster
@ -72,8 +71,8 @@
:config :config
;; ;;
(if (executable-find "emacs-lsp-booster") (if (executable-find "emacs-lsp-booster")
(eglot-booster-mode) (eglot-booster-mode)
(message "No está instalado emacs-lsp-booster. Eglot se usará de modo normal.")) (message "No está instalado emacs-lsp-booster. Eglot se usará de modo normal."))
) )
;; Emmet (mientras veo como hacer funcionar emmet-ls) ;; Emmet (mientras veo como hacer funcionar emmet-ls)
@ -86,17 +85,25 @@
;; Revisar por errores en el código ;; Revisar por errores en el código
(use-package flymake (use-package flymake
:ensure nil :ensure nil
:hook (prog-mode . (lambda () ;; :hook (prog-mode . (lambda ()
(unless (derived-mode-p 'makefile-mode) ;; (unless (derived-mode-p 'makefile-mode)
(flymake-mode)))) ;; (flymake-mode))))
:config :init
(remove-hook 'flymake-diagnostic-functions 'flymake-proc-legacy-flymake) (remove-hook 'flymake-diagnostic-functions 'flymake-proc-legacy-flymake)
) )
;; Mostar los errores de flymake en un popup-tip (use-package flycheck
(use-package flymake-diagnostic-at-point :init (global-flycheck-mode)
:after flymake :config
:hook (flymake-mode . flymake-diagnostic-at-point-mode)) (setq flycheck-indication-mode nil
flycheck-phpcs-standard "PSR12"))
(use-package flycheck-eglot
:after flycheck
:custom
(flycheck-eglot-exclusive nil)
:init
(global-flycheck-eglot-mode 1))
(provide 'init-lsp) (provide 'init-lsp)
;;; init-lsp.el ends here ;;; init-lsp.el ends here

View File

@ -109,10 +109,10 @@
;; UI para completado del minibuffer ;; UI para completado del minibuffer
(use-package vertico (use-package vertico
:bind (:map vertico-map :bind (:map vertico-map
("RET" . vertico-directory-enter) ("RET" . vertico-directory-enter)
("DEL" . vertico-directory-delete-char) ("DEL" . vertico-directory-delete-char)
("TAB" . minibuffer-complete) ("TAB" . minibuffer-complete)
("M-DEL" . vertico-directory-delete-word)) ("M-DEL" . vertico-directory-delete-word))
:hook ((elpaca-after-init . vertico-mode) :hook ((elpaca-after-init . vertico-mode)
(rfn-eshadow-update-overlay . vertico-directory-tidy)) (rfn-eshadow-update-overlay . vertico-directory-tidy))
:config :config
@ -121,15 +121,5 @@
completion-ignore-case t) completion-ignore-case t)
) )
;; Mover el minibufer de vertico al centro de la pantalla.
(use-package vertico-posframe
:functions posframe-poshandler-frame-center
:hook (vertico-mode . vertico-posframe-mode)
:init (setq vertico-posframe-poshandler
#'posframe-poshandler-frame-center
vertico-posframe-parameters
'((left-fringe . 8)
(right-fringe . 8))))
(provide 'init-minibuffer) (provide 'init-minibuffer)
;;; init-minibuffer.el ends here ;;; init-minibuffer.el ends here

View File

@ -78,6 +78,7 @@
(rust . t) (rust . t)
(translate . t) (translate . t)
(shell . t) (shell . t)
(sql . t)
))) )))
;; No solicitar confirmación para evaluar ;; No solicitar confirmación para evaluar
(setq org-confirm-babel-evaluate nil) (setq org-confirm-babel-evaluate nil)
@ -247,6 +248,10 @@
;; Org babel para traducciones (mediante google translate) ;; Org babel para traducciones (mediante google translate)
(use-package ob-translate) (use-package ob-translate)
;; Autocompletado para los headers de los bloques
(use-package corg
:ensure (:host github :repo "isamert/corg.el"))
;; Org mode en modo presentación ;; Org mode en modo presentación
(use-package org-present (use-package org-present
:after (org) :after (org)

View File

@ -10,30 +10,15 @@
;;; Code: ;;; Code:
;; Show function arglist or variable docstring ;; Mostrar la ayuda de eldoc/documentación en un childframe
(use-package eldoc (use-package eldoc-box
:ensure nil :defer t
:diminish :bind ("<f1>" . eldoc-box-help-at-point))
:config
(when (childframe-workable-p)
;; Mostrar la ayuda de eldoc/documentación en un childframe
(use-package eldoc-box
:diminish (eldoc-box-hover-mode eldoc-box-hover-at-point-mode)
:bind ("<f1>" . eldoc-box-help-at-point)
:custom
(eldoc-box-lighter nil)
(eldoc-box-only-multi-line t)
(eldoc-box-clear-with-C-g t)
:custom-face
(eldoc-box-border ((t (:inherit posframe-border :background unspecified))))
(eldoc-box-body ((t (:inherit tooltip))))
:hook ((eglot-managed-mode . eldoc-box-hover-at-point-mode))
:config
;; Prettify `eldoc-box' frame
(setf (alist-get 'left-fringe eldoc-box-frame-parameters) 8
(alist-get 'right-fringe eldoc-box-frame-parameters) 8))))
;; Code folding indicators using Tree-sitter ;; Cambiar fácilmente entre naming conventions (camel, pascal, kebab, snake, etc.)
(use-package string-inflection)
;; Code folding indicators using Tree-sitter
(use-package treesit-fold-indicators (use-package treesit-fold-indicators
:ensure treesit-fold :ensure treesit-fold
:hook (after-init . global-treesit-fold-indicators-mode) :hook (after-init . global-treesit-fold-indicators-mode)
@ -54,9 +39,9 @@
xref-show-xrefs-function #'xref-show-definitions-completing-read)) xref-show-xrefs-function #'xref-show-definitions-completing-read))
;; Code styles ;; Code styles
(use-package editorconfig ;; (use-package editorconfig
:diminish ;; :diminish
:hook (elpaca-after-init . editorconfig-mode)) ;; :hook (elpaca-after-init . editorconfig-mode))
;; Correr el código desde el buffer de emacs ;; Correr el código desde el buffer de emacs
(use-package quickrun (use-package quickrun
@ -118,49 +103,24 @@
:autoload (devdocs--installed-docs devdocs--available-docs) :autoload (devdocs--installed-docs devdocs--available-docs)
:commands (devdocs-install devdocs-lookup) :commands (devdocs-install devdocs-lookup)
:bind (:map prog-mode-map :bind (:map prog-mode-map
("M-<f1>" . devdocs-dwim) ("M-<f1>" . devdocs-dwim))
("C-h D" . devdocs-dwim))
:init :init
(defconst devdocs-major-mode-docs-alist
'((c-mode . ("c"))
(c++-mode . ("cpp"))
(python-mode . ("python~3.10" "python~2.7"))
(ruby-mode . ("ruby~3.1"))
(rustic-mode . ("rust"))
(css-mode . ("css"))
(html-mode . ("html"))
(julia-mode . ("julia~1.8"))
(js-mode . ("javascript" "jquery"))
(emacs-lisp-mode . ("elisp")))
"Alist of major-mode and docs.")
(mapc
(lambda (mode)
(add-hook (intern (format "%s-hook" (car mode)))
(lambda ()
(setq-local devdocs-current-docs (cdr mode)))))
devdocs-major-mode-docs-alist)
(setq devdocs-data-dir (expand-file-name "devdocs" user-emacs-directory)) (setq devdocs-data-dir (expand-file-name "devdocs" user-emacs-directory))
(defun devdocs-dwim() (defun devdocs-dwim()
"Look up a DevDocs documentation entry. "Look up a DevDocs documentation entry.
Install the doc if it's not installed." Install the doc if it's not installed."
(interactive) (interactive)
;; Install the doc if it's not installed ;; Install the doc if it's not installed
(mapc (lambda (slug)
(lambda (slug) (unless (member slug (let ((default-directory devdocs-data-dir))
(unless (member slug (let ((default-directory devdocs-data-dir)) (seq-filter #'file-directory-p
(seq-filter #'file-directory-p (when (file-directory-p devdocs-data-dir)
(when (file-directory-p devdocs-data-dir) (directory-files "." nil "^[^.]")))))
(directory-files "." nil "^[^.]"))))) (mapc
(mapc (lambda (doc)
(lambda (doc) (when (string= (alist-get 'slug doc) slug)
(when (string= (alist-get 'slug doc) slug) (devdocs-install doc)))
(devdocs-install doc))) (devdocs--available-docs))))
(devdocs--available-docs))))
(alist-get major-mode devdocs-major-mode-docs-alist))
;; Lookup the symbol at point ;; Lookup the symbol at point
(devdocs-lookup nil (thing-at-point 'symbol t)))) (devdocs-lookup nil (thing-at-point 'symbol t))))
@ -168,23 +128,19 @@ Install the doc if it's not installed."
;; --------------------------------------------------------------------------- ;; ---------------------------------------------------------------------------
;; Miscellaneous Programming Modes ;; Miscellaneous Programming Modes
;; --------------------------------------------------------------------------- ;; ---------------------------------------------------------------------------
(use-package csv-mode)
(unless emacs/>=29p
(use-package csharp-mode))
(use-package cask-mode)
(use-package cmake-mode) (use-package cmake-mode)
(use-package dart-mode)
(use-package julia-mode)
(use-package lua-mode)
(use-package mermaid-mode)
(use-package powershell)
(use-package scala-mode)
(use-package swift-mode)
(use-package v-mode)
(use-package vimrc-mode)
(use-package yaml-mode) ; Modo yaml
(use-package nginx-mode) ; Modo para leer archivos de configuración de nginx (use-package nginx-mode) ; Modo para leer archivos de configuración de nginx
(use-package sql
:ensure nil
:hook (sql-interactive-mode . toggle-truncate-lines)
:config
(setq sql-mysql-login-params (append sql-mysql-login-params '(port))) ;; request port also
(setq sql-user "root") ;; user por defecto
(setq sql-server "127.0.0.1") ;; host por defecto
(setq sql-port 3306) ;; puerto por defecto para mysql
)
;; Major mode para archivos CSV ;; Major mode para archivos CSV
(use-package csv-mode (use-package csv-mode
;; :hook ((csv-mode . csv-align-mode) ;; :hook ((csv-mode . csv-align-mode)
@ -225,4 +181,10 @@ Install the doc if it's not installed."
:hook ((js-base-mode css-mode sgml-mode web-mode) . prettier-mode) :hook ((js-base-mode css-mode sgml-mode web-mode) . prettier-mode)
:init (setq prettier-pre-warm 'none)) :init (setq prettier-pre-warm 'none))
(use-package subword
:ensure nil
:init
(global-subword-mode 1))
(provide 'init-prog)
;;; init-prog.el ends here ;;; init-prog.el ends here

View File

@ -26,6 +26,7 @@
:commands (dired-sidebar-toggle-sidebar) :commands (dired-sidebar-toggle-sidebar)
:config :config
(setq dired-sidebar-theme 'nerd (setq dired-sidebar-theme 'nerd
dired-sidebar-window-fixed nil
;; dired-sidebar-should-follow-file t ;; dired-sidebar-should-follow-file t
;; dired-sidebar-follow-file-idle-delay 0.5 ;; dired-sidebar-follow-file-idle-delay 0.5
)) ))
@ -84,22 +85,6 @@
:config (dolist (mode '(dashboard-mode emacs-news-mode)) :config (dolist (mode '(dashboard-mode emacs-news-mode))
(add-to-list 'page-break-lines-modes mode))) (add-to-list 'page-break-lines-modes mode)))
;; Transient
(when (childframe-workable-p)
;; Display transient in child frame
(use-package transient-posframe
:diminish
:defines posframe-border-width
:custom-face
(transient-posframe ((t (:inherit tooltip))))
(transient-posframe-border ((t (:inherit posframe-border :background unspecified))))
:hook (after-init . transient-posframe-mode)
:init (setq transient-mode-line-format nil
transient-posframe-border-width posframe-border-width
transient-posframe-poshandler 'posframe-poshandler-frame-center
transient-posframe-parameters '((left-fringe . 8)
(right-fringe . 8)))))
;; La línea bonita esa de abajo ;; La línea bonita esa de abajo
(use-package doom-modeline (use-package doom-modeline
:init :init

View File

@ -29,35 +29,8 @@
:init (setq which-key-max-description-length 30 :init (setq which-key-max-description-length 30
which-key-lighter nil which-key-lighter nil
which-key-show-remaining-keys t) which-key-show-remaining-keys t)
:autoload which-key-posframe-mode
:hook ( elpaca-after-init . which-key-mode)) :hook ( elpaca-after-init . which-key-mode))
;; Muestra which-key en un frame en el centro en lugar de abajo
(when (childframe-workable-p)
(use-package which-key-posframe
:diminish
:defines posframe-border-width
:functions posframe-poshandler-frame-center-near-bottom
:custom-face
(which-key-posframe ((t (:inherit tooltip))))
(which-key-posframe-border ((t (:inherit posframe-border :background unspecified))))
:init
(setq which-key-posframe-border-width posframe-border-width
which-key-posframe-poshandler #'posframe-poshandler-frame-center-near-bottom
which-key-posframe-parameters '((left-fringe . 8)
(right-fringe . 8)))
(which-key-posframe-mode 1)))
;; Fast search tool `ripgrep'
(use-package rg
:hook (after-init . rg-enable-default-bindings)
:bind (:map rg-global-map
("c" . rg-dwim-current-dir)
("f" . rg-dwim-current-file)
("m" . rg-menu))
:init (setq rg-show-columns t)
:config (add-to-list 'rg-custom-type-aliases '("tmpl" . "*.tmpl")))
;; Process ;; Process
(use-package proced (use-package proced
:ensure nil :ensure nil
@ -81,9 +54,20 @@
;; Restaurar el estado de los frames ;; Restaurar el estado de los frames
(use-package winner (use-package winner
:ensure nil :ensure nil
:bind (("s-u" . winner-undo)
("s-U" . winner-redo))
:config :config
(winner-mode)) (winner-mode))
;; Moverme entre frames
(use-package windmove
:ensure nil
:bind (("s-K" . windmove-up)
("s-J" . windmove-down)
("s-H" . windmove-left)
("s-L" . windmove-right)
("s-O" . other-window)))
;; Terminal ;; Terminal
(use-package vterm (use-package vterm
:config :config
@ -135,7 +119,7 @@
(use-package dashboard (use-package dashboard
;; :init ;; :init
;; (dashboard-setup-startup-hook) ;; (dashboard-setup-startup-hook)
:diminish dashboard-mode :diminish dashboard-mode
:custom-face :custom-face
(dashboard-heading ((t (:inherit (font-lock-string-face bold))))) (dashboard-heading ((t (:inherit (font-lock-string-face bold)))))
(dashboard-items-face ((t (:weight normal)))) (dashboard-items-face ((t (:weight normal))))
@ -159,23 +143,7 @@
:defines posframe-border-width :defines posframe-border-width
:functions childframe-workable-p :functions childframe-workable-p
:hook (emacs-lisp-mode . hydra-add-imenu) :hook (emacs-lisp-mode . hydra-add-imenu)
:init )
(when (childframe-workable-p)
(setq hydra-hint-display-type 'posframe)
(with-no-warnings
(defun hydra-set-posframe-show-params ()
"Set hydra-posframe style."
(setq hydra-posframe-show-params
`(:left-fringe 8
:right-fringe 8
:internal-border-width ,posframe-border-width
:internal-border-color ,(face-background 'posframe-border nil t)
:background-color ,(face-background 'tooltip nil t)
:foreground-color ,(face-foreground 'tooltip nil t)
:lines-truncate t
:poshandler posframe-poshandler-frame-center)))
(hydra-set-posframe-show-params)
(add-hook 'after-load-theme-hook #'hydra-set-posframe-show-params t))))
;; Pretty-Hydra - Su nombre ya indica lo que hace ;; Pretty-Hydra - Su nombre ya indica lo que hace
(use-package pretty-hydra (use-package pretty-hydra
@ -206,35 +174,36 @@
(with-no-warnings (with-no-warnings
(pretty-hydra-define toggles-hydra (:title (pretty-hydra-title "Toggles" 'faicon "nf-fa-toggle_on") (pretty-hydra-define toggles-hydra (:title (pretty-hydra-title "Toggles" 'faicon "nf-fa-toggle_on")
:color pink :quit-key ("q" "C-g")) :color pink :quit-key ("q" "C-g"))
("Basic" ("Basic"
(("n" (cond ((fboundp 'display-line-numbers-mode) (("n" (cond ((fboundp 'display-line-numbers-mode)
(display-line-numbers-mode (if display-line-numbers-mode -1 1))) (display-line-numbers-mode (if display-line-numbers-mode -1 1)))
((fboundp 'gblobal-linum-mode) ((fboundp 'gblobal-linum-mode)
(global-linum-mode (if global-linum-mode -1 1)))) (global-linum-mode (if global-linum-mode -1 1))))
"line number" "line number"
:toggle (or (bound-and-true-p display-line-numbers-mode) :toggle (or (bound-and-true-p display-line-numbers-mode)
(bound-and-true-p global-linum-mode))) (bound-and-true-p global-linum-mode)))
("a" global-aggressive-indent-mode "aggressive indent" :toggle t) ("a" global-aggressive-indent-mode "aggressive indent" :toggle t)
("d" global-hungry-delete-mode "hungry delete" :toggle t) ("d" global-hungry-delete-mode "hungry delete" :toggle t)
("e" electric-pair-mode "electric pair" :toggle t) ("e" electric-pair-mode "electric pair" :toggle t)
("s" prettify-symbols-mode "pretty symbol" :toggle t) ("s" prettify-symbols-mode "pretty symbol" :toggle t)
("h" display-time-mode "time" :toggle t) ("h" display-time-mode "time" :toggle t)
("i" indent-bars-mode "indent bars" :toggle t)) ("i" indent-bars-mode "indent bars" :toggle t))
"Highlight" "Highlight"
(("l" global-hl-line-mode "line" :toggle t) (("l" global-hl-line-mode "line" :toggle t)
("p" show-paren-mode "brackets pairs" :toggle t) ("p" show-paren-mode "brackets pairs" :toggle t)
("r" rainbow-delimiters-mode "rainbow brackets" :toggle t) ("b" global-blamer-mode "Git blamer" :toggle t)
("w" global-display-fill-column-indicator-mode "fill column indicator" :toggle t) ("r" rainbow-delimiters-mode "rainbow brackets" :toggle t)
("t" global-hl-todo-mode "todo" :toggle t)) ("w" global-display-fill-column-indicator-mode "fill column indicator" :toggle t)
"Program" ("t" global-hl-todo-mode "todo" :toggle t))
(("f" flymake-mode "flymake" :toggle t) "Program"
("c" flyspell-mode "spell check" :toggle t) (("F" flymake-mode "flymake" :toggle t)
("u" subword-mode "subword" :toggle t) ("f" flyspell-mode "spell check" :toggle t)
("v" global-diff-hl-mode "gutter" :toggle t) ("u" subword-mode "subword" :toggle t)
("V" diff-hl-flydiff-mode "live gutter" :toggle t) ("v" global-diff-hl-mode "gutter" :toggle t)
("M" diff-hl-margin-mode "margin gutter" :toggle t) ("V" diff-hl-flydiff-mode "live gutter" :toggle t)
("D" diff-hl-dired-mode "dired gutter" :toggle t)) ("M" diff-hl-margin-mode "margin gutter" :toggle t)
)))) ("D" diff-hl-dired-mode "dired gutter" :toggle t))
))))
(provide 'init-utils) (provide 'init-utils)
;;; init-utils.el ends here ;;; init-utils.el ends here

View File

@ -13,6 +13,11 @@
;;; Code: ;;; Code:
;; Mostrar el commit de la línea actual
(use-package blamer
:ensure t
:bind ("C-c i" . blamer-show-posframe-commit-info))
;; Resolver diferencias entre 2 archivos o versiones del mismo. ;; Resolver diferencias entre 2 archivos o versiones del mismo.
(use-package ediff (use-package ediff
:ensure nil :ensure nil
@ -87,7 +92,9 @@
(use-package license-templates) (use-package license-templates)
;; Magia para git ;; Magia para git
(use-package magit) (use-package magit
:config
(setq magit-diff-refine-hunk 'all))
;; Todolist en magit de todos los archivos del projecto. ;; Todolist en magit de todos los archivos del projecto.
(use-package magit-todos (use-package magit-todos

View File

@ -21,5 +21,31 @@
:ensure (:host github :repo "moskalyovd/emacs-php-doc-block") :ensure (:host github :repo "moskalyovd/emacs-php-doc-block")
) )
;; Consola REPL para php. Similar a "php -a" pero con extras
(use-package psysh)
;; Composer
(use-package composer)
;; PHPUnit
(use-package phpunit)
(use-package php-cs-fixer
:custom
(php-cs-fixer-rules-level-part-options (list (json-encode '(("@PSR12" . t)
("ordered_imports" . (("sort_algorithm" . "alpha")))
("concat_space" . (("spacing" . "one")))
("whitespace_after_comma_in_array" . t)
("align_multiline_comment" . t)
("no_unused_imports" . t)
("phpdoc_align" . t)
("phpdoc_indent" . t)
("no_useless_return" . t)
("return_assignment" . t)
("trailing_comma_in_multiline" . t)))))
(php-cs-fixer-rules-fixer-part-options '())
;; :hook (before-save . php-cs-fixer-before-save)
)
(provide 'lang-php) (provide 'lang-php)
;;; lang-php.el ends here ;;; lang-php.el ends here

View File

@ -43,6 +43,7 @@
(require 'init-utils) (require 'init-utils)
(require 'init-ui) (require 'init-ui)
(require 'init-editor) (require 'init-editor)
(require 'init-prog)
(require 'init-highlight) (require 'init-highlight)
(require 'init-theme) (require 'init-theme)
(require 'init-ai) (require 'init-ai)