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