branch: elpa/nix-mode commit fe00d5930b22c56e12a20c4b27ad97e70ebea451 Merge: 53ea839a52 aef98227cc Author: Matthew Bauer <mjbaue...@gmail.com> Commit: GitHub <nore...@github.com>
Merge pull request #119 from NixOS/derived-nix-drv-mode Make nix-drv-mode a derived-mode of javascript-mode --- nix-drv-mode.el | 47 +++++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/nix-drv-mode.el b/nix-drv-mode.el index 12223365d8..b8e9f1896c 100644 --- a/nix-drv-mode.el +++ b/nix-drv-mode.el @@ -19,30 +19,33 @@ (require 'js) (require 'nix) -(defvar-local nix-drv-mode nil) - ;;;###autoload -(defun nix-drv-mode () +(define-derived-mode nix-drv-mode js-mode "Nix-Derivation" "Pretty print Nix’s .drv files." - (interactive) - (when (string-match (format "^%s/" nix-store-dir) (buffer-file-name)) - (if nix-drv-mode - (progn - (erase-buffer) - (insert-file-contents (buffer-file-name)) - (setq nix-drv-mode nil) - (set-buffer-modified-p nil) - (read-only-mode nil)) - (let ((inhibit-read-only t)) - (setq nix-drv-mode t) - (erase-buffer) - (insert (shell-command-to-string - (format "%s show-derivation \"%s\"" - nix-executable - (buffer-file-name)))) - (js-mode) - (set-buffer-modified-p nil) - (read-only-mode 1))))) + (let ((inhibit-read-only t)) + (erase-buffer) + (insert (shell-command-to-string + (format "%s show-derivation \"%s\"" + nix-executable + (buffer-file-name)))) + (set-buffer-modified-p nil) + (read-only-mode 1)) + + (add-hook 'change-major-mode-hook #'nix-drv-mode-dejsonify-buffer nil t)) + +(defun nix-drv-mode-dejsonify-buffer () + "Restore nix-drv-mode when switching to another mode." + + (remove-hook 'change-major-mode-hook #'nix-drv-mode-dejsonify-buffer t) + + (let ((inhibit-read-only t)) + (erase-buffer) + (insert-file-contents (buffer-file-name)) + (set-buffer-modified-p nil) + (read-only-mode nil))) + +;;;###autoload +(add-to-list 'auto-mode-alist '("\\.drv\\'" . nix-drv-mode)) (provide 'nix-drv-mode) ;;; nix-drv-mode.el ends here