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

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

[nongnu] elpa/nix-mode e298244f55 222/500: Add nix-search.el


From: ELPA Syncer
Subject: [nongnu] elpa/nix-mode e298244f55 222/500: Add nix-search.el
Date: Sat, 29 Jan 2022 08:27:08 -0500 (EST)

branch: elpa/nix-mode
commit e298244f55fbe58b492e44a975b1a33a7b816ffa
Author: Matthew Bauer <matthew.bauer@obsidian.systems>
Commit: Matthew Bauer <matthew.bauer@obsidian.systems>

    Add nix-search.el
---
 nix-search.el | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/nix-search.el b/nix-search.el
new file mode 100644
index 0000000000..f82f3cc3d3
--- /dev/null
+++ b/nix-search.el
@@ -0,0 +1,48 @@
+;;; nix-search.el -- run nix commands in Emacs -*- lexical-binding: t -*-
+
+;; Author: Matthew Bauer <mjbauer95@gmail.com>
+;; Homepage: https://github.com/NixOS/nix-mode
+;; Keywords: nix
+
+;; This file is NOT part of GNU Emacs.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'nix)
+(require 'json)
+
+;;;###autoload
+(defun nix-search (&optional search nix-file)
+  "Run nix search.
+SEARCH a search term to use.
+NIX-FILE a Nix expression to search in."
+  (interactive)
+  (unless search (setq search ""))
+  (unless nix-file (setq nix-file "<nixpkgs>"))
+  (let ((stdout (generate-new-buffer "nix search"))
+       result)
+    (call-process nix-executable nil (list stdout nil) nil
+                 "search" "--json" "-f" nix-file search)
+    (with-current-buffer stdout
+      (when (eq (buffer-size) 0)
+       (error "Error: nix search %s failed to produce any output" search))
+      (goto-char (point-min))
+      (setq result (json-read)))
+    (kill-buffer stdout)
+    (when (called-interactively-p 'any)
+      (let ((display (generate-new-buffer "*nix search*")))
+       (with-current-buffer display
+         (dolist (entry result)
+           (widget-insert
+            (format "name: %s\nversion: %s\ndescription: %s\n\n"
+                    (alist-get 'pkgName (cdr entry))
+                    (alist-get 'version (cdr entry))
+                    (alist-get 'description (cdr entry)))))
+         )
+       (display-buffer display 'display-buffer-pop-up-window)))
+    result))
+
+(provide 'nix-search)
+;;; nix-search.el ends here



reply via email to

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