diff options
| -rw-r--r-- | modules/prog-general.el | 55 | ||||
| -rw-r--r-- | modules/prog-python.el | 24 |
2 files changed, 50 insertions, 29 deletions
diff --git a/modules/prog-general.el b/modules/prog-general.el index 589a3146..f25b35bf 100644 --- a/modules/prog-general.el +++ b/modules/prog-general.el @@ -8,7 +8,34 @@ ;;; Code: -(require 'seq) +(eval-when-compile (defvar code-dir)) +(eval-when-compile (defvar projects-dir)) +(eval-when-compile (defvar snippets-dir)) + +(defvar display-line-numbers-type) +(defvar outline-minor-mode-map) +(defvar projectile-per-project-compilation-buffer) +(defvar projectile-switch-project-action) +(defvar projectile-command-map) +(defvar dired-mode-map) +(defvar yas-snippet-dirs) +(defvar highlight-indent-guides-auto-enabled) +(defvar hl-todo-keyword-faces) +(defvar ws-butler-convert-leading-tabs-or-spaces) + +(declare-function projectile-project-root "projectile") +(declare-function projectile-mode "projectile") +(declare-function magit-status "magit") +(declare-function dired-get-filename "dired") +(declare-function global-treesit-auto-mode "treesit-auto") +(declare-function treesit-auto-add-to-auto-mode-alist "treesit-auto") +(declare-function highlight-indent-guides-mode "highlight-indent-guides") + +;; Forward declarations for functions defined later in this file +(declare-function cj/find-project-root-file "prog-general") +(declare-function cj/project-switch-actions "prog-general") +(declare-function cj/deadgrep--initial-term "prog-general") +(declare-function cj/highlight-indent-guides-disable-in-non-prog-modes "prog-general") ;; --------------------- General Programming Mode Settings --------------------- ;; keybindings, minor-modes, and prog-mode settings @@ -32,12 +59,10 @@ ;; --------------------------------- Treesitter -------------------------------- ;; incremental language syntax parser -(use-package tree-sitter - :defer .5) +(use-package tree-sitter) ;; installs tree-sitter grammars if they're absent (use-package treesit-auto - :defer .5 :custom (treesit-auto-install t) ;; (treesit-auto-install 'prompt) ;; optional prompt instead of auto-install @@ -52,7 +77,6 @@ ;; additionally it can make use of the hideshow package. (use-package bicycle :after outline - :defer 1 :hook ((prog-mode . outline-minor-mode) (prog-mode . hs-minor-mode)) :bind (:map outline-minor-mode-map @@ -70,7 +94,6 @@ (run-at-time "3" nil 'projectile-discover-projects-in-search-path)))) (use-package projectile - :defer .5 :bind-keymap ("C-c p" . projectile-command-map) :bind @@ -81,6 +104,8 @@ (projectile-auto-discover nil) (projectile-project-search-path `(,code-dir ,projects-dir)) :config + (require 'seq) + (defun cj/find-project-root-file (regexp) "Return first file in the current Projectile project root matching REGEXP. @@ -107,7 +132,7 @@ If no such file exists there, display a message." (message "Not in a Projectile project"))) (defun cj/project-switch-actions () - "On =projectile-after-switch-project-hook=, open TODO.{org,md,txt} or fall back to Magit." + "On project switch, open TODO.{org,md,txt} or fall back to Magit." (let ((file (cj/find-project-root-file (rx bos "todo." (or "org" "md" "txt") eos)))) (if file @@ -124,13 +149,11 @@ If no such file exists there, display a message." ;; groups ibuffer by projects (use-package ibuffer-projectile - :defer .5 :after projectile :hook (ibuffer-mode . ibuffer-projectile-set-filter-groups)) ;; list all errors project-wide (use-package flycheck-projectile - :defer .5 :after projectile :commands flycheck-projectile-list-errors :bind @@ -185,20 +208,20 @@ If no such file exists there, display a message." (deadgrep term dir)))) (with-eval-after-load 'dired - (define-key dired-mode-map (kbd "d") #'cj/deadgrep-here)) + (keymap-set dired-mode-map "d" #'cj/deadgrep-here)) ;; ---------------------------------- Snippets --------------------------------- ;; reusable code and text (use-package yasnippet - :defer 1 + :commands (yas-new-snippet yas-visit-snippet-file yas-global-mode) + :hook (prog-mode . yas-minor-mode) :bind ("C-c s n" . yas-new-snippet) ("C-c s e" . yas-visit-snippet-file) :config - (setq yas-snippet-dirs '(snippets-dir)) - (yas-global-mode 1)) + (setq yas-snippet-dirs '(snippets-dir))) (use-package ivy-yasnippet :after yasnippet @@ -209,7 +232,6 @@ If no such file exists there, display a message." ;; display the actual color as highlight to color hex code (use-package rainbow-mode - :defer .5 :hook (prog-mode . rainbow-mode)) ;; ---------------------------- Symbol Overlay Mode ---------------------------- @@ -217,7 +239,6 @@ If no such file exists there, display a message." ;; replaces highlight-symbol-mode (use-package symbol-overlay - :defer .5 :bind-keymap ("C-c C-s" . symbol-overlay-map) :hook @@ -227,7 +248,6 @@ If no such file exists there, display a message." ;; --------------------------- Highlight Indentation --------------------------- (use-package highlight-indent-guides - :ensure t :hook (prog-mode . cj/highlight-indent-guides-enable) :config ;; Disable auto face coloring to use explicit faces for better visibility across themes @@ -274,7 +294,6 @@ If no such file exists there, display a message." ;; trims trailing whitespace only from lines you've modified when saving buffer (use-package ws-butler - :defer .5 :commands (ws-butler-mode) :init (add-hook 'prog-mode-hook #'ws-butler-mode) @@ -286,7 +305,7 @@ If no such file exists there, display a message." ;; close compilation windows when successful. from 'enberg' on #emacs (add-hook 'compilation-finish-functions - (lambda (buf str) + (lambda (_buf str) (if (null (string-match ".*exited abnormally.*" str)) ;;no errors, make the compilation window go away in a few seconds (progn diff --git a/modules/prog-python.el b/modules/prog-python.el index 2dc1fb3b..c861811e 100644 --- a/modules/prog-python.el +++ b/modules/prog-python.el @@ -5,12 +5,13 @@ ;;; Code: +(defvar python-ts-mode-map) + ;; -------------------------------- Python Setup ------------------------------- ;; preferences for Python programming (defun cj/python-setup () "My default code preferences for Python coding." - (tree-sitter-hl-mode) ;; use tree-sitter's highlighting (hs-minor-mode) ;; folding (company-mode) ;; completion framework (flyspell-prog-mode) ;; spell check comments @@ -22,17 +23,20 @@ (electric-pair-mode t)) ;; match delimiters automatically ;; ----------------------------------- Python ---------------------------------- -;; configuration for Emacs' built-in Python editing support +;; configuration for python-ts-mode (treesit-based Python editing) (use-package python :ensure nil ;; built-in :hook - (python-mode . cj/python-setup) + (python-ts-mode . cj/python-setup) :custom (python-shell-interpreter "python3") :config ;; remove the "guess indent" python message - (setq python-indent-guess-indent-offset-verbose nil)) + (setq python-indent-guess-indent-offset-verbose nil) + ;; Remove python-mode from auto-mode-alist to prefer python-ts-mode + (setq auto-mode-alist + (rassq-delete-all 'python-mode auto-mode-alist))) ;; ----------------------------------- Poetry ---------------------------------- ;; virtual environments and dependencies @@ -40,7 +44,7 @@ (use-package poetry :defer t :after (python) - :hook (python-mode . poetry-tracking-mode) + :hook (python-ts-mode . poetry-tracking-mode) :config ;; Checks for the correct virtualenv. Better strategy IMO because the default ;; one is quite slow. @@ -50,31 +54,29 @@ ;; formatting on save (use-package blacken - :defer 1 :custom (blacken-allow-py36 t) (blacken-skip-string-normalization t) - :hook (python-mode . blacken-mode)) + :hook (python-ts-mode . blacken-mode)) ;; ---------------------------------- Numpydoc --------------------------------- ;; automatically insert NumPy style docstrings in Python function definitions (use-package numpydoc - :defer 1 :custom (numpydoc-insert-examples-block nil) (numpydoc-template-long nil) - :bind (:map python-mode-map + :bind (:map python-ts-mode-map ("C-c C-n" . numpydoc-generate))) ;; ------------------------------------ TOML ----------------------------------- ;; editing support and documentation for TOML files (use-package toml-mode - :defer 1) + :mode "\\.toml\\'") (use-package eldoc-toml - :defer 1) + :hook (toml-mode . eldoc-toml-mode)) (provide 'prog-python) |
