Compare commits

...

135 Commits

Author SHA1 Message Date
kj
6388d5c0bb Fix drag stuff not starting. 2025-06-10 21:17:29 -03:00
kj
cc1fb2a0c9 Only use defer t for now.
In another oportunity i will optimize this again.
2025-06-08 12:42:48 -03:00
kj
4fc380750e A few tweaks for corfu. 2025-06-03 12:12:15 -03:00
kj
564e6dbac5 Update evil bindings. 2025-05-26 13:41:08 -03:00
kj
2a1309ecaa Change defer times to decimals. 2025-05-26 13:40:35 -03:00
kj
d12c13c027 Update elpaca installer version. 2025-05-26 13:38:55 -03:00
kj
3c7ac83e3f Remove unused/unnecessary consult shortcuts. 2025-05-02 04:50:22 -03:00
kj
089b056916 Remove consult-project-extra in favor of project-find-file (native). 2025-05-02 04:49:19 -03:00
kj
c0a0bc347c Just execute exec-path-from-shell. 2025-05-01 13:47:22 -03:00
kj
f2faff5f3f Remove unnecesary lines. 2025-04-29 19:46:11 -03:00
kj
d497b12805 Improve a few the startup time. 2025-04-29 19:41:46 -03:00
kj
ed5f25fb4d Move gptel to his own ia init file. 2025-04-28 18:58:34 -03:00
kj
f48e200fe7 Enable which-key. 2025-04-28 14:34:03 -03:00
kj
668a2c3c91 Remove unused shortcuts. 2025-04-28 14:32:45 -03:00
kj
cb8a4dcd75 Reduce padding on vertico postframe. 2025-04-28 14:31:56 -03:00
kj
4749773a51 Add delay to corfu. 2025-04-28 14:30:44 -03:00
kj
d41a4ce7ee Add some visual tweaks to vertico-posframe. 2025-04-14 16:54:32 -03:00
kj
5185766542 Add vertico-postframe package. 2025-04-14 16:07:33 -03:00
kj
cf7b239bcb Change dashboard startup behavior. 2025-04-09 14:08:46 -03:00
kj
ad54b6e3c9 Disable hooks for visual tweaks on csv files.
It looks fine, but is not good for edit.
2025-03-28 13:55:44 -03:00
kj
cab913064f Set to use rust-ts-mode. 2025-03-26 17:20:13 -03:00
kj
c3aabfff88 Enable to open big files or files with long lines on so-long-mode. 2025-02-20 19:56:15 -03:00
kj
a0a1282aa2 Enable subword mode by default.
This will allow detecting words (or as words) inside camelCase,
snake_case, kebab-case, and PascalCase.

Note: Without this, kebab-case and snake_case don't have problems, but
I mention all nomenclatures as a group.
2025-02-17 21:54:20 -03:00
kj
8e6fb27ec8 Update elpaca. 2025-02-17 21:43:17 -03:00
kj
32078154c9 Disable php-mode in favor of php-ts-mode. 2025-02-17 21:42:52 -03:00
kj
eac4af5029 Remove scrollbar on daemon mode (emacsclient). 2025-02-16 10:37:47 -03:00
kj
f199adb367 Improve agenda/items load on dashboard. 2025-02-08 16:43:40 -03:00
kj
4051c11dad Ignore intelephense license files. 2025-02-08 16:25:25 -03:00
kj
6be143756c Move eglot hooks for js and ts to eglot file. 2025-02-08 06:29:52 -03:00
kj
cfef8c9a4a Add typescript base config. 2025-02-07 17:40:49 -03:00
kj
fb5e2c8455 Set default shell. 2025-02-02 02:25:53 -03:00
kj
5ebecc1d4b Add new treesit parser: jsdoc and phpdoc. 2024-11-27 19:05:11 -04:00
kj
64d60088cb Add exec-path-from-shell package. 2024-11-27 19:04:54 -04:00
kj
dce274d8ff Remove unnecesary line. 2024-11-27 19:04:37 -04:00
KJ
8133266734 Update elpaca boostrap code. 2024-11-25 13:23:46 -04:00
KJ
147949285e Add transient package as magit requirement.
The build-in version do not fit with magit requeriment.
2024-11-25 13:21:41 -04:00
KJ
9417dcf830 Add docker-compose-mode. 2024-11-15 09:28:12 -04:00
KJ
447b80428b Set intelephense lsp to php-mode. 2024-09-30 08:15:05 -04:00
KJ
95d9746fbf Set mhtml-mode for sintax highlight on html org-src blocks. 2024-09-24 13:35:10 -04:00
KJ
135671b5b9 Disable electric pair. 2024-09-24 13:34:38 -04:00
KJ
45029768b9 Improve lang php config. 2024-09-24 13:33:47 -04:00
KJ
9876be8389 Reconfigure gptel models. 2024-09-21 12:41:05 -04:00
KJ
9553b240d8 Disable corfu mode on speed-type an add afew more books. 2024-09-13 20:37:07 -04:00
KJ
297416d1ce Corfu quit when starts a new word. 2024-09-13 03:34:56 -04:00
KJ
4148fff8a1 Change escape binding. 2024-09-13 00:26:00 -04:00
KJ
39862a753d Use emacs state instead insert. 2024-09-12 23:37:59 -04:00
KJ
85ad5c15b3 Add one more shortcut for expand region. 2024-09-12 23:18:22 -04:00
KJ
c3a2df6bef Ignore case in competition and configure competition-overrides. 2024-09-12 23:00:01 -04:00
KJ
4ceabc679a Remove competition overrides. 2024-09-12 22:54:24 -04:00
KJ
4733bb46ac Change a bit the orderless config. 2024-09-12 22:51:24 -04:00
KJ
c97b3a974e Change to use isearch by default and consult-line with C-S-s. 2024-09-12 22:16:06 -04:00
KJ
9b1bd93ceb Remove unused shortcuts. 2024-09-12 22:15:43 -04:00
KJ
21185e0438 Simplify most used keybindings. 2024-09-12 20:29:15 -04:00
KJ
3f618a44e7 Ensure evil initial state for magit and vtrem modes. 2024-09-11 08:48:07 -04:00
KJ
e99e71a6a5 Use emacs state when starts git-timemachine. 2024-09-11 08:47:38 -04:00
KJ
adc3d07d35 Set git commit initial state to emacs instead normal (evil). 2024-09-10 14:13:37 -04:00
KJ
2178a2e7cb Remove shortcut for C-r on evil mode. 2024-09-10 14:12:59 -04:00
KJ
c39574582f change shortcut for consult-ripgrep. 2024-09-10 14:08:16 -04:00
KJ
6972b11f0a User evil-normal-state as ininitial only with some modes. 2024-09-10 12:51:50 -04:00
KJ
8e8544960e Ignore evil-tutor files. 2024-09-10 12:44:00 -04:00
KJ
1752b38dc1 Fix problem with corfu-quit and evil. 2024-09-10 12:43:53 -04:00
KJ
b6dc907ad8 Fix corfu binding. 2024-09-10 11:32:45 -04:00
KJ
7d145f6200 Add some corfu tweaks. 2024-09-10 11:31:57 -04:00
KJ
8f0334c51b Ensure always run php-ts-mode an not php-mode. 2024-09-08 14:12:46 -04:00
KJ
da816f098a Add dockerfile-mode. 2024-09-07 11:07:44 -04:00
KJ
4752f03dfc Add php-mode again but not to replace php-ts-mode.
This is only needed on org-mode for Syntax Highlighting.
2024-09-07 11:06:05 -04:00
KJ
7134c41dfc Change default theme. 2024-08-02 10:48:15 -04:00
KJ
ff22f194d4 Move version control config to its own file. 2024-07-24 20:45:20 -04:00
KJ
f9329c4a32 Remove unused/comented code. 2024-07-24 20:44:39 -04:00
KJ
30c890a155 Replace php-mode with php-ts-mode.
This is a huge improvement from the same author of the package.
2024-07-02 11:55:47 -04:00
KJ
4407141739 Remove unused package. 2024-07-02 11:55:02 -04:00
KJ
734d3cf08c Change to intelephense LSP server for PHP.
Just now phpactor is bad and only old versions works fine, but that
versions has it the old and already resolved bugs on the newest
version.

