Compare commits

..

18 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
13 changed files with 168 additions and 44 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

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

@ -102,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)
@ -114,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."
@ -127,12 +139,12 @@ 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-full-filename () (defun insert-filename ()
"Insert the full path file name into the current buffer." "Insert the full path file name into the current buffer."
(interactive) (interactive)
(insert (buffer-file-name))) (insert (buffer-file-name)))
(defun insert-filename-only () (defun insert-basename ()
"Insert the filename (without path) into the current buffer." "Insert the filename (without path) into the current buffer."
(interactive) (interactive)
(insert (file-name-nondirectory (buffer-file-name)))) (insert (file-name-nondirectory (buffer-file-name))))
@ -151,5 +163,13 @@ If PROJECT is not specified, assume current project root."
(apply #'< (mapcar (lambda (range) (- (cdr range) (car range))) (apply #'< (mapcar (lambda (range) (- (cdr range) (car range)))
(list l1 l2))))))))) (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,16 +30,15 @@
(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 ;; Insertar nombre del archivo
(global-set-key (kbd "C-c ff") 'insert-full-filename) (global-set-key (kbd "C-c ff") 'insert-filename)
(global-set-key (kbd "C-c fo") 'insert-filename-only) (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

@ -85,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

@ -181,5 +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) (provide 'init-prog)
;;; init-prog.el ends here ;;; init-prog.el ends here

View File

@ -54,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
@ -185,8 +196,8 @@
("w" global-display-fill-column-indicator-mode "fill column indicator" :toggle t) ("w" global-display-fill-column-indicator-mode "fill column indicator" :toggle t)
("t" global-hl-todo-mode "todo" :toggle t)) ("t" global-hl-todo-mode "todo" :toggle t))
"Program" "Program"
(("f" flymake-mode "flymake" :toggle t) (("F" flymake-mode "flymake" :toggle t)
("c" flyspell-mode "spell check" :toggle t) ("f" flyspell-mode "spell check" :toggle t)
("u" subword-mode "subword" :toggle t) ("u" subword-mode "subword" :toggle t)
("v" global-diff-hl-mode "gutter" :toggle t) ("v" global-diff-hl-mode "gutter" :toggle t)
("V" diff-hl-flydiff-mode "live gutter" :toggle t) ("V" diff-hl-flydiff-mode "live gutter" :toggle t)

View File

@ -30,5 +30,22 @@
;; PHPUnit ;; PHPUnit
(use-package 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