@@ -223,6 +223,8 @@ Out-of-the box clojure-mode understands lein, boot and gradle."
223223 (define-key map (kbd " #" ) #'clojure-convert-collection-to-set )
224224 (define-key map (kbd " C-i" ) #'clojure-cycle-if )
225225 (define-key map (kbd " i" ) #'clojure-cycle-if )
226+ (define-key map (kbd " C-w" ) #'clojure-cycle-when )
227+ (define-key map (kbd " w" ) #'clojure-cycle-when )
226228 (define-key map (kbd " n i" ) #'clojure-insert-ns-form )
227229 (define-key map (kbd " n h" ) #'clojure-insert-ns-form-at-point )
228230 (define-key map (kbd " n u" ) #'clojure-update-ns )
@@ -246,6 +248,7 @@ Out-of-the box clojure-mode understands lein, boot and gradle."
246248 [" Align expression" clojure-align]
247249 [" Cycle privacy" clojure-cycle-privacy]
248250 [" Cycle if, if-not" clojure-cycle-if]
251+ [" Cycle when, when-not" clojure-cycle-when]
249252 (" ns forms"
250253 [" Insert ns form at the top" clojure-insert-ns-form]
251254 [" Insert ns form here" clojure-insert-ns-form-at-point]
@@ -2094,6 +2097,31 @@ See: https://github.com/clojure-emacs/clj-refactor.el/wiki/cljr-cycle-if"
20942097 (forward-sexp 2 )
20952098 (transpose-sexps 1 )))))
20962099
2100+ (defun clojure--goto-when ()
2101+ " Find the first surrounding when or when-not expression."
2102+ (when (in-string-p )
2103+ (while (or (not (looking-at " (" ))
2104+ (in-string-p ))
2105+ (backward-char )))
2106+ (while (not (looking-at " \\ ((when \\ )\\ |\\ ((when-not \\ )" ))
2107+ (condition-case nil
2108+ (backward-up-list )
2109+ (scan-error (user-error " No when or when-not found" )))))
2110+
2111+ ;;;### autoload
2112+ (defun clojure-cycle-when ()
2113+ " Change a surrounding when to when-not, or vice-versa."
2114+ (interactive )
2115+ (save-excursion
2116+ (clojure--goto-when)
2117+ (cond
2118+ ((looking-at " (when-not" )
2119+ (forward-char 9 )
2120+ (delete-char -4 ))
2121+ ((looking-at " (when" )
2122+ (forward-char 5 )
2123+ (insert " -not" )))))
2124+
20972125; ;; let related stuff
20982126
20992127(defvar clojure--let-regexp
0 commit comments