Compare commits

...

256 Commits

Author SHA1 Message Date
kj
dabaf86f28 Big re-write :)
I reordered the code in a more clean an organized way. Also this improves a lot
the emacs startup time again, bucause after some updates it becomes a bit slow
with the old configuration, so i did it again in a new way.
2025-07-20 13:18:05 -03:00
kj
6ca3a756ad Change vterm defer. 2025-07-17 06:20:32 -03:00
kj
1daab2d95f Disable global subword mode. 2025-07-17 06:18:33 -03:00
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
KJ
0b3138b6c7 Remove unnecessary comments. 2024-04-18 05:26:15 -04:00
KJ
bdaef62ba5 Add eglot-booster. 2024-04-18 05:25:55 -04:00
KJ
ff85e08450 Testing news completion functions on cape. 2024-04-16 23:36:00 -04:00
KJ
0c636e3ce3 Improve some consult keyboard shortcuts. 2024-04-13 19:47:19 -04:00
KJ
a1aab4a3fc Remove projectile.el in favor of project.el 2024-04-13 19:02:22 -04:00
KJ
cb1b5058fd Delete unused config file. 2024-04-13 18:52:01 -04:00
KJ
954cfe64c7 Set scroll with C-v on motion modes. 2024-04-13 16:21:05 -04:00
KJ
370651ebec Add hydra config for git-gutter. 2024-04-13 01:19:05 -04:00
KJ
d96a05fb7e Add hydra. 2024-04-12 14:01:27 -04:00
KJ
2da8c0346b Add ediff config.
By default ediff shows a ugly floating window.
With this config we improve a lot that default behaviour.
2024-04-12 08:30:37 -04:00
KJ
f6633ee2ed Change evil-normal-state cursor to default (box). 2024-04-12 08:13:16 -04:00
KJ
8ec7f0b425 Change completion styles. 2024-04-12 08:11:04 -04:00
KJ
d753809a27 Increase recentf saved items. 2024-04-12 08:08:49 -04:00
KJ
24abfebfe7 Add evil-org. 2024-04-06 14:42:25 -04:00
KJ
8a31842c17 Add TODO list inside code.
You can view the complete list using consult (consult-todo)
and on magit. Also the keywords like TODO or FIXME was
highlighted on code comments.
2024-04-03 19:19:21 -04:00
KJ
886284c70d Replace :elpaca to :ensure following the elpaca update.
Using :elpaca was DEPRECATED on elpaca 0.7.
2024-04-03 18:40:00 -04:00
KJ
c72edac318 Update elpaca version. 2024-04-03 18:38:19 -04:00
KJ
669ca64f6c Change html-mode to mhtml-mode. 2024-03-29 14:27:55 -04:00
KJ
a18650a700 Add C-<return> as a new shortcut on minibuffer and add comments.
The Ctrl-Enter key combination is a more universally employed
method of line termination in text input interfaces than the
Enter key is reserved for submitting the input.
2024-03-29 12:42:33 -04:00
KJ
aba4022837 Set normal-state as default state of dashboard. 2024-03-29 12:41:41 -04:00
KJ
80664b0033 Add useful shortcuts for motion modes for order code quickly.
Utilize tab for line indentation, leader+y to access
kill-ring history, and leader++ to execute expand-region.
2024-03-28 22:48:59 -04:00
KJ
db73de0718 Add shortcut to add new line without leaving evil normal state. 2024-03-28 22:06:24 -04:00
KJ
c6c18aab3c Remove auto enable auto-rename-tag-mode. 2024-03-28 22:05:23 -04:00
KJ
8c5f9ecd14 Put emacs on insert state by default.
This way will be a more easy transition.
2024-03-25 00:24:32 -04:00
KJ
81626c4584 Setting keybindings. 2024-03-25 00:22:56 -04:00
KJ
05aabebf6f Trying evil enabled by default... again. 2024-03-25 00:19:55 -04:00
KJ
25c794daf2 Remove ellama in favor to gptel. 2024-03-21 10:21:20 -04:00
KJ
34029f173e Add devdocs. 2024-03-20 22:58:23 -04:00
KJ
264a4d61fa Add gptel. 2024-03-20 21:41:11 -04:00
KJ
821494dd22 Add ef themes. 2024-03-20 21:40:08 -04:00
KJ
1768ee428f Change default theme. 2024-03-03 02:20:25 -04:00
KJ
cbaed77f63 Update php treesiter config. 2024-03-03 02:18:57 -04:00
KJ
32f53f09a4 Remove nov and add nginx-mode. 2024-02-19 00:08:11 -04:00
KJ
05da03b836 Remove straight form treemacs config. 2024-02-19 00:07:36 -04:00
KJ
1b7d286415 Update elpaca installer. 2024-01-25 23:39:08 -04:00
KJ
70bc86518d Add epub reader (nov.el package). 2023-11-13 17:34:29 -04:00
KJ
d04c3baf44 Create a new config file for themes. 2023-11-06 20:55:18 -04:00
KJ
e40aa8d194 Add ellama package.
This package depends of ollama server installed and started
with the model (by default zephyr) pulled prevoiusly.
2023-10-25 14:55:50 -04:00
KJ
be51f082f7 Remove hook that close buffers used on emacsclient. 2023-10-25 14:54:31 -04:00
KJ
f29a3bb673 Update readme.md 2023-10-23 21:01:26 -04:00
KJ
eba6324658 Continue playig with the themes :). 2023-10-16 19:50:55 -04:00
KJ
970e63b565 Disable lock editor while lsp server is loading. 2023-10-16 18:16:41 -04:00
KJ
0f29b5e516 Use partial autocomplete instead select first on minibuffer. 2023-10-16 08:45:59 -04:00
KJ
887b7f068a Load theme after elpaca-after-init. 2023-10-15 11:56:32 -04:00
KJ
21a052895c Improve speed-type config.
Add hook to disable line numbres, enable visual-line-mode and
visual-fill-column-mode.
2023-10-15 10:32:13 -04:00
KJ
412ae58717 Change theme.
For some time I will use modus-themes instead dracula.
2023-10-15 10:14:59 -04:00
KJ
c2f8cc244d Beauty some code lines.
A change for more easily read the code.
2023-10-15 10:13:48 -04:00
KJ
a6cd373b2b Fix comment.
The config now is using elpaca, not straight.
2023-10-15 10:12:35 -04:00
KJ
78c20da3b1 Disable vc-comment-return.
Not worth the effort.
2023-10-15 10:08:06 -04:00
KJ
730d3bd0fd Update leader key shortcuts. 2023-10-14 10:29:55 -04:00
KJ
1ad7877974 Disable auto-maximize emacs at startup. 2023-09-30 17:49:28 -04:00
KJ
9399a3e372 Move function inside the apropiate block. 2023-09-30 17:47:50 -04:00
KJ
5aedee6f8e Remove some prettify-symbols. 2023-09-30 17:46:46 -04:00
KJ
7658e199fc Comment not necesary lines. 2023-09-30 17:45:42 -04:00
KJ
fc5afd432d Disable variable-pitch-mode.
It causes bad indentation.
2023-09-30 17:44:13 -04:00
KJ
f41cde5c3c Add custom faces. 2023-09-24 21:34:06 -04:00
KJ
5738e49658 Add org-appear. 2023-09-24 21:33:16 -04:00
KJ
695a669b60 Add polymode. 2023-09-24 21:32:18 -04:00
KJ
138aa48811 Change org-fancy-priorities to prettify-symbols-mode.
prettify-symbols-mode is a mode build-in into org-mode.
So, we use the one that already have instead add another
package that do the same.
2023-09-24 16:08:26 -04:00
KJ
29328974c2 Migrate from ivy+counsel to vertico+consult. 2023-09-24 11:15:01 -04:00
KJ
e9eb786eaf Enable use-short-answers. 2023-09-24 11:14:06 -04:00
KJ
d2772d6a6e Remove project directories config.
It is not neccesary now.
2023-09-24 02:54:26 -04:00
KJ
8ab0564ad8 Remove superfluous lines. 2023-09-24 02:52:31 -04:00
KJ
c60c4b8a11 Undo latest commit. 2023-09-23 20:24:15 -04:00
KJ
53f615cabd Add autoinstall nerd-icons if is not. 2023-09-23 20:08:25 -04:00
KJ
cef7d4e78a Enable evil-mode but without autostart mode. 2023-09-23 17:32:38 -04:00
KJ
1ae42b518e Fix: corfu and evil auto-init mode. 2023-09-16 15:54:28 -04:00
KJ
637f04ae26 Fix: ivy and projectile mode do not starting after init. 2023-09-16 15:36:26 -04:00
KJ
503bf53890 Migrate from straight.el to elpaca.
Idk why, I only can try it.

For now the emacs-init-time whas improved.
2023-09-16 14:05:56 -04:00
KJ
04e3e2ec29 Add another keybind to isearch. 2023-09-09 01:37:29 -04:00
KJ
e6456414d7 Remove alpha by default. 2023-09-09 01:11:51 -04:00
KJ
0179d8ab20 Add defer for yt-dl.
Is not neccesary, but idc.
2023-09-09 01:11:16 -04:00
KJ
beaca9c60d Remove ctags path.
Works better not setting it.
2023-09-09 01:10:16 -04:00
KJ
0a89a44121 Disable evil mode.
Really I not need it, sometimes I want use it again,
but the emacs shortcuts are fine and using it is
better at the end.

And for other thing, the commands are better that
any shotcut of VIM or Emacs.
2023-09-09 01:08:42 -04:00
KJ
0be516d313 Disable corfu delay. 2023-08-31 21:21:24 -04:00
KJ
4b43539553 Return to emacs state by default. 2023-08-30 11:31:42 -04:00
KJ
ff9435b717 Set orderless completion style. 2023-08-26 14:10:20 -04:00
KJ
329b6ba040 Change the default cursor of evil normal state. 2023-08-22 12:39:12 -04:00
KJ
61f849a922 Update evil-mode config. 2023-08-22 00:45:24 -04:00
KJ
45a2cde1e5 Disable dired sidebar follow. 2023-08-17 10:20:55 -04:00
KJ
e63e2b0e21 Add vterm fast shortcut. 2023-08-10 16:00:42 -04:00
KJ
b9afc66ee2 Remove company-mode config.
This config is not necessary anymore because now corfu make
the same and for now is the preferred option for me.
2023-08-02 03:33:34 -04:00
KJ
0288bf609f Add delay of 0.5 to corfu auto completion. 2023-08-02 03:30:58 -04:00
KJ
06cdcfbab7 Add prettier package. 2023-07-04 16:59:44 -04:00
KJ
c9c268d824 Changed priority emojis for TODO on org-mode. 2023-06-26 09:49:35 -04:00
KJ
1e5e583b40 Setup hl-line-mode.
Disable global mode and enable automatically on dired-mode.
2023-06-24 13:22:35 -04:00
KJ
6e1b1b74f5 Add defer to buffer-move load. 2023-06-23 19:38:54 -04:00
KJ
5342a6b4f1 Enable follow file on dired-sidebar. 2023-06-23 09:40:02 -04:00
KJ
0a291773fa Fix global-hl-line-mode. 2023-06-23 09:39:27 -04:00
KJ
01737264b9 Remove windmove shortcuts.
I will try use other-window only.
2023-06-23 06:16:53 -04:00
KJ
956ed75ed9 Change shortcut for ace-window to a new for other-window. 2023-06-23 06:07:48 -04:00
KJ
73935d3bc4 Re-order packages alphabetically. 2023-06-23 06:07:22 -04:00
KJ
e1c915d261 Change all-the-icons to nerd-icons. 2023-06-23 05:34:43 -04:00
KJ
ff3cb53fb6 Fix corfu-terminal package load. 2023-06-23 05:31:48 -04:00
KJ
fb69ae0828 Remove not lsp-mode config in favor to eglot.
I will no longer maintain the lsp-mode config
just now, eglot is better for me and just fits
really well with my necesities.
2023-06-23 04:51:08 -04:00
KJ
9b0bb0ea95 Remove treemacs in favor of dired-sidebar. 2023-06-23 04:40:02 -04:00
KJ
ffd2fba015 Add shortcut for ace-window. 2023-06-23 04:10:04 -04:00
KJ
4384c37823 Disable global-so-long-mode.
I think that is better if the user can enable
long-lines-mode manually when consider necessary.
2023-06-21 06:54:47 -04:00
KJ
a673f8c939 Remove unnecesary hook. 2023-06-21 05:59:18 -04:00
KJ
1318e21c21 Add so-long-mode config. 2023-06-21 05:55:02 -04:00
KJ
0643d7a3cc Remove ideas.org on org-mode files for tasks. 2023-06-17 06:14:39 -04:00
KJ
8ee98d7966 Set normal as default evil-state on dashboard-mode. 2023-06-17 06:13:53 -04:00
KJ
79b1cab10e Move function to lsp.el 2023-06-02 13:14:35 -04:00
KJ
3bfb4508df add empty .custom.el 2023-05-23 14:41:53 -04:00
KJ
c1b7a9b120 Fix dashboard on daemon/emacsclient. 2023-05-18 10:11:24 -04:00
kj
023f11c25e Add corfu config (replacement for company). 2023-05-02 00:32:14 -04:00
kj
6cda0d1d5e Remove unused and commented package. 2023-05-02 00:30:53 -04:00
kj
6364157efd remove fymake legacy hook. 2023-05-02 00:29:31 -04:00
kj
50568de7eb Change way to start maximized. 2023-04-30 12:45:46 -04:00
kj
cdf1478322 Change splash image from a .png to the original svg. 2023-04-29 19:46:23 -04:00
kj
fc9e1bf17e Improve transparency for only do transparent to the background. 2023-04-26 20:49:35 -04:00
kj
8e9a3fc301 Add tree-sitter config for various languages. 2023-04-18 18:49:47 -04:00
kj
765680a051 Undo last commit. 2023-04-18 15:49:07 -04:00
kj
fa9c5e7cf5 Another small improvement to startup time. 2023-04-18 13:55:08 -04:00
kj
0b14aeba36 Improve startup time. 2023-04-18 01:21:36 -04:00
kj
811ff581cf Add eldoc-box and a shortcut (F1) to show eldoc buffer as a popup. 2023-04-14 23:37:36 -04:00
kj
026549eff7 Fix conflict with vs-comment-return-mode and php-doc-block. 2023-04-14 22:39:15 -04:00
kj
f929aad937 Update git ignore. 2023-04-14 22:38:48 -04:00
35 changed files with 27969 additions and 1334 deletions

13
.gitignore vendored
View File

