summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/prog-general.el55
-rw-r--r--modules/prog-python.el24
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)