aboutsummaryrefslogtreecommitdiffstats
path: root/oni-groovy.el
diff options
context:
space:
mode:
authorGravatar Tom Willemse2022-04-01 18:43:25 -0700
committerGravatar Tom Willemse2022-04-01 18:43:25 -0700
commited3149f690c8ff2d2227fd437b67654c8ed0cd87 (patch)
tree2d5007e357a156aa8ab118e3ec79f95e569f5006 /oni-groovy.el
parent64d141212b8f3cdefc673dd2f47ecfc79d622a49 (diff)
downloademacs-config-ed3149f690c8ff2d2227fd437b67654c8ed0cd87.tar.gz
emacs-config-ed3149f690c8ff2d2227fd437b67654c8ed0cd87.zip
[oni-groovy] Add defun-based navigation properties
With this also comes the ability to call ‘narrow-to-defun’ and have it show only the current function.
Diffstat (limited to 'oni-groovy.el')
-rw-r--r--oni-groovy.el35
1 files changed, 34 insertions, 1 deletions
diff --git a/oni-groovy.el b/oni-groovy.el
index 5684d95..f48ee84 100644
--- a/oni-groovy.el
+++ b/oni-groovy.el
@@ -4,7 +4,7 @@
;; Author: Tom Willemse <tom@ryuslash.org>
;; Keywords: local
-;; Version: 2021.1123.002828
+;; Version: 2022.0401.184320
;; Package-Requires: (groovy-mode oni-embrace groovy-imports rainbow-delimiters jenkinsfile-mode)
;; This program is free software; you can redistribute it and/or modify
@@ -34,8 +34,41 @@
(setq-local comment-auto-fill-only-comments t)
(auto-fill-mode))
+(defconst oni-groovy--regex-defun-start
+ (rx line-start
+ (minimal-match (zero-or-more space))
+ "def "
+ (minimal-match (one-or-more alnum))
+ (minimal-match (zero-or-more space))
+ "("))
+
+(defun oni-groovy-beginning-of-defun ()
+ (interactive)
+ (when (not (region-active-p))
+ (push-mark))
+ (let ((case-fold-search t))
+ (when (re-search-backward oni-groovy--regex-defun-start nil t)
+ t)))
+
+(defun oni-groovy-end-of-defun ()
+ (interactive)
+ (when (not (region-active-p))
+ (push-mark))
+ (let ((case-fold-search t))
+ (when (or (looking-at oni-groovy--regex-defun-start)
+ (re-search-backward oni-groovy--regex-defun-start nil t))
+ (search-forward "{")
+ (forward-char -1)
+ (forward-sexp)
+ (forward-line))))
+
+(defun oni-groovy-setup-defun-navigation ()
+ (setq-local beginning-of-defun-function #'oni-groovy-beginning-of-defun
+ end-of-defun-function #'oni-groovy-end-of-defun))
+
(define-key groovy-mode-map (kbd "M-I") 'groovy-imports-add-import-dwim)
+(add-hook 'groovy-mode-hook #'oni-groovy-setup-defun-navigation)
(add-hook 'groovy-mode-hook 'display-fill-column-indicator-mode)
(add-hook 'groovy-mode-hook 'electric-indent-local-mode)
(add-hook 'groovy-mode-hook 'electric-pair-local-mode)