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

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

[nongnu] elpa/nix-mode fe00d5930b 423/500: Merge pull request #119 from


From: ELPA Syncer
Subject: [nongnu] elpa/nix-mode fe00d5930b 423/500: Merge pull request #119 from NixOS/derived-nix-drv-mode
Date: Sat, 29 Jan 2022 08:27:51 -0500 (EST)

branch: elpa/nix-mode
commit fe00d5930b22c56e12a20c4b27ad97e70ebea451
Merge: 53ea839a52 aef98227cc
Author: Matthew Bauer <mjbauer95@gmail.com>
Commit: GitHub <noreply@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



reply via email to

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