emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/nix-mode cc60a0d027 417/500: Make nix-drv-mode a derived-m


From: ELPA Syncer
Subject: [nongnu] elpa/nix-mode cc60a0d027 417/500: Make nix-drv-mode a derived-mode of javascript-mode
Date: Sat, 29 Jan 2022 08:27:51 -0500 (EST)

branch: elpa/nix-mode
commit cc60a0d027c17f0ae659e28eb6f070935e792e4d
Author: Matthew Bauer <mjbauer95@gmail.com>
Commit: Matthew Bauer <mjbauer95@gmail.com>

    Make nix-drv-mode a derived-mode of javascript-mode
    
    This makes nix-drv-mode derived from javascript-mode. Cleanup is done
    on change major mode. Cleanup can also be done manually via
    nix-drv-mode-dejsonify-buffer.
---
 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 c9b253be6b..480f19c939 100644
--- a/nix-drv-mode.el
+++ b/nix-drv-mode.el
@@ -19,30 +19,33 @@
 (require 'javascript-mode)
 (require 'nix)
 
-(defvar-local nix-drv-mode nil)
-
 ;;;###autoload
-(defun nix-drv-mode ()
+(define-derived-mode nix-drv-mode javascript-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))))
-        (javascript-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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]