Big re-write :)
I reordered the code in a more clean an organized way. Also this improves a lot the emacs startup time again, bucause after some updates it becomes a bit slow with the old configuration, so i did it again in a new way.
This commit is contained in:
@ -6,10 +6,11 @@
|
||||
;;; Commentary:
|
||||
|
||||
;; Configuración general de Emacs.
|
||||
;; No incluye paquetes/extensiones, solo configuraciones generales.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'init-functions)
|
||||
|
||||
;; Native compilation
|
||||
(when (and (fboundp 'native-comp-available-p)
|
||||
(native-comp-available-p))
|
||||
@ -19,131 +20,136 @@
|
||||
(setq package-native-compile t)
|
||||
))
|
||||
|
||||
;; Instalar elpaca.el (reemplpazando package.el)
|
||||
(defvar elpaca-installer-version 0.11)
|
||||
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
|
||||
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
|
||||
(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory))
|
||||
(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
|
||||
:ref nil :depth 1 :inherit ignore
|
||||
:files (:defaults "elpaca-test.el" (:exclude "extensions"))
|
||||
:build (:not elpaca--activate-package)))
|
||||
(let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory))
|
||||
(build (expand-file-name "elpaca/" elpaca-builds-directory))
|
||||
(order (cdr elpaca-order))
|
||||
(default-directory repo))
|
||||
(add-to-list 'load-path (if (file-exists-p build) build repo))
|
||||
(unless (file-exists-p repo)
|
||||
(make-directory repo t)
|
||||
(when (< emacs-major-version 28) (require 'subr-x))
|
||||
(condition-case-unless-debug err
|
||||
(if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
|
||||
((zerop (apply #'call-process `("git" nil ,buffer t "clone"
|
||||
,@(when-let* ((depth (plist-get order :depth)))
|
||||
(list (format "--depth=%d" depth) "--no-single-branch"))
|
||||
,(plist-get order :repo) ,repo))))
|
||||
((zerop (call-process "git" nil buffer t "checkout"
|
||||
(or (plist-get order :ref) "--"))))
|
||||
(emacs (concat invocation-directory invocation-name))
|
||||
((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch"
|
||||
"--eval" "(byte-recompile-directory \".\" 0 'force)")))
|
||||
((require 'elpaca))
|
||||
((elpaca-generate-autoloads "elpaca" repo)))
|
||||
(progn (message "%s" (buffer-string)) (kill-buffer buffer))
|
||||
(error "%s" (with-current-buffer buffer (buffer-string))))
|
||||
((error) (warn "%s" err) (delete-directory repo 'recursive))))
|
||||
(unless (require 'elpaca-autoloads nil t)
|
||||
(require 'elpaca)
|
||||
(elpaca-generate-autoloads "elpaca" repo)
|
||||
(load "./elpaca-autoloads")))
|
||||
(add-hook 'after-init-hook #'elpaca-process-queues)
|
||||
(elpaca `(,@elpaca-order))
|
||||
;; Garbage Collector Magic Hack
|
||||
(use-package gcmh
|
||||
:diminish
|
||||
:hook (emacs-startup . gcmh-mode)
|
||||
:init
|
||||
(setq gcmh-idle-delay 'auto
|
||||
gcmh-auto-idle-delay-factor 10
|
||||
gcmh-high-cons-threshold #x1000000)) ; 16MB
|
||||
|
||||
;; 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))
|
||||
;; Guardar la posición del cursor en un archivo para volver allí cuando se lo vuelva a abrir.
|
||||
(use-package saveplace
|
||||
:ensure nil
|
||||
:hook (after-init . save-place-mode))
|
||||
|
||||
;; Block until current queue processed.
|
||||
(elpaca-wait)
|
||||
;; Recentf - Guarda registro de los archivos abiertos recientemente
|
||||
(use-package recentf
|
||||
:ensure nil
|
||||
:bind (("C-x C-r" . recentf-open-files))
|
||||
:hook (after-init . recentf-mode)
|
||||
:init (setq recentf-max-saved-items 300
|
||||
recentf-exclude
|
||||
'("\\.?cache" ".cask" "url" "COMMIT_EDITMSG\\'" "bookmarks"
|
||||
"\\.\\(?:gz\\|gif\\|svg\\|png\\|jpe?g\\|bmp\\|xpm\\)$"
|
||||
"\\.?ido\\.last$" "\\.revive$" "/G?TAGS$" "/.elfeed/"
|
||||
"^/tmp/" "^/var/folders/.+$" "^/ssh:" "/persp-confs/"
|
||||
(lambda (file) (file-in-directory-p file package-user-dir))))
|
||||
:config
|
||||
(push (expand-file-name recentf-save-file) recentf-exclude)
|
||||
(add-to-list 'recentf-filename-handlers #'abbreviate-file-name))
|
||||
|
||||
(defconst private-dir (expand-file-name "private" user-emacs-directory))
|
||||
(defconst temp-dir (format "%s/cache" private-dir)
|
||||
"Hostname-based elisp temp directories.")
|
||||
;; Guarda el historial del minibuffer
|
||||
(use-package savehist
|
||||
:ensure nil
|
||||
:hook (after-init . savehist-mode)
|
||||
:init (setq enable-recursive-minibuffers t ; Allow commands in minibuffers
|
||||
history-length 1000
|
||||
savehist-additional-variables '(mark-ring
|
||||
global-mark-ring
|
||||
search-ring
|
||||
regexp-search-ring
|
||||
extended-command-history)
|
||||
savehist-autosave-interval 300))
|
||||
|
||||
;; Misc.
|
||||
(use-package simple
|
||||
:ensure nil
|
||||
:hook ((after-init . size-indication-mode)
|
||||
(text-mode . visual-line-mode))
|
||||
:init
|
||||
(setq column-number-mode t
|
||||
line-number-mode t
|
||||
kill-whole-line t ; Kill line including '\n' (C-k)
|
||||
line-move-visual nil
|
||||
track-eol t ; Keep cursor at end of lines. Require line-move-visual is nil.
|
||||
set-mark-command-repeat-pop t) ; Repeating C-SPC after popping mark pops it again
|
||||
;; Visualize TAB, (HARD) SPACE, NEWLINE
|
||||
(setq-default show-trailing-whitespace nil ; Don't show trailing whitespace by default
|
||||
cursor-type 'bar) ; Usar la barrita como cursor
|
||||
(setq show-trailing-whitespace t)
|
||||
(add-hook 'before-save-hook #'delete-trailing-whitespace nil t)
|
||||
)
|
||||
|
||||
;; UTF-8 please
|
||||
(set-charset-priority 'unicode)
|
||||
(setq locale-coding-system 'utf-8) ; pretty
|
||||
(set-terminal-coding-system 'utf-8) ; pretty
|
||||
(set-keyboard-coding-system 'utf-8) ; pretty
|
||||
(set-selection-coding-system 'utf-8) ; please
|
||||
(prefer-coding-system 'utf-8) ; with sugar on top
|
||||
(setq default-process-coding-system '(utf-8-unix . utf-8-unix))
|
||||
(when (fboundp 'set-charset-priority)
|
||||
(set-charset-priority 'unicode))
|
||||
(set-language-environment "UTF-8")
|
||||
(set-default-coding-systems 'utf-8)
|
||||
(set-buffer-file-coding-system 'utf-8)
|
||||
(set-clipboard-coding-system 'utf-8)
|
||||
(set-file-name-coding-system 'utf-8)
|
||||
(set-keyboard-coding-system 'utf-8)
|
||||
(set-next-selection-coding-system 'utf-8)
|
||||
(set-selection-coding-system 'utf-8)
|
||||
(set-terminal-coding-system 'utf-8)
|
||||
(setq locale-coding-system 'utf-8)
|
||||
(setq system-time-locale "C")
|
||||
|
||||
;; Emacs customizations
|
||||
(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.
|
||||
(global-so-long-mode 1) ; Abrir archivos grandes o con líneas largas en el modo so-long por defecto.
|
||||
(show-paren-mode 1) ; Habilitar resaltado de brackets.
|
||||
;; (global-subword-mode 1) ; Habilitar subpalabras (detectar palabras dentro de un camelCase y Pascal case.)
|
||||
(pending-delete-mode t) ; Cuando selecciono un texto y escribo, el texto se borra (emacs por defecto solo escribe donde está el cursor).
|
||||
;; (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)
|
||||
;; Misc
|
||||
(if (boundp 'use-short-answers)
|
||||
(setq use-short-answers t)
|
||||
(fset 'yes-or-no-p 'y-or-n-p))
|
||||
(setq-default major-mode 'text-mode
|
||||
fill-column 80
|
||||
tab-width 4
|
||||
indent-tabs-mode nil) ; Permanently indent with spaces, never with TABs
|
||||
|
||||
;; 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)))
|
||||
(setq visible-bell t
|
||||
inhibit-compacting-font-caches t ; Don’t compact font caches during GC
|
||||
delete-by-moving-to-trash t ; Deleting files go to OS's trash folder
|
||||
make-backup-files nil ; Forbide to make backup files
|
||||
auto-save-default nil ; Disable auto sav
|
||||
inhibit-splash-screen t
|
||||
uniquify-buffer-name-style 'post-forward-angle-brackets ; Show path if names are same
|
||||
adaptive-fill-regexp "[ t]+|[ t]*([0-9]+.|*+)[ t]*"
|
||||
adaptive-fill-first-line-regexp "^* *$"
|
||||
sentence-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*"
|
||||
sentence-end-double-space nil
|
||||
word-wrap-by-category t)
|
||||
|
||||
;; 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)
|
||||
(scroll-bar-mode -1)
|
||||
;; Async
|
||||
(use-package async
|
||||
:functions (async-bytecomp-package-mode dired-async-mode)
|
||||
:init
|
||||
(async-bytecomp-package-mode 1)
|
||||
(dired-async-mode 1))
|
||||
|
||||
;; Cerrar buffers al cerrar emacsclient
|
||||
;; (add-hook 'delete-frame-functions
|
||||
;; (lambda (frame)
|
||||
;; (mapc 'kill-buffer (delq (get-buffer "*dashboard*") (buffer-list)))
|
||||
;; ))
|
||||
)
|
||||
;; Child frame
|
||||
(use-package posframe
|
||||
:hook (after-load-theme . posframe-delete-all)
|
||||
:init
|
||||
(defface posframe-border
|
||||
`((t (:inherit region)))
|
||||
"Face used by the `posframe' border."
|
||||
:group 'posframe)
|
||||
(defvar posframe-border-width 2
|
||||
"Default posframe border width.")
|
||||
:config
|
||||
(with-no-warnings
|
||||
(defun my-posframe--prettify-frame (&rest _)
|
||||
(set-face-background 'fringe nil posframe--frame))
|
||||
(advice-add #'posframe--create-posframe :after #'my-posframe--prettify-frame)
|
||||
|
||||
(if (daemonp)
|
||||
(add-hook 'after-make-frame-functions
|
||||
(lambda (frame)
|
||||
(with-selected-frame frame
|
||||
(setup-daemon))))
|
||||
(message "Corriendo en modo normal."))
|
||||
(defun posframe-poshandler-frame-center-near-bottom (info)
|
||||
(cons (/ (- (plist-get info :parent-frame-width)
|
||||
(plist-get info :posframe-width))
|
||||
2)
|
||||
(/ (+ (plist-get info :parent-frame-height)
|
||||
(* 2 (plist-get info :font-height)))
|
||||
2)))))
|
||||
|
||||
(add-hook 'elpaca-after-init-hook (lambda () (load custom-file 'noerror)))
|
||||
|
||||
(provide 'init-base)
|
||||
;;; init-base.el ends here
|
||||
|
Reference in New Issue
Block a user