Previously, intelephense was bad integraion with newer php versions,
but now it works fine again. So maybe I will to buy a licence for this
lsp server.
2024-07-01 10:08:56 -04:00
KJ
c2792c0415 Ignore desktop file. 2024-06-25 15:09:11 -04:00
KJ
f64a8add03 Remove code commented. 2024-06-25 15:06:51 -04:00
KJ
092b1fb02c Remove unused org-templates config. 2024-06-25 15:05:55 -04:00
KJ
b3bc4df0c9 Update configuration variable changed on org-modern. 2024-05-23 18:38:21 -04:00
KJ
8d8a60878f Remake readme. 2024-05-15 21:27:25 -04:00
KJ
5c45a7890a Add htmlize package. 2024-05-15 21:21:40 -04:00
KJ
536c9d30e3 Remove unused screenshot function. 2024-05-09 19:06:58 -04:00
KJ
e54a28bb9d feat: Add css-mode config.
Set indent spaces to 2 instead the 4 (the default value).
2024-05-09 13:30:30 -04:00
KJ
e663c02d97 Remove multiple-cursors. 2024-05-09 12:01:54 -04:00
KJ
4a1d3afb85 Remove unused shortcuts. 2024-05-09 11:57:36 -04:00
KJ
38254302e4 Temporal fix on hl-todo version not defined for elpaca. 2024-05-09 08:39:58 -04:00
KJ
47554e0bca Set corfu quit on tab. 2024-05-08 10:46:54 -04:00
KJ
e7f8104cb6 Add tramp shell config for ssh and sshx. 2024-05-06 01:00:39 -04:00
KJ
4569080000 Add doc-view config. 2024-05-03 04:41:06 -04:00
KJ
fc802c0db0 Add git-timemachine. 2024-05-02 14:32:56 -04:00
KJ
63f76373a5 Remove god mode.
Again, I feel this is not neccesary for me. Maybe is later I
return to evil.
2024-05-02 14:31:43 -04:00
KJ
5144fd405e Change default model for gptel.
The dolphin-llama3 model is more fast and, in theory,
give better answers.
2024-04-30 16:16:03 -04:00
KJ
e45141b894 Add quickrun shortcuts. 2024-04-27 09:56:15 -04:00
KJ
b8cb8e3ad6 Improve emacs startup with a new hook. 2024-04-27 01:24:25 -04:00
KJ
2fd710ea54 Add new navigation keybinding. 2024-04-27 00:37:23 -04:00
KJ
c292ca77d0 Add ignore to vterm to god-mode. 2024-04-26 23:27:22 -04:00
KJ
02577be8c7 Add function to toggle hide titlebar when frame is maximized. 2024-04-26 18:54:54 -04:00
KJ
a3ea9985e0 Increase corfu-auto delay from 0.2 (default) to 0.5. 2024-04-26 17:41:33 -04:00
KJ
f5c35fd03c Disable org-modern for list. 2024-04-26 17:41:00 -04:00
KJ
2e210421e3 Remove unnecesary code. 2024-04-26 11:52:41 -04:00
KJ
b5a30921a7 Disable corfu-complete when hits tab. 2024-04-26 11:52:27 -04:00
KJ
a980735bd8 Disable evil and try to use god-mode. 2024-04-26 03:37:09 -04:00
KJ
b95c3258ab Add anzu package. 2024-04-26 03:36:07 -04:00
KJ
e276cc0eec Inprove corfu key mapping.
Escape key now is not globally taken, tab do nothing and
also all keys only was triggered when the corfu pop is open.
2024-04-26 02:52:40 -04:00
KJ
7eaa783f2e Add defer and after to improve emacs startup. 2024-04-26 02:20:53 -04:00
KJ
48afb56d36 Improve emacs startup. 2024-04-26 01:24:39 -04:00
KJ
3c6a7b371a Disable poly-org and polymode.
It create some visual bugs. For now is better use
org-edit-special (C-c ').
2024-04-25 16:54:11 -04:00
KJ
baeb0a640b Add configuration for vterm with tramp. 2024-04-25 14:57:58 -04:00
KJ
3660933143 Update ollama models. 2024-04-24 20:50:53 -04:00
KJ
d196afbe89 Fix: save place was not working. 2024-04-23 23:59:40 -04:00
KJ
f6d5e2f925 Add translator prompt for gptel. 2024-04-23 23:59:04 -04:00
KJ
f5a28724b0 Add BUG keyword to hl-todo. 2024-04-22 00:20:32 -04:00
KJ
30fbba45db Change todo keyword from WAITING to HOLD. 2024-04-22 00:19:26 -04:00
KJ
dd1398415d Set default font. 2024-04-21 23:59:51 -04:00
KJ
07b4050a0d Clear themes config. 2024-04-21 23:59:15 -04:00
KJ
5ecf229620 Fix error with some versions of emacs-nox.
Only disable scroll-bar-mode on emacs gui.
2024-04-21 23:57:41 -04:00
KJ
4274a147f4 Disable ctags config.
After all, whe never use it. Eglots do all the work alone.

I will try improve the config, but for now is not needed as is.
2024-04-21 23:55:42 -04:00
KJ
5d728d3a2f Bring back org-bullets.
Org-modern give me a bug with the indentation.

Maybe i will check it again for a fix, but for now org-bullets
do the work.
2024-04-21 21:18:20 -04:00
KJ
438baf6022 Auto enable org-modern-mode for org-mode and org-agenda. 2024-04-21 21:17:31 -04:00
KJ
96ad111227 Add org-modern and remove org-bullets on its favor. 2024-04-21 21:00:06 -04:00
KJ
806c4c035f Disable hook to auto-enable org-appear-mode. 2024-04-21 20:24:28 -04:00
KJ
65e3ae4bd9 Manually set bullets for org-bullet. 2024-04-21 20:20:52 -04:00
KJ
e9bc16a1a4 Disable request confirmation to eval code with org-babel. 2024-04-21 20:20:16 -04:00
KJ
c90c19323b Change babel sh to shell (it allows bash, sh, etc.). 2024-04-21 20:19:33 -04:00
KJ
2c63d19cf4 Enable calc babel. 2024-04-21 20:18:42 -04:00
KJ
1a4795f6e9 Add html abbrevs. 2024-04-21 20:18:08 -04:00
KJ
d588a9ed2e Add org babel config. 2024-04-21 19:20:54 -04:00
KJ
d22f24ad4b Gitignore eshell history. 2024-04-21 18:09:34 -04:00
KJ
d3c68d1ac6 Set quickrun shortcut only when is needed (prog modes). 2024-04-21 18:07:47 -04:00
KJ
04a3c86321 Add package quickrun. 2024-04-21 17:56:25 -04:00
KJ
6e7836ffb7 Simplify cape shortcuts. 2024-04-20 23:34:47 -04:00
KJ
05249c8a2e Remove case sensitivity for vertigo/orderless. 2024-04-18 21:59:53 -04:00
KJ
7a38ae22bc Change hints on hydra-git-gutter. 2024-04-18 15:45:08 -04:00
KJ
870e9a44ac Add abbreviations file. 2024-04-18 07:26:32 -04:00
KJ
71367398d6 Minify citre config. 2024-04-18 07:26:16 -04:00
KJ
055b5151df Improve cape config. 2024-04-18 07:25:37 -04:00
KJ
f48e747299 Move functions to the functions file. 2024-04-18 05:32:51 -04:00
KJ
887255253d Improve gptel-directives. 2024-04-18 05:31:51 -04:00
23 changed files with 678 additions and 410 deletions

4
.gitignore vendored
View File

@ -30,3 +30,7 @@ workspace/
/nov-places /nov-places
/devdocs/ /devdocs/
/.mc-lists.el /.mc-lists.el
/eshell/
/.emacs.desktop
/.tutor/
/intelephense/

31
abbrev_defs Normal file
View File

@ -0,0 +1,31 @@
;;-*-coding: utf-8;-*-
(define-abbrev-table 'mhtml-mode-abbrev-table
'(
("doc" "<!DOCTYPE html>
<html>
<head>
<meta charset=\"UTF-8\"/>
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">
<title>Document</title>
</head>
<body>
</body>
</html>" nil :count 1)
("doctype" "<!DOCTYPE html>" nil :count 0)
))
(define-abbrev-table 'web-mode-abbrev-table
'(
("doc" "<!DOCTYPE html>
<html>
<head>
<meta charset=\"UTF-8\"/>
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">
<title>Document</title>
</head>
<body>
</body>
</html>" nil :count 9)
("doctype" "<!DOCTYPE html>" nil :count 1)
))

46
configs/init-ai.el Normal file
View File

@ -0,0 +1,46 @@
;;; init-ai.el --- Configuración de inteligencias artificales -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;; Esta configuración para Inteligencia artifical en emacs, principalmente para el uso de chats.
;;; Code:
;; Cliente LLM (ollama, chatgpt, gemini, etc.)
(use-package gptel
:defer t
:config
;; (setq gptel-model 'gemma3:4b
;; gptel-backend (gptel-make-ollama "Ollama"
;; :host "localhost:11434"
;; :stream t
;; :models '("mistral:latest"
;; "deepseek-r1:1.5b"
;; "deepcoder"
;; "dolphin-llama3:latest"
;; "gemma3:4b"
;; "llava:latest"))
gptel-default-mode 'org-mode
gptel-prompt-prefix-alist
'((markdown-mode . "# ")
(org-mode . "* ")
(text-mode . "# "))
gptel-directives
'((default . "Eres un LLM que vive dentro de Emacs. Responde de manera concisa.")
(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.")
)
)
)
(provide 'init-ai)
;;; init-ai.el ends here

View File

@ -20,12 +20,12 @@
)) ))
;; Instalar elpaca.el (reemplpazando package.el) ;; Instalar elpaca.el (reemplpazando package.el)
(defvar elpaca-installer-version 0.7) (defvar elpaca-installer-version 0.11)
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory)) (defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory)) (defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory)) (defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory))
(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git" (defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
:ref nil :ref nil :depth 1 :inherit ignore
:files (:defaults "elpaca-test.el" (:exclude "extensions")) :files (:defaults "elpaca-test.el" (:exclude "extensions"))
:build (:not elpaca--activate-package))) :build (:not elpaca--activate-package)))
(let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory)) (let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory))
@ -37,16 +37,18 @@
(make-directory repo t) (make-directory repo t)
(when (< emacs-major-version 28) (require 'subr-x)) (when (< emacs-major-version 28) (require 'subr-x))
(condition-case-unless-debug err (condition-case-unless-debug err
(if-let ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*")) (if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
((zerop (call-process "git" nil buffer t "clone" ((zerop (apply #'call-process `("git" nil ,buffer t "clone"
(plist-get order :repo) repo))) ,@(when-let* ((depth (plist-get order :depth)))
((zerop (call-process "git" nil buffer t "checkout" (list (format "--depth=%d" depth) "--no-single-branch"))
(or (plist-get order :ref) "--")))) ,(plist-get order :repo) ,repo))))
(emacs (concat invocation-directory invocation-name)) ((zerop (call-process "git" nil buffer t "checkout"
((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch" (or (plist-get order :ref) "--"))))
"--eval" "(byte-recompile-directory \".\" 0 'force)"))) (emacs (concat invocation-directory invocation-name))
((require 'elpaca)) ((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch"
((elpaca-generate-autoloads "elpaca" repo))) "--eval" "(byte-recompile-directory \".\" 0 'force)")))
((require 'elpaca))
((elpaca-generate-autoloads "elpaca" repo)))
(progn (message "%s" (buffer-string)) (kill-buffer buffer)) (progn (message "%s" (buffer-string)) (kill-buffer buffer))
(error "%s" (with-current-buffer buffer (buffer-string)))) (error "%s" (with-current-buffer buffer (buffer-string))))
((error) (warn "%s" err) (delete-directory repo 'recursive)))) ((error) (warn "%s" err) (delete-directory repo 'recursive))))
@ -81,10 +83,14 @@
(setq default-process-coding-system '(utf-8-unix . utf-8-unix)) (setq default-process-coding-system '(utf-8-unix . utf-8-unix))
;; Emacs customizations ;; Emacs customizations
(scroll-bar-mode -1) ; Quitar scrollbar. (when (display-graphic-p)
(scroll-bar-mode -1) ; Quitar scrollbar.
)
(tooltip-mode -1) ; Disable tooltips. (tooltip-mode -1) ; Disable tooltips.
(global-display-line-numbers-mode) ; Mostar número de línea. (global-display-line-numbers-mode) ; Mostar número de línea.
(global-so-long-mode 1) ; Abrir archivos grandes o con líneas largas en el modo so-long por defecto.
(show-paren-mode 1) ; Habilitar resaltado de brackets. (show-paren-mode 1) ; Habilitar resaltado de brackets.
(global-subword-mode 1) ; Habilitar subpalabras (detectar palabras dentro de un camelCase y Pascal case.)
(pending-delete-mode t) ; Cuando selecciono un texto y escribo, el texto se borra (emacs por defecto solo escribe donde está el cursor). (pending-delete-mode t) ; Cuando selecciono un texto y escribo, el texto se borra (emacs por defecto solo escribe donde está el cursor).
;; (global-hl-line-mode) ; Resaltar línea actual por defecto. ;; (global-hl-line-mode) ; Resaltar línea actual por defecto.
(setq use-short-answers t) ; Usar respuesta cortas (y/n) en lugar de las largas (yes/no) (setq use-short-answers t) ; Usar respuesta cortas (y/n) en lugar de las largas (yes/no)
@ -102,6 +108,8 @@
) )
;; Leve transparencia en emacs por defecto. ;; Leve transparencia en emacs por defecto.
;; (set-frame-parameter nil 'alpha-background 95) ;; (set-frame-parameter nil 'alpha-background 95)
;; Font por defecto
(set-face-attribute 'default nil :font "Fira Code Retina" :height 112)
;; Backups enabled, use nil to disable ;; Backups enabled, use nil to disable
(setq (setq
@ -119,11 +127,7 @@
"Carga la configuración del modo daemon." "Carga la configuración del modo daemon."
(message "Corriendo en modo daemon.") (message "Corriendo en modo daemon.")
(set-face-attribute 'default nil :font "Fira Code Retina" :height 112) (set-face-attribute 'default nil :font "Fira Code Retina" :height 112)
(scroll-bar-mode -1)
;; Abrir primero el dashboard
(setq initial-buffer-choice (lambda ()
(get-buffer "*dashboard*")
(dashboard-refresh-buffer)))
;; Cerrar buffers al cerrar emacsclient ;; Cerrar buffers al cerrar emacsclient
;; (add-hook 'delete-frame-functions ;; (add-hook 'delete-frame-functions

View File

@ -19,43 +19,78 @@
:defer t :defer t
:ensure (:files (:defaults "extensions/*") :ensure (:files (:defaults "extensions/*")
:includes (corfu-info corfu-history)) :includes (corfu-info corfu-history))
:hook ((elpaca-after-init . global-corfu-mode) :hook ((corfu-mode . corfu-popupinfo-mode))
(corfu-mode . corfu-popupinfo-mode)) :bind (:map corfu-map
:bind (("<escape>" . corfu-quit) ("<tab>" . corfu-quit)
("<SPC>" . corfu-insert-separator)) ("<escape>" . corfu-quit)
("<SPC>" . corfu-insert-separator))
:custom :custom
(corfu-auto t) (corfu-auto t)
:config :config
(global-corfu-mode)
(setq corfu-popupinfo-delay 0 (setq corfu-popupinfo-delay 0
;; corfu-auto-delay 0.5 corfu-auto-delay 1
corfu-auto-prefix 1 corfu-auto-prefix 1
corfu-cycle t corfu-cycle t
corfu-quit-at-boundary t
corfu-preview-current nil corfu-preview-current nil
corfu-quit-no-match t) corfu-quit-no-match t)
(when (< emacs-major-version 29)
(advice-add 'pcomplete-completions-at-point :around #'cape-wrap-silent)
(advice-add 'pcomplete-completions-at-point :around #'cape-wrap-purify))
(corfu-history-mode 1)
(savehist-mode 1)
(add-to-list 'savehist-additional-variables 'corfu-history)
) )
;; Cambia la forma de mostrar y buscar sugerencias (afecta a corfu, pero también a otros como vertico).
(use-package orderless (use-package orderless
:config :defer t
(setq completion-styles '(flex orderless basic) :after corfu
completion-category-overrides '((file (styles partial-completion))))) :custom
(completion-styles '(orderless)) ; Use orderless
(completion-category-defaults nil) ; I want to be in control!
(setq completion-ignore-case t)
(completion-category-overrides '((file (styles basic partial-completion orderless))))
(orderless-matching-styles
'(orderless-literal
orderless-prefixes
orderless-initialism
orderless-regexp
orderless-flex ; Basically fuzzy finding
;; orderless-strict-leading-initialism
;; orderless-strict-initialism
;; orderless-strict-full-initialism
;; orderless-without-literal ; Recommended for dispatches instead
))
)
;; Set de funciones de para las sugerencias de corfu.
(use-package cape (use-package cape
:defer t
:ensure (:host github :repo "minad/cape") :ensure (:host github :repo "minad/cape")
:after corfu :after corfu
:bind (("C-c f" . cape-file)
("C-c l" . cape-line)
("C-c _" . cape-tex))
:init :init
;; (advice-add 'eglot-completion-at-point :around #'cape-wrap-buster) (setq text-mode-ispell-word-completion nil)
(advice-add #'eglot-completion-at-point :around #'cape-wrap-nonexclusive)
(add-to-list 'completion-at-point-functions #'cape-dabbrev) ;; Completar desde otras la palabras del buffer.
(add-to-list 'completion-at-point-functions #'cape-file) ;; Completar rutas de archivos.
;; (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-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-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-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-tex) ;; Completar Latex (caracteres unicode). (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-file) ;; Completar rutas de archivos.
(add-to-list 'completion-at-point-functions #'cape-keyword) ;; Completar desde keyword del lenguaje.
(advice-add 'eglot-completion-at-point :around #'cape-wrap-buster)
) )
;; Hacer que corfu funcione en la terminal ;; Hacer que corfu funcione en la terminal
(unless (display-graphic-p) (unless (display-graphic-p)
(use-package corfu-terminal (use-package corfu-terminal
:after corfu
:ensure (:repo "https://codeberg.org/akib/emacs-corfu-terminal.git") :ensure (:repo "https://codeberg.org/akib/emacs-corfu-terminal.git")
:config :config
(corfu-terminal-mode +1)) (corfu-terminal-mode +1))

View File

@ -26,19 +26,12 @@
("C-x c a" . citre-ace-peek) ("C-x c a" . citre-ace-peek)
("C-x c u" . citre-update-this-tags-file)) ("C-x c u" . citre-update-this-tags-file))
:init :init
(require 'citre-config) (setq citre-auto-enable-citre-mode-modes '(prog-mode)
(setq citre-auto-enable-citre-mode-modes '(prog-mode)) citre-default-create-tags-file-location 'global-cache
citre-prompt-language-for-ctags-command t)
:config :config
(with-no-warnings (with-no-warnings
(setq citre-default-create-tags-file-location 'global-cache
;; citre-ctags-program "/usr/bin/ctags"
;; citre-readtags-program "/usr/bin/readtags"
citre-use-project-root-when-creating-tags t
citre-prompt-language-for-ctags-command t)
(with-eval-after-load 'projectile
(setq citre-project-root-function #'projectile-project-root))
;; Integrate with `lsp-mode' and `eglot' ;; Integrate with `lsp-mode' and `eglot'
(define-advice xref--create-fetcher (:around (fn &rest args) fallback) (define-advice xref--create-fetcher (:around (fn &rest args) fallback)
(let ((fetcher (apply fn args)) (let ((fetcher (apply fn args))

View File

@ -31,18 +31,24 @@
(use-package eglot (use-package eglot
:defer t :defer t
;; :ensure nil :ensure nil
:hook ((css-mode . eglot-ensure) :hook ((css-mode . eglot-ensure)
(html-mode . eglot-ensure) (html-mode . eglot-ensure)
(php-mode . eglot-ensure) (php-mode . eglot-ensure)
(rust-mode . eglot-ensure) (php-ts-mode . eglot-ensure)
(sh-mode . eglot-ensure)) (js-mode . eglot-ensure)
(tsx-ts-mode . eglot-ensure)
(typescript-ts-mode . eglot-ensure)
(rust-mode . eglot-ensure)
(sh-mode . eglot-ensure))
:config :config
(setq eglot-sync-connect 0) (setq eglot-sync-connect 0)
(add-to-list 'eglot-server-programs '(php-mode . ("intelephense" "--stdio")))
) )
;; 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
:defer t
:ensure (:host github :repo "jdtsmith/eglot-booster") :ensure (:host github :repo "jdtsmith/eglot-booster")
:after eglot :after eglot
:config :config
@ -55,6 +61,7 @@
;; Emmet (mientras veo como hacer funcionar emmet-ls) ;; Emmet (mientras veo como hacer funcionar emmet-ls)
(use-package emmet-mode (use-package emmet-mode
:defer t :defer t
:after eglot
:hook :hook
((html-mode . emmet-mode) ((html-mode . emmet-mode)
(web-mode . emmet-mode)) (web-mode . emmet-mode))

View File

@ -14,21 +14,24 @@
;;; Code: ;;; Code:
(use-package evil (use-package evil
:defer t :defer t
:hook (elpaca-after-init . evil-mode) :hook ((elpaca-after-init . evil-mode)
(git-timemachine-mode . evil-emacs-state))
:init
(setq evil-want-keybinding nil)
;; Habilitar atajos de de tecla de emacs en insert state
(setq evil-disable-insert-state-bindings t)
:config :config
;; Configuraciones básicas ;; Configuraciones básicas
;; (setq evil-default-state 'emacs) ;; Modo por defecto en emacs ;; (setq evil-default-state 'emacs) ;; Modo por defecto en emacs
(setq evil-default-state 'insert) ;; Modo por defecto en emacs ;; (setq evil-default-state 'insert) ;; Modo por defecto en emacs
(setq evil-emacs-state-cursor 'bar) ;; Cursor de emacs state en bar (setq evil-emacs-state-cursor 'bar) ;; Cursor de emacs state en bar
;; (setq evil-normal-state-cursor 'bar) ;; Cursor de normal state en bar en lugar de box ;; (setq evil-normal-state-cursor 'bar) ;; Cursor de normal state en bar en lugar de box
(evil-set-leader 'motion (kbd "SPC")) ;; Leader key (evil-set-leader 'motion (kbd "SPC")) ;; Leader key
(evil-set-undo-system 'undo-redo) (evil-set-undo-system 'undo-redo)
;; Habilitar atajos de de tecla de emacs en insert state ;; Arreglar el problemita con corfu-quit y el cambio de modos
(setq evil-insert-state-map (make-sparse-keymap)) (evil-define-key 'emacs 'global (kbd "<escape>") '(lambda ()
"Call `corfu-quit' and then return to Normal State."
;; Cerrar corfu y pasar a modo normal al presionar escape
(evil-define-key 'insert 'global (kbd "<escape>") (lambda()
(interactive) (interactive)
(call-interactively 'corfu-quit) (call-interactively 'corfu-quit)
(evil-normal-state))) (evil-normal-state)))
@ -37,7 +40,7 @@
;; Cambiar a mode emacs con escape ;; Cambiar a mode emacs con escape
;; (evil-define-key 'emacs 'global (kbd "<escape>") 'evil-normal-state) ;; (evil-define-key 'emacs 'global (kbd "<escape>") 'evil-normal-state)
;; Cambiar Insert state por emacs state. ;; Cambiar Insert state por emacs state.
;; (defalias 'evil-insert-state 'evil-emacs-state) (defalias 'evil-insert-state 'evil-emacs-state)
;; Variales locales (todos los estados o solo los estados de VIM) ;; Variales locales (todos los estados o solo los estados de VIM)
(setq all-states '(normal insert visual replace operator motion emacs)) (setq all-states '(normal insert visual replace operator motion emacs))
@ -50,8 +53,7 @@
;; Cambiar C-z a deshacer ;; Cambiar C-z a deshacer
(evil-define-key all-states 'global (kbd "C-z") 'undo) (evil-define-key all-states 'global (kbd "C-z") 'undo)
;; Cambiar C-r a ripgrep y U hasta hacer redo ;; Cambiar U para hacer redo
(evil-define-key vim-states 'global (kbd "C-r") 'consult-ripgrep)
(evil-define-key 'normal 'global (kbd "U") 'undo-redo) (evil-define-key 'normal 'global (kbd "U") 'undo-redo)
(evil-define-key 'normal 'global (kbd "C-S-z") 'undo-redo) (evil-define-key 'normal 'global (kbd "C-S-z") 'undo-redo)
(evil-define-key 'normal 'global (kbd "M-.") 'xref-find-definitions) (evil-define-key 'normal 'global (kbd "M-.") 'xref-find-definitions)
@ -94,25 +96,32 @@
;; Cambios de modos ;; Cambios de modos
(evil-define-key 'normal 'global (kbd "<leader>mh") 'html-mode) (evil-define-key 'normal 'global (kbd "<leader>mh") 'html-mode)
(evil-define-key 'normal 'global (kbd "<leader>mj") 'js-mode) (evil-define-key 'normal 'global (kbd "<leader>mj") 'js-mode)
(evil-define-key 'normal 'global (kbd "<leader>mp") 'php-mode) (evil-define-key 'normal 'global (kbd "<leader>mp") 'php-ts-mode)
(evil-define-key 'normal 'global (kbd "<leader>mr") 'rust-mode) (evil-define-key 'normal 'global (kbd "<leader>mr") 'rust-mode)
(evil-define-key 'normal 'global (kbd "<leader>mw") 'web-mode) (evil-define-key 'normal 'global (kbd "<leader>mw") 'web-mode)
;; Otros atajos ;; Otros atajos
(evil-define-key 'motion 'global (kbd "<leader>xb") 'consult-buffer) ;; Cambiar de buffer (evil-define-key 'motion 'global (kbd "<leader>b") 'switch-to-buffer) ;; Cambiar de buffer
(evil-define-key 'motion 'global (kbd "<leader>xp") 'consult-project-extra-find) ;; Archivos del proyecto (o abrir proyecto si no hay alguno) (evil-define-key 'motion 'global (kbd "<leader>p") 'project-find-file) ;; Archivos del proyecto (o abrir proyecto si no hay alguno)
(evil-define-key 'motion 'global (kbd "<leader>cp") 'project-switch-project) ;; Cambiar proyecto (evil-define-key 'motion 'global (kbd "<leader>cp") 'project-switch-project) ;; Cambiar proyecto
(evil-define-key 'motion 'global (kbd "<leader>xf") 'find-file) ;; Abrir archivo (evil-define-key 'motion 'global (kbd "<leader>f") 'find-file) ;; Abrir archivo
(evil-define-key 'motion 'global (kbd "<leader>xr") 'consult-recent-file) ;; Lista de archivos recientes (evil-define-key 'motion 'global (kbd "<leader>xr") 'consult-recent-file) ;; Lista de archivos recientes
(evil-define-key 'motion 'global (kbd "<leader>rg") 'consult-ripgrep) ;; Búsqueda rápida con ripgrep (evil-define-key 'motion 'global (kbd "<leader>rg") 'consult-ripgrep) ;; Búsqueda rápida con ripgrep
(evil-define-key 'motion 'global (kbd "<leader>gi") 'imenu) ;; imenu (evil-define-key 'motion 'global (kbd "<leader>gi") 'imenu) ;; imenu
(evil-define-key 'motion 'global (kbd "<leader>gg") 'goto-line) ;; Ir a la línea.
;; Iniciar en normal state si es un lenguaje de programación u org-mode ;; Iniciar en normal state solo en modos específicos
;; (evil-set-initial-state 'prog-mode 'normal) (setq evil-default-state 'emacs) ;; Modo por defecto en emacs
;; (evil-set-initial-state 'org-mode 'normal) (evil-set-initial-state 'prog-mode 'normal)
(evil-set-initial-state 'org-mode 'normal)
(evil-set-initial-state 'text-mode 'normal)
(evil-set-initial-state 'csv-mode 'normal)
(evil-set-initial-state 'fundamental-mode 'normal)
(evil-set-initial-state 'dashboard-mode 'normal) (evil-set-initial-state 'dashboard-mode 'normal)
(evil-set-initial-state 'dired 'normal) (evil-set-initial-state 'dired 'normal)
(evil-set-initial-state 'vterm-mode 'emacs) (evil-set-initial-state 'vterm-mode 'emacs)
(evil-set-initial-state 'magit-mode 'emacs)
(evil-set-initial-state 'git-commit-mode 'emacs)
) )
;; Funciones y atajos de teclas especiales para evil cuando estamo en org-mode. ;; Funciones y atajos de teclas especiales para evil cuando estamo en org-mode.
@ -124,5 +133,10 @@
:after org :after org
:hook (org-mode . evil-org-mode)) :hook (org-mode . evil-org-mode))
;; Similar a Vimtutor, pero para evil.
(use-package evil-tutor
:defer t
:ensure t)
(provide 'init-evil) (provide 'init-evil)
;;; init-evil.el ends here ;;; init-evil.el ends here

View File

@ -15,18 +15,6 @@
(interactive "nTransparency Value 0 - 100 opaque:") (interactive "nTransparency Value 0 - 100 opaque:")
(set-frame-parameter nil 'alpha-background value)) (set-frame-parameter nil 'alpha-background value))
;; Crear captura SVG del frame atual. Fuente: https://www.reddit.com/r/emacs/comments/idz35e/emacs_27_can_take_svg_screenshots_of_itself/
(defun screenshot-svg ()
"Save a screenshot of the current frame as an SVG image.
Saves to a temp file and puts the filename in the kill ring."
(interactive)
(let* ((filename (make-temp-file "Emacs" nil ".svg"))
(data (x-export-frames nil 'svg)))
(with-temp-file filename
(insert data))
(kill-new filename)
(message filename)))
;; Comentar línea o región ;; Comentar línea o región
(defun comment-or-uncomment-region-or-line () (defun comment-or-uncomment-region-or-line ()
"Comments or uncomments the region or the current line." "Comments or uncomments the region or the current line."
@ -66,5 +54,40 @@ Saves to a temp file and puts the filename in the kill ring."
(delete-window (git-gutter:popup-buffer-window)) (delete-window (git-gutter:popup-buffer-window))
(git-gutter:popup-hunk))) (git-gutter:popup-hunk)))
;; Obtener el nombre del proyecto desde project.el
(defun kj/project-name (&optional project)
"Return the name for PROJECT.
If PROJECT is not specified, assume current project root."
(when-let (root (or project (kj/project-root)))
(file-name-nondirectory
(directory-file-name
(file-name-directory root)))))
;; Obtener la raíz del proyecto desde project.el
(defun kj/project-root ()
"Return the current project root."
(when-let (project (project-current))
(project-root project)))
;; Cambia entre ocultar o no la barra de título cuando está maximizado
(defun toggle-hide-title-bar()
"Toggle hide title bar when the frame is maximed."
(interactive)
(if (and (boundp 'title-bar-maximixed) title-bar-maximixed)
(progn
(remove-hook 'window-size-change-functions 'frame-hide-title-bar-when-maximized)
(setq title-bar-maximixed nil))
(progn
(add-hook 'window-size-change-functions 'frame-hide-title-bar-when-maximized)
(setq title-bar-maximixed t)))
)
;; Creando un hook para luego de que el theme ha cargado
(defvar after-load-theme-hook nil
"Hook run after a color theme is loaded using `load-theme'.")
(defadvice load-theme (after run-after-load-theme-hook activate)
"Run `after-load-theme-hook'."
(run-hooks 'after-load-theme-hook))
(provide 'init-functions) (provide 'init-functions)
;;; init-functions.el ends here. ;;; init-functions.el ends here.

View File

@ -17,25 +17,27 @@
(global-set-key (kbd "C-x C-z") nil) ; Unbind C-x C-z (don't minimize) (global-set-key (kbd "C-x C-z") nil) ; Unbind C-x C-z (don't minimize)
(global-set-key (kbd "C-z") 'undo) ; Unbind C-z y hacerlo funcionar para deshacer cambios (global-set-key (kbd "C-z") 'undo) ; Unbind C-z y hacerlo funcionar para deshacer cambios
(global-set-key (kbd "C-S-z") 'undo-redo) ; Rehacer cambios con C-S-z (global-set-key (kbd "C-S-z") 'undo-redo) ; Rehacer cambios con C-S-z
(global-set-key (kbd "C-S-a") 'mark-whole-buffer) ; Seleccionar todo con CTRL+SHIFT+a.
(global-set-key (kbd "C-S-c") (global-set-key (kbd "C-S-c")
'comment-or-uncomment-region-or-line) ; Comentar/descomentar línea o selección 'comment-or-uncomment-region-or-line) ; Comentar/descomentar línea o selección
(global-set-key (kbd "C-<f11>") 'toggle-frame-maximized) ; Maximizar / restaurar (global-set-key (kbd "C-<f11>") 'toggle-frame-maximized) ; Maximizar / restaurar
(global-set-key (kbd "C-S-d") 'duplicate-current-line) ; Duplicar línea (global-set-key (kbd "C-S-d") 'duplicate-current-line) ; Duplicar línea
(global-set-key (kbd "C-S-l") 'sort-lines) ; Ordenar líneas alfabéticamente (global-set-key (kbd "<mouse-3>") 'context-menu-open) ; Abrir menú contextal al hacer clic derecho
(global-set-key (kbd "<mouse-3>") 'context-menu-open) ; Ordenar líneas alfabéticamente
;; Cambios rápidos de major modes ;; Cambios rápidos de major modes
(global-set-key (kbd "C-x m") nil) ; Unbind mail on C-x m (global-set-key (kbd "C-x m") nil) ; Unbind mail on C-x m
(global-set-key (kbd "C-x mh") 'mhtml-mode) (global-set-key (kbd "C-x mh") 'mhtml-mode)
(global-set-key (kbd "C-x mj") 'js-mode) (global-set-key (kbd "C-x mj") 'js-mode)
(global-set-key (kbd "C-x mp") 'php-mode) (global-set-key (kbd "C-x mp") 'php-ts-mode)
(global-set-key (kbd "C-x mr") 'rust-mode) (global-set-key (kbd "C-x mr") 'rust-mode)
(global-set-key (kbd "C-x mw") 'web-mode) (global-set-key (kbd "C-x mw") 'web-mode)
;; Cambiar de ventana ;; Cambiar de ventana
(global-set-key (kbd "C-S-o") 'other-window) (global-set-key (kbd "C-S-o") 'other-window)
;; Saltar entre párrafos
(define-key global-map "\M-p" 'backward-paragraph)
(define-key global-map "\M-n" 'forward-paragraph)
;; Meta atajos (atajos de atajos) ;; Meta atajos (atajos de atajos)
;;(global-set-key (kbd "C-c l d") "\C-a\C- \C-n\M-w\C-y") ; Duplicar línea ;;(global-set-key (kbd "C-c l d") "\C-a\C- \C-n\M-w\C-y") ; Duplicar línea

View File

@ -20,16 +20,21 @@
("M-DEL" . vertico-directory-delete-word)) ("M-DEL" . vertico-directory-delete-word))
:hook ((elpaca-after-init . vertico-mode) :hook ((elpaca-after-init . vertico-mode)
(elpaca-after-init . savehist-mode) ;; savehist sirve para recordar el último comando de M-x (elpaca-after-init . savehist-mode) ;; savehist sirve para recordar el último comando de M-x
(rfn-eshadow-update-overlay . vertico-directory-tidy))) (rfn-eshadow-update-overlay . vertico-directory-tidy))
:config
(setq read-file-name-completion-ignore-case t
read-buffer-completion-ignore-case t
completion-ignore-case t)
)
;; Reemplazo para counsel ;; Reemplazo para counsel
(use-package consult (use-package consult
:defer t :defer t
:bind (;; C-c bindings in `mode-specific-map' :bind (("C-x p" . project-find-file)
("C-s" . consult-line) ("C-S-s" . consult-line)
("C-r" . consult-ripgrep) ("C-c r g" . consult-ripgrep)
("C-S-s" . isearch-forward) ("C-S-r" . consult-ripgrep)
("C-S-r" . isearch-backward) ;; ("C-S-s" . isearch-forward)
("M-m" . consult-mode-command) ("M-m" . consult-mode-command)
("C-c h" . consult-history) ("C-c h" . consult-history)
("C-c k" . consult-kmacro) ("C-c k" . consult-kmacro)
@ -39,30 +44,21 @@
([remap recentf-open-files] . consult-recent-file) ([remap recentf-open-files] . consult-recent-file)
;; C-x bindings in `ctl-x-map'
("C-x M-." . consult-complex-command) ;; orig. repeat-complex-command ("C-x M-." . consult-complex-command) ;; orig. repeat-complex-command
("C-x b" . consult-buffer) ;; orig. switch-to-buffer
("C-x 4 b" . consult-buffer-other-window) ;; orig. switch-to-buffer-other-window
("C-x 5 b" . consult-buffer-other-frame) ;; orig. switch-to-buffer-other-frame
("C-x r b" . consult-bookmark) ;; orig. bookmark-jump
("C-c p b" . consult-project-buffer) ;; orig. project-switch-to-buffer ("C-c p b" . consult-project-buffer) ;; orig. project-switch-to-buffer
("C-c p p" . project-switch-project) ;; orig. project-switch-to-buffer ("C-c p p" . project-switch-project)
;; Consult search ;; Consult search
("C-c p f" . consult-find) ;; Búsqueda de archivos en todo el projecto incluso en carpetas ("C-c p f" . consult-find) ;; Búsqueda de archivos en todo el projecto incluso en carpetas
("C-c p l" . consult-line-multi) ;; Búsqueda en todos los buffers del projecto abiertos ("C-c p l" . consult-line-multi) ;; Búsqueda en todos los buffers del projecto abiertos
;; Custom M-# bindings for fast register access ;; Custom M-# bindings for fast register access
("C-'" . consult-register-load) ("C-'" . consult-register-load)
("M-'" . consult-register-store) ;; orig. abbrev-prefix-mark (unrelated) ("M-'" . consult-register-store) ;; orig. abbrev-prefix-mark (unrelated)
("M-¡" . consult-register)
;; Other custom bindings ;; Other custom bindings
("M-y" . consult-yank-pop) ;; orig. yank-pop ("M-y" . consult-yank-pop) ;; orig. yank-pop
;; M-g bindings in `goto-map' ;; M-g bindings in `goto-map'
("M-g f" . consult-flymake) ;; Alternative: consult-flycheck ("M-g f" . consult-flymake) ;; Alternative: consult-flycheck
("M-g g" . consult-goto-line) ;; orig. goto-line ("M-g g" . consult-goto-line) ;; orig. goto-line
("M-g M-g" . consult-goto-line) ;; orig. goto-line ("M-g M-g" . consult-goto-line) ;; orig. goto-line
("M-g o" . consult-outline) ;; Alternative: consult-org-heading
("M-g m" . consult-mark)
("M-g k" . consult-global-mark)
("M-g i" . consult-imenu) ("M-g i" . consult-imenu)
("M-g I" . consult-imenu-multi) ("M-g I" . consult-imenu-multi)
@ -70,14 +66,13 @@
:map minibuffer-local-map :map minibuffer-local-map
("<escape>" . minibuffer-keyboard-quit) ;; Cacelar minibuffer con escape (más rápido que C-g) ("<escape>" . minibuffer-keyboard-quit) ;; Cacelar minibuffer con escape (más rápido que C-g)
("C-<return>" . newline) ;; Insertar nueva línea estando en el minibufer (Mas rápido que C-q C-j) ("C-<return>" . newline) ;; Insertar nueva línea estando en el minibufer (Mas rápido que C-q C-j)
("C-s" . (lambda () ("C-S-s" . (lambda ()
"Insert the current symbol." "Insert the current symbol."
(interactive) (interactive)
(insert (save-excursion (insert (save-excursion
(set-buffer (window-buffer (minibuffer-selected-window))) (set-buffer (window-buffer (minibuffer-selected-window)))
(or (thing-at-point 'symbol t) ""))))) ;; Al presionar por segunda ves C-s busca el símbolo actual. (or (thing-at-point 'symbol t) ""))))) ;; Al presionar por segunda ves C-s busca el símbolo actual.
("M-s" . consult-history) ;; orig. historial de búsqueda )
("M-r" . consult-history)) ;; orig. historual de búsqueda
;; Enable automatic preview at point in the *Completions* buffer. This is ;; Enable automatic preview at point in the *Completions* buffer. This is
;; relevant when you use the default completion UI. ;; relevant when you use the default completion UI.
@ -125,13 +120,6 @@
:defer t :defer t
:hook (ibuffer-mode . nerd-icons-ibuffer-mode)) :hook (ibuffer-mode . nerd-icons-ibuffer-mode))
;; Integración entre consult y project
(use-package consult-project-extra
:ensure t
:bind
(("C-x p" . consult-project-extra-find)
("C-c p o" . consult-project-extra-find-other-window)))
;; Descripciones en el minibufer ;; Descripciones en el minibufer
(use-package marginalia (use-package marginalia
:defer t :defer t
@ -148,5 +136,16 @@
:bind ("C-c t" . consult-todo) :bind ("C-c t" . consult-todo)
:defer t) :defer t)
;; Mover el minibufer de vertico al centro de la pantalla.
(use-package vertico-posframe
:after vertico
:config
(vertico-posframe-mode 1)
(setq vertico-posframe-border-width 1)
(setq 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

@ -25,6 +25,9 @@
(visual-line-mode 1) (visual-line-mode 1)
(visual-fill-column-mode 1) (visual-fill-column-mode 1)
;; Configuracin para Systanx Highlight en porg-blocks
(add-to-list 'org-src-lang-modes (cons "html" 'mhtml))
;; Configuración de fonts ;; Configuración de fonts
;; (set-face-attribute (car face) nil :font "Cantarell" :weight 'regular :height (cdr face)) ;; (set-face-attribute (car face) nil :font "Cantarell" :weight 'regular :height (cdr face))
@ -75,14 +78,34 @@
;; (push '("#+begin_example" . "🦉" ) prettify-symbols-alist) ;; (push '("#+begin_example" . "🦉" ) prettify-symbols-alist)
;; (push '("#+end_example" . "⎯" ) prettify-symbols-alist) ;; (push '("#+end_example" . "⎯" ) prettify-symbols-alist)
(prettify-symbols-mode) (prettify-symbols-mode)
;; Habilitar evaluación de lenguajes en org-mode (babel)
(org-babel-do-load-languages 'org-babel-load-languages
(append org-babel-load-languages
'(
(C . t)
(R . t)
(awk . t)
(calc . t)
(clojure . t)
(go . t)
(haskell . t)
(java . t)
(js . t)
(php . t)
(python . t)
(rust . t)
(translate . t)
(shell . t)
)))
;; No solicitar confirmación para evaluar
(setq org-confirm-babel-evaluate nil)
) )
;; org-mode ;; org-mode
(use-package org (use-package org
:defer t :defer t
:ensure nil :ensure nil
:bind (("C-c a" . org-agenda)
("C-c c" . org-capture))
:hook :hook
(org-mode . kj/org-hook) (org-mode . kj/org-hook)
:config :config
@ -109,7 +132,7 @@
'(("TODO" . "#ff6464") '(("TODO" . "#ff6464")
("DOING" . "yellow") ("DOING" . "yellow")
("DONE" . "green") ("DONE" . "green")
("WAITING" . "orange") ("HOLD" . "orange")
("CANCELED" . "#aaa")) ("CANCELED" . "#aaa"))
) )
@ -137,13 +160,6 @@
;; Guardar los archivos cuando se muevan tareas entre ellos ;; Guardar los archivos cuando se muevan tareas entre ellos
(advice-add 'org-refile :after 'org-save-all-org-buffers) (advice-add 'org-refile :after 'org-save-all-org-buffers)
(setq org-capture-templates
`(("t" "Tareas")
("tt" "Tareas" entry (file+olp "~/Documentos/ORG/Agenda/Tareas.org")
"* TODO %? \n %a\n %i" :empty-lines 1)
)
)
;; Configuración de imágenes ;; Configuración de imágenes
(setq org-startup-with-inline-images t) ;; Mostrar por defecto las imágenes (setq org-startup-with-inline-images t) ;; Mostrar por defecto las imágenes
(setq org-display-remote-inline-images 'cache) ;; Mostrar imágenes remotas (setq org-display-remote-inline-images 'cache) ;; Mostrar imágenes remotas
@ -152,6 +168,7 @@
;; Org-yt para soportar embebidos. ;; Org-yt para soportar embebidos.
(use-package org-yt (use-package org-yt
:after org
:ensure (:host github :repo "TobiasZawada/org-yt") :ensure (:host github :repo "TobiasZawada/org-yt")
:config :config
(defun org-http-image-data-fn (protocol link _description) (defun org-http-image-data-fn (protocol link _description)
@ -173,7 +190,38 @@
(use-package org-bullets (use-package org-bullets
:defer t :defer t
:hook :hook
(org-mode . org-bullets-mode)) (org-mode . org-bullets-mode)
:config
(setq org-bullets-bullet-list '(""
""
""
""
""
""
""
""))
)
;; Mejora visualmente varias cosas de org
(use-package org-modern
:defer t
:ensure t
:hook ((org-mode . org-modern-mode)
(org-agenda . org-modern-mode))
:config
;; Me gustan varias cosas por defecto, así que desactivo aquí varias de las "mejoras"
(setq org-modern-table nil ;; Mejora visual de las tablas
org-modern-table-vertical 1 ;; Grosor de las líneas verticales de las tablas
org-modern-table-horizontal 0.2 ;; Grosor de las líneas horizontales de las tablas
org-modern-priority nil ;; Mejora de las prioridades (Arriba ya las puse bonitas con prettyfy-symbols, así que mejor está desactivado)
org-modern-todo nil ;; Mejora visual a las lista de tareas
org-modern-progress nil ;; Mejora visual a las estadísticas de completado de uan tarea (ej: [50%] o [5/9])
org-modern-checkbox nil ;; Mejora de los checkboxes (a mi parecer se ven más feos, los por defecto ya están bonitos).
org-modern-keyword nil ;; Oculta el "#+" en los keywords de org
org-modern-block-name nil ;; Mejora visual para los org blocks (bloques de código, ejemplo, citas, etc.)
org-modern-star nil ;; Lista de bullets a usar en los headers (falla si se activa junto a org-bullets).
org-modern-list nil)
)
(use-package visual-fill-column (use-package visual-fill-column
:defer t :defer t
@ -214,9 +262,30 @@
;; Continúa el formato de la lista cuando presionas enter. ;; Continúa el formato de la lista cuando presionas enter.
(use-package org-autolist (use-package org-autolist
:defer t
:ensure t :ensure t
:hook (org-mode . org-autolist-mode)) :hook (org-mode . org-autolist-mode))
;; Org babel para PHP
(use-package ob-php
:defer t
:ensure t)
;; Org babel para GO
(use-package ob-go
:defer t
:ensure t)
;; Org babel para Rust
(use-package ob-rust
:defer t
:ensure t)
;; Org babel para traducciones (mediante google translate)
(use-package ob-translate
:defer t
:ensure t)
;; Org mode en modo presentación ;; Org mode en modo presentación
(use-package org-present (use-package org-present
:defer t :defer t
@ -248,10 +317,11 @@
;; Mostrar los caracteres ocultos de org mode al pasar con el cursor. ;; Mostrar los caracteres ocultos de org mode al pasar con el cursor.
(use-package org-appear (use-package org-appear
:defer t :defer t
:hook (org-mode . org-appear-mode)) ;; :hook (org-mode . org-appear-mode)
)
;; Polymode para org-mode ;; Polymode para org-mode
(use-package poly-org) ;; (use-package poly-org)
(provide 'init-org) (provide 'init-org)
;;; init-org.el ends here ;;; init-org.el ends here

View File

@ -14,9 +14,15 @@
;;; Code: ;;; Code:
;; Mejora del reemplazo
(use-package anzu
:defer t
:bind (([remap query-replace] . anzu-query-replace)
([remap query-replace-regexp] . anzu-query-replace-regexp)))
;; Intercamiar buffers de lugar ;; Intercamiar buffers de lugar
(use-package buffer-move (use-package buffer-move
:defer t :defer 2
:bind (("M-S-<up>" . buf-move-up) :bind (("M-S-<up>" . buf-move-up)
("M-S-<down>" . buf-move-down) ("M-S-<down>" . buf-move-down)
("M-S-<left>" . buf-move-left) ("M-S-<left>" . buf-move-left)
@ -31,20 +37,27 @@
;; Seleccionar por regiones (similar a mark-sexp, pero toma en cuenta hacia atrás del cursor también) ;; Seleccionar por regiones (similar a mark-sexp, pero toma en cuenta hacia atrás del cursor también)
(use-package expand-region (use-package expand-region
:defer t :defer t
:bind ("C-+" . er/expand-region)) :bind (("C-+" . er/expand-region)
("C-=" . er/expand-region)))
;; Major mode para archivos CSV ;; Major mode para archivos CSV
(use-package csv-mode (use-package csv-mode
:defer t :defer t
:hook ((csv-mode . csv-align-mode) ;; :hook ((csv-mode . csv-align-mode)
(csv-mode . csv-header-line)) ;; (csv-mode . csv-header-line))
) )
;; Visor de documentos de emacs (soporta de todo: epub, pdf, odt, docx, cbz, etc.)
(use-package doc-view
:defer t
:hook
(doc-view-mode . (lambda ()
(display-line-numbers-mode 0)))
:ensure nil)
;; Un bonito y sencillo panel de inicio ;; Un bonito y sencillo panel de inicio
(use-package dashboard (use-package dashboard
:defer t :defer t
:init
(dashboard-setup-startup-hook)
:config :config
(setq dashboard-set-file-icons t (setq dashboard-set-file-icons t
dashboard-set-heading-icons t dashboard-set-heading-icons t
@ -54,20 +67,19 @@
(setq dashboard-startup-banner (setq dashboard-startup-banner
(expand-file-name "duck.svg" user-emacs-directory)) (expand-file-name "duck.svg" user-emacs-directory))
(setq dashboard-items '( (setq dashboard-items '(
;; (recents . 10)
(agenda . 10) (agenda . 10)
;;(recents . 10)
)) ))
) )
;; Coloca en emacs la documentacón distribuída por devdocs.io ;; Coloca en emacs la documentacón distribuída por devdocs.io
(use-package devdocs (use-package devdocs
:defer t) :defer 2)
;; Sidebar a la derecha con los archivos ;; Sidebar a la derecha con los archivos
(use-package dired-sidebar (use-package dired-sidebar
:defer t :defer t
:hook (dired-mode . hl-line-mode) :hook (dired-mode . hl-line-mode)
:ensure t
:bind ([f9] . dired-sidebar-toggle-sidebar) :bind ([f9] . dired-sidebar-toggle-sidebar)
:commands (dired-sidebar-toggle-sidebar) :commands (dired-sidebar-toggle-sidebar)
:config :config
@ -76,20 +88,12 @@
;; dired-sidebar-follow-file-idle-delay 0.5 ;; dired-sidebar-follow-file-idle-delay 0.5
)) ))
;; Mover líneas o regiones
(use-package drag-stuff
:defer t
:hook
(elpaca-after-init . drag-stuff-global-mode)
:config
(drag-stuff-define-keys))
;; La línea bonita esa de abajo ;; La línea bonita esa de abajo
(use-package doom-modeline (use-package doom-modeline
:defer t :after emacs
:ensure t :ensure t
:hook (elpaca-after-init . doom-modeline-mode)
:config :config
(doom-modeline-mode)
(setq doom-modeline-project-detection 'auto (setq doom-modeline-project-detection 'auto
doom-modeline-buffer-file-name-style 'relative-from-project doom-modeline-buffer-file-name-style 'relative-from-project
doom-modeline-major-mode-color-icon t doom-modeline-major-mode-color-icon t
@ -97,66 +101,36 @@
doom-modeline-indent-info nil doom-modeline-indent-info nil
doom-modeline-persp-name t)) doom-modeline-persp-name t))
;; Resolver diferencias entre 2 archivos o versiones del mismo. ;; Modo para edición de arc docker compose
(use-package ediff (use-package docker-compose-mode
:defer t)
;; Modo para la edición de archivos Dockerfile (y building desde emacs)
(use-package dockerfile-mode
:defer t :defer t
:ensure nil
:config :config
(setq ediff-diff-options "") ;; Suelo tener podman siempre en lugar de docker, así que lo definimos como el comando a usar
(setq ediff-custom-diff-options "-u") (setq dockerfile-mode-command "podman"))
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
(setq ediff-split-window-function 'split-window-vertically)) ;; Mover líneas o regiones
(use-package drag-stuff
:defer 1
:config
(drag-stuff-global-mode)
(drag-stuff-define-keys))
;; Emparejamiento automático de comillas, paréntesis, corchetes y llaves ;; Emparejamiento automático de comillas, paréntesis, corchetes y llaves
(use-package electric-pair ;; (use-package electric-pair
:defer t ;; :defer t
:ensure nil ;; :ensure nil
:hook (elpaca-after-init . electric-pair-mode) ;; :config
:config ;; (electric-pair-mode)
(setq electric-pair-delete-adjacent-pairs nil)) ;; (setq electric-pair-delete-adjacent-pairs nil))
;; Git Gutter - Marca a la izq. si una linea ha sido agregada, editada o eliminada desde el último commit. ;; Cargar las variables de entorno desde la configuración del usuario
(use-package git-gutter (use-package exec-path-from-shell
:defer t
:hook
(elpaca-after-init . global-git-gutter-mode)
:config :config
(defhydra hydra-git-gutter nil (exec-path-from-shell-initialize))
"git hunk"
("p" git-gutter:previous-hunk "previous")
("n" git-gutter:next-hunk "next")
("s" git-gutter:stage-hunk "stage")
("r" git-gutter:revert-hunk "revert")
("m" git-gutter:mark-hunk "mark")
("SPC" git-gutter:toggle-popup-hunk "toggle diffinfo"))
)
;; Cliente LLM (ollama, chatgpt, gemini, etc.)
(use-package gptel
:defer t
:config
(setq gptel-model "mistral:latest"
gptel-backend (gptel-make-ollama "Ollama"
:host "localhost:11434"
:stream t
:models '("mistral:latest" "zephyr:latest" "llama2-uncensored:latest"))
gptel-default-mode 'org-mode
gptel-prompt-prefix-alist
'((markdown-mode . "# ")
(org-mode . "* ")
(text-mode . "# "))
gptel-directives
'((default . "Eres un LLM que vive dentro de Emacs. Responde de manera concisa.")
(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 translator. Improve grammar and spelling.")
(chat . "Eres un LLM y un compañero de conversación. Responde de manera concisa y en español.")
)
)
)
;; Resalta los escapes de secuencia ;; Resalta los escapes de secuencia
(use-package highlight-escape-sequences (use-package highlight-escape-sequences
@ -169,6 +143,7 @@
(objc-mode . ,hes-c/c++/objc-escape-sequence-re) (objc-mode . ,hes-c/c++/objc-escape-sequence-re)
(go-mode . ,hes-c/c++/objc-escape-sequence-re) (go-mode . ,hes-c/c++/objc-escape-sequence-re)
(php-mode . ,hes-c/c++/objc-escape-sequence-re) (php-mode . ,hes-c/c++/objc-escape-sequence-re)
(php-ts-mode . ,hes-c/c++/objc-escape-sequence-re)
(java-mode . ,hes-java-escape-sequence-re) (java-mode . ,hes-java-escape-sequence-re)
(clojure-mode . ,hes-java-escape-sequence-re) (clojure-mode . ,hes-java-escape-sequence-re)
(js-mode . ,hes-js-escape-sequence-re) (js-mode . ,hes-js-escape-sequence-re)
@ -182,8 +157,16 @@
;; Resaltar palabras clave como TODO, FIXME, etc. en comentarios del código. ;; Resaltar palabras clave como TODO, FIXME, etc. en comentarios del código.
(use-package hl-todo (use-package hl-todo
:ensure (hl-todo :version (lambda (_) "3.6.0"))
:defer t :defer t
:hook (prog-mode . hl-todo-mode)) :hook (prog-mode . hl-todo-mode)
:config
(add-to-list 'hl-todo-keyword-faces '("BUG" . "#d99600")))
;; Paquete para exportar buffers de emacs a HTML
(use-package htmlize
:defer t
:ensure t)
;; Permite crear conjuntos de atajos. ;; Permite crear conjuntos de atajos.
(use-package hydra (use-package hydra
@ -204,31 +187,14 @@
keypression-font-face-attribute '(:width normal :height 180 :weight bold)) keypression-font-face-attribute '(:width normal :height 180 :weight bold))
) )
;; Generador automatizado de archivos de licencia
(use-package license-templates
:defer t)
;; Magia para git
(use-package magit
:defer t)
;; Todolist en magit de todos los archivos del projecto.
(use-package magit-todos
:defer t
:after magit
:config (magit-todos-mode 1))
;; Modo markdown ;; Modo markdown
(use-package markdown-mode (use-package markdown-mode
:defer t) :defer t)
;; Multiples cursores en emacs
(use-package multiple-cursors
:defer t)
;; Multiple vterm ;; Multiple vterm
(use-package multi-vterm (use-package multi-vterm
:defer t :defer t
:after vterm
:bind* (("<f5>" . multi-vterm-dedicated-toggle) :bind* (("<f5>" . multi-vterm-dedicated-toggle)
("C-x tt" . multi-vterm-dedicated-toggle) ("C-x tt" . multi-vterm-dedicated-toggle)
("C-x tf" . multi-vterm) ("C-x tf" . multi-vterm)
@ -244,19 +210,16 @@
;; Usar nerd-icons en dired ;; Usar nerd-icons en dired
(use-package nerd-icons-dired (use-package nerd-icons-dired
:defer t :defer t
:after nerd-icons
:hook (dired-mode . nerd-icons-dired-mode)) :hook (dired-mode . nerd-icons-dired-mode))
;; Modo para leer archivos de configuración de nginx ;; Modo para leer archivos de configuración de nginx
(use-package nginx-mode (use-package nginx-mode
:defer t) :defer t)
;; Lector EPUB
;; (use-package nov
;; :defer t)
;; Múltiples modos en un mismo buffer ;; Múltiples modos en un mismo buffer
(use-package polymode ;; (use-package polymode
:defer t) ;; :defer t)
;; Des-minifica / ordena el código ;; Des-minifica / ordena el código
(use-package prettier (use-package prettier
@ -266,20 +229,6 @@
:defer t :defer t
:ensure nil :ensure nil
:config :config
(defun kj/project-name (&optional project)
"Return the name for PROJECT.
If PROJECT is not specified, assume current project root."
(when-let (root (or project (kj/project-root)))
(file-name-nondirectory
(directory-file-name
(file-name-directory root)))))
(defun kj/project-root ()
"Return the current project root."
(when-let (project (project-current))
(project-root project)))
;; Colocamos un título del frame más bonito y útil que el por defecto ;; Colocamos un título del frame más bonito y útil que el por defecto
(setq frame-title-format (setq frame-title-format
'( '(
@ -292,49 +241,61 @@ If PROJECT is not specified, assume current project root."
) )
) )
;; Correr el código desde el buffer de emacs
(use-package quickrun
:defer t
:ensure t
:bind (:map prog-mode-map
("C-c C-r" . quickrun)
("C-c r f" . quickrun)
("C-c r r" . quickrun-region)
("C-c r R" . quickrun-replace-region)
)
)
;; Recentf - Guarda registro de los archivos abiertos recientemente ;; Recentf - Guarda registro de los archivos abiertos recientemente
(use-package recentf (use-package recentf
:defer t :defer t
:ensure nil :ensure nil
:bind ("C-x C-r" . recentf-open-files) :bind ("C-x C-r" . recentf-open-files)
:hook (after-load-theme . recentf-mode)
:config :config
(setq recentf-save-file (setq recentf-save-file
(recentf-expand-file-name (concat temp-dir "/recentf")) (recentf-expand-file-name (concat temp-dir "/recentf"))
recentf-auto-cleanup 'never
recentf-keep '(file-remote-p file-readable-p)
recentf-max-saved-items 1000 recentf-max-saved-items 1000
recentf-max-menu-items 500) recentf-max-menu-items 500))
(recentf-mode 1))
;; Busqueda rápida con ripgrep ;; Busqueda rápida con ripgrep
(use-package rg (use-package rg
:defer t :defer t
:hook (elpaca-after-init . rg-enable-default-bindings) ;; :hook (elpaca-after-init . rg-enable-default-bindings)
:bind (:map rg-global-map :bind (:map rg-global-map
("c" . rg-dwim-current-dir) ("c" . rg-dwim-current-dir)
("f" . rg-dwim-current-file) ("f" . rg-dwim-current-file)
("m" . rg-menu)) ("m" . rg-menu))
:init (setq rg-group-result t
rg-show-columns t)
:config :config
(setq rg-group-result t
rg-show-columns t)
(cl-pushnew '("tmpl" . "*.tmpl") rg-custom-type-aliases)) (cl-pushnew '("tmpl" . "*.tmpl") rg-custom-type-aliases))
;; Guardar la posición del cursor en un archivo para volver allí cuando se lo vuelva a abrir. ;; Guardar la posición del cursor en un archivo para volver allí cuando se lo vuelva a abrir.
(use-package saveplace (use-package saveplace
:ensure nil :ensure nil
:hook (elpaca-after-init . save-place-mode)
:config
(setq save-place-file (locate-user-emacs-file (concat temp-dir "/places"))))
;; Paquete para crear imágens (solo lo uso para sacar capturas SVG de emacs)
(use-package silicon
:defer t :defer t
:ensure (:host github :repo "iensu/silicon-el")) :hook
(elpaca-after-init . (lambda()
(setq save-place-file (locate-user-emacs-file (concat temp-dir "/places")))
(save-place-mode 1)
))
)
;; Mejorando el scroll ;; Mejorando el scroll
(use-package smooth-scrolling (use-package smooth-scrolling
:defer t :defer t
:hook (elpaca-after-init . smooth-scrolling-mode)
:config :config
(smooth-scrolling-mode 1)
(setq mouse-wheel-scroll-amount (setq mouse-wheel-scroll-amount
'(8 ((shift) . 1) ((control) . nil))) ; Cambia el scroll a 8 líneas a la vez, 1 cuando se preciona SHIFT y saltos de página cuando presionas CTRL '(8 ((shift) . 1) ((control) . nil))) ; Cambia el scroll a 8 líneas a la vez, 1 cuando se preciona SHIFT y saltos de página cuando presionas CTRL
(setq mouse-wheel-progressive-speed nil) ; Deshabilita la velocidad progresiva del scroll (mientras más scroll haces, mas rápido va) (setq mouse-wheel-progressive-speed nil) ; Deshabilita la velocidad progresiva del scroll (mientras más scroll haces, mas rápido va)
@ -364,13 +325,14 @@ If PROJECT is not specified, assume current project root."
:defer t :defer t
:hook :hook
(speed-type-mode . (lambda () (speed-type-mode . (lambda ()
(corfu-mode 0)
(display-line-numbers-mode 0) (display-line-numbers-mode 0)
(visual-line-mode 1) (visual-line-mode 1)
(visual-fill-column-mode 1))) (visual-fill-column-mode 1)))
:diminish :diminish
:config :config
(setq speed-type-gb-book-list '(66867 66866 66591 57303) (setq speed-type-gb-book-list '(66867 66866 66591 57303 15725 24536)
speed-type-min-chars 500 speed-type-min-chars 300
speed-type-max-chars 600)) speed-type-max-chars 600))
;; Tree-sitter :) ;; Tree-sitter :)
@ -389,16 +351,20 @@ If PROJECT is not specified, assume current project root."
(html . ("https://github.com/tree-sitter/tree-sitter-html")) (html . ("https://github.com/tree-sitter/tree-sitter-html"))
(java . ("https://github.com/tree-sitter/tree-sitter-java")) (java . ("https://github.com/tree-sitter/tree-sitter-java"))
(javascript . ("https://github.com/tree-sitter/tree-sitter-javascript")) (javascript . ("https://github.com/tree-sitter/tree-sitter-javascript"))
(jsdoc . ("https://github.com/tree-sitter/tree-sitter-jsdoc"))
(json . ("https://github.com/tree-sitter/tree-sitter-json")) (json . ("https://github.com/tree-sitter/tree-sitter-json"))
(julia . ("https://github.com/tree-sitter/tree-sitter-julia")) (julia . ("https://github.com/tree-sitter/tree-sitter-julia"))
(lua . ("https://github.com/Azganoth/tree-sitter-lua")) (lua . ("https://github.com/Azganoth/tree-sitter-lua"))
(make . ("https://github.com/alemuller/tree-sitter-make")) (make . ("https://github.com/alemuller/tree-sitter-make"))
(python . ("https://github.com/tree-sitter/tree-sitter-python")) (python . ("https://github.com/tree-sitter/tree-sitter-python"))
(php . ("https://github.com/tree-sitter/tree-sitter-php" "master" "php/src")) (php . ("https://github.com/tree-sitter/tree-sitter-php" "master" "php/src"))
(phpdoc . ("https://github.com/claytonrcarter/tree-sitter-phpdoc"))
(ruby . ("https://github.com/tree-sitter/tree-sitter-ruby")) (ruby . ("https://github.com/tree-sitter/tree-sitter-ruby"))
(rust . ("https://github.com/tree-sitter/tree-sitter-rust")) (rust . ("https://github.com/tree-sitter/tree-sitter-rust"))
(sql . ("https://github.com/m-novikov/tree-sitter-sql")) (sql . ("https://github.com/m-novikov/tree-sitter-sql"))
(toml . ("https://github.com/tree-sitter/tree-sitter-toml")) (toml . ("https://github.com/tree-sitter/tree-sitter-toml"))
(tsx . ("https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src"))
(typescript . ("https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src"))
(zig . ("https://github.com/GrayJack/tree-sitter-zig")))) (zig . ("https://github.com/GrayJack/tree-sitter-zig"))))
(defun nf/treesit-install-all-languages () (defun nf/treesit-install-all-languages ()
"Install all languages specified by `treesit-language-source-alist'." "Install all languages specified by `treesit-language-source-alist'."
@ -409,39 +375,39 @@ If PROJECT is not specified, assume current project root."
(message "`%s' parser was installed." lang) (message "`%s' parser was installed." lang)
(sit-for 0.75))))) (sit-for 0.75)))))
;; Cuando presionas enter en un bloque de comentario sigue el estilo del bloque.
;; (use-package vs-comment-return
;; :ensure (:host github :repo "emacs-vs/vs-comment-return")
;; :defer t
;; :hook (prog-mode . vs-comment-return-mode)
;; )
;; Mostrar el último commit que modificó la linea actual
(use-package vc-msg
:defer t
:bind (("C-c v" . vc-msg-show)
("C-c C-v" . vc-msg-show))
)
;; Terminal ;; Terminal
(use-package vterm (use-package vterm
:ensure t :defer t
:defer t) :config
(setq tramp-histfile-override nil) ;; Dejamos que se use el history por defecto del servidor remoto
(setq vterm-tramp-shells '(("ssh" "/bin/bash")
("sshx" "/bin/bash")
("docker" "/bin/bash")
("podman" "/bin/bash"))) ;; Tanto docker como podman usarán bash cuado se contecte mediante tramp
)
;; Cuando iniicias un atajo de teclas te muestra las posibilidades ;; Cuando inicias un atajo de teclas te muestra las posibilidades
(use-package which-key (use-package which-key
:defer t :defer t
:hook (elpaca-after-init . which-key-mode)) :config
(which-key-mode))
;; Muestra which-key en un frame en el centro en lugar de abajo
(use-package which-key-posframe
:after which-key
:config
(which-key-posframe-mode))
;; Restaurar el estado de los frames ;; Restaurar el estado de los frames
(use-package winner (use-package winner
:ensure nil :ensure nil
:defer t :defer t
:hook (elpaca-after-init . winner-mode)) :config
(winner-mode))
;; Emacs Start Up Profiler ;; Emacs Start Up Profiler
(use-package esup ;; (use-package esup
:defer t) ;; :defer t)
(provide 'init-packages) (provide 'init-packages)
;;; init-packages.el ends here ;;; init-packages.el ends here

View File

@ -11,71 +11,28 @@
;;; Code: ;;; Code:
;; Theme dracula (https://draculatheme.com/) ;; Theme dracula (https://draculatheme.com/) // aún lo tengo en l config porque a Ney le gusta
(use-package dracula-theme (use-package dracula-theme
:defer t :defer t)
;; :hook
;; (elpaca-after-init . (lambda()
;; (load-theme 'dracula t)
;; (set-face-attribute 'default nil :font "Fira Code Retina" :height 112) ; Font
;; ))
)
;; El theme más cercano a adwaita dark que he encontrado ;; El theme más cercano a adwaita dark que he encontrado
(use-package adwaita-dark-theme (use-package adwaita-dark-theme
:defer t :defer t)
:hook
(elpaca-after-init . (lambda()
(load-theme 'adwaita-dark t)
(set-face-attribute 'default nil :font "Fira Code Retina" :height 112) ; Font
))
)
;; Theme adwaita, viene integrado en emacs desde la v29.1
;; (use-package adwaita-theme
;; :elpaca nil
;; :defer t
;; :hook
;; (elpaca-after-init . (lambda()
;; (load-theme 'adwaita t)
;; (set-face-attribute 'default nil :font "Fira Code Retina" :height 112) ; Font
;; ))
;; )
;; Themes modus, vienen integrado en emacs en master (~v30) ;; Themes modus, vienen integrado en emacs en master (~v30)
;; (use-package modus-themes (use-package modus-themes
;; :elpaca nil :defer t)
;; :defer t
;; :hook
;; (elpaca-after-init . (lambda()
;; (load-theme 'modus-operandi-tinted t) ;; Solarized
;; (set-face-attribute 'default nil :font "Fira Code Retina" :height 112) ; Font
;; ))
;; )
;; Themes ef ;; Themes ef
(use-package ef-themes (use-package ef-themes
:defer t :defer t)
;; :hook
;; (elpaca-after-init . (lambda()
;; (load-theme 'ef-light t)
;; (set-face-attribute 'default nil :font "Fira Code Retina" :height 112) ; Font
;; ))
)
;; Themes de doom emacs ;; Prendemos el theme que elijamos
;; (use-package doom-themes (add-hook 'elpaca-after-init-hook #'(lambda() (load-theme 'ef-dream t)))
;; :defer t
;; :hook
;; (elpaca-after-init . (lambda()
;; (setq doom-themes-enable-bold t ; if nil, bold is universally disabled
;; doom-themes-enable-italic t) ; if nil, italics is universally disabled
;; (set-face-attribute 'default nil :font "Fira Code Retina" :height 112) ; Font
;; (load-theme 'doom-one t)
;; (doom-themes-org-config)
;; ))
;; )
;; Los themes que recomiendo:
;; Oscuros: adwaita-dark y ef-dream
;; Claros: modus-operandi-tinted y ef-day
(provide 'init-theme) (provide 'init-theme)
;;; init-theme.el ends here ;;; init-theme.el ends here

111
configs/init-vc.el Normal file
View File

@ -0,0 +1,111 @@
;;; init-vc.el --- Configuración del control de versiones -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;; Archivo de configuración específico para el control de versiones.
;;
;; Puedes que hoy en día la norma es usar git para este trabajo,
;; la gran mayoría de configuraciones son justamente para el mismo.
;;; Code:
;; Resolver diferencias entre 2 archivos o versiones del mismo.
(use-package ediff
:defer t
:ensure nil
:config
(setq ediff-diff-options "")
(setq ediff-custom-diff-options "-u")
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
(setq ediff-split-window-function 'split-window-vertically))
;; Git Gutter - Marca a la izq. si una linea ha sido agregada, editada o eliminada desde el último commit.
(use-package git-gutter
:defer t
:config
(global-git-gutter-mode 1)
(defhydra hydra-git-gutter (:hint nil)
"
^Navigation^ | ^Actions^ | ^Others^
-^-----------^-+-^----^--------+-^-------^----------
_p_: previous | _s_: stage | _m_: mark
_n_: next | _r_: revert | _SPC_: toggle info
-^-----------^-+-^----^--------+-^-------^----------
"
("p" git-gutter:previous-hunk)
("n" git-gutter:next-hunk)
("s" git-gutter:stage-hunk)
("r" git-gutter:revert-hunk)
("m" git-gutter:mark-hunkmark)
("SPC" git-gutter:toggle-popup-hunk))
)
;; Visitar rápidamente viejas versiones de un archivo rápidamente
(use-package git-timemachine
:defer t)
;; Generador automatizado de archivos de licencia
(use-package license-templates
:defer t)
;; Magia para git
(use-package magit
:defer t)
;; Todolist en magit de todos los archivos del projecto.
(use-package magit-todos
:defer t
:config (magit-todos-mode 1))
;; Modo para resolución de confictos
(use-package smerge-mode
:ensure nil
:defer t
:config
(defhydra hydra-smerge (:color pink
:hint nil)
"
^Move^ ^Keep^ ^Diff^ ^Other^
^^-----------^^-------------------^^---------------------^^-------
_n_ext _b_ase _<_: upper/base _C_ombine
_p_rev _u_pper _=_: upper/lower _r_esolve
^^ _l_ower _>_: base/lower _k_ill current
^^ _a_ll _R_efine
^^ _RET_: current _E_diff
"
("n" smerge-next)
("p" smerge-prev)
("b" smerge-keep-base)
("u" smerge-keep-upper)
("l" smerge-keep-lower)
("a" smerge-keep-all)
("RET" smerge-keep-current)
("\C-m" smerge-keep-current)
("<" smerge-diff-base-upper)
("=" smerge-diff-upper-lower)
(">" smerge-diff-base-lower)
("R" smerge-refine)
("E" smerge-ediff)
("C" smerge-combine-with-next)
("r" smerge-resolve)
("k" smerge-kill-current)
("q" nil "cancel" :color blue))
)
(use-package transient
:defer t)
;; Mostrar el último commit que modificó la linea actual
(use-package vc-msg
:defer t
:bind (("C-c v" . vc-msg-show)
("C-c C-v" . vc-msg-show))
)
(provide 'init-vc)
;;; init-vc.el ends here

View File

@ -20,6 +20,11 @@
) )
(use-package css-mode
:defer t
:ensure nil
:config
(setq css-indent-offset 2))
(use-package auto-rename-tag (use-package auto-rename-tag
:ensure (:host github :repo "jcs-elpa/auto-rename-tag") :ensure (:host github :repo "jcs-elpa/auto-rename-tag")

View File

@ -14,8 +14,9 @@
:ensure nil :ensure nil
:mode :mode
("\\.js$" . js-mode) ("\\.js$" . js-mode)
:hook :init
(js-mode . eglot-ensure) (add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-ts-mode))
(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-ts-mode))
:config :config
(setq js-indent-level 2)) (setq js-indent-level 2))

View File

@ -9,24 +9,21 @@
;;; Code: ;;; Code:
(use-package php-mode (use-package php-ts-mode
:defer t :defer t
:bind ("C-c d b" . kj/php-doc-block) :mode "\\.php\\'"
:config ;; :init
(defun kj/php-doc-block () ;; (add-to-list 'auto-mode-alist '("\\.php\\'" . php-ts-mode))
"Llama a \"php-dock-block\", sin conflicto con \"vs-comment-return-mode\"." ;; :after php-mode
(interactive) :ensure nil)
(if (bound-and-true-p vs-comment-return-mode)
(funcall (lambda() ;; (use-package php-mode
(vs-comment-return-mode -1) ;; :defer t
(php-doc-block) ;; :ensure t)
(vs-comment-return-mode 1)))
(php-doc-block)
)
)
)
(use-package php-doc-block (use-package php-doc-block
:after php-ts-mode
:bind ("C-c d b" . php-doc-block)
:ensure (:host github :repo "moskalyovd/emacs-php-doc-block") :ensure (:host github :repo "moskalyovd/emacs-php-doc-block")
) )

View File

@ -12,6 +12,8 @@
(use-package rust-mode (use-package rust-mode
:defer t :defer t
:ensure t :ensure t
:init
(setq rust-mode-treesitter-derive t)
:config :config
(setq rust-format-on-save t)) (setq rust-format-on-save t))

View File

@ -39,6 +39,9 @@
;; Permitir solo la búsqueda de archivos a cargar en la config en case sensitive. ;; Permitir solo la búsqueda de archivos a cargar en la config en case sensitive.
(setq auto-mode-case-fold nil) (setq auto-mode-case-fold nil)
;; Definimos que la shell por defecto será bash
(setq shell-file-name "/bin/bash")
;; Personalizaciones (Tedrían que ir en init-base, pero por optimización, las pongo acá) ;; Personalizaciones (Tedrían que ir en init-base, pero por optimización, las pongo acá)
(push '(menu-bar-lines . 0) default-frame-alist) ; Quitar menús. (push '(menu-bar-lines . 0) default-frame-alist) ; Quitar menús.
(push '(tool-bar-lines . 0) default-frame-alist) ; Quitar toolbar. (push '(tool-bar-lines . 0) default-frame-alist) ; Quitar toolbar.

View File

@ -18,12 +18,14 @@
(require 'init-theme) (require 'init-theme)
(require 'init-packages) (require 'init-packages)
(require 'init-functions) (require 'init-functions)
(require 'init-ai)
(require 'init-vc)
(require 'init-org) (require 'init-org)
(require 'init-eglot) (require 'init-eglot)
(require 'init-corfu) (require 'init-corfu)
(require 'init-ctags) ;; (require 'init-ctags)
(require 'init-minibuffer) (require 'init-minibuffer)
(require 'init-evil) ;; (require 'init-evil)
(require 'init-keys) (require 'init-keys)
;; Lenguajes ;; Lenguajes

View File

@ -1,67 +0,0 @@
# Configuración de Emacs actual
Esta configuración para emacs se podría decir que es la heredera de mi [configuración de emacs inicial](https://git.kj2.me/kj/confi-emacs-inicial), la cual ya llevaba tiempo necesitando una manita de gato para arreglar y mejorar algunas cosas que me resultan cómodas para el uso, ademas de comenzar a utilizar `evil-mode`. Esta configuración bien podría haber sido una rama de la inicial, pero he decidido hacer uno nuevo y si es neceario hacer aquí las ramas.
## Instalación
Si deseas clonar mi configuración, puedes clonar este repositorio:
`git clone --depth 1 https://git.kj2.me/kj/confi-emacs-actual.git ~/.emacs.d`
Instalación de fonts y libvterm:
`sudo apt install fonts-firacode fonts-cantarell libvterm-dev cmake`
Al igual que la versión anterior, puede ser necesario ejecutar el siguiente comando en el minibuffer para tener bien los íconos de neotree:
`nerd-icons-install-fonts`
Y eso sería todo.
## Dependencias espefícicas
Algunos lenguajes, pueden requerir que instales algunas cosas en específico.
- *Javascript*: Necesita de al menos [deno](https://deno.land/) para LSP (eglot) y [node](https://nodejs.org/es/) para flycheck, aunque creo que con deno puede bastar para ambos.
- *PHP*: Requiere instalar [phpactor](https://phpactor.readthedocs.io/en/master/usage/standalone.html) para el LSP.
- *GO*: Necesita etener instalado [go](https://go.dev/) para linter (gofmt) y [gopls](https://github.com/golang/tools/tree/master/gopls) para LSP.
- *Rust*: Necesita clippy para flycheck y LSP. Pare este útimo igual es posible usar [rust-analyzer](https://rust-analyzer.github.io).
Otros:
- Búsqueda: Requiere tener instalado ripgrep.
- Capturas: Requiere silicon para las capturas con silico y que la compilación sea con cairo para las capturas SVG.
## Usar el modo daemon
El modo daemon permite a emacs cargar mucho más rápido, puesto que con ello evitas volver a cargar la configuración cada vez que abres un nuevo archivo. Si quieres aprender mas sobre esto, puedes revisarlo en la [documentación de emacs](https://www.emacswiki.org/emacs/EmacsAsDaemon).
Para iniciar el daemon, puedes hacerlo desde la terminal ejecutando:
`sudo systemctl --user start emacs`
Del mismo modo, igual es recomendable habilitar el autoinicio de este servicio junto con el sistema:
`sudo systemctl --user enable emacs`
Y abrir emacs mediante emacsclient.
## Consideraciones
- Toda la configuración la he realizado en los archivos que están en los archivos de la carpeta config, el archivo `init.el` solo los llama y no guarda nada más aparte de eso.
- Se puede activar/desactivar `cua-mode` (`configs/base.el`, línea 49) activado para poder copiar, cortar, pegar y deshacer cambios con las combinaciones típicas en lugar de las de emacs.
- Con F9 puedes abrir y cerrar el panel lateral de archivos.
- Con C-F11 puedes maximizar/restaurar.
- Con C-S-c se puede comentar / descomentar un región.
- Con C-S-d se duplica las líneas.
- Con M-<arrow keys> se mueven las líneas/palabras.
- Por defecto he configurado que al presionar TAB se usen 2 espacios en su lugar.
Recuerda que si alguna cosa no te gusta, puedes cambiarla a gusto. Esta configuración fue hecha para mi uso personal y puede que tenga cosas que solo a mi me parecen cómodas/útiles.
## Contacto
Si se tiene alguna pregunta o quieres comentarme alguna corrección, puesto que este git no está abierto a registro, puedes contactarme mediante:
E-mail: webmaster@outcontol.net
Telegram: [https://t.me/keyjay](https://t.me/keyjay)

63
readme.org Normal file
View File

@ -0,0 +1,63 @@
#+TITLE: Configuración Emacs
#+AUTHOR: KJ
#+OPTIONS: toc:nil
Esta es mi configuración de Emacs personal y está hecha principalmente para funcionar con *Emacs compilado desde el código*, ya que es así como yo lo uso.
* Instalación
Si deseas clonar mi configuración, puedes clonar este repositorio:
#+begin_src bash
git clone --depth 1 https://git.kj2.me/kj/confi-emacs-actual.git ~/.emacs.d
#+end_src
Si no ves los íconos bien dentro de Emacs, puedes ejecutar el comando dentro de Emacs (M-x)
#+begin_src elisp
nerd-icons-install-fonts
#+end_src
* Compilación de Emacs
Si quieres instalar Emacs tal cual lo tengo yo, esta es la configuración de compilación que actualmente uso:
#+begin_src bash
git clone https://git.savannah.gnu.org/git/emacs.git
cd emacs
./autogen.sh
./configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib --localstatedir=/var --mandir=/usr/share/man --with-gameuser=:games --with-modules --without-libotf --without-m17n-flt --without-gconf --with-native-compilation=yes --with-native-compilation=aot --with-xinput2 --with-pgtk --with-tree-sitter --without-compress-install --with-mailutils
make -j16
make check
sudo make install
#+end_src
Las dependencias para compilar pueden cambiar según tu distribución, por lo que queda en tus manos el ajustar lo que sea necesario.
Como ayuda lo más que puedo dar es que en las distros basadas en Debian puedes usar =apt build-dep emacs= mientras que en las basadas en RHEL (solo lo he probado en Fedora) puedes usar =dnf builddep emacs=. En el caso de las basadas Arch puedes usar AUR.
* Dependencias
Normalmente no es usual el tener dependencias reales para que emacs funcione, pero para el funcionamiendo adecuado y sin errores, lo mejor es tener instalado:
- El font de firacode
- cmake
- libvterm
** Languaje Server Protocol (LSP)
Esta configuración por defecto utiliza [[https://github.com/joaotavora/eglot][eglot]] para LSP con los servidores por defecto. Puedes revisar su documentación para ver lo que necesitas instalar para usar el LSP del lenguaje que necesites.
Finalmente, recomiendo instalar [[https://github.com/blahgeek/emacs-lsp-booster][emacs-lsp-booster]], la mejora es nimia en general, pero en proyectos grandes esa pequeña mejora es bastante notoria.
* Atajos de teclas personalizados
Tengo varios atajos reconfigurados, por lo que recomiento revisar primero que nada el archivo [[./configs/init-keys.el][init-keys.el]] el resto de configuraciones está principalmente en los archivos [[./configs/init-minibuffer.el][init-minibuffer.el]] e [[./configs/init-packages.el][init-packages.el]], dudo que las uses todas y yo mismo no las uso, por lo que con el tiempo las voy eliminando y a veces agrego alguna extra. Con que revises el primer archivo y sepas que =consult-project= está en =C-x p= ya estás servido.
* Contacto
Si se tiene alguna pregunta o quieres comentarme alguna corrección, puesto que este git no está abierto a registro, puedes contactarme mediante:
*Correo*: webmaster@outcontrol.net
*Telegram*: [[https://t.me/keyjay][@keyjay]]