@ -23,3 +23,16 @@ workspace/
/history
/projectile.cache
/request/
/smex-items
/tree-sitter/
/elpaca/
/tramp
/nov-places
/devdocs/
/.mc-lists.el
/eshell/
/.emacs.desktop
/.tutor/
/intelephense/
/auto-save-list/
/*.eld

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)
))

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

@ -0,0 +1,45 @@
;;; 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
: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

@ -6,10 +6,11 @@
;;; Commentary:
;; Configuración general de Emacs.
;; No incluye paquetes/extensiones, solo configuraciones generales.
;;; Code:
(require 'init-functions)
;; Native compilation
(when (and (fboundp 'native-comp-available-p)
(native-comp-available-p))
@ -19,131 +20,136 @@
(setq package-native-compile t)
))
;; Instalar straight.el (reemplpazando package.el)
(defvar bootstrap-version)
(let ((bootstrap-file
(expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
(bootstrap-version 5))
(unless (file-exists-p bootstrap-file)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/radian-software/straight.el/master/install.el"
'silent 'inhibit-cookies)
(goto-char (point-max))
(eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage))
;; Garbage Collector Magic Hack
(use-package gcmh
:diminish
:hook (emacs-startup . gcmh-mode)
:init
(setq gcmh-idle-delay 'auto
gcmh-auto-idle-delay-factor 10
gcmh-high-cons-threshold #x1000000)) ; 16MB
;; Initialize package sources
;; (require 'package)
;; Guardar la posición del cursor en un archivo para volver allí cuando se lo vuelva a abrir.
(use-package saveplace
:ensure nil
:hook (after-init . save-place-mode))
;; (setq package-archives '(("melpa" . "https://melpa.org/packages/")
;; ("org" . "https://orgmode.org/elpa/")
;; ("elpa" . "https://elpa.gnu.org/packages/")))
;; (package-initialize)
;; Actualizar repositorios si aún no esta actualizados
;; (unless package-archive-contents
;; (package-refresh-contents))
;; Instalar use-package si no está instalado
(straight-use-package 'use-package)
(setq use-package-always-ensure t)
;; Theme
(use-package dracula-theme
:straight t
;; Recentf - Guarda registro de los archivos abiertos recientemente
(use-package recentf
:ensure nil
:bind (("C-x C-r" . recentf-open-files))
:hook (after-init . recentf-mode)
:init (setq recentf-max-saved-items 300
recentf-exclude
'("\\.?cache" ".cask" "url" "COMMIT_EDITMSG\\'" "bookmarks"
"\\.\\(?:gz\\|gif\\|svg\\|png\\|jpe?g\\|bmp\\|xpm\\)$"
"\\.?ido\\.last$" "\\.revive$" "/G?TAGS$" "/.elfeed/"
"^/tmp/" "^/var/folders/.+$" "^/ssh:" "/persp-confs/"
(lambda (file) (file-in-directory-p file package-user-dir))))
:config
(load-theme 'dracula t)
(set-face-attribute 'default nil :font "Fira Code Retina" :height 112) ; Font
(push (expand-file-name recentf-save-file) recentf-exclude)
(add-to-list 'recentf-filename-handlers #'abbreviate-file-name))
;; Guarda el historial del minibuffer
(use-package savehist
:ensure nil
:hook (after-init . savehist-mode)
:init (setq enable-recursive-minibuffers t ; Allow commands in minibuffers
history-length 1000
savehist-additional-variables '(mark-ring
global-mark-ring
search-ring
regexp-search-ring
extended-command-history)
savehist-autosave-interval 300))
;; Misc.
(use-package simple
:ensure nil
:hook ((after-init . size-indication-mode)
(text-mode . visual-line-mode))
:init
(setq column-number-mode t
line-number-mode t
kill-whole-line t ; Kill line including '\n' (C-k)
line-move-visual nil
track-eol t ; Keep cursor at end of lines. Require line-move-visual is nil.
set-mark-command-repeat-pop t) ; Repeating C-SPC after popping mark pops it again
;; Visualize TAB, (HARD) SPACE, NEWLINE
(setq-default show-trailing-whitespace nil ; Don't show trailing whitespace by default
cursor-type 'bar) ; Usar la barrita como cursor
(setq show-trailing-whitespace t)
(add-hook 'before-save-hook #'delete-trailing-whitespace nil t)
)
;; Instalar use-package en caso de no tenerlo
;;(unless (package-installed-p 'use-package)
;; (package-install 'use-package))
(defconst private-dir (expand-file-name "private" user-emacs-directory))
(defconst temp-dir (format "%s/cache" private-dir)
"Hostname-based elisp temp directories.")
;; UTF-8 please
(set-charset-priority 'unicode)
(setq locale-coding-system 'utf-8) ; pretty
(set-terminal-coding-system 'utf-8) ; pretty
(set-keyboard-coding-system 'utf-8) ; pretty
(set-selection-coding-system 'utf-8) ; please
(prefer-coding-system 'utf-8) ; with sugar on top
(setq default-process-coding-system '(utf-8-unix . utf-8-unix))
(when (fboundp 'set-charset-priority)
(set-charset-priority 'unicode))
(set-language-environment "UTF-8")
(set-default-coding-systems 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(set-clipboard-coding-system 'utf-8)
(set-file-name-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-next-selection-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(setq locale-coding-system 'utf-8)
(setq system-time-locale "C")
;; Emacs customizations
(menu-bar-mode 0) ; Quitar menús.
(tool-bar-mode 0) ; Quitar toolbar.
(scroll-bar-mode -1) ; Quitar scrollbar.
(tooltip-mode -1) ; Disable tooltips.
(global-display-line-numbers-mode) ; Mostar número de línea.
(show-paren-mode 1) ; Habilitar resaltado de brackets.
(pending-delete-mode t) ; Cuando selecciono un texto y escribo, el texto se borra (emacs por defecto solo escribe donde está el cursor).
;; Misc
(if (boundp 'use-short-answers)
(setq use-short-answers t)
(fset 'yes-or-no-p 'y-or-n-p))
(setq-default major-mode 'text-mode
fill-column 80
tab-width 4
indent-tabs-mode nil) ; Permanently indent with spaces, never with TABs
(setq-default
cursor-type 'bar ; Usar la barrita como cursor
cursor-in-non-selected-windows nil ; Desaparecer el cursor en frames no activos.
indent-tabs-mode nil ; Cambiar tabs por espacios.
inhibit-startup-message t ; Eliminar el mensaje de inicio.
)
(setq
custom-file (concat private-dir "/.custom.el") ; Cabiar la ruta del código que se genera al isntalar un theme o package
ac-ignore-case nil ; Desactivar el autocapitalizado.
ac-disable-faces nil ; Auto-complete hablitado incluso entre comillas (fuente: https://bit.ly/3a9wCB4).
global-hl-line-mode 1 ; Resaltar línea actual por defecto.
tags-revert-without-query 1 ; Recargar tags (ctags) sin pedir confirmación.
)
;; Leve transparencia en emacs por defecto.
(set-frame-parameter (selected-frame) 'alpha '(99 . 99))
(add-to-list 'default-frame-alist '(alpha . (99 . 99)))
(setq visible-bell t
inhibit-compacting-font-caches t ; Dont compact font caches during GC
delete-by-moving-to-trash t ; Deleting files go to OS's trash folder
make-backup-files nil ; Forbide to make backup files
auto-save-default nil ; Disable auto sav
inhibit-splash-screen t
uniquify-buffer-name-style 'post-forward-angle-brackets ; Show path if names are same
adaptive-fill-regexp "[ t]+|[ t]*([0-9]+.|*+)[ t]*"
adaptive-fill-first-line-regexp "^* *$"
sentence-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*"
sentence-end-double-space nil
word-wrap-by-category t)
;; Backups enabled, use nil to disable
(setq
history-length 1000
backup-inhibited nil
make-backup-files nil
auto-save-default nil
auto-save-list-file-name (concat temp-dir "/autosave")
create-lockfiles nil
backup-directory-alist `((".*" . ,(concat temp-dir "/backup/")))
auto-save-file-name-transforms `((".*" ,(concat temp-dir "/auto-save-list/") t)))
;; Async
(use-package async
:functions (async-bytecomp-package-mode dired-async-mode)
:init
(async-bytecomp-package-mode 1)
(dired-async-mode 1))
;; Configuración cuando es un server
(defun setup-daemon ()
"Carga la configuración del modo daemon."
(message "Corriendo en modo daemon.")
(set-face-attribute 'default nil :font "Fira Code Retina" :height 112)
;; Child frame
(use-package posframe
:hook (after-load-theme . posframe-delete-all)
:init
(defface posframe-border
`((t (:inherit region)))
"Face used by the `posframe' border."
:group 'posframe)
(defvar posframe-border-width 2
"Default posframe border width.")
:config
(with-no-warnings
(defun my-posframe--prettify-frame (&rest _)
(set-face-background 'fringe nil posframe--frame))
(advice-add #'posframe--create-posframe :after #'my-posframe--prettify-frame)
;; Set the fixed pitch face
;;(set-face-attribute 'fixed-pitch nil :font "Fira Code Retina")
(defun posframe-poshandler-frame-center-near-bottom (info)
(cons (/ (- (plist-get info :parent-frame-width)
(plist-get info :posframe-width))
2)
(/ (+ (plist-get info :parent-frame-height)
(* 2 (plist-get info :font-height)))
2)))))
;; Set the variable pitch face
;;(set-face-attribute 'variable-pitch nil :font "Cantarell" :weight 'regular)
;; Abrir primero el dashboard
(setq initial-buffer-choice (lambda () (get-buffer "*dashboard*")))
;; Cerrar buffers al cerrar emacsclient
(add-hook 'delete-frame-functions
(lambda (frame)
(mapc 'kill-buffer (delq (get-buffer "*dashboard*") (buffer-list)))
))
)
(if (daemonp)
(add-hook 'after-make-frame-functions
(lambda (frame)
(with-selected-frame frame
(setup-daemon))))
(message "Corriendo en modo normal."))
;(add-hook 'window-setup-hook 'toggle-frame-maximized t)
(load custom-file)
(provide 'init-base)
;;; init-base.el ends here

View File

@ -1,61 +0,0 @@
;;; init-company.el --- Autocompletado con company-mode -*- 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 paquete company.
;; Company, de manera resumida, es el que nos muestra el autocompletado
;; en Emacs, tanto para código como para otro tipo de textos.
;;; Code:
(use-package company
:defer t
:straight t
:defines (company-dabbrev-ignore-case company-dabbrev-downcase)
:custom-face
(company-box-selection ((t (:inherit company-tooltip :weight semibold :extend t))))
:hook (after-init . global-company-mode)
:bind (
:map company-active-map
("<tab>" . company-indent-or-complete-common) ; Completar con tab como en la terminal de linux
("<escape>" . company-abort) ; Cerrar company con ESC
)
:config
(setq company-tooltip-align-annotations t
company-tooltip-limit 12
company-idle-delay 0.5 ; mostrar autocompletado luego de medio segundo mostrar
company-echo-delay (if (display-graphic-p) nil 0)
company-minimum-prefix-length 1 ; mostrar autocompletado desde que se coloca la primera letra.
company-icon-margin 3
company-require-match nil
company-dabbrev-ignore-case nil
company-dabbrev-downcase nil ; autocompletado case-sensitive.
company-global-modes '(not erc-mode message-mode help-mode
gud-mode eshell-mode shell-mode))
(add-to-list 'company-backends 'company-paths)
)
;; Rutas en company
(use-package company-paths
:straight (company-paths :type git :host github :repo "emacs-vs/company-paths")
:defer t
:after (company-mode)
)
;; Hacer que el autocompletado se vea más bonito con íconos
(use-package company-box
:defer t
:straight t
:diminish
:hook (company-mode . company-box-mode)
:config
(setq company-box-backends-colors nil
company-box-doc-delay 0.1
company-box-scrollbar 'right)
)
(provide 'init-company)
;;; init-company.el ends here

125
configs/init-completion.el Normal file
View File

@ -0,0 +1,125 @@
;;; init-completion.el --- Autocompletado con corfu -*- 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 paquete corfu.
;; Corfu, de manera resumida, es el que nos muestra el autocompletado
;; en Emacs, tanto para código como para otro tipo de textos.
;;
;; Este paquete viene a ser una alternativa a Company, por lo
;; que no se deberían activar los 2 al mismo tiempo.
;;; Code:
;; childframe con los cantidatos de autocompletado
(use-package corfu
:ensure (:files (:defaults "extensions/*")
:includes (corfu-info corfu-history))
:hook ((elpaca-after-init . global-corfu-mode)
(global-corfu-mode . corfu-popupinfo-mode))
:bind (:map corfu-map
("<escape>" . corfu-quit)
("<SPC>" . corfu-insert-separator))
:custom-face
(corfu-border ((t (:inherit region :background unspecified))))
:custom
(corfu-auto t)
:config
(global-corfu-mode)
(setq corfu-popupinfo-delay 0
corfu-auto-delay 1
corfu-auto-prefix 1
corfu-cycle t
corfu-quit-at-boundary t
corfu-preview-current nil
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
:after corfu
: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
:ensure (:host github :repo "minad/cape")
:after corfu
:bind (("C-c c f" . cape-file)
("C-c c l" . cape-line))
:init
(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-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-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
(unless (display-graphic-p)
(use-package corfu-terminal
:after corfu
:ensure (:repo "https://codeberg.org/akib/emacs-corfu-terminal.git")
:init
(corfu-terminal-mode +1))
)
;; A few more useful configurations...
(use-package emacs
:ensure nil
:custom
;; TAB cycle if there are only few candidates
;; (completion-cycle-threshold 3)
;; Enable indentation+completion using the TAB key.
;; `completion-at-point' is often bound to M-TAB.
(tab-always-indent 'complete)
;; Emacs 30 and newer: Disable Ispell completion function. As an alternative,
;; try `cape-dict'.
(text-mode-ispell-word-completion nil)
;; Emacs 28 and newer: Hide commands in M-x which do not apply to the current
;; mode. Corfu commands are hidden, since they are not used via M-x. This
;; setting is useful beyond Corfu.
(read-extended-command-predicate #'command-completion-default-include-p))
;; Iconos en corfu
(use-package nerd-icons-corfu
:after corfu
:init (add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter))
(provide 'init-completion)
;;; init-completion.el ends here

View File

@ -1,77 +0,0 @@
;;; init-ctags.el --- Configuracíón de TAGS -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;;; Code:
;; En esta sección está la configuración para ctags.
;; Quizá con la aparición de lsp sea menos necesaria,
;; pero dado a que sigue teniendo potencial para aportar
;; además de tener un rendimiento muy bueno es mejor
;; no dejarla de lado.
;; Ctags IDE on the True Editor
;; @see https://github.com/universal-ctags/citre#quick-start
(use-package citre
:defer t
:ensure t
:straight t
:diminish
:bind (("C-x c ." . citre-jump)
("C-x c ," . citre-jump-back)
("C-x c p" . citre-peek)
("C-x c a" . citre-ace-peek)
("C-x c u" . citre-update-this-tags-file))
:init
(require 'citre-config)
(setq citre-auto-enable-citre-mode-modes '(prog-mode))
:config
(with-no-warnings
(setq citre-readtags-program "/usr/bin/readtags"
citre-ctags-program "/usr/bin/ctags"
citre-default-create-tags-file-location 'global-cache
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'
(define-advice xref--create-fetcher (:around (fn &rest args) fallback)
(let ((fetcher (apply fn args))
(citre-fetcher
(let ((xref-backend-functions '(citre-xref-backend t)))
(ignore xref-backend-functions)
(apply fn args))))
(lambda ()
(or (with-demoted-errors "%s, fallback to citre"
(funcall fetcher))
(funcall citre-fetcher)))))
(defun lsp-citre-capf-function ()
"A capf backend that tries lsp first, then Citre."
(let ((lsp-result (if (fboundp #'eglot-completion-at-point)
(eglot-completion-at-point)
(when (fboundp #'lsp-completion-at-point)
(lsp-completion-at-point)))))
(if (and lsp-result
(try-completion
(buffer-substring (nth 0 lsp-result)
(nth 1 lsp-result))
(nth 2 lsp-result)))
lsp-result
(citre-completion-at-point))))
(defun enable-lsp-citre-capf-backend ()
"Enable the lsp + Citre capf backend in current buffer."
(add-hook 'completion-at-point-functions #'lsp-citre-capf-function nil t))
(add-hook 'citre-mode-hook #'enable-lsp-citre-capf-backend)
))
(provide 'init-ctags)
;;; init-ctags.el ends here

153
configs/init-editor.el Normal file
View File

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

View File

@ -1,83 +0,0 @@
;;; init-eglot.el --- Configuración de eglot (LSP) -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;; Este archivo tiene todo lo relacionado con eglot.
;; Eglot es un cliente LSP para Emacs que desde la
;; versión 29 viene integrado dentro del mismo.
;;
;; El nombre Eglot es un apócope de "Emacs polyglot"
;; ya que con este cliente podemos añadir soporte para
;; muchísimos lenguajes, puesto que actualente el que
;; un lenguaje tenga su propio LSP es muy normal.
;;
;; Como añadido:
;;
;; Un Languaje Server Provider (LSP), es un protocolo
;; mediante el cual existen servidores para lenguajes
;; en específico, los cuales proveen cosas como el
;; autocompletado, linting, documentación, ir a la
;; definición, etc.
;;
;; Este protocolo viene a solucionar el problema de
;; que cada herramienta de programación tenga que
;; volver a crear su propio soporte para cada uno
;; de los lenguajes (DRY).
;;; Code:
(use-package eglot
:defer t
:straight (:type built-in)
:hook ((css-mode . eglot-ensure)
(html-mode . eglot-ensure)
(php-mode . eglot-ensure)
(rust-mode . eglot-ensure)
(sh-mode . eglot-ensure))
:config
;; (add-to-list 'eglot-server-programs '(php-mode . ("intelephense" "--stdio")))
(add-to-list 'eglot-server-programs '(php-mode . ("phpactor" "language-server" "-vvv")))
(setq eglot-stay-out-of '(company))
;; (add-to-list 'eglot-ignored-server-capabilites :hoverProvider)
;; (add-to-list 'eglot-server-programs '(css-mode . ("vscode-css-language-server" "--stdio")))
;; (add-to-list 'eglot-server-programs '(html-mode . ("vscode-html-language-server" "--stdio")))
;; (add-hook 'eglot--managed-mode-hook (lambda () (flymake-mode -1)))
)
;; Emmet (mientras veo como hacer funcionar emmet-ls)
(use-package emmet-mode
:defer t
:straight t
:hook
((html-mode . emmet-mode)
(web-mode . emmet-mode))
)
;; Revisar por errores en el código
(use-package flymake
:defer t
:straight (:type built-in)
:hook (prog-mode . (lambda ()
(unless (derived-mode-p 'makefile-mode)
(flymake-mode))))
)
;; Mostar los errores de flymake en un popup-tip
(use-package flymake-diagnostic-at-point
:defer t
:straight t
:after flymake
:hook (flymake-mode . flymake-diagnostic-at-point-mode))
;; Mostrar eldoc en un popup
;; (use-package eldoc-box
;; :defer t
;; :straight t
;; :hook (eldoc-mode-hook . eldoc-box-hover-at-point-mode ))
(provide 'init-eglot)
;;; init-eglot.el ends here

View File

@ -13,52 +13,75 @@
;;; Code:
(use-package evil
:defer t
:straight t
:hook (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
;; 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-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
(evil-set-leader 'motion (kbd "SPC")) ;; Leader key
(evil-set-undo-system 'undo-redo)
;; Habilitar atajos de de tecla de emacs en insert state
(setq evil-insert-state-map (make-sparse-keymap))
;; Arreglar el problemita con corfu-quit y el cambio de modos
(evil-define-key 'emacs 'global (kbd "<escape>") '(lambda ()
"Call `corfu-quit' and then return to Normal State."
(interactive)
(call-interactively 'corfu-quit)
(evil-normal-state)))
;; Ingresar en normal state con ESC desde insert state o desde Emacs state
(evil-define-key 'insert 'global (kbd "<escape>") 'evil-normal-state)
;; (evil-define-key 'normal 'global (kbd "<escape>") 'corfu-quit)
;; Cambiar a mode emacs con escape
;; (evil-define-key 'emacs 'global (kbd "<escape>") 'evil-normal-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)
(setq all-states '(normal insert visual replace operator motion emacs))
(setq vim-states '(normal insert visual replace operator motion))
;; Cambiar entre modo emacs y evil (Mi pripio evil toggle)
(evil-define-key vim-states 'global (kbd "C-'") 'evil-emacs-state)
(evil-define-key 'emacs 'global (kbd "C-'") 'evil-normal-state)
;; (evil-define-key vim-states 'global (kbd "C-'") 'evil-emacs-state)
;; (evil-define-key 'emacs 'global (kbd "C-'") 'evil-normal-state)
;; Cambiar C-z a deshacer
(evil-define-key all-states 'global (kbd "C-z") 'undo)
;; Cambiar C-r a ripgrep y U hasta hacer redo
(evil-define-key vim-states 'global (kbd "C-r") 'counsel-rg)
;; Cambiar U para hacer 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 "M-.") 'xref-find-definitions)
;; Arreglar yank-pop en normal mode
(evil-define-key 'normal 'global (kbd "M-y") 'counsel-yank-pop)
(evil-define-key 'normal 'global (kbd "M-y") 'consult-yank-pop)
;; Re-bindear C-p y C-n a como es normalmente
;; Re-bindear keys a como funcionan en emacs.
(evil-define-key 'normal 'global (kbd "C-p") 'previous-line)
(evil-define-key 'normal 'global (kbd "C-n") 'next-line)
(evil-define-key 'normal 'global (kbd "C-e") 'move-end-of-line)
;; Navegación entre frames
(evil-define-key 'motion 'global (kbd "<leader>wh") 'windmove-left)
(evil-define-key 'motion 'global (kbd "<leader>wj") 'windmove-down)
(evil-define-key 'motion 'global (kbd "<leader>wk") 'windmove-up)
(evil-define-key 'motion 'global (kbd "<leader>wl") 'windmove-right)
(evil-define-key 'motion 'global (kbd "<leader>o") 'other-window)
;; Habilitar el scrolear con C-v como en emacs en evil
(evil-define-key 'motion 'global (kbd "C-v") 'scroll-up-command)
;; Añadir nueva linea sin salir del modo normal
(evil-define-key 'motion 'global (kbd "<leader><RET>") 'newline)
;; Abrir historial del kill-ring/portapapeles
(evil-define-key vim-states 'global (kbd "<leader>y") 'consult-yank-pop)
;; Expand region desde motion states
(evil-define-key 'motion 'global (kbd "<leader>+") 'er/expand-region)
;; Indentado en motion modes.
(evil-define-key 'motion 'global (kbd "<tab>") 'indent-for-tab-command)
;; Atajos con leader key para frames
(evil-define-key 'motion 'global (kbd "<leader>0") 'delete-window)
@ -72,21 +95,43 @@
;; Cambios de modos
(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>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>mw") 'web-mode)
;; Otros atajos
(evil-define-key 'motion 'global (kbd "<leader>b") 'ivy-switch-buffer) ;; Cambiar de buffer
(evil-define-key 'motion 'global (kbd "<leader>p") 'counsel-projectile) ;; Archivos del proyecto (o abrir proyecto si no hay alguno)
(evil-define-key 'motion 'global (kbd "<leader>cp") 'projectile-switch-project) ;; Cambiar proyecto
(evil-define-key 'motion 'global (kbd "<leader>ff") 'counsel-find-file) ;; Abrir archivo
(evil-define-key 'motion 'global (kbd "<leader>b") 'switch-to-buffer) ;; Cambiar de buffer
(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>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>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>gg") 'goto-line) ;; Ir a la línea.
;; Iniciar en normal state si es un lenguaje de programación
;; (evil-set-initial-state 'prog-mode 'normal)
;; (evil-set-initial-state 'org-mode 'normal)
;; (evil-set-initial-state 'dashboard-mode 'normal)
;; Iniciar en normal state solo en modos específicos
(setq evil-default-state 'emacs) ;; Modo por defecto en emacs
(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 'dired 'normal)
(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.
;; Por ejemplo, para que evil-open-below funcione similar a org-return cuando
;; estamos dentro de una lista.
(use-package evil-org
:after org
:hook (org-mode . evil-org-mode))
;; Similar a Vimtutor, pero para evil.
(use-package evil-tutor)
(provide 'init-evil)
;;; init-evil.el ends here

View File

@ -13,19 +13,7 @@
(defun transparency (value)
"Change the transparency of the frame window, setting VALUE from 0 to 100."
(interactive "nTransparency Value 0 - 100 opaque:")
(set-frame-parameter (selected-frame) 'alpha 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)))
(set-frame-parameter nil 'alpha-background value))
;; Comentar línea o región
(defun comment-or-uncomment-region-or-line ()
@ -55,15 +43,95 @@ Saves to a temp file and puts the filename in the kill ring."
(insert current-line)
(decf n)))))
;; Borrar espacios, tabs y saltos de línea innecesarios al guardar
(add-hook 'before-save-hook 'delete-trailing-whitespace)
;; Mostrar y ocultar el diff de la línea de git-gutter
(defun git-gutter:toggle-popup-hunk ()
"Toggle 'git-gutter' hunk window."
(interactive)
(if (and (get-buffer "*git-gutter:diff*") (window-live-p (git-gutter:popup-buffer-window)))
(delete-window (git-gutter:popup-buffer-window))
(git-gutter:popup-hunk)))
;; Verifica si es está instalado alltheicons (útil para ver si se usa o no íconos)
(defun icon-displayable-p ()
"Return non-nil if icons are displayable."
(and (display-graphic-p) (daemonp)
(or (featurep 'all-the-icons)
(require 'all-the-icons nil t))))
;; 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)))) ;; <-- ¡Aquí está el cambio!
(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))
;; Devuelve si el archivo es muy grande o no\
(defun too-long-file-p ()
"Check whether the file is too long."
(or (> (buffer-size) 500000)
(and (fboundp 'buffer-line-statistics)
(> (car (buffer-line-statistics)) 10000))))
;; Renombrar el archivo actual
(defun rename-this-file (new-name)
"Renames both current buffer and file it's visiting to NEW-NAME."
(interactive "sNew name: ")
(let ((name (buffer-name))
(filename (buffer-file-name)))
(unless filename
(error "Buffer '%s' is not visiting a file!" name))
(progn
(when (file-exists-p filename)
(rename-file filename new-name 1))
(set-visited-file-name new-name)
(rename-buffer new-name))))
;; Copiar el nombre del archivo actual
(defun copy-file-name ()
"Copy the current buffer file name to the clipboard."
(interactive)
(let ((filename (if (equal major-mode 'dired-mode)
default-directory
(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
(defun childframe-workable-p ()
"Whether childframe is workable."
(and (not noninteractive)
(not emacs-basic-display)
(or (display-graphic-p)
(featurep 'tty-child-frames))
(eq (frame-parameter (selected-frame) 'minibuffer) 't)))
(defun font-installed-p (font-name)
"Check if font with FONT-NAME is available."
(find-font (font-spec :name font-name)))
(provide 'init-functions)
;;; init-functions.el ends here.

164
configs/init-highlight.el Normal file
View File

@ -0,0 +1,164 @@
;; init-highlight.el --- Initialize highlighting configurations. -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;;
;; Highlighting configurations.
;;
;;; Code:
;; Highlight the current line
(use-package hl-line
:ensure nil
:hook (((dashboard-mode eshell-mode shell-mode term-mode vterm-mode) .
(lambda () (setq-local global-hl-line-mode nil)))
;; (after-init . global-hl-line-mode)
))
;; Highlight matching parens
(use-package paren
:ensure nil
:functions childframe-workable-p
:custom-face
(show-paren-match ((((class color) (background light))
(:box (:line-width (-1 . -1) :color "gray73")))
(((class color) (background dark))
(:box (:line-width (-1 . -1) :color "gray56")))))
:hook (after-init . show-paren-mode)
:init (setq show-paren-when-point-inside-paren t
show-paren-when-point-in-periphery t)
:config
(setq blink-matching-paren-highlight-offscreen t
show-paren-context-when-offscreen
(if (childframe-workable-p) 'child-frame 'overlay))
(with-no-warnings
;; Display matching line for off-screen paren.
(defun display-line-overlay (pos str &optional face)
"Display line at POS as STR with FACE.
FACE defaults to inheriting from default and highlight."
(let ((ol (save-excursion
(goto-char pos)
(make-overlay (line-beginning-position)
(line-end-position)))))
(overlay-put ol 'display str)
(overlay-put ol 'face
(or face '(:inherit highlight)))
ol))
(defvar-local show-paren--off-screen-overlay nil)
(defun show-paren-off-screen (&rest _args)
"Display matching line for off-screen paren."
(when (overlayp show-paren--off-screen-overlay)
(delete-overlay show-paren--off-screen-overlay))
;; Check if it's appropriate to show match info,
(when (and (overlay-buffer show-paren--overlay)
(not (or cursor-in-echo-area
executing-kbd-macro
noninteractive
(minibufferp)
this-command))
(and (not (bobp))
(memq (char-syntax (char-before)) '(?\) ?\$)))
(= 1 (logand 1 (- (point)
(save-excursion
(forward-char -1)
(skip-syntax-backward "/\\")
(point))))))
;; Rebind `minibuffer-message' called by `blink-matching-open'
;; to handle the overlay display.
(cl-letf (((symbol-function #'minibuffer-message)
(lambda (msg &rest args)
(let ((msg (apply #'format-message msg args)))
(setq show-paren--off-screen-overlay
(display-line-overlay
(window-start) msg ))))))
(blink-matching-open))))
(advice-add #'show-paren-function :after #'show-paren-off-screen)))
;; Resalta los escapes de secuencia
(use-package highlight-escape-sequences
:hook (prog-mode . hes-mode)
:config
(setq hes-mode-alist
`((c-mode . ,hes-c/c++/objc-escape-sequence-re)
(c++-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)
(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)
(clojure-mode . ,hes-java-escape-sequence-re)
(js-mode . ,hes-js-escape-sequence-re)
(js2-mode . ,hes-js-escape-sequence-re)
(ruby-mode . ,hes-ruby-escape-sequence-keywords)
(lisp-mode . ,hes-elisp-escape-sequence-re)
(lisp-interaction-mode . ,hes-elisp-escape-sequence-re)
(emacs-lisp-mode . ,hes-elisp-escape-sequence-re))
)
)
;; Resalta todas las ocurrencias del contenido seleccionado
(use-package region-occurrences-highlighter
:diminish
:bind (:map region-occurrences-highlighter-nav-mode-map
("M-n" . region-occurrences-highlighter-next)
("M-p" . region-occurrences-highlighter-prev))
:hook (elpaca-after-init . global-region-occurrences-highlighter-mode))
;; Highlight indentions
(use-package indent-bars
:custom
(indent-bars-color '(highlight :face-bg t :blend 0.225))
(indent-bars-highlight-current-depth '(:face default :blend 0.225))
(indent-bars-color-by-depth nil)
(indent-bars-pattern ".")
(indent-bars-treesit-support t)
(indent-bars-no-descend-string t)
(indent-bars-treesit-ignore-blank-lines-types '("module"))
(indent-bars-prefer-character t)
(indent-bars-treesit-scope '((python function_definition class_definition for_statement
if_statement with_statement while_statement)))
;; :hook ((prog-mode yaml-mode) . indent-bars-mode)
:config (require 'indent-bars-ts))
;; Colorize color names in buffers
(use-package colorful-mode
:diminish
:hook (after-init . global-colorful-mode)
:init (setq colorful-use-prefix t)
:config (dolist (mode '(html-mode php-mode help-mode helpful-mode))
(add-to-list 'global-colorful-modes mode)))
;; Highlight brackets according to their depth
(use-package rainbow-delimiters)
;; Resaltar palabras clave como TODO, FIXME, etc. en comentarios del código.
(use-package hl-todo
:autoload hl-todo-flymake hl-todo-search-and-highlight
:functions rg rg-read-files rg-project
:bind (:map hl-todo-mode-map
([C-f3] . hl-todo-occur))
:hook (elpaca-after-init . global-hl-todo-mode)
:init (setq hl-todo-require-punctuation t
hl-todo-highlight-punctuation ":")
:config
(add-to-list 'hl-todo-keyword-faces '("BUG" . "#d99600"))
;; Integrate into flymake
(with-eval-after-load 'flymake
(add-hook 'flymake-diagnostic-functions #'hl-todo-flymake))
;; Integrate into magit
(with-eval-after-load 'magit
(add-hook 'magit-log-wash-summary-hook
#'hl-todo-search-and-highlight t)
(add-hook 'magit-revision-wash-message-hook
#'hl-todo-search-and-highlight t))
)
(provide 'init-highlight)
;;; init-highlight.el ends here

View File

@ -17,30 +17,25 @@
(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-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")
'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-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) ; Ordenar líneas alfabéticamente
(global-set-key (kbd "<mouse-3>") 'context-menu-open) ; Abrir menú contextal al hacer clic derecho
;; 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 mh") 'html-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 mp") 'php-mode)
(global-set-key (kbd "C-x mr") 'rust-mode)
(global-set-key (kbd "C-x mp") 'php-ts-mode)
(global-set-key (kbd "C-x mw") 'web-mode)
;; Atajos de windmove
(global-set-key (kbd "C-x <left>") 'windmove-left)
(global-set-key (kbd "C-x <right>") 'windmove-right)
(global-set-key (kbd "C-x <up>") 'windmove-up)
(global-set-key (kbd "C-x <down>") 'windmove-down)
;; Cambiar de ventana
(global-set-key (kbd "C-S-o") 'other-window)
;; 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
;; Saltar entre párrafos
(define-key global-map "\M-[" 'backward-paragraph)
(define-key global-map "\M-]" 'forward-paragraph)
;; Deactivar el abrir *messages* al cliquear en el minibuffer
(define-key minibuffer-inactive-mode-map [mouse-1] #'ignore)

View File

@ -1,275 +1,102 @@
;;; init-lsp.el --- Languaje server protocol. -*- lexical-binding: t -*-
;;; init-lsp.el --- Configuración de eglot (LSP) -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;; Este archivo es lo misma idea que "init-eglot",
;; pero en este caso cambiamos lsp-mode en lugar
;; de Eglot.
;; Este archivo tiene todo lo relacionado con eglot.
;; Eglot es un cliente LSP para Emacs que desde la
;; versión 29 viene integrado dentro del mismo.
;;
;; Desde que Emacs trae integrado Eglot, he dejado
;; de usarlo y es probable que en un futuro sea
;; eliminado totalmente.
;; El nombre Eglot es un apócope de "Emacs polyglot"
;; ya que con este cliente podemos añadir soporte para
;; muchísimos lenguajes, puesto que actualente el que
;; un lenguaje tenga su propio LSP es muy normal.
;;
;; Como añadido:
;;
;; Un Languaje Server Provider (LSP), es un protocolo
;; mediante el cual existen servidores para lenguajes
;; en específico, los cuales proveen cosas como el
;; autocompletado, linting, documentación, ir a la
;; definición, etc.
;;
;; Este protocolo viene a solucionar el problema de
;; que cada herramienta de programación tenga que
;; volver a crear su propio soporte para cada uno
;; de los lenguajes (DRY).
;;; Code:
;; Performace tuning
;; @see https://emacs-lsp.github.io/lsp-mode/page/performance/
(setq read-process-output-max (* 1024 (* 3 1024))) ;; 3MB
(setenv "LSP_USE_PLISTS" "true")
(use-package lsp-mode
:defer t
:straight t
:diminish
:commands (lsp-enable-which-key-integration
lsp-format-buffer
lsp-organize-imports
lsp-install-server)
(use-package eglot
:ensure nil
:hook ((prog-mode . (lambda ()
(unless (derived-mode-p 'emacs-lisp-mode 'lisp-mode 'makefile-mode 'sql-mode)
(lsp-deferred))))
(html-mode . lsp-deferred)
(markdown-mode . lsp-deferred)
(lsp-mode . lsp-enable-which-key-integration))
:custom
(lsp-headerline-breadcrumb-enable nil)
:init (setq lsp-keymap-prefix "C-c l"
lsp-keep-workspace-alive nil
lsp-signature-auto-activate nil
lsp-modeline-code-actions-enable nil
lsp-modeline-diagnostics-enable nil
lsp-modeline-workspace-status-enable nil
lsp-headerline-breadcrumb-enable nil
lsp-enable-file-watchers nil
lsp-enable-folding nil
lsp-enable-links nil
lsp-enable-symbol-highlighting nil
lsp-enable-semantic-highlighting nil
cls-sem-highlight-method nil
lsp-enable-text-document-color nil
lsp-lens-enable nil
lsp-auto-guess-root t
lsp-log-io nil
lsp-idle-delay 0.5
lsp-diagnostic-package :none ; Evitar que lsp conecte con flycheck para evitar que se congele
lsp-enable-indentation nil
lsp-enable-on-type-formatting nil)
(unless (derived-mode-p
'emacs-lisp-mode 'lisp-mode
'makefile-mode 'snippet-mode
'ron-mode)
(eglot-ensure))))
((markdown-mode yaml-mode yaml-ts-mode) . eglot-ensure))
:init
(setq read-process-output-max (* 1024 1024)) ; 1MB
(setq eglot-autoshutdown t
eglot-events-buffer-size 0
eglot-send-changes-idle-time 0.5)
:config
(with-no-warnings
;; Remove php extension on form lsp
(setq lsp-language-id-configuration
(remove '(".*\\.php$" . "php") lsp-language-id-configuration))
(add-to-list 'lsp-language-id-configuration '(web-mode . "html"))
(setq eglot-sync-connect 0)
;; (add-to-list 'eglot-server-programs '(php-mode . ("intelephense" "--stdio")))
;; Disable `lsp-mode' in `git-timemachine-mode'
(defun my-lsp--init-if-visible (fn &rest args)
(unless (bound-and-true-p git-timemachine-mode)
(apply fn args)))
(advice-add #'lsp--init-if-visible :around #'my-lsp--init-if-visible)
(add-to-list 'eglot-server-programs
'((tsx-ts-mode
;; js-ts-mode
;; js-mode
typescript-ts-mode
typescript-mode)
.
(eglot-deno "deno" "lsp")))
;; Enable `lsp-mode' in sh/bash/zsh
(defun my-lsp-bash-check-sh-shell (&rest _)
(and (eq major-mode 'sh-mode)
(memq sh-shell '(sh bash zsh))))
(advice-add #'lsp-bash-check-sh-shell :override #'my-lsp-bash-check-sh-shell)
;; Only display icons in GUI
(defun my-lsp-icons-get-symbol-kind (fn &rest args)
(and (icon-displayable-p) (apply fn args)))
(advice-add #'lsp-icons-get-by-symbol-kind :around #'my-lsp-icons-get-symbol-kind)
(defun my-lsp-icons-get-by-file-ext (fn &rest args)
(and (icon-displayable-p) (apply fn args)))
(advice-add #'lsp-icons-get-by-file-ext :around #'my-lsp-icons-get-by-file-ext)
(defun my-lsp-icons-all-the-icons-material-icon (icon-name face fallback &optional feature)
(if (and (icon-displayable-p)
(lsp-icons--enabled-for-feature feature))
(all-the-icons-material icon-name
:face face)
(propertize fallback 'face face)))
(advice-add #'lsp-icons-all-the-icons-material-icon
:override #'my-lsp-icons-all-the-icons-material-icon))
(defclass eglot-deno (eglot-lsp-server) ()
:documentation "A custom class for deno lsp.")
(cl-defmethod eglot-initialization-options ((server eglot-deno))
"Passes through required deno initialization options"
(list :enable t
:lint t))
)
;; Interface para lsp
(use-package lsp-ui
:defer t
:straight t
:bind (:map lsp-mode-map
("<f1>" . lsp-ui-doc-glance))
:hook (lsp-mode . lsp-ui-mode)
:init
(setq lsp-ui-sideline-show-code-actions nil
lsp-ui-sideline-show-symbol nil
lsp-ui-sideline-show-hover nil
lsp-ui-sideline-delay 0.5)
(setq lsp-ui-sideline-show-diagnostics nil
lsp-ui-sideline-ignore-duplicate t
lsp-ui-doc-show-with-cursor nil
lsp-ui-doc-show-with-mouse nil
lsp-ui-doc-position 'at-point
lsp-ui-doc-delay 0.1
lsp-ui-imenu-colors `(,(face-foreground 'font-lock-keyword-face)
,(face-foreground 'font-lock-string-face)
,(face-foreground 'font-lock-constant-face)
,(face-foreground 'font-lock-variable-name-face)))
;; Set correct color to borders
(defun my-lsp-ui-doc-set-border ()
"Set the border color of lsp doc."
(setq lsp-ui-doc-border
(if (facep 'posframe-border)
(face-background 'posframe-border nil t)
(face-foreground 'shadow nil t))))
(my-lsp-ui-doc-set-border)
(add-hook 'after-load-theme-hook #'my-lsp-ui-doc-set-border t)
;; Mejorar la velocidad de eglot (un binario en rust )
(use-package eglot-booster
:ensure (:host github :repo "jdtsmith/eglot-booster")
:after eglot
:config
;;
(if (executable-find "emacs-lsp-booster")
(eglot-booster-mode)
(message "No está instalado emacs-lsp-booster. Eglot se usará de modo normal."))
)
;; Integración con ivy
(use-package lsp-ivy
:defer t
:straight t
:after lsp-mode
:bind (:map lsp-mode-map
([remap xref-find-apropos] . lsp-ivy-workspace-symbol)
("C-s-." . lsp-ivy-global-workspace-symbol))
:config
(with-no-warnings
(when (icon-displayable-p)
(defvar lsp-ivy-symbol-kind-icons
`(,(all-the-icons-material "find_in_page" :height 0.9 :v-adjust -0.15) ; Unknown - 0
,(all-the-icons-faicon "file-o" :height 0.9 :v-adjust -0.02) ; File - 1
,(all-the-icons-material "view_module" :height 0.9 :v-adjust -0.15 :face 'all-the-icons-lblue) ; Module - 2
,(all-the-icons-material "view_module" :height 0.95 :v-adjust -0.15 :face 'all-the-icons-lblue) ; Namespace - 3
,(all-the-icons-octicon "package" :height 0.9 :v-adjust -0.15) ; Package - 4
,(all-the-icons-material "settings_input_component" :height 0.9 :v-adjust -0.15 :face 'all-the-icons-orange) ; Class - 5
,(all-the-icons-faicon "cube" :height 0.9 :v-adjust -0.02 :face 'all-the-icons-purple) ; Method - 6
,(all-the-icons-faicon "wrench" :height 0.8 :v-adjust -0.02) ; Property - 7
,(all-the-icons-octicon "tag" :height 0.95 :v-adjust 0 :face 'all-the-icons-lblue) ; Field - 8
,(all-the-icons-faicon "cube" :height 0.9 :v-adjust -0.02 :face 'all-the-icons-lpurple) ; Constructor - 9
,(all-the-icons-material "storage" :height 0.9 :v-adjust -0.15 :face 'all-the-icons-orange) ; Enum - 10
,(all-the-icons-material "share" :height 0.9 :v-adjust -0.15 :face 'all-the-icons-lblue) ; Interface - 11
,(all-the-icons-faicon "cube" :height 0.9 :v-adjust -0.02 :face 'all-the-icons-purple) ; Function - 12
,(all-the-icons-octicon "tag" :height 0.95 :v-adjust 0 :face 'all-the-icons-lblue) ; Variable - 13
,(all-the-icons-faicon "cube" :height 0.9 :v-adjust -0.02 :face 'all-the-icons-purple) ; Constant - 14
,(all-the-icons-faicon "text-width" :height 0.9 :v-adjust -0.02) ; String - 15
,(all-the-icons-material "format_list_numbered" :height 0.95 :v-adjust -0.15) ; Number - 16
,(all-the-icons-octicon "tag" :height 0.9 :v-adjust 0.0 :face 'all-the-icons-lblue) ; Boolean - 17
,(all-the-icons-material "view_array" :height 0.95 :v-adjust -0.15) ; Array - 18
,(all-the-icons-octicon "tag" :height 0.9 :v-adjust 0.0 :face 'all-the-icons-blue) ; Object - 19
,(all-the-icons-faicon "key" :height 0.9 :v-adjust -0.02) ; Key - 20
,(all-the-icons-octicon "tag" :height 0.9 :v-adjust 0.0) ; Null - 21
,(all-the-icons-material "format_align_right" :height 0.95 :v-adjust -0.15 :face 'all-the-icons-lblue) ; EnumMember - 22
,(all-the-icons-material "settings_input_component" :height 0.9 :v-adjust -0.15 :face 'all-the-icons-orange) ; Struct - 23
,(all-the-icons-octicon "zap" :height 0.9 :v-adjust 0 :face 'all-the-icons-orange) ; Event - 24
,(all-the-icons-material "control_point" :height 0.9 :v-adjust -0.15) ; Operator - 25
,(all-the-icons-faicon "arrows" :height 0.9 :v-adjust -0.02) ; TypeParameter - 26
))
;; Emmet (mientras veo como hacer funcionar emmet-ls)
(use-package emmet-mode
:hook
((html-mode . emmet-mode)
(web-mode . emmet-mode))
)
(lsp-defun my-lsp-ivy--format-symbol-match
((sym &as &SymbolInformation :kind :location (&Location :uri))
project-root)
"Convert the match returned by `lsp-mode` into a candidate string."
(let* ((sanitized-kind (if (< kind (length lsp-ivy-symbol-kind-icons)) kind 0))
(type (elt lsp-ivy-symbol-kind-icons sanitized-kind))
(typestr (if lsp-ivy-show-symbol-kind (format "%s " type) ""))
(pathstr (if lsp-ivy-show-symbol-filename
(propertize (format " · %s" (file-relative-name (lsp--uri-to-path uri) project-root))
'face font-lock-comment-face)
"")))
(concat typestr (lsp-render-symbol-information sym ".") pathstr)))
(advice-add #'lsp-ivy--format-symbol-match :override #'my-lsp-ivy--format-symbol-match))))
;; Debug
(use-package dap-mode
:defer t
:straight t
:defines dap-python-executable
:functions dap-hydra/nil
:diminish
:bind (:map lsp-mode-map
("<f5>" . dap-debug)
("M-<f5>" . dap-hydra))
:hook ((after-init . dap-auto-configure-mode)
(dap-stopped . (lambda (_args) (dap-hydra)))
(dap-terminated . (lambda (_args) (dap-hydra/nil)))
(python-mode . (lambda () (require 'dap-python)))
(ruby-mode . (lambda () (require 'dap-ruby)))
(go-mode . (lambda () (require 'dap-go)))
(java-mode . (lambda () (require 'dap-java)))
((c-mode c++-mode objc-mode swift-mode) . (lambda () (require 'dap-lldb)))
(php-mode . (lambda () (require 'dap-php)))
(elixir-mode . (lambda () (require 'dap-elixir)))
((js-mode js2-mode) . (lambda () (require 'dap-chrome)))
(powershell-mode . (lambda () (require 'dap-pwsh))))
:init
(setq dap-auto-configure-features '(sessions locals breakpoints expressions controls))
(when (executable-find "python3")
(setq dap-python-executable "python3")))
;; Python debug
(use-package lsp-pyright
:defer t
:straight t
:preface
;; Use yapf to format
(defun lsp-pyright-format-buffer ()
(interactive)
(when (and (executable-find "yapf") buffer-file-name)
(call-process "yapf" nil nil nil "-i" buffer-file-name)))
:hook (python-mode . (lambda ()
(require 'lsp-pyright)
(add-hook 'after-save-hook #'lsp-pyright-format-buffer t t)))
:init (when (executable-find "python3")
(setq lsp-pyright-python-executable-cmd "python3")))
;; Java LSP
(use-package lsp-java
:defer t
:straight t
:hook (java-mode . (lambda () (require 'lsp-java))))
;; `lsp-mode' and `treemacs' integration
(use-package lsp-treemacs
:defer t
:straight t
:after lsp-mode
:bind (:map lsp-mode-map
("C-<f8>" . lsp-treemacs-errors-list)
("M-<f8>" . lsp-treemacs-symbols)
("s-<f8>" . lsp-treemacs-java-deps-list))
:init (lsp-treemacs-sync-mode 1)
:config
(with-eval-after-load 'ace-window
(when (boundp 'aw-ignored-buffers)
(push 'lsp-treemacs-symbols-mode aw-ignored-buffers)
(push 'lsp-treemacs-java-deps-mode aw-ignored-buffers))))
;; Revisar sintaxis en vivo
(use-package flycheck
;; :diminish flycheck-mode
:defer t
:straight t
;; Revisar por errores en el código
(use-package flymake
:ensure nil
:hook (prog-mode . (lambda ()
(unless (derived-mode-p 'makefile-mode 'js-mode)
(flycheck-mode))))
(unless (derived-mode-p 'makefile-mode)
(flymake-mode))))
:config
(remove-hook 'flymake-diagnostic-functions 'flymake-proc-legacy-flymake)
)
;; Mostrar los errores de flycheck en un pop up
(use-package flycheck-popup-tip
:defer t
:straight t
:hook (flycheck-mode . flycheck-popup-tip-mode))
;; Mostar los errores de flymake en un popup-tip
(use-package flymake-diagnostic-at-point
:after flymake
:hook (flymake-mode . flymake-diagnostic-at-point-mode))
(provide 'init-lsp)
;;; init-lsp.el ends here

View File

@ -10,132 +10,126 @@
;;; Code:
;; Autocompletado y sugerencias para el minibuffer
(use-package counsel
:defer t
:straight t
:diminish ivy-mode counsel-mode
:bind (("C-s" . swiper-isearch)
("C-r" . counsel-rg)
("M-x" . counsel-M-x)
("<menu>" . counsel-M-x)
;; Reemplazo para counsel
(use-package consult
:bind (("C-x p" . project-find-file)
("C-S-s" . consult-line)
("C-c r g" . consult-ripgrep)
("C-S-r" . consult-ripgrep)
;; ("C-S-s" . isearch-forward)
("M-m" . consult-mode-command)
("C-c h" . consult-history)
("C-c k" . consult-kmacro)
;; ("C-c C-r" . ivy-resume)
;; ("C-c v p" . ivy-push-view)
;; ("C-c v o" . ivy-pop-view)
;; ("C-c v ." . ivy-switch-view)
([remap Info-search] . consult-info)
([remap imenu] . consult-imenu)
([remap recentf-open-files] . consult-recent-file)
:map counsel-mode-map
([remap swiper] . counsel-grep-or-swiper)
([remap swiper-backward] . counsel-grep-or-swiper-backward)
([remap dired] . counsel-dired)
([remap set-variable] . counsel-set-variable)
([remap insert-char] . counsel-unicode-char)
([remap recentf-open-files] . counsel-recentf)
([remap org-capture] . counsel-org-capture)
([remap jump-to-register] . counsel-register)
:map ivy-minibuffer-map
("C-w" . ivy-yank-word)
("<tab>" . ivy-partial)
("<escape>" . minibuffer-keyboard-quit)
("C-x M-." . consult-complex-command) ;; orig. repeat-complex-command
("C-c p b" . consult-project-buffer) ;; orig. project-switch-to-buffer
("C-c p p" . project-switch-project)
;; Consult search
("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
;; Custom M-# bindings for fast register access
("C-'" . consult-register-load)
("M-'" . consult-register-store) ;; orig. abbrev-prefix-mark (unrelated)
;; Other custom bindings
("M-y" . consult-yank-pop) ;; orig. yank-pop
;; M-g bindings in `goto-map'
("M-g f" . consult-flymake) ;; Alternative: consult-flycheck
("M-g g" . consult-goto-line) ;; orig. goto-line
("M-g M-g" . consult-goto-line) ;; orig. goto-line
("M-g i" . consult-imenu)
("M-g I" . consult-imenu-multi)
:map counsel-find-file-map
("C-h" . counsel-up-directory)
:map swiper-map
("M-%" . swiper-query-replace)
;; Minibuffer history
:map minibuffer-local-map
("<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-S-s" . (lambda ()
"Insert the current symbol."
(interactive)
(insert (save-excursion
(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.
)
:hook ((after-init . ivy-mode)
(ivy-mode . counsel-mode))
;; Enable automatic preview at point in the *Completions* buffer. This is
;; relevant when you use the default completion UI.
:hook (completion-list-mode . consult-preview-at-point-mode)
;; The :init configuration is always executed (Not lazy)
:init
(setq enable-recursive-minibuffers t) ; Allow commands in minibuffers
;; Optionally configure the register formatting. This improves the register
;; preview for `consult-register', `consult-register-load',
;; `consult-register-store' and the Emacs built-ins.
(setq register-preview-delay 0.5
register-preview-function #'consult-register-format)
(setq ivy-height 12
ivy-use-selectable-prompt t
ivy-use-virtual-buffers t ; Enable bookmarks and recentf
ivy-fixed-height-minibuffer t
ivy-count-format "(%d/%d) "
ivy-ignore-buffers '("\\` " "\\`\\*tramp/" "\\`\\*xref" "\\`\\*helpful "
"\\`\\*.+-posframe-buffer\\*" "\\` ?\\*company-.+\\*")
ivy-on-del-error-function #'ignore
ivy-initial-inputs-alist nil)
;; Optionally tweak the register preview window.
;; This adds thin lines, sorting and hides the mode line of the window.
(advice-add #'register-preview :override #'consult-register-window)
;; Use orderless regex strategy
(setq ivy-re-builders-alist '((t . ivy--regex-ignore-order)))
;; Use Consult to select xref locations with preview
(with-eval-after-load 'xref
(setq xref-show-xrefs-function #'consult-xref
xref-show-definitions-function #'consult-xref))
;; Set minibuffer height for different commands
(setq ivy-height-alist '((counsel-evil-registers . 5)
(counsel-yank-pop . 8)
(counsel-git-log . 4)
(swiper . 15)
(counsel-projectile-ag . 15)
(counsel-projectile-rg . 15)))
:config
;; Optionally configure preview. The default value
;; is 'any, such that any key triggers the preview.
;; (setq consult-preview-key 'any)
(setq consult-preview-key "M-.")
;; (setq consult-preview-key '("S-<down>" "S-<up>"))
;; For some commands and buffer sources it is useful to configure the
;; :preview-key on a per-command basis using the `consult-customize' macro.
(consult-customize
consult-goto-line
consult-theme :preview-key '(:debounce 0.4 any))
;; Optionally configure the narrowing key.
;; Both < and C-+ work reasonably well.
(setq consult-narrow-key "<") ;; "C-+"
(setq swiper-action-recenter t)
;; Optionally make narrowing help available in the minibuffer.
;; You may want to use `embark-prefix-help-command' or which-key instead.
(define-key consult-narrow-map (vconcat consult-narrow-key "?") #'consult-narrow-help))
(setq counsel-find-file-at-point t
counsel-preselect-current-file t
counsel-yank-pop-separator "\n────────\n")
(add-hook 'counsel-grep-post-action-hook #'recenter)
;; Descripciones en el minibufer
(use-package marginalia
:hook (vertico-mode . marginalia-mode))
;; Use the faster search tools
(when (executable-find "rg")
(setq counsel-grep-base-command "rg -S --no-heading --line-number --color never '%s' '%s'"))
(when (executable-find "fd")
(setq counsel-fzf-cmd
"fd --type f --hidden --follow --exclude .git --color never '%s'"))
;; Todolist de todo el projecto desde consult.
(use-package consult-todo
:demand t
:bind ("C-c t" . consult-todo))
;; UI para completado del minibuffer
(use-package vertico
:bind (:map vertico-map
("RET" . vertico-directory-enter)
("DEL" . vertico-directory-delete-char)
("TAB" . minibuffer-complete)
("M-DEL" . vertico-directory-delete-word))
:hook ((elpaca-after-init . vertico-mode)
(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)
)
;; Integración entre projectile y counsel
(use-package counsel-projectile
:defer t
:straight t
:bind*
("C-x p" . counsel-projectile)
:hook (counsel-mode . counsel-projectile-mode)
:init (setq counsel-projectile-grep-initial-input '(ivy-thing-at-point)))
;; Autocompletado, sugerencias y menú de búsqueda mejorados (este paquete incluye counsel y swiper)
(use-package ivy
:defer t
:straight t
:hook (after-init . ivy-mode)
:config
(setq ivy-use-virtual-buffers nil))
;; Ivy pero con más detalles en pantalla
(use-package ivy-rich
:defer t
:straight t
:ensure t
:hook ((counsel-projectile-mode . ivy-rich-mode) ; MUST after `counsel-projectile'
(ivy-rich-mode . ivy-rich-project-root-cache-mode)
(ivy-rich-mode . (lambda ()
"Use abbreviate in `ivy-rich-mode'."
(setq ivy-virtual-abbreviate
(or (and ivy-rich-mode 'abbreviate) 'name)))))
:init
;; For better performance
(setq ivy-rich-parse-remote-buffer nil))
;; Iconos en Ivy usando all-the-icons
(use-package all-the-icons-ivy-rich
:defer t
:straight t
:ensure t
:hook (ivy-mode . all-the-icons-ivy-rich-mode)
:config
(setq all-the-icons-ivy-rich-color-icon t))
;; Ordenar los comandos usados en M-x (por uso y luego alfabéticamente)
(use-package smex
:straight t
:defer t
:after (counsel))
;; Mover el minibufer de vertico al centro de la pantalla.
(use-package vertico-posframe
:functions posframe-poshandler-frame-center
:hook (vertico-mode . vertico-posframe-mode)
:init (setq vertico-posframe-poshandler
#'posframe-poshandler-frame-center
vertico-posframe-parameters
'((left-fringe . 8)
(right-fringe . 8))))
(provide 'init-minibuffer)
;;; init-minibuffer.el ends here

View File

@ -21,18 +21,13 @@
"Configuración para el hook de 'org-mode'."
(display-line-numbers-mode 0)
(variable-pitch-mode 1)
(visual-line-mode 1)
(visual-fill-column-mode 1)
;; Configuración de fonts
;; (set-face-attribute (car face) nil :font "Cantarell" :weight 'regular :height (cdr face))
;; Configuracin para Systanx Highlight en porg-blocks
(add-to-list 'org-src-lang-modes (cons "html" 'mhtml))
;; Ensure that anything that should be fixed-pitch in Org files appears that way
;; (set-face-attribute 'org-hide nil :inherit 'fixed-pitch)
;; (set-face-attribute 'org-block nil :foreground 'unspecified :inherit 'fixed-pitch)
;; (set-face-attribute 'org-code nil :inherit '(shadow fixed-pitch))
(set-face-attribute 'org-block nil :underline nil :foreground nil :background "#1e1f28")
(setq org-fontify-quote-and-verse-blocks t) ;; Permitir configuración de bloques quote y verse.
(set-face-attribute 'org-table nil :inherit '(shadow fixed-pitch))
(set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch))
(set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch))
@ -45,18 +40,55 @@
:strike-through t
:foreground "light gray")
;; Embellecer las prioridades
(setq org-highest-priority ?A
org-default-priority ?B
org-lowest-priority ?D) ;; Cambiar prioridades de A,B,C a A,B,C,D
(push '("[#A]" . "" ) prettify-symbols-alist)
(push '("[#B]" . "🔥" ) prettify-symbols-alist)
(push '("[#C]" . "🐢" ) prettify-symbols-alist)
(push '("[#D]" . "" ) prettify-symbols-alist)
;; (push '("#+begin_quote" . "❝" ) prettify-symbols-alist)
;; (push '("#+end_quote" . "❞" ) prettify-symbols-alist)
;; (push '("#+begin_export" . "📤" ) prettify-symbols-alist)
;; (push '("#+end_export" . "⎯" ) prettify-symbols-alist)
;; (push '("#+begin_comment" . "📝" ) prettify-symbols-alist)
;; (push '("#+end_comment" . "⎯" ) prettify-symbols-alist)
;; (push '("#+begin_src" . "" ) prettify-symbols-alist)
;; (push '("#+end_src" . "⎯" ) prettify-symbols-alist)
;; (push '("#+begin_example" . "🦉" ) prettify-symbols-alist)
;; (push '("#+end_example" . "⎯" ) prettify-symbols-alist)
(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
(use-package org
:defer t
:straight (:type built-in)
:bind (("C-c a" . org-agenda)
("C-c c" . org-capture))
:ensure nil
:hook
(org-mode . kj/org-hook)
:config
(setq company-dabbrev-ignore-case nil) ; Hacer el autocompletado case-sensitive.
(setq org-ellipsis "")
(setq org-hide-emphasis-markers t)
;;(setq org-startup-folded 'content)
@ -66,7 +98,7 @@
(setq org-log-into-drawer t)
(setq org-cycle-separator-lines -1)
;; Identación
;; Indentación
(setq org-startup-indented t)
(setq org-src-preserve-indentation nil)
(setq org-edit-src-content-indentation 0)
@ -80,19 +112,10 @@
'(("TODO" . "#ff6464")
("DOING" . "yellow")
("DONE" . "green")
("WAITING" . "orange")
("HOLD" . "orange")
("CANCELED" . "#aaa"))
)
;; Embellecer los checkbox
;; (add-hook 'org-mode-hook (lambda ()
;; "Beautify Org Checkbox Symbol"
;; (push '("[ ]" . "☐") prettify-symbols-alist)
;; (push '("[X]" . "☑" ) prettify-symbols-alist)
;; (push '("[-]" . "❍" ) prettify-symbols-alist)
;; (prettify-symbols-mode)))
;; Tachar los checkbox marcados como terminados
(defface org-checkbox-done-text
'((t (:foreground "#71696A" :strike-through t)))
@ -112,27 +135,22 @@
;; Archivos entre los que se moverán las tareas
(setq org-refile-targets
'(("Archivo.org" :maxlevel . 1)
("Ideas.org" :maxlevel . 1)
("Tareas.org" :maxlevel . 1)))
;; Guardar los archivos cuando se muevan tareas entre ellos
(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)
("i" "Ideas")
("ii" "Ideas" entry (file+olp "~/Documentos/ORG/Agenda/ideas.org")
"* TODO %? \n %a\n %i" :empty-lines 1)
)
)
;; Configuración de 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-image-actual-width 512)
)
;; Org-yt para soportar embebidos.
(use-package org-yt
:after org
:ensure (:host github :repo "TobiasZawada/org-yt")
:config
(defun org-http-image-data-fn (protocol link _description)
"Interpret LINK as an URL to an image file."
(when (and (image-type-from-file-name link)
@ -144,24 +162,45 @@
(buffer-substring-no-properties (point) (point-max)))
(message "Download of image \"%s\" failed" link)
nil)))
(org-link-set-parameters "http" :image-data-fun #'org-http-image-data-fn)
(org-link-set-parameters "https" :image-data-fun #'org-http-image-data-fn)
(use-package org-yt
:straight (org-yt :type git :host github :repo "TobiasZawada/org-yt"))
)
;; Los head "*" se ven como puntos
(use-package org-bullets
:defer t
:straight t
: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
: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
:straight t
:defer t
:after (org)
:config
;; Tamaño de la columna
@ -174,11 +213,7 @@
;; Segundo cerebro: Base de conocimientos en formato Zettelkasten
(use-package org-roam
:defer t
:straight t
:ensure t
:bind (("<f4>" . org-roam-node-insert)
("<f3>" . org-roam-node-find))
:bind ("<f3>" . org-roam-node-find)
:init
(setq org-roam-v2-ack t)
(setq org-roam-completion-system 'ivy)
@ -190,9 +225,6 @@
;; Interface web para navegar en mi base de conocimientos.
(use-package org-roam-ui
:defer t
:straight t
:ensure t
:config
(setq org-roam-ui-sync-theme t
org-roam-ui-follow t
@ -201,27 +233,22 @@
;; Continúa el formato de la lista cuando presionas enter.
(use-package org-autolist
:straight t
:ensure t
:hook (org-mode . org-autolist-mode))
;; Emojis en lugar de letras para las prioridades en org-mode.
(use-package org-fancy-priorities
:straight t
:defer t
:ensure t
:hook (org-mode . org-fancy-priorities-mode)
:config
(setq org-highest-priority ?A
org-default-priority ?B
org-lowest-priority ?D
org-fancy-priorities-list '("" "" "" ""))
)
;; Org babel para PHP
(use-package ob-php)
;; Org babel para GO
(use-package ob-go)
;; Org babel para Rust
(use-package ob-rust)
;; Org babel para traducciones (mediante google translate)
(use-package ob-translate)
;; Org mode en modo presentación
(use-package org-present
:straight t
:defer t
:after (org)
:config
(add-hook 'org-present-mode-hook
@ -247,5 +274,10 @@
))
)
;; Mostrar los caracteres ocultos de org mode al pasar con el cursor.
(use-package org-appear
;; :hook (org-mode . org-appear-mode)
)
(provide 'init-org)
;;; init-org.el ends here

78
configs/init-package.el Normal file
View File

@ -0,0 +1,78 @@
;;; init-package.el --- Initialize package configurations. -*- lexical-binding: t -*-
;;; Commentary:
;;
;; Emacs Package management configurations.
;;
;;; Code:
;; Configuración de repositorios de paquetes
(defvar elpaca-installer-version 0.11)
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory))
(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
:ref nil :depth 1 :inherit ignore
:files (:defaults "elpaca-test.el" (:exclude "extensions"))
:build (:not elpaca--activate-package)))
(let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory))
(build (expand-file-name "elpaca/" elpaca-builds-directory))
(order (cdr elpaca-order))
(default-directory repo))
(add-to-list 'load-path (if (file-exists-p build) build repo))
(unless (file-exists-p repo)
(make-directory repo t)
(when (<= emacs-major-version 28) (require 'subr-x))
(condition-case-unless-debug err
(if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
((zerop (apply #'call-process `("git" nil ,buffer t "clone"
,@(when-let* ((depth (plist-get order :depth)))
(list (format "--depth=%d" depth) "--no-single-branch"))
,(plist-get order :repo) ,repo))))
((zerop (call-process "git" nil buffer t "checkout"
(or (plist-get order :ref) "--"))))
(emacs (concat invocation-directory invocation-name))
((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch"
"--eval" "(byte-recompile-directory \".\" 0 'force)")))
((require 'elpaca))
((elpaca-generate-autoloads "elpaca" repo)))
(progn (message "%s" (buffer-string)) (kill-buffer buffer))
(error "%s" (with-current-buffer buffer (buffer-string))))
((error) (warn "%s" err) (delete-directory repo 'recursive))))
(unless (require 'elpaca-autoloads nil t)
(require 'elpaca)
(elpaca-generate-autoloads "elpaca" repo)
(let ((load-source-file-function nil)) (load "./elpaca-autoloads"))))
(add-hook 'after-init-hook #'elpaca-process-queues)
(elpaca `(,@elpaca-order))
;; Install use-package support
(elpaca elpaca-use-package
;; Enable use-package :ensure support for Elpaca.
(elpaca-use-package-mode))
;; Should set before loading `use-package'
(setq use-package-always-ensure t
use-package-always-defer t
use-package-expand-minimally t
use-package-enable-imenu-support t)
;; Required by `use-package'
(use-package diminish :ensure t)
;; Update GPG keyring for GNU ELPA
(use-package gnu-elpa-keyring-update)
;; Update packages
(unless (fboundp 'package-upgrade-all)
(use-package auto-package-update
:init
(setq auto-package-update-delete-old-versions t
auto-package-update-hide-results t)
(defalias 'package-upgrade-all #'auto-package-update-now)))
(provide 'init-package)
;;; init-package.el ends here

View File

@ -1,313 +0,0 @@
;;; init-packages.el --- Extensiones/paquetes instalados y su configuración -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;; Aquí se encuentran los paquetes de uso general.
;;
;; Aquellos de uso más específico, por ejemplo, los que
;; pertenecen a un lenguaje de programación en específico
;; estarán en el respectivo archivo de configuración
;; para dicho uso específico.
;;; Code:
;; Iconos bonitos
(use-package all-the-icons
:defer t
:straight t)
;; Intercamiar buffers de lugar
(use-package buffer-move
:straight t
:bind (("M-S-<up>" . buf-move-up)
("M-S-<down>" . buf-move-down)
("M-S-<left>" . buf-move-left)
("M-S-<right>" . buf-move-right))
)
;; Seleccionar por regiones (similar a mark-sexp, pero toma en cuenta hacia atrás del cursor también)
(use-package expand-region
:straight t
:defer t
:bind ("C-+" . er/expand-region))
;; Major mode para archivos CSV
(use-package csv-mode
:straight t
:defer t
:hook ((csv-mode . csv-align-mode)
(csv-mode . csv-header-line))
)
;; Un bonito y sencillo panel de inicio
(use-package dashboard
:straight t
:config
(dashboard-setup-startup-hook)
(setq dashboard-set-file-icons t
dashboard-set-heading-icons t
dashboard-set-file-icons t
dashboard-week-agenda nil
dashboard-agenda-time-string-format "%Y-%m-%d %H:%M")
(setq dashboard-startup-banner
(expand-file-name "duck-small.png" user-emacs-directory))
(setq dashboard-items '(
(agenda . 10)
;;(recents . 10)
))
)
;; Mover líneas o regiones
(use-package drag-stuff
:defer t
:straight t
:hook
(after-init . drag-stuff-global-mode)
:config
(drag-stuff-define-keys))
;; La línea bonita esa de abajo
(use-package doom-modeline
:defer t
:straight t
:ensure t
:hook (after-init . doom-modeline-mode)
:config
(setq doom-modeline-project-detection 'auto
doom-modeline-buffer-file-name-style 'relative-from-project
doom-modeline-major-mode-color-icon t
doom-modeline-buffer-modification-icon t
doom-modeline-indent-info nil
doom-modeline-persp-name t))
;; Emparejamiento automático de comillas, paréntesis, corchetes y llaves
(use-package electric-pair
:defer t
:straight (:type built-in)
:hook (after-init . electric-pair-mode)
:config
(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.
(use-package git-gutter
:defer t
:straight t
:hook
(after-init . global-git-gutter-mode))
;; Resalta los escapes de secuencia
(use-package highlight-escape-sequences
:straight t
:defer t
:hook (prog-mode . hes-mode)
:config
(setq hes-mode-alist
`((c-mode . ,hes-c/c++/objc-escape-sequence-re)
(c++-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)
(php-mode . ,hes-c/c++/objc-escape-sequence-re)
(java-mode . ,hes-java-escape-sequence-re)
(clojure-mode . ,hes-java-escape-sequence-re)
(js-mode . ,hes-js-escape-sequence-re)
(js2-mode . ,hes-js-escape-sequence-re)
(ruby-mode . ,hes-ruby-escape-sequence-keywords)
(lisp-mode . ,hes-elisp-escape-sequence-re)
(lisp-interaction-mode . ,hes-elisp-escape-sequence-re)
(emacs-lisp-mode . ,hes-elisp-escape-sequence-re))
)
)
;; Mostrar lo que se está presionando en pantalla
(use-package keypression
:straight t
:defer t
:config
(setq keypression-use-child-frame t
keypression-fade-out-delay 1.0
keypression-frame-justify 'keypression-left-justified
keypression-cast-command-name t
keypression-cast-command-name-format "%s %s"
keypression-combine-same-keystrokes t
keypression-x-offset 50
keypression-y-offset 100
keypression-font-face-attribute '(:width normal :height 180 :weight bold))
)
;; Generador automatizado de archivos de licencia
(use-package license-templates
:straight t
:defer t)
;; Magia para git
(use-package magit
:defer t
:straight t)
;; Modo markdown
(use-package markdown-mode
:defer t
:straight t)
;; Multiple vterm
(use-package multi-vterm
:defer t
:straight t
:bind* (("C-x tt" . multi-vterm-dedicated-toggle)
("C-x tf" . multi-vterm)
("C-x tp" . multi-vterm-project)
;;("<tab>" . vterm-send-tab)
)
:ensure t)
;; Mecanografía
(use-package speed-type
:defer t
:straight t
:diminish
:config
(setq speed-type-gb-book-list '(66867 66866 66591 57303)
speed-type-min-chars 500
speed-type-max-chars 600))
;; Paquete para manejo de proyectos
(use-package projectile
:defer t
:straight t
:bind ("C-c p" . projectile-command-map)
:diminish projectile-mode
:custom ((projectile-completion-system 'ivy))
:init
(setq projectile-mode-line-prefix ""
projectile-sort-order 'recentf
projectile-use-git-grep t)
:config
;; Rutas de archivos temporales.
(setq projectile-cache-file (expand-file-name "projectile.cache" temp-dir))
(setq projectile-known-projects-file (expand-file-name
"projectile-bookmarks.eld" temp-dir))
;; Carpetas donde tienes tus proyectos (deben tener un archivo .projectile o un repro git inicio).
(when (file-directory-p "~/Proyectos")
(setq projectile-project-search-path '("~/Proyectos")))
(when (file-directory-p "~/mnt/Nginx")
(setq projectile-project-search-path (append
projectile-project-search-path
'("~/mnt/Nginx"))))
;; Cambiar el título de la ventana de emacs
(setq frame-title-format
'(
(:eval
(let ((project-name (projectile-project-name)))
(unless (string= "-" project-name)
(format "[%s] " project-name))))
"%b"
" - Emacs")
)
(defun projectile-desktop-save-hook ()
"Nombres de los archivos de desktop-save según el nombre del proyecto."
(setq desktop-hash
(secure-hash 'md5 (concat (projectile-project-root))))
(setq
desktop-base-file-name (concat ".emacs-" desktop-hash ".desktop")
desktop-base-lock-name (concat ".emacs-" desktop-hash ".desktop" ".lock"))
)
(add-hook 'projectile-after-switch-project-hook #'projectile-desktop-save-hook)
)
;; Recentf - Guarda registro de los archivos abiertos recientemente
(use-package recentf
:defer t
:straight t
:bind ("C-x C-r" . recentf-open-files)
:config
(setq recentf-save-file
(recentf-expand-file-name (concat temp-dir "/recentf")))
(recentf-mode 1))
;; Busqueda rápida con ripgrep
(use-package rg
:defer t
:straight t
:defines projectile-command-map
:hook (after-init . rg-enable-default-bindings)
:bind (:map rg-global-map
("c" . rg-dwim-current-dir)
("f" . rg-dwim-current-file)
("m" . rg-menu))
:init (setq rg-group-result t
rg-show-columns t)
:config
(cl-pushnew '("tmpl" . "*.tmpl") rg-custom-type-aliases)
(with-eval-after-load 'projectile
(bind-key "s R" #'rg-project projectile-command-map)))
;; Guardar la posición del cursor en un archivo para volver allí cuando se lo vuelva a abrir.
(use-package saveplace
:straight t
:hook (after-init . save-place-mode)
:config
(setq save-place-file (locate-user-emacs-file (concat temp-dir "/places"))))
;; Mejorando el scroll
(use-package smooth-scrolling
:defer t
:straight t
:hook (after-init . smooth-scrolling-mode)
:config
(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
(setq mouse-wheel-progressive-speed nil) ; Deshabilita la velocidad progresiva del scroll (mientras más scroll haces, mas rápido va)
)
;; Paquete para crear imágens (solo lo uso para sacar capturas SVG de emacs)
(use-package silicon
:ensure t
:defer t
:straight (silicon :type git :host github :repo "iensu/silicon-el"))
;; Cuando presionas enter en un bloque de comentario sigue el estilo del bloque.
(use-package vs-comment-return
:straight (vs-comment-return :type git :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
:straight t
:defer t
:bind (("C-c v" . vc-msg-show)
("C-c C-v" . vc-msg-show))
)
;; Terminal
(use-package vterm :ensure t :defer t :straight t)
;; Cuando iniicias un atajo de teclas te muestra las posibilidades
(use-package which-key
:defer t
:straight t
:hook (after-init . which-key-mode))
;; Restaurar el estado de los frames
(use-package winner
:defer t
:straight t
:hook (after-init . winner-mode))
;; Emacs Start Up Profiler
;; (use-package esup
;; :ensure t
;; :straight t)
(provide 'init-packages)
;;; init-packages.el ends here

228
configs/init-prog.el Normal file
View File

@ -0,0 +1,228 @@
;; init-prog.el --- Initialize programming configurations. -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;;
;; General programming configurations.
;;
;;; Code:
;; Show function arglist or variable docstring
(use-package eldoc
:ensure nil
:diminish
:config
(when (childframe-workable-p)
;; Mostrar la ayuda de eldoc/documentación en un childframe
(use-package eldoc-box
:diminish (eldoc-box-hover-mode eldoc-box-hover-at-point-mode)
:bind ("<f1>" . eldoc-box-help-at-point)
:custom
(eldoc-box-lighter nil)
(eldoc-box-only-multi-line t)
(eldoc-box-clear-with-C-g t)
:custom-face
(eldoc-box-border ((t (:inherit posframe-border :background unspecified))))
(eldoc-box-body ((t (:inherit tooltip))))
:hook ((eglot-managed-mode . eldoc-box-hover-at-point-mode))
:config
;; Prettify `eldoc-box' frame
(setf (alist-get 'left-fringe eldoc-box-frame-parameters) 8
(alist-get 'right-fringe eldoc-box-frame-parameters) 8))))
;; Code folding indicators using Tree-sitter
(use-package treesit-fold-indicators
:ensure treesit-fold
:hook (after-init . global-treesit-fold-indicators-mode)
:init (setq treesit-fold-indicators-priority -1))
;; Cross-referencing commands
(use-package xref
:autoload xref-show-definitions-completing-read
:bind (("M-g ." . xref-find-definitions)
("M-g ," . xref-go-back))
:init
;; Use faster search tool
(when (executable-find "rg")
(setq xref-search-program 'ripgrep))
;; Select from xref candidates in minibuffer
(setq xref-show-definitions-function #'xref-show-definitions-completing-read
xref-show-xrefs-function #'xref-show-definitions-completing-read))
;; Code styles
(use-package editorconfig
:diminish
:hook (elpaca-after-init . editorconfig-mode))
;; Correr el código desde el buffer de emacs
(use-package quickrun
:bind (("C-<f5>" . quickrun)
("C-S-<f5>" . quickrun-region)))
;; Busqueda rápida con ripgrep
(use-package rg
:bind (:map rg-global-map
("c" . rg-dwim-current-dir)
("f" . rg-dwim-current-file)
("m" . rg-menu))
:config
(setq rg-group-result t
rg-show-columns t)
(cl-pushnew '("tmpl" . "*.tmpl") rg-custom-type-aliases))
;; Tree-sitter :)
(use-package treesit
:ensure nil
:commands (treesit-install-language-grammar nf/treesit-install-all-languages)
:config
(setq treesit-language-source-alist
'((bash . ("https://github.com/tree-sitter/tree-sitter-bash"))
(c . ("https://github.com/tree-sitter/tree-sitter-c"))
(cpp . ("https://github.com/tree-sitter/tree-sitter-cpp"))
(css . ("https://github.com/tree-sitter/tree-sitter-css"))
(go . ("https://github.com/tree-sitter/tree-sitter-go"))
(haskell . ("https://github.com/tree-sitter/tree-sitter-haskell"))
(html . ("https://github.com/tree-sitter/tree-sitter-html"))
(java . ("https://github.com/tree-sitter/tree-sitter-java"))
(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"))
(julia . ("https://github.com/tree-sitter/tree-sitter-julia"))
(lua . ("https://github.com/Azganoth/tree-sitter-lua"))
(make . ("https://github.com/alemuller/tree-sitter-make"))
(python . ("https://github.com/tree-sitter/tree-sitter-python"))
(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"))
(rust . ("https://github.com/tree-sitter/tree-sitter-rust"))
(sql . ("https://github.com/m-novikov/tree-sitter-sql"))
(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"))))
(defun nf/treesit-install-all-languages ()
"Install all languages specified by `treesit-language-source-alist'."
(interactive)
(let ((languages (mapcar 'car treesit-language-source-alist)))
(dolist (lang languages)
(treesit-install-language-grammar lang)
(message "`%s' parser was installed." lang)
(sit-for 0.75)))))
;; Browse devdocs.io documents using EWW
(use-package devdocs
:autoload (devdocs--installed-docs devdocs--available-docs)
:commands (devdocs-install devdocs-lookup)
:bind (:map prog-mode-map
("M-<f1>" . devdocs-dwim)
("C-h D" . devdocs-dwim))
:init
(defconst devdocs-major-mode-docs-alist
'((c-mode . ("c"))
(c++-mode . ("cpp"))
(python-mode . ("python~3.10" "python~2.7"))
(ruby-mode . ("ruby~3.1"))
(rustic-mode . ("rust"))
(css-mode . ("css"))
(html-mode . ("html"))
(julia-mode . ("julia~1.8"))
(js-mode . ("javascript" "jquery"))
(emacs-lisp-mode . ("elisp")))
"Alist of major-mode and docs.")
(mapc
(lambda (mode)
(add-hook (intern (format "%s-hook" (car mode)))
(lambda ()
(setq-local devdocs-current-docs (cdr mode)))))
devdocs-major-mode-docs-alist)
(setq devdocs-data-dir (expand-file-name "devdocs" user-emacs-directory))
(defun devdocs-dwim()
"Look up a DevDocs documentation entry.
Install the doc if it's not installed."
(interactive)
;; Install the doc if it's not installed
(mapc
(lambda (slug)
(unless (member slug (let ((default-directory devdocs-data-dir))
(seq-filter #'file-directory-p
(when (file-directory-p devdocs-data-dir)
(directory-files "." nil "^[^.]")))))
(mapc
(lambda (doc)
(when (string= (alist-get 'slug doc) slug)
(devdocs-install doc)))
(devdocs--available-docs))))
(alist-get major-mode devdocs-major-mode-docs-alist))
;; Lookup the symbol at point
(devdocs-lookup nil (thing-at-point 'symbol t))))
;; ---------------------------------------------------------------------------
;; Miscellaneous Programming Modes
;; ---------------------------------------------------------------------------
(use-package csv-mode)
(unless emacs/>=29p
(use-package csharp-mode))
(use-package cask-mode)
(use-package cmake-mode)
(use-package dart-mode)
(use-package julia-mode)
(use-package lua-mode)
(use-package mermaid-mode)
(use-package powershell)
(use-package scala-mode)
(use-package swift-mode)
(use-package v-mode)
(use-package vimrc-mode)
(use-package yaml-mode) ; Modo yaml
(use-package nginx-mode) ; Modo para leer archivos de configuración de nginx
;; Major mode para archivos CSV
(use-package csv-mode
;; :hook ((csv-mode . csv-align-mode)
;; (csv-mode . csv-header-line))
)
;; Modo markdown
(use-package markdown-mode)
;; Modo para edición de arc docker compose
(use-package docker-compose-mode)
;; Modo para la edición de archivos Dockerfile (y building desde emacs)
(use-package dockerfile-mode
:config
;; Suelo tener podman siempre en lugar de docker, así que lo definimos como el comando a usar
(setq dockerfile-mode-command "podman"))
;; Configuración para project.el
(use-package project
:ensure nil
:config
;; Colocamos un título del frame más bonito y útil que el por defecto
(setq frame-title-format
'(
(:eval
(let ((project-name (kj/project-name)))
(unless (null project-name)
(format "[%s] " project-name))))
"%b"
" - Emacs")
)
)
(use-package prettier
:diminish
:defines prettier-pre-warm
:hook ((js-base-mode css-mode sgml-mode web-mode) . prettier-mode)
:init (setq prettier-pre-warm 'none))
;;; init-prog.el ends here

33
configs/init-theme.el Normal file
View File

@ -0,0 +1,33 @@
;;; init-theme.el --- Carga del theme -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;; Desde aquí se puede cambiar la configuración de themes es posible
;; activar o desactivar los themes comentando o descomentando las
;; líneas que lo configuran.
;;; Code:
;; Theme dracula (https://draculatheme.com/) // aún lo tengo en l config porque a Ney le gusta
(use-package dracula-theme)
;; El theme más cercano a adwaita dark que he encontrado
(use-package adwaita-dark-theme)
;; Themes modus, vienen integrado en emacs en master (~v30)
(use-package modus-themes)
;; Themes ef
(use-package ef-themes
:init
(load-theme 'ef-dream t))
;; Los themes que recomiendo:
;; Oscuros: adwaita-dark y ef-dream
;; Claros: modus-operandi-tinted y ef-day
(provide 'init-theme)
;;; init-theme.el ends here

View File

@ -1,63 +0,0 @@
;;; init-treemacs.el --- Extensiones/paquetes instalados y su configuración -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;; Aquí se encuentran las configuraciones y paquetes relacionados
;; con treemacs.
;;
;; treemacs es esa barra lateral con los archivos en modo árbol.
;;; Code:
(use-package treemacs
:defer t
:straight t
:commands (treemacs-follow-mode
treemacs-filewatch-mode
treemacs-fringe-indicator-mode
treemacs-git-mode)
:custom-face
(cfrs-border-color ((t (:background ,(face-foreground 'font-lock-comment-face nil t)))))
:bind (([f9] . treemacs)
([f8] . treemacs-display-current-project-exclusively)
:map treemacs-mode-map
([mouse-1] . treemacs-single-click-expand-action))
:config
(setq treemacs-collapse-dirs (if treemacs-python-executable 3 0)
treemacs-missing-project-action 'remove
treemacs-sorting 'alphabetic-asc
treemacs-follow-after-init t
treemacs-width 30)
:config
(treemacs-follow-mode t)
(treemacs-filewatch-mode t)
(pcase (cons (not (null (executable-find "git")))
(not (null (executable-find "python3"))))
(`(t . t)
(treemacs-git-mode 'deferred))
(`(t . _)
(treemacs-git-mode 'simple))))
(use-package treemacs-projectile
:defer t
:straight t
:after (treemacs projectile)
:bind (:map projectile-command-map
("h" . treemacs-projectile)))
(use-package treemacs-magit
:defer t
:straight t
:after magit
:commands treemacs-magit--schedule-update
:hook ((magit-post-commit
git-commit-post-finish
magit-post-stage
magit-post-unstage)
. treemacs-magit--schedule-update))
(provide 'init-treemacs)
;;; init-treemacs.el ends here

148
configs/init-ui.el Normal file
View File

@ -0,0 +1,148 @@
;; init-ui.el --- Better lookings and appearances. -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;;
;; Visual (UI) configurations for better lookings and appearances.
;;
;;; Code:
;; Optimization
(setq idle-update-delay 1.0)
(setq-default cursor-in-non-selected-windows nil)
(setq highlight-nonselected-windows nil)
(setq fast-but-imprecise-scrolling t)
(setq redisplay-skip-fontification-on-input t)
;; Sidebar a la derecha con los archivos
(use-package dired-sidebar
:hook (dired-mode . hl-line-mode)
:bind ([f9] . dired-sidebar-toggle-sidebar)
:commands (dired-sidebar-toggle-sidebar)
:config
(setq dired-sidebar-theme 'nerd
;; dired-sidebar-should-follow-file t
;; dired-sidebar-follow-file-idle-delay 0.5
))
;; Show line numbers
(use-package display-line-numbers
:ensure nil
:hook ((prog-mode
conf-mode toml-ts-mode
yaml-mode yaml-ts-mode)
. display-line-numbers-mode)
:init (setq display-line-numbers-width-start t))
;; Suppress GUI features
(setq use-file-dialog nil
use-dialog-box nil
inhibit-startup-screen t
inhibit-startup-echo-area-message user-login-name
inhibit-default-init t
initial-scratch-message nil)
(unless (daemonp)
(advice-add #'display-startup-echo-area-message :override #'ignore))
;; Display dividers between windows
(setq window-divider-default-places t
window-divider-default-bottom-width 1
window-divider-default-right-width 1)
(add-hook 'window-setup-hook #'window-divider-mode)
;; Mouse & Smooth Scroll
;; Scroll one line at a time (less "jumpy" than defaults)
(when (display-graphic-p)
(setq mouse-wheel-scroll-amount '(1 ((shift) . hscroll))
mouse-wheel-scroll-amount-horizontal 1
mouse-wheel-progressive-speed nil))
(setq scroll-step 1
scroll-margin 0
scroll-conservatively 100000
auto-window-vscroll nil
scroll-preserve-screen-position t)
;; Smooth scrolling
(use-package ultra-scroll
:hook (elpaca-after-init . ultra-scroll-mode))
;; Use fixed pitch where it's sensible
(use-package mixed-pitch
:diminish)
;; Display ugly ^L page breaks as tidy horizontal lines
(use-package page-break-lines
:diminish
:hook (elpaca-after-init . global-page-break-lines-mode)
:config (dolist (mode '(dashboard-mode emacs-news-mode))
(add-to-list 'page-break-lines-modes mode)))
;; Transient
(when (childframe-workable-p)
;; Display transient in child frame
(use-package transient-posframe
:diminish
:defines posframe-border-width
:custom-face
(transient-posframe ((t (:inherit tooltip))))
(transient-posframe-border ((t (:inherit posframe-border :background unspecified))))
:hook (after-init . transient-posframe-mode)
:init (setq transient-mode-line-format nil
transient-posframe-border-width posframe-border-width
transient-posframe-poshandler 'posframe-poshandler-frame-center
transient-posframe-parameters '((left-fringe . 8)
(right-fringe . 8)))))
;; La línea bonita esa de abajo
(use-package doom-modeline
:init
(doom-modeline-mode)
(setq doom-modeline-project-detection 'auto
doom-modeline-buffer-file-name-style 'relative-from-project
doom-modeline-major-mode-color-icon t
doom-modeline-buffer-modification-icon t
doom-modeline-indent-info nil
doom-modeline-persp-name t))
(use-package hide-mode-line
:autoload turn-off-hide-mode-line-mode
:hook (((eat-mode
eshell-mode shell-mode
term-mode vterm-mode
embark-collect-mode lsp-ui-imenu-mode
pdf-annot-list-mode) . turn-on-hide-mode-line-mode)))
;; A minor-mode menu for mode-line
(use-package minions
:hook (elpaca-after-init . minions-mode))
;; Iconos bonitos para varias cosas
(use-package nerd-icons
:commands nerd-icons-install-fonts
:functions font-installed-p
:config
(unless (font-installed-p nerd-icons-font-family)
(nerd-icons-install-fonts t)))
;; nerd-icons en ibuffer
(use-package nerd-icons-ibuffer
:hook (ibuffer-mode . nerd-icons-ibuffer-mode))
;; Nerd icons para vertico
(use-package nerd-icons-completion
:hook (vertico-mode . nerd-icons-completion-mode))
;; Usar nerd-icons en dired
(use-package nerd-icons-dired
:after nerd-icons
:hook (dired-mode . nerd-icons-dired-mode))
(provide 'init-ui)
;;; init-ui.el ends here

241
configs/init-utils.el Normal file
View File

@ -0,0 +1,241 @@
;; init-utils.el --- Initialize ultilities. -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;;
;; Some usefule Utilities.
;;
;;; Code:
;; Mejora del reemplazo
(use-package anzu
:bind (([remap query-replace] . anzu-query-replace)
([remap query-replace-regexp] . anzu-query-replace-regexp)))
;; Intercamiar buffers de lugar
(use-package buffer-move
:bind (("M-S-<up>" . buf-move-up)
("M-S-<down>" . buf-move-down)
("M-S-<left>" . buf-move-left)
("M-S-<right>" . buf-move-right))
)
;; Cuando inicias un atajo de teclas te muestra las posibilidades
(use-package which-key
:diminish
:init (setq which-key-max-description-length 30
which-key-lighter nil
which-key-show-remaining-keys t)
:autoload which-key-posframe-mode
:hook ( elpaca-after-init . which-key-mode))
;; Muestra which-key en un frame en el centro en lugar de abajo
(when (childframe-workable-p)
(use-package which-key-posframe
:diminish
:defines posframe-border-width
:functions posframe-poshandler-frame-center-near-bottom
:custom-face
(which-key-posframe ((t (:inherit tooltip))))
(which-key-posframe-border ((t (:inherit posframe-border :background unspecified))))
:init
(setq which-key-posframe-border-width posframe-border-width
which-key-posframe-poshandler #'posframe-poshandler-frame-center-near-bottom
which-key-posframe-parameters '((left-fringe . 8)
(right-fringe . 8)))
(which-key-posframe-mode 1)))
;; Fast search tool `ripgrep'
(use-package rg
:hook (after-init . rg-enable-default-bindings)
:bind (:map rg-global-map
("c" . rg-dwim-current-dir)
("f" . rg-dwim-current-file)
("m" . rg-menu))
:init (setq rg-show-columns t)
:config (add-to-list 'rg-custom-type-aliases '("tmpl" . "*.tmpl")))
;; Process
(use-package proced
:ensure nil
:init
(setq-default proced-format 'verbose)
(setq proced-auto-update-flag t
proced-auto-update-interval 3
proced-enable-color-flag t))
;; Paquete para exportar buffers de emacs a HTML
(use-package htmlize)
;; eww
(use-package eww
:ensure nil
:init
;; Install: npm install -g readability-cli
(when (executable-find "readable")
(setq eww-retrieve-command '("readable"))))
;; Restaurar el estado de los frames
(use-package winner
:ensure nil
:config
(winner-mode))
;; Terminal
(use-package vterm
: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
)
;; Multiple vterm
(use-package multi-vterm
:after vterm
:bind* (("<f5>" . multi-vterm-dedicated-toggle)
("C-x tt" . multi-vterm-dedicated-toggle)
("C-x tf" . multi-vterm)
("C-x tp" . multi-vterm-project)
;;("<tab>" . vterm-send-tab)
))
;; Mecanografía
(use-package speed-type
:hook
(speed-type-mode . (lambda ()
(corfu-mode 0)
(display-line-numbers-mode 0)
(visual-line-mode 1)
(visual-fill-column-mode 1)))
:diminish
:config
(setq speed-type-gb-book-list '(66867 66866 66591 57303 15725 24536)
speed-type-min-chars 300
speed-type-max-chars 600))
;; Mostrar lo que se está presionando en pantalla
(use-package keypression
:config
(setq keypression-use-child-frame t
keypression-fade-out-delay 1.0
keypression-frame-justify 'keypression-left-justified
keypression-cast-command-name t
keypression-cast-command-name-format "%s %s"
keypression-combine-same-keystrokes t
keypression-x-offset 50
keypression-y-offset 100
keypression-font-face-attribute '(:width normal :height 180 :weight bold))
)
;; Un bonito y sencillo panel de inicio
(use-package dashboard
;; :init
;; (dashboard-setup-startup-hook)
:diminish dashboard-mode
:custom-face
(dashboard-heading ((t (:inherit (font-lock-string-face bold)))))
(dashboard-items-face ((t (:weight normal))))
(dashboard-no-items-face ((t (:weight normal))))
:config
(setq dashboard-set-file-icons t
dashboard-set-heading-icons t
dashboard-set-file-icons t
dashboard-week-agenda nil
dashboard-agenda-time-string-format "%Y-%m-%d %H:%M")
(setq dashboard-startup-banner
(expand-file-name "duck.svg" user-emacs-directory))
(setq dashboard-items '(
;; (recents . 10)
(agenda . 10)
))
)
;; Hydra - Permite crear conjuntos de atajos.
(use-package hydra
:defines posframe-border-width
:functions childframe-workable-p
:hook (emacs-lisp-mode . hydra-add-imenu)
:init
(when (childframe-workable-p)
(setq hydra-hint-display-type 'posframe)
(with-no-warnings
(defun hydra-set-posframe-show-params ()
"Set hydra-posframe style."
(setq hydra-posframe-show-params
`(:left-fringe 8
:right-fringe 8
:internal-border-width ,posframe-border-width
:internal-border-color ,(face-background 'posframe-border nil t)
:background-color ,(face-background 'tooltip nil t)
:foreground-color ,(face-foreground 'tooltip nil t)
:lines-truncate t
:poshandler posframe-poshandler-frame-center)))
(hydra-set-posframe-show-params)
(add-hook 'after-load-theme-hook #'hydra-set-posframe-show-params t))))
;; Pretty-Hydra - Su nombre ya indica lo que hace
(use-package pretty-hydra
:bind ("<f6>" . toggles-hydra/body)
:hook (emacs-lisp-mode . (lambda ()
(add-to-list
'imenu-generic-expression
'("Hydras"
"^.*(\\(pretty-hydra-define\\) \\([a-zA-Z-]+\\)"
2))))
:init
(cl-defun pretty-hydra-title (title &optional icon-type icon-name
&key face height v-adjust)
"Add an icon in the hydra title."
(let ((face (or face 'mode-line-emphasis))
(height (or height 1.2))
(v-adjust (or v-adjust 0.0)))
(concat
(when (and icon-type icon-name)
(let ((f (intern (format "nerd-icons-%s" icon-type))))
(when (fboundp f)
(concat
(apply f (list icon-name :face face :height height :v-adjust v-adjust))
" "))))
(propertize title 'face face))))
;; Global toggles
(with-no-warnings
(pretty-hydra-define toggles-hydra (:title (pretty-hydra-title "Toggles" 'faicon "nf-fa-toggle_on")
:color pink :quit-key ("q" "C-g"))
("Basic"
(("n" (cond ((fboundp 'display-line-numbers-mode)
(display-line-numbers-mode (if display-line-numbers-mode -1 1)))
((fboundp 'gblobal-linum-mode)
(global-linum-mode (if global-linum-mode -1 1))))
"line number"
:toggle (or (bound-and-true-p display-line-numbers-mode)
(bound-and-true-p global-linum-mode)))
("a" global-aggressive-indent-mode "aggressive indent" :toggle t)
("d" global-hungry-delete-mode "hungry delete" :toggle t)
("e" electric-pair-mode "electric pair" :toggle t)
("s" prettify-symbols-mode "pretty symbol" :toggle t)
("h" display-time-mode "time" :toggle t)
("i" indent-bars-mode "indent bars" :toggle t))
"Highlight"
(("l" global-hl-line-mode "line" :toggle t)
("p" show-paren-mode "brackets pairs" :toggle t)
("r" rainbow-delimiters-mode "rainbow brackets" :toggle t)
("w" global-display-fill-column-indicator-mode "fill column indicator" :toggle t)
("t" global-hl-todo-mode "todo" :toggle t))
"Program"
(("f" flymake-mode "flymake" :toggle t)
("c" flyspell-mode "spell check" :toggle t)
("u" subword-mode "subword" :toggle t)
("v" global-diff-hl-mode "gutter" :toggle t)
("V" diff-hl-flydiff-mode "live gutter" :toggle t)
("M" diff-hl-margin-mode "margin gutter" :toggle t)
("D" diff-hl-dired-mode "dired gutter" :toggle t))
))))
(provide 'init-utils)
;;; init-utils.el ends here

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

@ -0,0 +1,143 @@
;;; 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
: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))
;; Marca a la izq. si una linea ha sido agregada, editada o eliminada desde el último commit.
(use-package diff-hl
:custom (diff-hl-draw-borders nil)
:autoload diff-hl-flydiff-mode
:custom-face
(diff-hl-change ((t (:inherit custom-changed :foreground unspecified :background unspecified))))
(diff-hl-insert ((t (:inherit diff-added :background unspecified))))
(diff-hl-delete ((t (:inherit diff-removed :background unspecified))))
:bind (:map diff-hl-command-map
("SPC" . diff-hl-mark-hunk))
:hook ((elpaca-after-init . global-diff-hl-mode)
(elpaca-after-init . global-diff-hl-show-hunk-mouse-mode)
(dired-mode . diff-hl-dired-mode))
:config
;; Highlight on-the-fly
(diff-hl-flydiff-mode 1)
;; Set fringe style
(setq-default fringes-outside-margins t)
(with-no-warnings
(unless (display-graphic-p)
;; Fall back to the display margin since the fringe is unavailable in tty
(diff-hl-margin-mode 1)
;; Avoid restoring `diff-hl-margin-mode'
(with-eval-after-load 'desktop
(add-to-list 'desktop-minor-mode-table
'(diff-hl-margin-mode nil))))
;; Integration with magit
(with-eval-after-load 'magit
(add-hook 'magit-pre-refresh-hook #'diff-hl-magit-pre-refresh)
(add-hook 'magit-post-refresh-hook #'diff-hl-magit-post-refresh))))
;; Visitar rápidamente viejas versiones de un archivo rápidamente
(use-package git-timemachine
:custom-face
(git-timemachine-minibuffer-author-face ((t (:inherit success :foreground unspecified))))
(git-timemachine-minibuffer-detail-face ((t (:inherit warning :foreground unspecified))))
:bind (:map vc-prefix-map
("t" . git-timemachine))
:hook ((git-timemachine-mode . (lambda ()
"Improve `git-timemachine' buffers."
;; Display different colors in mode-line
(if (facep 'mode-line-active)
(face-remap-add-relative 'mode-line-active 'custom-state)
(face-remap-add-relative 'mode-line 'custom-state))
;; Highlight symbols in elisp
(and (derived-mode-p 'emacs-lisp-mode)
(fboundp 'highlight-defined-mode)
(highlight-defined-mode t))
;; Display line numbers
(and (derived-mode-p 'prog-mode 'yaml-mode)
(fboundp 'display-line-numbers-mode)
(display-line-numbers-mode t))))
(before-revert . (lambda ()
(when (bound-and-true-p git-timemachine-mode)
(user-error "Cannot revert the timemachine buffer"))))))
;; Generador automatizado de archivos de licencia
(use-package license-templates)
;; Magia para git
(use-package magit)
;; Todolist en magit de todos los archivos del projecto.
(use-package magit-todos
:after magit-status
:commands magit-todos-mode
:init
(setq magit-todos-nice (if (executable-find "nice") t nil))
(magit-todos-mode 1))
;; Modo para resolución de confictos
(use-package smerge-mode
:ensure nil
: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)
;; Mostrar el último commit que modificó la linea actual
(use-package vc-msg
:bind (("C-c C-v" . vc-msg-show))
)
(provide 'init-vc)
;;; init-vc.el ends here

View File

@ -9,9 +9,7 @@
;;; Code:
(use-package go-mode
:straight t
:defer t)
(use-package go-mode)
(provide 'lang-go)
;;; lang-go.el ends here

View File

@ -10,8 +10,6 @@
;;; Code:
(use-package web-mode
:straight t
:defer t
:config
(setq web-mode-markup-indent-offset 2
web-mode-css-indent-offset 2
@ -21,13 +19,13 @@
)
(use-package css-mode
:ensure nil
:config
(setq css-indent-offset 2))
(use-package auto-rename-tag
:straight t (auto-rename-tag :type git :host github :repo "jcs-elpa/auto-rename-tag")
:defer t
:hook ((html-mode . auto-rename-tag-mode)
(web-mode . auto-rename-tag-mode))
)
:ensure (:host github :repo "jcs-elpa/auto-rename-tag"))
(provide 'lang-html)
;;; lang-html.el ends here

View File

@ -10,20 +10,17 @@
;;; Code:
(use-package js
:defer t
:straight t
:ensure nil
:mode
("\\.js$" . js-mode)
:hook
(js-mode . eglot-ensure)
:init
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-ts-mode))
(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-ts-mode))
:config
(setq js-indent-level 2))
;; json-mode
(use-package json-mode
:defer t
:straight t
:ensure t
:mode
("\\.json$" . json-mode)
:config

View File

@ -9,17 +9,16 @@
;;; Code:
(use-package php-mode
:defer t
:straight t
:hook ((php-mode . (lambda ()
(local-set-key (kbd "C-c d b") 'php-doc-block) ;; atajo para docblock
))
)
)
(use-package php-ts-mode
:mode "\\.php\\'"
:ensure nil)
(use-package php-mode)
(use-package php-doc-block
:straight (php-doc-block :type git :host github :repo "moskalyovd/emacs-php-doc-block")
:after php-ts-mode
:bind ("C-c d b" . php-doc-block)
:ensure (:host github :repo "moskalyovd/emacs-php-doc-block")
)
(provide 'lang-php)

View File

@ -10,22 +10,10 @@
;;; Code:
(use-package rust-mode
:defer t
:straight t
:ensure t
:init
(setq rust-mode-treesitter-derive t)
:config
(setq rust-format-on-save t))
;; Rustic es necesario solamente si se usa lsp-mode + flycheck.
;; (use-package rustic
;; :defer t
;; :straight t
;; :ensure t
;; :config
;; ;;(setq rustic-lsp-server 'rls)
;; (setq rustic-lsp-client 'lsp)
;; ;;(setq rustic-lsp-client nil)
;; (push 'rustic-clippy flycheck-checkers))
(provide 'lang-rust)
;;; lang-rust.el ends here

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

25833
duck.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 826 KiB

View File

@ -20,29 +20,57 @@
;;
;;; Code:
;; Disable GC during init
(put 'gc-cons-percentage 'original-value-before-init gc-cons-percentage)
(put 'gc-cons-percentage 'value-during-init 0.6)
(defun restore-gc-cons-percentage-after-init ()
(let ((expected-value (get 'gc-cons-percentage 'value-during-init))
(value-to-restore (get 'gc-cons-percentage 'original-value-before-init)))
(when (and value-to-restore (equal gc-cons-percentage expected-value))
(message "Setting `gc-cons-percentage' back to starting value %s" value-to-restore)
(setq gc-cons-percentage value-to-restore))))
(add-hook 'after-init-hook #'restore-gc-cons-percentage-after-init)
(setq gc-cons-percentage (get 'gc-cons-percentage 'value-during-init))
;; Defer garbage collection further back in the startup process
(setq gc-cons-threshold most-positive-fixnum)
;; Permitir solo la búsqueda de archivos a cargar en la config en case sensitive.
;; Prevent unwanted runtime compilation for gccemacs (native-comp) users;
;; packages are compiled ahead-of-time when they are installed and site files
;; are compiled when gccemacs is installed.
(setq native-comp-deferred-compilation nil ;; obsolete since 29.1
native-comp-jit-compilation nil)
;; 'use-package' is builtin since 29.
;; It must be set before loading 'use-package'.
(setq use-package-enable-imenu-support t)
;; In noninteractive sessions, prioritize non-byte-compiled source files to
;; prevent the use of stale byte-code. Otherwise, it saves us a little IO time
;; to skip the mtime checks on every *.elc file.
(setq load-prefer-newer noninteractive)
;; Explicitly set the prefered coding systems to avoid annoying prompt
;; from emacs (especially on Microsoft Windows)
(prefer-coding-system 'utf-8)
;; Permitir solo la búsqueda de archivos a cargar en la carpeta config case sensitive.
(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á)
(push '(menu-bar-lines . 0) default-frame-alist) ; Quitar menús.
(push '(tool-bar-lines . 0) default-frame-alist) ; Quitar toolbar.
(push '(vertical-scroll-bars) default-frame-alist)
(when (featurep 'ns)
(push '(ns-transparent-titlebar . t) default-frame-alist))
;; Prevent flash of unstyled mode line
(setq mode-line-format nil)
;; Iniciar emacs maximizado
(add-to-list 'initial-frame-alist '(fullscreen . maximized)) ; frame inicial
;; (add-to-list 'default-frame-alist '(fullscreen . maximized)) ; Cada frame
;; (add-hook 'window-setup-hook 'toggle-frame-maximized t) ; Hacerlo mediante window-setup-hook (se maximiza al terminar de cargar la ventana)
;; (push '(ns-transparent-titlebar . t) default-frame-alist)
;; Resizing the Emacs frame can be a terribly expensive part of changing the
;; font. By inhibiting this, we easily halve startup times with fonts that are
;; larger than the system default.
(setq frame-inhibit-implied-resize t
frame-resize-pixelwise t)
;; Recommended by
;; https://github.com/raxod502/straight.el#getting-started to prevent
;; pacakge.el stepping on straight's toes.
;; pacakge.el stepping on elpaca toes.
(setq package-enable-at-startup nil)
;;; early-init.el ends here

47
init.el
View File

@ -9,22 +9,49 @@
;;; Code:
;; Cargar configuraciones
;; Optimize Garbage Collection for Startup
(setq gc-cons-threshold most-positive-fixnum)
(add-to-list 'load-path (concat user-emacs-directory "configs"))
;; Optimize `auto-mode-alist`
(setq auto-mode-case-fold nil)
(unless (or (daemonp) noninteractive init-file-debug)
;; Temporarily suppress file-handler processing to speed up startup
(let ((default-handlers file-name-handler-alist))
(setq file-name-handler-alist nil)
;; Recover handlers after startup
(add-hook 'emacs-startup-hook
(lambda ()
(setq file-name-handler-alist
(delete-dups (append file-name-handler-alist default-handlers))))
101)))
;; Función para añadir 'config' a la ruta de carga código elisp de emacs
(defun update-load-path (&rest _)
"Update the `load-path` to prioritize personal configurations."
(push (expand-file-name "configs" user-emacs-directory) load-path))
;; Nos aseguramos de que ejecute 'update-load-path' antes de 'package-initialize'
(advice-add #'package-initialize :after #'update-load-path)
;; Ahora lo corremos implícitamente
(update-load-path)
;; Paquetes base
(require 'init-package)
(require 'init-base)
(require 'init-packages)
(require 'init-functions)
(require 'init-utils)
(require 'init-ui)
(require 'init-editor)
(require 'init-highlight)
(require 'init-theme)
(require 'init-ai)
(require 'init-vc)
(require 'init-org)
;; (require 'init-lsp)
(require 'init-eglot)
(require 'init-company)
(require 'init-treemacs)
(require 'init-ctags)
(require 'init-lsp)
(require 'init-completion)
(require 'init-minibuffer)
(require 'init-evil)
;; (require 'init-evil)
(require 'init-keys)
;; 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 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:
`all-the-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 treemacs.
- 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)

62
readme.org Normal file
View File

@ -0,0 +1,62 @@
#+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:
- 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 [[file:configs/init-editor.el][init-editor.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]]