Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
kj | 1e1ee4e82f |
|
@ -1,33 +1,8 @@
|
|||
elpa
|
||||
transient
|
||||
eln-cache
|
||||
private/
|
||||
private/.*
|
||||
private/cache
|
||||
bookmarks
|
||||
.lsp-session*
|
||||
projectile-bookmarks.eld
|
||||
.org-id-locations
|
||||
org-roam.db
|
||||
lsp-cache/
|
||||
.cache/
|
||||
url/
|
||||
straight/
|
||||
amx-items
|
||||
projects
|
||||
speed-type/
|
||||
var/
|
||||
.dap-breakpoints
|
||||
eclipse.jdt.ls/
|
||||
workspace/
|
||||
/.extension/
|
||||
/diary
|
||||
/history
|
||||
/projectile.cache
|
||||
/request/
|
||||
/smex-items
|
||||
/tree-sitter/
|
||||
/elpaca/
|
||||
/tramp
|
||||
/nov-places
|
||||
/devdocs/
|
||||
/.mc-lists.el
|
||||
/eshell/
|
||||
.lsp-session-v1
|
||||
projectile-bookmarks.eld
|
31
abbrev_defs
31
abbrev_defs
|
@ -1,31 +0,0 @@
|
|||
;;-*-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)
|
||||
))
|
||||
|
|
@ -0,0 +1,650 @@
|
|||
;;; base-extensions.el --- Extenciones/paquetes instalados y su configuración
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;;; Code:
|
||||
|
||||
(setq evil-want-keybinding nil)
|
||||
;; use-package - No necesita presentación
|
||||
(use-package use-package
|
||||
:config
|
||||
(setq use-package-always-ensure t) ; auto-instalar extenciones que no lo estén
|
||||
)
|
||||
|
||||
;; Auto-actualizar los paquetes
|
||||
(use-package auto-package-update
|
||||
:custom
|
||||
(auto-package-update-interval 7)
|
||||
(auto-package-update-prompt-before-update t)
|
||||
(auto-package-update-hide-results t)
|
||||
:config
|
||||
(auto-package-update-maybe)
|
||||
(auto-package-update-at-time "06:00")
|
||||
:init
|
||||
(setq
|
||||
auto-package-update-last-update-day-filename
|
||||
(expand-file-name ".last-package-update-day" private-dir)))
|
||||
|
||||
;; Iconos principalmente para ser usados por neotree
|
||||
(use-package all-the-icons :defer t)
|
||||
|
||||
;; Terminal
|
||||
(use-package vterm :ensure t :defer t)
|
||||
|
||||
;; Multiple vterm
|
||||
(use-package multi-vterm :ensure t :defer t)
|
||||
|
||||
;; Highlight en los números.
|
||||
(use-package highlight-numbers
|
||||
:defer t
|
||||
:ensure t
|
||||
:hook
|
||||
(prog-mode . highlight-numbers-mode))
|
||||
|
||||
;; Mover líneas o regiones
|
||||
(use-package drag-stuff
|
||||
:config
|
||||
(drag-stuff-global-mode 1)
|
||||
(drag-stuff-define-keys))
|
||||
|
||||
;; Recentf - Guarda registro de los archivos abiertos recientemente
|
||||
(use-package recentf
|
||||
:config
|
||||
(setq recentf-save-file
|
||||
(recentf-expand-file-name (concat temp-dir "/recentf")))
|
||||
(recentf-mode 1))
|
||||
|
||||
|
||||
;; Guardar la posición del cursor en un archivo para volver allí cuando se lo vuelva a abrir.
|
||||
(use-package saveplace
|
||||
:config
|
||||
(save-place-mode 1)
|
||||
(setq save-place-file (locate-user-emacs-file (concat temp-dir "/places"))))
|
||||
|
||||
;; Emmet - Una ayuda para escribir HTML rápidamente (escribre doc, luego preciona C-j y lo entenderás)
|
||||
(use-package emmet-mode
|
||||
:config
|
||||
(add-hook 'sgml-mode-hook 'emmet-mode) ;; Auto-start on any markup modes
|
||||
(add-hook 'html-mode-hook 'emmet-mode)
|
||||
(add-hook 'css-mode-hook 'emmet-mode)
|
||||
)
|
||||
|
||||
;; Modo markdown
|
||||
(use-package markdown-mode :defer t)
|
||||
|
||||
;; Git Gutter - Marca a la izq. si una linea ha sido agregada, editada o eliminada desde el último commit.
|
||||
(use-package git-gutter
|
||||
:config
|
||||
(global-git-gutter-mode +1) ; Habilitar git gutter de manera global
|
||||
)
|
||||
|
||||
;; Mejorando el scroll
|
||||
(use-package smooth-scrolling
|
||||
:config
|
||||
(smooth-scrolling-mode 1) ; Cambia el salto de líneas cuando el cursor llega al final.
|
||||
(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)
|
||||
)
|
||||
|
||||
;; Esa línea bonita de abajo del editor que dice cosas xD
|
||||
(use-package telephone-line
|
||||
:defer t
|
||||
:custom
|
||||
(telephone-line-primary-left-separator 'telephone-line-cubed-left)
|
||||
(telephone-line-secondary-left-separator 'telephone-line-cubed-hollow-left)
|
||||
(telephone-line-primary-right-separator 'telephone-line-cubed-right)
|
||||
(telephone-line-secondary-right-separator 'telephone-line-cubed-hollow-right)
|
||||
(telephone-line-evil-use-short-tag t)
|
||||
|
||||
(setq telephone-line-lhs
|
||||
'((evil . (telephone-line-evil-tag-segment))
|
||||
(accent . (telephone-line-vc-segment
|
||||
telephone-line-erc-modified-channels-segment
|
||||
telephone-line-process-segment))
|
||||
(nil . (;telephone-line-minor-mode-segment
|
||||
telephone-line-buffer-segment))))
|
||||
(setq telephone-line-rhs
|
||||
'((nil . (telephone-line-misc-info-segment))
|
||||
(accent . (telephone-line-major-mode-segment))
|
||||
(evil . (telephone-line-airline-position-segment))))
|
||||
(telephone-line-mode t)
|
||||
)
|
||||
|
||||
;; Hacer uso de Emacs con las ventajas de vim.
|
||||
(use-package evil
|
||||
:defer t
|
||||
:init
|
||||
(evil-mode 1)
|
||||
(setq evil-want-keybinding nil)
|
||||
:config
|
||||
(setq evil-want-integration t)
|
||||
(setq evil-want-keybinding nil)
|
||||
(setq evil-want-C-u-scroll t)
|
||||
(setq evil-want-C-i-jump nil)
|
||||
(setq evil-want-fine-undo t)
|
||||
(setq evil-respect-visual-line-mode t)
|
||||
(setq evil-toggle-key "C-'") ; Cambiar toggle-key cambiar entre evil states y emacs.
|
||||
;; (setq evil-default-state 'emacs) ; Modo por defecto en emacs mode
|
||||
(define-key evil-normal-state-map (kbd "g b") 'evil-jump-backward)
|
||||
|
||||
;; Seleccionar todo con C-a en insert mode
|
||||
(evil-global-set-key 'insert (kbd "C-a") 'mark-whole-buffer)
|
||||
|
||||
;; **
|
||||
;; Atajos personalizados con leader key
|
||||
;; **
|
||||
|
||||
;; Definiendo la leader key
|
||||
(evil-set-leader 'normal (kbd "SPC"))
|
||||
(evil-set-leader 'visual (kbd "SPC"))
|
||||
|
||||
;; Atajos para counsel-projectile y switch buffer con leader key
|
||||
(evil-define-key 'normal 'global (kbd "<leader>b") 'ivy-switch-buffer)
|
||||
(evil-define-key 'visual 'global (kbd "<leader>b") 'ivy-switch-buffer)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>v") 'counsel-projectile)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>cp") 'projectile-switch-project)
|
||||
(evil-define-key 'visual 'global (kbd "<leader>v") 'counsel-projectile)
|
||||
(evil-define-key 'visual 'global (kbd "<leader>cp") 'projectile-switch-project)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>ff") 'counsel-find-file)
|
||||
(evil-define-key 'visual 'global (kbd "<leader>ff") 'counsel-find-file)
|
||||
|
||||
;; Atajos windmove con leader key
|
||||
(evil-define-key 'normal 'global (kbd "<leader>wh") 'windmove-left)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>wj") 'windmove-down)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>wk") 'windmove-up)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>wl") 'windmove-right)
|
||||
|
||||
;; Atajos con leader key para frames
|
||||
(evil-define-key 'normal 'global (kbd "<leader>0") 'delete-window)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>1") 'delete-other-windows)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>2") 'split-window-below)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>3") 'split-window-right)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>kb") 'kill-buffer)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>wb") 'winner-undo)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>wr") 'winner-redo)
|
||||
|
||||
;; Atajos para cambiar entre major modes
|
||||
(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)
|
||||
|
||||
;; Atajo para abrir vterm
|
||||
(evil-define-key 'normal 'global (kbd "<leader>tt") 'multi-vterm-dedicated-toggle)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>tf") 'multi-vterm)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>tp") 'multi-vterm-project)
|
||||
|
||||
;; Cambiar el cursor según el estado
|
||||
(setq evil-emacs-state-cursor 'bar)
|
||||
(setq evil-motion-state-cursor 'bar)
|
||||
(setq evil-normal-state-cursor 'box)
|
||||
(setq evil-visual-state-cursor 'box)
|
||||
(setq evil-insert-state-cursor 'bar)
|
||||
(setq evil-replace-state-cursor 'hollow)
|
||||
(setq evil-operator-state-cursor 'hollow)
|
||||
|
||||
;; Establecer modos por defecto en algunos modos
|
||||
(evil-set-initial-state 'shell-mode 'insert)
|
||||
(evil-set-initial-state 'vterm-mode 'emacs)
|
||||
(evil-set-initial-state 'term-mode 'emacs)
|
||||
(evil-set-initial-state 'help-mode 'emacs)
|
||||
(evil-set-initial-state 'helm-grep-mode 'emacs)
|
||||
(evil-set-initial-state 'grep-mode 'emacs)
|
||||
(evil-set-initial-state 'dired-mode 'emacs)
|
||||
(evil-set-initial-state 'Buffer-menu-mode 'emacs)
|
||||
(evil-set-initial-state 'wdired-mode 'normal)
|
||||
;; Por defecto usar emcas mode.
|
||||
;;(setq evil-default-state 'emacs)
|
||||
)
|
||||
|
||||
;; Edición múltiple con evil (Atajos por defecto: C-d y C-D)
|
||||
(use-package evil-multiedit
|
||||
:defer t
|
||||
:config
|
||||
(evil-multiedit-default-keybinds)
|
||||
)
|
||||
|
||||
;; evil keybinding
|
||||
(use-package evil-collection
|
||||
:custom (evil-collection-setup-minibuffer t)
|
||||
:init (evil-collection-init))
|
||||
|
||||
;; Barra lateral de archivos
|
||||
(use-package treemacs
|
||||
:defer t
|
||||
:ensure t
|
||||
:hook (treemacs-mode . (lambda() (display-line-numbers-mode -1)))
|
||||
:bind ([mouse-1] . treemacs-single-click-expand-action)
|
||||
:config
|
||||
(progn
|
||||
(setq treemacs-collapse-dirs (if treemacs-python-executable 3 0)
|
||||
treemacs-deferred-git-apply-delay 0.5
|
||||
treemacs-directory-name-transformer #'identity
|
||||
treemacs-display-in-side-window t
|
||||
treemacs-eldoc-display 'simple
|
||||
treemacs-file-event-delay 5000
|
||||
treemacs-file-extension-regex treemacs-last-period-regex-value
|
||||
treemacs-file-follow-delay 0.2
|
||||
treemacs-file-name-transformer #'identity
|
||||
treemacs-follow-after-init t
|
||||
treemacs-expand-after-init t
|
||||
treemacs-find-workspace-method 'find-for-file-or-pick-first
|
||||
treemacs-git-command-pipe ""
|
||||
treemacs-goto-tag-strategy 'refetch-index
|
||||
treemacs-indentation 2
|
||||
treemacs-indentation-string " "
|
||||
treemacs-is-never-other-window nil
|
||||
treemacs-max-git-entries 5000
|
||||
treemacs-missing-project-action 'ask
|
||||
treemacs-move-forward-on-expand nil
|
||||
treemacs-no-png-images nil
|
||||
treemacs-no-delete-other-windows t
|
||||
treemacs-project-follow-cleanup nil
|
||||
treemacs-persist-file (expand-file-name "cache/treemacs-persist" private-dir)
|
||||
treemacs-position 'left
|
||||
treemacs-read-string-input 'from-child-frame
|
||||
treemacs-recenter-distance 0.1
|
||||
treemacs-recenter-after-file-follow nil
|
||||
treemacs-recenter-after-tag-follow nil
|
||||
treemacs-recenter-after-project-jump 'always
|
||||
treemacs-recenter-after-project-expand 'on-distance
|
||||
treemacs-litter-directories '("/node_modules" "/.venv" "/.cask")
|
||||
treemacs-show-cursor nil
|
||||
treemacs-show-hidden-files t
|
||||
treemacs-silent-filewatch nil
|
||||
treemacs-silent-refresh nil
|
||||
treemacs-sorting 'alphabetic-asc
|
||||
treemacs-select-when-already-in-treemacs 'move-back
|
||||
treemacs-space-between-root-nodes t
|
||||
treemacs-tag-follow-cleanup t
|
||||
treemacs-tag-follow-delay 1.5
|
||||
treemacs-text-scale nil
|
||||
treemacs-user-mode-line-format nil
|
||||
treemacs-user-header-line-format nil
|
||||
treemacs-wide-toggle-width 70
|
||||
treemacs-width 35
|
||||
treemacs-width-increment 1
|
||||
treemacs-width-is-initially-locked t
|
||||
treemacs-workspace-switch-cleanup nil)
|
||||
|
||||
;; The default width and height of the icons is 22 pixels. If you are
|
||||
;; using a Hi-DPI display, uncomment this to double the icon size.
|
||||
;;(treemacs-resize-icons 44)
|
||||
|
||||
(treemacs-follow-mode t)
|
||||
(treemacs-filewatch-mode t)
|
||||
(treemacs-fringe-indicator-mode 'always)
|
||||
|
||||
(pcase (cons (not (null (executable-find "git")))
|
||||
(not (null treemacs-python-executable)))
|
||||
(`(t . t)
|
||||
(treemacs-git-mode 'deferred))
|
||||
(`(t . _)
|
||||
(treemacs-git-mode 'simple)))
|
||||
|
||||
(treemacs-hide-gitignored-files-mode nil))
|
||||
:bind
|
||||
(:map global-map
|
||||
("M-0" . treemacs-select-window)
|
||||
("C-x t 1" . treemacs-delete-other-windows)
|
||||
("<f9>" . treemacs)
|
||||
("<f8>" . treemacs-display-current-project-exclusively)
|
||||
("<f7>" . treemacs-add-and-display-current-project)
|
||||
("C-x t d" . treemacs-select-directory)
|
||||
("C-x t B" . treemacs-bookmark)
|
||||
("C-x t C-t" . treemacs-find-file)
|
||||
("C-x t M-t" . treemacs-find-tag)))
|
||||
|
||||
(use-package treemacs-evil
|
||||
:defer t
|
||||
:after (treemacs evil)
|
||||
:ensure t
|
||||
:config
|
||||
;; Atajos de tecla con leader key de evil-mode.
|
||||
(evil-set-leader 'treemacs (kbd "SPC"))
|
||||
(evil-define-key 'treemacs 'global (kbd "<leader>b") 'ivy-switch-buffer)
|
||||
(evil-define-key 'treemacs 'global (kbd "<leader>v") 'counsel-projectile)
|
||||
(evil-define-key 'treemacs 'global (kbd "<leader>p") 'counsel-projectile)
|
||||
(evil-define-key 'treemacs 'global (kbd "<leader>cp") 'treemacs-projectile)
|
||||
(evil-define-key 'treemacs 'global (kbd "<leader>d") 'treemacs-remove-project-from-workspace))
|
||||
|
||||
(use-package treemacs-projectile
|
||||
:defer t
|
||||
:after (treemacs projectile)
|
||||
:ensure t)
|
||||
|
||||
(use-package treemacs-icons-dired
|
||||
:defer t
|
||||
:hook (dired-mode . treemacs-icons-dired-enable-once)
|
||||
:ensure t)
|
||||
|
||||
(use-package treemacs-persp ;;treemacs-perspective if you use perspective.el vs. persp-mode
|
||||
:defer t
|
||||
:after (treemacs persp-mode) ;;or perspective vs. persp-mode
|
||||
:ensure t
|
||||
:config (treemacs-set-scope-type 'Perspectives))
|
||||
|
||||
(use-package treemacs-tab-bar ;;treemacs-tab-bar if you use tab-bar-mode
|
||||
:defer t
|
||||
:after (treemacs)
|
||||
:ensure t
|
||||
:config (treemacs-set-scope-type 'Tabs))
|
||||
|
||||
;; Code Folding
|
||||
(use-package origami
|
||||
:defer t
|
||||
:config
|
||||
(global-origami-mode))
|
||||
|
||||
;; Automcompletado
|
||||
(use-package company
|
||||
:defer t
|
||||
:bind (:map company-active-map
|
||||
("<tab>" . company-indent-or-complete-common)) ; autocompletar con tab como se haría en bash-competition en la terminal de linux
|
||||
(:map company-active-map
|
||||
("<escape>" . company-abort)) ; cerrar las sugerencias de autocompletado precionando escape.
|
||||
:config
|
||||
(global-company-mode)
|
||||
(setq company-dabbrev-downcase nil) ; autocompletado case-sensitive.
|
||||
(setq company-idle-delay 0) ; mostrar autocompletado lo más rápido posible
|
||||
(setq company-minimum-prefix-length 1) ; mostrar autocompletado desde que se coloca la primera letra.
|
||||
(setq company-backends '((company-files :with company-yasnippet)
|
||||
(company-capf :with company-yasnippet)
|
||||
(company-dabbrev-code company-gtags company-etags company-keywords :with company-yasnippet)
|
||||
(company-dabbrev :with company-yasnippet)))
|
||||
)
|
||||
|
||||
;; Poner la info acerca del autocompletado del autocompletado mas rápido
|
||||
(use-package company-quickhelp
|
||||
:defer t
|
||||
:ensure t
|
||||
:custom
|
||||
(company-quickhelp-delay 2)
|
||||
(company-quickhelp-mode))
|
||||
|
||||
;; Hacer que el autocompletado se vea más bonito con íconos
|
||||
(use-package company-box
|
||||
:defer t
|
||||
:hook (company-mode . company-box-mode))
|
||||
|
||||
;; Usar autocompletado con ctags y company
|
||||
(use-package company-ctags
|
||||
:config
|
||||
(add-to-list 'company-backends '(company-ctags))
|
||||
)
|
||||
|
||||
;; Snippets
|
||||
(use-package yasnippet
|
||||
:defer t
|
||||
:ensure t
|
||||
:custom
|
||||
(yas-prompt-functions '(yas-completing-prompt))
|
||||
:config
|
||||
(yas-reload-all)
|
||||
:hook
|
||||
((prog-mode feature-mode) . yas-minor-mode))
|
||||
|
||||
;; Restaurar el estado de los frames
|
||||
(use-package winner
|
||||
:init
|
||||
(winner-mode 1))
|
||||
|
||||
(use-package lsp-mode
|
||||
:defer t
|
||||
:hook (js-mode . lsp-deferred)
|
||||
:custom
|
||||
(lsp-headerline-breadcrumb-enable nil))
|
||||
|
||||
(use-package lsp-ui)
|
||||
|
||||
;; Revisar sintaxis en vivo
|
||||
(use-package flycheck
|
||||
;; :diminish flycheck-mode
|
||||
:defer t
|
||||
:hook (after-init . global-flycheck-mode) ; Habilitar flycheck en todos los modos
|
||||
)
|
||||
|
||||
;; Mostrar los errores de flycheck en un pop up
|
||||
(use-package flycheck-popup-tip
|
||||
:defer t
|
||||
:hook (flycheck-mode . flycheck-popup-tip-mode))
|
||||
|
||||
;; Un bonito y sencillo panel de inicio
|
||||
(use-package dashboard
|
||||
:config
|
||||
(setq dashboard-set-file-icons t)
|
||||
(setq dashboard-startup-banner
|
||||
(expand-file-name "duck-small.png" user-emacs-directory))
|
||||
(setq dashboard-items '(
|
||||
;;(recents . 5)
|
||||
;;(projects . 5)
|
||||
))
|
||||
(dashboard-setup-startup-hook)
|
||||
)
|
||||
|
||||
;; Autocompletado para shell scripting.
|
||||
(use-package company-shell
|
||||
:defer t
|
||||
:config
|
||||
(add-to-list 'company-backends '(company-shell company-shell-env company-fish-shell))
|
||||
)
|
||||
|
||||
;; Autocompletado para el minibuffer (counsel e ivy)
|
||||
(use-package counsel
|
||||
:defer t
|
||||
:bind
|
||||
("M-x" . counsel-M-x)
|
||||
("C-x C-m" . counsel-M-x)
|
||||
("C-x C-f" . counsel-find-file)
|
||||
("C-x c k" . counsel-yank-pop))
|
||||
|
||||
(use-package projectile
|
||||
:defer t
|
||||
:diminish projectile-mode
|
||||
:config
|
||||
(projectile-mode)
|
||||
:custom ((projectile-completion-system 'ivy))
|
||||
:bind-keymap
|
||||
("C-c p" . projectile-command-map)
|
||||
:init
|
||||
;; 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 iniciado).
|
||||
(when (file-directory-p "~/Proyectos")
|
||||
(setq projectile-project-search-path '("~/Proyectos")))
|
||||
(when (file-directory-p "~/Docker/Nginx")
|
||||
(setq projectile-project-search-path (append
|
||||
projectile-project-search-path
|
||||
'("~/Docker/Nginx"))))
|
||||
(when (file-directory-p "~/Docker/Nginx2")
|
||||
(setq projectile-project-search-path (append
|
||||
projectile-project-search-path
|
||||
'("~/Docker/Nginx2"))))
|
||||
(when (file-directory-p "~/Docker/NginxTwitch")
|
||||
(setq projectile-project-search-path (append
|
||||
projectile-project-search-path
|
||||
'("~/Docker/NginxTwitch"))))
|
||||
(setq projectile-switch-project-action #'projectile-dired) ; Usar dired cuando se elija un proyecto.
|
||||
|
||||
;; 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")
|
||||
)
|
||||
)
|
||||
|
||||
;; Autocompletado de proyectos en counsel (projectile)
|
||||
(use-package counsel-projectile
|
||||
:defer t
|
||||
:config
|
||||
(global-set-key (kbd "C-x v") 'counsel-projectile)
|
||||
(counsel-projectile-mode))
|
||||
|
||||
;; Mostrar info del panel inferior de otra manera
|
||||
(use-package ivy
|
||||
:defer t
|
||||
:bind
|
||||
("C-x s" . swiper)
|
||||
("C-x C-r" . ivy-resume)
|
||||
("C-x b" . ivy-switch-buffer)
|
||||
:config
|
||||
(ivy-mode 1)
|
||||
(setq ivy-use-virtual-buffers nil)
|
||||
(define-key ivy-minibuffer-map (kbd "TAB") 'ivy-partial)
|
||||
(define-key read-expression-map (kbd "C-r") 'counsel-expression-history)
|
||||
(define-key ivy-minibuffer-map (kbd "<escape>") 'minibuffer-keyboard-quit)
|
||||
)
|
||||
|
||||
;; Iconos en Ivy (allthe icons)
|
||||
(use-package all-the-icons-ivy-rich
|
||||
:ensure t
|
||||
:init (all-the-icons-ivy-rich-mode 1)
|
||||
:config
|
||||
(setq all-the-icons-ivy-rich-color-icon t))
|
||||
|
||||
(use-package ivy-rich
|
||||
:ensure t
|
||||
:init (ivy-rich-mode 1))
|
||||
|
||||
;; Cuando iniicias un atajo de teclas te muestra las posibilidades
|
||||
(use-package which-key
|
||||
:config
|
||||
(which-key-mode))
|
||||
|
||||
;; Autocompletado de parentesis, corchetes, llaves, etc.
|
||||
(use-package smartparens
|
||||
:config
|
||||
(smartparens-global-mode t))
|
||||
|
||||
;; Org-Mode
|
||||
|
||||
(defun efs/org-font-setup ()
|
||||
"ORG font faces setup."
|
||||
|
||||
;; Set faces for heading levels
|
||||
(dolist (face '((org-level-1 . 1.2)
|
||||
(org-level-2 . 1.1)
|
||||
(org-level-3 . 1.05)
|
||||
(org-level-4 . 1.0)
|
||||
(org-level-5 . 1.1)
|
||||
(org-level-6 . 1.1)
|
||||
(org-level-7 . 1.1)
|
||||
(org-level-8 . 1.1)))
|
||||
(set-face-attribute (car face) nil :font "Cantarell" :weight 'regular :height (cdr face)))
|
||||
|
||||
;; Ensure that anything that should be fixed-pitch in Org files appears that way
|
||||
(set-face-attribute 'org-block nil :foreground nil :inherit 'fixed-pitch)
|
||||
(set-face-attribute 'org-table nil :inherit 'fixed-pitch)
|
||||
(set-face-attribute 'org-formula nil :inherit 'fixed-pitch)
|
||||
(set-face-attribute 'org-code nil :inherit '(shadow fixed-pitch))
|
||||
(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))
|
||||
(set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch))
|
||||
(set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch)
|
||||
(set-face-attribute 'line-number nil :inherit 'fixed-pitch)
|
||||
(set-face-attribute 'line-number-current-line nil :inherit 'fixed-pitch))
|
||||
|
||||
(defun efs/org-mode-setup ()
|
||||
"Set some configs on 'org-mode'."
|
||||
(display-line-numbers-mode 0)
|
||||
(org-indent-mode)
|
||||
(variable-pitch-mode 1)
|
||||
(visual-line-mode 1)
|
||||
(setq evil-auto-indent nil)
|
||||
)
|
||||
|
||||
(use-package org
|
||||
:defer t
|
||||
:pin org
|
||||
:hook (org-mode . efs/org-mode-setup)
|
||||
:config
|
||||
(setq org-ellipsis " ▾")
|
||||
(setq org-hide-emphasis-markers t)
|
||||
|
||||
(setq org-agenda-start-with-log-mode t)
|
||||
(setq org-log-done 'time)
|
||||
(setq org-log-into-drawer t)
|
||||
|
||||
|
||||
;; Palabras claves del To Do de org-mode
|
||||
(setq org-todo-keywords
|
||||
;;'((sequence "☐" "✔" "⌛" "❌")))
|
||||
'((sequence "TODO(t)" "DOING(n)" "WAITING(w)" "|" "DONE(d!)" "CANCELED(c!)")))
|
||||
(setq org-todo-keyword-faces
|
||||
'(("TODO" . "#ff6464")
|
||||
("DOING" . "yellow")
|
||||
("DONE" . "green")
|
||||
("WAITING" . "orange")
|
||||
("CANCELED" . "#aaa"))
|
||||
)
|
||||
|
||||
;; Archivos a usarse en org-agenda
|
||||
(setq org-agenda-files
|
||||
'("~/Proyectos/ORGenda/Ideas.org"
|
||||
"~/Proyectos/ORGenda/IdeasTwitch.org"
|
||||
"~/Proyectos/ORGenda/Proyectos.org"
|
||||
"~/Proyectos/ORGenda/Tareas.org")
|
||||
)
|
||||
|
||||
;; Archivos entre los que se moverán las tareas
|
||||
(setq org-refile-targets
|
||||
'(("Archivo.org" :maxlevel . 1)
|
||||
("Proyectos.org" :maxlevel . 1)
|
||||
("IdeasTwitch.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 / Projectos")
|
||||
("tt" "Tareas" entry (file+olp "~/Proyectos/ORGenda/Tareas.org")
|
||||
"* TODO %?\n %U\n %a\n %i" :empty-lines 1)
|
||||
("tp" "Proyectos" entry (file+olp "~/Proyectos/ORGenda/Proyectos.org")
|
||||
"* TODO %?\n %U\n %a\n %i" :empty-lines 1)
|
||||
("i" "Ideas")
|
||||
("ii" "Ideas General" entry
|
||||
(file+olp "~/Proyectos/ORGenda/ideas.org")
|
||||
"* TODO %?\n %a\n %i" :empty-lines 1)
|
||||
("it" "Ideas Twitch" entry
|
||||
(file+olp "~/Proyectos/ORGenda/IdeasTwitch.org")
|
||||
"* TODO %?\n %a\n %i" :empty-lines 1)
|
||||
)
|
||||
)
|
||||
|
||||
(efs/org-font-setup))
|
||||
|
||||
(use-package org-superstar
|
||||
:hook
|
||||
(org-mode . org-superstar-mode)
|
||||
:config
|
||||
(setq org-superstar-special-todo-items t)
|
||||
)
|
||||
|
||||
(defun efs/org-mode-visual-fill ()
|
||||
"Visual mode fill columns."
|
||||
(visual-fill-column-mode 1))
|
||||
|
||||
(use-package visual-fill-column
|
||||
:hook (org-mode . efs/org-mode-visual-fill)
|
||||
:config
|
||||
;; Tamaño de la columna
|
||||
(setq visual-fill-column-width 150)
|
||||
;; Centrar el texto
|
||||
(setq-default visual-fill-column-center-text t)
|
||||
)
|
||||
|
||||
(provide 'base-extensions)
|
||||
;;; base-extensions.el ends here
|
|
@ -0,0 +1,46 @@
|
|||
(provide 'base-functions)
|
||||
|
||||
;; Buscar el texto actualmente seleccionado
|
||||
(defun kj-isearch-with-region ()
|
||||
"Use region as the isearch text."
|
||||
(when mark-active
|
||||
(let ((region (funcall region-extract-function nil)))
|
||||
(deactivate-mark)
|
||||
(isearch-push-state)
|
||||
(isearch-yank-string region))))
|
||||
|
||||
(add-hook 'isearch-mode-hook #'kj-isearch-with-region)
|
||||
|
||||
;; Borrar espacios, tabs y saltos de línea innecesarios al guardar
|
||||
(add-hook 'before-save-hook 'delete-trailing-whitespace)
|
||||
|
||||
|
||||
;; Generar archivo TAGS
|
||||
(defun create-tags (dir-name)
|
||||
"Create tags file."
|
||||
(interactive "DDirectory: ")
|
||||
(shell-command
|
||||
(format "cd '%s' && ctags -f TAGS -e -R --exclude=*.min.js"
|
||||
(directory-file-name (file-truename dir-name))
|
||||
)
|
||||
)
|
||||
(message "Archivo TAGS generado.")
|
||||
)
|
||||
|
||||
;; Hacer emacs transparente (no funciona perfecto, pero sirve)
|
||||
(defun toggle-transparency ()
|
||||
(interactive)
|
||||
(let ((alpha (frame-parameter nil 'alpha)))
|
||||
(set-frame-parameter
|
||||
nil 'alpha
|
||||
(if (eql (cond ((numberp alpha) alpha)
|
||||
((numberp (cdr alpha)) (cdr alpha))
|
||||
;; Also handle undocumented (<active> <inactive>) form.
|
||||
((numberp (cadr alpha)) (cadr alpha)))
|
||||
100)
|
||||
'(60 . 60) '(100 . 100)))))
|
||||
|
||||
(defun transparency (value)
|
||||
"Sets the transparency of the frame window. 0=transparent/100=opaque"
|
||||
(interactive "nTransparency Value 0 - 100 opaque:")
|
||||
(set-frame-parameter (selected-frame) 'alpha value))
|
|
@ -0,0 +1,29 @@
|
|||
;;; base-keys.el --- Archivo de configuración de atajos
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Aquí se configuran los atajos globales.
|
||||
;; Es posible que haya otros, ya que muchos se configuran
|
||||
;; directamente en los paquetes/extensiones y dependen de los mismos.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(define-key minibuffer-local-map (kbd "<escape>")
|
||||
'keyboard-escape-quit) ; Cancelar el minibuffer con un solo ESC.
|
||||
(global-set-key (kbd "C-x C-z") nil) ; Unbind C-x C-z (don't minimize)
|
||||
(global-set-key (kbd "C-a") 'mark-whole-buffer) ; Seleccionar todo con CTRL+A.
|
||||
|
||||
(global-set-key (kbd "M-c") 'comment-or-uncomment-region) ; Comentar/descomentar en lote
|
||||
|
||||
(global-set-key (kbd "C-<f6>") 'create-tags) ; Generar o Regeneral el archivo TAGS
|
||||
|
||||
(global-set-key (kbd "C-<f11>") 'toggle-frame-maximized) ; Maximizar / restaurar
|
||||
|
||||
(global-set-key (kbd "C-c a") 'org-agenda) ; Abrir la agenda.
|
||||
(global-set-key (kbd "C-c c") 'org-capture) ; Abrir la crear una entrada.
|
||||
|
||||
(provide 'base-keys)
|
||||
;;; base-keys.el ends here
|
|
@ -0,0 +1,135 @@
|
|||
;;; base.el --- Configuración base de emacs
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Configuración base de Emacs, no incluye extensiones,
|
||||
;; pero si el theme y los fonts.
|
||||
|
||||
;;; Code:
|
||||
|
||||
;; The default is 800 kilobytes. Measured in bytes.
|
||||
(setq gc-cons-threshold (* 50 1000 1000))
|
||||
|
||||
;; Native compilation
|
||||
(when (and (fboundp 'native-comp-available-p)
|
||||
(native-comp-available-p))
|
||||
(progn
|
||||
(setq native-comp-async-report-warnings-errors nil)
|
||||
(setq comp-deferred-compilation t)
|
||||
(add-to-list 'native-comp-eln-load-path (expand-file-name "private/cache/eln-cache/" user-emacs-directory))
|
||||
(setq package-native-compile t)
|
||||
))
|
||||
|
||||
;; Initialize package sources
|
||||
(require 'package)
|
||||
|
||||
(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
|
||||
(unless (package-installed-p 'use-package)
|
||||
(package-install 'use-package))
|
||||
|
||||
;; Theme
|
||||
(use-package dracula-theme
|
||||
:config
|
||||
(load-theme 'dracula t)
|
||||
(set-face-attribute 'default nil :font "Fira Code Retina" :height 112) ; Font
|
||||
)
|
||||
|
||||
;; 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))
|
||||
|
||||
;; 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.
|
||||
;;(cua-mode t) ; Usar CTRL+X, CTRL+C, CTRL+V y CTRL+Z para cortar, copiar, pegar y deshacer.
|
||||
|
||||
(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.
|
||||
)
|
||||
|
||||
;; 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)))
|
||||
|
||||
;; Configuración cuando es un server
|
||||
(defun setup-daemon ()
|
||||
(message "Corriendo en modo daemon.")
|
||||
(set-face-attribute 'default nil :font "Fira Code Retina")
|
||||
|
||||
;; Set the fixed pitch face
|
||||
;;(set-face-attribute 'fixed-pitch nil :font "Fira Code Retina")
|
||||
|
||||
;; 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)
|
||||
(let* ((window (frame-selected-window frame))
|
||||
(buffer (and window (window-buffer window))))
|
||||
(when (and buffer (buffer-file-name buffer))
|
||||
(kill-buffer buffer)))))
|
||||
)
|
||||
|
||||
(if (daemonp)
|
||||
(add-hook 'after-make-frame-functions
|
||||
(lambda (frame)
|
||||
(with-selected-frame frame
|
||||
(setup-daemon))))
|
||||
(message "Corriendo en modo normal."))
|
||||
|
||||
|
||||
(load custom-file)
|
||||
|
||||
(provide 'base)
|
||||
;;; base.el ends here
|
|
@ -1,149 +0,0 @@
|
|||
;;; init-base.el --- Configuración base de emacs -*- lexical-binding: t -*-
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Configuración general de Emacs.
|
||||
;; No incluye paquetes/extensiones, solo configuraciones generales.
|
||||
|
||||
;;; Code:
|
||||
|
||||
;; Native compilation
|
||||
(when (and (fboundp 'native-comp-available-p)
|
||||
(native-comp-available-p))
|
||||
(progn
|
||||
(setq native-comp-async-report-warnings-errors nil)
|
||||
(setq comp-deferred-compilation t)
|
||||
(setq package-native-compile t)
|
||||
))
|
||||
|
||||
;; Instalar elpaca.el (reemplpazando package.el)
|
||||
(defvar elpaca-installer-version 0.7)
|
||||
(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
|
||||
: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 (call-process "git" nil buffer t "clone"
|
||||
(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)
|
||||
(load "./elpaca-autoloads")))
|
||||
(add-hook 'after-init-hook #'elpaca-process-queues)
|
||||
(elpaca `(,@elpaca-order))
|
||||
|
||||
;; Instalar use-package si no está instalado
|
||||
(elpaca elpaca-use-package
|
||||
;; Enable :elpaca use-package keyword.
|
||||
(elpaca-use-package-mode)
|
||||
;; Assume :elpaca t unless otherwise specified.
|
||||
(setq elpaca-use-package-by-default t))
|
||||
|
||||
;; Block until current queue processed.
|
||||
(elpaca-wait)
|
||||
|
||||
(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))
|
||||
|
||||
;; Emacs customizations
|
||||
(when (display-graphic-p)
|
||||
(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).
|
||||
;; (global-hl-line-mode) ; Resaltar línea actual por defecto.
|
||||
(setq use-short-answers t) ; Usar respuesta cortas (y/n) en lugar de las largas (yes/no)
|
||||
(setq-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).
|
||||
tags-revert-without-query 1 ; Recargar tags (ctags) sin pedir confirmación.
|
||||
)
|
||||
;; Leve transparencia en emacs por defecto.
|
||||
;; (set-frame-parameter nil 'alpha-background 95)
|
||||
;; Font por defecto
|
||||
(set-face-attribute 'default nil :font "Fira Code Retina" :height 112)
|
||||
|
||||
;; Backups enabled, use nil to disable
|
||||
(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)))
|
||||
|
||||
;; 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)
|
||||
|
||||
;; Abrir primero el dashboard
|
||||
(setq initial-buffer-choice (lambda ()
|
||||
(get-buffer "*dashboard*")
|
||||
(dashboard-refresh-buffer)))
|
||||
|
||||
;; 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 'elpaca-after-init-hook (lambda () (load custom-file 'noerror)))
|
||||
|
||||
(provide 'init-base)
|
||||
;;; init-base.el ends here
|
|
@ -1,86 +0,0 @@
|
|||
;;; init-corfu.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:
|
||||
|
||||
(use-package corfu
|
||||
:defer t
|
||||
:ensure (:files (:defaults "extensions/*")
|
||||
:includes (corfu-info corfu-history))
|
||||
:hook ((elpaca-after-init . global-corfu-mode)
|
||||
(corfu-mode . corfu-popupinfo-mode))
|
||||
:bind (:map corfu-map
|
||||
("<tab>" . corfu-quit)
|
||||
("<escape>" . corfu-quit)
|
||||
("<SPC>" . corfu-insert-separator))
|
||||
:custom
|
||||
(corfu-auto t)
|
||||
:config
|
||||
(setq corfu-popupinfo-delay 0
|
||||
corfu-auto-delay 0.5
|
||||
corfu-auto-prefix 1
|
||||
corfu-cycle t
|
||||
corfu-preview-current nil
|
||||
corfu-quit-no-match t)
|
||||
)
|
||||
|
||||
;; Cambia la forma de mostrar y buscar sugerencias (afecta a corfu, pero también a otros como vertico).
|
||||
(use-package orderless
|
||||
:defer t
|
||||
:init
|
||||
(setq completion-styles '(flex orderless basic)
|
||||
completion-category-overrides '((file (styles partial-completion)))))
|
||||
|
||||
;; Set de funciones de para las sugerencias de corfu.
|
||||
(use-package cape
|
||||
:defer t
|
||||
:ensure (:host github :repo "minad/cape")
|
||||
:after corfu
|
||||
:bind (("C-c f" . cape-file)
|
||||
("C-c l" . cape-line)
|
||||
("C-c _" . cape-tex))
|
||||
:init
|
||||
;; (advice-add 'eglot-completion-at-point :around #'cape-wrap-buster)
|
||||
(advice-add #'eglot-completion-at-point :around #'cape-wrap-nonexclusive)
|
||||
;; (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.
|
||||
)
|
||||
|
||||
;; 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")
|
||||
:config
|
||||
(corfu-terminal-mode +1))
|
||||
)
|
||||
|
||||
;; Iconos en corfu
|
||||
(use-package kind-icon
|
||||
:ensure t
|
||||
:after corfu
|
||||
:custom
|
||||
(kind-icon-default-face 'corfu-default) ; to compute blended backgrounds correctly
|
||||
:config
|
||||
(add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter))
|
||||
|
||||
|
||||
(provide 'init-corfu)
|
||||
;;; init-corfu.el ends here
|
|
@ -1,69 +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
|
||||
: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
|
||||
(setq citre-auto-enable-citre-mode-modes '(prog-mode)
|
||||
citre-default-create-tags-file-location 'global-cache
|
||||
citre-prompt-language-for-ctags-command t)
|
||||
|
||||
:config
|
||||
(with-no-warnings
|
||||
;; 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
|
|
@ -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
|
||||
;; :ensure nil
|
||||
:hook ((css-mode . eglot-ensure)
|
||||
(html-mode . eglot-ensure)
|
||||
(php-mode . eglot-ensure)
|
||||
(rust-mode . eglot-ensure)
|
||||
(sh-mode . eglot-ensure))
|
||||
:config
|
||||
(setq eglot-sync-connect 0)
|
||||
)
|
||||
|
||||
;; Mejorar la velocidad de eglot (un binario en rust )
|
||||
(use-package eglot-booster
|
||||
:defer t
|
||||
: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."))
|
||||
)
|
||||
|
||||
;; Emmet (mientras veo como hacer funcionar emmet-ls)
|
||||
(use-package emmet-mode
|
||||
:defer t
|
||||
:hook
|
||||
((html-mode . emmet-mode)
|
||||
(web-mode . emmet-mode))
|
||||
)
|
||||
|
||||
;; Revisar por errores en el código
|
||||
(use-package flymake
|
||||
:defer t
|
||||
:ensure nil
|
||||
:hook (prog-mode . (lambda ()
|
||||
(unless (derived-mode-p 'makefile-mode)
|
||||
(flymake-mode))))
|
||||
:config
|
||||
(remove-hook 'flymake-diagnostic-functions 'flymake-proc-legacy-flymake)
|
||||
)
|
||||
|
||||
;; Mostar los errores de flymake en un popup-tip
|
||||
(use-package flymake-diagnostic-at-point
|
||||
:defer t
|
||||
:ensure t
|
||||
:after flymake
|
||||
:hook (flymake-mode . flymake-diagnostic-at-point-mode))
|
||||
|
||||
(provide 'init-eglot)
|
||||
;;; init-eglot.el ends here
|
|
@ -1,122 +0,0 @@
|
|||
;;; init-evil.el --- VIM dentro de emacs -*- lexical-binding: t -*-
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; En este archivo está toda la configuración relacionada
|
||||
;; con el paquete Evil.
|
||||
;;
|
||||
;; Evil es un paquete para Emacs, que básicamente nos
|
||||
;; permite tener VIM dentro de Emacs.
|
||||
|
||||
;;; Code:
|
||||
(use-package evil
|
||||
:defer t
|
||||
:hook (elpaca-after-init . evil-mode)
|
||||
:config
|
||||
;; Configuraciones básicas
|
||||
;; (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))
|
||||
|
||||
;; (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)
|
||||
|
||||
;; 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)
|
||||
|
||||
;; 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") 'consult-ripgrep)
|
||||
(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") 'consult-yank-pop)
|
||||
|
||||
;; 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>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)
|
||||
|
||||
;; Identado 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)
|
||||
(evil-define-key 'motion 'global (kbd "<leader>1") 'delete-other-windows)
|
||||
(evil-define-key 'motion 'global (kbd "<leader>2") 'split-window-below)
|
||||
(evil-define-key 'motion 'global (kbd "<leader>3") 'split-window-right)
|
||||
(evil-define-key 'motion 'global (kbd "<leader>k") 'kill-buffer)
|
||||
(evil-define-key 'motion 'global (kbd "<leader>wu") 'winner-undo)
|
||||
(evil-define-key 'motion 'global (kbd "<leader>wr") 'winner-redo)
|
||||
|
||||
;; 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>mr") 'rust-mode)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>mw") 'web-mode)
|
||||
|
||||
;; Otros atajos
|
||||
(evil-define-key 'motion 'global (kbd "<leader>xb") 'consult-buffer) ;; Cambiar de buffer
|
||||
(evil-define-key 'motion 'global (kbd "<leader>xp") 'consult-project-extra-find) ;; Archivos del proyecto (o abrir proyecto si no hay alguno)
|
||||
(evil-define-key 'motion 'global (kbd "<leader>cp") 'project-switch-project) ;; Cambiar proyecto
|
||||
(evil-define-key 'motion 'global (kbd "<leader>xf") 'find-file) ;; Abrir archivo
|
||||
(evil-define-key 'motion 'global (kbd "<leader>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
|
||||
|
||||
;; Iniciar en normal state si es un lenguaje de programación u org-mode
|
||||
;; (evil-set-initial-state 'prog-mode 'normal)
|
||||
;; (evil-set-initial-state 'org-mode 'normal)
|
||||
(evil-set-initial-state 'dashboard-mode 'normal)
|
||||
(evil-set-initial-state 'dired 'normal)
|
||||
(evil-set-initial-state 'vterm-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
|
||||
:ensure t
|
||||
:defer t
|
||||
:after org
|
||||
:hook (org-mode . evil-org-mode))
|
||||
|
||||
(provide 'init-evil)
|
||||
;;; init-evil.el ends here
|
|
@ -1,93 +0,0 @@
|
|||
;;; init-functions.el --- Configuración de org-mode -*- lexical-binding: t -*-
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Aqui se encuentran funciones sueltas de Emacs.
|
||||
|
||||
;;; Code:
|
||||
|
||||
;; Permite cambiar la transparencia de emacs.
|
||||
(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 nil 'alpha-background value))
|
||||
|
||||
;; Comentar línea o región
|
||||
(defun comment-or-uncomment-region-or-line ()
|
||||
"Comments or uncomments the region or the current line."
|
||||
(interactive)
|
||||
(let (beg end)
|
||||
(if (region-active-p)
|
||||
(setq beg (region-beginning) end (region-end))
|
||||
(setq beg (line-beginning-position) end (line-end-position)))
|
||||
(comment-or-uncomment-region beg end)
|
||||
;;(next-line) ;; saltar a la siguiente línea
|
||||
))
|
||||
|
||||
;; Duplicar la línea actual
|
||||
(defun duplicate-current-line (&optional n)
|
||||
"Duplicate current line, make more than 1 copy given a numeric (N) argument."
|
||||
(interactive "p")
|
||||
(save-excursion
|
||||
(let ((nb (or n 1))
|
||||
(current-line (thing-at-point 'line)))
|
||||
;; when on last line, insert a newline first
|
||||
(when (or (= 1 (forward-line 1)) (eq (point) (point-max)))
|
||||
(insert "\n"))
|
||||
|
||||
;; now insert as many time as requested
|
||||
(while (> n 0)
|
||||
(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)))
|
||||
|
||||
;; Obtener el nombre del proyecto desde project.el
|
||||
(defun kj/project-name (&optional project)
|
||||
"Return the name for PROJECT.
|
||||
If PROJECT is not specified, assume current project root."
|
||||
(when-let (root (or project (kj/project-root)))
|
||||
(file-name-nondirectory
|
||||
(directory-file-name
|
||||
(file-name-directory root)))))
|
||||
|
||||
;; Obtener la raíz del proyecto desde project.el
|
||||
(defun kj/project-root ()
|
||||
"Return the current project root."
|
||||
(when-let (project (project-current))
|
||||
(project-root project)))
|
||||
|
||||
;; Cambia entre ocultar o no la barra de título cuando está maximizado
|
||||
(defun toggle-hide-title-bar()
|
||||
"Toggle hide title bar when the frame is maximed."
|
||||
(interactive)
|
||||
(if (and (boundp 'title-bar-maximixed) title-bar-maximixed)
|
||||
(progn
|
||||
(remove-hook 'window-size-change-functions 'frame-hide-title-bar-when-maximized)
|
||||
(setq title-bar-maximixed nil))
|
||||
(progn
|
||||
(add-hook 'window-size-change-functions 'frame-hide-title-bar-when-maximized)
|
||||
(setq title-bar-maximixed t)))
|
||||
)
|
||||
|
||||
;; Creando un hook para luego de que el theme ha cargado
|
||||
(defvar after-load-theme-hook nil
|
||||
"Hook run after a color theme is loaded using `load-theme'.")
|
||||
(defadvice load-theme (after run-after-load-theme-hook activate)
|
||||
"Run `after-load-theme-hook'."
|
||||
(run-hooks 'after-load-theme-hook))
|
||||
|
||||
(provide 'init-functions)
|
||||
;;; init-functions.el ends here.
|
|
@ -1,48 +0,0 @@
|
|||
;;; init-keys.el --- Archivo de configuración de atajos -*- lexical-binding: t -*-
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Aquí se configuran los atajos de teclas generales.
|
||||
;; Los atajos de teclas relacionados con paquetes en
|
||||
;; específico estarán en el archivo donde se esté
|
||||
;; configurando dicho paquete o dentro del paquete
|
||||
;; mismo, para aquellos que vengan con atajos ya
|
||||
;; configurados desde su instalación.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(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-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 "<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") '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 mw") 'web-mode)
|
||||
|
||||
;; Cambiar de ventana
|
||||
(global-set-key (kbd "C-S-o") 'other-window)
|
||||
|
||||
;; Saltar entre párrafos
|
||||
(define-key global-map "\M-p" 'backward-paragraph)
|
||||
(define-key global-map "\M-n" 'forward-paragraph)
|
||||
|
||||
;; Meta atajos (atajos de atajos)
|
||||
;;(global-set-key (kbd "C-c l d") "\C-a\C- \C-n\M-w\C-y") ; Duplicar línea
|
||||
|
||||
;; Deactivar el abrir *messages* al cliquear en el minibuffer
|
||||
(define-key minibuffer-inactive-mode-map [mouse-1] #'ignore)
|
||||
|
||||
(provide 'init-keys)
|
||||
;;; init-keys.el ends here
|
|
@ -1,158 +0,0 @@
|
|||
;;; init-minibuffer.el --- Ayuditas y autocompletado del minibufer -*- lexical-binding: t -*-
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Aquí se encuentran todos los paquetes que tienen como
|
||||
;; objetivo mejorar el minibuffer de Emacs.
|
||||
|
||||
;;; Code:
|
||||
|
||||
;; UI para completado
|
||||
(use-package vertico
|
||||
:defer t
|
||||
: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)
|
||||
(elpaca-after-init . savehist-mode) ;; savehist sirve para recordar el último comando de M-x
|
||||
(rfn-eshadow-update-overlay . vertico-directory-tidy))
|
||||
:config
|
||||
(setq read-file-name-completion-ignore-case t
|
||||
read-buffer-completion-ignore-case t
|
||||
completion-ignore-case t)
|
||||
)
|
||||
|
||||
;; Reemplazo para counsel
|
||||
(use-package consult
|
||||
:defer t
|
||||
:bind (;; C-c bindings in `mode-specific-map'
|
||||
("C-s" . consult-line)
|
||||
("C-r" . consult-ripgrep)
|
||||
("C-S-s" . isearch-forward)
|
||||
("C-S-r" . isearch-backward)
|
||||
("M-m" . consult-mode-command)
|
||||
("C-c h" . consult-history)
|
||||
("C-c k" . consult-kmacro)
|
||||
|
||||
([remap Info-search] . consult-info)
|
||||
([remap imenu] . consult-imenu)
|
||||
([remap recentf-open-files] . consult-recent-file)
|
||||
|
||||
|
||||
;; C-x bindings in `ctl-x-map'
|
||||
("C-x M-." . consult-complex-command) ;; orig. repeat-complex-command
|
||||
("C-x b" . consult-buffer) ;; orig. switch-to-buffer
|
||||
("C-x 4 b" . consult-buffer-other-window) ;; orig. switch-to-buffer-other-window
|
||||
("C-x 5 b" . consult-buffer-other-frame) ;; orig. switch-to-buffer-other-frame
|
||||
("C-x r b" . consult-bookmark) ;; orig. bookmark-jump
|
||||
("C-c p b" . consult-project-buffer) ;; orig. project-switch-to-buffer
|
||||
("C-c p p" . project-switch-project) ;; orig. project-switch-to-buffer
|
||||
;; 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)
|
||||
("M-¡" . consult-register)
|
||||
;; 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 o" . consult-outline) ;; Alternative: consult-org-heading
|
||||
("M-g m" . consult-mark)
|
||||
("M-g k" . consult-global-mark)
|
||||
("M-g i" . consult-imenu)
|
||||
("M-g I" . consult-imenu-multi)
|
||||
|
||||
;; 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" . (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.
|
||||
("M-s" . consult-history) ;; orig. historial de búsqueda
|
||||
("M-r" . consult-history)) ;; orig. historual de búsqueda
|
||||
|
||||
;; Enable automatic preview at point in the *Completions* buffer. This is
|
||||
;; 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
|
||||
;; 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)
|
||||
|
||||
;; 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 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))
|
||||
|
||||
: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-+"
|
||||
|
||||
;; 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))
|
||||
|
||||
;; nerd-icons en ibuffer
|
||||
(use-package nerd-icons-ibuffer
|
||||
:defer t
|
||||
:hook (ibuffer-mode . nerd-icons-ibuffer-mode))
|
||||
|
||||
;; Integración entre consult y project
|
||||
(use-package consult-project-extra
|
||||
:defer t
|
||||
:ensure t
|
||||
:bind
|
||||
(("C-x p" . consult-project-extra-find)
|
||||
("C-c p o" . consult-project-extra-find-other-window)))
|
||||
|
||||
;; Descripciones en el minibufer
|
||||
(use-package marginalia
|
||||
:defer t
|
||||
:hook (elpaca-after-init . marginalia-mode))
|
||||
|
||||
;; Nerd icons para vertico
|
||||
(use-package nerd-icons-completion
|
||||
:after nerd-icons
|
||||
:config (nerd-icons-completion-mode))
|
||||
|
||||
;; Todolist de todo el projecto desde consult.
|
||||
(use-package consult-todo
|
||||
:demand t
|
||||
:bind ("C-c t" . consult-todo)
|
||||
:defer t)
|
||||
|
||||
(provide 'init-minibuffer)
|
||||
;;; init-minibuffer.el ends here
|
|
@ -1,333 +0,0 @@
|
|||
;;; init-config.el --- Configuración de org-mode -*- lexical-binding: t -*-
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Aquí se encuentran todas las configuraciones relacionadas a org-mode.
|
||||
;;
|
||||
;; org-mode es un de los reclamos más potentes de Emacs. Aunque solo es
|
||||
;; un formato de texto enrriquecido, básicamente algo similar a
|
||||
;; markdown, Emacs es el que lo ha llevado muy bien y probalemente el que
|
||||
;; mejor lo soporta.
|
||||
;;
|
||||
;; Cabe mencionar que este modo es también el predefinido para todo un
|
||||
;; ecosistema dentro de Emacs, como es el caso de la agenda o la base de
|
||||
;; conocimientos org-roam.
|
||||
|
||||
;;; Code:
|
||||
(defun kj/org-hook ()
|
||||
"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))
|
||||
|
||||
;; 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))
|
||||
(setq org-fontify-quote-and-verse-blocks t) ;; Permitir configuración de bloques quote y verse.
|
||||
;; (set-face-attribute 'org-block nil :underline nil :foreground nil :background "#282a36")
|
||||
;; (set-face-attribute 'org-block-begin-line nil :underline nil :foreground nil :background "#1e1f28")
|
||||
;; (set-face-attribute 'org-block-end-line nil :underline nil :foreground nil :background nil)
|
||||
;; (set-face-attribute 'org-block-end-line nil :background 'unspecified)
|
||||
(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))
|
||||
(set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch))
|
||||
(set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch)
|
||||
|
||||
;; (set-face-attribute 'org-block nil :background
|
||||
;; (color-darken-name
|
||||
;; (face-attribute 'default :background) 3))
|
||||
|
||||
;; (setq org-src-block-faces '(("emacs-lisp" (:background "#EEE2FF"))
|
||||
;; ("python" (:background "#E5FFB8"))))
|
||||
|
||||
;; Tachar los elementos "DONE"
|
||||
(set-face-attribute 'org-done nil :strike-through t)
|
||||
(set-face-attribute 'org-headline-done nil
|
||||
: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
|
||||
:ensure nil
|
||||
:bind (("C-c a" . org-agenda)
|
||||
("C-c c" . org-capture))
|
||||
:hook
|
||||
(org-mode . kj/org-hook)
|
||||
:config
|
||||
(setq org-ellipsis " ▾")
|
||||
(setq org-hide-emphasis-markers t)
|
||||
;;(setq org-startup-folded 'content)
|
||||
|
||||
(setq org-agenda-start-with-log-mode t)
|
||||
(setq org-log-done 'time)
|
||||
(setq org-log-into-drawer t)
|
||||
(setq org-cycle-separator-lines -1)
|
||||
|
||||
;; Identación
|
||||
(setq org-startup-indented t)
|
||||
(setq org-src-preserve-indentation nil)
|
||||
(setq org-edit-src-content-indentation 0)
|
||||
(setq org-src-tab-acts-natively t)
|
||||
|
||||
;; Palabras claves del To Do de org-mode
|
||||
(setq org-todo-keywords
|
||||
;;'((sequence "☐" "✔" "⌛" "❌")))
|
||||
'((sequence "TODO(t)" "DOING(n)" "WAITING(w)" "|" "DONE(d!)" "CANCELED(c!)")))
|
||||
(setq org-todo-keyword-faces
|
||||
'(("TODO" . "#ff6464")
|
||||
("DOING" . "yellow")
|
||||
("DONE" . "green")
|
||||
("HOLD" . "orange")
|
||||
("CANCELED" . "#aaa"))
|
||||
)
|
||||
|
||||
;; Tachar los checkbox marcados como terminados
|
||||
(defface org-checkbox-done-text
|
||||
'((t (:foreground "#71696A" :strike-through t)))
|
||||
"Face for the text part of a checked org-mode checkbox.")
|
||||
|
||||
(font-lock-add-keywords
|
||||
'org-mode
|
||||
`(("^[ \t]*\\(?:[-+*]\\|[0-9]+[).]\\)[ \t]+\\(\\(?:\\[@\\(?:start:\\)?[0-9]+\\][ \t]*\\)?\\[\\(?:X\\|\\([0-9]+\\)/\\2\\)\\][^\n]*\n\\)"
|
||||
1 'org-checkbox-done-text prepend))
|
||||
'append)
|
||||
|
||||
;; Archivos a usarse en org-agenda
|
||||
(setq org-agenda-files
|
||||
'("~/Documentos/ORG/Agenda/Tareas.org")
|
||||
)
|
||||
|
||||
;; Archivos entre los que se moverán las tareas
|
||||
(setq org-refile-targets
|
||||
'(("Archivo.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)
|
||||
)
|
||||
)
|
||||
|
||||
;; 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)
|
||||
(not (eq org-display-remote-inline-images 'skip)))
|
||||
(if-let (buf (url-retrieve-synchronously (concat protocol ":" link)))
|
||||
(with-current-buffer buf
|
||||
(goto-char (point-min))
|
||||
(re-search-forward "\r?\n\r?\n" nil t)
|
||||
(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)
|
||||
)
|
||||
|
||||
;; Los head "*" se ven como puntos
|
||||
(use-package org-bullets
|
||||
:defer t
|
||||
:hook
|
||||
(org-mode . org-bullets-mode)
|
||||
:config
|
||||
(setq org-bullets-bullet-list '("◉"
|
||||
"○"
|
||||
"●"
|
||||
"◈"
|
||||
"◇"
|
||||
"◆"
|
||||
"✸"
|
||||
"✳"))
|
||||
)
|
||||
|
||||
;; Mejora visualmente varias cosas de org
|
||||
(use-package org-modern
|
||||
:defer t
|
||||
:ensure t
|
||||
:hook ((org-mode . org-modern-mode)
|
||||
(org-agenda . org-modern-mode))
|
||||
:config
|
||||
;; Me gustan varias cosas por defecto, así que desactivo aquí varias de las "mejoras"
|
||||
(setq org-modern-table nil ;; Mejora visual de las tablas
|
||||
org-modern-table-vertical 1 ;; Grosor de las líneas verticales de las tablas
|
||||
org-modern-table-horizontal 0.2 ;; Grosor de las líneas horizontales de las tablas
|
||||
org-modern-priority nil ;; Mejora de las prioridades (Arriba ya las puse bonitas con prettyfy-symbols, así que mejor está desactivado)
|
||||
org-modern-todo nil ;; Mejora visual a las lista de tareas
|
||||
org-modern-statistics 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
|
||||
:defer t
|
||||
:after (org)
|
||||
:config
|
||||
;; Tamaño de la columna
|
||||
(setq-default visual-fill-column-width 150)
|
||||
;; Centrar el texto
|
||||
(setq-default visual-fill-column-center-text t
|
||||
visual-fill-column-adjust-for-text-scale nil
|
||||
visual-fill-column-enable-sensible-window-split t)
|
||||
)
|
||||
|
||||
;; Segundo cerebro: Base de conocimientos en formato Zettelkasten
|
||||
(use-package org-roam
|
||||
:defer t
|
||||
:ensure t
|
||||
:bind (("<f4>" . org-roam-node-insert)
|
||||
("<f3>" . org-roam-node-find))
|
||||
:init
|
||||
(setq org-roam-v2-ack t)
|
||||
(setq org-roam-completion-system 'ivy)
|
||||
:custom
|
||||
(org-roam-directory "~/Documentos/ORG/Notas")
|
||||
(org-roam-completion-everywhere t)
|
||||
:config
|
||||
(org-roam-setup))
|
||||
|
||||
;; Interface web para navegar en mi base de conocimientos.
|
||||
(use-package org-roam-ui
|
||||
:defer t
|
||||
:ensure t
|
||||
:config
|
||||
(setq org-roam-ui-sync-theme t
|
||||
org-roam-ui-follow t
|
||||
org-roam-ui-update-on-save t
|
||||
org-roam-ui-open-on-start t))
|
||||
|
||||
;; Continúa el formato de la lista cuando presionas enter.
|
||||
(use-package org-autolist
|
||||
:defer t
|
||||
:ensure t
|
||||
:hook (org-mode . org-autolist-mode))
|
||||
|
||||
;; Org babel para PHP
|
||||
(use-package ob-php
|
||||
:defer t
|
||||
:ensure t)
|
||||
|
||||
;; Org babel para GO
|
||||
(use-package ob-go
|
||||
:defer t
|
||||
:ensure t)
|
||||
|
||||
;; Org babel para Rust
|
||||
(use-package ob-rust
|
||||
:defer t
|
||||
:ensure t)
|
||||
|
||||
;; Org babel para traducciones (mediante google translate)
|
||||
(use-package ob-translate
|
||||
:defer t
|
||||
:ensure t)
|
||||
|
||||
;; Org mode en modo presentación
|
||||
(use-package org-present
|
||||
:defer t
|
||||
:after (org)
|
||||
:config
|
||||
(add-hook 'org-present-mode-hook
|
||||
(lambda ()
|
||||
(org-display-inline-images)
|
||||
(org-present-hide-cursor)
|
||||
(org-present-read-only)
|
||||
))
|
||||
(add-hook 'org-present-mode-quit-hook
|
||||
(lambda ()
|
||||
;; (org-remove-inline-images)
|
||||
(org-present-show-cursor)
|
||||
(org-present-read-write)))
|
||||
|
||||
(add-hook 'org-present-after-navigate-functions
|
||||
(lambda ()
|
||||
;; Show only top-level headlines
|
||||
(org-overview)
|
||||
;; Unfold the current entry
|
||||
(org-show-entry)
|
||||
;; Show only direct subheadings of the slide but don't expand them
|
||||
(org-show-children)
|
||||
))
|
||||
)
|
||||
|
||||
;; Mostrar los caracteres ocultos de org mode al pasar con el cursor.
|
||||
(use-package org-appear
|
||||
:defer t
|
||||
;; :hook (org-mode . org-appear-mode)
|
||||
)
|
||||
|
||||
;; Polymode para org-mode
|
||||
;; (use-package poly-org)
|
||||
|
||||
(provide 'init-org)
|
||||
;;; init-org.el ends here
|
|
@ -1,488 +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:
|
||||
|
||||
;; Mejora del reemplazo
|
||||
(use-package anzu
|
||||
:defer t
|
||||
:bind (([remap query-replace] . anzu-query-replace)
|
||||
([remap query-replace-regexp] . anzu-query-replace-regexp)))
|
||||
|
||||
;; Intercamiar buffers de lugar
|
||||
(use-package buffer-move
|
||||
:defer 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))
|
||||
)
|
||||
|
||||
;; Mostrar la ayuda de eldoc/documentación en un childframe
|
||||
(use-package eldoc-box
|
||||
:defer t
|
||||
:bind ("<f1>" . eldoc-box-help-at-point))
|
||||
|
||||
;; Seleccionar por regiones (similar a mark-sexp, pero toma en cuenta hacia atrás del cursor también)
|
||||
(use-package expand-region
|
||||
:defer t
|
||||
:bind ("C-+" . er/expand-region))
|
||||
|
||||
;; Major mode para archivos CSV
|
||||
(use-package csv-mode
|
||||
:defer t
|
||||
:hook ((csv-mode . csv-align-mode)
|
||||
(csv-mode . csv-header-line))
|
||||
)
|
||||
|
||||
;; Visor de documentos de emacs (soporta de todo: epub, pdf, odt, docx, cbz, etc.)
|
||||
(use-package doc-view
|
||||
:defer t
|
||||
:hook
|
||||
(doc-view-mode . (lambda ()
|
||||
(display-line-numbers-mode 0)))
|
||||
:ensure nil)
|
||||
|
||||
;; Un bonito y sencillo panel de inicio
|
||||
(use-package dashboard
|
||||
:defer t
|
||||
:init
|
||||
(dashboard-setup-startup-hook)
|
||||
:hook
|
||||
(dashboard-after-initialize . (lambda ()
|
||||
"Refrescamos el dashboard con la agenda luego de cargar todo"
|
||||
(setq dashboard-items '(
|
||||
;; (recents . 10)
|
||||
(agenda . 10)
|
||||
))
|
||||
(dashboard-refresh-buffer)
|
||||
))
|
||||
: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 '())
|
||||
)
|
||||
|
||||
;; Coloca en emacs la documentacón distribuída por devdocs.io
|
||||
(use-package devdocs
|
||||
:defer t)
|
||||
|
||||
;; Sidebar a la derecha con los archivos
|
||||
(use-package dired-sidebar
|
||||
:defer t
|
||||
:hook (dired-mode . hl-line-mode)
|
||||
:ensure t
|
||||
: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
|
||||
))
|
||||
|
||||
;; Mover líneas o regiones
|
||||
(use-package drag-stuff
|
||||
:defer t
|
||||
:hook
|
||||
(elpaca-after-init . drag-stuff-global-mode)
|
||||
:config
|
||||
(drag-stuff-define-keys))
|
||||
|
||||
;; La línea bonita esa de abajo
|
||||
(use-package doom-modeline
|
||||
:defer t
|
||||
:ensure t
|
||||
:hook (elpaca-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))
|
||||
|
||||
;; Resolver diferencias entre 2 archivos o versiones del mismo.
|
||||
(use-package ediff
|
||||
:defer t
|
||||
:ensure nil
|
||||
:config
|
||||
(setq ediff-diff-options "")
|
||||
(setq ediff-custom-diff-options "-u")
|
||||
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
|
||||
(setq ediff-split-window-function 'split-window-vertically))
|
||||
|
||||
;; Emparejamiento automático de comillas, paréntesis, corchetes y llaves
|
||||
(use-package electric-pair
|
||||
:defer t
|
||||
:ensure nil
|
||||
:hook (elpaca-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
|
||||
:hook
|
||||
(elpaca-after-init . global-git-gutter-mode)
|
||||
:config
|
||||
(defhydra hydra-git-gutter (:hint nil)
|
||||
"
|
||||
^Navigation^ | ^Actions^ | ^Others^
|
||||
-^-----------^-+-^----^--------+-^-------^----------
|
||||
_p_: previous | _s_: stage | _m_: mark
|
||||
_n_: next | _r_: revert | _SPC_: toggle info
|
||||
-^-----------^-+-^----^--------+-^-------^----------
|
||||
"
|
||||
("p" git-gutter:previous-hunk)
|
||||
("n" git-gutter:next-hunk)
|
||||
("s" git-gutter:stage-hunk)
|
||||
("r" git-gutter:revert-hunk)
|
||||
("m" git-gutter:mark-hunkmark)
|
||||
("SPC" git-gutter:toggle-popup-hunk))
|
||||
)
|
||||
|
||||
;; Visitar rápidamente viejas versiones de un archivo rápidamente
|
||||
(use-package git-timemachine
|
||||
:ensure t
|
||||
:defer t)
|
||||
|
||||
;; Cliente LLM (ollama, chatgpt, gemini, etc.)
|
||||
(use-package gptel
|
||||
:defer t
|
||||
:config
|
||||
(setq gptel-model "dolphin-llama3:latest"
|
||||
gptel-backend (gptel-make-ollama "Ollama"
|
||||
:host "localhost:11434"
|
||||
:stream t
|
||||
:models '("mistral:latest" "dolphin-llama3:latest" "llama3:latest" "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 de libros de informática profesional. Traduce a español tomando en cuenta los posibles tecnicismos que no deberían traducirse.")
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; Resalta los escapes de secuencia
|
||||
(use-package highlight-escape-sequences
|
||||
: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))
|
||||
)
|
||||
)
|
||||
|
||||
;; Resaltar palabras clave como TODO, FIXME, etc. en comentarios del código.
|
||||
(use-package hl-todo
|
||||
:ensure (hl-todo :version (lambda (_) "3.6.0"))
|
||||
:defer t
|
||||
:hook (prog-mode . hl-todo-mode)
|
||||
:config
|
||||
(add-to-list 'hl-todo-keyword-faces '("BUG" . "#d99600")))
|
||||
|
||||
;; Paquete para exportar buffers de emacs a HTML
|
||||
(use-package htmlize
|
||||
:defer t
|
||||
:ensure t)
|
||||
|
||||
;; Permite crear conjuntos de atajos.
|
||||
(use-package hydra
|
||||
:defer t)
|
||||
|
||||
;; Mostrar lo que se está presionando en pantalla
|
||||
(use-package keypression
|
||||
: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
|
||||
:defer t)
|
||||
|
||||
;; Magia para git
|
||||
(use-package magit
|
||||
:defer t)
|
||||
|
||||
;; Todolist en magit de todos los archivos del projecto.
|
||||
(use-package magit-todos
|
||||
:defer t
|
||||
:after magit
|
||||
:config (magit-todos-mode 1))
|
||||
|
||||
;; Modo markdown
|
||||
(use-package markdown-mode
|
||||
:defer t)
|
||||
|
||||
;; Multiple vterm
|
||||
(use-package multi-vterm
|
||||
:defer t
|
||||
: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)
|
||||
)
|
||||
:ensure t)
|
||||
|
||||
;; Iconos bonitos para varias cosas
|
||||
(use-package nerd-icons
|
||||
:defer t)
|
||||
|
||||
;; Usar nerd-icons en dired
|
||||
(use-package nerd-icons-dired
|
||||
:defer t
|
||||
:hook (dired-mode . nerd-icons-dired-mode))
|
||||
|
||||
;; Modo para leer archivos de configuración de nginx
|
||||
(use-package nginx-mode
|
||||
:defer t)
|
||||
|
||||
;; Lector EPUB
|
||||
;; (use-package nov
|
||||
;; :defer t)
|
||||
|
||||
;; Múltiples modos en un mismo buffer
|
||||
;; (use-package polymode
|
||||
;; :defer t)
|
||||
|
||||
;; Des-minifica / ordena el código
|
||||
(use-package prettier
|
||||
:defer t)
|
||||
|
||||
(use-package project
|
||||
:defer t
|
||||
: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")
|
||||
)
|
||||
)
|
||||
|
||||
;; Correr el código desde el buffer de emacs
|
||||
(use-package quickrun
|
||||
:defer t
|
||||
:ensure t
|
||||
:bind (:map prog-mode-map
|
||||
("C-c C-r" . quickrun)
|
||||
("C-c r f" . quickrun)
|
||||
("C-c r r" . quickrun-region)
|
||||
("C-c r R" . quickrun-replace-region)
|
||||
)
|
||||
)
|
||||
|
||||
;; Recentf - Guarda registro de los archivos abiertos recientemente
|
||||
(use-package recentf
|
||||
:defer t
|
||||
:ensure nil
|
||||
:bind ("C-x C-r" . recentf-open-files)
|
||||
:hook (after-load-theme . recentf-mode)
|
||||
:config
|
||||
(setq recentf-save-file
|
||||
(recentf-expand-file-name (concat temp-dir "/recentf"))
|
||||
recentf-auto-cleanup 'never
|
||||
recentf-keep '(file-remote-p file-readable-p)
|
||||
recentf-max-saved-items 1000
|
||||
recentf-max-menu-items 500))
|
||||
|
||||
;; Busqueda rápida con ripgrep
|
||||
(use-package rg
|
||||
:defer t
|
||||
;; :hook (elpaca-after-init . rg-enable-default-bindings)
|
||||
: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))
|
||||
|
||||
;; Guardar la posición del cursor en un archivo para volver allí cuando se lo vuelva a abrir.
|
||||
(use-package saveplace
|
||||
:ensure nil
|
||||
:defer t
|
||||
:hook
|
||||
(elpaca-after-init . (lambda()
|
||||
(setq save-place-file (locate-user-emacs-file (concat temp-dir "/places")))
|
||||
(save-place-mode 1)
|
||||
))
|
||||
)
|
||||
|
||||
;; Mejorando el scroll
|
||||
(use-package smooth-scrolling
|
||||
:defer t
|
||||
:hook (elpaca-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)
|
||||
)
|
||||
|
||||
;; Ayuda a manipular los archivos con líneas demasiado largas
|
||||
(use-package so-long
|
||||
:defer t
|
||||
:ensure nil
|
||||
: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)))
|
||||
)
|
||||
|
||||
;; Mecanografía
|
||||
(use-package speed-type
|
||||
:defer t
|
||||
:hook
|
||||
(speed-type-mode . (lambda ()
|
||||
(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)
|
||||
speed-type-min-chars 500
|
||||
speed-type-max-chars 600))
|
||||
|
||||
;; Tree-sitter :)
|
||||
(use-package treesit
|
||||
:defer t
|
||||
: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"))
|
||||
(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"))
|
||||
(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"))
|
||||
(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)))))
|
||||
|
||||
;; Cuando presionas enter en un bloque de comentario sigue el estilo del bloque.
|
||||
;; (use-package vs-comment-return
|
||||
;; :ensure (:host github :repo "emacs-vs/vs-comment-return")
|
||||
;; :defer t
|
||||
;; :hook (prog-mode . vs-comment-return-mode)
|
||||
;; )
|
||||
|
||||
;; Mostrar el último commit que modificó la linea actual
|
||||
(use-package vc-msg
|
||||
:defer t
|
||||
:bind (("C-c v" . vc-msg-show)
|
||||
("C-c C-v" . vc-msg-show))
|
||||
)
|
||||
|
||||
;; Terminal
|
||||
(use-package vterm
|
||||
:ensure t
|
||||
:defer t
|
||||
:config
|
||||
(setq tramp-histfile-override nil) ;; Dejamos que se use el history por defecto del servidor remoto
|
||||
(setq vterm-tramp-shells '(("ssh" "/bin/bash")
|
||||
("sshx" "/bin/bash")
|
||||
("docker" "/bin/bash")
|
||||
("podman" "/bin/bash"))) ;; Tanto docker como podman usarán bash cuado se contecte mediante tramp
|
||||
)
|
||||
|
||||
;; Cuando iniicias un atajo de teclas te muestra las posibilidades
|
||||
(use-package which-key
|
||||
:defer t
|
||||
:hook (elpaca-after-init . which-key-mode))
|
||||
|
||||
;; Restaurar el estado de los frames
|
||||
(use-package winner
|
||||
:ensure nil
|
||||
:defer t
|
||||
:hook (elpaca-after-init . winner-mode))
|
||||
|
||||
;; Emacs Start Up Profiler
|
||||
(use-package esup
|
||||
:defer t)
|
||||
|
||||
(provide 'init-packages)
|
||||
;;; init-packages.el ends here
|
|
@ -1,42 +0,0 @@
|
|||
;;; 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
|
||||
:ensure t
|
||||
:defer t)
|
||||
|
||||
;; El theme más cercano a adwaita dark que he encontrado
|
||||
(use-package adwaita-dark-theme
|
||||
:ensure t
|
||||
:defer t)
|
||||
|
||||
;; Themes modus, vienen integrado en emacs en master (~v30)
|
||||
(use-package modus-themes
|
||||
:ensure t
|
||||
:defer t)
|
||||
|
||||
;; Themes ef
|
||||
(use-package ef-themes
|
||||
:defer t
|
||||
:ensure t)
|
||||
|
||||
;; Prendemos el theme que elijamos
|
||||
(add-hook 'elpaca-after-init-hook #'(lambda() (load-theme 'adwaita-dark 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
|
|
@ -1,12 +1,10 @@
|
|||
;;; lang-go.el --- Configuración para el lenguaje go -*- lexical-binding: t -*-
|
||||
;;; lang-go.el --- Configuración para el lenguaje go
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Archivo de configuración para el lenguaje GO
|
||||
|
||||
;;; Code:
|
||||
|
||||
(use-package go-mode
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
;;; lang-html.el --- Configuración para el lenguaje HTML -*- lexical-binding: t -*-
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Archivo de configuración para el lenguaje HTML
|
||||
|
||||
;;; Code:
|
||||
|
||||
(use-package web-mode
|
||||
:defer t
|
||||
:config
|
||||
(setq web-mode-markup-indent-offset 2
|
||||
web-mode-css-indent-offset 2
|
||||
web-mode-code-indent-offset 2
|
||||
web-mode-enable-current-element-highlight t
|
||||
web-mode-enable-current-column-highlight t)
|
||||
|
||||
)
|
||||
|
||||
(use-package css-mode
|
||||
:defer t
|
||||
:ensure nil
|
||||
:config
|
||||
(setq css-indent-offset 2))
|
||||
|
||||
(use-package auto-rename-tag
|
||||
:ensure (:host github :repo "jcs-elpa/auto-rename-tag")
|
||||
:defer t
|
||||
)
|
||||
|
||||
(provide 'lang-html)
|
||||
;;; lang-html.el ends here
|
|
@ -1,21 +1,16 @@
|
|||
;;; lang-js.el --- Configuración para el lenguaje Javascript -*- lexical-binding: t -*-
|
||||
;;; lang-js.el --- Configuración para el lenguaje Javascript
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Archivo de configuración para el lenguaje Javascript
|
||||
|
||||
;;; Code:
|
||||
|
||||
(use-package js
|
||||
:defer t
|
||||
:ensure nil
|
||||
:mode
|
||||
("\\.js$" . js-mode)
|
||||
:hook
|
||||
(js-mode . eglot-ensure)
|
||||
:config
|
||||
(setq js-indent-level 2))
|
||||
|
||||
|
|
|
@ -1,34 +1,29 @@
|
|||
;;; lang-php.el --- Configuración para el lenguaje PHP -*- lexical-binding: t -*-
|
||||
;;; lang-php.el --- Configuración para el lenguaje PHP
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Archivo de configuración para el lenguaje PHP
|
||||
|
||||
;;; Code:
|
||||
|
||||
(use-package company-php :defer t)
|
||||
(use-package ac-php :defer t)
|
||||
|
||||
(use-package php-mode
|
||||
:defer t
|
||||
:bind ("C-c d b" . kj/php-doc-block)
|
||||
:bind ("<C-tab>" . php-doc-block)
|
||||
:config
|
||||
(defun kj/php-doc-block ()
|
||||
"Llama a \"php-dock-block\", sin conflicto con \"vs-comment-return-mode\"."
|
||||
(interactive)
|
||||
(if (bound-and-true-p vs-comment-return-mode)
|
||||
(funcall (lambda()
|
||||
(vs-comment-return-mode -1)
|
||||
(php-doc-block)
|
||||
(vs-comment-return-mode 1)))
|
||||
(php-doc-block)
|
||||
)
|
||||
)
|
||||
(add-hook 'php-mode-hook #'(lambda()
|
||||
(php-enable-default-coding-style)
|
||||
(company-mode t) ; habilita company mode
|
||||
(ac-php-core-eldoc-setup) ; habilita soporte para ELDoc
|
||||
(add-to-list 'company-backends 'company-ac-php-backend) ; Agregar ac-php para a company
|
||||
))
|
||||
)
|
||||
|
||||
(use-package php-doc-block
|
||||
:after php-mode
|
||||
:ensure (:host github :repo "moskalyovd/emacs-php-doc-block")
|
||||
:load-path (lambda() (concat private-dir "/packages/php-doc-block"))
|
||||
)
|
||||
|
||||
(provide 'lang-php)
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
;;; lang-rust.el --- Configuración para el lenguaje Rust -*- lexical-binding: t -*-
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Archivo de configuración para el lenguaje Rust
|
||||
|
||||
;;; Code:
|
||||
|
||||
(use-package rust-mode
|
||||
:defer t
|
||||
:ensure t
|
||||
:config
|
||||
(setq rust-format-on-save t))
|
||||
|
||||
(provide 'lang-rust)
|
||||
;;; lang-rust.el ends here
|
Binary file not shown.
After Width: | Height: | Size: 59 KiB |
25833
duck.svg
25833
duck.svg
File diff suppressed because it is too large
Load Diff
Before Width: | Height: | Size: 826 KiB |
|
@ -1,61 +0,0 @@
|
|||
;;; early-init.el --- Early startup code -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2021 Ryan C. Thompson
|
||||
|
||||
;; Filename: early-init.el
|
||||
;; Author: Ryan C. Thompson
|
||||
;; Created: Sat Nov 27 13:40:59 2021 (-0500)
|
||||
|
||||
;; This file is NOT part of GNU Emacs.
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;
|
||||
;;; Commentary:
|
||||
|
||||
;; This file contains code that must be executed early during Emacs'
|
||||
;; startup for proper initialization, as described here:
|
||||
;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Early-Init-File.html
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;
|
||||
;;; 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 ()
|
||||
"Restaura el garbaje collection luego de iniciar."
|
||||
(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))
|
||||
|
||||
;; Color de fondo similar al theme para evitar que se vea blanco al iniciar
|
||||
;; (add-to-list 'default-frame-alist '(background-color . "#282a36"))
|
||||
|
||||
;; Permitir solo la búsqueda de archivos a cargar en la config en case sensitive.
|
||||
(setq auto-mode-case-fold nil)
|
||||
|
||||
;; 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.
|
||||
|
||||
;; Iniciar emacs maximizado
|
||||
;; (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 elpaca toes.
|
||||
(setq package-enable-at-startup nil)
|
||||
|
||||
;;; early-init.el ends here
|
|
@ -0,0 +1,21 @@
|
|||
#!/bin/bash
|
||||
|
||||
# start emacs server if not is running
|
||||
systemctl --user status emacs > /dev/null 2>&1 || systemctl --user start emacs > /dev/null 2>&1
|
||||
|
||||
# if args is -nw or -t run on terminal
|
||||
if [ "$1" == "-t" ] || [ "$1" == "-nw" ]; then
|
||||
emacsclient -t
|
||||
exit
|
||||
fi
|
||||
|
||||
# if no args open new frame
|
||||
if [ $# -eq 0 ]; then
|
||||
emacsclient -c -n
|
||||
emacsclient --eval "(progn (select-frame-set-input-focus (selected-frame)))"
|
||||
exit
|
||||
fi
|
||||
|
||||
emacsclient -e "(frames-on-display-list \"$DISPLAY\")" &>/dev/null
|
||||
|
||||
emacsclient -c -n "$*"
|
23
init.el
23
init.el
|
@ -1,4 +1,4 @@
|
|||
;;; init.el --- Init de emacs ordenado -*- lexical-binding: t -*-
|
||||
;;; init.el --- Init de emacs ordenado
|
||||
|
||||
;; Author: kj <webmaster@outcontrol.net>
|
||||
;; URL: https://git.kj2.me/kj/confi-emacs-actual
|
||||
|
@ -9,29 +9,16 @@
|
|||
|
||||
;;; Code:
|
||||
|
||||
;; Cargar configuraciones
|
||||
|
||||
(add-to-list 'load-path (concat user-emacs-directory "configs"))
|
||||
|
||||
;; Paquetes base
|
||||
(require 'init-base)
|
||||
(require 'init-theme)
|
||||
(require 'init-packages)
|
||||
(require 'init-functions)
|
||||
(require 'init-org)
|
||||
(require 'init-eglot)
|
||||
(require 'init-corfu)
|
||||
;; (require 'init-ctags)
|
||||
(require 'init-minibuffer)
|
||||
;; (require 'init-evil)
|
||||
(require 'init-keys)
|
||||
(require 'base)
|
||||
(require 'base-extensions)
|
||||
(require 'base-functions)
|
||||
(require 'base-keys)
|
||||
|
||||
;; Lenguajes
|
||||
(require 'lang-php)
|
||||
(require 'lang-js)
|
||||
(require 'lang-go)
|
||||
(require 'lang-rust)
|
||||
(require 'lang-html)
|
||||
|
||||
(provide 'init)
|
||||
;;; init.el ends here
|
||||
|
|
|
@ -0,0 +1,120 @@
|
|||
;;; php-doc-block.el --- Php DocBlock generator
|
||||
|
||||
;; Copyright (C) 2016 Dmitriy Moskalyov
|
||||
|
||||
;; Author: Dmitriy Moskalyov <moskalyovd@gmail.com>
|
||||
;; Keywords: php docblock
|
||||
;; Version: 0.0.1
|
||||
;; URL: https://github.com/moskalyovd/emacs-php-doc-block
|
||||
|
||||
;; This program is free software: you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; This program is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This package provides php DocBlock generator.
|
||||
;; How to use:
|
||||
;; Clone repository from https://github.com/moskalyovd/emacs-php-doc-block
|
||||
;; and add to your .emacs(or init.el) file:
|
||||
|
||||
;; (add-to-list 'load-path "~/.emacs.d/emacs-php-doc-block")
|
||||
;; (require 'php-doc-block)
|
||||
|
||||
;; Then bind command 'php-doc-block to any key you like:
|
||||
|
||||
;; (add-hook 'php-mode-hook
|
||||
;; (lambda ()
|
||||
;; (local-set-key (kbd "<C-tab>") 'php-doc-block)))
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defun insert-to-prev-line-and-indent (text)
|
||||
"Insert TEXT to the previous line with indentation."
|
||||
(beginning-of-line)
|
||||
(open-line 1)
|
||||
(insert text)
|
||||
(indent-according-to-mode))
|
||||
|
||||
(defun insert-to-next-line-and-indent (text)
|
||||
"Insert TEXT to the next line with indentation."
|
||||
(end-of-line)
|
||||
(newline-and-indent)
|
||||
(insert text)
|
||||
(indent-according-to-mode))
|
||||
|
||||
(defun php-doc-block-var-or-attr (tag-type type name value is-nullable)
|
||||
"Insert doc block for a property or an attribute"
|
||||
(cond
|
||||
((and value (= (string-width type) 0))
|
||||
(cond
|
||||
((string-match "^=\s*\\(array(.*)\\|\\[\.*\]\\)" value) (setq type "array"))
|
||||
((string-match "^=\s*\[0-9\]*\\.\[0-9\]+$" value) (setq type "float"))
|
||||
((string-match "^=\s*\[0-9\]+$" value) (setq type "int"))
|
||||
((string-match "^=\s*\['\"]" value) (setq type "string"))
|
||||
((string-match "^=\s*\\(true\\|false\\)" value) (setq type "bool"))))
|
||||
|
||||
((and (= (string-width type) 0) (not value))
|
||||
(setq type "mixed")))
|
||||
|
||||
(when (equal is-nullable "?")
|
||||
(setq type (concat type "|null")))
|
||||
|
||||
(insert-to-next-line-and-indent (concat "* @" tag-type " " type " " name)))
|
||||
|
||||
(defun php-doc-block-function (name arguments return-type is-return-nullable)
|
||||
"Insert php docblock for function"
|
||||
(insert-to-next-line-and-indent (concat "* " name))
|
||||
|
||||
(when (> (string-width arguments) 0)
|
||||
(insert-to-next-line-and-indent "*")
|
||||
(dolist (arg (split-string arguments "\s*,\s*"))
|
||||
(string-match "\s*\\(\[\?\]?\\)\s*\\(\[\\\]?\[a-zA-Z0-9_\]*\\)?\s*\\($\[a-zA-Z0-9_\]+\\)\s*\\(=.*\\)?" arg)
|
||||
(php-doc-block-var-or-attr "param" (match-string 2 arg) (match-string 3 arg) (match-string 4 arg) (match-string 1 arg))))
|
||||
|
||||
(when (> (string-width return-type) 0)
|
||||
(insert-to-next-line-and-indent "*")
|
||||
(when (equal is-return-nullable "?")
|
||||
(setq return-type (concat return-type "|null")))
|
||||
(insert-to-next-line-and-indent (concat "* @return " return-type))))
|
||||
|
||||
(defun php-doc-block-class (type name)
|
||||
"Insert php doc block for class, interface etc."
|
||||
|
||||
(insert-to-next-line-and-indent (concat "* " name " " type)))
|
||||
|
||||
(defun php-doc-block ()
|
||||
"Insert php docblock."
|
||||
(interactive)
|
||||
(let ((line (thing-at-point 'line)))
|
||||
(insert-to-prev-line-and-indent "/**")
|
||||
(cond
|
||||
((string-match "function\s*" line)
|
||||
(beginning-of-line)
|
||||
(let ((line (thing-at-point 'line)) (func-defun "") (s-point (point)) (e-point (re-search-forward ";\\|{" nil '(nil))))
|
||||
(goto-char s-point)
|
||||
(if e-point
|
||||
(setq func-defun (replace-regexp-in-string "{\\|\n" "" (buffer-substring s-point e-point)))
|
||||
(progn
|
||||
(end-of-line)
|
||||
(setq func-defun (buffer-substring s-point (point))))
|
||||
)
|
||||
(when (string-match "function\s+\\([A-Za-z0-9_]+\\)\s*(\\(.*\\))\s*:*\s*\\(\[\?\]?\\)\s*\\(\[A-Za-z0-9_\\\]*\\)" func-defun)
|
||||
(php-doc-block-function (match-string 1 func-defun) (match-string 2 func-defun) (match-string 4 func-defun) (match-string 3 func-defun)))))
|
||||
((string-match "\s*\\([a-zA-Z0-9_]+\\)?\s*\\($\[a-zA-Z0-9_\]+\\)\s*\\(=\[^;\]*\\)?" line)
|
||||
(php-doc-block-var-or-attr "var" "" (match-string 2 line) (match-string 3 line) ""))
|
||||
((string-match "\\(class\\|interface\\|trait\\|abstract class\\)\s+\\(\[a-zA-Z0-9_\]+\\)" line)
|
||||
(php-doc-block-class (match-string 1 line) (match-string 2 line))))
|
||||
(insert-to-next-line-and-indent "*/")))
|
||||
|
||||
(provide 'php-doc-block)
|
||||
;;; php-doc-block.el ends here
|
|
@ -0,0 +1,61 @@
|
|||
# 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.
|
||||
|
||||
## 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 [dococumentació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`
|
||||
|
||||
Finalmente, para abrirlo, es necesaria la usar `emacsclient` en lugar de `emacs`, para hacer que eso suceda en todo el sistema se puede realizar el siguiente hack copiando el archivo `emacs-client-runner.sh` a `/usr/local/bin/` con el nombre `emacs` de la siguiente manera:
|
||||
|
||||
`sudo cp ~/.emacs.d/emacs-client-runner.sh /usr/local/bin/emacs`
|
||||
|
||||
**🔴 Advertencia:** Esto reemplazará emacs por emacsclient, si deseas usar emacs podrás hacerlo mediante: `/bin/emacs`
|
||||
|
||||
**Extra:** Con este hack, para abrir emacs en modo terminal puedes ejecutar: `emacsclient -t`, `emacs -t` o `emacs -nw`.
|
||||
|
||||
## 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.
|
||||
- Puede tener activado `evil-mode` (A veces lo activo, pues quiero terminar usándolo siempre), por lo que si no lo quieres tener, recomiendo comentar la línea que lo activa (`(evil-mode 1)`) o directamente toda la sección en `base-extensions.el` que cofigura evil.
|
||||
- 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 neotree.
|
||||
- Con C-F11 puedes maximizar/restaurar.
|
||||
- Con C-F6 se generan/regenera el archivo TAGs.
|
||||
- Con C-F5 se abre una terminal en la carpeta del archivo actual.
|
||||
- Con M-c se puede comentar / descomentar un región.
|
||||
- Por defecto he configurado que al presionar TAB se usen 2 espacios en su lugar.
|
||||
- Cuando usas `C-s` (buscar), busca el texto actualmente seleccionado.
|
||||
|
||||
Recuerda que si alguna cosa no te gusta, puedes cambiarla a gusto. Esta configuración fue hecha para mi uso personal y puede que tenga cosas que solo a mi me parecen cómodas/útiles.
|
||||
|
||||
## Contacto
|
||||
|
||||
Si se tiene alguna pregunta o quieres comentarme alguna corrección, puesto que este git no está abierto a registro, puedes contactarme mediante:
|
||||
|
||||
E-mail: webmaster@outcontol.net
|
||||
Telegram: [https://t.me/keyjay](https://t.me/keyjay)
|
63
readme.org
63
readme.org
|
@ -1,63 +0,0 @@
|
|||
#+TITLE: Configuración Emacs
|
||||
#+AUTHOR: KJ
|
||||
#+OPTIONS: toc:nil
|
||||
|
||||
Esta es mi configuración de Emacs personal y está hecha principalmente para funcionar con *Emacs compilado desde el código*, ya que es así como yo lo uso.
|
||||
|
||||
* Instalación
|
||||
|
||||
Si deseas clonar mi configuración, puedes clonar este repositorio:
|
||||
|
||||
#+begin_src bash
|
||||
git clone --depth 1 https://git.kj2.me/kj/confi-emacs-actual.git ~/.emacs.d
|
||||
#+end_src
|
||||
|
||||
Si no ves los íconos bien dentro de Emacs, puedes ejecutar el comando dentro de Emacs (M-x)
|
||||
|
||||
#+begin_src elisp
|
||||
nerd-icons-install-fonts
|
||||
#+end_src
|
||||
|
||||
* Compilación de Emacs
|
||||
|
||||
Si quieres instalar Emacs tal cual lo tengo yo, esta es la configuración de compilación que actualmente uso:
|
||||
|
||||
#+begin_src bash
|
||||
git clone https://git.savannah.gnu.org/git/emacs.git
|
||||
cd emacs
|
||||
./autogen.sh
|
||||
./configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib --localstatedir=/var --mandir=/usr/share/man --with-gameuser=:games --with-modules --without-libotf --without-m17n-flt --without-gconf --with-native-compilation=yes --with-native-compilation=aot --with-xinput2 --with-pgtk --with-tree-sitter --without-compress-install --with-mailutils
|
||||
|
||||
make -j16
|
||||
make check
|
||||
sudo make install
|
||||
#+end_src
|
||||
|
||||
Las dependencias para compilar pueden cambiar según tu distribución, por lo que queda en tus manos el ajustar lo que sea necesario.
|
||||
|
||||
Como ayuda lo más que puedo dar es que en las distros basadas en Debian puedes usar =apt build-dep emacs= mientras que en las basadas en RHEL (solo lo he probado en Fedora) puedes usar =dnf builddep emacs=. En el caso de las basadas Arch puedes usar AUR.
|
||||
|
||||
* Dependencias
|
||||
|
||||
Normalmente no es usual el tener dependencias reales para que emacs funcione, pero para el funcionamiendo adecuado y sin errores, lo mejor es tener instalado:
|
||||
|
||||
- El font de firacode
|
||||
- cmake
|
||||
- libvterm
|
||||
|
||||
** Languaje Server Protocol (LSP)
|
||||
|
||||
Esta configuración por defecto utiliza [[https://github.com/joaotavora/eglot][eglot]] para LSP con los servidores por defecto. Puedes revisar su documentación para ver lo que necesitas instalar para usar el LSP del lenguaje que necesites.
|
||||
|
||||
Finalmente, recomiendo instalar [[https://github.com/blahgeek/emacs-lsp-booster][emacs-lsp-booster]], la mejora es nimia en general, pero en proyectos grandes esa pequeña mejora es bastante notoria.
|
||||
|
||||
* Atajos de teclas personalizados
|
||||
|
||||
Tengo varios atajos reconfigurados, por lo que recomiento revisar primero que nada el archivo [[./configs/init-keys.el][init-keys.el]] el resto de configuraciones está principalmente en los archivos [[./configs/init-minibuffer.el][init-minibuffer.el]] e [[./configs/init-packages.el][init-packages.el]], dudo que las uses todas y yo mismo no las uso, por lo que con el tiempo las voy eliminando y a veces agrego alguna extra. Con que revises el primer archivo y sepas que =consult-project= está en =C-x p= ya estás servido.
|
||||
|
||||
* Contacto
|
||||
|
||||
Si se tiene alguna pregunta o quieres comentarme alguna corrección, puesto que este git no está abierto a registro, puedes contactarme mediante:
|
||||
|
||||
*Correo*: webmaster@outcontrol.net
|
||||
*Telegram*: [[https://t.me/keyjay][@keyjay]]
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: @import
|
||||
# key: imp
|
||||
# uuid: imp
|
||||
# --
|
||||
@import "`(doom-snippets-text nil t)`$0";
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: @import url("//fonts.googleapis...")
|
||||
# key: impfont
|
||||
# uuid: impfont
|
||||
# --
|
||||
@import url("http://fonts.googleapis.com/css?family=${1:Open+Sans}");
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: @import url(...)
|
||||
# key: impurl
|
||||
# uuid: impurl
|
||||
# --
|
||||
@import url("`(doom-snippets-text nil t)`$0");
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: margin: ...;
|
||||
# key: mar
|
||||
# uuid: mar
|
||||
# --
|
||||
margin: ${1:0 auto};
|
|
@ -0,0 +1,8 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: @media
|
||||
# key: med
|
||||
# uuid: med
|
||||
# --
|
||||
@media ${1:screen} {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: @media (orientation: ?)
|
||||
# condition: (looking-back "@media " (line-beginning-position))
|
||||
# --
|
||||
(orientation: ${1:landscape})
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: @media print { ... }
|
||||
# --
|
||||
@media print {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: padding: ...;
|
||||
# key: pad
|
||||
# uuid: pad
|
||||
# --
|
||||
padding: ${1:10px};
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: ...: ...;
|
||||
# key: :
|
||||
# uuid: :
|
||||
# --
|
||||
${1:prop}: ${2:`%`};
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: append
|
||||
# --
|
||||
${1:type} = append($1, ${2:elems})
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: ... := ...
|
||||
# key: :=
|
||||
# uuid: :=
|
||||
# --
|
||||
${1:x} := ${2:`%`}
|
|
@ -0,0 +1,5 @@
|
|||
# -*- mode: snippet -*-
|
||||
# contributor: Seong Yong-ju
|
||||
# name: const ... = ...
|
||||
# --
|
||||
const ${1:name}${2: type} = ${3:value}$0
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: ctx context.Context
|
||||
# --
|
||||
ctx context.Context
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: func ...(...) ... { ... }
|
||||
# --
|
||||
func ${1:name}(${2:args})${3: return type} {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: func (target) name(args) (results) { ... }
|
||||
# --
|
||||
func (${1:target}) ${2:name}(${3:args})${4: return type} {
|
||||
$0
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: for ... { ... }
|
||||
# --
|
||||
for $1 {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: for key, value := range ... { ... }
|
||||
# --
|
||||
for ${1:key}, ${2:value} := range ${3:target} {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: for key, value := range ... { ... }
|
||||
# --
|
||||
for ${1:key}, ${2:value} := range ${3:target} {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: for i := 0; i < n; i++ { ... }
|
||||
# --
|
||||
for ${1:i} := ${2:0}; $1 < ${3:10}; $1++ {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: for ... { ... }
|
||||
# --
|
||||
for $1 {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: func ...(...) ... { ... }
|
||||
# --
|
||||
func ${1:name}(${2:args})${3: return type} {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: go
|
||||
# --
|
||||
go ${1:func}(${2:args})$0
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: go func
|
||||
# --
|
||||
go func (${1:args}) {
|
||||
$0
|
||||
}(${2:values})
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: go func (short)
|
||||
# --
|
||||
go func (${1:args}) {
|
||||
$0
|
||||
}(${2:values})
|
|
@ -0,0 +1,7 @@
|
|||
# -*- mode: snippet -*-
|
||||
# contributor: Seong Yong-ju
|
||||
# name: if ... { ... }
|
||||
# --
|
||||
if ${1:condition} {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
# -*- mode: snippet -*-
|
||||
# contributor: Seong Yong-ju
|
||||
# name: if ... { ... } else { ... }
|
||||
# --
|
||||
if ${1:condition} {
|
||||
`%`$2
|
||||
} else {
|
||||
$0
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: if err != nil { ... }
|
||||
# --
|
||||
if err != nil {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: import
|
||||
# --
|
||||
import ${1:package}$0
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: import
|
||||
# --
|
||||
import ${1:package}$0
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: type ... interface { ... }
|
||||
# --
|
||||
type $1 interface {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: func main() { ... }
|
||||
# --
|
||||
func main() {
|
||||
$0
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: map
|
||||
# --
|
||||
map[${1:KeyType}]${2:ValueType}
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: func (target) name(args) (results) { ... }
|
||||
# --
|
||||
func (${1:target}) ${2:name}(${3:args})${4: return type} {
|
||||
$0
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: package
|
||||
# --
|
||||
package ${1:`(car (last (split-string (file-name-directory buffer-file-name) "/") 2))`}
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: package (short)
|
||||
# --
|
||||
package ${1:`(car (last (split-string (file-name-directory buffer-file-name) "/") 2))`}
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: printf
|
||||
# --
|
||||
fmt.Printf("$1\n"${2:, ${3:str}})
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: printf
|
||||
# --
|
||||
fmt.Printf("$1\n"${2:, ${3:str}})
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: println
|
||||
# --
|
||||
fmt.Println("${1:msg}")$0
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: println (short)
|
||||
# --
|
||||
fmt.Println("${1:msg}")$0
|
|
@ -0,0 +1,7 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: select
|
||||
# --
|
||||
select {
|
||||
case ${1:cond}:
|
||||
$0
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: type ... struct { ... }
|
||||
# --
|
||||
type $1 struct {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: switch
|
||||
# key: switch
|
||||
# uuid: switch
|
||||
# --
|
||||
switch {
|
||||
case ${1:cond}:
|
||||
$0
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: func Test...() { ... }
|
||||
# --
|
||||
func Test${1:Name}(${2:t *testing.T}) {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: var
|
||||
# --
|
||||
var ${1:name} ${2:type} = ${3:value}$0
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name : for ... { ... }
|
||||
# --
|
||||
for $1 {
|
||||
`%`$0
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: http request writer
|
||||
# --
|
||||
w http.ResponseWriter, r *http.Request
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# contributor: Rodrigo Setti <rodrigosetti@gmail.com>
|
||||
# name: <dd> ... </dd>
|
||||
# group: list
|
||||
# --
|
||||
<dd>$1</dd>
|
|
@ -0,0 +1,8 @@
|
|||
# -*- mode: snippet -*-
|
||||
# contributor: Rodrigo Setti <rodrigosetti@gmail.com>
|
||||
# name: <dl> ... </dl>
|
||||
# group: list
|
||||
# --
|
||||
<dl>
|
||||
$0
|
||||
</dl>
|
|
@ -0,0 +1,5 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: Doctype HTML 5
|
||||
# group: meta
|
||||
# --
|
||||
<!DOCTYPE html>
|
|
@ -0,0 +1,5 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: DocType XHTML 1.0 frameset
|
||||
# group: meta
|
||||
# --
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
|
@ -0,0 +1,5 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: DocType XHTML 1.1
|
||||
# group: meta
|
||||
# --
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
|
@ -0,0 +1,5 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: DocType XHTML 1.0 Strict
|
||||
# group: meta
|
||||
# --
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
@ -0,0 +1,5 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: DocType XHTML 1.0 Transitional
|
||||
# group: meta
|
||||
# --
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# contributor: Rodrigo Setti <rodrigosetti@gmail.com>
|
||||
# name: <dt> ... </dt>
|
||||
# group: list
|
||||
# --
|
||||
<dt>$1</dt>
|
|
@ -0,0 +1,7 @@
|
|||
# -*- mode: snippet -*-
|
||||
# contributor: Jimmy Wu <frozenthrone88@gmail.com>
|
||||
# name: <form method="..." id="..." action="..."></form>
|
||||
# --
|
||||
<form method="$1" id="$2" action="$3">
|
||||
$0
|
||||
</form>
|
|
@ -0,0 +1,7 @@
|
|||
# -*- mode: snippet -*-
|
||||
# contributor: Jimmy Wu <frozenthrone88@gmail.com>
|
||||
# name: <html>...</html>
|
||||
# --
|
||||
<html>
|
||||
$0
|
||||
</html>
|
|
@ -0,0 +1,7 @@
|
|||
# -*- mode: snippet -*-
|
||||
# contributor: Jimmy Wu <frozenthrone88@gmail.com>
|
||||
# name: <html xmlns="...">...</html>
|
||||
# --
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="${1:en}" lang="${2:en}">
|
||||
$0
|
||||
</html>
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: <link rel="stylesheet" ... />
|
||||
# key: link
|
||||
# uuid: link
|
||||
# --
|
||||
<link rel="${1:stylesheet}" href="${2:url}" type="${3:text/css}" media="${4:screen}" />
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: <!--[if IE]><link stylesheet="..." /><![endif]-->
|
||||
# --
|
||||
<!--[if IE${1: version}]>
|
||||
<link rel="${2:stylesheet}" href="${3:url}" type="${4:text/css}" media="${5:screen}" />
|
||||
<![endif]-->
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: <a href="mailto:...@...">...</a>
|
||||
# --
|
||||
<a href="mailto:${1:john@doe.com}">`(doom-snippets-format "%n%s%n")`$0</a>
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# contributor : Jimmy Wu <frozenthrone88@gmail.com>
|
||||
# group: meta
|
||||
# name: <meta name="..." content="..." />
|
||||
# --
|
||||
<meta name="${1:generator}" content="${2:content}" />
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# contributor: Jimmy Wu <frozenthrone88@gmail.com>
|
||||
# name: <meta http-equiv="..." content="..." />
|
||||
# group: meta
|
||||
# --
|
||||
<meta name="${1:Content-Type}" content="${2:text/html; charset=UTF-8}" />
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: <script type="text/javascript">...</script>
|
||||
# --
|
||||
<script type="text/javascript">
|
||||
$0
|
||||
</script>
|
|
@ -0,0 +1,4 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: <script type="text/javascript" src="..."></script>
|
||||
# --
|
||||
<script type="text/javascript" src="$1"></script>
|
|
@ -0,0 +1,5 @@
|
|||
# -*- mode: snippet -*-
|
||||
# contributor: Jimmy Wu <frozenthrone88@gmail.com>
|
||||
# name: <textarea ...></textarea>
|
||||
# --
|
||||
<textarea name="$1" id="$2" rows="$3" cols="$4" tabindex="$5"></textarea>
|
|
@ -0,0 +1,6 @@
|
|||
# -*- mode: snippet -*-
|
||||
# contributor: Jimmy Wu <frozenthrone88@gmail.com>
|
||||
# name: <th>...</th>
|
||||
# group: table
|
||||
# --
|
||||
<th$1>$2</th>
|
|
@ -0,0 +1,7 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: param
|
||||
# key: @param
|
||||
# uuid: @param
|
||||
# condition: (sp-point-in-comment)
|
||||
# --
|
||||
@param ${1:paramater} $0
|
|
@ -0,0 +1,7 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: return
|
||||
# key: @return
|
||||
# uuid: @return
|
||||
# condition: (sp-point-in-comment)
|
||||
# --
|
||||
@return ${1:description}
|
|
@ -0,0 +1,8 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: apr_assert
|
||||
# key: apr_assert
|
||||
# uuid: apr_assert
|
||||
# --
|
||||
if (Globals.useAssertions) {
|
||||
${1:assert ..};
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue