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