This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defun clojure-correct-ns | |
() | |
"Returns the namespace name that the file should have." | |
(let* ((nsname ()) | |
(dirs (reverse (split-string (buffer-file-name) "/"))) | |
(aftersrc nil)) | |
(dolist (dir dirs) | |
(when (not aftersrc) | |
(if (or (string= dir "src") (string= dir "test")) | |
(setq aftersrc t) | |
(setq nsname (append nsname (list dir ".")))))) | |
(when nsname | |
(replace-regexp-in-string "_" "-" (substring (apply 'concat (reverse nsname)) 1 -4))))) | |
(defun clojure-update-ns | |
() | |
"Updates the namespace of the current buffer. Useful if a file has been renamed." | |
(interactive) | |
(let ((nsname (clojure-correct-ns))) | |
(when nsname | |
(clojure-find-ns) ;; function defined in clojure-mode | |
(replace-match nsname nil nil nil 4)))) | |
M-x clojure-update-ns
It assumes clojure-mode is already loaded.