183 lines
6.8 KiB
EmacsLisp
183 lines
6.8 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:
|
|
|
|
;; Mostrar la ayuda de eldoc/documentación en un childframe
|
|
(use-package eldoc-box
|
|
:defer t
|
|
:bind ("<f1>" . eldoc-box-help-at-point))
|
|
|
|
;; 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))
|
|
:init
|
|
(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
|
|
(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))))
|
|
|
|
;; Lookup the symbol at point
|
|
(devdocs-lookup nil (thing-at-point 'symbol t))))
|
|
|
|
;; ---------------------------------------------------------------------------
|
|
;; Miscellaneous Programming Modes
|
|
;; ---------------------------------------------------------------------------
|
|
(use-package cmake-mode)
|
|
(use-package nginx-mode) ; Modo para leer archivos de configuración de nginx
|
|
|
|
(use-package sql
|
|
:ensure nil
|
|
:hook (sql-interactive-mode . toggle-truncate-lines)
|
|
:config
|
|
(setq sql-mysql-login-params (append sql-mysql-login-params '(port))) ;; request port also
|
|
(setq sql-user "root") ;; user por defecto
|
|
(setq sql-server "127.0.0.1") ;; host por defecto
|
|
(setq sql-port 3306) ;; puerto por defecto para mysql
|
|
)
|
|
|
|
;; 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))
|
|
|
|
(provide 'init-prog)
|
|
;;; init-prog.el ends here
|