;; init-prog.el --- Initialize programming configurations. -*- lexical-binding: t -*- ;; Author: kj ;; 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 ("" . 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-" . quickrun) ("C-S-" . 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-" . 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 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