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.
Great little function - thank you! Next step would be to create one that recursively traverses a directory applies this to every .clj file found :)
ReplyDeleteThanks! An improved version of this function, called clojure-update-ns, has been integrated into the latest clojure-mode.el, available at https://github.com/technomancy/clojure-mode
ReplyDelete